From 5f3ca93140a9ff438bab6d4ba54ce4d79e25bae4 Mon Sep 17 00:00:00 2001 From: mrholek Date: Sat, 11 Jan 2025 14:33:36 +0100 Subject: [PATCH 01/25] build: update ESLint to v9 and flat configuration --- .eslintignore | 8 - .eslintrc.json | 235 ----- eslint.config.mjs | 228 ++++ package-lock.json | 2583 +++++++++++++++++++++++++++++++++++++-------- package.js | 2 +- package.json | 11 +- 6 files changed, 2374 insertions(+), 693 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 834cb2410f..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -**/*.min.js -**/dist/ -**/vendor/ -/_gh_pages/ -/js/coverage/ -/docs/content/_index.html -/docs/static/sw.js -/docs/layouts/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2816a21643..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "root": true, - "extends": [ - "plugin:import/errors", - "plugin:import/warnings", - "plugin:unicorn/recommended", - "xo", - "xo/browser" - ], - "rules": { - "arrow-body-style": "off", - "capitalized-comments": "off", - "comma-dangle": [ - "error", - "never" - ], - "import/extensions": [ - "error", - "ignorePackages", - { - "js": "always" - } - ], - "import/first": "error", - "import/newline-after-import": "error", - "import/no-absolute-path": "error", - "import/no-amd": "error", - "import/no-cycle": [ - "error", - { - "ignoreExternal": true - } - ], - "import/no-duplicates": "error", - "import/no-extraneous-dependencies": "error", - "import/no-mutable-exports": "error", - "import/no-named-as-default": "error", - "import/no-named-as-default-member": "error", - "import/no-named-default": "error", - "import/no-self-import": "error", - "import/no-unassigned-import": [ - "error" - ], - "import/no-useless-path-segments": "error", - "import/order": "error", - "indent": [ - "error", - 2, - { - "MemberExpression": "off", - "SwitchCase": 1 - } - ], - "logical-assignment-operators": "off", - "max-params": [ - "warn", - 5 - ], - "multiline-ternary": [ - "error", - "always-multiline" - ], - "new-cap": [ - "error", - { - "properties": false - } - ], - "no-console": "error", - "no-negated-condition": "off", - "object-curly-spacing": [ - "error", - "always" - ], - "operator-linebreak": [ - "error", - "after" - ], - "prefer-object-has-own": "off", - "prefer-template": "error", - "semi": [ - "error", - "never" - ], - "strict": "error", - "unicorn/explicit-length-check": "off", - "unicorn/filename-case": "off", - "unicorn/no-anonymous-default-export": "off", - "unicorn/no-array-callback-reference": "off", - "unicorn/no-array-method-this-argument": "off", - "unicorn/no-null": "off", - "unicorn/no-typeof-undefined": "off", - "unicorn/no-unused-properties": "error", - "unicorn/numeric-separators-style": "off", - "unicorn/prefer-array-flat": "off", - "unicorn/prefer-at": "off", - "unicorn/prefer-dom-node-dataset": "off", - "unicorn/prefer-module": "off", - "unicorn/prefer-query-selector": "off", - "unicorn/prefer-spread": "off", - "unicorn/prefer-string-raw": "off", - "unicorn/prefer-string-replace-all": "off", - "unicorn/prefer-structured-clone": "off", - "unicorn/prevent-abbreviations": "off" - }, - "overrides": [ - { - "files": [ - "build/**" - ], - "env": { - "browser": false, - "node": true - }, - "parserOptions": { - "sourceType": "module" - }, - "rules": { - "no-console": "off", - "unicorn/prefer-top-level-await": "off" - } - }, - { - "files": [ - "js/**" - ], - "parserOptions": { - "sourceType": "module" - } - }, - { - "files": [ - "js/tests/*.js", - "js/tests/integration/rollup*.js" - ], - "env": { - "node": true - }, - "parserOptions": { - "sourceType": "script" - } - }, - { - "files": [ - "js/tests/unit/**" - ], - "env": { - "jasmine": true - }, - "rules": { - "no-console": "off", - "unicorn/consistent-function-scoping": "off", - "unicorn/no-useless-undefined": "off", - "unicorn/prefer-add-event-listener": "off" - } - }, - { - "files": [ - "js/tests/visual/**" - ], - "plugins": [ - "html" - ], - "settings": { - "html/html-extensions": [ - ".html" - ] - }, - "rules": { - "no-console": "off", - "no-new": "off", - "unicorn/no-array-for-each": "off" - } - }, - { - "files": [ - "scss/tests/**" - ], - "env": { - "node": true - }, - "parserOptions": { - "sourceType": "script" - } - }, - { - "files": [ - "docs/**" - ], - "env": { - "browser": true, - "node": false - }, - "parserOptions": { - "sourceType": "script", - "ecmaVersion": 2019 - }, - "rules": { - "no-new": "off", - "unicorn/no-array-for-each": "off" - } - }, - { - "files": [ - "docs/assets/js/**" - ], - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 2020 - } - }, - { - "files": [ - "**/*.md" - ], - "plugins": [ - "markdown" - ], - "processor": "markdown/markdown" - }, - { - "files": [ - "**/*.md/*.js", - "**/*.md/*.mjs" - ], - "extends": "plugin:markdown/recommended-legacy", - "parserOptions": { - "sourceType": "module" - }, - "rules": { - "unicorn/prefer-node-protocol": "off" - } - } - ] -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..60767fc33d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,228 @@ +import markdown from '@eslint/markdown' +import xo from 'eslint-config-xo' +import xoBrowser from 'eslint-config-xo/browser' +import html from 'eslint-plugin-html' +import eslintPluginImport from 'eslint-plugin-import' +import eslintPluginUnicorn from 'eslint-plugin-unicorn' +import globals from 'globals' + +export default [ + eslintPluginImport.flatConfigs.errors, + eslintPluginImport.flatConfigs.warnings, + eslintPluginUnicorn.configs['flat/recommended'], + ...xo, + ...xoBrowser, + { + ignores: [ + '**/*.min.js', + '**/dist/', + '**/vendor/', + '.babelrc.js', + '_gh_pages/', + 'js/coverage/', + 'docs/static/sw.js', + 'docs/layouts/partials/' + ] + }, + { + rules: { + '@stylistic/comma-dangle': 'off', + '@stylistic/function-paren-newline': 'off', + '@stylistic/indent': 'off', + '@stylistic/indent-binary-ops': 'off', + '@stylistic/jsx-quotes': 'off', + '@stylistic/max-len': 'off', + '@stylistic/object-curly-spacing': 'off', + '@stylistic/operator-linebreak': 'off', + '@stylistic/quotes': 'off', + '@stylistic/semi': 'off', + 'arrow-body-style': 'off', + 'capitalized-comments': 'off', + 'comma-dangle': ['error', 'never'], + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'always' + } + ], + 'import/first': 'error', + 'import/newline-after-import': 'error', + 'import/no-absolute-path': 'error', + 'import/no-amd': 'error', + 'import/no-cycle': [ + 'error', + { + ignoreExternal: true + } + ], + 'import/no-duplicates': 'error', + 'import/no-extraneous-dependencies': 'error', + 'import/no-mutable-exports': 'error', + 'import/no-named-as-default': 'error', + 'import/no-named-as-default-member': 'error', + 'import/no-named-default': 'error', + 'import/no-self-import': 'error', + 'import/no-unassigned-import': ['error'], + 'import/no-useless-path-segments': 'error', + 'import/order': 'error', + indent: [ + 'error', + 2, + { + MemberExpression: 'off', + SwitchCase: 1 + } + ], + 'logical-assignment-operators': 'off', + 'max-params': ['warn', 5], + 'multiline-ternary': ['error', 'always-multiline'], + 'new-cap': [ + 'error', + { + properties: false + } + ], + 'no-console': 'error', + 'no-negated-condition': 'off', + 'object-curly-spacing': ['error', 'always'], + 'operator-linebreak': ['error', 'after'], + 'prefer-object-has-own': 'off', + 'prefer-template': 'error', + semi: ['error', 'never'], + strict: 'error', + 'unicorn/explicit-length-check': 'off', + 'unicorn/filename-case': 'off', + 'unicorn/no-anonymous-default-export': 'off', + 'unicorn/no-array-callback-reference': 'off', + 'unicorn/no-array-method-this-argument': 'off', + 'unicorn/no-null': 'off', + 'unicorn/no-typeof-undefined': 'off', + 'unicorn/no-unused-properties': 'error', + 'unicorn/numeric-separators-style': 'off', + 'unicorn/prefer-array-flat': 'off', + 'unicorn/prefer-at': 'off', + 'unicorn/prefer-dom-node-dataset': 'off', + 'unicorn/prefer-global-this': 'off', // added to avoid the error: 'Use `globalThis` instead of `window` or `global`' + 'unicorn/prefer-module': 'off', + 'unicorn/prefer-query-selector': 'off', + 'unicorn/prefer-spread': 'off', + 'unicorn/prefer-string-raw': 'off', + 'unicorn/prefer-string-replace-all': 'off', + 'unicorn/prefer-structured-clone': 'off', + 'unicorn/prevent-abbreviations': 'off' + } + }, + { + files: ['**/*.{js,mjs}'], + languageOptions: { + sourceType: 'module' + } + }, + { + files: ['build/**'], + languageOptions: { + globals: { + ...globals.node + }, + sourceType: 'module' + }, + rules: { + 'no-console': 'off', + 'unicorn/prefer-top-level-await': 'off' + } + }, + { + files: ['js/tests/*.js', 'js/tests/integration/rollup*.js'], + languageOptions: { + globals: { + ...globals.jquery, + ...globals.node + }, + sourceType: 'commonjs' // change to 'commonjs' to avoid the error: 'Use the function form of 'use strict'' + } + }, + { + files: ['js/tests/unit/**'], + languageOptions: { + globals: { + ...globals.jasmine, + ...globals.jquery + } + }, + rules: { + 'max-lines': 'off', // added to avoid the error: 'File must not contain more than 1500 lines of code' + 'no-console': 'off', + 'unicorn/consistent-function-scoping': 'off', + 'unicorn/no-useless-undefined': 'off', + 'unicorn/prefer-add-event-listener': 'off' + } + }, + { + files: ['js/tests/visual/**'], + plugins: { + html + }, + settings: { + 'html/html-extensions': ['.html'] + }, + rules: { + 'no-console': 'off', + 'no-new': 'off', + 'unicorn/no-array-for-each': 'off' + } + }, + { + files: ['scss/tests/**'], + languageOptions: { + globals: { + ...globals.node + }, + sourceType: 'commonjs' + } + }, + { + files: ['docs/**'], + languageOptions: { + globals: { + ...globals.browser, + ...Object.fromEntries( + Object.entries(globals.node).map(([key]) => [key, 'off']) + ) + }, + ecmaVersion: 2019, + sourceType: 'script' + }, + rules: { + 'no-new': 'off', + 'unicorn/no-array-for-each': 'off' + } + }, + { + files: ['docs/assets/js/**'], + languageOptions: { + globals: { + ...globals.browser + }, + ecmaVersion: 2020, + sourceType: 'module' + } + }, + { + files: ['**/*.md'], + plugins: { + markdown + }, + processor: 'markdown/markdown' + }, + ...markdown.configs.processor, + { + files: ['**/*.md/*.js', '**/*.md/*.mjs'], + languageOptions: { + sourceType: 'module' + }, + rules: { + 'unicorn/prefer-node-protocol': 'off' + } + } +] diff --git a/package-lock.json b/package-lock.json index 2bca824625..e7fca308c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@babel/core": "^7.26.0", "@babel/preset-env": "^7.26.0", "@docsearch/js": "^3.8.2", + "@eslint/markdown": "^6.2.1", "@popperjs/core": "^2.11.8", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^28.0.2", @@ -31,13 +32,13 @@ "clean-css-cli": "^5.6.3", "clipboard": "^2.0.11", "cross-env": "^7.0.3", - "eslint": "^8.57.0", - "eslint-config-xo": "^0.45.0", + "eslint": "^9.17.0", + "eslint-config-xo": "^0.46.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-markdown": "^5.1.0", - "eslint-plugin-unicorn": "^55.0.0", + "eslint-plugin-unicorn": "^56.0.1", "find-unused-sass-variables": "^6.0.0", + "globals": "^15.14.0", "globby": "^14.0.2", "hammer-simulator": "0.0.1", "hugo-bin": "^0.137.1", @@ -1034,6 +1035,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", @@ -1880,6 +1891,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", @@ -2050,26 +2071,54 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2077,65 +2126,217 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/markdown": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.2.1.tgz", + "integrity": "sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/plugin-kit": "^0.2.0", + "mdast-util-from-markdown": "^2.0.1", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/markdown/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@eslint/markdown/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/markdown/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@eslint/markdown/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@eslint/markdown/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2152,13 +2353,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2897,6 +3104,52 @@ "dev": true, "license": "MIT" }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.12.1.tgz", + "integrity": "sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@stylistic/stylelint-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz", @@ -2973,6 +3226,16 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -2987,6 +3250,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -2994,15 +3264,12 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } + "license": "MIT" }, "node_modules/@types/node": { "version": "22.5.0", @@ -3035,69 +3302,215 @@ "dev": true, "license": "MIT" }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@xhmikosr/archive-type": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz", - "integrity": "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz", + "integrity": "sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==", "dev": true, "license": "MIT", "dependencies": { - "file-type": "^19.0.0" + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1" }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@xhmikosr/bin-check": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz", - "integrity": "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==", + "node_modules/@typescript-eslint/types": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.1.tgz", + "integrity": "sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==", "dev": true, "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "isexe": "^2.0.0" - }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@xhmikosr/bin-wrapper": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz", - "integrity": "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz", + "integrity": "sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==", "dev": true, "license": "MIT", "dependencies": { - "@xhmikosr/bin-check": "^7.0.3", - "@xhmikosr/downloader": "^15.0.1", - "@xhmikosr/os-filter-obj": "^3.0.0", - "bin-version-check": "^5.1.0" + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@xhmikosr/decompress": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.0.1.tgz", - "integrity": "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "@xhmikosr/decompress-tar": "^8.0.1", - "@xhmikosr/decompress-tarbz2": "^8.0.1", - "@xhmikosr/decompress-targz": "^8.0.1", - "@xhmikosr/decompress-unzip": "^7.0.0", - "graceful-fs": "^4.2.11", - "make-dir": "^4.0.0", + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.1.tgz", + "integrity": "sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/typescript-estree": "8.19.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz", + "integrity": "sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.19.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@xhmikosr/archive-type": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz", + "integrity": "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^19.0.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/@xhmikosr/bin-check": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz", + "integrity": "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "isexe": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/bin-wrapper": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz", + "integrity": "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/bin-check": "^7.0.3", + "@xhmikosr/downloader": "^15.0.1", + "@xhmikosr/os-filter-obj": "^3.0.0", + "bin-version-check": "^5.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.0.1.tgz", + "integrity": "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/decompress-tar": "^8.0.1", + "@xhmikosr/decompress-tarbz2": "^8.0.1", + "@xhmikosr/decompress-targz": "^8.0.1", + "@xhmikosr/decompress-unzip": "^7.0.0", + "graceful-fs": "^4.2.11", + "make-dir": "^4.0.0", "strip-dirs": "^3.0.0" }, "engines": { @@ -3282,9 +3695,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -4206,6 +4619,17 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4221,39 +4645,6 @@ "node": ">=4" } }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -4597,9 +4988,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -4744,6 +5135,31 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decode-named-character-reference/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -4886,6 +5302,16 @@ "node": ">= 0.6.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -4897,6 +5323,20 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -4937,19 +5377,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -5330,78 +5757,84 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-xo": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.45.0.tgz", - "integrity": "sha512-T30F2S2HKKmr/RoHopKE7wMUMWrsLMab1qFl2WyFJjETbD+l7p4hSQWpTVGW7TEbSKG1QBekwf6Jn9ZDPA6thA==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.46.0.tgz", + "integrity": "sha512-mjQUhdTCLQwHUFKf1hhSx1FFhm2jllr4uG2KjaW7gZHGAbjKoSypvo1eQvFk17lHx3bztYjZDDXQmkAZyaSlAg==", "dev": true, "license": "MIT", "dependencies": { - "confusing-browser-globals": "1.0.11" + "@stylistic/eslint-plugin": "^2.6.1", + "confusing-browser-globals": "1.0.11", + "globals": "^15.3.0" }, "engines": { - "node": ">=18" + "node": ">=18.18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" }, "peerDependencies": { - "eslint": ">=8.56.0" + "eslint": ">=9.8.0" } }, "node_modules/eslint-import-resolver-node": { @@ -5524,36 +5957,20 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-markdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-5.1.0.tgz", - "integrity": "sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, "node_modules/eslint-plugin-unicorn": { - "version": "55.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-55.0.0.tgz", - "integrity": "sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==", + "version": "56.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz", + "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.7", "@eslint-community/eslint-utils": "^4.4.0", "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", - "core-js-compat": "^3.37.0", - "esquery": "^1.5.0", - "globals": "^15.7.0", + "core-js-compat": "^3.38.1", + "esquery": "^1.6.0", + "globals": "^15.9.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", "jsesc": "^3.0.2", @@ -5561,7 +5978,7 @@ "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "semver": "^7.6.1", + "semver": "^7.6.3", "strip-indent": "^3.0.0" }, "engines": { @@ -5574,19 +5991,6 @@ "eslint": ">=8.56.0" } }, - "node_modules/eslint-plugin-unicorn/node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-plugin-unicorn/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -5601,9 +6005,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5611,7 +6015,7 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5696,6 +6100,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5709,26 +6126,10 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -5748,32 +6149,32 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6000,16 +6401,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-type": { @@ -6248,18 +6649,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -6620,13 +7020,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -6743,13 +7146,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -7205,32 +7601,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -7375,17 +7745,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -7435,17 +7794,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7492,16 +7840,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -8551,6 +8889,17 @@ "node": ">=8.0" } }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -8614,106 +8963,1351 @@ "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-footnote/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-strikethrough/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-table/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm-task-list-item/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-gfm/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm/node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/mdast-util-gfm/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, - "license": "CC0-1.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, - "engines": { - "node": ">= 0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "node_modules/micromark-util-subtokenize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", "dev": true, "funding": [ { @@ -8727,10 +10321,46 @@ ], "license": "MIT", "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -9397,25 +11027,6 @@ "node": ">=6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -12151,13 +13762,6 @@ "b4a": "^1.6.4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thenby": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", @@ -12240,6 +13844,19 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/ts-api-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -12397,6 +14014,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/ua-parser-js": { "version": "0.7.38", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", @@ -12532,20 +14164,72 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-visit-parents/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/unist-util-visit/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -12988,6 +14672,17 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.js b/package.js index 40551f9926..03aaccb9b1 100644 --- a/package.js +++ b/package.js @@ -1,6 +1,6 @@ // package metadata file for Meteor.js -/* eslint-env meteor */ +/* global Package */ Package.describe({ name: 'coreui:coreui', // https://atmospherejs.com/coreui/coreui diff --git a/package.json b/package.json index b3ea2943ac..6c7dcdb24c 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.mjs --sourcemap", "js-compile-bundle-bootstrap": "rollup --environment BOOTSTRAP:true,BUNDLE:true --config build/rollup.config.mjs --sourcemap", "js-compile-plugins": "node build/build-plugins.mjs", - "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives --ext .html,.js,.mjs,.md .", + "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives", "js-minify": "npm-run-all --aggregate-output --parallel js-minify-*", "js-minify-standalone": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/coreui.js.map,includeSources,url=coreui.min.js.map\" --output dist/js/coreui.min.js dist/js/coreui.js", "js-minify-standalone-esm": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/js/coreui.esm.js.map,includeSources,url=coreui.esm.min.js.map\" --output dist/js/coreui.esm.min.js dist/js/coreui.esm.js", @@ -104,6 +104,7 @@ "@babel/core": "^7.26.0", "@babel/preset-env": "^7.26.0", "@docsearch/js": "^3.8.2", + "@eslint/markdown": "^6.2.1", "@popperjs/core": "^2.11.8", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^28.0.2", @@ -116,13 +117,13 @@ "clean-css-cli": "^5.6.3", "clipboard": "^2.0.11", "cross-env": "^7.0.3", - "eslint": "^8.57.0", - "eslint-config-xo": "^0.45.0", + "eslint": "^9.17.0", + "eslint-config-xo": "^0.46.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-markdown": "^5.1.0", - "eslint-plugin-unicorn": "^55.0.0", + "eslint-plugin-unicorn": "^56.0.1", "find-unused-sass-variables": "^6.0.0", + "globals": "^15.14.0", "globby": "^14.0.2", "hammer-simulator": "0.0.1", "hugo-bin": "^0.137.1", From f475e54c8cb946a0b5f26f65464206e63a69a780 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 17:42:14 +0100 Subject: [PATCH 02/25] refactor: migrate `@import`'s to `@forwards`'s and `@use`'s --- scss/_accordion.import.scss | 1 + scss/_accordion.scss | 9 + scss/_alert.import.scss | 1 + scss/_alert.scss | 4 + scss/_avatar.import.scss | 1 + scss/_avatar.scss | 5 + scss/_badge.import.scss | 1 + scss/_badge.scss | 4 + scss/_banner.scss | 7 + scss/_breadcrumb.import.scss | 1 + scss/_breadcrumb.scss | 6 + scss/_button-group.import.scss | 1 + scss/_button-group.scss | 5 + scss/_buttons.import.scss | 1 + scss/_buttons.scss | 69 +++-- scss/_callout.import.scss | 1 + scss/_callout.scss | 4 + scss/_card.import.scss | 1 + scss/_card.scss | 6 + scss/_carousel.import.scss | 1 + scss/_carousel.scss | 6 + scss/_close.import.scss | 1 + scss/_close.scss | 5 + scss/_containers.import.scss | 1 + scss/_containers.scss | 4 + scss/_dropdown.import.scss | 1 + scss/_dropdown.scss | 9 + scss/_footer.import.scss | 1 + scss/_footer.scss | 2 + scss/_forms.import.scss | 9 + scss/_forms.scss | 18 +- scss/_functions.import.scss | 1 + scss/_functions.scss | 373 +--------------------------- scss/_grid.import.scss | 1 + scss/_grid.scss | 7 +- scss/_header.import.scss | 1 + scss/_header.scss | 8 + scss/_helpers.import.scss | 1 + scss/_helpers.scss | 24 +- scss/_icon.import.scss | 1 + scss/_icon.scss | 3 + scss/_images.import.scss | 1 + scss/_images.scss | 6 + scss/_list-group.import.scss | 1 + scss/_list-group.scss | 5 + scss/_maps.import.scss | 1 + scss/_maps.scss | 13 +- scss/_mixins.import.scss | 1 + scss/_mixins.scss | 58 ++--- scss/_modal.import.scss | 1 + scss/_modal.scss | 7 + scss/_nav.import.scss | 1 + scss/_nav.scss | 7 + scss/_navbar.import.scss | 1 + scss/_navbar.scss | 12 + scss/_offcanvas.import.scss | 1 + scss/_offcanvas.scss | 6 + scss/_pagination.import.scss | 1 + scss/_pagination.scss | 9 + scss/_placeholders.import.scss | 1 + scss/_placeholders.scss | 2 + scss/_popover.import.scss | 1 + scss/_popover.scss | 6 + scss/_progress.import.scss | 1 + scss/_progress.scss | 7 + scss/_reboot.import.scss | 1 + scss/_reboot.scss | 5 + scss/_root.import.scss | 1 + scss/_root.scss | 7 + scss/_sidebar.import.scss | 3 + scss/_sidebar.scss | 6 +- scss/_spinners.import.scss | 1 + scss/_spinners.scss | 2 + scss/_tables.import.scss | 1 + scss/_tables.scss | 4 + scss/_toasts.import.scss | 1 + scss/_toasts.scss | 5 + scss/_tooltip.import.scss | 1 + scss/_tooltip.scss | 6 + scss/_transitions.import.scss | 1 + scss/_transitions.scss | 3 + scss/_type.import.scss | 1 + scss/_type.scss | 6 + scss/_utilities.import.scss | 1 + scss/_utilities.scss | 6 +- scss/_variables-dark.import.scss | 1 + scss/_variables-dark.scss | 3 + scss/_variables.import.scss | 1 + scss/_variables.scss | 14 +- scss/coreui-grid.rtl.scss | 8 +- scss/coreui-grid.scss | 33 +-- scss/coreui-reboot.rtl.scss | 8 +- scss/coreui-reboot.scss | 17 +- scss/coreui-utilities.rtl.scss | 8 +- scss/coreui-utilities.scss | 22 +- scss/coreui.rtl.scss | 8 +- scss/coreui.scss | 99 ++++---- scss/forms/_floating-labels.scss | 5 + scss/forms/_form-check.scss | 8 + scss/forms/_form-control.scss | 7 + scss/forms/_form-range.scss | 7 + scss/forms/_form-select.scss | 12 +- scss/forms/_form-text.scss | 3 + scss/forms/_input-group.scss | 5 + scss/forms/_labels.scss | 4 + scss/forms/_validation.scss | 3 + scss/functions/_assert.scss | 29 +++ scss/functions/_color-contrast.scss | 60 +++++ scss/functions/_color.scss | 30 +++ scss/functions/_escape-svg.scss | 21 ++ scss/functions/_maps.scss | 52 ++++ scss/functions/_math.scss | 82 ++++++ scss/functions/_str-replace.scss | 17 ++ scss/helpers/_clearfix.scss | 2 + scss/helpers/_color-bg.scss | 6 + scss/helpers/_colored-links.scss | 4 + scss/helpers/_focus-ring.scss | 2 + scss/helpers/_icon-link.scss | 3 + scss/helpers/_position.scss | 3 + scss/helpers/_ratio.scss | 3 + scss/helpers/_stretched-link.scss | 2 + scss/helpers/_text-truncation.scss | 2 + scss/helpers/_visually-hidden.scss | 2 + scss/helpers/_vr.scss | 2 + scss/mixins/_alert.scss | 2 + scss/mixins/_avatar.scss | 2 + scss/mixins/_backdrop.scss | 2 + scss/mixins/_banner.scss | 7 - scss/mixins/_border-radius.scss | 3 + scss/mixins/_box-shadow.scss | 2 + scss/mixins/_breakpoints.scss | 2 + scss/mixins/_buttons.scss | 102 ++++---- scss/mixins/_caret.scss | 3 + scss/mixins/_color-mode.scss | 2 + scss/mixins/_container.scss | 2 + scss/mixins/_deprecate.scss | 2 + scss/mixins/_forms.scss | 7 + scss/mixins/_gradients.scss | 2 + scss/mixins/_grid.scss | 8 +- scss/mixins/_list-group.scss | 1 + scss/mixins/_lists.scss | 2 + scss/mixins/_ltr-rtl.scss | 3 + scss/mixins/_pagination.scss | 3 + scss/mixins/_reset-text.scss | 3 + scss/mixins/_table-variants.scss | 3 + scss/mixins/_transition.scss | 2 + scss/mixins/_utilities.import.scss | 1 + scss/mixins/_utilities.scss | 9 + scss/sidebar/_sidebar-narrow.scss | 5 + scss/sidebar/_sidebar-nav.scss | 5 + scss/sidebar/_sidebar.scss | 9 + scss/test2.scss | 3 + scss/utilities/_api.import.scss | 1 + scss/utilities/_api.scss | 6 + 154 files changed, 1001 insertions(+), 619 deletions(-) create mode 100644 scss/_accordion.import.scss create mode 100644 scss/_alert.import.scss create mode 100644 scss/_avatar.import.scss create mode 100644 scss/_badge.import.scss create mode 100644 scss/_banner.scss create mode 100644 scss/_breadcrumb.import.scss create mode 100644 scss/_button-group.import.scss create mode 100644 scss/_buttons.import.scss create mode 100644 scss/_callout.import.scss create mode 100644 scss/_card.import.scss create mode 100644 scss/_carousel.import.scss create mode 100644 scss/_close.import.scss create mode 100644 scss/_containers.import.scss create mode 100644 scss/_dropdown.import.scss create mode 100644 scss/_footer.import.scss create mode 100644 scss/_forms.import.scss create mode 100644 scss/_functions.import.scss create mode 100644 scss/_grid.import.scss create mode 100644 scss/_header.import.scss create mode 100644 scss/_helpers.import.scss create mode 100644 scss/_icon.import.scss create mode 100644 scss/_images.import.scss create mode 100644 scss/_list-group.import.scss create mode 100644 scss/_maps.import.scss create mode 100644 scss/_mixins.import.scss create mode 100644 scss/_modal.import.scss create mode 100644 scss/_nav.import.scss create mode 100644 scss/_navbar.import.scss create mode 100644 scss/_offcanvas.import.scss create mode 100644 scss/_pagination.import.scss create mode 100644 scss/_placeholders.import.scss create mode 100644 scss/_popover.import.scss create mode 100644 scss/_progress.import.scss create mode 100644 scss/_reboot.import.scss create mode 100644 scss/_root.import.scss create mode 100644 scss/_sidebar.import.scss create mode 100644 scss/_spinners.import.scss create mode 100644 scss/_tables.import.scss create mode 100644 scss/_toasts.import.scss create mode 100644 scss/_tooltip.import.scss create mode 100644 scss/_transitions.import.scss create mode 100644 scss/_type.import.scss create mode 100644 scss/_utilities.import.scss create mode 100644 scss/_variables-dark.import.scss create mode 100644 scss/_variables.import.scss create mode 100644 scss/functions/_assert.scss create mode 100644 scss/functions/_color-contrast.scss create mode 100644 scss/functions/_color.scss create mode 100644 scss/functions/_escape-svg.scss create mode 100644 scss/functions/_maps.scss create mode 100644 scss/functions/_math.scss create mode 100644 scss/functions/_str-replace.scss delete mode 100644 scss/mixins/_banner.scss create mode 100644 scss/mixins/_utilities.import.scss create mode 100644 scss/test2.scss create mode 100644 scss/utilities/_api.import.scss diff --git a/scss/_accordion.import.scss b/scss/_accordion.import.scss new file mode 100644 index 0000000000..65bc6f97af --- /dev/null +++ b/scss/_accordion.import.scss @@ -0,0 +1 @@ +@forward "accordion"; diff --git a/scss/_accordion.scss b/scss/_accordion.scss index 0c36f492bf..62f3b123f8 100644 --- a/scss/_accordion.scss +++ b/scss/_accordion.scss @@ -1,3 +1,12 @@ +@use "variables" as *; +@use "variables-dark" as *; +@use "functions/escape-svg" as *; +@use "mixins/border-radius" as *; +@use "mixins/color-mode" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + // // Base styles // diff --git a/scss/_alert.import.scss b/scss/_alert.import.scss new file mode 100644 index 0000000000..faaf45081d --- /dev/null +++ b/scss/_alert.import.scss @@ -0,0 +1 @@ +@forward "alert"; diff --git a/scss/_alert.scss b/scss/_alert.scss index 13d88bb6d9..d90b86dba4 100644 --- a/scss/_alert.scss +++ b/scss/_alert.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; + // // Base styles // diff --git a/scss/_avatar.import.scss b/scss/_avatar.import.scss new file mode 100644 index 0000000000..347d5ad64a --- /dev/null +++ b/scss/_avatar.import.scss @@ -0,0 +1 @@ +@forward "avatar"; diff --git a/scss/_avatar.scss b/scss/_avatar.scss index 7c9776788e..972e0bf9d7 100644 --- a/scss/_avatar.scss +++ b/scss/_avatar.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; + .avatar { // scss-docs-start avatar-css-vars --#{$prefix}avatar-width: #{$avatar-width}; diff --git a/scss/_badge.import.scss b/scss/_badge.import.scss new file mode 100644 index 0000000000..97e7f44396 --- /dev/null +++ b/scss/_badge.import.scss @@ -0,0 +1 @@ +@forward "badge"; diff --git a/scss/_badge.scss b/scss/_badge.scss index 0673f97572..4754ccb30d 100644 --- a/scss/_badge.scss +++ b/scss/_badge.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "mixins/gradients" as *; +@use "vendor/rfs" as *; + // Base class // // Requires one of the contextual, color modifier classes for `color` and diff --git a/scss/_banner.scss b/scss/_banner.scss new file mode 100644 index 0000000000..103f2f4409 --- /dev/null +++ b/scss/_banner.scss @@ -0,0 +1,7 @@ +$file: "" !default; + +/*! + * CoreUI #{$file} v5.2.0 (https://coreui.io) + * Copyright (c) 2024 creativeLabs Łukasz Holeczek + * Licensed under MIT (https://github.com/coreui/coreui/blob/main/LICENSE) + */ diff --git a/scss/_breadcrumb.import.scss b/scss/_breadcrumb.import.scss new file mode 100644 index 0000000000..39683620c1 --- /dev/null +++ b/scss/_breadcrumb.import.scss @@ -0,0 +1 @@ +@forward "breadcrumb"; diff --git a/scss/_breadcrumb.scss b/scss/_breadcrumb.scss index 70f277a989..f2b88aa9ab 100644 --- a/scss/_breadcrumb.scss +++ b/scss/_breadcrumb.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "functions/escape-svg" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; +@use "vendor/rfs" as *; + .breadcrumb { // scss-docs-start breadcrumb-css-vars --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x}; diff --git a/scss/_button-group.import.scss b/scss/_button-group.import.scss new file mode 100644 index 0000000000..9e34c905aa --- /dev/null +++ b/scss/_button-group.import.scss @@ -0,0 +1 @@ +@forward "button-group"; diff --git a/scss/_button-group.scss b/scss/_button-group.scss index 40cf95a6b0..00a9665083 100644 --- a/scss/_button-group.scss +++ b/scss/_button-group.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/ltr-rtl" as *; + // Make the div behave like a button .btn-group, .btn-group-vertical { diff --git a/scss/_buttons.import.scss b/scss/_buttons.import.scss new file mode 100644 index 0000000000..73468922fd --- /dev/null +++ b/scss/_buttons.import.scss @@ -0,0 +1 @@ +@forward "buttons"; diff --git a/scss/_buttons.scss b/scss/_buttons.scss index d805505756..5bd7661c23 100644 --- a/scss/_buttons.scss +++ b/scss/_buttons.scss @@ -1,3 +1,14 @@ +@use "variables" as *; +@use "variables-dark" as *; +@use "functions/color" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/buttons" as *; +@use "mixins/color-mode" as *; +@use "mixins/gradients" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + // // Base styles // @@ -134,21 +145,41 @@ } // scss-docs-start btn-variant-loops -@each $state, $variant in $button-variants { - .btn-#{$state} { - @include button-variant($variant); +@each $color, $value in $theme-colors { + .btn-#{$color} { + @if $color == "light" { + @include button-variant( + $value, + $value, + $hover-background: shade-color($value, $btn-hover-bg-shade-amount), + $hover-border: shade-color($value, $btn-hover-border-shade-amount), + $active-background: shade-color($value, $btn-active-bg-shade-amount), + $active-border: shade-color($value, $btn-active-border-shade-amount) + ); + } @else if $color == "dark" { + @include button-variant( + $value, + $value, + $hover-background: tint-color($value, $btn-hover-bg-tint-amount), + $hover-border: tint-color($value, $btn-hover-border-tint-amount), + $active-background: tint-color($value, $btn-active-bg-tint-amount), + $active-border: tint-color($value, $btn-active-border-tint-amount) + ); + } @else { + @include button-variant($value, $value); + } } } -@each $state, $variant in $button-outline-ghost-variants { - .btn-outline-#{$state} { - @include button-outline-variant($variant); +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant($value); } } -@each $state, $variant in $button-outline-ghost-variants { - .btn-ghost-#{$state} { - @include button-ghost-variant($variant); +@each $color, $value in $theme-colors { + .btn-ghost-#{$color} { + @include button-ghost-variant($value); } } // scss-docs-end btn-variant-loops @@ -170,7 +201,7 @@ --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color}; --#{$prefix}btn-disabled-border-color: transparent; --#{$prefix}btn-box-shadow: none; - --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb}; + // --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb}; text-decoration: $link-decoration; @if $enable-gradients { @@ -204,21 +235,21 @@ @if $enable-dark-mode { @include color-mode(dark) { - @each $state, $variant in $button-variants-dark { - .btn-#{$state} { - @include button-variant($variant); + @each $color, $value in $theme-colors-dark { + .btn-#{$color} { + @include button-variant($value, $value); } } - @each $state, $variant in $button-outline-ghost-variants-dark { - .btn-outline-#{$state} { - @include button-outline-variant($variant); + @each $color, $value in $theme-colors-dark { + .btn-outline-#{$color} { + @include button-outline-variant($value); } } - @each $state, $variant in $button-outline-ghost-variants-dark { - .btn-ghost-#{$state} { - @include button-ghost-variant($variant); + @each $color, $value in $theme-colors-dark { + .btn-outline-#{$color} { + @include button-ghost-variant($value); } } } diff --git a/scss/_callout.import.scss b/scss/_callout.import.scss new file mode 100644 index 0000000000..975f078bed --- /dev/null +++ b/scss/_callout.import.scss @@ -0,0 +1 @@ +@use "callout"; diff --git a/scss/_callout.scss b/scss/_callout.scss index 6b5e4e8920..35d7df8c74 100644 --- a/scss/_callout.scss +++ b/scss/_callout.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; + .callout { // scss-docs-start callout-css-vars --#{$prefix}callout-padding-x: #{$callout-padding-x}; diff --git a/scss/_card.import.scss b/scss/_card.import.scss new file mode 100644 index 0000000000..00085495f7 --- /dev/null +++ b/scss/_card.import.scss @@ -0,0 +1 @@ +@forward "card"; diff --git a/scss/_card.scss b/scss/_card.scss index 0485e9f612..d54c26ae7b 100644 --- a/scss/_card.scss +++ b/scss/_card.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/breakpoints" as *; +@use "mixins/ltr-rtl" as *; + // // Base styles // diff --git a/scss/_carousel.import.scss b/scss/_carousel.import.scss new file mode 100644 index 0000000000..6ee7409341 --- /dev/null +++ b/scss/_carousel.import.scss @@ -0,0 +1 @@ +@forward "carousel"; diff --git a/scss/_carousel.scss b/scss/_carousel.scss index a96d7c6bb7..7768ebad4e 100644 --- a/scss/_carousel.scss +++ b/scss/_carousel.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "functions/escape-svg" as *; +@use "mixins/clearfix" as *; +@use "mixins/color-mode" as *; +@use "mixins/transition" as *; + // Notes on the classes: // // 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically) diff --git a/scss/_close.import.scss b/scss/_close.import.scss new file mode 100644 index 0000000000..13ede5120b --- /dev/null +++ b/scss/_close.import.scss @@ -0,0 +1 @@ +@forward "close"; diff --git a/scss/_close.scss b/scss/_close.scss index 06f6a5852c..5c656c5d1a 100644 --- a/scss/_close.scss +++ b/scss/_close.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "functions/escape-svg" 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="#"`. diff --git a/scss/_containers.import.scss b/scss/_containers.import.scss new file mode 100644 index 0000000000..724ca90c03 --- /dev/null +++ b/scss/_containers.import.scss @@ -0,0 +1 @@ +@forward "containers"; diff --git a/scss/_containers.scss b/scss/_containers.scss index 83b31381bf..2c73fd8a3a 100644 --- a/scss/_containers.scss +++ b/scss/_containers.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "mixins/breakpoints" as *; +@use "mixins/container" as *; + // Container widths // // Set the container width, and override it for fixed navbars in media queries. diff --git a/scss/_dropdown.import.scss b/scss/_dropdown.import.scss new file mode 100644 index 0000000000..1fe96c2f8d --- /dev/null +++ b/scss/_dropdown.import.scss @@ -0,0 +1 @@ +@forward "dropdown"; diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss index f8dfaa7a12..a7fa251267 100644 --- a/scss/_dropdown.scss +++ b/scss/_dropdown.scss @@ -1,3 +1,12 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/breakpoints" as *; +@use "mixins/caret" as *; +@use "mixins/gradients" as *; +@use "mixins/ltr-rtl" as *; +@use "vendor/rfs" as *; + // The dropdown wrapper (`
`) .dropup, .dropend, diff --git a/scss/_footer.import.scss b/scss/_footer.import.scss new file mode 100644 index 0000000000..d6535a9fba --- /dev/null +++ b/scss/_footer.import.scss @@ -0,0 +1 @@ +@forward "footer"; diff --git a/scss/_footer.scss b/scss/_footer.scss index 6469d327a8..92a8b195e0 100644 --- a/scss/_footer.scss +++ b/scss/_footer.scss @@ -1,3 +1,5 @@ +@use "variables" as *; + .footer { // scss-docs-start footer-css-vars --#{$prefix}footer-min-height: #{$footer-min-height}; diff --git a/scss/_forms.import.scss b/scss/_forms.import.scss new file mode 100644 index 0000000000..470dd172a9 --- /dev/null +++ b/scss/_forms.import.scss @@ -0,0 +1,9 @@ +@forward "forms/labels"; +@forward "forms/form-text"; +@forward "forms/form-control"; +@forward "forms/form-select"; +@forward "forms/form-check"; +@forward "forms/form-range"; +@forward "forms/floating-labels"; +@forward "forms/input-group"; +@forward "forms/validation"; diff --git a/scss/_forms.scss b/scss/_forms.scss index 7b17d849ac..470dd172a9 100644 --- a/scss/_forms.scss +++ b/scss/_forms.scss @@ -1,9 +1,9 @@ -@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"; +@forward "forms/labels"; +@forward "forms/form-text"; +@forward "forms/form-control"; +@forward "forms/form-select"; +@forward "forms/form-check"; +@forward "forms/form-range"; +@forward "forms/floating-labels"; +@forward "forms/input-group"; +@forward "forms/validation"; diff --git a/scss/_functions.import.scss b/scss/_functions.import.scss new file mode 100644 index 0000000000..039ff30349 --- /dev/null +++ b/scss/_functions.import.scss @@ -0,0 +1 @@ +@forward "functions"; diff --git a/scss/_functions.scss b/scss/_functions.scss index 9d8dc52a49..2c974d0523 100644 --- a/scss/_functions.scss +++ b/scss/_functions.scss @@ -1,366 +1,7 @@ -// Bootstrap functions -// -// Utility mixins and functions for evaluating source code across our variables, maps, and mixins. - -// Ascending -// Used to evaluate Sass maps like our grid breakpoints. -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null or unit($num) == "%" or 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}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// 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); - @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); -} - -// stylelint-disable scss/dollar-variable-pattern -@function rgba-css-var($identifier, $target) { - @if $identifier == "body" and $target == "bg" { - @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity)); - } @if $identifier == "body" and $target == "text" { - @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity)); - } @else { - @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity)); - } -} - -@function map-loop($map, $func, $args...) { - $_map: (); - - @each $key, $value in $map { - // 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))); - } - - $_map: map-merge($_map, ($key: call(get-function($func), $_args...))); - } - - @return $_map; -} -// stylelint-enable scss/dollar-variable-pattern - -@function varify($list) { - $result: null; - @each $entry in $list { - $result: append($result, var(--#{$prefix}#{$entry}), space); - } - @return $result; -} - -// Internal Bootstrap function to turn maps into its negative variant. -// It prefixes the keys with `n` and makes the value negative. -@function negativify-map($map) { - $result: (); - @each $key, $value in $map { - @if $key != 0 { - $result: map-merge($result, ("n" + $key: (-$value))); - } - } - @return $result; -} - -// Get multiple keys from a sass map -@function map-get-multiple($map, $values) { - $result: (); - @each $key, $value in $map { - @if (index($values, $key) != null) { - $result: map-merge($result, ($key: $value)); - } - } - @return $result; -} - -// Merge multiple maps -@function map-merge-multiple($maps...) { - $merged-maps: (); - - @each $map in $maps { - $merged-maps: map-merge($merged-maps, $map); - } - @return $merged-maps; -} - -// Replace `$search` with `$replace` in `$string` -// Used on our SVG icon backgrounds for custom forms. -// -// @author Kitty Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-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; -} - -// See https://codepen.io/kevinweber/pen/dXWoRw -// -// Requires the use of quotes around data URIs. - -@function escape-svg($string) { - @if str-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)}"); - } @else { - $string: str-replace($string, $char, $encoded); - } - } - } - - @return $string; -} - -// Color contrast -// See https://github.com/twbs/bootstrap/pull/30168 - -// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255) -// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern -$_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; - $max-ratio: 0; - $max-ratio-color: null; - - @each $color in $foregrounds { - $contrast-ratio: contrast-ratio($background, $color); - @if $contrast-ratio > $min-contrast-ratio { - @return $color; - } @else if $contrast-ratio > $max-ratio { - $max-ratio: $contrast-ratio; - $max-ratio-color: $color; - } - } - - @warn "Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}..."; - - @return $max-ratio-color; -} - -@function contrast-ratio($background, $foreground: $color-contrast-light) { - $l1: luminance($background); - $l2: luminance(opaque($background, $foreground)); - - @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05)); -} - -// Return WCAG2.2 relative luminance -// See https://www.w3.org/TR/WCAG/#dfn-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) - ); - - @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)); - } - - @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%); -} - -// scss-docs-start color-functions -// Tint a color: mix a color with white -@function tint-color($color, $weight) { - @return mix(white, $color, $weight); -} - -// Shade a color: mix a color with black -@function shade-color($color, $weight) { - @return mix(black, $color, $weight); -} - -// 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 - -// scss-docs-start button-color-functions -@function btn-color($color, $shade, $tint) { - @return if(color-contrast($color) == $color-contrast-light, shade-color($color, $shade), tint-color($color, $tint)); -} - -@function btn-color-map($background, $border-color) { - @return ( - "bg": $background, - "border-color": $border-color, - "color": color-contrast($background), - "hover-bg": btn-color($background, $btn-hover-bg-shade-amount, $btn-hover-bg-tint-amount), - "hover-border-color": btn-color($border-color, $btn-hover-border-shade-amount, $btn-hover-border-tint-amount), - "hover-color": color-contrast(btn-color($background, $btn-hover-bg-shade-amount, $btn-hover-bg-tint-amount)), - "active-bg": btn-color($background, $btn-active-bg-shade-amount, $btn-active-bg-tint-amount), - "active-border-color": btn-color($border-color, $btn-active-border-shade-amount, $btn-active-border-tint-amount), - "active-color": color-contrast(btn-color($border-color, $btn-active-border-shade-amount, $btn-active-border-tint-amount)), - "disabled-bg": $background, - "disabled-border-color": $border-color, - "disabled-color": color-contrast($background), - "shadow": rgba(mix($background, $border-color, 15%), .5) - ); -} - -@function btn-outline-color-map($background) { - @return ( - "color": $background, - "hover-bg": btn-color($background, $btn-hover-bg-shade-amount, $btn-hover-bg-tint-amount), - "hover-border-color": btn-color($background, $btn-hover-border-shade-amount, $btn-hover-border-tint-amount), - "hover-color": color-contrast(btn-color($background, $btn-hover-bg-shade-amount, $btn-hover-bg-tint-amount)), - "active-bg": btn-color($background, $btn-active-bg-shade-amount, $btn-active-bg-tint-amount), - "active-border-color": btn-color($background, $btn-active-border-shade-amount, $btn-active-border-tint-amount), - "active-color": color-contrast(btn-color($background, $btn-active-border-shade-amount, $btn-active-border-tint-amount)), - "disabled-color": $background, - "shadow": rgba(mix($background, $background, 15%), .5) - ); -} -// scss-docs-end button-color-functions - -// scss-docs-start table-color-functions -@function table-color-map($background, $body-bg: $body-bg) { - $color: color-contrast(opaque($body-bg, $background)); - $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); - $active-bg: mix($color, $background, percentage($table-active-bg-factor)); - $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); - - @return ( - "bg": $background, - "color": $color, - "border-color": mix($color, $background, percentage($table-border-factor)), - "striped-bg": $striped-bg, - "striped-color": color-contrast($striped-bg), - "active-bg": $active-bg, - "active-color": color-contrast($active-bg), - "hover-bg": $hover-bg, - "hover-color": color-contrast($hover-bg) - ); -} -// scss-docs-end table-color-functions - -// Return valid calc -@function add($value1, $value2, $return-calc: true) { - @if $value1 == null { - @return $value2; - } - - @if $value2 == null { - @return $value1; - } - - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { - @return $value1 + $value2; - } - - @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); -} - -@function subtract($value1, $value2, $return-calc: true) { - @if $value1 == null and $value2 == null { - @return null; - } - - @if $value1 == null { - @return -$value2; - } - - @if $value2 == null { - @return $value1; - } - - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { - @return $value1 - $value2; - } - - @if type-of($value2) != number { - $value2: unquote("(") + $value2 + unquote(")"); - } - - @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); -} - -@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; -} - -// Generate selectors for theme variants -@function theme-prefix($theme, $selector) { - @return #{"[data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ", [data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ":not([class*='#{$theme}:'])"}; -} +@forward "functions/assert"; +@forward "functions/color-contrast"; +@forward "functions/color"; +@forward "functions/escape-svg"; +@forward "functions/maps"; +@forward "functions/math"; +@forward "functions/str-replace"; diff --git a/scss/_grid.import.scss b/scss/_grid.import.scss new file mode 100644 index 0000000000..013d325a56 --- /dev/null +++ b/scss/_grid.import.scss @@ -0,0 +1 @@ +@forward "grid"; diff --git a/scss/_grid.scss b/scss/_grid.scss index 910c55678e..d9dbf90e38 100644 --- a/scss/_grid.scss +++ b/scss/_grid.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/grid" as *; + +$include-column-box-sizing: false !default; + // Row // // Rows contain your columns. @@ -15,7 +20,7 @@ @include make-row(); > * { - @include make-col-ready(); + @include make-col-ready($include-column-box-sizing); } } } diff --git a/scss/_header.import.scss b/scss/_header.import.scss new file mode 100644 index 0000000000..cd12960b3a --- /dev/null +++ b/scss/_header.import.scss @@ -0,0 +1 @@ +@forward "header"; diff --git a/scss/_header.scss b/scss/_header.scss index c372623e1c..c5cf743b72 100644 --- a/scss/_header.scss +++ b/scss/_header.scss @@ -1,3 +1,11 @@ +@use "variables" as *; +@use "functions/escape-svg" as *; +@use "mixins/border-radius" as *; +@use "mixins/breakpoints" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + .header { // scss-docs-start header-css-vars --#{$prefix}header-padding-x: #{$header-padding-x}; diff --git a/scss/_helpers.import.scss b/scss/_helpers.import.scss new file mode 100644 index 0000000000..070cbc27c2 --- /dev/null +++ b/scss/_helpers.import.scss @@ -0,0 +1 @@ +@forward "helpers"; diff --git a/scss/_helpers.scss b/scss/_helpers.scss index 13f2752c9b..60c9fd4bce 100644 --- a/scss/_helpers.scss +++ b/scss/_helpers.scss @@ -1,12 +1,12 @@ -@import "helpers/clearfix"; -@import "helpers/color-bg"; -@import "helpers/colored-links"; -@import "helpers/focus-ring"; -@import "helpers/icon-link"; -@import "helpers/ratio"; -@import "helpers/position"; -@import "helpers/stacks"; -@import "helpers/visually-hidden"; -@import "helpers/stretched-link"; -@import "helpers/text-truncation"; -@import "helpers/vr"; +@forward "helpers/clearfix"; +@forward "helpers/color-bg"; +@forward "helpers/colored-links"; +@forward "helpers/focus-ring"; +@forward "helpers/icon-link"; +@forward "helpers/ratio"; +@forward "helpers/position"; +@forward "helpers/stacks"; +@forward "helpers/visually-hidden"; +@forward "helpers/stretched-link"; +@forward "helpers/text-truncation"; +@forward "helpers/vr"; diff --git a/scss/_icon.import.scss b/scss/_icon.import.scss new file mode 100644 index 0000000000..2e86ed1059 --- /dev/null +++ b/scss/_icon.import.scss @@ -0,0 +1 @@ +@forward "icon"; diff --git a/scss/_icon.scss b/scss/_icon.scss index 445ef6ea28..5e2dff1331 100644 --- a/scss/_icon.scss +++ b/scss/_icon.scss @@ -1,3 +1,6 @@ +@use "variables" as *; +@use "mixins/icon" as *; + .icon { display: inline-block; color: inherit; diff --git a/scss/_images.import.scss b/scss/_images.import.scss new file mode 100644 index 0000000000..58c64f155c --- /dev/null +++ b/scss/_images.import.scss @@ -0,0 +1 @@ +@forward "images"; diff --git a/scss/_images.scss b/scss/_images.scss index fcc4cbb6d5..e524cfc6eb 100644 --- a/scss/_images.scss +++ b/scss/_images.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/image" as *; +@use "vendor/rfs" 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 ``s. diff --git a/scss/_list-group.import.scss b/scss/_list-group.import.scss new file mode 100644 index 0000000000..67b8456493 --- /dev/null +++ b/scss/_list-group.import.scss @@ -0,0 +1 @@ +@forward "list-group"; diff --git a/scss/_list-group.scss b/scss/_list-group.scss index 3e3524940f..a038e745d7 100644 --- a/scss/_list-group.scss +++ b/scss/_list-group.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/breakpoints" as *; +@use "mixins/ltr-rtl" as *; + // Base class // // Easily usable on
    ,
      , or
      . diff --git a/scss/_maps.import.scss b/scss/_maps.import.scss new file mode 100644 index 0000000000..4a6ec4df9a --- /dev/null +++ b/scss/_maps.import.scss @@ -0,0 +1 @@ +@forward "maps"; diff --git a/scss/_maps.scss b/scss/_maps.scss index 7caa41b658..efb604f498 100644 --- a/scss/_maps.scss +++ b/scss/_maps.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "variables-dark" as *; +@use "functions/color" as *; +@use "functions/maps" as *; + // Re-assigned maps // // Placed here so that others can override the default Sass maps and see automatic updates to utilities and more. @@ -113,7 +118,7 @@ $utilities-text: map-merge( "body": to-rgb($body-color) ) ) !default; -$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default; +$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$prefix", "$key", "text") !default; $utilities-text-emphasis-colors: ( "primary-emphasis": var(--#{$prefix}primary-text-emphasis), @@ -136,7 +141,7 @@ $utilities-bg: map-merge( "body": to-rgb($body-bg) ) ) !default; -$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default; +$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$prefix", "$key", "bg") !default; $utilities-bg-subtle: ( "primary-subtle": var(--#{$prefix}primary-bg-subtle), @@ -158,7 +163,7 @@ $utilities-border: map-merge( "white": to-rgb($white) ) ) !default; -$utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default; +$utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$prefix", "$key", "border") !default; $utilities-border-subtle: ( "primary-subtle": var(--#{$prefix}primary-border-subtle), @@ -172,7 +177,7 @@ $utilities-border-subtle: ( ) !default; // scss-docs-end utilities-border-colors -$utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default; +$utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$prefix", "$key", "link-underline") !default; $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; diff --git a/scss/_mixins.import.scss b/scss/_mixins.import.scss new file mode 100644 index 0000000000..1c0b15361e --- /dev/null +++ b/scss/_mixins.import.scss @@ -0,0 +1 @@ +@forward "mixins"; diff --git a/scss/_mixins.scss b/scss/_mixins.scss index 11ad461249..5a70a960b4 100644 --- a/scss/_mixins.scss +++ b/scss/_mixins.scss @@ -3,46 +3,46 @@ // Used in conjunction with global variables to enable certain theme features. // LTR & RTL -@import "mixins/ltr-rtl"; +@forward "mixins/ltr-rtl"; // Vendor -@import "vendor/rfs"; +@forward "vendor/rfs"; // Deprecate -@import "mixins/deprecate"; +@forward "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"; +@forward "mixins/breakpoints"; +@forward "mixins/color-mode"; +@forward "mixins/color-scheme"; +@forward "mixins/image"; +@forward "mixins/resize"; +@forward "mixins/visually-hidden"; +@forward "mixins/reset-text"; +@forward "mixins/text-truncate"; // Utilities -@import "mixins/utilities"; +@forward "mixins/utilities"; // Components -@import "mixins/alert"; -@import "mixins/avatar"; -@import "mixins/backdrop"; -@import "mixins/buttons"; -@import "mixins/caret"; -@import "mixins/pagination"; -@import "mixins/lists"; -@import "mixins/forms"; -@import "mixins/table-variants"; -@import "mixins/icon"; +@forward "mixins/alert"; +@forward "mixins/avatar"; +@forward "mixins/backdrop"; +@forward "mixins/buttons"; +@forward "mixins/caret"; +@forward "mixins/pagination"; +@forward "mixins/lists"; +@forward "mixins/forms"; +@forward "mixins/table-variants"; +@forward "mixins/icon"; // Skins -@import "mixins/border-radius"; -@import "mixins/box-shadow"; -@import "mixins/gradients"; -@import "mixins/transition"; +@forward "mixins/border-radius"; +@forward "mixins/box-shadow"; +@forward "mixins/gradients"; +@forward "mixins/transition"; // Layout -@import "mixins/clearfix"; -@import "mixins/container"; -@import "mixins/grid"; +@forward "mixins/clearfix"; +@forward "mixins/container"; +@forward "mixins/grid"; diff --git a/scss/_modal.import.scss b/scss/_modal.import.scss new file mode 100644 index 0000000000..81f5438b0c --- /dev/null +++ b/scss/_modal.import.scss @@ -0,0 +1 @@ +@forward "modal"; diff --git a/scss/_modal.scss b/scss/_modal.scss index b92c1def3b..a2c423217a 100644 --- a/scss/_modal.scss +++ b/scss/_modal.scss @@ -1,4 +1,11 @@ // stylelint-disable function-disallowed-list +@use "variables" as *; +@use "mixins/backdrop" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/breakpoints" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; // .modal-open - body class for killing the scroll // .modal - container to scroll within diff --git a/scss/_nav.import.scss b/scss/_nav.import.scss new file mode 100644 index 0000000000..b2a611e721 --- /dev/null +++ b/scss/_nav.import.scss @@ -0,0 +1 @@ +@forward "nav"; diff --git a/scss/_nav.scss b/scss/_nav.scss index ad142abfce..0ca4fc81d3 100644 --- a/scss/_nav.scss +++ b/scss/_nav.scss @@ -1,3 +1,10 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/gradients" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + // Base class // // Kickstart any navigation component with a set of style resets. Works with diff --git a/scss/_navbar.import.scss b/scss/_navbar.import.scss new file mode 100644 index 0000000000..f4cd38d2b3 --- /dev/null +++ b/scss/_navbar.import.scss @@ -0,0 +1 @@ +@forward "navbar"; diff --git a/scss/_navbar.scss b/scss/_navbar.scss index 3779947a33..9daac4b549 100644 --- a/scss/_navbar.scss +++ b/scss/_navbar.scss @@ -1,3 +1,15 @@ +@use "variables" as *; +@use "functions/escape-svg" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/breakpoints" as *; +@use "mixins/color-mode" as *; +@use "mixins/deprecate" as *; +@use "mixins/gradients" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + // Navbar // // Provide a static navbar from which we expand to create full-width, fixed, and diff --git a/scss/_offcanvas.import.scss b/scss/_offcanvas.import.scss new file mode 100644 index 0000000000..786f8ee693 --- /dev/null +++ b/scss/_offcanvas.import.scss @@ -0,0 +1 @@ +@forward "offcanvas"; diff --git a/scss/_offcanvas.scss b/scss/_offcanvas.scss index edd2eb74e9..7b6a10e977 100644 --- a/scss/_offcanvas.scss +++ b/scss/_offcanvas.scss @@ -1,4 +1,10 @@ // stylelint-disable function-disallowed-list +@use "variables" as *; +@use "mixins/backdrop" as *; +@use "mixins/box-shadow" as *; +@use "mixins/breakpoints" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/transition" as *; %offcanvas-css-vars { // scss-docs-start offcanvas-css-vars diff --git a/scss/_pagination.import.scss b/scss/_pagination.import.scss new file mode 100644 index 0000000000..ef891d333f --- /dev/null +++ b/scss/_pagination.import.scss @@ -0,0 +1 @@ +@forward "pagination"; diff --git a/scss/_pagination.scss b/scss/_pagination.scss index e9ee011b0d..9251d138b1 100644 --- a/scss/_pagination.scss +++ b/scss/_pagination.scss @@ -1,3 +1,12 @@ +@use "variables" as *; +@use "vendor/rfs" as *; +@use "mixins/border-radius" as *; +@use "mixins/gradients" as *; +@use "mixins/lists" as *; +@use "mixins/ltr-rtl" as *; +@use "mixins/pagination" as *; +@use "mixins/transition" as *; + .pagination { // scss-docs-start pagination-css-vars --#{$prefix}pagination-padding-x: #{$pagination-padding-x}; diff --git a/scss/_placeholders.import.scss b/scss/_placeholders.import.scss new file mode 100644 index 0000000000..bc405f24cf --- /dev/null +++ b/scss/_placeholders.import.scss @@ -0,0 +1 @@ +@forward "placeholders"; diff --git a/scss/_placeholders.scss b/scss/_placeholders.scss index 6e32e1cdb9..497ec74b24 100644 --- a/scss/_placeholders.scss +++ b/scss/_placeholders.scss @@ -1,3 +1,5 @@ +@use "variables" as *; + .placeholder { display: inline-block; min-height: 1em; diff --git a/scss/_popover.import.scss b/scss/_popover.import.scss new file mode 100644 index 0000000000..071aef8732 --- /dev/null +++ b/scss/_popover.import.scss @@ -0,0 +1 @@ +@forward "popover"; diff --git a/scss/_popover.scss b/scss/_popover.scss index 7b69f62328..50d34c3998 100644 --- a/scss/_popover.scss +++ b/scss/_popover.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/reset-text" as *; +@use "vendor/rfs" as *; + .popover { // scss-docs-start popover-css-vars --#{$prefix}popover-zindex: #{$zindex-popover}; diff --git a/scss/_progress.import.scss b/scss/_progress.import.scss new file mode 100644 index 0000000000..c3fc3c81fc --- /dev/null +++ b/scss/_progress.import.scss @@ -0,0 +1 @@ +@forward "progress"; diff --git a/scss/_progress.scss b/scss/_progress.scss index 776fc12b80..d7b37c886d 100644 --- a/scss/_progress.scss +++ b/scss/_progress.scss @@ -1,3 +1,10 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/box-shadow" as *; +@use "mixins/gradients" as *; +@use "mixins/transition" as *; +@use "vendor/rfs" as *; + // Disable animation if transitions are disabled // scss-docs-start progress-keyframes diff --git a/scss/_reboot.import.scss b/scss/_reboot.import.scss new file mode 100644 index 0000000000..bb0353d30b --- /dev/null +++ b/scss/_reboot.import.scss @@ -0,0 +1 @@ +@forward "reboot"; diff --git a/scss/_reboot.scss b/scss/_reboot.scss index bdeabf5095..cbb227e6b8 100644 --- a/scss/_reboot.scss +++ b/scss/_reboot.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; +@use "vendor/rfs" as *; + // stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix diff --git a/scss/_root.import.scss b/scss/_root.import.scss new file mode 100644 index 0000000000..bf90eb9b2d --- /dev/null +++ b/scss/_root.import.scss @@ -0,0 +1 @@ +@use "root"; diff --git a/scss/_root.scss b/scss/_root.scss index 58de374c43..6b9b3320ad 100644 --- a/scss/_root.scss +++ b/scss/_root.scss @@ -1,3 +1,10 @@ +@use "variables" as *; +@use "variables-dark" as *; +@use "maps" as *; +@use "functions/color" as *; +@use "mixins/color-mode" as *; +@use "vendor/rfs" as *; + :root, [data-coreui-theme="light"] { // Note: Custom variable values only support SassScript inside `#{}`. diff --git a/scss/_sidebar.import.scss b/scss/_sidebar.import.scss new file mode 100644 index 0000000000..4473c264fb --- /dev/null +++ b/scss/_sidebar.import.scss @@ -0,0 +1,3 @@ +@forward "sidebar/sidebar"; +@forward "sidebar/sidebar-nav"; +@forward "sidebar/sidebar-narrow"; diff --git a/scss/_sidebar.scss b/scss/_sidebar.scss index 0ffff0763f..4473c264fb 100644 --- a/scss/_sidebar.scss +++ b/scss/_sidebar.scss @@ -1,3 +1,3 @@ -@import "sidebar/sidebar"; -@import "sidebar/sidebar-nav"; -@import "sidebar/sidebar-narrow"; +@forward "sidebar/sidebar"; +@forward "sidebar/sidebar-nav"; +@forward "sidebar/sidebar-narrow"; diff --git a/scss/_spinners.import.scss b/scss/_spinners.import.scss new file mode 100644 index 0000000000..072336a2a8 --- /dev/null +++ b/scss/_spinners.import.scss @@ -0,0 +1 @@ +@forward "spinners"; diff --git a/scss/_spinners.scss b/scss/_spinners.scss index ec8473207e..01094b7e3d 100644 --- a/scss/_spinners.scss +++ b/scss/_spinners.scss @@ -1,3 +1,5 @@ +@use "variables" as *; + // // Rotating border // diff --git a/scss/_tables.import.scss b/scss/_tables.import.scss new file mode 100644 index 0000000000..c272d95235 --- /dev/null +++ b/scss/_tables.import.scss @@ -0,0 +1 @@ +@forward "tables"; diff --git a/scss/_tables.scss b/scss/_tables.scss index 276521a387..f624e321a6 100644 --- a/scss/_tables.scss +++ b/scss/_tables.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "mixins/breakpoints" as *; +@use "mixins/table-variants" as *; + // // Basic Bootstrap table // diff --git a/scss/_toasts.import.scss b/scss/_toasts.import.scss new file mode 100644 index 0000000000..ad79521ffc --- /dev/null +++ b/scss/_toasts.import.scss @@ -0,0 +1 @@ +@forward "toasts"; \ No newline at end of file diff --git a/scss/_toasts.scss b/scss/_toasts.scss index 386d0cb6f2..786788bedf 100644 --- a/scss/_toasts.scss +++ b/scss/_toasts.scss @@ -1,3 +1,8 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/ltr-rtl" as *; +@use "vendor/rfs" as *; + .toast { // scss-docs-start toast-css-vars --#{$prefix}toast-zindex: #{$zindex-toast}; diff --git a/scss/_tooltip.import.scss b/scss/_tooltip.import.scss new file mode 100644 index 0000000000..5ee0266aa4 --- /dev/null +++ b/scss/_tooltip.import.scss @@ -0,0 +1 @@ +@forward "tooltip"; diff --git a/scss/_tooltip.scss b/scss/_tooltip.scss index 999981d383..bd790067cf 100644 --- a/scss/_tooltip.scss +++ b/scss/_tooltip.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "mixins/border-radius" as *; +@use "mixins/deprecate" as *; +@use "mixins/reset-text" as *; +@use "vendor/rfs" as *; + // Base class .tooltip { // scss-docs-start tooltip-css-vars diff --git a/scss/_transitions.import.scss b/scss/_transitions.import.scss new file mode 100644 index 0000000000..c7572dfc78 --- /dev/null +++ b/scss/_transitions.import.scss @@ -0,0 +1 @@ +@forward "transitions"; diff --git a/scss/_transitions.scss b/scss/_transitions.scss index bfb26aa8ac..04f5ba152c 100644 --- a/scss/_transitions.scss +++ b/scss/_transitions.scss @@ -1,3 +1,6 @@ +@use "variables" as *; +@use "mixins/transition" as *; + .fade { @include transition($transition-fade); diff --git a/scss/_type.import.scss b/scss/_type.import.scss new file mode 100644 index 0000000000..c002d0d218 --- /dev/null +++ b/scss/_type.import.scss @@ -0,0 +1 @@ +@forward "type"; diff --git a/scss/_type.scss b/scss/_type.scss index 61d098b048..2bf72e69de 100644 --- a/scss/_type.scss +++ b/scss/_type.scss @@ -1,3 +1,9 @@ +@use "variables" as *; +@use "reboot" as *; +@use "mixins/lists" as *; +@use "mixins/ltr-rtl" as *; +@use "vendor/rfs" as *; + // // Headings // diff --git a/scss/_utilities.import.scss b/scss/_utilities.import.scss new file mode 100644 index 0000000000..d94f1f77bd --- /dev/null +++ b/scss/_utilities.import.scss @@ -0,0 +1 @@ +@forward "utilities"; diff --git a/scss/_utilities.scss b/scss/_utilities.scss index 9873ca7b7e..0f21759c10 100644 --- a/scss/_utilities.scss +++ b/scss/_utilities.scss @@ -1,3 +1,7 @@ +@use "variables" as *; +@use "maps" as *; +@use "functions/maps" as *; + // Utilities $utilities: () !default; @@ -90,7 +94,7 @@ $utilities: map-merge( css-var: true, css-variable-name: focus-ring-color, class: focus-ring, - values: map-loop($theme-colors-rgb, rgba-css-var, "$key", "focus-ring") + values: map-loop($theme-colors-rgb, rgba-css-var, "$prefix", "$key", "focus-ring") ), // scss-docs-end utils-focus-ring // scss-docs-start utils-position diff --git a/scss/_variables-dark.import.scss b/scss/_variables-dark.import.scss new file mode 100644 index 0000000000..173db3b9af --- /dev/null +++ b/scss/_variables-dark.import.scss @@ -0,0 +1 @@ +@forward "variables-dark"; diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index 9ac5df507a..af676dbc03 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -1,3 +1,6 @@ +@use "variables" as *; +@use "functions/color" as *; + // Dark color mode variables // // Custom variables for the `[data-coreui-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. diff --git a/scss/_variables.import.scss b/scss/_variables.import.scss new file mode 100644 index 0000000000..eaab322355 --- /dev/null +++ b/scss/_variables.import.scss @@ -0,0 +1 @@ +@forward "variables"; diff --git a/scss/_variables.scss b/scss/_variables.scss index 17f3b5a9fc..0bd9e6273b 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -1,3 +1,7 @@ +@use "functions/assert" as *; +@use "functions/color" as *; +@use "functions/math" as *; + // Variables // // Variables should follow the `$component-state-property-size` formula for @@ -508,8 +512,8 @@ $grid-breakpoints: ( ) !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 @@ -526,7 +530,7 @@ $container-max-widths: ( ) !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 @@ -868,7 +872,7 @@ $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; $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-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default; TODO: ???? // Allows for customizing button radius independently from global border radius $btn-border-radius: var(--#{$prefix}border-radius) !default; @@ -2062,5 +2066,3 @@ $kbd-bg: var(--#{$prefix}body-color) !default; $nested-kbd-font-weight: null !default; // Deprecated in v4.2.6, removing in v6 $pre-color: null !default; - -@import "variables-dark"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5 diff --git a/scss/coreui-grid.rtl.scss b/scss/coreui-grid.rtl.scss index d926f6abf3..b665e31999 100644 --- a/scss/coreui-grid.rtl.scss +++ b/scss/coreui-grid.rtl.scss @@ -1,4 +1,4 @@ -$enable-ltr: false !default; -$enable-rtl: true !default; - -@import "coreui-grid"; +@use "coreui-grid" with ( + $enable-ltr: false, + $enable-rtl: true +); diff --git a/scss/coreui-grid.scss b/scss/coreui-grid.scss index 6a094e3cee..40d3d75689 100644 --- a/scss/coreui-grid.scss +++ b/scss/coreui-grid.scss @@ -1,25 +1,16 @@ -@import "mixins/banner"; -@include bsBanner(Grid); - -$include-column-box-sizing: true !default; - -@import "functions"; -@import "variables"; -@import "variables-dark"; -@import "maps"; - -@import "mixins/ltr-rtl"; -@import "mixins/breakpoints"; -@import "mixins/container"; -@import "mixins/grid"; -@import "mixins/utilities"; - -@import "vendor/rfs"; +@forward "banner" with ( + $file: "Grid" +); -@import "containers"; -@import "grid"; +@forward "variables"; +@forward "variables-dark"; +@forward "containers"; +@forward "grid" with ( + $include-column-box-sizing: true !default, +); +@use "utilities" as *; +@use "functions/maps" as *; -@import "utilities"; // Only use the utilities we need // stylelint-disable-next-line scss/dollar-variable-default $utilities: map-get-multiple( @@ -60,4 +51,4 @@ $utilities: map-get-multiple( ) ); -@import "utilities/api"; +@use "utilities/api"; diff --git a/scss/coreui-reboot.rtl.scss b/scss/coreui-reboot.rtl.scss index d0223900cd..fc65bed51e 100644 --- a/scss/coreui-reboot.rtl.scss +++ b/scss/coreui-reboot.rtl.scss @@ -1,4 +1,4 @@ -$enable-ltr: false !default; -$enable-rtl: true !default; - -@import "coreui-reboot"; +@use "coreui-reboot" with ( + $enable-ltr: false, + $enable-rtl: true +); diff --git a/scss/coreui-reboot.scss b/scss/coreui-reboot.scss index 5b69b9552d..7c1315a4cb 100644 --- a/scss/coreui-reboot.scss +++ b/scss/coreui-reboot.scss @@ -1,10 +1,9 @@ -@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 "variables"; +@forward "variables-dark"; + +@use "root"; +@use "reboot"; diff --git a/scss/coreui-utilities.rtl.scss b/scss/coreui-utilities.rtl.scss index ea73ae88a4..9b5f86bbd8 100644 --- a/scss/coreui-utilities.rtl.scss +++ b/scss/coreui-utilities.rtl.scss @@ -1,4 +1,4 @@ -$enable-ltr: false !default; -$enable-rtl: true !default; - -@import "coreui-utilities"; +@use "coreui-utilities" with ( + $enable-ltr: false, + $enable-rtl: true +); diff --git a/scss/coreui-utilities.scss b/scss/coreui-utilities.scss index 99c4a3595c..b00f6cf06d 100644 --- a/scss/coreui-utilities.scss +++ b/scss/coreui-utilities.scss @@ -1,19 +1,17 @@ -@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"; +@forward "variables-dark"; // Layout & components -@import "root"; +@use "root"; // Helpers -@import "helpers"; +@use "helpers"; -// Utilities -@import "utilities/api"; +// // Utilities +@use "utilities/api"; +// // scss-docs-end import-stack diff --git a/scss/coreui.rtl.scss b/scss/coreui.rtl.scss index 0f2c7cab0b..9b247df149 100644 --- a/scss/coreui.rtl.scss +++ b/scss/coreui.rtl.scss @@ -1,4 +1,4 @@ -$enable-ltr: false !default; -$enable-rtl: true !default; - -@import "coreui"; +@use "coreui" with ( + $enable-ltr: false, + $enable-rtl: true +); diff --git a/scss/coreui.scss b/scss/coreui.scss index 0ae5f47d98..6f0e42f291 100644 --- a/scss/coreui.scss +++ b/scss/coreui.scss @@ -1,58 +1,53 @@ -@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"; +// // scss-docs-start import-stack +// // Configuration +@forward "variables"; +@forward "variables-dark"; -// 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"; +// // Layout & components +@use "root"; +@use "reboot"; +@use "type"; +@use "images"; +@use "containers"; +@use "grid"; +@use "tables"; +@use "forms"; +@use "buttons"; +@use "transitions"; +@use "dropdown"; +@use "button-group"; +@use "nav"; +@use "navbar"; +@use "card"; +@use "accordion"; +@use "breadcrumb"; +@use "pagination"; +@use "badge"; +@use "alert"; +@use "progress"; +@use "list-group"; +@use "close"; +@use "toasts"; +@use "modal"; +@use "tooltip"; +@use "popover"; +@use "carousel"; +@use "spinners"; +@use "offcanvas"; +@use "placeholders"; -@import "avatar"; -@import "callout"; -@import "footer"; -@import "header"; -@import "icon"; -@import "sidebar"; +@use "avatar"; +@use "callout"; +@use "footer"; +@use "header"; +@use "icon"; +@use "sidebar"; // Helpers -@import "helpers"; +@use "helpers"; -// Utilities -@import "utilities/api"; -// scss-docs-end import-stack +// // Utilities +@use "utilities/api"; +// // scss-docs-end import-stack diff --git a/scss/forms/_floating-labels.scss b/scss/forms/_floating-labels.scss index 557c8c9e45..c247b47881 100644 --- a/scss/forms/_floating-labels.scss +++ b/scss/forms/_floating-labels.scss @@ -1,3 +1,8 @@ +@use "../variables" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/ltr-rtl" as *; +@use "../mixins/transition" as *; + .form-floating { position: relative; diff --git a/scss/forms/_form-check.scss b/scss/forms/_form-check.scss index e47efdbaac..1a4b539761 100644 --- a/scss/forms/_form-check.scss +++ b/scss/forms/_form-check.scss @@ -1,3 +1,11 @@ +@use "../variables" as *; +@use "../variables-dark" as *; +@use "../functions/escape-svg" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/color-mode" as *; +@use "../mixins/ltr-rtl" as *; +@use "../mixins/transition" as *; + // // Check/radio // diff --git a/scss/forms/_form-control.scss b/scss/forms/_form-control.scss index 6b8e65f70a..b93175eff0 100644 --- a/scss/forms/_form-control.scss +++ b/scss/forms/_form-control.scss @@ -1,3 +1,10 @@ +@use "../variables" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/box-shadow" as *; +@use "../mixins/gradients" as *; +@use "../mixins/transition" as *; +@use "../vendor/rfs" as *; + // // General form controls (plus a few specific high-level interventions) // diff --git a/scss/forms/_form-range.scss b/scss/forms/_form-range.scss index 4732213e97..a0e97fe364 100644 --- a/scss/forms/_form-range.scss +++ b/scss/forms/_form-range.scss @@ -1,3 +1,10 @@ +@use "../variables" as *; +@use "../functions/math" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/box-shadow" as *; +@use "../mixins/gradients" as *; +@use "../mixins/transition" as *; + // Range // // Style range inputs the same across browsers. Vendor-specific rules for pseudo diff --git a/scss/forms/_form-select.scss b/scss/forms/_form-select.scss index fee09a4bbb..2190673b2e 100644 --- a/scss/forms/_form-select.scss +++ b/scss/forms/_form-select.scss @@ -1,3 +1,13 @@ +@use "../variables" as *; +@use "../variables-dark" as *; +@use "../functions/escape-svg" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/box-shadow" as *; +@use "../mixins/color-mode" as *; +@use "../mixins/ltr-rtl" as *; +@use "../mixins/transition" as *; +@use "../vendor/rfs" as *; + // Select // // Replaces the browser default select with a custom one, mostly pulled from @@ -26,7 +36,7 @@ @include transition($form-select-transition); &:focus { - border-color: var($form-select-focus-border-color); + border-color: $form-select-focus-border-color; outline: 0; @if $enable-shadows { @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); diff --git a/scss/forms/_form-text.scss b/scss/forms/_form-text.scss index f080d1a234..898d7b7256 100644 --- a/scss/forms/_form-text.scss +++ b/scss/forms/_form-text.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../vendor/rfs" as *; + // // Form text // diff --git a/scss/forms/_input-group.scss b/scss/forms/_input-group.scss index 698da62bf9..18b4128681 100644 --- a/scss/forms/_input-group.scss +++ b/scss/forms/_input-group.scss @@ -1,3 +1,8 @@ +@use "../variables" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/ltr-rtl" as *; +@use "../vendor/rfs" as *; + // // Base styles // diff --git a/scss/forms/_labels.scss b/scss/forms/_labels.scss index 39ecafcd2f..eaaa91eab7 100644 --- a/scss/forms/_labels.scss +++ b/scss/forms/_labels.scss @@ -1,3 +1,7 @@ +@use "../variables" as *; +@use "../functions/math" as *; +@use "../vendor/rfs" as *; + // // Labels // diff --git a/scss/forms/_validation.scss b/scss/forms/_validation.scss index c48123a716..2b32cb6845 100644 --- a/scss/forms/_validation.scss +++ b/scss/forms/_validation.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../mixins/forms" as *; + // Form validation // // Provide feedback to users when form field values are valid or invalid. Works diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss new file mode 100644 index 0000000000..7e0bcc53de --- /dev/null +++ b/scss/functions/_assert.scss @@ -0,0 +1,29 @@ +// Ascending +// Used to evaluate Sass maps like our grid breakpoints. +@mixin assert-ascending($map, $map-name) { + $prev-key: null; + $prev-num: null; + @each $key, $num in $map { + @if $prev-num == null or unit($num) == "%" or 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}' !"; + } @else if $prev-num >= $num { + @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; + } + $prev-key: $key; + $prev-num: $num; + } +} + +// 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); + @if $first-value != 0 { + @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}."; + } + } +} diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss new file mode 100644 index 0000000000..68b9fbd1fe --- /dev/null +++ b/scss/functions/_color-contrast.scss @@ -0,0 +1,60 @@ +@use "../variables" as *; +@use "math" as *; + +// Color contrast +// See https://github.com/twbs/bootstrap/pull/30168 + +// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255) +// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern +$_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; + $max-ratio: 0; + $max-ratio-color: null; + + @each $color in $foregrounds { + $contrast-ratio: contrast-ratio($background, $color); + @if $contrast-ratio > $min-contrast-ratio { + @return $color; + } @else if $contrast-ratio > $max-ratio { + $max-ratio: $contrast-ratio; + $max-ratio-color: $color; + } + } + + @warn "Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}..."; + + @return $max-ratio-color; +} + +@function contrast-ratio($background, $foreground: $color-contrast-light) { + $l1: luminance($background); + $l2: luminance(opaque($background, $foreground)); + + @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05)); +} + +// Return WCAG2.2 relative luminance +// See https://www.w3.org/TR/WCAG/#dfn-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) + ); + + @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)); + } + + @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%); +} diff --git a/scss/functions/_color.scss b/scss/functions/_color.scss new file mode 100644 index 0000000000..0b03afb5ca --- /dev/null +++ b/scss/functions/_color.scss @@ -0,0 +1,30 @@ +// scss-docs-start color-functions +// Tint a color: mix a color with white +@function tint-color($color, $weight) { + @return mix(white, $color, $weight); +} + +// Shade a color: mix a color with black +@function shade-color($color, $weight) { + @return mix(black, $color, $weight); +} + +// 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 to-rgb($value) { + @return red($value), green($value), blue($value); +} + +@function rgba-css-var($prefix, $identifier, $target) { + @if $identifier == "body" and $target == "bg" { + @return rgba(var(--#{$prefix}#{$identifier}-bg-rgb), var(--#{$prefix}#{$target}-opacity)); + } @if $identifier == "body" and $target == "text" { + @return rgba(var(--#{$prefix}#{$identifier}-color-rgb), var(--#{$prefix}#{$target}-opacity)); + } @else { + @return rgba(var(--#{$prefix}#{$identifier}-rgb), var(--#{$prefix}#{$target}-opacity)); + } +} diff --git a/scss/functions/_escape-svg.scss b/scss/functions/_escape-svg.scss new file mode 100644 index 0000000000..ef57d9209f --- /dev/null +++ b/scss/functions/_escape-svg.scss @@ -0,0 +1,21 @@ +@use "../variables" as *; +@use "str-replace" as *; + +// See https://codepen.io/kevinweber/pen/dXWoRw +// +// Requires the use of quotes around data URIs. + +@function escape-svg($string) { + @if str-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)}"); + } @else { + $string: str-replace($string, $char, $encoded); + } + } + } + + @return $string; +} diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss new file mode 100644 index 0000000000..909895b773 --- /dev/null +++ b/scss/functions/_maps.scss @@ -0,0 +1,52 @@ +@use "../variables" as *; +@use "color" as *; + +// stylelint-disable scss/dollar-variable-pattern +@function map-loop($map, $func, $args...) { + $_map: (); + + @each $key, $value in $map { + // allow to pass the $key and $value of the map as an function argument + $_args: (); + @each $arg in $args { + $_args: append($_args, if($arg == "$prefix", $prefix, if($arg == "$key", $key, if($arg == "$value", $value, $arg)))); + } + + $_map: map-merge($_map, ($key: call(get-function($func), $_args...))); + } + @return $_map; +} +// stylelint-enable scss/dollar-variable-pattern + +// Internal Bootstrap function to turn maps into its negative variant. +// It prefixes the keys with `n` and makes the value negative. +@function negativify-map($map) { + $result: (); + @each $key, $value in $map { + @if $key != 0 { + $result: map-merge($result, ("n" + $key: (-$value))); + } + } + @return $result; +} + +// Get multiple keys from a sass map +@function map-get-multiple($map, $values) { + $result: (); + @each $key, $value in $map { + @if (index($values, $key) != null) { + $result: map-merge($result, ($key: $value)); + } + } + @return $result; +} + +// Merge multiple maps +@function map-merge-multiple($maps...) { + $merged-maps: (); + + @each $map in $maps { + $merged-maps: map-merge($merged-maps, $map); + } + @return $merged-maps; +} diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss new file mode 100644 index 0000000000..da562c61e7 --- /dev/null +++ b/scss/functions/_math.scss @@ -0,0 +1,82 @@ +// Return valid calc +@function add($value1, $value2, $return-calc: true) { + @if $value1 == null { + @return $value2; + } + + @if $value2 == null { + @return $value1; + } + + @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { + @return $value1 + $value2; + } + + @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); +} + +@function subtract($value1, $value2, $return-calc: true) { + @if $value1 == null and $value2 == null { + @return null; + } + + @if $value1 == null { + @return -$value2; + } + + @if $value2 == null { + @return $value1; + } + + @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { + @return $value1 - $value2; + } + + @if type-of($value2) != number { + $value2: unquote("(") + $value2 + unquote(")"); + } + + @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); +} + +@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; +} diff --git a/scss/functions/_str-replace.scss b/scss/functions/_str-replace.scss new file mode 100644 index 0000000000..924db8d8be --- /dev/null +++ b/scss/functions/_str-replace.scss @@ -0,0 +1,17 @@ +// Replace `$search` with `$replace` in `$string` +// Used on our SVG icon backgrounds for custom forms. +// +// @author Kitty Giraudel +// @param {String} $string - Initial string +// @param {String} $search - Substring to replace +// @param {String} $replace ('') - New value +// @return {String} - Updated string +@function str-replace($string, $search, $replace: "") { + $index: str-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; +} diff --git a/scss/helpers/_clearfix.scss b/scss/helpers/_clearfix.scss index e92522a94d..e2d9a81f32 100644 --- a/scss/helpers/_clearfix.scss +++ b/scss/helpers/_clearfix.scss @@ -1,3 +1,5 @@ +@use "../mixins/clearfix" as *; + .clearfix { @include clearfix(); } diff --git a/scss/helpers/_color-bg.scss b/scss/helpers/_color-bg.scss index 35826854ed..2156cb63ae 100644 --- a/scss/helpers/_color-bg.scss +++ b/scss/helpers/_color-bg.scss @@ -1,3 +1,9 @@ +@use "../variables" as *; +@use "../variables-dark" as *; +@use "../functions/color" as *; +@use "../functions/color-contrast" as *; +@use "../mixins/color-mode" 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} { diff --git a/scss/helpers/_colored-links.scss b/scss/helpers/_colored-links.scss index 5f86857800..c57a686581 100644 --- a/scss/helpers/_colored-links.scss +++ b/scss/helpers/_colored-links.scss @@ -1,3 +1,7 @@ +@use "../variables" as *; +@use "../functions/color" as *; +@use "../functions/color-contrast" 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} { diff --git a/scss/helpers/_focus-ring.scss b/scss/helpers/_focus-ring.scss index 3259bd2628..7bdee2dbc4 100644 --- a/scss/helpers/_focus-ring.scss +++ b/scss/helpers/_focus-ring.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + .focus-ring:focus { outline: 0; // By default, there is no `--cui-focus-ring-x`, `--cui-focus-ring-y`, or `--cui-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values diff --git a/scss/helpers/_icon-link.scss b/scss/helpers/_icon-link.scss index 3f8bcb335c..d824145efc 100644 --- a/scss/helpers/_icon-link.scss +++ b/scss/helpers/_icon-link.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../mixins/transition" as *; + .icon-link { display: inline-flex; gap: $icon-link-gap; diff --git a/scss/helpers/_position.scss b/scss/helpers/_position.scss index 59103d9436..0246e19f96 100644 --- a/scss/helpers/_position.scss +++ b/scss/helpers/_position.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../mixins/breakpoints" as *; + // Shorthand .fixed-top { diff --git a/scss/helpers/_ratio.scss b/scss/helpers/_ratio.scss index 298036da9a..96165469cf 100644 --- a/scss/helpers/_ratio.scss +++ b/scss/helpers/_ratio.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../mixins/ltr-rtl" as *; + // Credit: Nicolas Gallagher and SUIT CSS. .ratio { diff --git a/scss/helpers/_stretched-link.scss b/scss/helpers/_stretched-link.scss index 71a1c755af..ec283094d0 100644 --- a/scss/helpers/_stretched-link.scss +++ b/scss/helpers/_stretched-link.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // // Stretched link // diff --git a/scss/helpers/_text-truncation.scss b/scss/helpers/_text-truncation.scss index 6421dac9a8..191dc4d227 100644 --- a/scss/helpers/_text-truncation.scss +++ b/scss/helpers/_text-truncation.scss @@ -1,3 +1,5 @@ +@use "../mixins/text-truncate" as *; + // // Text truncation // diff --git a/scss/helpers/_visually-hidden.scss b/scss/helpers/_visually-hidden.scss index 4760ff03d1..ad6bf08845 100644 --- a/scss/helpers/_visually-hidden.scss +++ b/scss/helpers/_visually-hidden.scss @@ -1,3 +1,5 @@ +@use "../mixins/visually-hidden" as *; + // // Visually hidden // diff --git a/scss/helpers/_vr.scss b/scss/helpers/_vr.scss index 517e4327bf..0b764dde65 100644 --- a/scss/helpers/_vr.scss +++ b/scss/helpers/_vr.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + .vr { display: inline-block; align-self: stretch; diff --git a/scss/mixins/_alert.scss b/scss/mixins/_alert.scss index b5691356e2..fa2c527803 100644 --- a/scss/mixins/_alert.scss +++ b/scss/mixins/_alert.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; +@use "../mixins/deprecate" as *; @include deprecate("`alert-variant()`", "v4.3.0", "v6.0.0"); // scss-docs-start alert-variant-mixin diff --git a/scss/mixins/_avatar.scss b/scss/mixins/_avatar.scss index 78bc8d927b..352d00e627 100644 --- a/scss/mixins/_avatar.scss +++ b/scss/mixins/_avatar.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; +@use "../mixins/deprecate" as *; @include deprecate("`avatar()`", "v5.1.0", "v6.0.0"); @mixin avatar($width) { diff --git a/scss/mixins/_backdrop.scss b/scss/mixins/_backdrop.scss index 9705ae9eea..07bd7b97ca 100644 --- a/scss/mixins/_backdrop.scss +++ b/scss/mixins/_backdrop.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // Shared between modals and offcanvases @mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) { position: fixed; diff --git a/scss/mixins/_banner.scss b/scss/mixins/_banner.scss deleted file mode 100644 index b4963c4e43..0000000000 --- a/scss/mixins/_banner.scss +++ /dev/null @@ -1,7 +0,0 @@ -@mixin bsBanner($file) { - /*! - * CoreUI #{$file} v5.2.0 (https://coreui.io) - * Copyright (c) 2024 creativeLabs Łukasz Holeczek - * Licensed under MIT (https://github.com/coreui/coreui/blob/main/LICENSE) - */ -} diff --git a/scss/mixins/_border-radius.scss b/scss/mixins/_border-radius.scss index 6fb425f1f4..ae78f426c5 100644 --- a/scss/mixins/_border-radius.scss +++ b/scss/mixins/_border-radius.scss @@ -1,4 +1,7 @@ // stylelint-disable property-disallowed-list +@use "../variables" as *; +@use "ltr-rtl" as *; + // Single side border-radius // Helper function to replace negative values with 0 diff --git a/scss/mixins/_box-shadow.scss b/scss/mixins/_box-shadow.scss index 4172541f3f..12f1cb5f5e 100644 --- a/scss/mixins/_box-shadow.scss +++ b/scss/mixins/_box-shadow.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + @mixin box-shadow($shadow...) { @if $enable-shadows { $result: (); diff --git a/scss/mixins/_breakpoints.scss b/scss/mixins/_breakpoints.scss index 286be893d7..e316f0530f 100644 --- a/scss/mixins/_breakpoints.scss +++ b/scss/mixins/_breakpoints.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // Breakpoint viewport sizes and media queries. // // Breakpoints are defined as a map of (name: minimum width), order from small to large: diff --git a/scss/mixins/_buttons.scss b/scss/mixins/_buttons.scss index 212dc9b63e..672485b78c 100644 --- a/scss/mixins/_buttons.scss +++ b/scss/mixins/_buttons.scss @@ -1,90 +1,92 @@ +@use "../variables" as *; +@use "../functions/color" as *; +@use "../functions/color-contrast" as *; +@use "../vendor/rfs" 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($variant) { - $background: map-get($variant, "bg"); - $border-color: map-get($variant, "border-color"); - $color: map-get($variant, "color"); - $hover-background: map-get($variant, "hover-bg"); - $hover-border-color: map-get($variant, "hover-border-color"); - $hover-color: map-get($variant, "hover-color"); - $active-background: map-get($variant, "active-bg"); - $active-border-color: map-get($variant, "active-border-color"); - $active-color: map-get($variant, "active-color"); - $disabled-background: map-get($variant, "disabled-bg"); - $disabled-border-color: map-get($variant, "disabled-border-color"); - $disabled-color: map-get($variant, "disabled-color"); - $shadow: map-get($variant, "shadow"); - +@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-color}; + --#{$prefix}btn-border-color: #{$border}; --#{$prefix}btn-hover-color: #{$hover-color}; --#{$prefix}btn-hover-bg: #{$hover-background}; - --#{$prefix}btn-hover-border-color: #{$hover-border-color}; - --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border-color, 15%))}; + --#{$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-color}; + --#{$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-color}; + --#{$prefix}btn-disabled-border-color: #{$disabled-border}; } // scss-docs-end btn-variant-mixin // scss-docs-start btn-outline-variant-mixin -@mixin button-outline-variant($variant) { - $color: map-get($variant, "color"); - $hover-background: map-get($variant, "hover-bg"); - $hover-border-color: map-get($variant, "hover-border-color"); - $hover-color: map-get($variant, "hover-color"); - $active-background: map-get($variant, "active-bg"); - $active-border-color: map-get($variant, "active-border-color"); - $active-color: map-get($variant, "active-color"); - $disabled-color: map-get($variant, "disabled-color"); - $shadow: map-get($variant, "shadow"); - +@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: #{$hover-color}; + --#{$prefix}btn-hover-color: #{$color-hover}; --#{$prefix}btn-hover-bg: #{$active-background}; - --#{$prefix}btn-hover-border-color: #{$active-border-color}; + --#{$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-color}; + --#{$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-ghost-variant-mixin -@mixin button-ghost-variant($variant) { - $color: map-get($variant, "color"); - $hover-background: map-get($variant, "hover-bg"); - $hover-border-color: map-get($variant, "hover-border-color"); - $hover-color: map-get($variant, "hover-color"); - $active-background: map-get($variant, "active-bg"); - $active-border-color: map-get($variant, "active-border-color"); - $active-color: map-get($variant, "active-color"); - $disabled-color: map-get($variant, "disabled-color"); - $shadow: map-get($variant, "shadow"); - +@mixin button-ghost-variant( + $color, + $color-hover: color-contrast($color), + $hover-background: $color, + $hover-border: $color, + $hover-color: color-contrast($color), + $active-background: $color, + $active-border: $color, + $active-color: color-contrast($color) +) { --#{$prefix}btn-color: #{$color}; + --#{$prefix}btn-border-color: transparent; --#{$prefix}btn-hover-bg: #{$hover-background}; - --#{$prefix}btn-hover-border-color: #{$hover-border-color}; - --#{$prefix}btn-hover-color: #{$hover-color}; + --#{$prefix}btn-hover-border-color: #{$hover-border}; + --#{$prefix}btn-hover-color: #{$color-hover}; --#{$prefix}btn-active-bg: #{$active-background}; - --#{$prefix}btn-active-border-color: #{$active-border-color}; + --#{$prefix}btn-active-border-color: #{$active-border}; --#{$prefix}btn-active-color: #{$active-color}; - --#{$prefix}btn-disabled-color: #{$disabled-color}; - --#{$prefix}btn-shadow: #{$shadow}; + --#{$prefix}btn-disabled-color: #{$color}; + --#{$prefix}btn-disabled-bg: transparent; + --#{$prefix}btn-disabled-border-color: transparent; } // scss-docs-end btn-ghost-variant-mixin diff --git a/scss/mixins/_caret.scss b/scss/mixins/_caret.scss index b99ddcb458..6c92c873e6 100644 --- a/scss/mixins/_caret.scss +++ b/scss/mixins/_caret.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "ltr-rtl" as *; + // scss-docs-start caret-mixins @mixin caret-down($width: $caret-width) { border-top: $width solid; diff --git a/scss/mixins/_color-mode.scss b/scss/mixins/_color-mode.scss index 440c0faba9..23963be18c 100644 --- a/scss/mixins/_color-mode.scss +++ b/scss/mixins/_color-mode.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // scss-docs-start color-mode-mixin @mixin color-mode($mode: light, $root: false) { @if $color-mode-type == "media-query" { diff --git a/scss/mixins/_container.scss b/scss/mixins/_container.scss index b9f33519e2..5986f2d980 100644 --- a/scss/mixins/_container.scss +++ b/scss/mixins/_container.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // Container mixins @mixin make-container($gutter: $container-padding-x) { diff --git a/scss/mixins/_deprecate.scss b/scss/mixins/_deprecate.scss index df070bc596..9807ffffa6 100644 --- a/scss/mixins/_deprecate.scss +++ b/scss/mixins/_deprecate.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // Deprecate mixin // // This mixin can be used to deprecate mixins or functions. diff --git a/scss/mixins/_forms.scss b/scss/mixins/_forms.scss index 4554af35a5..a09f8e5063 100644 --- a/scss/mixins/_forms.scss +++ b/scss/mixins/_forms.scss @@ -1,3 +1,10 @@ +@use "../variables" as *; +@use "../functions/escape-svg" as *; +@use "../functions/math" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/ltr-rtl" as *; +@use "../vendor/rfs" as *; + // 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 diff --git a/scss/mixins/_gradients.scss b/scss/mixins/_gradients.scss index 608e18df2e..8ac4e7afad 100644 --- a/scss/mixins/_gradients.scss +++ b/scss/mixins/_gradients.scss @@ -1,3 +1,5 @@ +@use "../variables" as *; + // Gradients // scss-docs-start gradient-bg-mixin diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index 639528b236..22877b4c03 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -1,3 +1,9 @@ +@use "../variables" as *; +@use "../maps" as *; +@use "../functions/math" as *; +@use "breakpoints" as *; +@use "ltr-rtl" as *; + // Grid system // // Generate semantic grid columns with these mixins. @@ -13,7 +19,7 @@ margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list } -@mixin make-col-ready() { +@mixin make-col-ready($include-column-box-sizing: false) { // Add box sizing if only the grid is loaded box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null); // Prevent columns from becoming too narrow when at smaller grid tiers by diff --git a/scss/mixins/_list-group.scss b/scss/mixins/_list-group.scss index 03c207c3d7..21c60b5462 100644 --- a/scss/mixins/_list-group.scss +++ b/scss/mixins/_list-group.scss @@ -1,3 +1,4 @@ +@use "../mixins/deprecate" as *; @include deprecate("`list-group-item-variant()`", "v4.3.0", "v6.0.0"); // List Groups diff --git a/scss/mixins/_lists.scss b/scss/mixins/_lists.scss index 5b82d80cc7..48687c6433 100644 --- a/scss/mixins/_lists.scss +++ b/scss/mixins/_lists.scss @@ -1,3 +1,5 @@ +@use "ltr-rtl" as *; + // Lists // Unstyled keeps list items block level, just removes default browser padding and list-style diff --git a/scss/mixins/_ltr-rtl.scss b/scss/mixins/_ltr-rtl.scss index f85a54a719..f7fc19749c 100644 --- a/scss/mixins/_ltr-rtl.scss +++ b/scss/mixins/_ltr-rtl.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../functions/str-replace" as *; + @mixin ltr { @if $enable-ltr { html:not([dir="rtl"]) & { diff --git a/scss/mixins/_pagination.scss b/scss/mixins/_pagination.scss index 0d657964fb..f508db220f 100644 --- a/scss/mixins/_pagination.scss +++ b/scss/mixins/_pagination.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../vendor/rfs" as *; + // Pagination // scss-docs-start pagination-mixin diff --git a/scss/mixins/_reset-text.scss b/scss/mixins/_reset-text.scss index b48dd53279..3977171429 100644 --- a/scss/mixins/_reset-text.scss +++ b/scss/mixins/_reset-text.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "ltr-rtl" as *; + @mixin reset-text { font-family: $font-family-base; // We deliberately do NOT reset font-size or overflow-wrap / word-wrap. diff --git a/scss/mixins/_table-variants.scss b/scss/mixins/_table-variants.scss index 5fe1b9b20d..2a0654f794 100644 --- a/scss/mixins/_table-variants.scss +++ b/scss/mixins/_table-variants.scss @@ -1,3 +1,6 @@ +@use "../variables" as *; +@use "../functions/color-contrast" as *; + // scss-docs-start table-variant @mixin table-variant($state, $background) { .table-#{$state} { diff --git a/scss/mixins/_transition.scss b/scss/mixins/_transition.scss index d437f6d8f4..6226e82512 100644 --- a/scss/mixins/_transition.scss +++ b/scss/mixins/_transition.scss @@ -1,4 +1,6 @@ // stylelint-disable property-disallowed-list +@use "../variables" as *; + @mixin transition($transition...) { @if length($transition) == 0 { $transition: $transition-base; diff --git a/scss/mixins/_utilities.import.scss b/scss/mixins/_utilities.import.scss new file mode 100644 index 0000000000..d94f1f77bd --- /dev/null +++ b/scss/mixins/_utilities.import.scss @@ -0,0 +1 @@ +@forward "utilities"; diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index dc1238359f..8504572848 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -1,3 +1,12 @@ +@use "../variables" as *; +@use "../vendor/rfs" as *; +@use "ltr-rtl" as *; + +// Generate selectors for theme variants +@function theme-prefix($theme, $selector) { + @return #{"[data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ", [data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ":not([class*='#{$theme}:'])"}; +} + // Utility generator // Used to generate utilities & print utilities @mixin generate-utility($utility, $infix: "", $is-rfs-media-query: false) { diff --git a/scss/sidebar/_sidebar-narrow.scss b/scss/sidebar/_sidebar-narrow.scss index baf4a70dbf..1a30628988 100644 --- a/scss/sidebar/_sidebar-narrow.scss +++ b/scss/sidebar/_sidebar-narrow.scss @@ -1,3 +1,8 @@ +@use "../variables" as *; +@use "../mixins/breakpoints" as *; +@use "../mixins/ltr-rtl" as *; +@use "sidebar" as *; + .sidebar-narrow { // scss-docs-start sidebar-narrow-css-vars --#{$prefix}sidebar-narrow-width: #{$sidebar-narrow-width}; diff --git a/scss/sidebar/_sidebar-nav.scss b/scss/sidebar/_sidebar-nav.scss index db10e25a62..8eff573183 100644 --- a/scss/sidebar/_sidebar-nav.scss +++ b/scss/sidebar/_sidebar-nav.scss @@ -1,4 +1,9 @@ // Sidebar navigation +@use "../variables" as *; +@use "../functions/escape-svg" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/ltr-rtl" as *; +@use "../mixins/transition" as *; .sidebar-nav { // scss-docs-start sidebar-nav-css-vars diff --git a/scss/sidebar/_sidebar.scss b/scss/sidebar/_sidebar.scss index fcaddf29af..a28db21c32 100644 --- a/scss/sidebar/_sidebar.scss +++ b/scss/sidebar/_sidebar.scss @@ -1,4 +1,13 @@ // stylelint-disable function-disallowed-list +@use "../variables" as *; +@use "../variables-dark" as *; +@use "../functions/escape-svg" as *; +@use "../mixins/backdrop" as *; +@use "../mixins/border-radius" as *; +@use "../mixins/breakpoints" as *; +@use "../mixins/ltr-rtl" as *; +@use "../mixins/transition" as *; + .sidebar { // scss-docs-start sidebar-css-vars --#{$prefix}sidebar-zindex: #{$zindex-sidebar}; diff --git a/scss/test2.scss b/scss/test2.scss new file mode 100644 index 0000000000..9471dc9906 --- /dev/null +++ b/scss/test2.scss @@ -0,0 +1,3 @@ +@use "coreui" with ( + $accordion-padding-x: 20rem +); diff --git a/scss/utilities/_api.import.scss b/scss/utilities/_api.import.scss new file mode 100644 index 0000000000..a003da2df2 --- /dev/null +++ b/scss/utilities/_api.import.scss @@ -0,0 +1 @@ +@forward "api"; diff --git a/scss/utilities/_api.scss b/scss/utilities/_api.scss index 62e1d398e3..492abe8e0b 100644 --- a/scss/utilities/_api.scss +++ b/scss/utilities/_api.scss @@ -1,3 +1,9 @@ +@use "../variables" as *; +@use "../utilities" as *; +@use "../mixins/breakpoints" as *; +@use "../mixins/utilities" as *; +@use "../vendor/rfs" as *; + // Loop over each breakpoint @each $breakpoint in map-keys($grid-breakpoints) { From 45b792a0e21f501adef756d6ee4b1835283beda8 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 17:53:31 +0100 Subject: [PATCH 03/25] refactor: replace `blue()`, `green()`, and `red()` with `color.channel` --- scss/functions/_color-contrast.scss | 14 ++++++-------- scss/functions/_color.scss | 4 +++- scss/tests/mixins/_color-modes.test.scss | 8 ++++---- scss/tests/sass-true/runner.js | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss index 68b9fbd1fe..ce3465c9c9 100644 --- a/scss/functions/_color-contrast.scss +++ b/scss/functions/_color-contrast.scss @@ -1,13 +1,11 @@ +@use "sass:color"; +@use "sass:math"; @use "../variables" as *; @use "math" as *; // Color contrast // See https://github.com/twbs/bootstrap/pull/30168 -// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255) -// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern -$_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; $max-ratio: 0; @@ -40,13 +38,13 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 // 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", $space: rgb), // stylelint-disable-line scss/at-function-named-arguments + "g": color.channel($color, "green", $space: rgb), // stylelint-disable-line scss/at-function-named-arguments + "b": color.channel($color, "blue", $space: rgb) // stylelint-disable-line scss/at-function-named-arguments ); @each $name, $value in $rgb { - $value: if(divide($value, 255) < .04045, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1)); + $value: if(divide($value, 255) < .04045, divide(divide($value, 255), 12.92), math.pow(divide((divide(math.round($value) + 1, 255) + .055), 1.055), 2.4)); $rgb: map-merge($rgb, ($name: $value)); } diff --git a/scss/functions/_color.scss b/scss/functions/_color.scss index 0b03afb5ca..cb0362c1fa 100644 --- a/scss/functions/_color.scss +++ b/scss/functions/_color.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + // scss-docs-start color-functions // Tint a color: mix a color with white @function tint-color($color, $weight) { @@ -16,7 +18,7 @@ // scss-docs-end color-functions @function to-rgb($value) { - @return red($value), green($value), blue($value); + @return color.channel($value, "red", $space: rgb), color.channel($value, "green", $space: rgb), color.channel($value, "blue", $space: rgb); } @function rgba-css-var($prefix, $identifier, $target) { diff --git a/scss/tests/mixins/_color-modes.test.scss b/scss/tests/mixins/_color-modes.test.scss index 9f282fcd01..3faad43152 100644 --- a/scss/tests/mixins/_color-modes.test.scss +++ b/scss/tests/mixins/_color-modes.test.scss @@ -17,7 +17,7 @@ } } @include color-mode(dark, true) { - --custom-color: #{mix($indigo, $blue, 50%)}; + --custom-color: #{$indigo}; } } @include expect() { @@ -26,7 +26,7 @@ background-color: var(--cui-primary-bg-subtle); } [data-coreui-theme=dark] { - --custom-color: #3a3ff8; + --custom-color: #6610f2; } } } @@ -46,7 +46,7 @@ } } @include color-mode(dark, true) { - --custom-color: #{mix($indigo, $blue, 50%)}; + --custom-color: #{$indigo} } } @include expect() { @@ -58,7 +58,7 @@ } @media (prefers-color-scheme: dark) { :root { - --custom-color: #3a3ff8; + --custom-color: #6610f2; } } } diff --git a/scss/tests/sass-true/runner.js b/scss/tests/sass-true/runner.js index bef870ac6b..edf9ac4304 100644 --- a/scss/tests/sass-true/runner.js +++ b/scss/tests/sass-true/runner.js @@ -6,7 +6,7 @@ const { runSass } = require('sass-true') module.exports = (filename, { describe, it }) => { const data = fs.readFileSync(filename, 'utf8') - const TRUE_SETUP = '$true-terminal-output: false; @import "true";' + const TRUE_SETUP = '$true-terminal-output: false; @use "true" as *;' const sassString = TRUE_SETUP + data runSass( From d72a5568c55ba17aa7dcddefdfac8d8769837156 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 17:59:37 +0100 Subject: [PATCH 04/25] refactor: replace `desaturate()` with `color.scale()` --- scss/_variables-dark.scss | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index af676dbc03..31e70261aa 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @use "variables" as *; @use "functions/color" as *; @@ -45,12 +46,12 @@ $disabled-dark: rgba($white, .38) !default; // Deprecated in v5.0.0 // fusv-enable // scss-docs-start theme-color-dark-variables -$primary-dark: desaturate($primary, 10%) !default; +$primary-dark: color.scale($primary, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments $secondary-dark: $secondary !default; -$success-dark: desaturate($success, 10%) !default; -$info-dark: desaturate($info, 10%) !default; -$warning-dark: desaturate($warning, 10%) !default; -$danger-dark: desaturate($danger, 10%) !default; +$success-dark: color.scale($success, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$info-dark: color.scale($info, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$warning-dark: color.scale($warning, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$danger-dark: color.scale($danger, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments $light-dark: $light !default; $dark-dark: $dark !default; // scss-docs-end theme-color-dark-variables @@ -69,12 +70,12 @@ $theme-colors-dark: ( // scss-docs-end theme-colors-dark-map // scss-docs-start theme-text-dark-variables -$primary-text-emphasis-dark: desaturate($primary-text-emphasis, 10%) !default; +$primary-text-emphasis-dark: color.scale($primary-text-emphasis, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments $secondary-text-emphasis-dark: $secondary-text-emphasis !default; -$success-text-emphasis-dark: desaturate($success-text-emphasis, 10%) !default; -$info-text-emphasis-dark: desaturate($info-text-emphasis, 10%) !default; -$warning-text-emphasis-dark: desaturate($warning-text-emphasis, 10%) !default; -$danger-text-emphasis-dark: desaturate($danger-text-emphasis, 10%) !default; +$success-text-emphasis-dark: color.scale($success-text-emphasis, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$info-text-emphasis-dark: color.scale($info-text-emphasis, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$warning-text-emphasis-dark: color.scale($warning-text-emphasis, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments +$danger-text-emphasis-dark: color.scale($danger-text-emphasis, $saturation: -10%) !default; // stylelint-disable-line scss/at-function-named-arguments $light-text-emphasis-dark: $gray-100-dark !default; $dark-text-emphasis-dark: $gray-300-dark !default; // scss-docs-end theme-text-dark-variables From 8d4baeb61eed66f2334bbbc739a897c96ff99ae1 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:08:45 +0100 Subject: [PATCH 05/25] refactor: replace `unit()` with `math.unit()` --- scss/forms/_form-control.scss | 3 ++- scss/functions/_assert.scss | 4 +++- scss/functions/_math.scss | 6 ++++-- scss/vendor/_rfs.scss | 13 +++++++------ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scss/forms/_form-control.scss b/scss/forms/_form-control.scss index b93175eff0..12d266de9f 100644 --- a/scss/forms/_form-control.scss +++ b/scss/forms/_form-control.scss @@ -1,3 +1,4 @@ +@use "sass:math"; @use "../variables" as *; @use "../mixins/border-radius" as *; @use "../mixins/box-shadow" as *; @@ -63,7 +64,7 @@ // 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 diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss index 7e0bcc53de..e65ada9e20 100644 --- a/scss/functions/_assert.scss +++ b/scss/functions/_assert.scss @@ -1,10 +1,12 @@ +@use "sass:math"; + // Ascending // Used to evaluate Sass maps like our grid breakpoints. @mixin assert-ascending($map, $map-name) { $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}' !"; diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss index da562c61e7..407169a833 100644 --- a/scss/functions/_math.scss +++ b/scss/functions/_math.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + // Return valid calc @function add($value1, $value2, $return-calc: true) { @if $value1 == null { @@ -67,8 +69,8 @@ } } $result: $result * $factor * $sign; - $dividend-unit: unit($dividend); - $divisor-unit: unit($divisor); + $dividend-unit: math.unit($dividend); + $divisor-unit: math.unit($divisor); $unit-map: ( "px": 1px, "rem": 1rem, diff --git a/scss/vendor/_rfs.scss b/scss/vendor/_rfs.scss index 614c6bde4f..1e2d83770c 100644 --- a/scss/vendor/_rfs.scss +++ b/scss/vendor/_rfs.scss @@ -1,4 +1,5 @@ // stylelint-disable scss/dimension-no-non-numeric-values +@use "sass:math"; // SCSS RFS mixin // @@ -50,7 +51,7 @@ $rfs-safari-iframe-resize-bug-fix: false !default; $enable-rfs: true !default; // Cache $rfs-base-value unit -$rfs-base-value-unit: unit($rfs-base-value); +$rfs-base-value-unit: math.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); @@ -80,8 +81,8 @@ $rfs-base-value-unit: unit($rfs-base-value); } } $result: $result * $factor * $sign; - $dividend-unit: unit($dividend); - $divisor-unit: unit($divisor); + $dividend-unit: math.unit($dividend); + $divisor-unit: math.unit($divisor); $unit-map: ( "px": 1px, "rem": 1rem, @@ -103,7 +104,7 @@ $rfs-base-value-unit: unit($rfs-base-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 { @@ -201,7 +202,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } @else { // Cache $value unit - $unit: if(type-of($value) == "number", unit($value), false); + $unit: if(type-of($value) == "number", math.unit($value), false); @if $unit == px { // Convert to rem if needed @@ -234,7 +235,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height $val: $val + " 0"; } @else { // Cache $value unit - $unit: if(type-of($value) == "number", unit($value), false); + $unit: if(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 { From 5ea8f8e8337c3506a6c0b3aa14be8eedcc17dff4 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:12:04 +0100 Subject: [PATCH 06/25] refactor: replace `comparable()` with `math.compatible()` --- scss/functions/_assert.scss | 2 +- scss/functions/_math.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss index e65ada9e20..fe3b36e57d 100644 --- a/scss/functions/_assert.scss +++ b/scss/functions/_assert.scss @@ -8,7 +8,7 @@ @each $key, $num in $map { @if $prev-num == null or math.unit($num) == "%" or math.unit($prev-num) == "%" { // Do nothing - } @else if not comparable($prev-num, $num) { + } @else if not math.compatible($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}' !"; } @else if $prev-num >= $num { @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss index 407169a833..3c4f751ead 100644 --- a/scss/functions/_math.scss +++ b/scss/functions/_math.scss @@ -10,7 +10,7 @@ @return $value1; } - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { + @if type-of($value1) == number and type-of($value2) == number and math.compatible($value1, $value2) { @return $value1 + $value2; } @@ -30,7 +30,7 @@ @return $value1; } - @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { + @if type-of($value1) == number and type-of($value2) == number and math.compatible($value1, $value2) { @return $value1 - $value2; } From f146dff73025c0ea0e1195a9543fdf6fa88990cd Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:20:00 +0100 Subject: [PATCH 07/25] refactor: replace `mix()` with `color.mix()` --- scss/_variables-dark.scss | 4 ++-- scss/_variables.scss | 5 +++-- scss/functions/_color-contrast.scss | 2 +- scss/functions/_color.scss | 4 ++-- scss/mixins/_buttons.scss | 3 ++- scss/mixins/_table-variants.scss | 9 +++++---- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index 31e70261aa..ff6b1d3892 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -88,7 +88,7 @@ $info-bg-subtle-dark: $info-bg-subtle !default; $warning-bg-subtle-dark: $warning-bg-subtle !default; $danger-bg-subtle-dark: $danger-bg-subtle !default; $light-bg-subtle-dark: $gray-800-dark !default; -$dark-bg-subtle-dark: mix($gray-800-dark, $black) !default; +$dark-bg-subtle-dark: color.mix($gray-800-dark, $black) !default; // scss-docs-end theme-bg-subtle-dark-variables // scss-docs-start theme-border-subtle-dark-variables @@ -107,7 +107,7 @@ $body-bg-dark: $gray-900-dark !default; $body-secondary-color-dark: rgba($white, .6) !default; $body-secondary-bg-dark: $gray-800-dark !default; $body-tertiary-color-dark: rgba($white, .38) !default; -$body-tertiary-bg-dark: mix($gray-800-dark, #212631, 50%) !default; +$body-tertiary-bg-dark: color.mix($gray-800-dark, #212631, 50%) !default; $body-emphasis-color-dark: $white !default; $border-color-dark: $gray-800-dark !default; $border-color-translucent-dark: rgba($white, .1) !default; diff --git a/scss/_variables.scss b/scss/_variables.scss index 0bd9e6273b..779f5e2660 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @use "functions/assert" as *; @use "functions/color" as *; @use "functions/math" as *; @@ -354,7 +355,7 @@ $success-bg-subtle: #cbedd6 !default; $info-bg-subtle: #c0e6ff !default; $warning-bg-subtle: #feecc5 !default; $danger-bg-subtle: #f9d4d4 !default; -$light-bg-subtle: mix($gray-100, $white) !default; +$light-bg-subtle: color.mix($gray-100, $white) !default; $dark-bg-subtle: $gray-400 !default; // scss-docs-end theme-bg-subtle-variables @@ -872,7 +873,7 @@ $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; $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; TODO: ???? +// $btn-link-focus-shadow-rgb: to-rgb(color.mix(color-contrast($link-color), $link-color, 15%)) !default; TODO: ???? // Allows for customizing button radius independently from global border radius $btn-border-radius: var(--#{$prefix}border-radius) !default; diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss index ce3465c9c9..051cad8a87 100644 --- a/scss/functions/_color-contrast.scss +++ b/scss/functions/_color-contrast.scss @@ -54,5 +54,5 @@ // 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, opacity($foreground) * 100%); } diff --git a/scss/functions/_color.scss b/scss/functions/_color.scss index cb0362c1fa..49abc3a0cc 100644 --- a/scss/functions/_color.scss +++ b/scss/functions/_color.scss @@ -3,12 +3,12 @@ // scss-docs-start color-functions // 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 @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 diff --git a/scss/mixins/_buttons.scss b/scss/mixins/_buttons.scss index 672485b78c..62d8568544 100644 --- a/scss/mixins/_buttons.scss +++ b/scss/mixins/_buttons.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @use "../variables" as *; @use "../functions/color" as *; @use "../functions/color-contrast" as *; @@ -29,7 +30,7 @@ --#{$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-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}; diff --git a/scss/mixins/_table-variants.scss b/scss/mixins/_table-variants.scss index 2a0654f794..89f572ba37 100644 --- a/scss/mixins/_table-variants.scss +++ b/scss/mixins/_table-variants.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @use "../variables" as *; @use "../functions/color-contrast" as *; @@ -5,10 +6,10 @@ @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)); + $hover-bg: color.mix($color, $background, percentage($table-hover-bg-factor)); + $striped-bg: color.mix($color, $background, percentage($table-striped-bg-factor)); + $active-bg: color.mix($color, $background, percentage($table-active-bg-factor)); + $table-border-color: color.mix($color, $background, percentage($table-border-factor)); --#{$prefix}table-color: #{$color}; --#{$prefix}table-bg: #{$background}; From 9a9f4b1ec4a41906f4db938490ee3667e4b47c1c Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:24:11 +0100 Subject: [PATCH 08/25] refactor: replace `type-of()` with `meta.type-of()` --- scss/functions/_math.scss | 7 ++++--- scss/mixins/_border-radius.scss | 3 ++- scss/mixins/_utilities.scss | 7 ++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss index 3c4f751ead..94c44c2fab 100644 --- a/scss/functions/_math.scss +++ b/scss/functions/_math.scss @@ -1,4 +1,5 @@ @use "sass:math"; +@use "sass:meta"; // Return valid calc @function add($value1, $value2, $return-calc: true) { @@ -10,7 +11,7 @@ @return $value1; } - @if type-of($value1) == number and type-of($value2) == number and math.compatible($value1, $value2) { + @if meta.type-of($value1) == number and meta.type-of($value2) == number and math.compatible($value1, $value2) { @return $value1 + $value2; } @@ -30,11 +31,11 @@ @return $value1; } - @if type-of($value1) == number and type-of($value2) == number and math.compatible($value1, $value2) { + @if meta.type-of($value1) == number and meta.type-of($value2) == number and math.compatible($value1, $value2) { @return $value1 - $value2; } - @if type-of($value2) != number { + @if meta.type-of($value2) != number { $value2: unquote("(") + $value2 + unquote(")"); } diff --git a/scss/mixins/_border-radius.scss b/scss/mixins/_border-radius.scss index ae78f426c5..56c705cd3c 100644 --- a/scss/mixins/_border-radius.scss +++ b/scss/mixins/_border-radius.scss @@ -1,4 +1,5 @@ // stylelint-disable property-disallowed-list +@use "sass:meta"; @use "../variables" as *; @use "ltr-rtl" as *; @@ -8,7 +9,7 @@ @function valid-radius($radius) { $return: (); @each $value in $radius { - @if type-of($value) == number { + @if meta.type-of($value) == number { $return: append($return, max($value, 0)); } @else { $return: append($return, $value); diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 8504572848..26dbddac14 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -1,3 +1,4 @@ +@use "sass:meta"; @use "../variables" as *; @use "../vendor/rfs" as *; @use "ltr-rtl" as *; @@ -13,7 +14,7 @@ $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" { + @if meta.type-of($values) == "string" or meta.type-of(nth($values, 1)) != "list" { $values: zip($values, $values); } @@ -21,7 +22,7 @@ $properties: map-get($utility, property); // Multiple properties are possible, for example with vertical or horizontal margins or paddings - @if type-of($properties) == "string" { + @if meta.type-of($properties) == "string" { $properties: append((), $properties); } @@ -102,7 +103,7 @@ } } @if $is-rtl == true { - @if (type-of($value) == "map") { + @if (meta.type-of($value) == "map") { @include ltr-rtl($property, map-get($value, "ltr"), null, map-get($value, "rtl"), if($enable-important-utilities, !important, null)); } @else { @include ltr-rtl($property, $value, null, null, if($enable-important-utilities, !important, null)); From 99319b1fbbd4763e8c36836a158656f0b2c0bb5f Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:31:28 +0100 Subject: [PATCH 09/25] refactor: replace `unquote()` with `string.unquote()` --- scss/forms/_input-group.scss | 3 ++- scss/functions/_math.scss | 7 ++++--- scss/mixins/_ltr-rtl.scss | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/scss/forms/_input-group.scss b/scss/forms/_input-group.scss index 18b4128681..75c8a5550f 100644 --- a/scss/forms/_input-group.scss +++ b/scss/forms/_input-group.scss @@ -1,3 +1,4 @@ +@use "sass:string"; @use "../variables" as *; @use "../mixins/border-radius" as *; @use "../mixins/ltr-rtl" as *; @@ -122,7 +123,7 @@ $validation-messages: ""; @each $state in map-keys($form-validation-states) { - $validation-messages: $validation-messages + ":not(." + unquote($state) + "-tooltip)" + ":not(." + unquote($state) + "-feedback)"; + $validation-messages: $validation-messages + ":not(." + string.unquote($state) + "-tooltip)" + ":not(." + string.unquote($state) + "-feedback)"; } > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss index 94c44c2fab..f172814b14 100644 --- a/scss/functions/_math.scss +++ b/scss/functions/_math.scss @@ -1,5 +1,6 @@ @use "sass:math"; @use "sass:meta"; +@use "sass:string"; // Return valid calc @function add($value1, $value2, $return-calc: true) { @@ -15,7 +16,7 @@ @return $value1 + $value2; } - @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); + @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + string.unquote(" + ") + $value2); } @function subtract($value1, $value2, $return-calc: true) { @@ -36,10 +37,10 @@ } @if meta.type-of($value2) != number { - $value2: unquote("(") + $value2 + unquote(")"); + $value2: string.unquote("(") + $value2 + string.unquote(")"); } - @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); + @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + string.unquote(" - ") + $value2); } @function divide($dividend, $divisor, $precision: 10) { diff --git a/scss/mixins/_ltr-rtl.scss b/scss/mixins/_ltr-rtl.scss index f7fc19749c..62beb8e663 100644 --- a/scss/mixins/_ltr-rtl.scss +++ b/scss/mixins/_ltr-rtl.scss @@ -1,3 +1,4 @@ +@use "sass:string"; @use "../variables" as *; @use "../functions/str-replace" as *; @@ -26,7 +27,7 @@ @return str-replace($string, "right", "left"); } - @return unquote($string); + @return string.unquote($string); } @mixin ltr-rtl($property, $value, $property-rtl: null, $value-rtl: null, $important: null) { From 18621e3b58c785a2446548378230bb481758e065 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:36:32 +0100 Subject: [PATCH 10/25] refactor: replace `nth()` with `list.nth()` --- scss/functions/_assert.scss | 3 ++- scss/mixins/_breakpoints.scss | 3 ++- scss/mixins/_transition.scss | 5 +++-- scss/mixins/_utilities.scss | 5 +++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss index fe3b36e57d..04723932a3 100644 --- a/scss/functions/_assert.scss +++ b/scss/functions/_assert.scss @@ -1,3 +1,4 @@ +@use "sass:list"; @use "sass:math"; // Ascending @@ -23,7 +24,7 @@ @mixin assert-starts-at-zero($map, $map-name: "$grid-breakpoints") { @if length($map) > 0 { $values: map-values($map); - $first-value: nth($values, 1); + $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}."; } diff --git a/scss/mixins/_breakpoints.scss b/scss/mixins/_breakpoints.scss index e316f0530f..e29219bf76 100644 --- a/scss/mixins/_breakpoints.scss +++ b/scss/mixins/_breakpoints.scss @@ -1,3 +1,4 @@ +@use "sass:list"; @use "../variables" as *; // Breakpoint viewport sizes and media queries. @@ -21,7 +22,7 @@ @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 < length($breakpoint-names), list.nth($breakpoint-names, $n + 1), null); } // Minimum breakpoint width. Null for the smallest (first) breakpoint. diff --git a/scss/mixins/_transition.scss b/scss/mixins/_transition.scss index 6226e82512..7647a71ad7 100644 --- a/scss/mixins/_transition.scss +++ b/scss/mixins/_transition.scss @@ -1,4 +1,5 @@ // stylelint-disable property-disallowed-list +@use "sass:list"; @use "../variables" as *; @mixin transition($transition...) { @@ -15,11 +16,11 @@ } @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; } diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 26dbddac14..7087e90765 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -1,3 +1,4 @@ +@use "sass:list"; @use "sass:meta"; @use "../variables" as *; @use "../vendor/rfs" as *; @@ -14,7 +15,7 @@ $values: map-get($utility, values); // If the values are a list or string, convert it into a map - @if meta.type-of($values) == "string" or meta.type-of(nth($values, 1)) != "list" { + @if meta.type-of($values) == "string" or meta.type-of(list.nth($values, 1)) != "list" { $values: zip($values, $values); } @@ -27,7 +28,7 @@ } // 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` From 33847abefdf2861d7ba4e376cb3438f66a68c478 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 18:37:54 +0100 Subject: [PATCH 11/25] refactor: replace `type-of()` with `meta.typeof()` and `unquote()` with `string.unquote()` --- scss/utilities/_api.scss | 7 ++++--- scss/vendor/_rfs.scss | 16 +++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/scss/utilities/_api.scss b/scss/utilities/_api.scss index 492abe8e0b..82f7c3fda4 100644 --- a/scss/utilities/_api.scss +++ b/scss/utilities/_api.scss @@ -1,3 +1,4 @@ +@use "sass:meta"; @use "../variables" as *; @use "../utilities" as *; @use "../mixins/breakpoints" as *; @@ -15,7 +16,7 @@ @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 == "") { + @if meta.type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") { @include generate-utility($utility, $infix); } } @@ -32,7 +33,7 @@ @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 == "") { + @if meta.type-of($utility) == "map" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == "") { @include generate-utility($utility, $infix, true); } } @@ -46,7 +47,7 @@ @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 { + @if meta.type-of($utility) == "map" and map-get($utility, print) == true { @include generate-utility($utility, "-print"); } } diff --git a/scss/vendor/_rfs.scss b/scss/vendor/_rfs.scss index 1e2d83770c..b300bb509f 100644 --- a/scss/vendor/_rfs.scss +++ b/scss/vendor/_rfs.scss @@ -1,5 +1,7 @@ // stylelint-disable scss/dimension-no-non-numeric-values @use "sass:math"; +@use "sass:meta"; +@use "sass:string"; // SCSS RFS mixin // @@ -31,7 +33,7 @@ $rfs-two-dimensional: false !default; // 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."; } @@ -191,7 +193,7 @@ $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: ""; @@ -202,7 +204,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } @else { // Cache $value unit - $unit: if(type-of($value) == "number", math.unit($value), false); + $unit: if(meta.type-of($value) == "number", math.unit($value), false); @if $unit == px { // Convert to rem if needed @@ -219,13 +221,13 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } // Remove first space - @return unquote(str-slice($val, 2)); + @return string.unquote(str-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: ""; @@ -235,7 +237,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height $val: $val + " 0"; } @else { // Cache $value unit - $unit: if(type-of($value) == "number", math.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 { @@ -275,7 +277,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } // Remove first space - @return unquote(str-slice($val, 2)); + @return string.unquote(str-slice($val, 2)); } // RFS mixin From 02a4b41fecffed8662571a71894d08a83b2c7379 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 19:12:33 +0100 Subject: [PATCH 12/25] refactor: replace `map-get()` to `map.get()`, `map-has-keys()` with `map.has-keys()`, `map-keys()` with `map.keys()`, and `map-merge()` with `map.merge()` --- scss/_alert.scss | 3 ++- scss/_avatar.scss | 11 +++++----- scss/_dropdown.scss | 3 ++- scss/_list-group.scss | 5 +++-- scss/_maps.scss | 7 ++++--- scss/_modal.scss | 3 ++- scss/_navbar.scss | 3 ++- scss/_offcanvas.scss | 5 +++-- scss/_tables.scss | 3 ++- scss/_utilities.scss | 31 +++++++++++++++-------------- scss/forms/_form-check.scss | 5 +++-- scss/forms/_input-group.scss | 3 ++- scss/functions/_color-contrast.scss | 5 +++-- scss/functions/_maps.scss | 9 +++++---- scss/functions/_math.scss | 5 +++-- scss/helpers/_position.scss | 3 ++- scss/mixins/_breakpoints.scss | 7 ++++--- scss/mixins/_grid.scss | 5 +++-- scss/mixins/_list-group.scss | 7 ++++--- scss/mixins/_utilities.scss | 23 +++++++++++---------- scss/utilities/_api.scss | 13 ++++++------ scss/vendor/_rfs.scss | 5 +++-- 22 files changed, 93 insertions(+), 71 deletions(-) diff --git a/scss/_alert.scss b/scss/_alert.scss index d90b86dba4..8cf135431e 100644 --- a/scss/_alert.scss +++ b/scss/_alert.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @@ -61,7 +62,7 @@ // 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); diff --git a/scss/_avatar.scss b/scss/_avatar.scss index 972e0bf9d7..f15561ef95 100644 --- a/scss/_avatar.scss +++ b/scss/_avatar.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @@ -45,11 +46,11 @@ @each $size, $map in $avatar-sizes { .avatar-#{$size} { - --#{$prefix}avatar-width: #{map-get($map, "width")}; - --#{$prefix}avatar-height: #{map-get($map, "height")}; - --#{$prefix}avatar-font-size: #{map-get($map, "font-size")}; - --#{$prefix}avatar-status-width: #{map-get($map, "status-width")}; - --#{$prefix}avatar-status-height: #{map-get($map, "status-height")}; + --#{$prefix}avatar-width: #{map.get($map, "width")}; + --#{$prefix}avatar-height: #{map.get($map, "height")}; + --#{$prefix}avatar-font-size: #{map.get($map, "font-size")}; + --#{$prefix}avatar-status-width: #{map.get($map, "status-width")}; + --#{$prefix}avatar-status-height: #{map.get($map, "status-height")}; } } diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss index a7fa251267..77617c1490 100644 --- a/scss/_dropdown.scss +++ b/scss/_dropdown.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @@ -94,7 +95,7 @@ // We deliberately hardcode the `cui-` 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); diff --git a/scss/_list-group.scss b/scss/_list-group.scss index a038e745d7..96beb88b90 100644 --- a/scss/_list-group.scss +++ b/scss/_list-group.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/breakpoints" as *; @@ -124,7 +125,7 @@ // // 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); @@ -185,7 +186,7 @@ // 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); diff --git a/scss/_maps.scss b/scss/_maps.scss index efb604f498..3aabdd959e 100644 --- a/scss/_maps.scss +++ b/scss/_maps.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "variables-dark" as *; @use "functions/color" as *; @@ -110,7 +111,7 @@ $utilities-colors: $theme-colors-rgb !default; // scss-docs-end utilities-colors // scss-docs-start utilities-text-colors -$utilities-text: map-merge( +$utilities-text: map.merge( $utilities-colors, ( "black": to-rgb($black), @@ -133,7 +134,7 @@ $utilities-text-emphasis-colors: ( // scss-docs-end utilities-text-colors // scss-docs-start utilities-bg-colors -$utilities-bg: map-merge( +$utilities-bg: map.merge( $utilities-colors, ( "black": to-rgb($black), @@ -156,7 +157,7 @@ $utilities-bg-subtle: ( // scss-docs-end utilities-bg-colors // scss-docs-start utilities-border-colors -$utilities-border: map-merge( +$utilities-border: map.merge( $utilities-colors, ( "black": to-rgb($black), diff --git a/scss/_modal.scss b/scss/_modal.scss index a2c423217a..07181f38b1 100644 --- a/scss/_modal.scss +++ b/scss/_modal.scss @@ -1,4 +1,5 @@ // stylelint-disable function-disallowed-list +@use "sass:map"; @use "variables" as *; @use "mixins/backdrop" as *; @use "mixins/border-radius" as *; @@ -212,7 +213,7 @@ } // 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", ""); diff --git a/scss/_navbar.scss b/scss/_navbar.scss index 9daac4b549..6717287862 100644 --- a/scss/_navbar.scss +++ b/scss/_navbar.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @@ -202,7 +203,7 @@ // 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); diff --git a/scss/_offcanvas.scss b/scss/_offcanvas.scss index 7b6a10e977..e2ba67ab0e 100644 --- a/scss/_offcanvas.scss +++ b/scss/_offcanvas.scss @@ -1,4 +1,5 @@ // stylelint-disable function-disallowed-list +@use "sass:map"; @use "variables" as *; @use "mixins/backdrop" as *; @use "mixins/box-shadow" as *; @@ -23,7 +24,7 @@ // 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); @@ -32,7 +33,7 @@ } } -@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); diff --git a/scss/_tables.scss b/scss/_tables.scss index f624e321a6..880ffe4689 100644 --- a/scss/_tables.scss +++ b/scss/_tables.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "mixins/breakpoints" as *; @use "mixins/table-variants" as *; @@ -163,7 +164,7 @@ // 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) { diff --git a/scss/_utilities.scss b/scss/_utilities.scss index 0f21759c10..65eb20ab76 100644 --- a/scss/_utilities.scss +++ b/scss/_utilities.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "variables" as *; @use "maps" as *; @use "functions/maps" as *; @@ -6,7 +7,7 @@ $utilities: () !default; // stylelint-disable-next-line scss/dollar-variable-default -$utilities: map-merge( +$utilities: map.merge( ( // scss-docs-start utils-vertical-align "align": ( @@ -184,26 +185,26 @@ $utilities: map-merge( "border-top-color": ( property: border-top-color, class: border-top, - values: map-merge($theme-colors, ("white": $white)), + values: map.merge($theme-colors, ("white": $white)), vars: true ), "border-end-color": ( property: border-right-color, class: border-end, - values: map-merge($theme-colors, ("white": $white)), + values: map.merge($theme-colors, ("white": $white)), vars: true, rtl: true ), "border-bottom-color": ( property: border-bottom-color, class: border-bottom, - values: map-merge($theme-colors, ("white": $white)), + values: map.merge($theme-colors, ("white": $white)), vars: true ), "border-start-color": ( property: border-left-color, class: border-start, - values: map-merge($theme-colors, ("white": $white)), + values: map.merge($theme-colors, ("white": $white)), vars: true, rtl: true ), @@ -411,44 +412,44 @@ $utilities: map-merge( 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)), rtl: true ), "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)), rtl: true ), // Negative margin utilities @@ -645,7 +646,7 @@ $utilities: map-merge( local-vars: ( "text-opacity": 1 ), - values: map-merge( + values: map.merge( $utilities-text-colors, ( "muted": var(--#{$prefix}secondary-color), // deprecated @@ -709,7 +710,7 @@ $utilities: map-merge( local-vars: ( "link-underline-opacity": 1 ), - values: map-merge( + values: map.merge( $utilities-links-underline, ( null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)), @@ -738,7 +739,7 @@ $utilities: map-merge( local-vars: ( "bg-opacity": 1 ), - values: map-merge( + values: map.merge( $utilities-bg-colors, ( "transparent": transparent, diff --git a/scss/forms/_form-check.scss b/scss/forms/_form-check.scss index 1a4b539761..fec47dde46 100644 --- a/scss/forms/_form-check.scss +++ b/scss/forms/_form-check.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "../variables" as *; @use "../variables-dark" as *; @use "../functions/escape-svg" as *; @@ -169,8 +170,8 @@ } @each $size, $map in $form-switch-widths { - $width: map-get($map, "width"); - $height: map-get($map, "height"); + $width: map.get($map, "width"); + $height: map.get($map, "height"); .form-switch-#{$size} { min-height: $height; diff --git a/scss/forms/_input-group.scss b/scss/forms/_input-group.scss index 75c8a5550f..9a97a665a9 100644 --- a/scss/forms/_input-group.scss +++ b/scss/forms/_input-group.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "sass:string"; @use "../variables" as *; @use "../mixins/border-radius" as *; @@ -122,7 +123,7 @@ } $validation-messages: ""; - @each $state in map-keys($form-validation-states) { + @each $state in map.keys($form-validation-states) { $validation-messages: $validation-messages + ":not(." + string.unquote($state) + "-tooltip)" + ":not(." + string.unquote($state) + "-feedback)"; } diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss index 051cad8a87..48e8fb837e 100644 --- a/scss/functions/_color-contrast.scss +++ b/scss/functions/_color-contrast.scss @@ -1,4 +1,5 @@ @use "sass:color"; +@use "sass:map"; @use "sass:math"; @use "../variables" as *; @use "math" as *; @@ -45,10 +46,10 @@ @each $name, $value in $rgb { $value: if(divide($value, 255) < .04045, divide(divide($value, 255), 12.92), math.pow(divide((divide(math.round($value) + 1, 255) + .055), 1.055), 2.4)); - $rgb: map-merge($rgb, ($name: $value)); + $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 diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss index 909895b773..c27b5640e9 100644 --- a/scss/functions/_maps.scss +++ b/scss/functions/_maps.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "../variables" as *; @use "color" as *; @@ -12,7 +13,7 @@ $_args: append($_args, if($arg == "$prefix", $prefix, if($arg == "$key", $key, if($arg == "$value", $value, $arg)))); } - $_map: map-merge($_map, ($key: call(get-function($func), $_args...))); + $_map: map.merge($_map, ($key: call(get-function($func), $_args...))); } @return $_map; } @@ -24,7 +25,7 @@ $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; @@ -35,7 +36,7 @@ $result: (); @each $key, $value in $map { @if (index($values, $key) != null) { - $result: map-merge($result, ($key: $value)); + $result: map.merge($result, ($key: $value)); } } @return $result; @@ -46,7 +47,7 @@ $merged-maps: (); @each $map in $maps { - $merged-maps: map-merge($merged-maps, $map); + $merged-maps: map.merge($merged-maps, $map); } @return $merged-maps; } diff --git a/scss/functions/_math.scss b/scss/functions/_math.scss index f172814b14..3dab817f9b 100644 --- a/scss/functions/_math.scss +++ b/scss/functions/_math.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "sass:math"; @use "sass:meta"; @use "sass:string"; @@ -79,8 +80,8 @@ "em": 1em, "%": 1% ); - @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { - $result: $result * map-get($unit-map, $dividend-unit); + @if ($dividend-unit != $divisor-unit and map.has-key($unit-map, $dividend-unit)) { + $result: $result * map.get($unit-map, $dividend-unit); } @return $result; } diff --git a/scss/helpers/_position.scss b/scss/helpers/_position.scss index 0246e19f96..6045d11be5 100644 --- a/scss/helpers/_position.scss +++ b/scss/helpers/_position.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "../variables" as *; @use "../mixins/breakpoints" as *; @@ -20,7 +21,7 @@ } // 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); diff --git a/scss/mixins/_breakpoints.scss b/scss/mixins/_breakpoints.scss index e29219bf76..523fc3a64b 100644 --- a/scss/mixins/_breakpoints.scss +++ b/scss/mixins/_breakpoints.scss @@ -1,4 +1,5 @@ @use "sass:list"; +@use "sass:map"; @use "../variables" as *; // Breakpoint viewport sizes and media queries. @@ -17,7 +18,7 @@ // 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)) { +@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map.keys($breakpoints)) { $n: index($breakpoint-names, $name); @if not $n { @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; @@ -30,7 +31,7 @@ // >> 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); } @@ -44,7 +45,7 @@ // >> 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); } diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index 22877b4c03..0d2b77846e 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "../variables" as *; @use "../maps" as *; @use "../functions/math" as *; @@ -72,7 +73,7 @@ // any value of `$grid-columns`. @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { - @each $breakpoint in map-keys($breakpoints) { + @each $breakpoint in map.keys($breakpoints) { $infix: breakpoint-infix($breakpoint, $breakpoints); @include media-breakpoint-up($breakpoint, $breakpoints) { @@ -133,7 +134,7 @@ } @mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) { - @each $breakpoint in map-keys($breakpoints) { + @each $breakpoint in map.keys($breakpoints) { $infix: breakpoint-infix($breakpoint, $breakpoints); @include media-breakpoint-up($breakpoint, $breakpoints) { diff --git a/scss/mixins/_list-group.scss b/scss/mixins/_list-group.scss index 21c60b5462..2dd2a37c56 100644 --- a/scss/mixins/_list-group.scss +++ b/scss/mixins/_list-group.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "../mixins/deprecate" as *; @include deprecate("`list-group-item-variant()`", "v4.3.0", "v6.0.0"); @@ -5,9 +6,9 @@ // scss-docs-start list-group-mixin @mixin list-group-item-variant($state, $variant) { - $background: map-get($variant, "bg"); - $background-hover: map-get($variant, "bg-hover"); - $color: contrast-ratio-correction(map-get($variant, "color"), map-get($variant, "bg"), $alert-color-scale, $state); + $background: map.get($variant, "bg"); + $background-hover: map.get($variant, "bg-hover"); + $color: contrast-ratio-correction(map.get($variant, "color"), map.get($variant, "bg"), $alert-color-scale, $state); --#{$prefix}list-group-color: #{$color}; --#{$prefix}list-group-bg: #{$background}; diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 7087e90765..1df7d50abc 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -1,4 +1,5 @@ @use "sass:list"; +@use "sass:map"; @use "sass:meta"; @use "../variables" as *; @use "../vendor/rfs" as *; @@ -12,7 +13,7 @@ // 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 meta.type-of($values) == "string" or meta.type-of(list.nth($values, 1)) != "list" { @@ -20,7 +21,7 @@ } @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 meta.type-of($properties) == "string" { @@ -28,21 +29,21 @@ } // Use custom class if present - $property-class: if(map-has-key($utility, class), map-get($utility, class), list.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); // 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); @@ -55,10 +56,10 @@ } } - $is-css-var: map-get($utility, css-var); - $is-dark-mode: map-get($utility, dark-mode); - $is-local-vars: map-get($utility, local-vars); - $is-rtl: map-get($utility, rtl); + $is-css-var: map.get($utility, css-var); + $is-dark-mode: map.get($utility, dark-mode); + $is-local-vars: map.get($utility, local-vars); + $is-rtl: map.get($utility, rtl); @if $value != null { @if $is-rtl == false { @@ -105,7 +106,7 @@ } @if $is-rtl == true { @if (meta.type-of($value) == "map") { - @include ltr-rtl($property, map-get($value, "ltr"), null, map-get($value, "rtl"), if($enable-important-utilities, !important, null)); + @include ltr-rtl($property, map.get($value, "ltr"), null, map.get($value, "rtl"), if($enable-important-utilities, !important, null)); } @else { @include ltr-rtl($property, $value, null, null, if($enable-important-utilities, !important, null)); } diff --git a/scss/utilities/_api.scss b/scss/utilities/_api.scss index 82f7c3fda4..776c55d89e 100644 --- a/scss/utilities/_api.scss +++ b/scss/utilities/_api.scss @@ -1,3 +1,4 @@ +@use "sass:map"; @use "sass:meta"; @use "../variables" as *; @use "../utilities" as *; @@ -6,7 +7,7 @@ @use "../vendor/rfs" as *; // Loop over each breakpoint -@each $breakpoint in map-keys($grid-breakpoints) { +@each $breakpoint in map.keys($grid-breakpoints) { // Generate media query if needed @include media-breakpoint-up($breakpoint) { @@ -16,7 +17,7 @@ @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, responsive) or $infix == "") { + @if meta.type-of($utility) == "map" and (map.get($utility, responsive) or $infix == "") { @include generate-utility($utility, $infix); } } @@ -25,15 +26,15 @@ // RFS rescaling @media (min-width: $rfs-mq-value) { - @each $breakpoint in map-keys($grid-breakpoints) { + @each $breakpoint in map.keys($grid-breakpoints) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) { + @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 == "") { + @if meta.type-of($utility) == "map" and map.get($utility, rfs) and (map.get($utility, responsive) or $infix == "") { @include generate-utility($utility, $infix, true); } } @@ -47,7 +48,7 @@ @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 { + @if meta.type-of($utility) == "map" and map.get($utility, print) == true { @include generate-utility($utility, "-print"); } } diff --git a/scss/vendor/_rfs.scss b/scss/vendor/_rfs.scss index b300bb509f..27b249d821 100644 --- a/scss/vendor/_rfs.scss +++ b/scss/vendor/_rfs.scss @@ -1,4 +1,5 @@ // stylelint-disable scss/dimension-no-non-numeric-values +@use "sass:map"; @use "sass:math"; @use "sass:meta"; @use "sass:string"; @@ -91,8 +92,8 @@ $rfs-base-value-unit: math.unit($rfs-base-value); "em": 1em, "%": 1% ); - @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { - $result: $result * map-get($unit-map, $dividend-unit); + @if ($dividend-unit != $divisor-unit and map.has-key($unit-map, $dividend-unit)) { + $result: $result * map.get($unit-map, $dividend-unit); } @return $result; } From 709aefe1ed5fe85784575284e28c98348982ae03 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 19:14:35 +0100 Subject: [PATCH 13/25] refactor: replace `call()` with `meta.call()` and `get-function()` with `meta.get-function()` --- scss/functions/_maps.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss index c27b5640e9..ac7e2b2938 100644 --- a/scss/functions/_maps.scss +++ b/scss/functions/_maps.scss @@ -1,4 +1,5 @@ @use "sass:map"; +@use "sass:meta"; @use "../variables" as *; @use "color" as *; @@ -13,7 +14,7 @@ $_args: append($_args, if($arg == "$prefix", $prefix, 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; } From 390206816bfa0d77dd3185645318d3a8c5f6dbf9 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 19:22:50 +0100 Subject: [PATCH 14/25] refactor: replace `append()` with `list.append()` --- scss/functions/_maps.scss | 3 ++- scss/mixins/_border-radius.scss | 5 +++-- scss/mixins/_box-shadow.scss | 3 ++- scss/mixins/_utilities.scss | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss index ac7e2b2938..eb1f1c839e 100644 --- a/scss/functions/_maps.scss +++ b/scss/functions/_maps.scss @@ -1,3 +1,4 @@ +@use "sass:list"; @use "sass:map"; @use "sass:meta"; @use "../variables" as *; @@ -11,7 +12,7 @@ // allow to pass the $key and $value of the map as an function argument $_args: (); @each $arg in $args { - $_args: append($_args, if($arg == "$prefix", $prefix, if($arg == "$key", $key, if($arg == "$value", $value, $arg)))); + $_args: list.append($_args, if($arg == "$prefix", $prefix, if($arg == "$key", $key, if($arg == "$value", $value, $arg)))); } $_map: map.merge($_map, ($key: meta.call(meta.get-function($func), $_args...))); diff --git a/scss/mixins/_border-radius.scss b/scss/mixins/_border-radius.scss index 56c705cd3c..fd0ebe4ba9 100644 --- a/scss/mixins/_border-radius.scss +++ b/scss/mixins/_border-radius.scss @@ -1,4 +1,5 @@ // stylelint-disable property-disallowed-list +@use "sass:list"; @use "sass:meta"; @use "../variables" as *; @use "ltr-rtl" as *; @@ -10,9 +11,9 @@ $return: (); @each $value in $radius { @if meta.type-of($value) == number { - $return: append($return, max($value, 0)); + $return: list.append($return, max($value, 0)); } @else { - $return: append($return, $value); + $return: list.append($return, $value); } } @return $return; diff --git a/scss/mixins/_box-shadow.scss b/scss/mixins/_box-shadow.scss index 12f1cb5f5e..66ac1a4f34 100644 --- a/scss/mixins/_box-shadow.scss +++ b/scss/mixins/_box-shadow.scss @@ -1,3 +1,4 @@ +@use "sass:list"; @use "../variables" as *; @mixin box-shadow($shadow...) { @@ -6,7 +7,7 @@ @each $value in $shadow { @if $value != null { - $result: append($result, $value, "comma"); + $result: list.append($result, $value, "comma"); } @if $value == none and length($shadow) > 1 { @warn "The keyword 'none' must be used as a single argument."; diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 1df7d50abc..fb2fae1416 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -25,7 +25,7 @@ // Multiple properties are possible, for example with vertical or horizontal margins or paddings @if meta.type-of($properties) == "string" { - $properties: append((), $properties); + $properties: list.append((), $properties); } // Use custom class if present From 4cd8c37e46f48c1abe1af3d8ba4d8331484c8a67 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 19:24:49 +0100 Subject: [PATCH 15/25] refactor: replace `map-values()` with `map.values()` --- scss/functions/_assert.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss index 04723932a3..8aff355ae3 100644 --- a/scss/functions/_assert.scss +++ b/scss/functions/_assert.scss @@ -1,4 +1,5 @@ @use "sass:list"; +@use "sass:map"; @use "sass:math"; // Ascending @@ -23,7 +24,7 @@ // 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); + $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}."; From 06ab8a93ab5070a4e583aa669afb88fb8b77ae7c Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 20:33:56 +0100 Subject: [PATCH 16/25] refactor: replace `str-index()` with `string.index()`, `str-length()` with `string.length()`, `str-slice()` with `string.slice()`, and `quote()` with `string.quote()` --- scss/_variables.scss | 3 ++- scss/functions/_escape-svg.scss | 7 ++++--- scss/functions/_str-replace.scss | 5 +++-- scss/mixins/_ltr-rtl.scss | 4 ++-- scss/mixins/_utilities.scss | 3 ++- scss/vendor/_rfs.scss | 4 ++-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/scss/_variables.scss b/scss/_variables.scss index 779f5e2660..d4c852fed0 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -1,4 +1,5 @@ @use "sass:color"; +@use "sass:string"; @use "functions/assert" as *; @use "functions/color" as *; @use "functions/math" as *; @@ -1842,7 +1843,7 @@ $breadcrumb-margin-bottom: 1rem !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 diff --git a/scss/functions/_escape-svg.scss b/scss/functions/_escape-svg.scss index ef57d9209f..56aed65198 100644 --- a/scss/functions/_escape-svg.scss +++ b/scss/functions/_escape-svg.scss @@ -1,3 +1,4 @@ +@use "sass:string"; @use "../variables" as *; @use "str-replace" as *; @@ -6,11 +7,11 @@ // 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); } diff --git a/scss/functions/_str-replace.scss b/scss/functions/_str-replace.scss index 924db8d8be..f4e36b32e7 100644 --- a/scss/functions/_str-replace.scss +++ b/scss/functions/_str-replace.scss @@ -1,3 +1,4 @@ +@use "sass:string"; // Replace `$search` with `$replace` in `$string` // Used on our SVG icon backgrounds for custom forms. // @@ -7,10 +8,10 @@ // @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; diff --git a/scss/mixins/_ltr-rtl.scss b/scss/mixins/_ltr-rtl.scss index 62beb8e663..066668709f 100644 --- a/scss/mixins/_ltr-rtl.scss +++ b/scss/mixins/_ltr-rtl.scss @@ -20,10 +20,10 @@ @function reflect($element) { $string: #{$element}; - @if str-index($string, "left") { + @if string.index($string, "left") { @return str-replace($string, "left", "right"); } - @if str-index($string, "right") { + @if string.index($string, "right") { @return str-replace($string, "right", "left"); } diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index fb2fae1416..c0b3ac3b38 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -1,6 +1,7 @@ @use "sass:list"; @use "sass:map"; @use "sass:meta"; +@use "sass:string"; @use "../variables" as *; @use "../vendor/rfs" as *; @use "ltr-rtl" as *; @@ -38,7 +39,7 @@ // State params to generate pseudo-classes $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, ""); diff --git a/scss/vendor/_rfs.scss b/scss/vendor/_rfs.scss index 27b249d821..b5b7dc1107 100644 --- a/scss/vendor/_rfs.scss +++ b/scss/vendor/_rfs.scss @@ -222,7 +222,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } // Remove first space - @return string.unquote(str-slice($val, 2)); + @return string.unquote(string.slice($val, 2)); } // Helper function to get the responsive value calculated by RFS @@ -278,7 +278,7 @@ $rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height } // Remove first space - @return string.unquote(str-slice($val, 2)); + @return string.unquote(string.slice($val, 2)); } // RFS mixin From ef2f16425813dbfbee2546918fcdeceed257cd18 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 20:37:48 +0100 Subject: [PATCH 17/25] refactor: replace `inspect()` with `meta.inspect()` and `variable-exists()` with `meta.variable-exists()` --- scss/_root.scss | 9 +++++---- scss/mixins/_grid.scss | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/scss/_root.scss b/scss/_root.scss index 6b9b3320ad..0b53762d00 100644 --- a/scss/_root.scss +++ b/scss/_root.scss @@ -1,3 +1,4 @@ +@use "sass:meta"; @use "variables" as *; @use "variables-dark" as *; @use "maps" as *; @@ -46,10 +47,10 @@ // Fonts - // Note: Use `inspect` for lists so that quoted items keep the quotes. + // Note: Use `meta.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 @@ -57,7 +58,7 @@ @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}; diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index 0d2b77846e..33a1e1ee2f 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -1,4 +1,5 @@ @use "sass:map"; +@use "sass:meta"; @use "../variables" as *; @use "../maps" as *; @use "../functions/math" as *; @@ -22,7 +23,7 @@ @mixin make-col-ready($include-column-box-sizing: false) { // Add box sizing if only the grid is loaded - box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null); + box-sizing: if(meta.variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null); // Prevent columns from becoming too narrow when at smaller grid tiers by // always setting `width: 100%;`. This works because we set the width // later on to override this initial width. From e6ed109a5949e09f86fbd8e16774cb4ceccedf78 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 20:45:01 +0100 Subject: [PATCH 18/25] refactor: replace `index()` with `list.index()`, `length()` with `list.length()`, and `zip()` with `list.zip()` --- scss/functions/_assert.scss | 2 +- scss/functions/_maps.scss | 2 +- scss/mixins/_box-shadow.scss | 2 +- scss/mixins/_breakpoints.scss | 4 ++-- scss/mixins/_transition.scss | 4 ++-- scss/mixins/_utilities.scss | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scss/functions/_assert.scss b/scss/functions/_assert.scss index 8aff355ae3..95ea7f5ba0 100644 --- a/scss/functions/_assert.scss +++ b/scss/functions/_assert.scss @@ -23,7 +23,7 @@ // 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 { + @if list.length($map) > 0 { $values: map.values($map); $first-value: list.nth($values, 1); @if $first-value != 0 { diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss index eb1f1c839e..98fe8825a3 100644 --- a/scss/functions/_maps.scss +++ b/scss/functions/_maps.scss @@ -37,7 +37,7 @@ @function map-get-multiple($map, $values) { $result: (); @each $key, $value in $map { - @if (index($values, $key) != null) { + @if (list.index($values, $key) != null) { $result: map.merge($result, ($key: $value)); } } diff --git a/scss/mixins/_box-shadow.scss b/scss/mixins/_box-shadow.scss index 66ac1a4f34..842c7b136d 100644 --- a/scss/mixins/_box-shadow.scss +++ b/scss/mixins/_box-shadow.scss @@ -9,7 +9,7 @@ @if $value != null { $result: list.append($result, $value, "comma"); } - @if $value == none and length($shadow) > 1 { + @if $value == none and list.length($shadow) > 1 { @warn "The keyword 'none' must be used as a single argument."; } } diff --git a/scss/mixins/_breakpoints.scss b/scss/mixins/_breakpoints.scss index 523fc3a64b..97e480b37c 100644 --- a/scss/mixins/_breakpoints.scss +++ b/scss/mixins/_breakpoints.scss @@ -19,11 +19,11 @@ // >> 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); + $n: list.index($breakpoint-names, $name); @if not $n { @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; } - @return if($n < length($breakpoint-names), list.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. diff --git a/scss/mixins/_transition.scss b/scss/mixins/_transition.scss index 7647a71ad7..e4d6bfd280 100644 --- a/scss/mixins/_transition.scss +++ b/scss/mixins/_transition.scss @@ -3,11 +3,11 @@ @use "../variables" as *; @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."; diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index c0b3ac3b38..91be3296cc 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -18,7 +18,7 @@ // If the values are a list or string, convert it into a map @if meta.type-of($values) == "string" or meta.type-of(list.nth($values, 1)) != "list" { - $values: zip($values, $values); + $values: list.zip($values, $values); } @each $key, $value in $values { From d7096dd946f93a4e3a9f5d1bac5509158645ea89 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 20:47:40 +0100 Subject: [PATCH 19/25] refactor: replace `percentage()` with `math.percentage()` --- scss/mixins/_grid.scss | 7 ++++--- scss/mixins/_table-variants.scss | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index 33a1e1ee2f..70afe697d6 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -1,4 +1,5 @@ @use "sass:map"; +@use "sass:math"; @use "sass:meta"; @use "../variables" as *; @use "../maps" as *; @@ -38,7 +39,7 @@ @mixin make-col($size: false, $columns: $grid-columns) { @if $size { flex: 0 0 auto; - width: percentage(divide($size, $columns)); + width: math.percentage(divide($size, $columns)); } @else { flex: 1 1 0; @@ -53,7 +54,7 @@ @mixin make-col-offset($size, $columns: $grid-columns) { $num: divide($size, $columns); - @include ltr-rtl("margin-left", if($num == 0, 0, percentage($num))); + @include ltr-rtl("margin-left", if($num == 0, 0, math.percentage($num))); } // Row columns @@ -64,7 +65,7 @@ @mixin row-cols($count) { > * { flex: 0 0 auto; - width: percentage(divide(1, $count)); + width: math.percentage(divide(1, $count)); } } diff --git a/scss/mixins/_table-variants.scss b/scss/mixins/_table-variants.scss index 89f572ba37..75ffeb50a5 100644 --- a/scss/mixins/_table-variants.scss +++ b/scss/mixins/_table-variants.scss @@ -1,4 +1,5 @@ @use "sass:color"; +@use "sass:math"; @use "../variables" as *; @use "../functions/color-contrast" as *; @@ -6,10 +7,10 @@ @mixin table-variant($state, $background) { .table-#{$state} { $color: color-contrast(opaque($body-bg, $background)); - $hover-bg: color.mix($color, $background, percentage($table-hover-bg-factor)); - $striped-bg: color.mix($color, $background, percentage($table-striped-bg-factor)); - $active-bg: color.mix($color, $background, percentage($table-active-bg-factor)); - $table-border-color: color.mix($color, $background, percentage($table-border-factor)); + $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}; From 2f6830d8e7d69269ded9c74622a93a4b9e168ca6 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 20:51:07 +0100 Subject: [PATCH 20/25] refactor: replace `opacity()` with `color.opacity()` --- scss/functions/_color-contrast.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss index 48e8fb837e..b58a00fe5a 100644 --- a/scss/functions/_color-contrast.scss +++ b/scss/functions/_color-contrast.scss @@ -55,5 +55,5 @@ // Return opaque color // opaque(#fff, rgba(0, 0, 0, .5)) => #808080 @function opaque($background, $foreground) { - @return color.mix(rgba($foreground, 1), $background, opacity($foreground) * 100%); + @return color.mix(rgba($foreground, 1), $background, color.opacity($foreground) * 100%); } From 2e137c4f2cb76ce8f7bdcae22bff1584a10bf4e8 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 23:30:12 +0100 Subject: [PATCH 21/25] refactor: replace `RGBA()` with `rgba()` --- scss/helpers/_color-bg.scss | 5 ++--- scss/helpers/_colored-links.scss | 17 ++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/scss/helpers/_color-bg.scss b/scss/helpers/_color-bg.scss index 2156cb63ae..8c747203e8 100644 --- a/scss/helpers/_color-bg.scss +++ b/scss/helpers/_color-bg.scss @@ -4,11 +4,10 @@ @use "../functions/color-contrast" as *; @use "../mixins/color-mode" 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} { color: color-contrast($value) if($enable-important-utilities, !important, null); - background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); + background-color: rgba(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); } } @@ -18,7 +17,7 @@ $color-rgb: to-rgb($value); .text-bg-#{$color} { color: color-contrast($value) if($enable-important-utilities, !important, null); - background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); + background-color: rgba($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); } } } diff --git a/scss/helpers/_colored-links.scss b/scss/helpers/_colored-links.scss index c57a686581..49db55a4b5 100644 --- a/scss/helpers/_colored-links.scss +++ b/scss/helpers/_colored-links.scss @@ -2,18 +2,17 @@ @use "../functions/color" as *; @use "../functions/color-contrast" 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); + 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); @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); + 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); } } } @@ -21,14 +20,14 @@ // 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); + 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); @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); + 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); } } } From 62b355589825c07933ce7c9de6d083ed6a0731fc Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 23:39:42 +0100 Subject: [PATCH 22/25] build: remove `node-sass` workflow --- .github/workflows/node-sass.yml | 52 --------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 .github/workflows/node-sass.yml diff --git a/.github/workflows/node-sass.yml b/.github/workflows/node-sass.yml deleted file mode 100644 index 49cc13b5ad..0000000000 --- a/.github/workflows/node-sass.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: CSS (node-sass) - -on: - push: - branches: - - v5 - pull_request: - workflow_dispatch: - -env: - FORCE_COLOR: 2 - NODE: 20 - -permissions: - contents: read - -jobs: - css: - runs-on: ubuntu-latest - - steps: - - name: Clone repository - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: "${{ env.NODE }}" - - - name: Install npm dependencies - run: npm ci - - - 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 \ No newline at end of file From c9d9b510a5e4c57a4f22c11424783303018aa01b Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Jan 2025 23:43:46 +0100 Subject: [PATCH 23/25] chore: clean-up --- scss/_toasts.import.scss | 2 +- scss/_variables-dark.scss | 24 ------------------------ scss/_variables.scss | 24 ------------------------ 3 files changed, 1 insertion(+), 49 deletions(-) diff --git a/scss/_toasts.import.scss b/scss/_toasts.import.scss index ad79521ffc..882c22d46a 100644 --- a/scss/_toasts.import.scss +++ b/scss/_toasts.import.scss @@ -1 +1 @@ -@forward "toasts"; \ No newline at end of file +@forward "toasts"; diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index ff6b1d3892..1c164b5900 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -146,27 +146,3 @@ $accordion-icon-active-color-dark: $primary-text-emphasis-dark !default; $accordion-button-icon-dark: url("data:image/svg+xml,") !default; $accordion-button-active-icon-dark: url("data:image/svg+xml,") !default; - - -// -// Buttons -// - -$button-variants-dark: ( - "primary": btn-color-map($primary-dark, $primary-dark), - "secondary": btn-color-map($secondary-dark, $secondary-dark), - "success": btn-color-map($success-dark, $success-dark), - "danger": btn-color-map($danger-dark, $danger-dark), - "warning": btn-color-map($warning-dark, $warning-dark), - "info": btn-color-map($info-dark, $info-dark) -) !default; - -$button-outline-ghost-variants-dark: ( - "primary": btn-outline-color-map($primary-dark), - "secondary": btn-outline-color-map($secondary-dark), - "success": btn-outline-color-map($success-dark), - "danger": btn-outline-color-map($danger-dark), - "warning": btn-outline-color-map($warning-dark), - "info": btn-outline-color-map($info-dark) -) !default; -// scss-docs-end sass-dark-mode-vars diff --git a/scss/_variables.scss b/scss/_variables.scss index d4c852fed0..ee2b457772 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -891,30 +891,6 @@ $btn-active-bg-shade-amount: 20% !default; $btn-active-bg-tint-amount: 20% !default; $btn-active-border-shade-amount: 25% !default; $btn-active-border-tint-amount: 10% !default; - -// scss-docs-start button-variants -$button-variants: ( - "primary": btn-color-map($primary, $primary), - "secondary": btn-color-map($secondary, $secondary), - "success": btn-color-map($success, $success), - "danger": btn-color-map($danger, $danger), - "warning": btn-color-map($warning, $warning), - "info": btn-color-map($info, $info), - "light": btn-color-map($light, $light), - "dark": btn-color-map($dark, $dark) -) !default; - -$button-outline-ghost-variants: ( - "primary": btn-outline-color-map($primary), - "secondary": btn-outline-color-map($secondary), - "success": btn-outline-color-map($success), - "danger": btn-outline-color-map($danger), - "warning": btn-outline-color-map($warning), - "info": btn-outline-color-map($info), - "light": btn-outline-color-map($light), - "dark": btn-outline-color-map($dark) -) !default; -// scss-docs-end button-variants // scss-docs-end btn-variables From d2c85993eccc3db676a1327e8d26b7100678b7a4 Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 30 Jan 2025 13:26:22 +0100 Subject: [PATCH 24/25] refactor: migrate from import to Sass modules system --- docs/assets/scss/_colors.scss | 234 ++++----- docs/content/components/buttons.md | 44 -- docs/content/customize/sass.md | 2 +- docs/layouts/partials/stylesheet.html | 2 +- package-lock.json | 487 +++++++++++++++++- package.json | 8 +- scss/_accordion.scss | 4 +- scss/_alert.scss | 2 +- scss/_avatar.scss | 2 +- scss/_badge.scss | 2 +- scss/_breadcrumb.scss | 2 +- scss/_button-group.scss | 2 +- scss/_buttons.scss | 6 +- scss/_callout.scss | 2 +- scss/_card.scss | 2 +- scss/_carousel.scss | 8 +- scss/_close.scss | 4 +- scss/_containers.scss | 2 +- scss/_dropdown.scss | 18 +- scss/_grid.scss | 2 +- scss/_header.scss | 2 +- scss/_icon.scss | 2 +- scss/_images.scss | 2 +- scss/_list-group.scss | 2 +- scss/_maps.scss | 4 +- scss/_modal.scss | 2 +- scss/_nav.scss | 2 +- scss/_navbar.scss | 4 +- scss/_offcanvas.scss | 2 +- scss/_pagination.scss | 4 +- scss/_popover.scss | 2 +- scss/_progress.scss | 2 +- scss/_reboot.scss | 2 +- scss/_root.scss | 8 +- scss/_tables.scss | 2 +- scss/_toasts.scss | 2 +- scss/_tooltip.scss | 2 +- scss/_transitions.scss | 2 +- scss/_type.scss | 4 +- scss/_utilities.scss | 4 +- scss/_variables-dark.scss | 5 +- scss/_variables.scss | 8 +- scss/coreui-reboot.scss | 4 +- scss/coreui-utilities.scss | 6 +- scss/coreui.scss | 82 +-- scss/forms/_floating-labels.scss | 2 +- scss/forms/_form-check.scss | 4 +- scss/forms/_form-control.scss | 2 +- scss/forms/_form-range.scss | 2 +- scss/forms/_form-select.scss | 4 +- scss/forms/_form-text.scss | 2 +- scss/forms/_input-group.scss | 2 +- scss/forms/_labels.scss | 2 +- scss/forms/_validation.scss | 2 +- scss/functions/_color-contrast.scss | 6 +- scss/functions/_escape-svg.scss | 2 +- scss/functions/_maps.scss | 2 +- scss/helpers/_color-bg.scss | 8 +- scss/helpers/_colored-links.scss | 4 +- scss/helpers/_icon-link.scss | 2 +- scss/helpers/_position.scss | 2 +- scss/helpers/_ratio.scss | 2 +- scss/mixins/_alert.scss | 1 + scss/mixins/_avatar.scss | 1 + scss/mixins/_border-radius.scss | 2 +- scss/mixins/_buttons.scss | 20 +- scss/mixins/_caret.scss | 2 +- scss/mixins/_color-mode.scss | 2 +- scss/mixins/_forms.scss | 4 +- scss/mixins/_grid.scss | 6 +- scss/mixins/_list-group.scss | 1 + scss/mixins/_ltr-rtl.scss | 2 +- scss/mixins/_pagination.scss | 2 +- scss/mixins/_reset-text.scss | 2 +- scss/mixins/_table-variants.scss | 10 +- scss/mixins/_utilities.scss | 2 +- scss/sidebar/_sidebar-narrow.scss | 2 +- scss/sidebar/_sidebar-nav.scss | 2 +- scss/sidebar/_sidebar.scss | 4 +- scss/test2.scss | 3 - .../_auto-import-of-variables-dark.test.scss | 7 - scss/tests/mixins/_color-modes.test.scss | 10 +- .../_media-query-color-mode-full.test.scss | 6 +- scss/tests/mixins/_utilities.test.scss | 44 +- scss/tests/utilities/_api.test.scss | 56 +- scss/themes/bootstrap/bootstrap.rtl.scss | 40 +- scss/themes/bootstrap/bootstrap.scss | 136 ++++- scss/utilities/_api.scss | 2 +- 88 files changed, 967 insertions(+), 448 deletions(-) delete mode 100644 scss/test2.scss delete mode 100644 scss/tests/mixins/_auto-import-of-variables-dark.test.scss diff --git a/docs/assets/scss/_colors.scss b/docs/assets/scss/_colors.scss index 62bf801e5c..ac56b814fc 100644 --- a/docs/assets/scss/_colors.scss +++ b/docs/assets/scss/_colors.scss @@ -2,13 +2,17 @@ // Docs color palette classes // +@function color-contrast-demo($color) { + @return color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio); +} + @each $color, $value in map-merge($colors, ("gray-500": $gray-500)) { .swatch-#{$color} { - color: color-contrast($value); + color: color-contrast-demo($value); background-color: #{$value}; &::after { - $contrast-ratio: "#{contrast-ratio($value, color-contrast($value))}"; + $contrast-ratio: "#{contrast-ratio($value, color-contrast-demo($value))}"; $against-white: "#{contrast-ratio($value, $white)}"; $against-black: "#{contrast-ratio($value, $black)}"; position: absolute; @@ -27,7 +31,7 @@ linear-gradient( to bottom, transparent .25rem, - color-contrast($value) .25rem .75rem, + color-contrast-demo($value) .25rem .75rem, transparent .75rem 1.25rem, $white 1.25rem 1.75rem, transparent 1.75rem 2.25rem, @@ -42,115 +46,115 @@ // stylelint-disable declaration-block-single-line-max-declarations -.docs-blue-100 { color: color-contrast($blue-100); background-color: $blue-100; } -.docs-blue-200 { color: color-contrast($blue-200); background-color: $blue-200; } -.docs-blue-300 { color: color-contrast($blue-300); background-color: $blue-300; } -.docs-blue-400 { color: color-contrast($blue-400); background-color: $blue-400; } -.docs-blue-500 { color: color-contrast($blue-500); background-color: $blue-500; } -.docs-blue-600 { color: color-contrast($blue-600); background-color: $blue-600; } -.docs-blue-700 { color: color-contrast($blue-700); background-color: $blue-700; } -.docs-blue-800 { color: color-contrast($blue-800); background-color: $blue-800; } -.docs-blue-900 { color: color-contrast($blue-900); background-color: $blue-900; } - -.docs-indigo-100 { color: color-contrast($indigo-100); background-color: $indigo-100; } -.docs-indigo-200 { color: color-contrast($indigo-200); background-color: $indigo-200; } -.docs-indigo-300 { color: color-contrast($indigo-300); background-color: $indigo-300; } -.docs-indigo-400 { color: color-contrast($indigo-400); background-color: $indigo-400; } -.docs-indigo-500 { color: color-contrast($indigo-500); background-color: $indigo-500; } -.docs-indigo-600 { color: color-contrast($indigo-600); background-color: $indigo-600; } -.docs-indigo-700 { color: color-contrast($indigo-700); background-color: $indigo-700; } -.docs-indigo-800 { color: color-contrast($indigo-800); background-color: $indigo-800; } -.docs-indigo-900 { color: color-contrast($indigo-900); background-color: $indigo-900; } - -.docs-purple-100 { color: color-contrast($purple-100); background-color: $purple-100; } -.docs-purple-200 { color: color-contrast($purple-200); background-color: $purple-200; } -.docs-purple-300 { color: color-contrast($purple-300); background-color: $purple-300; } -.docs-purple-400 { color: color-contrast($purple-400); background-color: $purple-400; } -.docs-purple-500 { color: color-contrast($purple-500); background-color: $purple-500; } -.docs-purple-600 { color: color-contrast($purple-600); background-color: $purple-600; } -.docs-purple-700 { color: color-contrast($purple-700); background-color: $purple-700; } -.docs-purple-800 { color: color-contrast($purple-800); background-color: $purple-800; } -.docs-purple-900 { color: color-contrast($purple-900); background-color: $purple-900; } - -.docs-pink-100 { color: color-contrast($pink-100); background-color: $pink-100; } -.docs-pink-200 { color: color-contrast($pink-200); background-color: $pink-200; } -.docs-pink-300 { color: color-contrast($pink-300); background-color: $pink-300; } -.docs-pink-400 { color: color-contrast($pink-400); background-color: $pink-400; } -.docs-pink-500 { color: color-contrast($pink-500); background-color: $pink-500; } -.docs-pink-600 { color: color-contrast($pink-600); background-color: $pink-600; } -.docs-pink-700 { color: color-contrast($pink-700); background-color: $pink-700; } -.docs-pink-800 { color: color-contrast($pink-800); background-color: $pink-800; } -.docs-pink-900 { color: color-contrast($pink-900); background-color: $pink-900; } - -.docs-red-100 { color: color-contrast($red-100); background-color: $red-100; } -.docs-red-200 { color: color-contrast($red-200); background-color: $red-200; } -.docs-red-300 { color: color-contrast($red-300); background-color: $red-300; } -.docs-red-400 { color: color-contrast($red-400); background-color: $red-400; } -.docs-red-500 { color: color-contrast($red-500); background-color: $red-500; } -.docs-red-600 { color: color-contrast($red-600); background-color: $red-600; } -.docs-red-700 { color: color-contrast($red-700); background-color: $red-700; } -.docs-red-800 { color: color-contrast($red-800); background-color: $red-800; } -.docs-red-900 { color: color-contrast($red-900); background-color: $red-900; } - -.docs-orange-100 { color: color-contrast($orange-100); background-color: $orange-100; } -.docs-orange-200 { color: color-contrast($orange-200); background-color: $orange-200; } -.docs-orange-300 { color: color-contrast($orange-300); background-color: $orange-300; } -.docs-orange-400 { color: color-contrast($orange-400); background-color: $orange-400; } -.docs-orange-500 { color: color-contrast($orange-500); background-color: $orange-500; } -.docs-orange-600 { color: color-contrast($orange-600); background-color: $orange-600; } -.docs-orange-700 { color: color-contrast($orange-700); background-color: $orange-700; } -.docs-orange-800 { color: color-contrast($orange-800); background-color: $orange-800; } -.docs-orange-900 { color: color-contrast($orange-900); background-color: $orange-900; } - -.docs-yellow-100 { color: color-contrast($yellow-100); background-color: $yellow-100; } -.docs-yellow-200 { color: color-contrast($yellow-200); background-color: $yellow-200; } -.docs-yellow-300 { color: color-contrast($yellow-300); background-color: $yellow-300; } -.docs-yellow-400 { color: color-contrast($yellow-400); background-color: $yellow-400; } -.docs-yellow-500 { color: color-contrast($yellow-500); background-color: $yellow-500; } -.docs-yellow-600 { color: color-contrast($yellow-600); background-color: $yellow-600; } -.docs-yellow-700 { color: color-contrast($yellow-700); background-color: $yellow-700; } -.docs-yellow-800 { color: color-contrast($yellow-800); background-color: $yellow-800; } -.docs-yellow-900 { color: color-contrast($yellow-900); background-color: $yellow-900; } - -.docs-green-100 { color: color-contrast($green-100); background-color: $green-100; } -.docs-green-200 { color: color-contrast($green-200); background-color: $green-200; } -.docs-green-300 { color: color-contrast($green-300); background-color: $green-300; } -.docs-green-400 { color: color-contrast($green-400); background-color: $green-400; } -.docs-green-500 { color: color-contrast($green-500); background-color: $green-500; } -.docs-green-600 { color: color-contrast($green-600); background-color: $green-600; } -.docs-green-700 { color: color-contrast($green-700); background-color: $green-700; } -.docs-green-800 { color: color-contrast($green-800); background-color: $green-800; } -.docs-green-900 { color: color-contrast($green-900); background-color: $green-900; } - -.docs-teal-100 { color: color-contrast($teal-100); background-color: $teal-100; } -.docs-teal-200 { color: color-contrast($teal-200); background-color: $teal-200; } -.docs-teal-300 { color: color-contrast($teal-300); background-color: $teal-300; } -.docs-teal-400 { color: color-contrast($teal-400); background-color: $teal-400; } -.docs-teal-500 { color: color-contrast($teal-500); background-color: $teal-500; } -.docs-teal-600 { color: color-contrast($teal-600); background-color: $teal-600; } -.docs-teal-700 { color: color-contrast($teal-700); background-color: $teal-700; } -.docs-teal-800 { color: color-contrast($teal-800); background-color: $teal-800; } -.docs-teal-900 { color: color-contrast($teal-900); background-color: $teal-900; } - -.docs-cyan-100 { color: color-contrast($cyan-100); background-color: $cyan-100; } -.docs-cyan-200 { color: color-contrast($cyan-200); background-color: $cyan-200; } -.docs-cyan-300 { color: color-contrast($cyan-300); background-color: $cyan-300; } -.docs-cyan-400 { color: color-contrast($cyan-400); background-color: $cyan-400; } -.docs-cyan-500 { color: color-contrast($cyan-500); background-color: $cyan-500; } -.docs-cyan-600 { color: color-contrast($cyan-600); background-color: $cyan-600; } -.docs-cyan-700 { color: color-contrast($cyan-700); background-color: $cyan-700; } -.docs-cyan-800 { color: color-contrast($cyan-800); background-color: $cyan-800; } -.docs-cyan-900 { color: color-contrast($cyan-900); background-color: $cyan-900; } - -.docs-gray-100 { color: color-contrast($gray-100); background-color: $gray-100; } -.docs-gray-200 { color: color-contrast($gray-200); background-color: $gray-200; } -.docs-gray-300 { color: color-contrast($gray-300); background-color: $gray-300; } -.docs-gray-400 { color: color-contrast($gray-400); background-color: $gray-400; } -.docs-gray-500 { color: color-contrast($gray-500); background-color: $gray-500; } -.docs-gray-600 { color: color-contrast($gray-600); background-color: $gray-600; } -.docs-gray-700 { color: color-contrast($gray-700); background-color: $gray-700; } -.docs-gray-800 { color: color-contrast($gray-800); background-color: $gray-800; } -.docs-gray-900 { color: color-contrast($gray-900); background-color: $gray-900; } - -.docs-white { color: color-contrast($white); background-color: $white; } -.docs-black { color: color-contrast($black); background-color: $black; } +.docs-blue-100 { color: color-contrast-demo($blue-100); background-color: $blue-100; } +.docs-blue-200 { color: color-contrast-demo($blue-200); background-color: $blue-200; } +.docs-blue-300 { color: color-contrast-demo($blue-300); background-color: $blue-300; } +.docs-blue-400 { color: color-contrast-demo($blue-400); background-color: $blue-400; } +.docs-blue-500 { color: color-contrast-demo($blue-500); background-color: $blue-500; } +.docs-blue-600 { color: color-contrast-demo($blue-600); background-color: $blue-600; } +.docs-blue-700 { color: color-contrast-demo($blue-700); background-color: $blue-700; } +.docs-blue-800 { color: color-contrast-demo($blue-800); background-color: $blue-800; } +.docs-blue-900 { color: color-contrast-demo($blue-900); background-color: $blue-900; } + +.docs-indigo-100 { color: color-contrast-demo($indigo-100); background-color: $indigo-100; } +.docs-indigo-200 { color: color-contrast-demo($indigo-200); background-color: $indigo-200; } +.docs-indigo-300 { color: color-contrast-demo($indigo-300); background-color: $indigo-300; } +.docs-indigo-400 { color: color-contrast-demo($indigo-400); background-color: $indigo-400; } +.docs-indigo-500 { color: color-contrast-demo($indigo-500); background-color: $indigo-500; } +.docs-indigo-600 { color: color-contrast-demo($indigo-600); background-color: $indigo-600; } +.docs-indigo-700 { color: color-contrast-demo($indigo-700); background-color: $indigo-700; } +.docs-indigo-800 { color: color-contrast-demo($indigo-800); background-color: $indigo-800; } +.docs-indigo-900 { color: color-contrast-demo($indigo-900); background-color: $indigo-900; } + +.docs-purple-100 { color: color-contrast-demo($purple-100); background-color: $purple-100; } +.docs-purple-200 { color: color-contrast-demo($purple-200); background-color: $purple-200; } +.docs-purple-300 { color: color-contrast-demo($purple-300); background-color: $purple-300; } +.docs-purple-400 { color: color-contrast-demo($purple-400); background-color: $purple-400; } +.docs-purple-500 { color: color-contrast-demo($purple-500); background-color: $purple-500; } +.docs-purple-600 { color: color-contrast-demo($purple-600); background-color: $purple-600; } +.docs-purple-700 { color: color-contrast-demo($purple-700); background-color: $purple-700; } +.docs-purple-800 { color: color-contrast-demo($purple-800); background-color: $purple-800; } +.docs-purple-900 { color: color-contrast-demo($purple-900); background-color: $purple-900; } + +.docs-pink-100 { color: color-contrast-demo($pink-100); background-color: $pink-100; } +.docs-pink-200 { color: color-contrast-demo($pink-200); background-color: $pink-200; } +.docs-pink-300 { color: color-contrast-demo($pink-300); background-color: $pink-300; } +.docs-pink-400 { color: color-contrast-demo($pink-400); background-color: $pink-400; } +.docs-pink-500 { color: color-contrast-demo($pink-500); background-color: $pink-500; } +.docs-pink-600 { color: color-contrast-demo($pink-600); background-color: $pink-600; } +.docs-pink-700 { color: color-contrast-demo($pink-700); background-color: $pink-700; } +.docs-pink-800 { color: color-contrast-demo($pink-800); background-color: $pink-800; } +.docs-pink-900 { color: color-contrast-demo($pink-900); background-color: $pink-900; } + +.docs-red-100 { color: color-contrast-demo($red-100); background-color: $red-100; } +.docs-red-200 { color: color-contrast-demo($red-200); background-color: $red-200; } +.docs-red-300 { color: color-contrast-demo($red-300); background-color: $red-300; } +.docs-red-400 { color: color-contrast-demo($red-400); background-color: $red-400; } +.docs-red-500 { color: color-contrast-demo($red-500); background-color: $red-500; } +.docs-red-600 { color: color-contrast-demo($red-600); background-color: $red-600; } +.docs-red-700 { color: color-contrast-demo($red-700); background-color: $red-700; } +.docs-red-800 { color: color-contrast-demo($red-800); background-color: $red-800; } +.docs-red-900 { color: color-contrast-demo($red-900); background-color: $red-900; } + +.docs-orange-100 { color: color-contrast-demo($orange-100); background-color: $orange-100; } +.docs-orange-200 { color: color-contrast-demo($orange-200); background-color: $orange-200; } +.docs-orange-300 { color: color-contrast-demo($orange-300); background-color: $orange-300; } +.docs-orange-400 { color: color-contrast-demo($orange-400); background-color: $orange-400; } +.docs-orange-500 { color: color-contrast-demo($orange-500); background-color: $orange-500; } +.docs-orange-600 { color: color-contrast-demo($orange-600); background-color: $orange-600; } +.docs-orange-700 { color: color-contrast-demo($orange-700); background-color: $orange-700; } +.docs-orange-800 { color: color-contrast-demo($orange-800); background-color: $orange-800; } +.docs-orange-900 { color: color-contrast-demo($orange-900); background-color: $orange-900; } + +.docs-yellow-100 { color: color-contrast-demo($yellow-100); background-color: $yellow-100; } +.docs-yellow-200 { color: color-contrast-demo($yellow-200); background-color: $yellow-200; } +.docs-yellow-300 { color: color-contrast-demo($yellow-300); background-color: $yellow-300; } +.docs-yellow-400 { color: color-contrast-demo($yellow-400); background-color: $yellow-400; } +.docs-yellow-500 { color: color-contrast-demo($yellow-500); background-color: $yellow-500; } +.docs-yellow-600 { color: color-contrast-demo($yellow-600); background-color: $yellow-600; } +.docs-yellow-700 { color: color-contrast-demo($yellow-700); background-color: $yellow-700; } +.docs-yellow-800 { color: color-contrast-demo($yellow-800); background-color: $yellow-800; } +.docs-yellow-900 { color: color-contrast-demo($yellow-900); background-color: $yellow-900; } + +.docs-green-100 { color: color-contrast-demo($green-100); background-color: $green-100; } +.docs-green-200 { color: color-contrast-demo($green-200); background-color: $green-200; } +.docs-green-300 { color: color-contrast-demo($green-300); background-color: $green-300; } +.docs-green-400 { color: color-contrast-demo($green-400); background-color: $green-400; } +.docs-green-500 { color: color-contrast-demo($green-500); background-color: $green-500; } +.docs-green-600 { color: color-contrast-demo($green-600); background-color: $green-600; } +.docs-green-700 { color: color-contrast-demo($green-700); background-color: $green-700; } +.docs-green-800 { color: color-contrast-demo($green-800); background-color: $green-800; } +.docs-green-900 { color: color-contrast-demo($green-900); background-color: $green-900; } + +.docs-teal-100 { color: color-contrast-demo($teal-100); background-color: $teal-100; } +.docs-teal-200 { color: color-contrast-demo($teal-200); background-color: $teal-200; } +.docs-teal-300 { color: color-contrast-demo($teal-300); background-color: $teal-300; } +.docs-teal-400 { color: color-contrast-demo($teal-400); background-color: $teal-400; } +.docs-teal-500 { color: color-contrast-demo($teal-500); background-color: $teal-500; } +.docs-teal-600 { color: color-contrast-demo($teal-600); background-color: $teal-600; } +.docs-teal-700 { color: color-contrast-demo($teal-700); background-color: $teal-700; } +.docs-teal-800 { color: color-contrast-demo($teal-800); background-color: $teal-800; } +.docs-teal-900 { color: color-contrast-demo($teal-900); background-color: $teal-900; } + +.docs-cyan-100 { color: color-contrast-demo($cyan-100); background-color: $cyan-100; } +.docs-cyan-200 { color: color-contrast-demo($cyan-200); background-color: $cyan-200; } +.docs-cyan-300 { color: color-contrast-demo($cyan-300); background-color: $cyan-300; } +.docs-cyan-400 { color: color-contrast-demo($cyan-400); background-color: $cyan-400; } +.docs-cyan-500 { color: color-contrast-demo($cyan-500); background-color: $cyan-500; } +.docs-cyan-600 { color: color-contrast-demo($cyan-600); background-color: $cyan-600; } +.docs-cyan-700 { color: color-contrast-demo($cyan-700); background-color: $cyan-700; } +.docs-cyan-800 { color: color-contrast-demo($cyan-800); background-color: $cyan-800; } +.docs-cyan-900 { color: color-contrast-demo($cyan-900); background-color: $cyan-900; } + +.docs-gray-100 { color: color-contrast-demo($gray-100); background-color: $gray-100; } +.docs-gray-200 { color: color-contrast-demo($gray-200); background-color: $gray-200; } +.docs-gray-300 { color: color-contrast-demo($gray-300); background-color: $gray-300; } +.docs-gray-400 { color: color-contrast-demo($gray-400); background-color: $gray-400; } +.docs-gray-500 { color: color-contrast-demo($gray-500); background-color: $gray-500; } +.docs-gray-600 { color: color-contrast-demo($gray-600); background-color: $gray-600; } +.docs-gray-700 { color: color-contrast-demo($gray-700); background-color: $gray-700; } +.docs-gray-800 { color: color-contrast-demo($gray-800); background-color: $gray-800; } +.docs-gray-900 { color: color-contrast-demo($gray-900); background-color: $gray-900; } + +.docs-white { color: color-contrast-demo($white); background-color: $white; } +.docs-black { color: color-contrast-demo($black); background-color: $black; } diff --git a/docs/content/components/buttons.md b/docs/content/components/buttons.md index b3dbb8bc0f..d5a77d6f5b 100644 --- a/docs/content/components/buttons.md +++ b/docs/content/components/buttons.md @@ -307,48 +307,6 @@ Here's an example of building a custom `.btn-*` modifier class like we do for th {{< scss-docs name="btn-variables" file="scss/_variables.scss" >}} -### SASS variants - -CoreUI allows defining variant colors in two ways. - -#### Manual - -You can define each color manually and keep full control of the component appearance. - -{{< highlight scss >}} -$button-variants: ( - "primary": ( - "background": $your-bg-color, - "border": $your-border-color, - "color": $your-color, - "hover-background": $your-bg-hover-color, - "hover-border": $your-hover-border-color, - "hover-color": $your-hover-color, - "active-background": $your-bg-active-color, - "active-border": $your-active-border-color, - "active-color": $your-active-color, - "disabled-background": $your-bg-disabled-color,, - "disabled-border": $your-disabled-border-color, - "disabled-color": $your-disabled-color, - "shadow": $your-shadow - ) - ... -); -{{< /highlight >}} - -#### Color function - -The color set can be generated automatically thanks to our `button-color-map` function. - -{{< scss-docs name="button-color-functions" file="scss/_functions.scss" >}} - -{{< highlight scss >}} -$button-variants: ( - "primary": btn-color-map($primary), - ... -); -{{< /highlight >}} --> - ### SASS mixins CoreUI's button component is built with a base-modifier class approach. This means the bulk of the styling is contained to a base class `.btn` while style variations are confined to modifier classes (e.g., `.btn-danger`). These modifier classes are built from the `$button-variants` map to make customizing the number and name of our modifier classes. @@ -367,6 +325,4 @@ There are three mixins for buttons: button and button outline variant mixins, pl Button variants (for regular and outline buttons) use their respective mixins with our `$theme-colors` map to generate the modifier classes in `scss/_buttons.scss`. -{{< scss-docs name="button-variants" file="scss/_variables.scss" >}} - {{< scss-docs name="btn-variant-loops" file="scss/_buttons.scss" >}} diff --git a/docs/content/customize/sass.md b/docs/content/customize/sass.md index bd48eca125..6d64a1e357 100644 --- a/docs/content/customize/sass.md +++ b/docs/content/customize/sass.md @@ -226,7 +226,7 @@ Next to the [Sass maps]({{< docsref "/customize/color#color-sass-maps" >}}) we h You can lighten or darken colors with CoreUI for Bootstrap's `tint-color()` and `shade-color()` functions. These functions will mix colors with black or white, unlike Sass' native `lighten()` and `darken()` functions which will change the lightness by a fixed amount, which often doesn't lead to the desired effect. -{{< scss-docs name="color-functions" file="scss/_functions.scss" >}} +{{< scss-docs name="color-functions" file="scss/functions/_color.scss" >}} In practice, you'd call the function and pass in the color and weight parameters. diff --git a/docs/layouts/partials/stylesheet.html b/docs/layouts/partials/stylesheet.html index 6c5076d878..91ad19b746 100644 --- a/docs/layouts/partials/stylesheet.html +++ b/docs/layouts/partials/stylesheet.html @@ -9,7 +9,7 @@ {{- end }} -{{- $sassOptions := dict "outputStyle" "expanded" "precision" 6 -}} +{{- $sassOptions := dict "transpiler" "dartsass" "outputStyle" "expanded" "precision" 6 -}} {{- $postcssOptions := dict "use" "autoprefixer" "noMap" true -}} {{- $targetDocsCssPath := "/assets/css/docs.css" -}} diff --git a/package-lock.json b/package-lock.json index e7fca308c9..f4e0c00831 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,7 @@ "rollup": "^4.29.1", "rollup-plugin-istanbul": "^5.0.0", "rtlcss": "^4.3.0", - "sass": "1.78.0", + "sass-embedded": "^1.83.1", "sass-true": "^8.1.0", "shelljs": "^0.8.5", "stylelint": "^16.12.0", @@ -1915,6 +1915,13 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.3.tgz", + "integrity": "sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -4388,6 +4395,13 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "dev": true, + "license": "MIT/X11" + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -4796,6 +4810,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7494,7 +7515,9 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/import-fresh": { "version": "3.3.0", @@ -12296,6 +12319,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -12367,6 +12400,8 @@ "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12379,6 +12414,424 @@ "node": ">=14.0.0" } }, + "node_modules/sass-embedded": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.1.tgz", + "integrity": "sha512-LdKG6nxLEzpXbMUt0if12PhUNonGvy91n7IWHOZRZjvA6AWm9oVdhpO+KEXN/Sc+jjGvQeQcav9+Z8DwmII/pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.83.1", + "sass-embedded-android-arm64": "1.83.1", + "sass-embedded-android-ia32": "1.83.1", + "sass-embedded-android-riscv64": "1.83.1", + "sass-embedded-android-x64": "1.83.1", + "sass-embedded-darwin-arm64": "1.83.1", + "sass-embedded-darwin-x64": "1.83.1", + "sass-embedded-linux-arm": "1.83.1", + "sass-embedded-linux-arm64": "1.83.1", + "sass-embedded-linux-ia32": "1.83.1", + "sass-embedded-linux-musl-arm": "1.83.1", + "sass-embedded-linux-musl-arm64": "1.83.1", + "sass-embedded-linux-musl-ia32": "1.83.1", + "sass-embedded-linux-musl-riscv64": "1.83.1", + "sass-embedded-linux-musl-x64": "1.83.1", + "sass-embedded-linux-riscv64": "1.83.1", + "sass-embedded-linux-x64": "1.83.1", + "sass-embedded-win32-arm64": "1.83.1", + "sass-embedded-win32-ia32": "1.83.1", + "sass-embedded-win32-x64": "1.83.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.1.tgz", + "integrity": "sha512-FKfrmwDG84L5cfn8fmIew47qnCFFUdcoOTCzOw8ROItkRhLLH0hnIm6gEpG5T6OFf6kxzUxvE9D0FvYQUznZrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.1.tgz", + "integrity": "sha512-S63rlLPGCA9FCqYYOobDJrwcuBX0zbSOl7y0jT9DlfqeqNOkC6NIT1id6RpMFCs3uhd4gbBS2E/5WPv5J5qwbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.1.tgz", + "integrity": "sha512-AGlY2vFLJhF2hN0qOz12f4eDs6x0b5BUapOpgfRrqQLHIfJhxkvi39bInsiBgQ57U0jb4I7AaS2e2e+sj7+Rqw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.1.tgz", + "integrity": "sha512-OyU4AnfAUVd/wBaT60XvHidmQdaEsVUnxvI71oyPM/id1v97aWTZX3SmGkwGb7uA/q6Soo2uNalgvOSNJn7PwA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.1.tgz", + "integrity": "sha512-NY5rwffhF4TnhXVErZnfFIjHqU3MNoWxCuSHumRN3dDI8hp8+IF59W5+Qw9AARlTXvyb+D0u5653aLSea5F40w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.1.tgz", + "integrity": "sha512-w1SBcSkIgIWgUfB7IKcPoTbSwnS3Kag5PVv3e3xfW6ZCsDweYZLQntUd2WGgaoekdm1uIbVuvPxnDH2t880iGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.1.tgz", + "integrity": "sha512-RWrmLtUhEP5kvcGOAFdr99/ebZ/eW9z3FAktLldvgl2k96WSTC1Zr2ctL0E+Y+H3uLahEZsshIFk6RkVIRKIsA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.1.tgz", + "integrity": "sha512-y7rHuRgjg2YM284rin068PsEdthPljSGb653Slut5Wba4A2IP11UNVraSl6Je2AYTuoPRjQX0g7XdsrjXlzC3g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.1.tgz", + "integrity": "sha512-HVIytzj8OO18fmBY6SVRIYErcJ+Nd9a5RNF6uArav/CqvwPLATlUV8dwqSyWQIzSsQUhDF/vFIlJIoNLKKzD3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.1.tgz", + "integrity": "sha512-/pc+jHllyvfaYYLTRCoXseRc4+V3Z7IDPqsviTcfVdICAoR9mgK2RtIuIZanhm1NP/lDylDOgvj1NtjcA2dNvg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.1.tgz", + "integrity": "sha512-sFM8GXOVoeR91j9MiwNRcFXRpTA7u4185SaGuvUjcRMb84mHvtWOJPGDvgZqbWdVClBRJp6J7+CShliWngy/og==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.1.tgz", + "integrity": "sha512-wjSIYYqdIQp3DjliSTYNFg04TVqQf/3Up/Stahol0Qf/TTjLkjHHtT2jnDaZI5GclHi2PVJqQF3wEGB8bGJMzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.1.tgz", + "integrity": "sha512-iwhTH5gwmoGt3VH6dn4WV8N6eWvthKAvUX5XPURq7e9KEsc7QP8YNHagwaAJh7TAPopb32buyEg6oaUmzxUI+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.1.tgz", + "integrity": "sha512-FjFNWHU1n0Q6GpK1lAHQL5WmzlPjL8DTVLkYW2A/dq8EsutAdi3GfpeyWZk9bte8kyWdmPUWG3BHlnQl22xdoA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.1.tgz", + "integrity": "sha512-BUfYR5TIDvgGHWhxSIKwTJocXU88ECZ0BW89RJqtvr7m83fKdf5ylTFCOieU7BwcA7SORUeZzcQzVFIdPUM3BQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.1.tgz", + "integrity": "sha512-KOBGSpMrJi8y+H+za3vAAVQImPUvQa5eUrvTbbOl+wkU7WAGhOu8xrxgmYYiz3pZVBBcfRjz4I2jBcDFKJmWSw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.1.tgz", + "integrity": "sha512-swUsMHKqlEU9dZQ/I5WADDaXz+QkmJS27x/Oeh+oz41YgZ0ppKd0l4Vwjn0LgOQn+rxH1zLFv6xXDycvj68F/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.1.tgz", + "integrity": "sha512-6lONEBN5TaFD5L/y68zUugryXqm4RAFuLdaOPeZQRu+7ay/AmfhtFYfE5gRssnIcIx1nlcoq7zA3UX+SN2jo1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.1.tgz", + "integrity": "sha512-HxZDkAE9n6Gb8Rz6xd67VHuo5FkUSQ4xPb7cHKa4pE0ndwH5Oc0uEhbqjJobpgmnuTm1rQYNU2nof1sFhy2MFA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.1.tgz", + "integrity": "sha512-5Q0aPfUaqRek8Ee1AqTUIC0o6yQSA8QwyhCgh7upsnHG3Ltm8pkJOYjzm+UgYPJeoMNppDjdDlRGQISE7qzd4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sass-embedded/node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/sass-true": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/sass-true/-/sass-true-8.1.0.tgz", @@ -13646,6 +14099,29 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -14329,6 +14805,13 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "dev": true, + "license": "MIT" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 6c7dcdb24c..0fe9ad3c31 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,8 @@ "scripts": { "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": "npm-run-all css-compile css-prefix css-minify", "css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/", - "css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"dist/css/themes/bootstrap/\" --ext \".rtl.css\" \"dist/css/themes/bootstrap/*.css\" \"!dist/css/themes/bootstrap/*.min.css\" \"!dist/css/themes/bootstrap/*.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", "css-lint-vars": "fusv scss/ docs/assets/scss/", @@ -148,7 +147,7 @@ "rollup": "^4.29.1", "rollup-plugin-istanbul": "^5.0.0", "rtlcss": "^4.3.0", - "sass": "1.78.0", + "sass-embedded": "^1.83.1", "sass-true": "^8.1.0", "shelljs": "^0.8.5", "stylelint": "^16.12.0", @@ -163,9 +162,6 @@ "scss/**/*.scss", "!scss/tests/**" ], - "hugo-bin": { - "buildTags": "extended" - }, "jspm": { "registry": "npm", "main": "js/coreui", diff --git a/scss/_accordion.scss b/scss/_accordion.scss index 62f3b123f8..bdcf423b1e 100644 --- a/scss/_accordion.scss +++ b/scss/_accordion.scss @@ -1,11 +1,11 @@ -@use "variables" as *; -@use "variables-dark" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @use "mixins/color-mode" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; +@use "variables-dark" as *; // // Base styles diff --git a/scss/_alert.scss b/scss/_alert.scss index 8cf135431e..d64620a5cf 100644 --- a/scss/_alert.scss +++ b/scss/_alert.scss @@ -1,7 +1,7 @@ @use "sass:map"; -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; +@use "variables" as *; // // Base styles diff --git a/scss/_avatar.scss b/scss/_avatar.scss index f15561ef95..a92673dd3a 100644 --- a/scss/_avatar.scss +++ b/scss/_avatar.scss @@ -1,8 +1,8 @@ @use "sass:map"; -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; +@use "variables" as *; .avatar { // scss-docs-start avatar-css-vars diff --git a/scss/_badge.scss b/scss/_badge.scss index 4754ccb30d..f205fc5d91 100644 --- a/scss/_badge.scss +++ b/scss/_badge.scss @@ -1,6 +1,6 @@ -@use "variables" as *; @use "mixins/gradients" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Base class // diff --git a/scss/_breadcrumb.scss b/scss/_breadcrumb.scss index f2b88aa9ab..6292f3e899 100644 --- a/scss/_breadcrumb.scss +++ b/scss/_breadcrumb.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @use "vendor/rfs" as *; +@use "variables" as *; .breadcrumb { // scss-docs-start breadcrumb-css-vars diff --git a/scss/_button-group.scss b/scss/_button-group.scss index 00a9665083..65b9633cf1 100644 --- a/scss/_button-group.scss +++ b/scss/_button-group.scss @@ -1,7 +1,7 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/ltr-rtl" as *; +@use "variables" as *; // Make the div behave like a button .btn-group, diff --git a/scss/_buttons.scss b/scss/_buttons.scss index 5bd7661c23..87e944b2e8 100644 --- a/scss/_buttons.scss +++ b/scss/_buttons.scss @@ -1,5 +1,3 @@ -@use "variables" as *; -@use "variables-dark" as *; @use "functions/color" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @@ -8,6 +6,8 @@ @use "mixins/gradients" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; +@use "variables-dark" as *; // // Base styles @@ -201,7 +201,7 @@ --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color}; --#{$prefix}btn-disabled-border-color: transparent; --#{$prefix}btn-box-shadow: none; - // --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb}; + --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb}; text-decoration: $link-decoration; @if $enable-gradients { diff --git a/scss/_callout.scss b/scss/_callout.scss index 35d7df8c74..7c59635fe1 100644 --- a/scss/_callout.scss +++ b/scss/_callout.scss @@ -1,6 +1,6 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; +@use "variables" as *; .callout { // scss-docs-start callout-css-vars diff --git a/scss/_card.scss b/scss/_card.scss index d54c26ae7b..de77d9e228 100644 --- a/scss/_card.scss +++ b/scss/_card.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/breakpoints" as *; @use "mixins/ltr-rtl" as *; +@use "variables" as *; // // Base styles diff --git a/scss/_carousel.scss b/scss/_carousel.scss index 7768ebad4e..9a3b2366b2 100644 --- a/scss/_carousel.scss +++ b/scss/_carousel.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/clearfix" as *; @use "mixins/color-mode" as *; @use "mixins/transition" as *; +@use "variables" as *; // Notes on the classes: // @@ -156,7 +156,7 @@ // Optional indicator pips/controls // // Add a container (such as a list) with the following class and add an item (ideally a focusable control, -// like a button) with data-coreui-target for each slide your carousel holds. +// like a button) with data#{$data-infix}target for each slide your carousel holds. .carousel-indicators { position: absolute; @@ -172,7 +172,7 @@ margin-bottom: 1rem; margin-left: $carousel-control-width; - [data-coreui-target] { + [data#{$data-infix}target] { box-sizing: content-box; flex: 0 1 auto; width: $carousel-indicator-width; @@ -221,7 +221,7 @@ filter: $carousel-dark-control-icon-filter; } - .carousel-indicators [data-coreui-target] { + .carousel-indicators [data#{$data-infix}target] { background-color: $carousel-dark-indicator-active-bg; } diff --git a/scss/_close.scss b/scss/_close.scss index 5c656c5d1a..cb0dd3bba0 100644 --- a/scss/_close.scss +++ b/scss/_close.scss @@ -1,7 +1,7 @@ -@use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @use "mixins/color-mode" as *; +@use "variables" as *; // Transparent background and border properties included for button version. // iOS requires the button element instead of an anchor tag. @@ -55,7 +55,7 @@ filter: var(--#{$prefix}btn-close-white-filter); } -.btn-close[data-coreui-theme="dark"], +.btn-close[data#{$data-infix}theme="dark"], .btn-close-white { @include btn-close-white(); } diff --git a/scss/_containers.scss b/scss/_containers.scss index 2c73fd8a3a..b2e7760d8d 100644 --- a/scss/_containers.scss +++ b/scss/_containers.scss @@ -1,6 +1,6 @@ -@use "variables" as *; @use "mixins/breakpoints" as *; @use "mixins/container" as *; +@use "variables" as *; // Container widths // diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss index 77617c1490..0c503c737f 100644 --- a/scss/_dropdown.scss +++ b/scss/_dropdown.scss @@ -1,5 +1,4 @@ @use "sass:map"; -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/breakpoints" as *; @@ -7,6 +6,7 @@ @use "mixins/gradients" as *; @use "mixins/ltr-rtl" as *; @use "vendor/rfs" as *; +@use "variables" as *; // The dropdown wrapper (`
      `) .dropup, @@ -72,7 +72,7 @@ @include border-radius(var(--#{$prefix}dropdown-border-radius)); @include box-shadow(var(--#{$prefix}dropdown-box-shadow)); - &[data-coreui-popper] { + &[data#{$data-infix}popper] { top: 100%; @include ltr-rtl("left", 0); margin-top: var(--#{$prefix}dropdown-spacer); @@ -100,18 +100,18 @@ $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .dropdown-menu#{$infix}-start { - --cui-position: start; + --#{$prefix}position: start; - &[data-coreui-popper] { + &[data#{$data-infix}popper] { @include ltr-rtl("right", auto); @include ltr-rtl("left", 0); } } .dropdown-menu#{$infix}-end { - --cui-position: end; + --#{$prefix}position: end; - &[data-coreui-popper] { + &[data#{$data-infix}popper] { @include ltr-rtl("right", 0); @include ltr-rtl("left", auto); } @@ -123,7 +123,7 @@ // Allow for dropdowns to go bottom up (aka, dropup-menu) // Just add .dropup after the standard .dropdown class and you're set. .dropup { - .dropdown-menu[data-coreui-popper] { + .dropdown-menu[data#{$data-infix}popper] { top: auto; bottom: 100%; margin-top: 0; @@ -136,7 +136,7 @@ } .dropend { - .dropdown-menu[data-coreui-popper] { + .dropdown-menu[data#{$data-infix}popper] { top: 0; @include ltr-rtl("right", auto); @include ltr-rtl("left", 100%); @@ -153,7 +153,7 @@ } .dropstart { - .dropdown-menu[data-coreui-popper] { + .dropdown-menu[data#{$data-infix}popper] { top: 0; @include ltr-rtl("right", 100%); @include ltr-rtl("left", auto); diff --git a/scss/_grid.scss b/scss/_grid.scss index d9dbf90e38..6a5b3a60cd 100644 --- a/scss/_grid.scss +++ b/scss/_grid.scss @@ -1,5 +1,5 @@ -@use "variables" as *; @use "mixins/grid" as *; +@use "variables" as *; $include-column-box-sizing: false !default; diff --git a/scss/_header.scss b/scss/_header.scss index c5cf743b72..05b2114854 100644 --- a/scss/_header.scss +++ b/scss/_header.scss @@ -1,10 +1,10 @@ -@use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @use "mixins/breakpoints" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; .header { // scss-docs-start header-css-vars diff --git a/scss/_icon.scss b/scss/_icon.scss index 5e2dff1331..a273331f47 100644 --- a/scss/_icon.scss +++ b/scss/_icon.scss @@ -1,5 +1,5 @@ -@use "variables" as *; @use "mixins/icon" as *; +@use "variables" as *; .icon { display: inline-block; diff --git a/scss/_images.scss b/scss/_images.scss index e524cfc6eb..2be4bad2c7 100644 --- a/scss/_images.scss +++ b/scss/_images.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/image" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Responsive images (ensure images don't scale beyond their parents) // diff --git a/scss/_list-group.scss b/scss/_list-group.scss index 96beb88b90..2020f97b75 100644 --- a/scss/_list-group.scss +++ b/scss/_list-group.scss @@ -1,8 +1,8 @@ @use "sass:map"; -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/breakpoints" as *; @use "mixins/ltr-rtl" as *; +@use "variables" as *; // Base class // diff --git a/scss/_maps.scss b/scss/_maps.scss index 3aabdd959e..51e5ebacbe 100644 --- a/scss/_maps.scss +++ b/scss/_maps.scss @@ -1,8 +1,8 @@ @use "sass:map"; -@use "variables" as *; -@use "variables-dark" as *; @use "functions/color" as *; @use "functions/maps" as *; +@use "variables" as *; +@use "variables-dark" as *; // Re-assigned maps // diff --git a/scss/_modal.scss b/scss/_modal.scss index 07181f38b1..3b19bc17eb 100644 --- a/scss/_modal.scss +++ b/scss/_modal.scss @@ -1,12 +1,12 @@ // stylelint-disable function-disallowed-list @use "sass:map"; -@use "variables" as *; @use "mixins/backdrop" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/breakpoints" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; +@use "variables" as *; // .modal-open - body class for killing the scroll // .modal - container to scroll within diff --git a/scss/_nav.scss b/scss/_nav.scss index 0ca4fc81d3..b2506d5e6b 100644 --- a/scss/_nav.scss +++ b/scss/_nav.scss @@ -1,9 +1,9 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/gradients" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Base class // diff --git a/scss/_navbar.scss b/scss/_navbar.scss index 6717287862..983470bd2c 100644 --- a/scss/_navbar.scss +++ b/scss/_navbar.scss @@ -1,5 +1,4 @@ @use "sass:map"; -@use "variables" as *; @use "functions/escape-svg" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @@ -10,6 +9,7 @@ @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Navbar // @@ -280,7 +280,7 @@ } .navbar-dark, -.navbar[data-coreui-theme="dark"] { +.navbar[data#{$data-infix}theme="dark"] { // scss-docs-start navbar-dark-css-vars --#{$prefix}navbar-color: #{$navbar-dark-color}; --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color}; diff --git a/scss/_offcanvas.scss b/scss/_offcanvas.scss index e2ba67ab0e..4255c6cb15 100644 --- a/scss/_offcanvas.scss +++ b/scss/_offcanvas.scss @@ -1,11 +1,11 @@ // stylelint-disable function-disallowed-list @use "sass:map"; -@use "variables" as *; @use "mixins/backdrop" as *; @use "mixins/box-shadow" as *; @use "mixins/breakpoints" as *; @use "mixins/ltr-rtl" as *; @use "mixins/transition" as *; +@use "variables" as *; %offcanvas-css-vars { // scss-docs-start offcanvas-css-vars diff --git a/scss/_pagination.scss b/scss/_pagination.scss index 9251d138b1..e4bd4d6612 100644 --- a/scss/_pagination.scss +++ b/scss/_pagination.scss @@ -1,11 +1,11 @@ -@use "variables" as *; -@use "vendor/rfs" as *; @use "mixins/border-radius" as *; @use "mixins/gradients" as *; @use "mixins/lists" as *; @use "mixins/ltr-rtl" as *; @use "mixins/pagination" as *; @use "mixins/transition" as *; +@use "vendor/rfs" as *; +@use "variables" as *; .pagination { // scss-docs-start pagination-css-vars diff --git a/scss/_popover.scss b/scss/_popover.scss index 50d34c3998..042fbc5a0a 100644 --- a/scss/_popover.scss +++ b/scss/_popover.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/reset-text" as *; @use "vendor/rfs" as *; +@use "variables" as *; .popover { // scss-docs-start popover-css-vars diff --git a/scss/_progress.scss b/scss/_progress.scss index d7b37c886d..5c414f3024 100644 --- a/scss/_progress.scss +++ b/scss/_progress.scss @@ -1,9 +1,9 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/box-shadow" as *; @use "mixins/gradients" as *; @use "mixins/transition" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Disable animation if transitions are disabled diff --git a/scss/_reboot.scss b/scss/_reboot.scss index cbb227e6b8..fa26fc07bb 100644 --- a/scss/_reboot.scss +++ b/scss/_reboot.scss @@ -1,7 +1,7 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @use "vendor/rfs" as *; +@use "variables" as *; // stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix diff --git a/scss/_root.scss b/scss/_root.scss index 0b53762d00..7e84266644 100644 --- a/scss/_root.scss +++ b/scss/_root.scss @@ -1,13 +1,13 @@ @use "sass:meta"; -@use "variables" as *; -@use "variables-dark" as *; -@use "maps" as *; @use "functions/color" as *; @use "mixins/color-mode" as *; @use "vendor/rfs" as *; +@use "maps" as *; +@use "variables" as *; +@use "variables-dark" as *; :root, -[data-coreui-theme="light"] { +[data#{$data-infix}theme="light"] { // Note: Custom variable values only support SassScript inside `#{}`. // Colors diff --git a/scss/_tables.scss b/scss/_tables.scss index 880ffe4689..21a7a5a01e 100644 --- a/scss/_tables.scss +++ b/scss/_tables.scss @@ -1,7 +1,7 @@ @use "sass:map"; -@use "variables" as *; @use "mixins/breakpoints" as *; @use "mixins/table-variants" as *; +@use "variables" as *; // // Basic Bootstrap table diff --git a/scss/_toasts.scss b/scss/_toasts.scss index 786788bedf..ad6f2a2ecc 100644 --- a/scss/_toasts.scss +++ b/scss/_toasts.scss @@ -1,7 +1,7 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/ltr-rtl" as *; @use "vendor/rfs" as *; +@use "variables" as *; .toast { // scss-docs-start toast-css-vars diff --git a/scss/_tooltip.scss b/scss/_tooltip.scss index bd790067cf..34b2e87ea1 100644 --- a/scss/_tooltip.scss +++ b/scss/_tooltip.scss @@ -1,8 +1,8 @@ -@use "variables" as *; @use "mixins/border-radius" as *; @use "mixins/deprecate" as *; @use "mixins/reset-text" as *; @use "vendor/rfs" as *; +@use "variables" as *; // Base class .tooltip { diff --git a/scss/_transitions.scss b/scss/_transitions.scss index 04f5ba152c..8a562c4880 100644 --- a/scss/_transitions.scss +++ b/scss/_transitions.scss @@ -1,5 +1,5 @@ -@use "variables" as *; @use "mixins/transition" as *; +@use "variables" as *; .fade { @include transition($transition-fade); diff --git a/scss/_type.scss b/scss/_type.scss index 2bf72e69de..2883582c54 100644 --- a/scss/_type.scss +++ b/scss/_type.scss @@ -1,8 +1,8 @@ -@use "variables" as *; -@use "reboot" as *; @use "mixins/lists" as *; @use "mixins/ltr-rtl" as *; @use "vendor/rfs" as *; +@use "reboot" as *; +@use "variables" as *; // // Headings diff --git a/scss/_utilities.scss b/scss/_utilities.scss index 65eb20ab76..7a7e74023c 100644 --- a/scss/_utilities.scss +++ b/scss/_utilities.scss @@ -1,7 +1,7 @@ @use "sass:map"; -@use "variables" as *; -@use "maps" as *; @use "functions/maps" as *; +@use "maps" as *; +@use "variables" as *; // Utilities diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index 1c164b5900..f86467413a 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -1,10 +1,10 @@ @use "sass:color"; -@use "variables" as *; @use "functions/color" as *; +@use "variables" as *; // Dark color mode variables // -// Custom variables for the `[data-coreui-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. +// Custom variables for the `[data#{$data-infix}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 @@ -146,3 +146,4 @@ $accordion-icon-active-color-dark: $primary-text-emphasis-dark !default; $accordion-button-icon-dark: url("data:image/svg+xml,") !default; $accordion-button-active-icon-dark: url("data:image/svg+xml,") !default; +// scss-docs-end sass-dark-mode-vars diff --git a/scss/_variables.scss b/scss/_variables.scss index ee2b457772..a7fd734add 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -2,6 +2,7 @@ @use "sass:string"; @use "functions/assert" as *; @use "functions/color" as *; +@use "functions/color-contrast" as *; @use "functions/math" as *; // Variables @@ -92,6 +93,7 @@ $min-contrast-ratio: 4.5 !default; $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; @@ -411,6 +413,10 @@ $color-mode-type: data !default; // `data` or `media-query` $variable-prefix: cui- !default; // Deprecated in v4.2.6 for the shorter `$prefix` $prefix: $variable-prefix !default; +// Prefix for data attributes + +$data-infix: -coreui- !default; + // Set mobile breakpoint $mobile-breakpoint: lg !default; @@ -874,7 +880,7 @@ $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; $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(color.mix(color-contrast($link-color), $link-color, 15%)) !default; TODO: ???? +$btn-link-focus-shadow-rgb: to-rgb(color.mix(color-contrast($link-color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $link-color, 15%)) !default; // Allows for customizing button radius independently from global border radius $btn-border-radius: var(--#{$prefix}border-radius) !default; diff --git a/scss/coreui-reboot.scss b/scss/coreui-reboot.scss index 7c1315a4cb..8d79f13fa0 100644 --- a/scss/coreui-reboot.scss +++ b/scss/coreui-reboot.scss @@ -5,5 +5,5 @@ @forward "variables"; @forward "variables-dark"; -@use "root"; -@use "reboot"; +@forward "root"; +@forward "reboot"; diff --git a/scss/coreui-utilities.scss b/scss/coreui-utilities.scss index b00f6cf06d..9fc8379a61 100644 --- a/scss/coreui-utilities.scss +++ b/scss/coreui-utilities.scss @@ -7,11 +7,11 @@ @forward "variables-dark"; // Layout & components -@use "root"; +@forward "root"; // Helpers -@use "helpers"; +@forward "helpers"; // // Utilities -@use "utilities/api"; +@forward "utilities/api"; // // scss-docs-end import-stack diff --git a/scss/coreui.scss b/scss/coreui.scss index 6f0e42f291..e3be8086f9 100644 --- a/scss/coreui.scss +++ b/scss/coreui.scss @@ -1,53 +1,53 @@ @use "banner"; -// // scss-docs-start import-stack -// // Configuration +// scss-docs-start import-stack +// Configuration @forward "variables"; @forward "variables-dark"; // // Layout & components -@use "root"; -@use "reboot"; -@use "type"; -@use "images"; -@use "containers"; -@use "grid"; -@use "tables"; -@use "forms"; -@use "buttons"; -@use "transitions"; -@use "dropdown"; -@use "button-group"; -@use "nav"; -@use "navbar"; -@use "card"; -@use "accordion"; -@use "breadcrumb"; -@use "pagination"; -@use "badge"; -@use "alert"; -@use "progress"; -@use "list-group"; -@use "close"; -@use "toasts"; -@use "modal"; -@use "tooltip"; -@use "popover"; -@use "carousel"; -@use "spinners"; -@use "offcanvas"; -@use "placeholders"; +@forward "root"; +@forward "reboot"; +@forward "type"; +@forward "images"; +@forward "containers"; +@forward "grid"; +@forward "tables"; +@forward "forms"; +@forward "buttons"; +@forward "transitions"; +@forward "dropdown"; +@forward "button-group"; +@forward "nav"; +@forward "navbar"; +@forward "card"; +@forward "accordion"; +@forward "breadcrumb"; +@forward "pagination"; +@forward "badge"; +@forward "alert"; +@forward "progress"; +@forward "list-group"; +@forward "close"; +@forward "toasts"; +@forward "modal"; +@forward "tooltip"; +@forward "popover"; +@forward "carousel"; +@forward "spinners"; +@forward "offcanvas"; +@forward "placeholders"; -@use "avatar"; -@use "callout"; -@use "footer"; -@use "header"; -@use "icon"; -@use "sidebar"; +@forward "avatar"; +@forward "callout"; +@forward "footer"; +@forward "header"; +@forward "icon"; +@forward "sidebar"; // Helpers -@use "helpers"; +@forward "helpers"; // // Utilities -@use "utilities/api"; +@forward "utilities/api"; // // scss-docs-end import-stack diff --git a/scss/forms/_floating-labels.scss b/scss/forms/_floating-labels.scss index c247b47881..70952c47b1 100644 --- a/scss/forms/_floating-labels.scss +++ b/scss/forms/_floating-labels.scss @@ -1,7 +1,7 @@ -@use "../variables" as *; @use "../mixins/border-radius" as *; @use "../mixins/ltr-rtl" as *; @use "../mixins/transition" as *; +@use "../variables" as *; .form-floating { position: relative; diff --git a/scss/forms/_form-check.scss b/scss/forms/_form-check.scss index fec47dde46..a5068186b0 100644 --- a/scss/forms/_form-check.scss +++ b/scss/forms/_form-check.scss @@ -1,11 +1,11 @@ @use "sass:map"; -@use "../variables" as *; -@use "../variables-dark" as *; @use "../functions/escape-svg" as *; @use "../mixins/border-radius" as *; @use "../mixins/color-mode" as *; @use "../mixins/ltr-rtl" as *; @use "../mixins/transition" as *; +@use "../variables" as *; +@use "../variables-dark" as *; // // Check/radio diff --git a/scss/forms/_form-control.scss b/scss/forms/_form-control.scss index 12d266de9f..731f05fc41 100644 --- a/scss/forms/_form-control.scss +++ b/scss/forms/_form-control.scss @@ -1,10 +1,10 @@ @use "sass:math"; -@use "../variables" as *; @use "../mixins/border-radius" as *; @use "../mixins/box-shadow" as *; @use "../mixins/gradients" as *; @use "../mixins/transition" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // // General form controls (plus a few specific high-level interventions) diff --git a/scss/forms/_form-range.scss b/scss/forms/_form-range.scss index a0e97fe364..d267768230 100644 --- a/scss/forms/_form-range.scss +++ b/scss/forms/_form-range.scss @@ -1,9 +1,9 @@ -@use "../variables" as *; @use "../functions/math" as *; @use "../mixins/border-radius" as *; @use "../mixins/box-shadow" as *; @use "../mixins/gradients" as *; @use "../mixins/transition" as *; +@use "../variables" as *; // Range // diff --git a/scss/forms/_form-select.scss b/scss/forms/_form-select.scss index 2190673b2e..c6b1b0a7ea 100644 --- a/scss/forms/_form-select.scss +++ b/scss/forms/_form-select.scss @@ -1,5 +1,3 @@ -@use "../variables" as *; -@use "../variables-dark" as *; @use "../functions/escape-svg" as *; @use "../mixins/border-radius" as *; @use "../mixins/box-shadow" as *; @@ -7,6 +5,8 @@ @use "../mixins/ltr-rtl" as *; @use "../mixins/transition" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; +@use "../variables-dark" as *; // Select // diff --git a/scss/forms/_form-text.scss b/scss/forms/_form-text.scss index 898d7b7256..2d0423b60f 100644 --- a/scss/forms/_form-text.scss +++ b/scss/forms/_form-text.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // // Form text diff --git a/scss/forms/_input-group.scss b/scss/forms/_input-group.scss index 9a97a665a9..2f51930245 100644 --- a/scss/forms/_input-group.scss +++ b/scss/forms/_input-group.scss @@ -1,9 +1,9 @@ @use "sass:map"; @use "sass:string"; -@use "../variables" as *; @use "../mixins/border-radius" as *; @use "../mixins/ltr-rtl" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // // Base styles diff --git a/scss/forms/_labels.scss b/scss/forms/_labels.scss index eaaa91eab7..314717b7c4 100644 --- a/scss/forms/_labels.scss +++ b/scss/forms/_labels.scss @@ -1,6 +1,6 @@ -@use "../variables" as *; @use "../functions/math" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // // Labels diff --git a/scss/forms/_validation.scss b/scss/forms/_validation.scss index 2b32cb6845..47a3edb68b 100644 --- a/scss/forms/_validation.scss +++ b/scss/forms/_validation.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "../mixins/forms" as *; +@use "../variables" as *; // Form validation // diff --git a/scss/functions/_color-contrast.scss b/scss/functions/_color-contrast.scss index b58a00fe5a..89c4a5f147 100644 --- a/scss/functions/_color-contrast.scss +++ b/scss/functions/_color-contrast.scss @@ -1,13 +1,13 @@ @use "sass:color"; @use "sass:map"; @use "sass:math"; -@use "../variables" as *; @use "math" as *; // Color contrast // See https://github.com/twbs/bootstrap/pull/30168 -@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) { + +@function color-contrast($background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) { $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black; $max-ratio: 0; $max-ratio-color: null; @@ -27,7 +27,7 @@ @return $max-ratio-color; } -@function contrast-ratio($background, $foreground: $color-contrast-light) { +@function contrast-ratio($background, $foreground) { $l1: luminance($background); $l2: luminance(opaque($background, $foreground)); diff --git a/scss/functions/_escape-svg.scss b/scss/functions/_escape-svg.scss index 56aed65198..020e389ac2 100644 --- a/scss/functions/_escape-svg.scss +++ b/scss/functions/_escape-svg.scss @@ -1,6 +1,6 @@ @use "sass:string"; -@use "../variables" as *; @use "str-replace" as *; +@use "../variables" as *; // See https://codepen.io/kevinweber/pen/dXWoRw // diff --git a/scss/functions/_maps.scss b/scss/functions/_maps.scss index 98fe8825a3..9fcd561143 100644 --- a/scss/functions/_maps.scss +++ b/scss/functions/_maps.scss @@ -1,8 +1,8 @@ @use "sass:list"; @use "sass:map"; @use "sass:meta"; -@use "../variables" as *; @use "color" as *; +@use "../variables" as *; // stylelint-disable scss/dollar-variable-pattern @function map-loop($map, $func, $args...) { diff --git a/scss/helpers/_color-bg.scss b/scss/helpers/_color-bg.scss index 8c747203e8..7cc6c58c09 100644 --- a/scss/helpers/_color-bg.scss +++ b/scss/helpers/_color-bg.scss @@ -1,12 +1,12 @@ -@use "../variables" as *; -@use "../variables-dark" as *; @use "../functions/color" as *; @use "../functions/color-contrast" as *; @use "../mixins/color-mode" as *; +@use "../variables" as *; +@use "../variables-dark" as *; @each $color, $value in $theme-colors { .text-bg-#{$color} { - color: color-contrast($value) if($enable-important-utilities, !important, null); + color: color-contrast($value, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) if($enable-important-utilities, !important, null); background-color: rgba(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); } } @@ -16,7 +16,7 @@ @each $color, $value in $theme-colors-dark { $color-rgb: to-rgb($value); .text-bg-#{$color} { - color: color-contrast($value) if($enable-important-utilities, !important, null); + color: color-contrast($value, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) if($enable-important-utilities, !important, null); background-color: rgba($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); } } diff --git a/scss/helpers/_colored-links.scss b/scss/helpers/_colored-links.scss index 49db55a4b5..477e55aab1 100644 --- a/scss/helpers/_colored-links.scss +++ b/scss/helpers/_colored-links.scss @@ -1,6 +1,6 @@ -@use "../variables" as *; @use "../functions/color" as *; @use "../functions/color-contrast" as *; +@use "../variables" as *; @each $color, $value in $theme-colors { .link-#{$color} { @@ -10,7 +10,7 @@ @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)); + $hover-color: if(color-contrast($value, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) == $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); } diff --git a/scss/helpers/_icon-link.scss b/scss/helpers/_icon-link.scss index d824145efc..53cb8e9a15 100644 --- a/scss/helpers/_icon-link.scss +++ b/scss/helpers/_icon-link.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "../mixins/transition" as *; +@use "../variables" as *; .icon-link { display: inline-flex; diff --git a/scss/helpers/_position.scss b/scss/helpers/_position.scss index 6045d11be5..5bb0689352 100644 --- a/scss/helpers/_position.scss +++ b/scss/helpers/_position.scss @@ -1,6 +1,6 @@ @use "sass:map"; -@use "../variables" as *; @use "../mixins/breakpoints" as *; +@use "../variables" as *; // Shorthand diff --git a/scss/helpers/_ratio.scss b/scss/helpers/_ratio.scss index 96165469cf..6b736012b7 100644 --- a/scss/helpers/_ratio.scss +++ b/scss/helpers/_ratio.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "../mixins/ltr-rtl" as *; +@use "../variables" as *; // Credit: Nicolas Gallagher and SUIT CSS. diff --git a/scss/mixins/_alert.scss b/scss/mixins/_alert.scss index fa2c527803..a801fea2d3 100644 --- a/scss/mixins/_alert.scss +++ b/scss/mixins/_alert.scss @@ -1,5 +1,6 @@ @use "../variables" as *; @use "../mixins/deprecate" as *; + @include deprecate("`alert-variant()`", "v4.3.0", "v6.0.0"); // scss-docs-start alert-variant-mixin diff --git a/scss/mixins/_avatar.scss b/scss/mixins/_avatar.scss index 352d00e627..1daa889bfe 100644 --- a/scss/mixins/_avatar.scss +++ b/scss/mixins/_avatar.scss @@ -1,5 +1,6 @@ @use "../variables" as *; @use "../mixins/deprecate" as *; + @include deprecate("`avatar()`", "v5.1.0", "v6.0.0"); @mixin avatar($width) { diff --git a/scss/mixins/_border-radius.scss b/scss/mixins/_border-radius.scss index fd0ebe4ba9..88e0a020f4 100644 --- a/scss/mixins/_border-radius.scss +++ b/scss/mixins/_border-radius.scss @@ -1,8 +1,8 @@ // stylelint-disable property-disallowed-list @use "sass:list"; @use "sass:meta"; -@use "../variables" as *; @use "ltr-rtl" as *; +@use "../variables" as *; // Single side border-radius diff --git a/scss/mixins/_buttons.scss b/scss/mixins/_buttons.scss index 62d8568544..875a27bfc0 100644 --- a/scss/mixins/_buttons.scss +++ b/scss/mixins/_buttons.scss @@ -1,8 +1,8 @@ @use "sass:color"; -@use "../variables" as *; @use "../functions/color" as *; @use "../functions/color-contrast" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // Button variants // @@ -13,16 +13,16 @@ @mixin button-variant( $background, $border, - $color: color-contrast($background), + $color: color-contrast($background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $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), + $hover-color: color-contrast($hover-background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $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), + $active-color: color-contrast($active-background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $disabled-background: $background, $disabled-border: $border, - $disabled-color: color-contrast($disabled-background) + $disabled-color: color-contrast($disabled-background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) ) { --#{$prefix}btn-color: #{$color}; --#{$prefix}btn-bg: #{$background}; @@ -44,10 +44,10 @@ // scss-docs-start btn-outline-variant-mixin @mixin button-outline-variant( $color, - $color-hover: color-contrast($color), + $color-hover: color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $active-background: $color, $active-border: $color, - $active-color: color-contrast($active-background) + $active-color: color-contrast($active-background, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) ) { --#{$prefix}btn-color: #{$color}; --#{$prefix}btn-border-color: #{$color}; @@ -69,13 +69,13 @@ // scss-docs-start btn-ghost-variant-mixin @mixin button-ghost-variant( $color, - $color-hover: color-contrast($color), + $color-hover: color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $hover-background: $color, $hover-border: $color, - $hover-color: color-contrast($color), + $hover-color: color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $active-background: $color, $active-border: $color, - $active-color: color-contrast($color) + $active-color: color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio) ) { --#{$prefix}btn-color: #{$color}; --#{$prefix}btn-border-color: transparent; diff --git a/scss/mixins/_caret.scss b/scss/mixins/_caret.scss index 6c92c873e6..eea04a102f 100644 --- a/scss/mixins/_caret.scss +++ b/scss/mixins/_caret.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "ltr-rtl" as *; +@use "../variables" as *; // scss-docs-start caret-mixins @mixin caret-down($width: $caret-width) { diff --git a/scss/mixins/_color-mode.scss b/scss/mixins/_color-mode.scss index 23963be18c..2b5d4b5399 100644 --- a/scss/mixins/_color-mode.scss +++ b/scss/mixins/_color-mode.scss @@ -15,7 +15,7 @@ } } } @else { - [data-coreui-theme="#{$mode}"] { + [data#{$data-infix}theme="#{$mode}"] { @content; } } diff --git a/scss/mixins/_forms.scss b/scss/mixins/_forms.scss index a09f8e5063..33928c92ae 100644 --- a/scss/mixins/_forms.scss +++ b/scss/mixins/_forms.scss @@ -1,9 +1,9 @@ -@use "../variables" as *; @use "../functions/escape-svg" as *; @use "../functions/math" as *; @use "../mixins/border-radius" as *; @use "../mixins/ltr-rtl" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // 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 @@ -26,7 +26,7 @@ $state, $color, $icon, - $tooltip-color: color-contrast($color), + $tooltip-color: color-contrast($color, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio), $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 diff --git a/scss/mixins/_grid.scss b/scss/mixins/_grid.scss index 70afe697d6..7717ade152 100644 --- a/scss/mixins/_grid.scss +++ b/scss/mixins/_grid.scss @@ -1,11 +1,11 @@ @use "sass:map"; @use "sass:math"; @use "sass:meta"; -@use "../variables" as *; -@use "../maps" as *; -@use "../functions/math" as *; @use "breakpoints" as *; @use "ltr-rtl" as *; +@use "../functions/math" as *; +@use "../maps" as *; +@use "../variables" as *; // Grid system // diff --git a/scss/mixins/_list-group.scss b/scss/mixins/_list-group.scss index 2dd2a37c56..9859ab5561 100644 --- a/scss/mixins/_list-group.scss +++ b/scss/mixins/_list-group.scss @@ -1,5 +1,6 @@ @use "sass:map"; @use "../mixins/deprecate" as *; + @include deprecate("`list-group-item-variant()`", "v4.3.0", "v6.0.0"); // List Groups diff --git a/scss/mixins/_ltr-rtl.scss b/scss/mixins/_ltr-rtl.scss index 066668709f..b74391d59a 100644 --- a/scss/mixins/_ltr-rtl.scss +++ b/scss/mixins/_ltr-rtl.scss @@ -1,6 +1,6 @@ @use "sass:string"; -@use "../variables" as *; @use "../functions/str-replace" as *; +@use "../variables" as *; @mixin ltr { @if $enable-ltr { diff --git a/scss/mixins/_pagination.scss b/scss/mixins/_pagination.scss index f508db220f..31a67f9139 100644 --- a/scss/mixins/_pagination.scss +++ b/scss/mixins/_pagination.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // Pagination diff --git a/scss/mixins/_reset-text.scss b/scss/mixins/_reset-text.scss index 3977171429..7ca5437cb7 100644 --- a/scss/mixins/_reset-text.scss +++ b/scss/mixins/_reset-text.scss @@ -1,5 +1,5 @@ -@use "../variables" as *; @use "ltr-rtl" as *; +@use "../variables" as *; @mixin reset-text { font-family: $font-family-base; diff --git a/scss/mixins/_table-variants.scss b/scss/mixins/_table-variants.scss index 75ffeb50a5..9a32e93cab 100644 --- a/scss/mixins/_table-variants.scss +++ b/scss/mixins/_table-variants.scss @@ -1,12 +1,12 @@ @use "sass:color"; @use "sass:math"; -@use "../variables" as *; @use "../functions/color-contrast" as *; +@use "../variables" as *; // scss-docs-start table-variant @mixin table-variant($state, $background) { .table-#{$state} { - $color: color-contrast(opaque($body-bg, $background)); + $color: color-contrast(opaque($body-bg, $background), $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio); $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)); @@ -16,11 +16,11 @@ --#{$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-striped-color: #{color-contrast($striped-bg, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio)}; --#{$prefix}table-active-bg: #{$active-bg}; - --#{$prefix}table-active-color: #{color-contrast($active-bg)}; + --#{$prefix}table-active-color: #{color-contrast($active-bg, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio)}; --#{$prefix}table-hover-bg: #{$hover-bg}; - --#{$prefix}table-hover-color: #{color-contrast($hover-bg)}; + --#{$prefix}table-hover-color: #{color-contrast($hover-bg, $color-contrast-dark, $color-contrast-light, $white, $black, $min-contrast-ratio)}; color: var(--#{$prefix}table-color); border-color: var(--#{$prefix}table-border-color); diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 91be3296cc..c4d6b2124b 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -8,7 +8,7 @@ // Generate selectors for theme variants @function theme-prefix($theme, $selector) { - @return #{"[data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ", [data-coreui-theme="$theme + "] ." + $theme + "\\:" + $selector + ":not([class*='#{$theme}:'])"}; + @return #{"[data" + $data-infix + "theme="$theme + "] ." + $theme + "\\:" + $selector + ", [data" + $data-infix + "theme="$theme + "] ." + $theme + "\\:" + $selector + ":not([class*='#{$theme}:'])"}; } // Utility generator diff --git a/scss/sidebar/_sidebar-narrow.scss b/scss/sidebar/_sidebar-narrow.scss index 1a30628988..65aa436fb6 100644 --- a/scss/sidebar/_sidebar-narrow.scss +++ b/scss/sidebar/_sidebar-narrow.scss @@ -1,6 +1,6 @@ -@use "../variables" as *; @use "../mixins/breakpoints" as *; @use "../mixins/ltr-rtl" as *; +@use "../variables" as *; @use "sidebar" as *; .sidebar-narrow { diff --git a/scss/sidebar/_sidebar-nav.scss b/scss/sidebar/_sidebar-nav.scss index 8eff573183..db2812d150 100644 --- a/scss/sidebar/_sidebar-nav.scss +++ b/scss/sidebar/_sidebar-nav.scss @@ -1,9 +1,9 @@ // Sidebar navigation -@use "../variables" as *; @use "../functions/escape-svg" as *; @use "../mixins/border-radius" as *; @use "../mixins/ltr-rtl" as *; @use "../mixins/transition" as *; +@use "../variables" as *; .sidebar-nav { // scss-docs-start sidebar-nav-css-vars diff --git a/scss/sidebar/_sidebar.scss b/scss/sidebar/_sidebar.scss index a28db21c32..4efccfd3db 100644 --- a/scss/sidebar/_sidebar.scss +++ b/scss/sidebar/_sidebar.scss @@ -1,12 +1,12 @@ // stylelint-disable function-disallowed-list -@use "../variables" as *; -@use "../variables-dark" as *; @use "../functions/escape-svg" as *; @use "../mixins/backdrop" as *; @use "../mixins/border-radius" as *; @use "../mixins/breakpoints" as *; @use "../mixins/ltr-rtl" as *; @use "../mixins/transition" as *; +@use "../variables" as *; +@use "../variables-dark" as *; .sidebar { // scss-docs-start sidebar-css-vars diff --git a/scss/test2.scss b/scss/test2.scss deleted file mode 100644 index 9471dc9906..0000000000 --- a/scss/test2.scss +++ /dev/null @@ -1,3 +0,0 @@ -@use "coreui" with ( - $accordion-padding-x: 20rem -); diff --git a/scss/tests/mixins/_auto-import-of-variables-dark.test.scss b/scss/tests/mixins/_auto-import-of-variables-dark.test.scss deleted file mode 100644 index f08ae58752..0000000000 --- a/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +++ /dev/null @@ -1,7 +0,0 @@ -// 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"; diff --git a/scss/tests/mixins/_color-modes.test.scss b/scss/tests/mixins/_color-modes.test.scss index 3faad43152..cbeb9acd93 100644 --- a/scss/tests/mixins/_color-modes.test.scss +++ b/scss/tests/mixins/_color-modes.test.scss @@ -1,10 +1,8 @@ // stylelint-disable selector-attribute-quotes -@import "../../functions"; -@import "../../variables"; -@import "../../variables-dark"; -@import "../../maps"; -@import "../../mixins"; +@use "../../variables" as *; +@use "../../variables-dark" as *; +@use "../../mixins/color-mode" as *; @include describe("global $color-mode-type: data") { @include it("generates data attribute selectors for dark mode") { @@ -46,7 +44,7 @@ } } @include color-mode(dark, true) { - --custom-color: #{$indigo} + --custom-color: #{$indigo}; } } @include expect() { diff --git a/scss/tests/mixins/_media-query-color-mode-full.test.scss b/scss/tests/mixins/_media-query-color-mode-full.test.scss index 598a8cb8b2..f180860d7b 100644 --- a/scss/tests/mixins/_media-query-color-mode-full.test.scss +++ b/scss/tests/mixins/_media-query-color-mode-full.test.scss @@ -1,6 +1,6 @@ -$color-mode-type: media-query; - -@import "../../coreui"; +@use "../../coreui" as * with ( + $color-mode-type: media-query +); @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 diff --git a/scss/tests/mixins/_utilities.test.scss b/scss/tests/mixins/_utilities.test.scss index 2a0a22e86e..04024c6b66 100644 --- a/scss/tests/mixins/_utilities.test.scss +++ b/scss/tests/mixins/_utilities.test.scss @@ -1,9 +1,11 @@ -$prefix: cui-; -$enable-dark-mode: true; -$enable-important-utilities: false; - // Important: Do not import rfs to check that the mixin just calls the appropriate functions from it -@import "../../mixins/utilities"; +@use "../../variables" as * with ( + $prefix: cui-, + $enable-dark-mode: true, + $enable-important-utilities: false, +); + +@use "../../mixins/utilities" as *; @mixin test-generate-utility($params...) { @include assert() { @@ -45,6 +47,7 @@ $enable-important-utilities: false; values: (small: .5rem, large: 2rem) ) ) { + .padding-small { padding: .5rem !important; } @@ -313,37 +316,6 @@ $enable-important-utilities: false; } } } - - @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") { diff --git a/scss/tests/utilities/_api.test.scss b/scss/tests/utilities/_api.test.scss index 304d8d1c94..11cdc5e1fd 100644 --- a/scss/tests/utilities/_api.test.scss +++ b/scss/tests/utilities/_api.test.scss @@ -1,36 +1,34 @@ -@import "../../functions"; -@import "../../variables"; -@import "../../variables-dark"; -@import "../../maps"; -@import "../../mixins"; +@use "sass:map"; -$utilities: (); +@use "../../variables" with ( + $grid-breakpoints: ( + xs: 0, + sm: 333px, + md: 666px + ) +); -@include describe("utilities/api") { - @include it("generates utilities for each breakpoints") { - $utilities: ( - margin: ( - property: margin, - values: auto - ), - padding: ( - property: padding, - responsive: true, - values: 1rem - ), - font-size: ( - property: font-size, - values: (large: 1.25rem), - print: true - ) - ) !global; +@use "../../utilities" as *; - $grid-breakpoints: ( - xs: 0, - sm: 333px, - md: 666px - ) !global; +$utilities: ( + margin: ( + property: margin, + values: auto + ), + padding: ( + property: padding, + responsive: true, + values: 1rem + ), + font-size: ( + property: font-size, + values: (large: 1.25rem), + print: true + ) +); +@include describe("utilities/api") { + @include it("generates utilities for each breakpoints") { @include assert() { @include output() { @import "../../utilities/api"; diff --git a/scss/themes/bootstrap/bootstrap.rtl.scss b/scss/themes/bootstrap/bootstrap.rtl.scss index a488f977e3..e2caf4a3fe 100644 --- a/scss/themes/bootstrap/bootstrap.rtl.scss +++ b/scss/themes/bootstrap/bootstrap.rtl.scss @@ -1,22 +1,28 @@ -$enable-ltr: false !default; -$enable-rtl: true !default; +@use "bootstrap" with ( + $enable-ltr: false, + $enable-rtl: true +); -@import "mixins/banner"; -@include bsBanner(""); -@import "../../../node_modules/bootstrap/scss/bootstrap"; -@import "../../variables"; +// $enable-ltr: false !default; +// $enable-rtl: true !default; -/* rtl:begin:ignore */ -@import "../../mixins/avatar"; -@import "../../mixins/icon"; -@import "../../mixins/ltr-rtl"; +// @import "mixins/banner"; +// @include bsBanner(""); -@import "../../avatar"; -@import "../../callout"; -@import "../../footer"; -@import "../../header"; -@import "../../icon"; -@import "../../sidebar"; +// @import "../../../node_modules/bootstrap/scss/bootstrap"; +// @import "../../variables"; -/* rtl:end:ignore */ +// /* rtl:begin:ignore */ +// @import "../../mixins/avatar"; +// @import "../../mixins/icon"; +// @import "../../mixins/ltr-rtl"; + +// @import "../../avatar"; +// @import "../../callout"; +// @import "../../footer"; +// @import "../../header"; +// @import "../../icon"; +// @import "../../sidebar"; + +// /* rtl:end:ignore */ diff --git a/scss/themes/bootstrap/bootstrap.scss b/scss/themes/bootstrap/bootstrap.scss index 460c0c2918..60cf153291 100644 --- a/scss/themes/bootstrap/bootstrap.scss +++ b/scss/themes/bootstrap/bootstrap.scss @@ -1,19 +1,125 @@ -@import "mixins/banner"; -@include bsBanner(""); +@use "sass:color"; +@use "../../banner" with ( + $file: "Bootstrap Theme" +); +@use "../../functions/color" as *; -@import "../../../node_modules/bootstrap/scss/bootstrap"; -@import "../../variables"; +// 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 -/* rtl:begin:ignore */ -@import "../../mixins/avatar"; -@import "../../mixins/icon"; -@import "../../mixins/ltr-rtl"; +// 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 -@import "../../avatar"; -@import "../../callout"; -@import "../../footer"; -@import "../../header"; -@import "../../icon"; -@import "../../sidebar"; +// scss-docs-start theme-color-variables +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-900 !default; +// scss-docs-end theme-color-variables -/* rtl:end:ignore */ +// 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; +// 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; +// 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; +// scss-docs-end theme-border-subtle-dark-variables + +@forward "../../coreui" with ( + $prefix: bs- !default, + $data-infix: -bs- !default, + $white: $white !default, + $gray-100: $gray-100 !default, + $gray-200: $gray-200 !default, + $gray-300: $gray-300 !default, + $gray-400: $gray-400 !default, + $gray-500: $gray-500 !default, + $gray-600: $gray-600 !default, + $gray-700: $gray-700 !default, + $gray-800: $gray-800 !default, + $gray-900: $gray-900 !default, + $black: $black !default, + $primary: $primary !default, + $secondary: $secondary !default, + $success: $success !default, + $info: $info !default, + $warning: $warning !default, + $danger: $danger !default, + $light: $light !default, + $dark: $dark !default, + $body-color: $gray-900 !default, + $body-secondary-color: rgba($gray-900, .75) !default, + $body-tertiary-bg: rgba($gray-900, .75) !default, + $component-active-color: $white !default, + $component-active-bg: $primary !default, + $body-color-dark: $gray-300 !default, + $body-bg-dark: $gray-900 !default, + $body-secondary-color-dark: rgba($gray-300, .75) !default, + $body-secondary-bg-dark: $gray-800 !default, + $body-tertiary-color-dark: rgba($gray-300, .5) !default, + $body-tertiary-bg-dark: color.mix($gray-800, $gray-900, 50%) !default, + $primary-text-emphasis-dark: $primary-text-emphasis-dark !default, + $secondary-text-emphasis-dark: $secondary-text-emphasis-dark !default, + $success-text-emphasis-dark: $success-text-emphasis-dark !default, + $info-text-emphasis-dark: $info-text-emphasis-dark !default, + $warning-text-emphasis-dark: $warning-text-emphasis-dark !default, + $danger-text-emphasis-dark: $danger-text-emphasis-dark !default, + $primary-bg-subtle-dark: $primary-bg-subtle-dark !default, + $secondary-bg-subtle-dark: $secondary-bg-subtle-dark !default, + $success-bg-subtle-dark: $success-bg-subtle-dark !default, + $info-bg-subtle-dark: $info-bg-subtle-dark !default, + $warning-bg-subtle-dark: $warning-bg-subtle-dark !default, + $danger-bg-subtle-dark: $danger-bg-subtle-dark !default, + $primary-border-subtle-dark: $primary-border-subtle-dark !default, + $secondary-border-subtle-dark: $secondary-border-subtle-dark !default, + $success-border-subtle-dark: $success-border-subtle-dark !default, + $info-border-subtle-dark: $info-border-subtle-dark !default, + $warning-border-subtle-dark: $warning-border-subtle-dark !default, + $danger-border-subtle-dark: $danger-border-subtle-dark !default, + $theme-colors-dark: () !default, + $grays-dark: () !default, +); diff --git a/scss/utilities/_api.scss b/scss/utilities/_api.scss index 776c55d89e..ad8136a244 100644 --- a/scss/utilities/_api.scss +++ b/scss/utilities/_api.scss @@ -1,10 +1,10 @@ @use "sass:map"; @use "sass:meta"; -@use "../variables" as *; @use "../utilities" as *; @use "../mixins/breakpoints" as *; @use "../mixins/utilities" as *; @use "../vendor/rfs" as *; +@use "../variables" as *; // Loop over each breakpoint @each $breakpoint in map.keys($grid-breakpoints) { From 64b259aa708f4f60a2a6c04f71ab4dab1360e851 Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 30 Jan 2025 13:26:37 +0100 Subject: [PATCH 25/25] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @babel/core ^7.26.0 → ^7.26.7 @babel/preset-env ^7.26.0 → ^7.26.7 @docsearch/js ^3.8.2 → ^3.8.3 @eslint/markdown ^6.2.1 → ^6.2.2 @rollup/plugin-node-resolve ^15.3.1 → ^16.0.0 eslint ^9.17.0 → ^9.19.0 hugo-bin ^0.137.1 → ^0.139.0 postcss ^8.4.49 → ^8.5.1 rollup ^4.29.1 → ^4.32.1 sass-embedded ^1.83.1 → ^1.83.4 stylelint ^16.12.0 → ^16.14.1 --- package-lock.json | 951 ++++++++++++++++++++++++---------------------- package.json | 22 +- 2 files changed, 501 insertions(+), 472 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4e0c00831..7443f26472 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,14 +16,14 @@ "license": "MIT", "devDependencies": { "@babel/cli": "^7.26.4", - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@docsearch/js": "^3.8.2", - "@eslint/markdown": "^6.2.1", + "@babel/core": "^7.26.7", + "@babel/preset-env": "^7.26.7", + "@docsearch/js": "^3.8.3", + "@eslint/markdown": "^6.2.2", "@popperjs/core": "^2.11.8", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^28.0.2", - "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-replace": "^6.0.2", "@stackblitz/sdk": "^1.11.0", "autoprefixer": "^10.4.20", @@ -32,7 +32,7 @@ "clean-css-cli": "^5.6.3", "clipboard": "^2.0.11", "cross-env": "^7.0.3", - "eslint": "^9.17.0", + "eslint": "^9.19.0", "eslint-config-xo": "^0.46.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", @@ -41,7 +41,7 @@ "globals": "^15.14.0", "globby": "^14.0.2", "hammer-simulator": "0.0.1", - "hugo-bin": "^0.137.1", + "hugo-bin": "^0.139.0", "ip": "^2.0.1", "jasmine": "^5.5.0", "jquery": "^3.7.1", @@ -57,16 +57,16 @@ "lockfile-lint": "^4.14.0", "nodemon": "^3.1.9", "npm-run-all": "^4.1.5", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "postcss-cli": "^11.0.0", "postcss-combine-duplicated-selectors": "^10.0.3", - "rollup": "^4.29.1", + "rollup": "^4.32.1", "rollup-plugin-istanbul": "^5.0.0", "rtlcss": "^4.3.0", - "sass-embedded": "^1.83.1", + "sass-embedded": "^1.83.4", "sass-true": "^8.1.0", "shelljs": "^0.8.5", - "stylelint": "^16.12.0", + "stylelint": "^16.14.1", "stylelint-config-twbs-bootstrap": "^15.1.0", "terser": "5.37.0", "vnu-jar": "24.10.17" @@ -83,37 +83,37 @@ "license": "MIT" }, "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", + "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", + "@algolia/autocomplete-shared": "1.17.9" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", + "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", + "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -121,9 +121,9 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", + "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -132,41 +132,41 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.18.0.tgz", - "integrity": "sha512-DLIrAukjsSrdMNNDx1ZTks72o4RH/1kOn8Wx5zZm8nnqFexG+JzY4SANnCNEjnFQPJTTvC+KpgiNW/CP2lumng==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.0.tgz", + "integrity": "sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.18.0.tgz", - "integrity": "sha512-0VpGG2uQW+h2aejxbG8VbnMCQ9ary9/ot7OASXi6OjE0SRkYQ/+pkW+q09+IScif3pmsVVYggmlMPtAsmYWHng==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.0.tgz", + "integrity": "sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.18.0.tgz", - "integrity": "sha512-X1WMSC+1ve2qlMsemyTF5bIjwipOT+m99Ng1Tyl36ZjQKTa54oajBKE0BrmM8LD8jGdtukAgkUhFoYOaRbMcmQ==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.0.tgz", + "integrity": "sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==", "dev": true, "license": "MIT", "engines": { @@ -174,151 +174,151 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.18.0.tgz", - "integrity": "sha512-FAJRNANUOSs/FgYOJ/Njqp+YTe4TMz2GkeZtfsw1TMiA5mVNRS/nnMpxas9771aJz7KTEWvK9GwqPs0K6RMYWg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.0.tgz", + "integrity": "sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.18.0.tgz", - "integrity": "sha512-I2dc94Oiwic3SEbrRp8kvTZtYpJjGtg5y5XnqubgnA15AgX59YIY8frKsFG8SOH1n2rIhUClcuDkxYQNXJLg+w==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.0.tgz", + "integrity": "sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.18.0.tgz", - "integrity": "sha512-x6XKIQgKFTgK/bMasXhghoEjHhmgoP61pFPb9+TaUJ32aKOGc65b12usiGJ9A84yS73UDkXS452NjyP50Knh/g==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.0.tgz", + "integrity": "sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.18.0.tgz", - "integrity": "sha512-qI3LcFsVgtvpsBGR7aNSJYxhsR+Zl46+958ODzg8aCxIcdxiK7QEVLMJMZAR57jGqW0Lg/vrjtuLFDMfSE53qA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.0.tgz", + "integrity": "sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.18.0.tgz", - "integrity": "sha512-bGvJg7HnGGm+XWYMDruZXWgMDPVt4yCbBqq8DM6EoaMBK71SYC4WMfIdJaw+ABqttjBhe6aKNRkWf/bbvYOGyw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.0.tgz", + "integrity": "sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.18.0.tgz", - "integrity": "sha512-lBssglINIeGIR+8KyzH05NAgAmn1BCrm5D2T6pMtr/8kbTHvvrm1Zvcltc5dKUQEFyyx3J5+MhNc7kfi8LdjVw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.0.tgz", + "integrity": "sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.18.0.tgz", - "integrity": "sha512-uSnkm0cdAuFwdMp4pGT5vHVQ84T6AYpTZ3I0b3k/M3wg4zXDhl3aCiY8NzokEyRLezz/kHLEEcgb/tTTobOYVw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.0.tgz", + "integrity": "sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-common": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.18.0.tgz", - "integrity": "sha512-1XFjW0C3pV0dS/9zXbV44cKI+QM4ZIz9cpatXpsjRlq6SUCpLID3DZHsXyE6sTb8IhyPaUjk78GEJT8/3hviqg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.0.tgz", + "integrity": "sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0" + "@algolia/client-common": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.18.0.tgz", - "integrity": "sha512-0uodeNdAHz1YbzJh6C5xeQ4T6x5WGiUxUq3GOaT/R4njh5t78dq+Rb187elr7KtnjUmETVVuCvmEYaThfTHzNg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.0.tgz", + "integrity": "sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0" + "@algolia/client-common": "5.20.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.18.0.tgz", - "integrity": "sha512-tZCqDrqJ2YE2I5ukCQrYN8oiF6u3JIdCxrtKq+eniuLkjkO78TKRnXrVcKZTmfFJyyDK8q47SfDcHzAA3nHi6w==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.0.tgz", + "integrity": "sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.18.0" + "@algolia/client-common": "5.20.0" }, "engines": { "node": ">= 14.0.0" @@ -369,9 +369,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", - "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -384,9 +384,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", - "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", "dev": true, "license": "MIT", "engines": { @@ -394,22 +394,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -425,14 +425,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", - "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.0", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -454,28 +454,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -602,9 +588,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, "license": "MIT", "engines": { @@ -647,20 +633,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -721,27 +693,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", - "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -949,13 +921,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1145,13 +1117,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1294,15 +1265,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1381,13 +1351,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1663,13 +1633,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1746,15 +1716,15 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz", + "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -1768,7 +1738,7 @@ "@babel/plugin-transform-arrow-functions": "^7.25.9", "@babel/plugin-transform-async-generator-functions": "^7.25.9", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", @@ -1779,7 +1749,7 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", @@ -1788,12 +1758,12 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -1810,7 +1780,7 @@ "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", @@ -1873,17 +1843,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1902,9 +1872,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", "dev": true, "license": "MIT", "dependencies": { @@ -2000,33 +1970,33 @@ } }, "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.3.tgz", + "integrity": "sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==", "dev": true, "license": "MIT" }, "node_modules/@docsearch/js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", - "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.3.tgz", + "integrity": "sha512-CQsX1zeoPJIWxN3IGoDSWOqzRc0JsOE9Bclegf9llwjYN2rzzJF93zagGcT3uI3tF31oCqTuUOVGW/mVFb7arw==", "dev": true, "license": "MIT", "dependencies": { - "@docsearch/react": "3.8.2", + "@docsearch/react": "3.8.3", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.3.tgz", + "integrity": "sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", + "@algolia/autocomplete-core": "1.17.9", + "@algolia/autocomplete-preset-algolia": "1.17.9", + "@docsearch/css": "3.8.3", "algoliasearch": "^5.14.2" }, "peerDependencies": { @@ -2153,9 +2123,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", - "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.19.0.tgz", + "integrity": "sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==", "dev": true, "license": "MIT", "engines": { @@ -2163,14 +2133,15 @@ } }, "node_modules/@eslint/markdown": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.2.1.tgz", - "integrity": "sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.2.2.tgz", + "integrity": "sha512-U0/KgzI9BVUuHDQ9M2fuVgB0QZ1fSyzwm8jKmHr1dlsLHGHYzoeIA9yqLMdTbV3ivZfp6rTdt6zqre3TfNExUQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/plugin-kit": "^0.2.0", - "mdast-util-from-markdown": "^2.0.1", + "@eslint/core": "^0.10.0", + "@eslint/plugin-kit": "^0.2.5", + "mdast-util-from-markdown": "^2.0.2", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0" }, @@ -2564,6 +2535,41 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@keyv/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/@keyv/serialize/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -2715,9 +2721,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", - "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", + "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", "dev": true, "license": "MIT", "dependencies": { @@ -2785,9 +2791,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz", - "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", + "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", "cpu": [ "arm" ], @@ -2799,9 +2805,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz", - "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", + "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", "cpu": [ "arm64" ], @@ -2813,9 +2819,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz", - "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", + "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", "cpu": [ "arm64" ], @@ -2827,9 +2833,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", - "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", + "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", "cpu": [ "x64" ], @@ -2841,9 +2847,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz", - "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", + "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", "cpu": [ "arm64" ], @@ -2855,9 +2861,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz", - "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", + "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", "cpu": [ "x64" ], @@ -2869,9 +2875,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz", - "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", + "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", "cpu": [ "arm" ], @@ -2883,9 +2889,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz", - "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", + "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", "cpu": [ "arm" ], @@ -2897,9 +2903,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz", - "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", + "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", "cpu": [ "arm64" ], @@ -2911,9 +2917,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz", - "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", + "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", "cpu": [ "arm64" ], @@ -2925,9 +2931,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz", - "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", + "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", "cpu": [ "loong64" ], @@ -2939,9 +2945,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz", - "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", + "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", "cpu": [ "ppc64" ], @@ -2953,9 +2959,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz", - "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", + "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", "cpu": [ "riscv64" ], @@ -2967,9 +2973,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz", - "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", + "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", "cpu": [ "s390x" ], @@ -2981,9 +2987,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz", - "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", + "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", "cpu": [ "x64" ], @@ -2995,9 +3001,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz", - "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", + "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", "cpu": [ "x64" ], @@ -3009,9 +3015,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz", - "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", + "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", "cpu": [ "arm64" ], @@ -3023,9 +3029,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz", - "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", + "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", "cpu": [ "ia32" ], @@ -3037,9 +3043,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz", - "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", + "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", "cpu": [ "x64" ], @@ -3755,25 +3761,25 @@ } }, "node_modules/algoliasearch": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.18.0.tgz", - "integrity": "sha512-/tfpK2A4FpS0o+S78o3YSdlqXr0MavJIDlFK3XZrlXLy7vaRXJvW5jYg3v5e/wCaF8y0IpMjkYLhoV6QqfpOgw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.0.tgz", + "integrity": "sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-abtesting": "5.18.0", - "@algolia/client-analytics": "5.18.0", - "@algolia/client-common": "5.18.0", - "@algolia/client-insights": "5.18.0", - "@algolia/client-personalization": "5.18.0", - "@algolia/client-query-suggestions": "5.18.0", - "@algolia/client-search": "5.18.0", - "@algolia/ingestion": "1.18.0", - "@algolia/monitoring": "1.18.0", - "@algolia/recommend": "5.18.0", - "@algolia/requester-browser-xhr": "5.18.0", - "@algolia/requester-fetch": "5.18.0", - "@algolia/requester-node-http": "5.18.0" + "@algolia/client-abtesting": "5.20.0", + "@algolia/client-analytics": "5.20.0", + "@algolia/client-common": "5.20.0", + "@algolia/client-insights": "5.20.0", + "@algolia/client-personalization": "5.20.0", + "@algolia/client-query-suggestions": "5.20.0", + "@algolia/client-search": "5.20.0", + "@algolia/ingestion": "1.20.0", + "@algolia/monitoring": "1.20.0", + "@algolia/recommend": "5.20.0", + "@algolia/requester-browser-xhr": "5.20.0", + "@algolia/requester-fetch": "5.20.0", + "@algolia/requester-node-http": "5.20.0" }, "engines": { "node": ">= 14.0.0" @@ -4553,6 +4559,17 @@ "node": ">= 0.8" } }, + "node_modules/cacheable": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.8.tgz", + "integrity": "sha512-OE1/jlarWxROUIpd0qGBSKFLkNsotY8pt4GeiVErUYh/NUeTNrT+SBksUgllQv4m6a0W/VZsLuiHb88maavqEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.7.0", + "keyv": "^5.2.3" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -4582,6 +4599,16 @@ "node": ">=14.16" } }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.3.tgz", + "integrity": "sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.0.2" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5778,9 +5805,9 @@ } }, "node_modules/eslint": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", - "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", + "version": "9.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.19.0.tgz", + "integrity": "sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5789,7 +5816,7 @@ "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.10.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.18.0", + "@eslint/js": "9.19.0", "@eslint/plugin-kit": "^0.2.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -6364,9 +6391,9 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6374,7 +6401,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -6684,9 +6711,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -7278,6 +7305,13 @@ "node": ">= 0.4" } }, + "node_modules/hookified": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.7.0.tgz", + "integrity": "sha512-XQdMjqC1AyeOzfs+17cnIk7Wdfu1hh2JtcyNfBf5u9jHrT3iZUlGHxLTntFBuk5lwkqJ6l3+daeQdHK5yByHVA==", + "dev": true, + "license": "MIT" + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -7426,9 +7460,9 @@ } }, "node_modules/hugo-bin": { - "version": "0.137.1", - "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.137.1.tgz", - "integrity": "sha512-mR5lHdqZB70mUghmH+TrPgI0KPPOZ/KU0dkQ6RYJ+J/iDt0cnEdMLq8/OmyeVS1WrP8nCsyhmbHwodHie1ODaA==", + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.139.0.tgz", + "integrity": "sha512-ZjtVqatwvqCW6BSRNucj3xsNVoO3ZjuZDCg0NGQC0B/Wsvc6vwVfS7E6KD755XJ/N6o7raa3qXe+gIvJiew7cA==", "dev": true, "funding": [ { @@ -10531,9 +10565,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -11251,9 +11285,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "dev": true, "funding": [ { @@ -11271,7 +11305,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -12219,9 +12253,9 @@ } }, "node_modules/rollup": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz", - "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", + "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", "dev": true, "license": "MIT", "dependencies": { @@ -12235,25 +12269,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.29.1", - "@rollup/rollup-android-arm64": "4.29.1", - "@rollup/rollup-darwin-arm64": "4.29.1", - "@rollup/rollup-darwin-x64": "4.29.1", - "@rollup/rollup-freebsd-arm64": "4.29.1", - "@rollup/rollup-freebsd-x64": "4.29.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.29.1", - "@rollup/rollup-linux-arm-musleabihf": "4.29.1", - "@rollup/rollup-linux-arm64-gnu": "4.29.1", - "@rollup/rollup-linux-arm64-musl": "4.29.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.29.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1", - "@rollup/rollup-linux-riscv64-gnu": "4.29.1", - "@rollup/rollup-linux-s390x-gnu": "4.29.1", - "@rollup/rollup-linux-x64-gnu": "4.29.1", - "@rollup/rollup-linux-x64-musl": "4.29.1", - "@rollup/rollup-win32-arm64-msvc": "4.29.1", - "@rollup/rollup-win32-ia32-msvc": "4.29.1", - "@rollup/rollup-win32-x64-msvc": "4.29.1", + "@rollup/rollup-android-arm-eabi": "4.32.1", + "@rollup/rollup-android-arm64": "4.32.1", + "@rollup/rollup-darwin-arm64": "4.32.1", + "@rollup/rollup-darwin-x64": "4.32.1", + "@rollup/rollup-freebsd-arm64": "4.32.1", + "@rollup/rollup-freebsd-x64": "4.32.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", + "@rollup/rollup-linux-arm-musleabihf": "4.32.1", + "@rollup/rollup-linux-arm64-gnu": "4.32.1", + "@rollup/rollup-linux-arm64-musl": "4.32.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", + "@rollup/rollup-linux-riscv64-gnu": "4.32.1", + "@rollup/rollup-linux-s390x-gnu": "4.32.1", + "@rollup/rollup-linux-x64-gnu": "4.32.1", + "@rollup/rollup-linux-x64-musl": "4.32.1", + "@rollup/rollup-win32-arm64-msvc": "4.32.1", + "@rollup/rollup-win32-ia32-msvc": "4.32.1", + "@rollup/rollup-win32-x64-msvc": "4.32.1", "fsevents": "~2.3.2" } }, @@ -12415,9 +12449,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.1.tgz", - "integrity": "sha512-LdKG6nxLEzpXbMUt0if12PhUNonGvy91n7IWHOZRZjvA6AWm9oVdhpO+KEXN/Sc+jjGvQeQcav9+Z8DwmII/pA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.83.4.tgz", + "integrity": "sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12437,32 +12471,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.83.1", - "sass-embedded-android-arm64": "1.83.1", - "sass-embedded-android-ia32": "1.83.1", - "sass-embedded-android-riscv64": "1.83.1", - "sass-embedded-android-x64": "1.83.1", - "sass-embedded-darwin-arm64": "1.83.1", - "sass-embedded-darwin-x64": "1.83.1", - "sass-embedded-linux-arm": "1.83.1", - "sass-embedded-linux-arm64": "1.83.1", - "sass-embedded-linux-ia32": "1.83.1", - "sass-embedded-linux-musl-arm": "1.83.1", - "sass-embedded-linux-musl-arm64": "1.83.1", - "sass-embedded-linux-musl-ia32": "1.83.1", - "sass-embedded-linux-musl-riscv64": "1.83.1", - "sass-embedded-linux-musl-x64": "1.83.1", - "sass-embedded-linux-riscv64": "1.83.1", - "sass-embedded-linux-x64": "1.83.1", - "sass-embedded-win32-arm64": "1.83.1", - "sass-embedded-win32-ia32": "1.83.1", - "sass-embedded-win32-x64": "1.83.1" + "sass-embedded-android-arm": "1.83.4", + "sass-embedded-android-arm64": "1.83.4", + "sass-embedded-android-ia32": "1.83.4", + "sass-embedded-android-riscv64": "1.83.4", + "sass-embedded-android-x64": "1.83.4", + "sass-embedded-darwin-arm64": "1.83.4", + "sass-embedded-darwin-x64": "1.83.4", + "sass-embedded-linux-arm": "1.83.4", + "sass-embedded-linux-arm64": "1.83.4", + "sass-embedded-linux-ia32": "1.83.4", + "sass-embedded-linux-musl-arm": "1.83.4", + "sass-embedded-linux-musl-arm64": "1.83.4", + "sass-embedded-linux-musl-ia32": "1.83.4", + "sass-embedded-linux-musl-riscv64": "1.83.4", + "sass-embedded-linux-musl-x64": "1.83.4", + "sass-embedded-linux-riscv64": "1.83.4", + "sass-embedded-linux-x64": "1.83.4", + "sass-embedded-win32-arm64": "1.83.4", + "sass-embedded-win32-ia32": "1.83.4", + "sass-embedded-win32-x64": "1.83.4" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.1.tgz", - "integrity": "sha512-FKfrmwDG84L5cfn8fmIew47qnCFFUdcoOTCzOw8ROItkRhLLH0hnIm6gEpG5T6OFf6kxzUxvE9D0FvYQUznZrw==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.83.4.tgz", + "integrity": "sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==", "cpu": [ "arm" ], @@ -12477,9 +12511,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.1.tgz", - "integrity": "sha512-S63rlLPGCA9FCqYYOobDJrwcuBX0zbSOl7y0jT9DlfqeqNOkC6NIT1id6RpMFCs3uhd4gbBS2E/5WPv5J5qwbw==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.83.4.tgz", + "integrity": "sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==", "cpu": [ "arm64" ], @@ -12494,9 +12528,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.1.tgz", - "integrity": "sha512-AGlY2vFLJhF2hN0qOz12f4eDs6x0b5BUapOpgfRrqQLHIfJhxkvi39bInsiBgQ57U0jb4I7AaS2e2e+sj7+Rqw==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.83.4.tgz", + "integrity": "sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==", "cpu": [ "ia32" ], @@ -12511,9 +12545,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.1.tgz", - "integrity": "sha512-OyU4AnfAUVd/wBaT60XvHidmQdaEsVUnxvI71oyPM/id1v97aWTZX3SmGkwGb7uA/q6Soo2uNalgvOSNJn7PwA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.83.4.tgz", + "integrity": "sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==", "cpu": [ "riscv64" ], @@ -12528,9 +12562,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.1.tgz", - "integrity": "sha512-NY5rwffhF4TnhXVErZnfFIjHqU3MNoWxCuSHumRN3dDI8hp8+IF59W5+Qw9AARlTXvyb+D0u5653aLSea5F40w==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.83.4.tgz", + "integrity": "sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==", "cpu": [ "x64" ], @@ -12545,9 +12579,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.1.tgz", - "integrity": "sha512-w1SBcSkIgIWgUfB7IKcPoTbSwnS3Kag5PVv3e3xfW6ZCsDweYZLQntUd2WGgaoekdm1uIbVuvPxnDH2t880iGQ==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.83.4.tgz", + "integrity": "sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==", "cpu": [ "arm64" ], @@ -12562,9 +12596,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.1.tgz", - "integrity": "sha512-RWrmLtUhEP5kvcGOAFdr99/ebZ/eW9z3FAktLldvgl2k96WSTC1Zr2ctL0E+Y+H3uLahEZsshIFk6RkVIRKIsA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.83.4.tgz", + "integrity": "sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==", "cpu": [ "x64" ], @@ -12579,9 +12613,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.1.tgz", - "integrity": "sha512-y7rHuRgjg2YM284rin068PsEdthPljSGb653Slut5Wba4A2IP11UNVraSl6Je2AYTuoPRjQX0g7XdsrjXlzC3g==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.83.4.tgz", + "integrity": "sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==", "cpu": [ "arm" ], @@ -12596,9 +12630,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.1.tgz", - "integrity": "sha512-HVIytzj8OO18fmBY6SVRIYErcJ+Nd9a5RNF6uArav/CqvwPLATlUV8dwqSyWQIzSsQUhDF/vFIlJIoNLKKzD3A==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.83.4.tgz", + "integrity": "sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==", "cpu": [ "arm64" ], @@ -12613,9 +12647,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.1.tgz", - "integrity": "sha512-/pc+jHllyvfaYYLTRCoXseRc4+V3Z7IDPqsviTcfVdICAoR9mgK2RtIuIZanhm1NP/lDylDOgvj1NtjcA2dNvg==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.83.4.tgz", + "integrity": "sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==", "cpu": [ "ia32" ], @@ -12630,9 +12664,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.1.tgz", - "integrity": "sha512-sFM8GXOVoeR91j9MiwNRcFXRpTA7u4185SaGuvUjcRMb84mHvtWOJPGDvgZqbWdVClBRJp6J7+CShliWngy/og==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.83.4.tgz", + "integrity": "sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==", "cpu": [ "arm" ], @@ -12647,9 +12681,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.1.tgz", - "integrity": "sha512-wjSIYYqdIQp3DjliSTYNFg04TVqQf/3Up/Stahol0Qf/TTjLkjHHtT2jnDaZI5GclHi2PVJqQF3wEGB8bGJMzQ==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.83.4.tgz", + "integrity": "sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==", "cpu": [ "arm64" ], @@ -12664,9 +12698,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.1.tgz", - "integrity": "sha512-iwhTH5gwmoGt3VH6dn4WV8N6eWvthKAvUX5XPURq7e9KEsc7QP8YNHagwaAJh7TAPopb32buyEg6oaUmzxUI+Q==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.83.4.tgz", + "integrity": "sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==", "cpu": [ "ia32" ], @@ -12681,9 +12715,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.1.tgz", - "integrity": "sha512-FjFNWHU1n0Q6GpK1lAHQL5WmzlPjL8DTVLkYW2A/dq8EsutAdi3GfpeyWZk9bte8kyWdmPUWG3BHlnQl22xdoA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.83.4.tgz", + "integrity": "sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==", "cpu": [ "riscv64" ], @@ -12698,9 +12732,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.1.tgz", - "integrity": "sha512-BUfYR5TIDvgGHWhxSIKwTJocXU88ECZ0BW89RJqtvr7m83fKdf5ylTFCOieU7BwcA7SORUeZzcQzVFIdPUM3BQ==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.83.4.tgz", + "integrity": "sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==", "cpu": [ "x64" ], @@ -12715,9 +12749,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.1.tgz", - "integrity": "sha512-KOBGSpMrJi8y+H+za3vAAVQImPUvQa5eUrvTbbOl+wkU7WAGhOu8xrxgmYYiz3pZVBBcfRjz4I2jBcDFKJmWSw==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.83.4.tgz", + "integrity": "sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==", "cpu": [ "riscv64" ], @@ -12732,9 +12766,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.1.tgz", - "integrity": "sha512-swUsMHKqlEU9dZQ/I5WADDaXz+QkmJS27x/Oeh+oz41YgZ0ppKd0l4Vwjn0LgOQn+rxH1zLFv6xXDycvj68F/w==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.83.4.tgz", + "integrity": "sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==", "cpu": [ "x64" ], @@ -12749,9 +12783,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.1.tgz", - "integrity": "sha512-6lONEBN5TaFD5L/y68zUugryXqm4RAFuLdaOPeZQRu+7ay/AmfhtFYfE5gRssnIcIx1nlcoq7zA3UX+SN2jo1Q==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.83.4.tgz", + "integrity": "sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==", "cpu": [ "arm64" ], @@ -12766,9 +12800,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.1.tgz", - "integrity": "sha512-HxZDkAE9n6Gb8Rz6xd67VHuo5FkUSQ4xPb7cHKa4pE0ndwH5Oc0uEhbqjJobpgmnuTm1rQYNU2nof1sFhy2MFA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.83.4.tgz", + "integrity": "sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==", "cpu": [ "ia32" ], @@ -12783,9 +12817,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.1.tgz", - "integrity": "sha512-5Q0aPfUaqRek8Ee1AqTUIC0o6yQSA8QwyhCgh7upsnHG3Ltm8pkJOYjzm+UgYPJeoMNppDjdDlRGQISE7qzd4g==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.83.4.tgz", + "integrity": "sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==", "cpu": [ "x64" ], @@ -13605,9 +13639,9 @@ "license": "ISC" }, "node_modules/stylelint": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", - "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.14.1.tgz", + "integrity": "sha512-oqCL7AC3786oTax35T/nuLL8p2C3k/8rHKAooezrPGRvUX0wX+qqs5kMWh5YYT4PHQgVDobHT4tw55WgpYG6Sw==", "dev": true, "funding": [ { @@ -13630,16 +13664,16 @@ "colord": "^2.9.3", "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", - "css-tree": "^3.0.1", + "css-tree": "^3.1.0", "debug": "^4.3.7", - "fast-glob": "^3.3.2", + "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^9.1.0", + "file-entry-cache": "^10.0.5", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^6.0.2", + "ignore": "^7.0.3", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", @@ -13648,7 +13682,7 @@ "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.0.0", @@ -13912,30 +13946,25 @@ } }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", - "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.6.tgz", + "integrity": "sha512-0wvv16mVo9nN0Md3k7DMjgAPKG/TY4F/gYMBVb/wMThFRJvzrpaqBFqF6km9wf8QfYTN+mNg5aeaBLfy8k35uA==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^5.0.0" - }, - "engines": { - "node": ">=18" + "flat-cache": "^6.1.6" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", - "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.6.tgz", + "integrity": "sha512-F+CKgSwp0pzLx67u+Zy1aCueVWFAHWbXepvXlZ+bWVTaASbm5SyCnSJ80Fp1ePEmS57wU+Bf6cx6525qtMZ4lQ==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.3.1", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=18" + "cacheable": "^1.8.8", + "flatted": "^3.3.2", + "hookified": "^1.7.0" } }, "node_modules/stylelint/node_modules/globby": { @@ -13970,9 +13999,9 @@ } }, "node_modules/stylelint/node_modules/ignore": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", - "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 0fe9ad3c31..7436ae9005 100644 --- a/package.json +++ b/package.json @@ -100,14 +100,14 @@ }, "devDependencies": { "@babel/cli": "^7.26.4", - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@docsearch/js": "^3.8.2", - "@eslint/markdown": "^6.2.1", + "@babel/core": "^7.26.7", + "@babel/preset-env": "^7.26.7", + "@docsearch/js": "^3.8.3", + "@eslint/markdown": "^6.2.2", "@popperjs/core": "^2.11.8", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^28.0.2", - "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-replace": "^6.0.2", "@stackblitz/sdk": "^1.11.0", "autoprefixer": "^10.4.20", @@ -116,7 +116,7 @@ "clean-css-cli": "^5.6.3", "clipboard": "^2.0.11", "cross-env": "^7.0.3", - "eslint": "^9.17.0", + "eslint": "^9.19.0", "eslint-config-xo": "^0.46.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", @@ -125,7 +125,7 @@ "globals": "^15.14.0", "globby": "^14.0.2", "hammer-simulator": "0.0.1", - "hugo-bin": "^0.137.1", + "hugo-bin": "^0.139.0", "ip": "^2.0.1", "jasmine": "^5.5.0", "jquery": "^3.7.1", @@ -141,16 +141,16 @@ "lockfile-lint": "^4.14.0", "nodemon": "^3.1.9", "npm-run-all": "^4.1.5", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "postcss-cli": "^11.0.0", "postcss-combine-duplicated-selectors": "^10.0.3", - "rollup": "^4.29.1", + "rollup": "^4.32.1", "rollup-plugin-istanbul": "^5.0.0", "rtlcss": "^4.3.0", - "sass-embedded": "^1.83.1", + "sass-embedded": "^1.83.4", "sass-true": "^8.1.0", "shelljs": "^0.8.5", - "stylelint": "^16.12.0", + "stylelint": "^16.14.1", "stylelint-config-twbs-bootstrap": "^15.1.0", "terser": "5.37.0", "vnu-jar": "24.10.17"