From 819f5f1b680d10b8c4e6ff1c0df1ff9099980fb9 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Tue, 12 Mar 2024 23:48:55 +0100 Subject: [PATCH] strict return types --- .eslintrc.json | 3 +- cli/csstools-cli/src/cli.ts | 2 +- .../src/plugins/css-blank-pseudo.ts | 2 +- .../src/plugins/css-has-pseudo.ts | 2 +- .../src/plugins/css-prefers-color-scheme.ts | 2 +- .../postcss-attribute-case-insensitive.ts | 2 +- .../src/plugins/postcss-cascade-layers.ts | 2 +- .../src/plugins/postcss-color-function.ts | 2 +- .../postcss-color-functional-notation.ts | 2 +- .../src/plugins/postcss-color-hex-alpha.ts | 2 +- .../src/plugins/postcss-color-mix-function.ts | 2 +- .../plugins/postcss-color-rebeccapurple.ts | 2 +- .../src/plugins/postcss-custom-media.ts | 2 +- .../src/plugins/postcss-custom-properties.ts | 2 +- .../src/plugins/postcss-custom-selectors.ts | 2 +- .../src/plugins/postcss-dir-pseudo-class.ts | 2 +- .../postcss-double-position-gradients.ts | 2 +- .../plugins/postcss-exponential-functions.ts | 2 +- .../src/plugins/postcss-focus-visible.ts | 2 +- .../src/plugins/postcss-focus-within.ts | 2 +- .../plugins/postcss-font-format-keywords.ts | 2 +- .../src/plugins/postcss-gap-properties.ts | 2 +- .../postcss-gradients-interpolation-method.ts | 2 +- .../src/plugins/postcss-hwb-function.ts | 2 +- .../src/plugins/postcss-ic-unit.ts | 2 +- .../src/plugins/postcss-image-set-function.ts | 2 +- .../src/plugins/postcss-is-pseudo-class.ts | 2 +- .../src/plugins/postcss-lab-function.ts | 2 +- .../plugins/postcss-light-dark-function.ts | 2 +- .../postcss-logical-float-and-clear.ts | 2 +- .../src/plugins/postcss-logical-resize.ts | 2 +- .../plugins/postcss-logical-viewport-units.ts | 2 +- .../src/plugins/postcss-logical.ts | 2 +- .../src/plugins/postcss-media-minmax.ts | 2 +- ...edia-queries-aspect-ratio-number-values.ts | 2 +- .../src/plugins/postcss-nested-calc.ts | 2 +- .../src/plugins/postcss-nesting.ts | 2 +- .../postcss-normalize-display-values.ts | 2 +- .../src/plugins/postcss-oklab-function.ts | 2 +- .../src/plugins/postcss-overflow-shorthand.ts | 2 +- cli/csstools-cli/src/plugins/postcss-place.ts | 2 +- .../src/plugins/postcss-preset-env.ts | 2 +- .../plugins/postcss-pseudo-class-any-link.ts | 2 +- .../plugins/postcss-relative-color-syntax.ts | 2 +- .../src/plugins/postcss-scope-pseudo-class.ts | 2 +- .../src/plugins/postcss-selector-not.ts | 2 +- .../postcss-stepped-value-functions.ts | 2 +- .../postcss-text-decoration-shorthand.ts | 2 +- .../postcss-trigonometric-functions.ts | 2 +- .../src/plugins/postcss-unset-value.ts | 2 +- experimental/css-has-pseudo/src/index.ts | 2 +- .../src/index.ts | 2 +- experimental/postcss-nesting/src/index.ts | 2 +- .../src/lib/ampersand-to-scope.ts | 2 +- .../src/lib/atrule-within-atrule.ts | 4 +- .../src/lib/atrule-within-rule.ts | 4 +- .../postcss-nesting/src/lib/cleanup-parent.ts | 2 +- .../src/lib/group-declarations.ts | 2 +- experimental/postcss-nesting/src/lib/list.ts | 2 +- .../postcss-nesting/src/lib/merge-params.ts | 2 +- .../lib/merge-selectors/merge-selectors.ts | 2 +- .../src/lib/rule-within-rule.ts | 2 +- .../src/lib/shift-nodes-before-parent.ts | 2 +- experimental/postcss-nesting/src/lib/walk.ts | 2 +- package-lock.json | 292 ++++++++---------- packages/base-cli/src/get-stdin.ts | 2 +- packages/base-cli/src/help.ts | 4 +- packages/base-cli/src/index.ts | 2 +- .../cascade-layer-name-parser/dist/index.cjs | 2 +- .../cascade-layer-name-parser/dist/index.d.ts | 15 +- .../cascade-layer-name-parser/dist/index.mjs | 2 +- ...scade-layer-name-parser.addlayertomodel.md | 4 +- .../docs/cascade-layer-name-parser.api.json | 62 +--- .../cascade-layer-name-parser.layername.md | 1 - ...cade-layer-name-parser.layername.tojson.md | 19 -- .../docs/cascade-layer-name-parser.parse.md | 4 +- .../src/nodes/layer-name.ts | 7 +- .../src/parser/parse.ts | 4 +- .../src/util/model.ts | 4 +- .../src/conversions/hsl-to-srgb.ts | 2 +- packages/css-calc/dist/index.cjs | 2 +- packages/css-calc/dist/index.d.ts | 2 +- packages/css-calc/dist/index.mjs | 2 +- packages/css-calc/docs/css-calc.api.json | 22 +- .../docs/css-calc.calcfromcomponentvalues.md | 4 +- packages/css-calc/src/functions/calc.ts | 11 +- packages/css-calc/src/functions/cos.ts | 3 +- packages/css-calc/src/index.ts | 5 +- packages/css-calc/src/unit-conversions/cm.ts | 14 +- packages/css-calc/src/unit-conversions/deg.ts | 8 +- .../css-calc/src/unit-conversions/grad.ts | 8 +- packages/css-calc/src/unit-conversions/hz.ts | 4 +- packages/css-calc/src/unit-conversions/in.ts | 14 +- packages/css-calc/src/unit-conversions/khz.ts | 4 +- packages/css-calc/src/unit-conversions/mm.ts | 14 +- packages/css-calc/src/unit-conversions/ms.ts | 4 +- packages/css-calc/src/unit-conversions/pc.ts | 14 +- packages/css-calc/src/unit-conversions/pt.ts | 14 +- packages/css-calc/src/unit-conversions/px.ts | 14 +- packages/css-calc/src/unit-conversions/q.ts | 14 +- packages/css-calc/src/unit-conversions/rad.ts | 8 +- packages/css-calc/src/unit-conversions/s.ts | 4 +- .../css-calc/src/unit-conversions/turn.ts | 8 +- packages/css-color-parser/dist/index.cjs | 2 +- packages/css-color-parser/dist/index.mjs | 2 +- .../functions/rgb-normalize-channel-values.ts | 3 +- .../functions/three-channel-legacy-syntax.ts | 5 +- .../three-channel-space-separated.ts | 18 +- .../css-parser-algorithms/dist/index.d.ts | 21 +- .../docs/css-parser-algorithms.api.json | 63 +++- ...arsecommaseparatedlistofcomponentvalues.md | 4 +- ...s-parser-algorithms.parsecomponentvalue.md | 4 +- ...r-algorithms.parselistofcomponentvalues.md | 4 +- ...arser-algorithms.replacecomponentvalues.md | 4 +- .../src/consume/component-block-function.ts | 10 +- ...omma-separated-list-of-component-values.ts | 4 +- .../src/parse/component-value.ts | 6 +- .../src/parse/list-of-component-values.ts | 4 +- .../src/util/node-ancestry.ts | 2 +- .../src/util/replace-component-values.ts | 2 +- .../src/util/walker-index-generator.ts | 2 +- packages/css-tokenizer/src/consume/bad-url.ts | 2 +- packages/css-tokenizer/src/tokenizer.ts | 6 +- .../media-query-list-parser/dist/index.cjs | 2 +- .../media-query-list-parser/dist/index.d.ts | 191 ++---------- .../media-query-list-parser/dist/index.mjs | 2 +- .../docs/media-query-list-parser.api.json | 30 +- .../media-query-list-parser.matchesratio.md | 4 +- ...a-query-list-parser.matchesratioexactly.md | 4 +- .../docs/media-query-list-parser.parse.md | 4 +- ...media-query-list-parser.parsefromtokens.md | 4 +- .../src/nodes/custom-media.ts | 7 +- .../src/nodes/general-enclosed.ts | 2 +- .../src/nodes/media-feature-boolean.ts | 4 +- .../src/nodes/media-feature-name.ts | 2 +- .../src/nodes/media-feature-plain.ts | 4 +- .../src/nodes/media-feature-range.ts | 10 +- .../src/nodes/media-feature-value.ts | 6 +- .../src/nodes/media-feature.ts | 4 +- .../src/nodes/media-in-parens.ts | 2 +- .../src/nodes/media-not.ts | 2 +- .../src/nodes/media-or.ts | 2 +- .../src/nodes/media-query-modifier.ts | 3 +- .../src/nodes/media-query.ts | 11 +- .../src/nodes/media-type.ts | 3 +- .../src/parser/parse-custom-media.ts | 3 +- .../src/parser/parse-media-query.ts | 19 +- .../src/parser/parse.ts | 8 +- .../src/util/component-value-is.ts | 15 +- .../src/util/to-lower-case-a-z.ts | 4 - packages/postcss-tape/dist/index.cjs | 2 +- packages/postcss-tape/dist/index.d.ts | 10 +- packages/postcss-tape/dist/index.mjs | 2 +- .../postcss-tape/docs/postcss-tape.api.json | 16 +- .../docs/postcss-tape.atruleclonerplugin.md | 4 +- .../docs/postcss-tape.ruleclonerplugin.md | 4 +- packages/postcss-tape/src/index.ts | 14 +- packages/postcss-tape/src/noop-plugin.ts | 6 +- .../src/compound-selector-order.ts | 2 +- .../src/resolve-nested-selector.ts | 2 +- .../selector-resolve-nested/src/source.ts | 4 +- packages/selector-specificity/dist/index.cjs | 2 +- packages/selector-specificity/dist/index.mjs | 2 +- packages/selector-specificity/src/index.ts | 9 +- .../src/to-lower-case-a-z.ts | 4 - .../src/postcss-import/index.ts | 2 +- .../postcss-import/lib/apply-conditions.ts | 2 +- .../src/postcss-import/lib/apply-styles.ts | 2 +- .../src/postcss-import/lib/load-content.ts | 2 +- .../src/postcss-import/lib/noop-plugin.ts | 6 +- .../src/postcss-import/lib/parse-at-import.ts | 2 +- .../src/postcss-import/lib/parse-styles.ts | 2 +- .../src/postcss-import/lib/post-process.ts | 2 +- .../postcss-preset-env/dist/index.cjs | 2 +- .../postcss-preset-env/dist/index.mjs | 2 +- plugin-packs/postcss-preset-env/src/index.ts | 4 +- plugins/css-blank-pseudo/dist/index.cjs | 2 +- plugins/css-blank-pseudo/dist/index.mjs | 2 +- plugins/css-blank-pseudo/src/index.ts | 9 +- plugins/css-has-pseudo/dist/index.cjs | 2 +- plugins/css-has-pseudo/dist/index.mjs | 2 +- plugins/css-has-pseudo/src/index.ts | 9 +- .../css-prefers-color-scheme/dist/index.cjs | 2 +- .../css-prefers-color-scheme/dist/index.mjs | 2 +- plugins/css-prefers-color-scheme/src/index.ts | 7 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 15 +- plugins/postcss-base-plugin/src/index.ts | 2 +- .../src/adjust-selector-specificity.ts | 2 +- .../src/clean-blocks.ts | 4 +- .../src/desugar-and-parse-layer-names.ts | 2 +- .../src/desugar-nested-layers.ts | 2 +- plugins/postcss-cascade-layers/src/index.ts | 2 +- plugins/postcss-cascade-layers/src/model.ts | 2 +- .../src/record-layer-order.ts | 2 +- .../src/sort-root-nodes.ts | 2 +- .../src/split-important-styles.ts | 2 +- plugins/postcss-color-function/dist/index.cjs | 2 +- plugins/postcss-color-function/dist/index.mjs | 2 +- plugins/postcss-color-function/src/index.ts | 2 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 2 +- .../postcss-color-hex-alpha/dist/index.cjs | 2 +- .../postcss-color-hex-alpha/dist/index.mjs | 2 +- plugins/postcss-color-hex-alpha/src/index.ts | 29 +- .../postcss-color-mix-function/dist/index.cjs | 2 +- .../postcss-color-mix-function/dist/index.mjs | 2 +- .../postcss-color-mix-function/src/index.ts | 2 +- .../postcss-color-rebeccapurple/src/index.ts | 2 +- .../postcss-conditional-values/dist/index.cjs | 2 +- .../postcss-conditional-values/dist/index.mjs | 2 +- .../postcss-conditional-values/src/index.ts | 7 +- plugins/postcss-custom-media/dist/index.cjs | 2 +- plugins/postcss-custom-media/dist/index.mjs | 2 +- .../src/cascade-layers.ts | 4 +- .../src/custom-media-from-root.ts | 4 +- plugins/postcss-custom-media/src/index.ts | 9 +- plugins/postcss-custom-media/src/toposort.ts | 65 ++-- .../src/transform-at-media/custom-media.ts | 6 +- .../postcss-custom-properties/dist/index.cjs | 2 +- .../postcss-custom-properties/dist/index.mjs | 2 +- .../src/cascade-layers.ts | 4 +- .../postcss-custom-properties/src/index.ts | 9 +- .../src/is-ignored.ts | 6 +- .../postcss-custom-properties/src/toposort.ts | 65 ++-- .../src/transform-properties.ts | 6 +- .../postcss-custom-selectors/dist/index.cjs | 2 +- .../postcss-custom-selectors/dist/index.mjs | 2 +- .../src/cascade-layers.ts | 4 +- .../src/custom-selectors-from-root.ts | 2 +- plugins/postcss-custom-selectors/src/index.ts | 9 +- plugins/postcss-design-tokens/dist/index.cjs | 2 +- plugins/postcss-design-tokens/dist/index.mjs | 2 +- .../style-dictionary/v3/dereference.ts | 4 +- .../data-formats/style-dictionary/v3/value.ts | 2 +- .../src/data-formats/toposort/toposort.ts | 11 +- plugins/postcss-design-tokens/src/index.ts | 13 +- plugins/postcss-design-tokens/src/options.ts | 2 +- .../src/parse-component-values.ts | 6 +- .../postcss-design-tokens/src/transform.ts | 4 +- .../postcss-dir-pseudo-class/dist/index.cjs | 2 +- .../postcss-dir-pseudo-class/dist/index.mjs | 2 +- plugins/postcss-dir-pseudo-class/src/index.ts | 7 +- .../src/index.ts | 6 +- .../src/index.ts | 2 +- plugins/postcss-extract/dist/index.cjs | 2 +- plugins/postcss-extract/dist/index.mjs | 2 +- plugins/postcss-extract/src/index.ts | 12 +- .../postcss-extract/src/simplify-ast-nodes.ts | 2 +- plugins/postcss-focus-visible/dist/index.cjs | 2 +- plugins/postcss-focus-visible/dist/index.mjs | 2 +- plugins/postcss-focus-visible/src/index.ts | 7 +- plugins/postcss-focus-within/dist/index.cjs | 2 +- plugins/postcss-focus-within/dist/index.mjs | 2 +- plugins/postcss-focus-within/src/index.ts | 9 +- .../postcss-font-format-keywords/src/index.ts | 2 +- plugins/postcss-gamut-mapping/dist/index.cjs | 2 +- plugins/postcss-gamut-mapping/dist/index.mjs | 2 +- plugins/postcss-gamut-mapping/src/index.ts | 7 +- plugins/postcss-gap-properties/src/index.ts | 2 +- plugins/postcss-global-data/dist/index.cjs | 2 +- plugins/postcss-global-data/dist/index.mjs | 2 +- plugins/postcss-global-data/src/index.ts | 9 +- .../postcss-global-data/src/parse-import.ts | 2 +- .../src/index.ts | 2 +- plugins/postcss-hwb-function/dist/index.cjs | 2 +- plugins/postcss-hwb-function/dist/index.mjs | 2 +- plugins/postcss-hwb-function/src/index.ts | 2 +- plugins/postcss-ic-unit/src/index.ts | 2 +- .../postcss-image-set-function/src/index.ts | 2 +- .../src/lib/get-image.ts | 2 +- .../src/lib/get-media.ts | 6 +- .../src/lib/handle-invalidation.ts | 2 +- .../src/lib/{get-comma.ts => is-comma.ts} | 2 +- .../src/lib/process-image-set.ts | 6 +- plugins/postcss-initial/src/index.ts | 2 +- .../postcss-is-pseudo-class/dist/index.cjs | 2 +- .../postcss-is-pseudo-class/dist/index.mjs | 2 +- plugins/postcss-is-pseudo-class/src/index.ts | 23 +- .../src/split-selectors/complex.ts | 2 +- .../compound-selector-order.ts | 4 +- .../src/split-selectors/split-selectors.ts | 6 +- plugins/postcss-lab-function/dist/index.cjs | 2 +- plugins/postcss-lab-function/dist/index.mjs | 2 +- plugins/postcss-lab-function/src/index.ts | 2 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../postcss-light-dark-function/src/index.ts | 9 +- .../src/parse-light-dark.ts | 2 +- .../src/index.ts | 4 +- .../src/lib/transform-axes.ts | 2 +- .../src/lib/transform-axes.ts | 2 +- .../src/index.ts | 2 +- plugins/postcss-logical/src/index.ts | 2 +- plugins/postcss-media-minmax/dist/index.cjs | 2 +- plugins/postcss-media-minmax/dist/index.mjs | 2 +- plugins/postcss-media-minmax/src/index.ts | 4 +- .../src/to-lower-case-a-z.ts | 4 - .../src/transform-single-pair.ts | 5 +- plugins/postcss-media-minmax/src/transform.ts | 5 +- .../src/index.ts | 2 +- .../src/transform-media-feature-value.ts | 6 +- .../src/transform-media-query-list.ts | 2 +- plugins/postcss-minify/src/index.ts | 4 +- plugins/postcss-nested-calc/src/index.ts | 2 +- .../src/editions/2021/index.ts | 2 +- .../editions/2021/lib/ampersand-to-scope.ts | 2 +- .../editions/2021/lib/atrule-within-atrule.ts | 4 +- .../editions/2021/lib/atrule-within-rule.ts | 4 +- .../editions/2021/lib/group-declarations.ts | 2 +- .../src/editions/2021/lib/list.ts | 2 +- .../src/editions/2021/lib/merge-params.ts | 2 +- .../compound-selector-order.ts | 4 +- .../lib/merge-selectors/merge-selectors.ts | 10 +- .../2021/lib/merge-selectors/specificity.ts | 2 +- .../2021/lib/nest-rule-within-rule.ts | 4 +- .../src/editions/2021/lib/rule-within-rule.ts | 4 +- .../src/editions/2021/lib/walk.ts | 2 +- .../src/editions/2024-02/index.ts | 4 +- .../2024-02/lib/ampersand-to-scope.ts | 2 +- .../2024-02/lib/atrule-within-rule.ts | 4 +- .../editions/2024-02/lib/rule-within-rule.ts | 4 +- .../src/editions/2024-02/lib/walk.ts | 2 +- .../src/editions/shared/lib/cleanup-parent.ts | 2 +- .../shared/lib/shift-nodes-before-parent.ts | 2 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 9 +- plugins/postcss-oklab-function/dist/index.cjs | 2 +- plugins/postcss-oklab-function/dist/index.mjs | 2 +- plugins/postcss-oklab-function/src/index.ts | 2 +- .../postcss-overflow-shorthand/dist/index.cjs | 2 +- .../postcss-overflow-shorthand/dist/index.mjs | 2 +- .../postcss-overflow-shorthand/src/index.ts | 2 +- plugins/postcss-place/dist/index.cjs | 2 +- plugins/postcss-place/dist/index.mjs | 2 +- plugins/postcss-place/src/index.ts | 2 +- .../postcss-place/src/on-css-declaration.ts | 2 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 7 +- .../src/match.ts | 4 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 7 +- .../src/replace-any-link.ts | 12 +- plugins/postcss-rebase-url/dist/index.cjs | 2 +- plugins/postcss-rebase-url/dist/index.mjs | 2 +- plugins/postcss-rebase-url/src/index.ts | 9 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 2 +- .../postcss-scope-pseudo-class/dist/index.cjs | 2 +- .../postcss-scope-pseudo-class/dist/index.mjs | 2 +- .../postcss-scope-pseudo-class/src/index.ts | 7 +- plugins/postcss-selector-not/dist/index.cjs | 2 +- plugins/postcss-selector-not/dist/index.mjs | 2 +- plugins/postcss-selector-not/src/index.ts | 4 +- plugins/postcss-slow-plugins/dist/index.cjs | 2 +- plugins/postcss-slow-plugins/dist/index.mjs | 2 +- plugins/postcss-slow-plugins/src/index.ts | 6 +- .../src/index.ts | 2 +- .../dist/index.cjs | 2 +- .../dist/index.mjs | 2 +- .../src/index.ts | 15 +- plugins/postcss-todo-or-die/src/index.ts | 4 +- .../src/index.ts | 2 +- plugins/postcss-unset-value/src/index.ts | 2 +- 370 files changed, 1024 insertions(+), 1201 deletions(-) delete mode 100644 packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.tojson.md delete mode 100644 packages/media-query-list-parser/src/util/to-lower-case-a-z.ts delete mode 100644 packages/selector-specificity/src/to-lower-case-a-z.ts rename plugins/postcss-image-set-function/src/lib/{get-comma.ts => is-comma.ts} (73%) delete mode 100644 plugins/postcss-media-minmax/src/to-lower-case-a-z.ts diff --git a/.eslintrc.json b/.eslintrc.json index f05490708..2b884489d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -37,7 +37,8 @@ "rules": { "no-shadow": "off", "@typescript-eslint/no-shadow": "error", - "@typescript-eslint/array-type": ["error", { "default": "generic" }] + "@typescript-eslint/array-type": ["error", { "default": "generic" }], + "@typescript-eslint/explicit-function-return-type": "error" } } ] diff --git a/cli/csstools-cli/src/cli.ts b/cli/csstools-cli/src/cli.ts index d2e202e51..b780ffaf8 100644 --- a/cli/csstools-cli/src/cli.ts +++ b/cli/csstools-cli/src/cli.ts @@ -48,7 +48,7 @@ import postcssTrigonometricFunctions from './plugins/postcss-trigonometric-funct import postcssUnsetValue from './plugins/postcss-unset-value'; main(); -function main() { +function main(): void { switch (process.argv[2] ?? false) { case 'css-blank-pseudo': cssBlankPseudo(); diff --git a/cli/csstools-cli/src/plugins/css-blank-pseudo.ts b/cli/csstools-cli/src/plugins/css-blank-pseudo.ts index 44b65600e..09d0ce7d8 100644 --- a/cli/csstools-cli/src/plugins/css-blank-pseudo.ts +++ b/cli/csstools-cli/src/plugins/css-blank-pseudo.ts @@ -1,7 +1,7 @@ import plugin from 'css-blank-pseudo'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function cssBlankPseudo() { +export default function cssBlankPseudo(): void { cli( plugin, ['preserve', 'replaceWith'], diff --git a/cli/csstools-cli/src/plugins/css-has-pseudo.ts b/cli/csstools-cli/src/plugins/css-has-pseudo.ts index 4530b1cf9..f38e17943 100644 --- a/cli/csstools-cli/src/plugins/css-has-pseudo.ts +++ b/cli/csstools-cli/src/plugins/css-has-pseudo.ts @@ -1,7 +1,7 @@ import plugin from 'css-has-pseudo'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function cssHasPseudo() { +export default function cssHasPseudo(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/css-prefers-color-scheme.ts b/cli/csstools-cli/src/plugins/css-prefers-color-scheme.ts index cc020960f..7a8e98d4e 100644 --- a/cli/csstools-cli/src/plugins/css-prefers-color-scheme.ts +++ b/cli/csstools-cli/src/plugins/css-prefers-color-scheme.ts @@ -1,7 +1,7 @@ import plugin from 'css-prefers-color-scheme'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function cssPrefersColorScheme() { +export default function cssPrefersColorScheme(): void { cli( plugin, ['preserve', 'mediaQuery'], diff --git a/cli/csstools-cli/src/plugins/postcss-attribute-case-insensitive.ts b/cli/csstools-cli/src/plugins/postcss-attribute-case-insensitive.ts index 8510b42a0..0d09c3a9f 100644 --- a/cli/csstools-cli/src/plugins/postcss-attribute-case-insensitive.ts +++ b/cli/csstools-cli/src/plugins/postcss-attribute-case-insensitive.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-attribute-case-insensitive'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssAttributeCaseInsensitive() { +export default function postcssAttributeCaseInsensitive(): void { cli( plugin, [], diff --git a/cli/csstools-cli/src/plugins/postcss-cascade-layers.ts b/cli/csstools-cli/src/plugins/postcss-cascade-layers.ts index 53911ccf2..0b312a80d 100644 --- a/cli/csstools-cli/src/plugins/postcss-cascade-layers.ts +++ b/cli/csstools-cli/src/plugins/postcss-cascade-layers.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-cascade-layers'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssCascadeLayers() { +export default function postcssCascadeLayers(): void { cli( plugin, [], diff --git a/cli/csstools-cli/src/plugins/postcss-color-function.ts b/cli/csstools-cli/src/plugins/postcss-color-function.ts index 89252e056..bcc8ba21d 100644 --- a/cli/csstools-cli/src/plugins/postcss-color-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-color-function.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-color-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssColorFunction() { +export default function postcssColorFunction(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties'], diff --git a/cli/csstools-cli/src/plugins/postcss-color-functional-notation.ts b/cli/csstools-cli/src/plugins/postcss-color-functional-notation.ts index 89439c4b5..9cfd53a72 100644 --- a/cli/csstools-cli/src/plugins/postcss-color-functional-notation.ts +++ b/cli/csstools-cli/src/plugins/postcss-color-functional-notation.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-color-functional-notation'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssColorFunctionalNotation() { +export default function postcssColorFunctionalNotation(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-color-hex-alpha.ts b/cli/csstools-cli/src/plugins/postcss-color-hex-alpha.ts index d79ead421..686ccce50 100644 --- a/cli/csstools-cli/src/plugins/postcss-color-hex-alpha.ts +++ b/cli/csstools-cli/src/plugins/postcss-color-hex-alpha.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-color-hex-alpha'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssColorHexAlpha() { +export default function postcssColorHexAlpha(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-color-mix-function.ts b/cli/csstools-cli/src/plugins/postcss-color-mix-function.ts index f1c67510c..11497da65 100644 --- a/cli/csstools-cli/src/plugins/postcss-color-mix-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-color-mix-function.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-color-mix-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssColorMixFunction() { +export default function postcssColorMixFunction(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties'], diff --git a/cli/csstools-cli/src/plugins/postcss-color-rebeccapurple.ts b/cli/csstools-cli/src/plugins/postcss-color-rebeccapurple.ts index 0da4185a2..0fd0d3a8a 100644 --- a/cli/csstools-cli/src/plugins/postcss-color-rebeccapurple.ts +++ b/cli/csstools-cli/src/plugins/postcss-color-rebeccapurple.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-color-rebeccapurple'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssColorRebeccaPurple() { +export default function postcssColorRebeccaPurple(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-custom-media.ts b/cli/csstools-cli/src/plugins/postcss-custom-media.ts index f887b1ad9..865fd59f4 100644 --- a/cli/csstools-cli/src/plugins/postcss-custom-media.ts +++ b/cli/csstools-cli/src/plugins/postcss-custom-media.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-custom-media'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssCustomMedia() { +export default function postcssCustomMedia(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-custom-properties.ts b/cli/csstools-cli/src/plugins/postcss-custom-properties.ts index 229f6bb58..b9debfbfb 100644 --- a/cli/csstools-cli/src/plugins/postcss-custom-properties.ts +++ b/cli/csstools-cli/src/plugins/postcss-custom-properties.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-custom-properties'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssCustomProperties() { +export default function postcssCustomProperties(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-custom-selectors.ts b/cli/csstools-cli/src/plugins/postcss-custom-selectors.ts index 9352b3d72..388cae389 100644 --- a/cli/csstools-cli/src/plugins/postcss-custom-selectors.ts +++ b/cli/csstools-cli/src/plugins/postcss-custom-selectors.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-custom-selectors'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssCustomSelectors() { +export default function postcssCustomSelectors(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-dir-pseudo-class.ts b/cli/csstools-cli/src/plugins/postcss-dir-pseudo-class.ts index 322b3a2a2..0d96eace9 100644 --- a/cli/csstools-cli/src/plugins/postcss-dir-pseudo-class.ts +++ b/cli/csstools-cli/src/plugins/postcss-dir-pseudo-class.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-dir-pseudo-class'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssDirPseudoClass() { +export default function postcssDirPseudoClass(): void { cli( plugin, ['dir', 'preserve', 'shadow'], diff --git a/cli/csstools-cli/src/plugins/postcss-double-position-gradients.ts b/cli/csstools-cli/src/plugins/postcss-double-position-gradients.ts index baca0cf51..90d524fb6 100644 --- a/cli/csstools-cli/src/plugins/postcss-double-position-gradients.ts +++ b/cli/csstools-cli/src/plugins/postcss-double-position-gradients.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-double-position-gradients'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssDoublePositionGradients() { +export default function postcssDoublePositionGradients(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties'], diff --git a/cli/csstools-cli/src/plugins/postcss-exponential-functions.ts b/cli/csstools-cli/src/plugins/postcss-exponential-functions.ts index 9a79e6659..a4b3a7108 100644 --- a/cli/csstools-cli/src/plugins/postcss-exponential-functions.ts +++ b/cli/csstools-cli/src/plugins/postcss-exponential-functions.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-exponential-functions'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssExponentialFunctions() { +export default function postcssExponentialFunctions(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-focus-visible.ts b/cli/csstools-cli/src/plugins/postcss-focus-visible.ts index fa1df8cb6..672a64fdc 100644 --- a/cli/csstools-cli/src/plugins/postcss-focus-visible.ts +++ b/cli/csstools-cli/src/plugins/postcss-focus-visible.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-focus-visible'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssFocusVisible() { +export default function postcssFocusVisible(): void { cli( plugin, ['preserve', 'replaceWith'], diff --git a/cli/csstools-cli/src/plugins/postcss-focus-within.ts b/cli/csstools-cli/src/plugins/postcss-focus-within.ts index c88b9bb55..2ff9753de 100644 --- a/cli/csstools-cli/src/plugins/postcss-focus-within.ts +++ b/cli/csstools-cli/src/plugins/postcss-focus-within.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-focus-within'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssFocusWithin() { +export default function postcssFocusWithin(): void { cli( plugin, ['preserve', 'replaceWith'], diff --git a/cli/csstools-cli/src/plugins/postcss-font-format-keywords.ts b/cli/csstools-cli/src/plugins/postcss-font-format-keywords.ts index 5dd8e9acb..093529d4b 100644 --- a/cli/csstools-cli/src/plugins/postcss-font-format-keywords.ts +++ b/cli/csstools-cli/src/plugins/postcss-font-format-keywords.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-font-format-keywords'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssFontFormatKeywords() { +export default function postcssFontFormatKeywords(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-gap-properties.ts b/cli/csstools-cli/src/plugins/postcss-gap-properties.ts index 238dc6b4f..9a47721e0 100644 --- a/cli/csstools-cli/src/plugins/postcss-gap-properties.ts +++ b/cli/csstools-cli/src/plugins/postcss-gap-properties.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-gap-properties'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssGapProperties() { +export default function postcssGapProperties(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-gradients-interpolation-method.ts b/cli/csstools-cli/src/plugins/postcss-gradients-interpolation-method.ts index 03a0fa7be..4bded80d8 100644 --- a/cli/csstools-cli/src/plugins/postcss-gradients-interpolation-method.ts +++ b/cli/csstools-cli/src/plugins/postcss-gradients-interpolation-method.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-gradients-interpolation-method'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssGradientsInterpolationMethod() { +export default function postcssGradientsInterpolationMethod(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties'], diff --git a/cli/csstools-cli/src/plugins/postcss-hwb-function.ts b/cli/csstools-cli/src/plugins/postcss-hwb-function.ts index 261e84dec..d2bb611d1 100644 --- a/cli/csstools-cli/src/plugins/postcss-hwb-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-hwb-function.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-hwb-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssHWBFunction() { +export default function postcssHWBFunction(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-ic-unit.ts b/cli/csstools-cli/src/plugins/postcss-ic-unit.ts index 854582277..f978d51d0 100644 --- a/cli/csstools-cli/src/plugins/postcss-ic-unit.ts +++ b/cli/csstools-cli/src/plugins/postcss-ic-unit.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-ic-unit'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssICUnit() { +export default function postcssICUnit(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties'], diff --git a/cli/csstools-cli/src/plugins/postcss-image-set-function.ts b/cli/csstools-cli/src/plugins/postcss-image-set-function.ts index 878e6e77a..c250f0f9d 100644 --- a/cli/csstools-cli/src/plugins/postcss-image-set-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-image-set-function.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-image-set-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssImageSetFunction() { +export default function postcssImageSetFunction(): void { cli( plugin, ['oninvalid', 'preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-is-pseudo-class.ts b/cli/csstools-cli/src/plugins/postcss-is-pseudo-class.ts index abdb4712a..885c5ded8 100644 --- a/cli/csstools-cli/src/plugins/postcss-is-pseudo-class.ts +++ b/cli/csstools-cli/src/plugins/postcss-is-pseudo-class.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-is-pseudo-class'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssIsPseudoClass() { +export default function postcssIsPseudoClass(): void { cli( plugin, ['onComplexSelector', 'preserve', 'specificityMatchingName'], diff --git a/cli/csstools-cli/src/plugins/postcss-lab-function.ts b/cli/csstools-cli/src/plugins/postcss-lab-function.ts index b041edc96..01d6a3d83 100644 --- a/cli/csstools-cli/src/plugins/postcss-lab-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-lab-function.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-lab-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLabFunction() { +export default function postcssLabFunction(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties', 'subFeatures'], diff --git a/cli/csstools-cli/src/plugins/postcss-light-dark-function.ts b/cli/csstools-cli/src/plugins/postcss-light-dark-function.ts index b03f87737..b8e9be594 100644 --- a/cli/csstools-cli/src/plugins/postcss-light-dark-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-light-dark-function.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-light-dark-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLightDarkFunction() { +export default function postcssLightDarkFunction(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-logical-float-and-clear.ts b/cli/csstools-cli/src/plugins/postcss-logical-float-and-clear.ts index 9255a67de..851a304b8 100644 --- a/cli/csstools-cli/src/plugins/postcss-logical-float-and-clear.ts +++ b/cli/csstools-cli/src/plugins/postcss-logical-float-and-clear.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-logical-float-and-clear'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLogical() { +export default function postcssLogical(): void { cli( plugin, ['inlineDirection', 'blockDirection'], diff --git a/cli/csstools-cli/src/plugins/postcss-logical-resize.ts b/cli/csstools-cli/src/plugins/postcss-logical-resize.ts index 9b056dc07..7d2fd11ab 100644 --- a/cli/csstools-cli/src/plugins/postcss-logical-resize.ts +++ b/cli/csstools-cli/src/plugins/postcss-logical-resize.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-logical-resize'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLogicalResize() { +export default function postcssLogicalResize(): void { cli( plugin, ['inlineDirection'], diff --git a/cli/csstools-cli/src/plugins/postcss-logical-viewport-units.ts b/cli/csstools-cli/src/plugins/postcss-logical-viewport-units.ts index 6aaf05af6..64036f585 100644 --- a/cli/csstools-cli/src/plugins/postcss-logical-viewport-units.ts +++ b/cli/csstools-cli/src/plugins/postcss-logical-viewport-units.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-logical-viewport-units'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLogicalViewportUnits() { +export default function postcssLogicalViewportUnits(): void { cli( plugin, ['inlineDirection', 'preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-logical.ts b/cli/csstools-cli/src/plugins/postcss-logical.ts index 489941d5a..ad9624c06 100644 --- a/cli/csstools-cli/src/plugins/postcss-logical.ts +++ b/cli/csstools-cli/src/plugins/postcss-logical.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-logical'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssLogical() { +export default function postcssLogical(): void { cli( plugin, ['inlineDirection', 'blockDirection'], diff --git a/cli/csstools-cli/src/plugins/postcss-media-minmax.ts b/cli/csstools-cli/src/plugins/postcss-media-minmax.ts index becc71876..eb9bd13a9 100644 --- a/cli/csstools-cli/src/plugins/postcss-media-minmax.ts +++ b/cli/csstools-cli/src/plugins/postcss-media-minmax.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-media-minmax'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssMediaMinMax() { +export default function postcssMediaMinMax(): void { cli( plugin, [], diff --git a/cli/csstools-cli/src/plugins/postcss-media-queries-aspect-ratio-number-values.ts b/cli/csstools-cli/src/plugins/postcss-media-queries-aspect-ratio-number-values.ts index 4dd678263..a20763e33 100644 --- a/cli/csstools-cli/src/plugins/postcss-media-queries-aspect-ratio-number-values.ts +++ b/cli/csstools-cli/src/plugins/postcss-media-queries-aspect-ratio-number-values.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-media-queries-aspect-ratio-number-values'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssMediaQueriesAspectRatioNumberValues() { +export default function postcssMediaQueriesAspectRatioNumberValues(): void { cli( plugin, [], diff --git a/cli/csstools-cli/src/plugins/postcss-nested-calc.ts b/cli/csstools-cli/src/plugins/postcss-nested-calc.ts index d85211eaa..7c822a76a 100644 --- a/cli/csstools-cli/src/plugins/postcss-nested-calc.ts +++ b/cli/csstools-cli/src/plugins/postcss-nested-calc.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-nested-calc'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssNestedCalc() { +export default function postcssNestedCalc(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-nesting.ts b/cli/csstools-cli/src/plugins/postcss-nesting.ts index 0500703a1..1a45dfa04 100644 --- a/cli/csstools-cli/src/plugins/postcss-nesting.ts +++ b/cli/csstools-cli/src/plugins/postcss-nesting.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-nesting'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssNesting() { +export default function postcssNesting(): void { cli( plugin, ['noIsPseudoSelector'], diff --git a/cli/csstools-cli/src/plugins/postcss-normalize-display-values.ts b/cli/csstools-cli/src/plugins/postcss-normalize-display-values.ts index 0a3ca1fd0..72c1d015e 100644 --- a/cli/csstools-cli/src/plugins/postcss-normalize-display-values.ts +++ b/cli/csstools-cli/src/plugins/postcss-normalize-display-values.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-normalize-display-values'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssNormalizeDisplayValues() { +export default function postcssNormalizeDisplayValues(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-oklab-function.ts b/cli/csstools-cli/src/plugins/postcss-oklab-function.ts index 02156a749..e533b3792 100644 --- a/cli/csstools-cli/src/plugins/postcss-oklab-function.ts +++ b/cli/csstools-cli/src/plugins/postcss-oklab-function.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-oklab-function'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssOKLabFunction() { +export default function postcssOKLabFunction(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties', 'subFeatures'], diff --git a/cli/csstools-cli/src/plugins/postcss-overflow-shorthand.ts b/cli/csstools-cli/src/plugins/postcss-overflow-shorthand.ts index a410382e9..efb2db881 100644 --- a/cli/csstools-cli/src/plugins/postcss-overflow-shorthand.ts +++ b/cli/csstools-cli/src/plugins/postcss-overflow-shorthand.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-overflow-shorthand'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssOverflowShorthand() { +export default function postcssOverflowShorthand(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-place.ts b/cli/csstools-cli/src/plugins/postcss-place.ts index 110686e9e..2b1f0c8c5 100644 --- a/cli/csstools-cli/src/plugins/postcss-place.ts +++ b/cli/csstools-cli/src/plugins/postcss-place.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-place'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssPlace() { +export default function postcssPlace(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-preset-env.ts b/cli/csstools-cli/src/plugins/postcss-preset-env.ts index b051bf1f7..420db8f49 100644 --- a/cli/csstools-cli/src/plugins/postcss-preset-env.ts +++ b/cli/csstools-cli/src/plugins/postcss-preset-env.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-preset-env'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssPresetEnv() { +export default function postcssPresetEnv(): void { cli( plugin, [ diff --git a/cli/csstools-cli/src/plugins/postcss-pseudo-class-any-link.ts b/cli/csstools-cli/src/plugins/postcss-pseudo-class-any-link.ts index 36d016723..dfd97785c 100644 --- a/cli/csstools-cli/src/plugins/postcss-pseudo-class-any-link.ts +++ b/cli/csstools-cli/src/plugins/postcss-pseudo-class-any-link.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-pseudo-class-any-link'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssPseudoClassAnyLink() { +export default function postcssPseudoClassAnyLink(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-relative-color-syntax.ts b/cli/csstools-cli/src/plugins/postcss-relative-color-syntax.ts index fd7e783ee..0aeb839d1 100644 --- a/cli/csstools-cli/src/plugins/postcss-relative-color-syntax.ts +++ b/cli/csstools-cli/src/plugins/postcss-relative-color-syntax.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-relative-color-syntax'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssRelativeColorSyntax() { +export default function postcssRelativeColorSyntax(): void { cli( plugin, ['preserve', 'enableProgressiveCustomProperties', 'subFeatures'], diff --git a/cli/csstools-cli/src/plugins/postcss-scope-pseudo-class.ts b/cli/csstools-cli/src/plugins/postcss-scope-pseudo-class.ts index 44316eec9..b5e51d212 100644 --- a/cli/csstools-cli/src/plugins/postcss-scope-pseudo-class.ts +++ b/cli/csstools-cli/src/plugins/postcss-scope-pseudo-class.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-scope-pseudo-class'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssScopePseudoClass() { +export default function postcssScopePseudoClass(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-selector-not.ts b/cli/csstools-cli/src/plugins/postcss-selector-not.ts index 80e41ca71..fd6dd3665 100644 --- a/cli/csstools-cli/src/plugins/postcss-selector-not.ts +++ b/cli/csstools-cli/src/plugins/postcss-selector-not.ts @@ -1,7 +1,7 @@ import plugin from 'postcss-selector-not'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssSelectorNot() { +export default function postcssSelectorNot(): void { cli( plugin, [], diff --git a/cli/csstools-cli/src/plugins/postcss-stepped-value-functions.ts b/cli/csstools-cli/src/plugins/postcss-stepped-value-functions.ts index c07633000..5c12d1985 100644 --- a/cli/csstools-cli/src/plugins/postcss-stepped-value-functions.ts +++ b/cli/csstools-cli/src/plugins/postcss-stepped-value-functions.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-stepped-value-functions'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssSteppedValueFunctions() { +export default function postcssSteppedValueFunctions(): void { cli( plugin, ['preserve', 'onInvalid'], diff --git a/cli/csstools-cli/src/plugins/postcss-text-decoration-shorthand.ts b/cli/csstools-cli/src/plugins/postcss-text-decoration-shorthand.ts index 2009d7e34..6d435c270 100644 --- a/cli/csstools-cli/src/plugins/postcss-text-decoration-shorthand.ts +++ b/cli/csstools-cli/src/plugins/postcss-text-decoration-shorthand.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-text-decoration-shorthand'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssTextDecorationShorthand() { +export default function postcssTextDecorationShorthand(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-trigonometric-functions.ts b/cli/csstools-cli/src/plugins/postcss-trigonometric-functions.ts index 6013080b7..95da599de 100644 --- a/cli/csstools-cli/src/plugins/postcss-trigonometric-functions.ts +++ b/cli/csstools-cli/src/plugins/postcss-trigonometric-functions.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-trigonometric-functions'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssTrigonometricFunctions() { +export default function postcssTrigonometricFunctions(): void { cli( plugin, ['preserve'], diff --git a/cli/csstools-cli/src/plugins/postcss-unset-value.ts b/cli/csstools-cli/src/plugins/postcss-unset-value.ts index 8080626dc..60d0d774f 100644 --- a/cli/csstools-cli/src/plugins/postcss-unset-value.ts +++ b/cli/csstools-cli/src/plugins/postcss-unset-value.ts @@ -1,7 +1,7 @@ import plugin from '@csstools/postcss-unset-value'; import { cli, helpTextLogger } from '@csstools/base-cli'; -export default function postcssUnsetValue() { +export default function postcssUnsetValue(): void { cli( plugin, ['preserve'], diff --git a/experimental/css-has-pseudo/src/index.ts b/experimental/css-has-pseudo/src/index.ts index 627c63d34..7ee667397 100644 --- a/experimental/css-has-pseudo/src/index.ts +++ b/experimental/css-has-pseudo/src/index.ts @@ -3,7 +3,7 @@ import type { PluginCreator } from 'postcss'; const creator: PluginCreator = () => { return { postcssPlugin: 'css-has-pseudo-experimental', - Once(root, { result }) { + Once(root, { result }): void { root.warn(result, '"@csstools/css-has-pseudo-experimental" is no longer supported. Please use "css-has-pseudo" instead.'); }, }; diff --git a/experimental/postcss-gradient-stop-increments/src/index.ts b/experimental/postcss-gradient-stop-increments/src/index.ts index 5f88afd3f..fb8c12c1f 100644 --- a/experimental/postcss-gradient-stop-increments/src/index.ts +++ b/experimental/postcss-gradient-stop-increments/src/index.ts @@ -27,7 +27,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-gradient-stop-increments', - Declaration(decl) { + Declaration(decl): void { if (!GRADIENT_FUNCTION_REGEX.test(decl.value)) { return; } diff --git a/experimental/postcss-nesting/src/index.ts b/experimental/postcss-nesting/src/index.ts index 871d7bbaf..3deeec3c5 100644 --- a/experimental/postcss-nesting/src/index.ts +++ b/experimental/postcss-nesting/src/index.ts @@ -5,7 +5,7 @@ import walk from './lib/walk.js'; const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-nesting', - Rule(rule, { result }) { + Rule(rule, { result }): void { walk(rule, result); if (rule.selector.trim().includes('&')) { diff --git a/experimental/postcss-nesting/src/lib/ampersand-to-scope.ts b/experimental/postcss-nesting/src/lib/ampersand-to-scope.ts index 3fcff6bb5..6376c88dd 100644 --- a/experimental/postcss-nesting/src/lib/ampersand-to-scope.ts +++ b/experimental/postcss-nesting/src/lib/ampersand-to-scope.ts @@ -1,7 +1,7 @@ import type { Container, Node, Result, Rule } from 'postcss'; import parser from 'postcss-selector-parser'; -export default function ampersandToScope(rule: Rule, result: Result) { +export default function ampersandToScope(rule: Rule, result: Result): void { let parent: Container = rule.parent; while (parent) { diff --git a/experimental/postcss-nesting/src/lib/atrule-within-atrule.ts b/experimental/postcss-nesting/src/lib/atrule-within-atrule.ts index c33bc8151..4db8d392f 100644 --- a/experimental/postcss-nesting/src/lib/atrule-within-atrule.ts +++ b/experimental/postcss-nesting/src/lib/atrule-within-atrule.ts @@ -5,7 +5,7 @@ import mergeParams from './merge-params.js'; import shiftNodesBeforeParent from './shift-nodes-before-parent.js'; import validAtrules from './valid-atrules.js'; -export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule) { +export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule): void { // Group all declarations after the first one. groupDeclarations(parent); @@ -19,7 +19,7 @@ export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule cleanupParent(parent); } -export function isAtruleWithinAtrule(node: AtRule, parent: AtRule) { +export function isAtruleWithinAtrule(node: AtRule, parent: AtRule): boolean { return validAtrules.includes(node.name) && node.name === parent.name; } diff --git a/experimental/postcss-nesting/src/lib/atrule-within-rule.ts b/experimental/postcss-nesting/src/lib/atrule-within-rule.ts index 5a9775edf..b2d7b4cd4 100644 --- a/experimental/postcss-nesting/src/lib/atrule-within-rule.ts +++ b/experimental/postcss-nesting/src/lib/atrule-within-rule.ts @@ -5,7 +5,7 @@ import { walkFunc } from './walk-func.js'; import type { AtRule, Result, Rule } from 'postcss'; import groupDeclarations from './group-declarations.js'; -export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc) { +export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc): void { // Group all declarations after the first one. groupDeclarations(parent); @@ -27,6 +27,6 @@ export default function atruleWithinRule(node: AtRule, parent: Rule, result: Res } } -export function isAtruleWithinRule(node: AtRule) { +export function isAtruleWithinRule(node: AtRule): boolean { return validAtrules.includes(node.name); } diff --git a/experimental/postcss-nesting/src/lib/cleanup-parent.ts b/experimental/postcss-nesting/src/lib/cleanup-parent.ts index 815b1dd1c..92597fbc9 100644 --- a/experimental/postcss-nesting/src/lib/cleanup-parent.ts +++ b/experimental/postcss-nesting/src/lib/cleanup-parent.ts @@ -1,6 +1,6 @@ import type { ChildNode, Container } from 'postcss'; -export default function cleanupParent(parent: Container) { +export default function cleanupParent(parent: Container): void { if (!parent.nodes.length) { parent.remove(); return; diff --git a/experimental/postcss-nesting/src/lib/group-declarations.ts b/experimental/postcss-nesting/src/lib/group-declarations.ts index b2a2fe10c..bd1e8cf1f 100644 --- a/experimental/postcss-nesting/src/lib/group-declarations.ts +++ b/experimental/postcss-nesting/src/lib/group-declarations.ts @@ -1,6 +1,6 @@ import type { ChildNode, Container } from 'postcss'; -export default function groupDeclarations(node: Container) { +export default function groupDeclarations(node: Container): void { // https://drafts.csswg.org/css-nesting/#mixing // When a style rule contains both declarations and nested style rules or nested conditional group rules, // all three can be arbitrarily mixed. diff --git a/experimental/postcss-nesting/src/lib/list.ts b/experimental/postcss-nesting/src/lib/list.ts index 76d4861d6..0f8483222 100644 --- a/experimental/postcss-nesting/src/lib/list.ts +++ b/experimental/postcss-nesting/src/lib/list.ts @@ -1,4 +1,4 @@ -export function comma(string: string) { +export function comma(string: string): Array { const array: Array = []; let current = ''; let split = false; diff --git a/experimental/postcss-nesting/src/lib/merge-params.ts b/experimental/postcss-nesting/src/lib/merge-params.ts index 5e97609b8..c252bdff8 100644 --- a/experimental/postcss-nesting/src/lib/merge-params.ts +++ b/experimental/postcss-nesting/src/lib/merge-params.ts @@ -1,6 +1,6 @@ import { comma } from './list.js'; -export default function mergeParams(fromParams: string, toParams: string) { +export default function mergeParams(fromParams: string, toParams: string): string { return comma(fromParams) .map((params1) => comma(toParams) diff --git a/experimental/postcss-nesting/src/lib/merge-selectors/merge-selectors.ts b/experimental/postcss-nesting/src/lib/merge-selectors/merge-selectors.ts index 78a02bdb7..a34309793 100644 --- a/experimental/postcss-nesting/src/lib/merge-selectors/merge-selectors.ts +++ b/experimental/postcss-nesting/src/lib/merge-selectors/merge-selectors.ts @@ -1,7 +1,7 @@ import type { Node, Result } from 'postcss'; import parser from 'postcss-selector-parser'; -export default function mergeSelectors(node: Node, postcssResult: Result, fromSelectors: Array, toSelectors: Array) { +export default function mergeSelectors(node: Node, postcssResult: Result, fromSelectors: Array, toSelectors: Array): Array { const result = []; if (toSelectors.length === 0) { return; diff --git a/experimental/postcss-nesting/src/lib/rule-within-rule.ts b/experimental/postcss-nesting/src/lib/rule-within-rule.ts index bb8a1ce96..c7aeaea77 100644 --- a/experimental/postcss-nesting/src/lib/rule-within-rule.ts +++ b/experimental/postcss-nesting/src/lib/rule-within-rule.ts @@ -4,7 +4,7 @@ import mergeSelectors from './merge-selectors/merge-selectors.js'; import type { Result, Rule } from 'postcss'; import groupDeclarations from './group-declarations.js'; -export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result) { +export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result): void { let selectors = []; try { diff --git a/experimental/postcss-nesting/src/lib/shift-nodes-before-parent.ts b/experimental/postcss-nesting/src/lib/shift-nodes-before-parent.ts index 9a07f3ca3..745fa0a29 100644 --- a/experimental/postcss-nesting/src/lib/shift-nodes-before-parent.ts +++ b/experimental/postcss-nesting/src/lib/shift-nodes-before-parent.ts @@ -1,7 +1,7 @@ import type { ChildNode, Container } from 'postcss'; import cleanupParent from './cleanup-parent'; -export default function shiftNodesBeforeParent(node: ChildNode, parent: Container) { +export default function shiftNodesBeforeParent(node: ChildNode, parent: Container): void { const index = parent.index(node); // conditionally move previous siblings into a clone of the parent diff --git a/experimental/postcss-nesting/src/lib/walk.ts b/experimental/postcss-nesting/src/lib/walk.ts index 6d1001bec..63681e777 100644 --- a/experimental/postcss-nesting/src/lib/walk.ts +++ b/experimental/postcss-nesting/src/lib/walk.ts @@ -4,7 +4,7 @@ import transformAtruleWithinAtrule, { isAtruleWithinAtrule } from './atrule-with import type { Container, Result } from 'postcss'; import { isAtRule, isRule } from './is-type-of-rule.js'; -export default function walk(node: Container, result: Result) { +export default function walk(node: Container, result: Result): void { node.each((child) => { const parent = child.parent; diff --git a/package-lock.json b/package-lock.json index 1ae87da82..468249975 100644 --- a/package-lock.json +++ b/package-lock.json @@ -373,9 +373,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", - "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", + "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -2532,13 +2532,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3616,9 +3616,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz", - "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", "cpu": [ "arm" ], @@ -3629,9 +3629,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz", - "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", "cpu": [ "arm64" ], @@ -3642,9 +3642,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz", - "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", "cpu": [ "arm64" ], @@ -3655,9 +3655,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz", - "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", "cpu": [ "x64" ], @@ -3668,9 +3668,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz", - "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", "cpu": [ "arm" ], @@ -3681,9 +3681,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz", - "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", "cpu": [ "arm64" ], @@ -3694,9 +3694,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz", - "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", "cpu": [ "arm64" ], @@ -3707,9 +3707,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz", - "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", "cpu": [ "riscv64" ], @@ -3720,9 +3720,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz", - "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", "cpu": [ "x64" ], @@ -3733,9 +3733,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz", - "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", "cpu": [ "x64" ], @@ -3746,9 +3746,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz", - "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", "cpu": [ "arm64" ], @@ -3759,9 +3759,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz", - "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", "cpu": [ "ia32" ], @@ -3772,9 +3772,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz", - "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", "cpu": [ "x64" ], @@ -4220,9 +4220,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -4257,16 +4257,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", - "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/type-utils": "7.1.1", - "@typescript-eslint/utils": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -4325,15 +4325,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", - "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4" }, "engines": { @@ -4353,13 +4353,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4370,13 +4370,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", - "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -4397,9 +4397,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4410,13 +4410,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4495,17 +4495,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", "semver": "^7.5.4" }, "engines": { @@ -4553,12 +4553,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -4815,13 +4815,13 @@ "dev": true }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", - "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", + "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.0", + "@babel/helper-define-polyfill-provider": "^0.6.1", "semver": "^6.3.1" }, "peerDependencies": { @@ -5162,9 +5162,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "funding": [ { "type": "opencollective", @@ -5735,9 +5735,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.699", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", - "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==" + "version": "1.4.702", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.702.tgz", + "integrity": "sha512-LYLXyEUsZ3nNSwiOWjI88N1PJUAMU2QphQSgGLVkFnb3FxZxNui2Vzi2PaKPgPWbsWbZstZnh6BMf/VQJamjiQ==" }, "node_modules/emoji-regex": { "version": "10.3.0", @@ -6805,9 +6805,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -7364,9 +7364,9 @@ } }, "node_modules/knip": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/knip/-/knip-5.0.3.tgz", - "integrity": "sha512-U4bCIkf4aZ3zZSrBaNE8xIdqX1QVhIHXpwUoAW7odx7oajMwa76hUDd9KjlFlb6qAPjdUuTGHjDszIgpfg+Ndg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.0.4.tgz", + "integrity": "sha512-NW8tPh2UBOQUi5ArHthjyZTmkCdjUWXNPYX3By63Ntg2dpNkqAU4nSs5wDFz858mLs9PsIPWauiWgHgLAZwDPw==", "dev": true, "funding": [ { @@ -7384,7 +7384,7 @@ "@npmcli/map-workspaces": "3.0.4", "@npmcli/package-json": "5.0.0", "@pnpm/logger": "5.0.0", - "@pnpm/workspace.pkgs-graph": "^2.0.14", + "@pnpm/workspace.pkgs-graph": "^2.0.15", "@snyk/github-codeowners": "1.1.0", "@types/picomatch": "2.3.3", "easy-table": "1.2.0", @@ -7396,12 +7396,11 @@ "picocolors": "1.0.0", "picomatch": "4.0.1", "pretty-ms": "9.0.0", - "semver": "7.6.0", "smol-toml": "1.1.4", "strip-json-comments": "5.0.1", "summary": "2.1.0", "zod": "3.22.4", - "zod-validation-error": "3.0.2" + "zod-validation-error": "3.0.3" }, "bin": { "knip": "bin/knip.js" @@ -7467,18 +7466,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/knip/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/knip/node_modules/picomatch": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", @@ -7491,21 +7478,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/knip/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/knip/node_modules/strip-json-comments": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", @@ -7518,12 +7490,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/knip/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/known-css-properties": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", @@ -9534,9 +9500,9 @@ } }, "node_modules/rollup": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", - "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -9549,19 +9515,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.12.1", - "@rollup/rollup-android-arm64": "4.12.1", - "@rollup/rollup-darwin-arm64": "4.12.1", - "@rollup/rollup-darwin-x64": "4.12.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.12.1", - "@rollup/rollup-linux-arm64-gnu": "4.12.1", - "@rollup/rollup-linux-arm64-musl": "4.12.1", - "@rollup/rollup-linux-riscv64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-musl": "4.12.1", - "@rollup/rollup-win32-arm64-msvc": "4.12.1", - "@rollup/rollup-win32-ia32-msvc": "4.12.1", - "@rollup/rollup-win32-x64-msvc": "4.12.1", + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", "fsevents": "~2.3.2" } }, @@ -11080,9 +11046,9 @@ } }, "node_modules/zod-validation-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.2.tgz", - "integrity": "sha512-21xGaDmnU7lJZ4J63n5GXWqi+rTzGy3gDHbuZ1jP6xrK/DEQGyOqs/xW7eH96tIfCOYm+ecCuT0bfajBRKEVUw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.3.tgz", + "integrity": "sha512-cETTrcMq3Ze58vhdR0zD37uJm/694I6mAxcf/ei5bl89cC++fBNxrC2z8lkFze/8hVMPwrbtrwXHR2LB50fpHw==", "dev": true, "engines": { "node": ">=18.0.0" diff --git a/packages/base-cli/src/get-stdin.ts b/packages/base-cli/src/get-stdin.ts index a4cf5213f..1c0e36436 100644 --- a/packages/base-cli/src/get-stdin.ts +++ b/packages/base-cli/src/get-stdin.ts @@ -1,4 +1,4 @@ -export async function getStdin() { +export async function getStdin(): Promise { return new Promise((resolve: (str: string) => void) => { let data = ''; let timedOut = false; diff --git a/packages/base-cli/src/help.ts b/packages/base-cli/src/help.ts index bf858c098..812b4aa06 100644 --- a/packages/base-cli/src/help.ts +++ b/packages/base-cli/src/help.ts @@ -1,4 +1,4 @@ -export function helpTextLogger(command: string, name: string, description: string, exampleOptions: Record | null = null) { +export function helpTextLogger(command: string, name: string, description: string, exampleOptions: Record | null = null): () => void { let pluginOptions: Array = []; if (exampleOptions) { const longestPluginOptionLength = Math.max(...Object.keys(exampleOptions).map((x) => x.length)); @@ -37,7 +37,7 @@ export function helpTextLogger(command: string, name: string, description: strin allHelp.push(...pluginOptions); } - return () => { + return (): void => { console.warn(allHelp.join('\n')); }; } diff --git a/packages/base-cli/src/index.ts b/packages/base-cli/src/index.ts index 6dca4db32..3e128184e 100644 --- a/packages/base-cli/src/index.ts +++ b/packages/base-cli/src/index.ts @@ -11,7 +11,7 @@ export { helpTextLogger } from './help'; export type { Arguments, SignalValue } from './args'; export type PluginCreatorOptions = Record | null; -export async function cli(plugin: PluginCreator, allowedPluginOpts: Array, helpLogger: () => void, standalone = true) { +export async function cli(plugin: PluginCreator, allowedPluginOpts: Array, helpLogger: () => void, standalone = true): Promise { // Get process and plugin options from the command line const argo = parseArguments(process.argv.slice(standalone ? 2 : 3), allowedPluginOpts, helpLogger); if (argo === SignalValue.InvalidArguments) { diff --git a/packages/cascade-layer-name-parser/dist/index.cjs b/packages/cascade-layer-name-parser/dist/index.cjs index 6d8efe7f3..408cd967a 100644 --- a/packages/cascade-layer-name-parser/dist/index.cjs +++ b/packages/cascade-layer-name-parser/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/css-tokenizer"),n=require("@csstools/css-parser-algorithms");class LayerName{parts;constructor(e){this.parts=e}tokens(){return[...this.parts]}slice(n,r){const t=[];for(let n=0;nn[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim)),r,...n.parts.filter((n=>n[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim))])}segments(){return this.parts.filter((n=>n[0]===e.TokenType.Ident)).map((e=>e[4].value))}name(){return this.parts.filter((n=>n[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim)).map((e=>e[1])).join("")}equal(e){const n=this.segments(),r=e.segments();if(n.length!==r.length)return!1;for(let e=0;e{}),o=["6.4.2. Layer Naming and Nesting","Layer name syntax"," = [ '.' ]*"],i=r[0][2],l=r[r.length-1][3],p=[];for(let r=0;re.tokens()));let c=!1,T=!1,y=null;for(let n=0;n{const r=n.segments();e:for(let t=0;t=o&&(s=n,o=t)}-1===s?e.push(r):e.splice(s+1,0,r)}})),e},exports.parse=function parse(n,r){const t=e.tokenizer({css:n},{onParseError:r?.onParseError}),a=[];for(;!t.endOfFile();)a.push(t.nextToken());return a.push(t.nextToken()),parseFromTokens(a,r)},exports.parseFromTokens=parseFromTokens; +"use strict";var e=require("@csstools/css-tokenizer"),n=require("@csstools/css-parser-algorithms");class LayerName{parts;constructor(e){this.parts=e}tokens(){return[...this.parts]}slice(n,r){const t=[];for(let n=0;nn[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim)),r,...n.parts.filter((n=>n[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim))])}segments(){return this.parts.filter((n=>n[0]===e.TokenType.Ident)).map((e=>e[4].value))}name(){return this.parts.filter((n=>n[0]===e.TokenType.Ident||n[0]===e.TokenType.Delim)).map((e=>e[1])).join("")}equal(e){const n=this.segments(),r=e.segments();if(n.length!==r.length)return!1;for(let e=0;e{}),o=["6.4.2. Layer Naming and Nesting","Layer name syntax"," = [ '.' ]*"],i=r[0][2],l=r[r.length-1][3],p=[];for(let r=0;re.tokens()));let c=!1,T=!1,y=null;for(let n=0;n{const r=n.segments();e:for(let t=0;t=o&&(s=n,o=t)}-1===s?e.push(r):e.splice(s+1,0,r)}}))},exports.parse=function parse(n,r){const t=e.tokenizer({css:n},{onParseError:r?.onParseError}),a=[];for(;!t.endOfFile();)a.push(t.nextToken());return a.push(t.nextToken()),parseFromTokens(a,r)},exports.parseFromTokens=parseFromTokens; diff --git a/packages/cascade-layer-name-parser/dist/index.d.ts b/packages/cascade-layer-name-parser/dist/index.d.ts index 5865e6c87..df9eef3f8 100644 --- a/packages/cascade-layer-name-parser/dist/index.d.ts +++ b/packages/cascade-layer-name-parser/dist/index.d.ts @@ -1,7 +1,7 @@ import { CSSToken } from '@csstools/css-tokenizer'; import { ParseError } from '@csstools/css-tokenizer'; -export declare function addLayerToModel(layers: Array, currentLayerNames: Array): LayerName[]; +export declare function addLayerToModel(layers: Array, currentLayerNames: Array): void; export declare class LayerName { parts: Array; @@ -13,16 +13,17 @@ export declare class LayerName { name(): string; equal(other: LayerName): boolean; toString(): string; - toJSON(): { - parts: CSSToken[]; - segments: string[]; - name: string; - }; + /** + * @internal + * + * A debug helper to convert the current object to a JSON representation. + */ + toJSON(): Record; } export declare function parse(source: string, options?: { onParseError?: (error: ParseError) => void; -}): LayerName[]; +}): Array; /** * Parses an array of {@link https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer/docs/css-tokenizer.csstoken.md | CSSTokens} into a list of cascade layer names. diff --git a/packages/cascade-layer-name-parser/dist/index.mjs b/packages/cascade-layer-name-parser/dist/index.mjs index dffec78fa..3e0d9a080 100644 --- a/packages/cascade-layer-name-parser/dist/index.mjs +++ b/packages/cascade-layer-name-parser/dist/index.mjs @@ -1 +1 @@ -import{TokenType as e,stringify as t,ParseError as n,tokenizer as r}from"@csstools/css-tokenizer";import{parseCommaSeparatedListOfComponentValues as a,isTokenNode as s,isCommentNode as i,isWhitespaceNode as o}from"@csstools/css-parser-algorithms";class LayerName{parts;constructor(e){this.parts=e}tokens(){return[...this.parts]}slice(t,n){const r=[];for(let t=0;tt[0]===e.Ident||t[0]===e.Delim)),n,...t.parts.filter((t=>t[0]===e.Ident||t[0]===e.Delim))])}segments(){return this.parts.filter((t=>t[0]===e.Ident)).map((e=>e[4].value))}name(){return this.parts.filter((t=>t[0]===e.Ident||t[0]===e.Delim)).map((e=>e[1])).join("")}equal(e){const t=this.segments(),n=e.segments();if(t.length!==n.length)return!1;for(let e=0;e{const n=t.segments();e:for(let r=0;r=i&&(s=t,i=r)}-1===s?e.push(n):e.splice(s+1,0,n)}})),e}function parseFromTokens(t,r){const l=a(t,{onParseError:r?.onParseError}),m=r?.onParseError??(()=>{}),c=["6.4.2. Layer Naming and Nesting","Layer name syntax"," = [ '.' ]*"],d=t[0][2],u=t[t.length-1][3],p=[];for(let t=0;te.tokens()));let h=!1,f=!1,y=null;for(let t=0;tt[0]===e.Ident||t[0]===e.Delim)),n,...t.parts.filter((t=>t[0]===e.Ident||t[0]===e.Delim))])}segments(){return this.parts.filter((t=>t[0]===e.Ident)).map((e=>e[4].value))}name(){return this.parts.filter((t=>t[0]===e.Ident||t[0]===e.Delim)).map((e=>e[1])).join("")}equal(e){const t=this.segments(),n=e.segments();if(t.length!==n.length)return!1;for(let e=0;e{const n=t.segments();e:for(let r=0;r=i&&(s=t,i=r)}-1===s?e.push(n):e.splice(s+1,0,n)}}))}function parseFromTokens(t,r){const l=a(t,{onParseError:r?.onParseError}),m=r?.onParseError??(()=>{}),c=["6.4.2. Layer Naming and Nesting","Layer name syntax"," = [ '.' ]*"],d=t[0][2],p=t[t.length-1][3],u=[];for(let t=0;te.tokens()));let h=!1,f=!1,y=null;for(let t=0;t, currentLayerNames: Array): LayerName[]; +export declare function addLayerToModel(layers: Array, currentLayerNames: Array): void; ``` ## Parameters @@ -19,5 +19,5 @@ export declare function addLayerToModel(layers: Array, currentLayerNa **Returns:** -[LayerName](./cascade-layer-name-parser.layername.md)\[\] +void diff --git a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.api.json b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.api.json index 9c3430536..02f2d3ee4 100644 --- a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.api.json +++ b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.api.json @@ -224,14 +224,9 @@ "kind": "Content", "text": "): " }, - { - "kind": "Reference", - "text": "LayerName", - "canonicalReference": "@csstools/cascade-layer-name-parser!LayerName:class" - }, { "kind": "Content", - "text": "[]" + "text": "void" }, { "kind": "Content", @@ -241,7 +236,7 @@ "fileUrlPath": "dist/_types/util/model.d.ts", "returnTypeTokenRange": { "startIndex": 11, - "endIndex": 13 + "endIndex": 12 }, "releaseTag": "Public", "overloadIndex": 1, @@ -602,46 +597,6 @@ "isAbstract": false, "name": "slice" }, - { - "kind": "Method", - "canonicalReference": "@csstools/cascade-layer-name-parser!LayerName#toJSON:member(1)", - "docComment": "", - "excerptTokens": [ - { - "kind": "Content", - "text": "toJSON(): " - }, - { - "kind": "Content", - "text": "{\n parts: " - }, - { - "kind": "Reference", - "text": "CSSToken", - "canonicalReference": "@csstools/css-tokenizer!CSSToken:type" - }, - { - "kind": "Content", - "text": "[];\n segments: string[];\n name: string;\n }" - }, - { - "kind": "Content", - "text": ";" - } - ], - "isStatic": false, - "returnTypeTokenRange": { - "startIndex": 1, - "endIndex": 4 - }, - "releaseTag": "Public", - "isProtected": false, - "overloadIndex": 1, - "parameters": [], - "isOptional": false, - "isAbstract": false, - "name": "toJSON" - }, { "kind": "Method", "canonicalReference": "@csstools/cascade-layer-name-parser!LayerName#tokens:member(1)", @@ -755,6 +710,15 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "LayerName", @@ -762,7 +726,7 @@ }, { "kind": "Content", - "text": "[]" + "text": ">" }, { "kind": "Content", @@ -772,7 +736,7 @@ "fileUrlPath": "dist/_types/parser/parse.d.ts", "returnTypeTokenRange": { "startIndex": 7, - "endIndex": 9 + "endIndex": 11 }, "releaseTag": "Public", "overloadIndex": 1, diff --git a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.md b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.md index 7dcda2603..a8ee5aa89 100644 --- a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.md +++ b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.md @@ -31,7 +31,6 @@ export declare class LayerName | [name()](./cascade-layer-name-parser.layername.name.md) | | | | [segments()](./cascade-layer-name-parser.layername.segments.md) | | | | [slice(start, end)](./cascade-layer-name-parser.layername.slice.md) | | | -| [toJSON()](./cascade-layer-name-parser.layername.tojson.md) | | | | [tokens()](./cascade-layer-name-parser.layername.tokens.md) | | | | [toString()](./cascade-layer-name-parser.layername.tostring.md) | | | diff --git a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.tojson.md b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.tojson.md deleted file mode 100644 index 133d6759f..000000000 --- a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.layername.tojson.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [@csstools/cascade-layer-name-parser](./cascade-layer-name-parser.md) > [LayerName](./cascade-layer-name-parser.layername.md) > [toJSON](./cascade-layer-name-parser.layername.tojson.md) - -## LayerName.toJSON() method - -**Signature:** - -```typescript -toJSON(): { - parts: CSSToken[]; - segments: string[]; - name: string; - }; -``` -**Returns:** - -{ parts: CSSToken\[\]; segments: string\[\]; name: string; } - diff --git a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.parse.md b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.parse.md index 17b986dce..c0569acfd 100644 --- a/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.parse.md +++ b/packages/cascade-layer-name-parser/docs/cascade-layer-name-parser.parse.md @@ -9,7 +9,7 @@ ```typescript export declare function parse(source: string, options?: { onParseError?: (error: ParseError) => void; -}): LayerName[]; +}): Array; ``` ## Parameters @@ -21,5 +21,5 @@ export declare function parse(source: string, options?: { **Returns:** -[LayerName](./cascade-layer-name-parser.layername.md)\[\] +Array<[LayerName](./cascade-layer-name-parser.layername.md)> diff --git a/packages/cascade-layer-name-parser/src/nodes/layer-name.ts b/packages/cascade-layer-name-parser/src/nodes/layer-name.ts index 19be6a891..b09880090 100644 --- a/packages/cascade-layer-name-parser/src/nodes/layer-name.ts +++ b/packages/cascade-layer-name-parser/src/nodes/layer-name.ts @@ -84,7 +84,12 @@ export class LayerName { return stringify(...this.parts); } - toJSON() { + /** + * @internal + * + * A debug helper to convert the current object to a JSON representation. + */ + toJSON(): Record{ return { parts: this.parts, segments: this.segments(), diff --git a/packages/cascade-layer-name-parser/src/parser/parse.ts b/packages/cascade-layer-name-parser/src/parser/parse.ts index e3fdb320e..ab269a669 100644 --- a/packages/cascade-layer-name-parser/src/parser/parse.ts +++ b/packages/cascade-layer-name-parser/src/parser/parse.ts @@ -16,7 +16,7 @@ export function parseFromTokens( onParseError: options?.onParseError, }); - const onParseError = options?.onParseError ?? (() => { + const onParseError = options?.onParseError ?? ((): void => { // noop; }); @@ -179,7 +179,7 @@ export function parse( options?: { onParseError?: (error: ParseError) => void }, -) { +): Array { const t = tokenizer({ css: source }, { onParseError: options?.onParseError, }); diff --git a/packages/cascade-layer-name-parser/src/util/model.ts b/packages/cascade-layer-name-parser/src/util/model.ts index e9bc966f9..58e8167e2 100644 --- a/packages/cascade-layer-name-parser/src/util/model.ts +++ b/packages/cascade-layer-name-parser/src/util/model.ts @@ -14,7 +14,7 @@ import { LayerName } from '../nodes/layer-name'; // insert "c" // [["a", "b", "c"]] -export function addLayerToModel(layers: Array, currentLayerNames: Array) { +export function addLayerToModel(layers: Array, currentLayerNames: Array): void { currentLayerNames.forEach((layerName) => { const allLayerNameParts = layerName.segments(); @@ -61,6 +61,4 @@ export function addLayerToModel(layers: Array, currentLayerNames: Arr } } }); - - return layers; } diff --git a/packages/color-helpers/src/conversions/hsl-to-srgb.ts b/packages/color-helpers/src/conversions/hsl-to-srgb.ts index 8e09a1988..0c0d65484 100644 --- a/packages/color-helpers/src/conversions/hsl-to-srgb.ts +++ b/packages/color-helpers/src/conversions/hsl-to-srgb.ts @@ -24,7 +24,7 @@ export function HSL_to_sRGB(HSL: Color): Color { sat = sat / 100; light = light / 100; - function f(n: number) { + function f(n: number): number { const k = (n + hue / 30) % 12; const a = sat * Math.min(light, 1 - light); return light - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); diff --git a/packages/css-calc/dist/index.cjs b/packages/css-calc/dist/index.cjs index c0e5bbbea..85b672815 100644 --- a/packages/css-calc/dist/index.cjs +++ b/packages/css-calc/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/css-parser-algorithms"),n=require("@csstools/css-tokenizer");const t=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(t,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const o={cm:"px",in:"px",mm:"px",pc:"px",pt:"px",px:"px",q:"px",deg:"deg",grad:"deg",rad:"deg",turn:"deg",ms:"s",s:"s",hz:"hz",khz:"hz"},r=new Map([["cm",e=>e],["mm",e=>10*e],["q",e=>40*e],["in",e=>e/2.54],["pc",e=>e/2.54*6],["pt",e=>e/2.54*72],["px",e=>e/2.54*96]]),u=new Map([["deg",e=>e],["grad",e=>e/.9],["rad",e=>e/180*Math.PI],["turn",e=>e/360]]),i=new Map([["deg",e=>.9*e],["grad",e=>e],["rad",e=>.9*e/180*Math.PI],["turn",e=>.9*e/360]]),a=new Map([["hz",e=>e],["khz",e=>e/1e3]]),l=new Map([["cm",e=>2.54*e],["mm",e=>25.4*e],["q",e=>25.4*e*4],["in",e=>e],["pc",e=>6*e],["pt",e=>72*e],["px",e=>96*e]]),s=new Map([["hz",e=>1e3*e],["khz",e=>e]]),c=new Map([["cm",e=>e/10],["mm",e=>e],["q",e=>4*e],["in",e=>e/25.4],["pc",e=>e/25.4*6],["pt",e=>e/25.4*72],["px",e=>e/25.4*96]]),T=new Map([["ms",e=>e],["s",e=>e/1e3]]),p=new Map([["cm",e=>e/6*2.54],["mm",e=>e/6*25.4],["q",e=>e/6*25.4*4],["in",e=>e/6],["pc",e=>e],["pt",e=>e/6*72],["px",e=>e/6*96]]),m=new Map([["cm",e=>e/72*2.54],["mm",e=>e/72*25.4],["q",e=>e/72*25.4*4],["in",e=>e/72],["pc",e=>e/72*6],["pt",e=>e],["px",e=>e/72*96]]),v=new Map([["cm",e=>e/96*2.54],["mm",e=>e/96*25.4],["q",e=>e/96*25.4*4],["in",e=>e/96],["pc",e=>e/96*6],["pt",e=>e/96*72],["px",e=>e]]),N=new Map([["cm",e=>e/4/10],["mm",e=>e/4],["q",e=>e],["in",e=>e/4/25.4],["pc",e=>e/4/25.4*6],["pt",e=>e/4/25.4*72],["px",e=>e/4/25.4*96]]),f=new Map([["deg",e=>180*e/Math.PI],["grad",e=>180*e/Math.PI/.9],["rad",e=>e],["turn",e=>180*e/Math.PI/360]]),y=new Map([["ms",e=>1e3*e],["s",e=>e]]),k=new Map([["deg",e=>360*e],["grad",e=>360*e/.9],["rad",e=>360*e/180*Math.PI],["turn",e=>e]]),d=new Map([["cm",r],["mm",c],["q",N],["in",l],["pc",p],["pt",m],["px",v],["ms",T],["s",y],["deg",u],["grad",i],["rad",f],["turn",k],["hz",a],["khz",s]]);function convertUnit(e,t){if(e[0]!==n.TokenType.Dimension)return t;if(t[0]!==n.TokenType.Dimension)return t;const o=toLowerCaseAZ(e[4].unit),r=toLowerCaseAZ(t[4].unit);if(o===r)return t;const u=d.get(r);if(!u)return t;const i=u.get(o);if(!i)return t;const a=i(t[4].value);return[n.TokenType.Dimension,a.toString()+e[4].unit,t[2],t[3],{value:a,unit:e[4].unit,type:Number.isInteger(a)?n.NumberType.Integer:n.NumberType.Number}]}function toCanonicalUnit(e){if(e[0]!==n.TokenType.Dimension)return e;const t=toLowerCaseAZ(e[4].unit),r=o[t];if(t===r)return e;const u=d.get(t);if(!u)return e;const i=u.get(r);if(!i)return e;const a=i(e[4].value);return[n.TokenType.Dimension,a.toString()+r,e[2],e[3],{value:a,unit:r,type:Number.isInteger(a)?n.NumberType.Integer:n.NumberType.Number}]}function addition(t){if(2!==t.length)return-1;const o=t[0].value;let r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Percentage){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Dimension&&(r=convertUnit(o,r),toLowerCaseAZ(o[4].unit)===toLowerCaseAZ(r[4].unit))){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function division(t){if(2!==t.length)return-1;const o=t[0].value,r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:Number.isInteger(t)?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:Number.isInteger(t)?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function isCalculation(e){return!!e&&"object"==typeof e&&"inputs"in e&&Array.isArray(e.inputs)&&"operation"in e}function solve(n){if(-1===n)return-1;const t=[];for(let o=0;oe.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.hypot(...i);return resultToCalculation(n,r,a)}function solveMax(n,t){const o=t[0];if(!o||!e.isTokenNode(o))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.max(...i);return resultToCalculation(n,r,a)}function solveMin(n,t){const o=t[0];if(!o||!e.isTokenNode(o))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.min(...i);return resultToCalculation(n,r,a)}function solveMod(e,n,t){const o=n.value;if(!isNumeric(o))return-1;const r=convertUnit(o,t.value);if(!twoOfSameNumeric(o,r))return-1;let u;return u=0===r[4].value?Number.NaN:Number.isFinite(o[4].value)&&(Number.isFinite(r[4].value)||(r[4].value!==Number.POSITIVE_INFINITY||o[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*o[4].value,-0))&&(r[4].value!==Number.NEGATIVE_INFINITY||o[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*o[4].value,0)))?Number.isFinite(r[4].value)?(o[4].value%r[4].value+r[4].value)%r[4].value:o[4].value:Number.NaN,resultToCalculation(e,o,u)}function solvePow(e,t,o){const r=t.value,u=o.value;if(r[0]!==n.TokenType.Number)return-1;if(!twoOfSameNumeric(r,u))return-1;return numberToCalculation(e,Math.pow(r[4].value,u[4].value))}function solveRem(e,n,t){const o=n.value;if(!isNumeric(o))return-1;const r=convertUnit(o,t.value);if(!twoOfSameNumeric(o,r))return-1;let u;return u=0===r[4].value?Number.NaN:Number.isFinite(o[4].value)?Number.isFinite(r[4].value)?o[4].value%r[4].value:o[4].value:Number.NaN,resultToCalculation(e,o,u)}function solveRound(e,n,t,o){const r=t.value;if(!isNumeric(r))return-1;const u=convertUnit(r,o.value);if(!twoOfSameNumeric(r,u))return-1;let i;if(0===u[4].value)i=Number.NaN;else if(Number.isFinite(r[4].value)||Number.isFinite(u[4].value))if(!Number.isFinite(r[4].value)&&Number.isFinite(u[4].value))i=r[4].value;else if(Number.isFinite(r[4].value)&&!Number.isFinite(u[4].value))switch(n){case"down":i=r[4].value<0?-1/0:Object.is(-0,0*r[4].value)?-0:0;break;case"up":i=r[4].value>0?1/0:Object.is(0,0*r[4].value)?0:-0;break;default:i=Object.is(0,0*r[4].value)?0:-0}else if(Number.isFinite(u[4].value))switch(n){case"down":i=Math.floor(r[4].value/u[4].value)*u[4].value;break;case"up":i=Math.ceil(r[4].value/u[4].value)*u[4].value;break;case"to-zero":i=Math.trunc(r[4].value/u[4].value)*u[4].value;break;default:{let e=Math.floor(r[4].value/u[4].value)*u[4].value,n=Math.ceil(r[4].value/u[4].value)*u[4].value;if(e>n){const t=e;e=n,n=t}const t=Math.abs(r[4].value-e),o=Math.abs(r[4].value-n);i=t===o?n:t0?1/0:-1/0:Math.tan(l),numberToCalculation(e,l)}function subtraction(t){if(2!==t.length)return-1;const o=t[0].value;let r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Percentage){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Dimension&&(r=convertUnit(o,r),toLowerCaseAZ(o[4].unit)===toLowerCaseAZ(r[4].unit))){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function solveLog(t,o){if(1===o.length){const r=o[0];if(!r||!e.isTokenNode(r))return-1;const u=r.value;if(u[0]!==n.TokenType.Number)return-1;return numberToCalculation(t,Math.log(u[4].value))}if(2===o.length){const r=o[0];if(!r||!e.isTokenNode(r))return-1;const u=r.value;if(u[0]!==n.TokenType.Number)return-1;const i=o[1];if(!i||!e.isTokenNode(i))return-1;const a=i.value;if(a[0]!==n.TokenType.Number)return-1;return numberToCalculation(t,Math.log(u[4].value)/Math.log(a[4].value))}return-1}const b=/^none$/i;function isNone(t){if(Array.isArray(t)){const n=t.filter((n=>!(e.isWhitespaceNode(n)&&e.isCommentNode(n))));return 1===n.length&&isNone(n[0])}if(!e.isTokenNode(t))return!1;const o=t.value;return o[0]===n.TokenType.Ident&&b.test(o[4].value)}const g=new Map([["abs",function abs(e,n){return singleNodeSolver(e,n,solveAbs)}],["acos",function acos(e,n){return singleNodeSolver(e,n,solveACos)}],["asin",function asin(e,n){return singleNodeSolver(e,n,solveASin)}],["atan",function atan(e,n){return singleNodeSolver(e,n,solveATan)}],["atan2",function atan2(e,n){return twoCommaSeparatedNodesSolver(e,n,solveATan2)}],["calc",calc$1],["clamp",function clamp(t,o){const r=resolveGlobalsAndConstants([...t.value.filter((n=>!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),u=[],i=[],a=[];{let t=u;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o);let u="",i=!1;const a=[],l=[];{let t=a;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o);if(1===r.length&&e.isTokenNode(r[0]))return{inputs:[r[0]],operation:unary};let u=0;for(;u!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],t)),t));return-1===r?-1:o(n,r)}function twoCommaSeparatedNodesSolver(t,o,r){const u=resolveGlobalsAndConstants([...t.value.filter((n=>!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),i=[],a=[];{let t=i;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),i=[];{const t=[];let r=[];for(let o=0;o{if(!e.isFunctionNode(n))return;const r=g.get(toLowerCaseAZ(n.getName()));if(!r)return;const u=patchCalcResult(solve(r(n,o)),t);return-1!==u?u:void 0}))}const w=new Set(g.keys());exports.calc=function calc(t,o){return calcFromComponentValues(e.parseCommaSeparatedListOfComponentValues(n.tokenize({css:t}),{}),o).map((e=>e.map((e=>n.stringify(...e.tokens()))).join(""))).join(",")},exports.calcFromComponentValues=calcFromComponentValues,exports.mathFunctionNames=w; +"use strict";var e=require("@csstools/css-parser-algorithms"),n=require("@csstools/css-tokenizer");const t=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(t,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const o={cm:"px",in:"px",mm:"px",pc:"px",pt:"px",px:"px",q:"px",deg:"deg",grad:"deg",rad:"deg",turn:"deg",ms:"s",s:"s",hz:"hz",khz:"hz"},r=new Map([["cm",e=>e],["mm",e=>10*e],["q",e=>40*e],["in",e=>e/2.54],["pc",e=>e/2.54*6],["pt",e=>e/2.54*72],["px",e=>e/2.54*96]]),u=new Map([["deg",e=>e],["grad",e=>e/.9],["rad",e=>e/180*Math.PI],["turn",e=>e/360]]),i=new Map([["deg",e=>.9*e],["grad",e=>e],["rad",e=>.9*e/180*Math.PI],["turn",e=>.9*e/360]]),a=new Map([["hz",e=>e],["khz",e=>e/1e3]]),l=new Map([["cm",e=>2.54*e],["mm",e=>25.4*e],["q",e=>25.4*e*4],["in",e=>e],["pc",e=>6*e],["pt",e=>72*e],["px",e=>96*e]]),s=new Map([["hz",e=>1e3*e],["khz",e=>e]]),c=new Map([["cm",e=>e/10],["mm",e=>e],["q",e=>4*e],["in",e=>e/25.4],["pc",e=>e/25.4*6],["pt",e=>e/25.4*72],["px",e=>e/25.4*96]]),T=new Map([["ms",e=>e],["s",e=>e/1e3]]),p=new Map([["cm",e=>e/6*2.54],["mm",e=>e/6*25.4],["q",e=>e/6*25.4*4],["in",e=>e/6],["pc",e=>e],["pt",e=>e/6*72],["px",e=>e/6*96]]),m=new Map([["cm",e=>e/72*2.54],["mm",e=>e/72*25.4],["q",e=>e/72*25.4*4],["in",e=>e/72],["pc",e=>e/72*6],["pt",e=>e],["px",e=>e/72*96]]),v=new Map([["cm",e=>e/96*2.54],["mm",e=>e/96*25.4],["q",e=>e/96*25.4*4],["in",e=>e/96],["pc",e=>e/96*6],["pt",e=>e/96*72],["px",e=>e]]),N=new Map([["cm",e=>e/4/10],["mm",e=>e/4],["q",e=>e],["in",e=>e/4/25.4],["pc",e=>e/4/25.4*6],["pt",e=>e/4/25.4*72],["px",e=>e/4/25.4*96]]),f=new Map([["deg",e=>180*e/Math.PI],["grad",e=>180*e/Math.PI/.9],["rad",e=>e],["turn",e=>180*e/Math.PI/360]]),y=new Map([["ms",e=>1e3*e],["s",e=>e]]),k=new Map([["deg",e=>360*e],["grad",e=>360*e/.9],["rad",e=>360*e/180*Math.PI],["turn",e=>e]]),d=new Map([["cm",r],["mm",c],["q",N],["in",l],["pc",p],["pt",m],["px",v],["ms",T],["s",y],["deg",u],["grad",i],["rad",f],["turn",k],["hz",a],["khz",s]]);function convertUnit(e,t){if(e[0]!==n.TokenType.Dimension)return t;if(t[0]!==n.TokenType.Dimension)return t;const o=toLowerCaseAZ(e[4].unit),r=toLowerCaseAZ(t[4].unit);if(o===r)return t;const u=d.get(r);if(!u)return t;const i=u.get(o);if(!i)return t;const a=i(t[4].value);return[n.TokenType.Dimension,a.toString()+e[4].unit,t[2],t[3],{value:a,unit:e[4].unit,type:Number.isInteger(a)?n.NumberType.Integer:n.NumberType.Number}]}function toCanonicalUnit(e){if(e[0]!==n.TokenType.Dimension)return e;const t=toLowerCaseAZ(e[4].unit),r=o[t];if(t===r)return e;const u=d.get(t);if(!u)return e;const i=u.get(r);if(!i)return e;const a=i(e[4].value);return[n.TokenType.Dimension,a.toString()+r,e[2],e[3],{value:a,unit:r,type:Number.isInteger(a)?n.NumberType.Integer:n.NumberType.Number}]}function addition(t){if(2!==t.length)return-1;const o=t[0].value;let r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Percentage){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Dimension&&(r=convertUnit(o,r),toLowerCaseAZ(o[4].unit)===toLowerCaseAZ(r[4].unit))){const t=o[4].value+r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function division(t){if(2!==t.length)return-1;const o=t[0].value,r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:Number.isInteger(t)?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Number){const t=o[4].value/r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:Number.isInteger(t)?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function isCalculation(e){return!!e&&"object"==typeof e&&"inputs"in e&&Array.isArray(e.inputs)&&"operation"in e}function solve(n){if(-1===n)return-1;const t=[];for(let o=0;oe.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.hypot(...i);return resultToCalculation(n,r,a)}function solveMax(n,t){const o=t[0];if(!o||!e.isTokenNode(o))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.max(...i);return resultToCalculation(n,r,a)}function solveMin(n,t){const o=t[0];if(!o||!e.isTokenNode(o))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const r=o.value;if(!isNumeric(r))return-1;const u=t.map((e=>convertUnit(r,e.value)));if(!arrayOfSameNumeric(u))return-1;const i=u.map((e=>e[4].value)),a=Math.min(...i);return resultToCalculation(n,r,a)}function solveMod(e,n,t){const o=n.value;if(!isNumeric(o))return-1;const r=convertUnit(o,t.value);if(!twoOfSameNumeric(o,r))return-1;let u;return u=0===r[4].value?Number.NaN:Number.isFinite(o[4].value)&&(Number.isFinite(r[4].value)||(r[4].value!==Number.POSITIVE_INFINITY||o[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*o[4].value,-0))&&(r[4].value!==Number.NEGATIVE_INFINITY||o[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*o[4].value,0)))?Number.isFinite(r[4].value)?(o[4].value%r[4].value+r[4].value)%r[4].value:o[4].value:Number.NaN,resultToCalculation(e,o,u)}function solvePow(e,t,o){const r=t.value,u=o.value;if(r[0]!==n.TokenType.Number)return-1;if(!twoOfSameNumeric(r,u))return-1;return numberToCalculation(e,Math.pow(r[4].value,u[4].value))}function solveRem(e,n,t){const o=n.value;if(!isNumeric(o))return-1;const r=convertUnit(o,t.value);if(!twoOfSameNumeric(o,r))return-1;let u;return u=0===r[4].value?Number.NaN:Number.isFinite(o[4].value)?Number.isFinite(r[4].value)?o[4].value%r[4].value:o[4].value:Number.NaN,resultToCalculation(e,o,u)}function solveRound(e,n,t,o){const r=t.value;if(!isNumeric(r))return-1;const u=convertUnit(r,o.value);if(!twoOfSameNumeric(r,u))return-1;let i;if(0===u[4].value)i=Number.NaN;else if(Number.isFinite(r[4].value)||Number.isFinite(u[4].value))if(!Number.isFinite(r[4].value)&&Number.isFinite(u[4].value))i=r[4].value;else if(Number.isFinite(r[4].value)&&!Number.isFinite(u[4].value))switch(n){case"down":i=r[4].value<0?-1/0:Object.is(-0,0*r[4].value)?-0:0;break;case"up":i=r[4].value>0?1/0:Object.is(0,0*r[4].value)?0:-0;break;default:i=Object.is(0,0*r[4].value)?0:-0}else if(Number.isFinite(u[4].value))switch(n){case"down":i=Math.floor(r[4].value/u[4].value)*u[4].value;break;case"up":i=Math.ceil(r[4].value/u[4].value)*u[4].value;break;case"to-zero":i=Math.trunc(r[4].value/u[4].value)*u[4].value;break;default:{let e=Math.floor(r[4].value/u[4].value)*u[4].value,n=Math.ceil(r[4].value/u[4].value)*u[4].value;if(e>n){const t=e;e=n,n=t}const t=Math.abs(r[4].value-e),o=Math.abs(r[4].value-n);i=t===o?n:t0?1/0:-1/0:Math.tan(l),numberToCalculation(e,l)}function subtraction(t){if(2!==t.length)return-1;const o=t[0].value;let r=t[1].value;if(o[0]===n.TokenType.Number&&r[0]===n.TokenType.Number){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Number,t.toString(),o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number}])}if(o[0]===n.TokenType.Percentage&&r[0]===n.TokenType.Percentage){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Percentage,t.toString()+"%",o[2],r[3],{value:t}])}if(o[0]===n.TokenType.Dimension&&r[0]===n.TokenType.Dimension&&(r=convertUnit(o,r),toLowerCaseAZ(o[4].unit)===toLowerCaseAZ(r[4].unit))){const t=o[4].value-r[4].value;return new e.TokenNode([n.TokenType.Dimension,t.toString()+o[4].unit,o[2],r[3],{value:t,type:o[4].type===n.NumberType.Integer&&r[4].type===n.NumberType.Integer?n.NumberType.Integer:n.NumberType.Number,unit:o[4].unit}])}return-1}function solveLog(t,o){if(1===o.length){const r=o[0];if(!r||!e.isTokenNode(r))return-1;const u=r.value;if(u[0]!==n.TokenType.Number)return-1;return numberToCalculation(t,Math.log(u[4].value))}if(2===o.length){const r=o[0];if(!r||!e.isTokenNode(r))return-1;const u=r.value;if(u[0]!==n.TokenType.Number)return-1;const i=o[1];if(!i||!e.isTokenNode(i))return-1;const a=i.value;if(a[0]!==n.TokenType.Number)return-1;return numberToCalculation(t,Math.log(u[4].value)/Math.log(a[4].value))}return-1}const b=/^none$/i;function isNone(t){if(Array.isArray(t)){const n=t.filter((n=>!(e.isWhitespaceNode(n)&&e.isCommentNode(n))));return 1===n.length&&isNone(n[0])}if(!e.isTokenNode(t))return!1;const o=t.value;return o[0]===n.TokenType.Ident&&b.test(o[4].value)}const g=new Map([["abs",function abs(e,n){return singleNodeSolver(e,n,solveAbs)}],["acos",function acos(e,n){return singleNodeSolver(e,n,solveACos)}],["asin",function asin(e,n){return singleNodeSolver(e,n,solveASin)}],["atan",function atan(e,n){return singleNodeSolver(e,n,solveATan)}],["atan2",function atan2(e,n){return twoCommaSeparatedNodesSolver(e,n,solveATan2)}],["calc",calc$1],["clamp",function clamp(t,o){const r=resolveGlobalsAndConstants([...t.value.filter((n=>!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),u=[],i=[],a=[];{let t=u;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o);let u="",i=!1;const a=[],l=[];{let t=a;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o);if(1===r.length&&e.isTokenNode(r[0]))return{inputs:[r[0]],operation:unary};let u=0;for(;u!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],t)),t));return-1===r?-1:o(n,r)}function twoCommaSeparatedNodesSolver(t,o,r){const u=resolveGlobalsAndConstants([...t.value.filter((n=>!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),i=[],a=[];{let t=i;for(let o=0;o!e.isCommentNode(n)&&!e.isWhitespaceNode(n)))],o),i=[];{const t=[];let r=[];for(let o=0;o{if(!e.isFunctionNode(n))return;const r=g.get(n.getName().toLowerCase());if(!r)return;const u=patchCalcResult(solve(r(n,o)),t);return-1!==u?u:void 0}))}const w=new Set(g.keys());exports.calc=function calc(t,o){return calcFromComponentValues(e.parseCommaSeparatedListOfComponentValues(n.tokenize({css:t}),{}),o).map((e=>e.map((e=>n.stringify(...e.tokens()))).join(""))).join(",")},exports.calcFromComponentValues=calcFromComponentValues,exports.mathFunctionNames=w; diff --git a/packages/css-calc/dist/index.d.ts b/packages/css-calc/dist/index.d.ts index 9d31d3b50..9b5e4f6bb 100644 --- a/packages/css-calc/dist/index.d.ts +++ b/packages/css-calc/dist/index.d.ts @@ -5,7 +5,7 @@ import type { TokenPercentage } from '@csstools/css-tokenizer'; export declare function calc(css: string, options?: conversionOptions): string; -export declare function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions): ComponentValue[][]; +export declare function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions): Array>; export declare type conversionOptions = { /** diff --git a/packages/css-calc/dist/index.mjs b/packages/css-calc/dist/index.mjs index ebd179631..c2722ff3a 100644 --- a/packages/css-calc/dist/index.mjs +++ b/packages/css-calc/dist/index.mjs @@ -1 +1 @@ -import{TokenNode as e,isTokenNode as n,isWhitespaceNode as t,isCommentNode as r,isSimpleBlockNode as u,isFunctionNode as i,FunctionNode as a,WhitespaceNode as o,parseCommaSeparatedListOfComponentValues as l,replaceComponentValues as s}from"@csstools/css-parser-algorithms";import{TokenType as c,NumberType as v,isToken as m,tokenizer as f,tokenize as p,stringify as N}from"@csstools/css-tokenizer";const g=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(g,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const b={cm:"px",in:"px",mm:"px",pc:"px",pt:"px",px:"px",q:"px",deg:"deg",grad:"deg",rad:"deg",turn:"deg",ms:"s",s:"s",hz:"hz",khz:"hz"},d=new Map([["cm",e=>e],["mm",e=>10*e],["q",e=>40*e],["in",e=>e/2.54],["pc",e=>e/2.54*6],["pt",e=>e/2.54*72],["px",e=>e/2.54*96]]),w=new Map([["deg",e=>e],["grad",e=>e/.9],["rad",e=>e/180*Math.PI],["turn",e=>e/360]]),h=new Map([["deg",e=>.9*e],["grad",e=>e],["rad",e=>.9*e/180*Math.PI],["turn",e=>.9*e/360]]),C=new Map([["hz",e=>e],["khz",e=>e/1e3]]),I=new Map([["cm",e=>2.54*e],["mm",e=>25.4*e],["q",e=>25.4*e*4],["in",e=>e],["pc",e=>6*e],["pt",e=>72*e],["px",e=>96*e]]),S=new Map([["hz",e=>1e3*e],["khz",e=>e]]),y=new Map([["cm",e=>e/10],["mm",e=>e],["q",e=>4*e],["in",e=>e/25.4],["pc",e=>e/25.4*6],["pt",e=>e/25.4*72],["px",e=>e/25.4*96]]),M=new Map([["ms",e=>e],["s",e=>e/1e3]]),D=new Map([["cm",e=>e/6*2.54],["mm",e=>e/6*25.4],["q",e=>e/6*25.4*4],["in",e=>e/6],["pc",e=>e],["pt",e=>e/6*72],["px",e=>e/6*96]]),P=new Map([["cm",e=>e/72*2.54],["mm",e=>e/72*25.4],["q",e=>e/72*25.4*4],["in",e=>e/72],["pc",e=>e/72*6],["pt",e=>e],["px",e=>e/72*96]]),T=new Map([["cm",e=>e/96*2.54],["mm",e=>e/96*25.4],["q",e=>e/96*25.4*4],["in",e=>e/96],["pc",e=>e/96*6],["pt",e=>e/96*72],["px",e=>e]]),A=new Map([["cm",e=>e/4/10],["mm",e=>e/4],["q",e=>e],["in",e=>e/4/25.4],["pc",e=>e/4/25.4*6],["pt",e=>e/4/25.4*72],["px",e=>e/4/25.4*96]]),k=new Map([["deg",e=>180*e/Math.PI],["grad",e=>180*e/Math.PI/.9],["rad",e=>e],["turn",e=>180*e/Math.PI/360]]),x=new Map([["ms",e=>1e3*e],["s",e=>e]]),F=new Map([["deg",e=>360*e],["grad",e=>360*e/.9],["rad",e=>360*e/180*Math.PI],["turn",e=>e]]),O=new Map([["cm",d],["mm",y],["q",A],["in",I],["pc",D],["pt",P],["px",T],["ms",M],["s",x],["deg",w],["grad",h],["rad",k],["turn",F],["hz",C],["khz",S]]);function convertUnit(e,n){if(e[0]!==c.Dimension)return n;if(n[0]!==c.Dimension)return n;const t=toLowerCaseAZ(e[4].unit),r=toLowerCaseAZ(n[4].unit);if(t===r)return n;const u=O.get(r);if(!u)return n;const i=u.get(t);if(!i)return n;const a=i(n[4].value);return[c.Dimension,a.toString()+e[4].unit,n[2],n[3],{value:a,unit:e[4].unit,type:Number.isInteger(a)?v.Integer:v.Number}]}function toCanonicalUnit(e){if(e[0]!==c.Dimension)return e;const n=toLowerCaseAZ(e[4].unit),t=b[n];if(n===t)return e;const r=O.get(n);if(!r)return e;const u=r.get(t);if(!u)return e;const i=u(e[4].value);return[c.Dimension,i.toString()+t,e[2],e[3],{value:i,unit:t,type:Number.isInteger(i)?v.Integer:v.Number}]}function addition(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value+r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Percentage){const n=t[4].value+r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Dimension&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value+r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number,unit:t[4].unit}])}return-1}function division(n){if(2!==n.length)return-1;const t=n[0].value,r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:Number.isInteger(n)?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:Number.isInteger(n)?v.Integer:v.Number,unit:t[4].unit}])}return-1}function isCalculation(e){return!!e&&"object"==typeof e&&"inputs"in e&&Array.isArray(e.inputs)&&"operation"in e}function solve(e){if(-1===e)return-1;const t=[];for(let r=0;re.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.hypot(...a);return resultToCalculation(e,u,o)}function solveMax(e,t){const r=t[0];if(!r||!n(r))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.max(...a);return resultToCalculation(e,u,o)}function solveMin(e,t){const r=t[0];if(!r||!n(r))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.min(...a);return resultToCalculation(e,u,o)}function solveMod(e,n,t){const r=n.value;if(!isNumeric(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let i;return i=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)&&(Number.isFinite(u[4].value)||(u[4].value!==Number.POSITIVE_INFINITY||r[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*r[4].value,-0))&&(u[4].value!==Number.NEGATIVE_INFINITY||r[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*r[4].value,0)))?Number.isFinite(u[4].value)?(r[4].value%u[4].value+u[4].value)%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,i)}function solvePow(e,n,t){const r=n.value,u=t.value;if(r[0]!==c.Number)return-1;if(!twoOfSameNumeric(r,u))return-1;return numberToCalculation(e,Math.pow(r[4].value,u[4].value))}function solveRem(e,n,t){const r=n.value;if(!isNumeric(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let i;return i=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)?Number.isFinite(u[4].value)?r[4].value%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,i)}function solveRound(e,n,t,r){const u=t.value;if(!isNumeric(u))return-1;const i=convertUnit(u,r.value);if(!twoOfSameNumeric(u,i))return-1;let a;if(0===i[4].value)a=Number.NaN;else if(Number.isFinite(u[4].value)||Number.isFinite(i[4].value))if(!Number.isFinite(u[4].value)&&Number.isFinite(i[4].value))a=u[4].value;else if(Number.isFinite(u[4].value)&&!Number.isFinite(i[4].value))switch(n){case"down":a=u[4].value<0?-1/0:Object.is(-0,0*u[4].value)?-0:0;break;case"up":a=u[4].value>0?1/0:Object.is(0,0*u[4].value)?0:-0;break;default:a=Object.is(0,0*u[4].value)?0:-0}else if(Number.isFinite(i[4].value))switch(n){case"down":a=Math.floor(u[4].value/i[4].value)*i[4].value;break;case"up":a=Math.ceil(u[4].value/i[4].value)*i[4].value;break;case"to-zero":a=Math.trunc(u[4].value/i[4].value)*i[4].value;break;default:{let e=Math.floor(u[4].value/i[4].value)*i[4].value,n=Math.ceil(u[4].value/i[4].value)*i[4].value;if(e>n){const t=e;e=n,n=t}const t=Math.abs(u[4].value-e),r=Math.abs(u[4].value-n);a=t===r?n:t0?1/0:-1/0:Math.tan(i),numberToCalculation(e,i)}function subtraction(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value-r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Percentage){const n=t[4].value-r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Dimension&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value-r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number,unit:t[4].unit}])}return-1}function solveLog(e,t){if(1===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(u[0]!==c.Number)return-1;return numberToCalculation(e,Math.log(u[4].value))}if(2===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(u[0]!==c.Number)return-1;const i=t[1];if(!i||!n(i))return-1;const a=i.value;if(a[0]!==c.Number)return-1;return numberToCalculation(e,Math.log(u[4].value)/Math.log(a[4].value))}return-1}const W=/^none$/i;function isNone(e){if(Array.isArray(e)){const n=e.filter((e=>!(t(e)&&r(e))));return 1===n.length&&isNone(n[0])}if(!n(e))return!1;const u=e.value;return u[0]===c.Ident&&W.test(u[4].value)}const Z=new Map([["abs",function abs(e,n){return singleNodeSolver(e,n,solveAbs)}],["acos",function acos(e,n){return singleNodeSolver(e,n,solveACos)}],["asin",function asin(e,n){return singleNodeSolver(e,n,solveASin)}],["atan",function atan(e,n){return singleNodeSolver(e,n,solveATan)}],["atan2",function atan2(e,n){return twoCommaSeparatedNodesSolver(e,n,solveATan2)}],["calc",calc$1],["clamp",function clamp(u,i){const o=resolveGlobalsAndConstants([...u.value.filter((e=>!r(e)&&!t(e)))],i),l=[],s=[],v=[];{let e=l;for(let t=0;t!r(e)&&!t(e)))],i);let o="",l=!1;const s=[],m=[];{let e=s;for(let t=0;t!r(e)&&!t(e)))],a);if(1===o.length&&n(o[0]))return{inputs:[o[0]],operation:unary};let l=0;for(;l!r(e)&&!t(e)))],n)),n));return-1===i?-1:u(e,i)}function twoCommaSeparatedNodesSolver(e,u,i){const a=resolveGlobalsAndConstants([...e.value.filter((e=>!r(e)&&!t(e)))],u),o=[],l=[];{let e=o;for(let t=0;t!r(e)&&!t(e)))],u),o=[];{const e=[];let t=[];for(let r=0;re.map((e=>N(...e.tokens()))).join(""))).join(",")}function calcFromComponentValues(e,n){const t=tokenizeGlobals(n?.globals);return s(e,(e=>{if(!i(e))return;const r=Z.get(toLowerCaseAZ(e.getName()));if(!r)return;const u=patchCalcResult(solve(r(e,t)),n);return-1!==u?u:void 0}))}const z=new Set(Z.keys());export{calc,calcFromComponentValues,z as mathFunctionNames}; +import{TokenNode as e,isTokenNode as n,isWhitespaceNode as t,isCommentNode as r,isSimpleBlockNode as u,isFunctionNode as i,FunctionNode as a,WhitespaceNode as o,parseCommaSeparatedListOfComponentValues as l,replaceComponentValues as s}from"@csstools/css-parser-algorithms";import{TokenType as c,NumberType as v,isToken as m,tokenizer as f,tokenize as p,stringify as N}from"@csstools/css-tokenizer";const g=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(g,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const b={cm:"px",in:"px",mm:"px",pc:"px",pt:"px",px:"px",q:"px",deg:"deg",grad:"deg",rad:"deg",turn:"deg",ms:"s",s:"s",hz:"hz",khz:"hz"},d=new Map([["cm",e=>e],["mm",e=>10*e],["q",e=>40*e],["in",e=>e/2.54],["pc",e=>e/2.54*6],["pt",e=>e/2.54*72],["px",e=>e/2.54*96]]),w=new Map([["deg",e=>e],["grad",e=>e/.9],["rad",e=>e/180*Math.PI],["turn",e=>e/360]]),h=new Map([["deg",e=>.9*e],["grad",e=>e],["rad",e=>.9*e/180*Math.PI],["turn",e=>.9*e/360]]),C=new Map([["hz",e=>e],["khz",e=>e/1e3]]),I=new Map([["cm",e=>2.54*e],["mm",e=>25.4*e],["q",e=>25.4*e*4],["in",e=>e],["pc",e=>6*e],["pt",e=>72*e],["px",e=>96*e]]),S=new Map([["hz",e=>1e3*e],["khz",e=>e]]),y=new Map([["cm",e=>e/10],["mm",e=>e],["q",e=>4*e],["in",e=>e/25.4],["pc",e=>e/25.4*6],["pt",e=>e/25.4*72],["px",e=>e/25.4*96]]),M=new Map([["ms",e=>e],["s",e=>e/1e3]]),D=new Map([["cm",e=>e/6*2.54],["mm",e=>e/6*25.4],["q",e=>e/6*25.4*4],["in",e=>e/6],["pc",e=>e],["pt",e=>e/6*72],["px",e=>e/6*96]]),P=new Map([["cm",e=>e/72*2.54],["mm",e=>e/72*25.4],["q",e=>e/72*25.4*4],["in",e=>e/72],["pc",e=>e/72*6],["pt",e=>e],["px",e=>e/72*96]]),T=new Map([["cm",e=>e/96*2.54],["mm",e=>e/96*25.4],["q",e=>e/96*25.4*4],["in",e=>e/96],["pc",e=>e/96*6],["pt",e=>e/96*72],["px",e=>e]]),A=new Map([["cm",e=>e/4/10],["mm",e=>e/4],["q",e=>e],["in",e=>e/4/25.4],["pc",e=>e/4/25.4*6],["pt",e=>e/4/25.4*72],["px",e=>e/4/25.4*96]]),k=new Map([["deg",e=>180*e/Math.PI],["grad",e=>180*e/Math.PI/.9],["rad",e=>e],["turn",e=>180*e/Math.PI/360]]),x=new Map([["ms",e=>1e3*e],["s",e=>e]]),F=new Map([["deg",e=>360*e],["grad",e=>360*e/.9],["rad",e=>360*e/180*Math.PI],["turn",e=>e]]),O=new Map([["cm",d],["mm",y],["q",A],["in",I],["pc",D],["pt",P],["px",T],["ms",M],["s",x],["deg",w],["grad",h],["rad",k],["turn",F],["hz",C],["khz",S]]);function convertUnit(e,n){if(e[0]!==c.Dimension)return n;if(n[0]!==c.Dimension)return n;const t=toLowerCaseAZ(e[4].unit),r=toLowerCaseAZ(n[4].unit);if(t===r)return n;const u=O.get(r);if(!u)return n;const i=u.get(t);if(!i)return n;const a=i(n[4].value);return[c.Dimension,a.toString()+e[4].unit,n[2],n[3],{value:a,unit:e[4].unit,type:Number.isInteger(a)?v.Integer:v.Number}]}function toCanonicalUnit(e){if(e[0]!==c.Dimension)return e;const n=toLowerCaseAZ(e[4].unit),t=b[n];if(n===t)return e;const r=O.get(n);if(!r)return e;const u=r.get(t);if(!u)return e;const i=u(e[4].value);return[c.Dimension,i.toString()+t,e[2],e[3],{value:i,unit:t,type:Number.isInteger(i)?v.Integer:v.Number}]}function addition(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value+r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Percentage){const n=t[4].value+r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Dimension&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value+r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number,unit:t[4].unit}])}return-1}function division(n){if(2!==n.length)return-1;const t=n[0].value,r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:Number.isInteger(n)?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Number){const n=t[4].value/r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:Number.isInteger(n)?v.Integer:v.Number,unit:t[4].unit}])}return-1}function isCalculation(e){return!!e&&"object"==typeof e&&"inputs"in e&&Array.isArray(e.inputs)&&"operation"in e}function solve(e){if(-1===e)return-1;const t=[];for(let r=0;re.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.hypot(...a);return resultToCalculation(e,u,o)}function solveMax(e,t){const r=t[0];if(!r||!n(r))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.max(...a);return resultToCalculation(e,u,o)}function solveMin(e,t){const r=t[0];if(!r||!n(r))return-1;if(1!==new Set(t.map((e=>e.type))).size)return-1;const u=r.value;if(!isNumeric(u))return-1;const i=t.map((e=>convertUnit(u,e.value)));if(!arrayOfSameNumeric(i))return-1;const a=i.map((e=>e[4].value)),o=Math.min(...a);return resultToCalculation(e,u,o)}function solveMod(e,n,t){const r=n.value;if(!isNumeric(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let i;return i=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)&&(Number.isFinite(u[4].value)||(u[4].value!==Number.POSITIVE_INFINITY||r[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*r[4].value,-0))&&(u[4].value!==Number.NEGATIVE_INFINITY||r[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*r[4].value,0)))?Number.isFinite(u[4].value)?(r[4].value%u[4].value+u[4].value)%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,i)}function solvePow(e,n,t){const r=n.value,u=t.value;if(r[0]!==c.Number)return-1;if(!twoOfSameNumeric(r,u))return-1;return numberToCalculation(e,Math.pow(r[4].value,u[4].value))}function solveRem(e,n,t){const r=n.value;if(!isNumeric(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let i;return i=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)?Number.isFinite(u[4].value)?r[4].value%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,i)}function solveRound(e,n,t,r){const u=t.value;if(!isNumeric(u))return-1;const i=convertUnit(u,r.value);if(!twoOfSameNumeric(u,i))return-1;let a;if(0===i[4].value)a=Number.NaN;else if(Number.isFinite(u[4].value)||Number.isFinite(i[4].value))if(!Number.isFinite(u[4].value)&&Number.isFinite(i[4].value))a=u[4].value;else if(Number.isFinite(u[4].value)&&!Number.isFinite(i[4].value))switch(n){case"down":a=u[4].value<0?-1/0:Object.is(-0,0*u[4].value)?-0:0;break;case"up":a=u[4].value>0?1/0:Object.is(0,0*u[4].value)?0:-0;break;default:a=Object.is(0,0*u[4].value)?0:-0}else if(Number.isFinite(i[4].value))switch(n){case"down":a=Math.floor(u[4].value/i[4].value)*i[4].value;break;case"up":a=Math.ceil(u[4].value/i[4].value)*i[4].value;break;case"to-zero":a=Math.trunc(u[4].value/i[4].value)*i[4].value;break;default:{let e=Math.floor(u[4].value/i[4].value)*i[4].value,n=Math.ceil(u[4].value/i[4].value)*i[4].value;if(e>n){const t=e;e=n,n=t}const t=Math.abs(u[4].value-e),r=Math.abs(u[4].value-n);a=t===r?n:t0?1/0:-1/0:Math.tan(i),numberToCalculation(e,i)}function subtraction(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(t[0]===c.Number&&r[0]===c.Number){const n=t[4].value-r[4].value;return new e([c.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number}])}if(t[0]===c.Percentage&&r[0]===c.Percentage){const n=t[4].value-r[4].value;return new e([c.Percentage,n.toString()+"%",t[2],r[3],{value:n}])}if(t[0]===c.Dimension&&r[0]===c.Dimension&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value-r[4].value;return new e([c.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===v.Integer&&r[4].type===v.Integer?v.Integer:v.Number,unit:t[4].unit}])}return-1}function solveLog(e,t){if(1===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(u[0]!==c.Number)return-1;return numberToCalculation(e,Math.log(u[4].value))}if(2===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(u[0]!==c.Number)return-1;const i=t[1];if(!i||!n(i))return-1;const a=i.value;if(a[0]!==c.Number)return-1;return numberToCalculation(e,Math.log(u[4].value)/Math.log(a[4].value))}return-1}const W=/^none$/i;function isNone(e){if(Array.isArray(e)){const n=e.filter((e=>!(t(e)&&r(e))));return 1===n.length&&isNone(n[0])}if(!n(e))return!1;const u=e.value;return u[0]===c.Ident&&W.test(u[4].value)}const L=new Map([["abs",function abs(e,n){return singleNodeSolver(e,n,solveAbs)}],["acos",function acos(e,n){return singleNodeSolver(e,n,solveACos)}],["asin",function asin(e,n){return singleNodeSolver(e,n,solveASin)}],["atan",function atan(e,n){return singleNodeSolver(e,n,solveATan)}],["atan2",function atan2(e,n){return twoCommaSeparatedNodesSolver(e,n,solveATan2)}],["calc",calc$1],["clamp",function clamp(u,i){const o=resolveGlobalsAndConstants([...u.value.filter((e=>!r(e)&&!t(e)))],i),l=[],s=[],v=[];{let e=l;for(let t=0;t!r(e)&&!t(e)))],i);let o="",l=!1;const s=[],m=[];{let e=s;for(let t=0;t!r(e)&&!t(e)))],a);if(1===o.length&&n(o[0]))return{inputs:[o[0]],operation:unary};let l=0;for(;l!r(e)&&!t(e)))],n)),n));return-1===i?-1:u(e,i)}function twoCommaSeparatedNodesSolver(e,u,i){const a=resolveGlobalsAndConstants([...e.value.filter((e=>!r(e)&&!t(e)))],u),o=[],l=[];{let e=o;for(let t=0;t!r(e)&&!t(e)))],u),o=[];{const e=[];let t=[];for(let r=0;re.map((e=>N(...e.tokens()))).join(""))).join(",")}function calcFromComponentValues(e,n){const t=tokenizeGlobals(n?.globals);return s(e,(e=>{if(!i(e))return;const r=L.get(e.getName().toLowerCase());if(!r)return;const u=patchCalcResult(solve(r(e,t)),n);return-1!==u?u:void 0}))}const Z=new Set(L.keys());export{calc,calcFromComponentValues,Z as mathFunctionNames}; diff --git a/packages/css-calc/docs/css-calc.api.json b/packages/css-calc/docs/css-calc.api.json index 5bcfae27a..85f7e2846 100644 --- a/packages/css-calc/docs/css-calc.api.json +++ b/packages/css-calc/docs/css-calc.api.json @@ -282,6 +282,24 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "ComponentValue", @@ -289,7 +307,7 @@ }, { "kind": "Content", - "text": "[][]" + "text": ">>" }, { "kind": "Content", @@ -299,7 +317,7 @@ "fileUrlPath": "dist/_types/index.d.ts", "returnTypeTokenRange": { "startIndex": 10, - "endIndex": 12 + "endIndex": 16 }, "releaseTag": "Public", "overloadIndex": 1, diff --git a/packages/css-calc/docs/css-calc.calcfromcomponentvalues.md b/packages/css-calc/docs/css-calc.calcfromcomponentvalues.md index 69d90e0c0..450decee6 100644 --- a/packages/css-calc/docs/css-calc.calcfromcomponentvalues.md +++ b/packages/css-calc/docs/css-calc.calcfromcomponentvalues.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions): ComponentValue[][]; +export declare function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions): Array>; ``` ## Parameters @@ -19,5 +19,5 @@ export declare function calcFromComponentValues(componentValuesList: Array) { +function calcWrapper(v: Array): FunctionNode { return new FunctionNode( [TokenType.Function, 'calc(', -1, -1, { value: 'calc' }], [TokenType.CloseParen, ')', -1, -1, undefined], @@ -550,7 +549,7 @@ function calcWrapper(v: Array) { ); } -function minWrapper(a: ComponentValue, b: ComponentValue) { +function minWrapper(a: ComponentValue, b: ComponentValue): FunctionNode { return new FunctionNode( [TokenType.Function, 'min(', -1, -1, { value: 'min' }], [TokenType.CloseParen, ')', -1, -1, undefined], @@ -562,7 +561,7 @@ function minWrapper(a: ComponentValue, b: ComponentValue) { ); } -function maxWrapper(a: ComponentValue, b: ComponentValue) { +function maxWrapper(a: ComponentValue, b: ComponentValue): FunctionNode { return new FunctionNode( [TokenType.Function, 'max(', -1, -1, { value: 'max' }], [TokenType.CloseParen, ')', -1, -1, undefined], diff --git a/packages/css-calc/src/functions/cos.ts b/packages/css-calc/src/functions/cos.ts index 1a216eb6f..80b894b8a 100644 --- a/packages/css-calc/src/functions/cos.ts +++ b/packages/css-calc/src/functions/cos.ts @@ -6,7 +6,6 @@ import { convert_grad } from '../unit-conversions/grad'; import { convert_turn } from '../unit-conversions/turn'; import { numberToCalculation } from './result-to-calculation'; import { isDimensionOrNumber } from '../util/kind-of-number'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; export function solveCos(cosNode: FunctionNode, a: TokenNode): Calculation | -1 { const aToken = a.value; @@ -16,7 +15,7 @@ export function solveCos(cosNode: FunctionNode, a: TokenNode): Calculation | -1 let result = aToken[4].value; if (aToken[0] === TokenType.Dimension) { - switch (toLowerCaseAZ(aToken[4].unit)) { + switch (aToken[4].unit.toLowerCase()) { case 'rad': break; case 'deg': diff --git a/packages/css-calc/src/index.ts b/packages/css-calc/src/index.ts index 7887c7d6a..9a5f495e3 100644 --- a/packages/css-calc/src/index.ts +++ b/packages/css-calc/src/index.ts @@ -6,7 +6,6 @@ import { patchCalcResult } from './util/patch-result'; import { replaceComponentValues } from '@csstools/css-parser-algorithms'; import { solve } from './calculation'; import { stringify, tokenize } from '@csstools/css-tokenizer'; -import { toLowerCaseAZ } from './util/to-lower-case-a-z'; import { tokenizeGlobals } from './util/globals'; export function calc(css: string, options?: conversionOptions): string { @@ -17,7 +16,7 @@ export function calc(css: string, options?: conversionOptions): string { }).join(','); } -export function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions) { +export function calcFromComponentValues(componentValuesList: Array>, options?: conversionOptions): Array> { const tokenizedGlobals = tokenizeGlobals(options?.globals); return replaceComponentValues(componentValuesList, (componentValue) => { @@ -25,7 +24,7 @@ export function calcFromComponentValues(componentValuesList: Array number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return x; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return x * 10; }, ], [ 'q', - (x: number) => { + (x: number): number => { return x * 40; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x / 2.54; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return (x / 2.54) * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return (x / 2.54) * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return (x / 2.54) * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/deg.ts b/packages/css-calc/src/unit-conversions/deg.ts index 91f6c9edd..8523486b7 100644 --- a/packages/css-calc/src/unit-conversions/deg.ts +++ b/packages/css-calc/src/unit-conversions/deg.ts @@ -1,25 +1,25 @@ export const convert_deg: Map number> = new Map([ [ 'deg', - (x: number) => { + (x: number): number => { return x; }, ], [ 'grad', - (x: number) => { + (x: number): number => { return x / 0.9; }, ], [ 'rad', - (x: number) => { + (x: number): number => { return x / 180 * (Math.PI); }, ], [ 'turn', - (x: number) => { + (x: number): number => { return x / 360; }, ], diff --git a/packages/css-calc/src/unit-conversions/grad.ts b/packages/css-calc/src/unit-conversions/grad.ts index 7de112813..06dde716a 100644 --- a/packages/css-calc/src/unit-conversions/grad.ts +++ b/packages/css-calc/src/unit-conversions/grad.ts @@ -1,25 +1,25 @@ export const convert_grad: Map number> = new Map([ [ 'deg', - (x: number) => { + (x: number): number => { return x * 0.9; }, ], [ 'grad', - (x: number) => { + (x: number): number => { return x; }, ], [ 'rad', - (x: number) => { + (x: number): number => { return (x * 0.9) / 180 * (Math.PI); }, ], [ 'turn', - (x: number) => { + (x: number): number => { return (x * 0.9) / 360; }, ], diff --git a/packages/css-calc/src/unit-conversions/hz.ts b/packages/css-calc/src/unit-conversions/hz.ts index fc7e32e7d..e7419fbfb 100644 --- a/packages/css-calc/src/unit-conversions/hz.ts +++ b/packages/css-calc/src/unit-conversions/hz.ts @@ -1,13 +1,13 @@ export const convert_hz: Map number> = new Map([ [ 'hz', - (x: number) => { + (x: number): number => { return x; }, ], [ 'khz', - (x: number) => { + (x: number): number => { return x / 1000; }, ], diff --git a/packages/css-calc/src/unit-conversions/in.ts b/packages/css-calc/src/unit-conversions/in.ts index add74d45b..436966b5c 100644 --- a/packages/css-calc/src/unit-conversions/in.ts +++ b/packages/css-calc/src/unit-conversions/in.ts @@ -1,43 +1,43 @@ export const convert_in: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return x * 2.54; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return x * 25.4; }, ], [ 'q', - (x: number) => { + (x: number): number => { return (x * 25.4) * 4; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return x * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return x * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return x * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/khz.ts b/packages/css-calc/src/unit-conversions/khz.ts index 98ef81346..e014d96b6 100644 --- a/packages/css-calc/src/unit-conversions/khz.ts +++ b/packages/css-calc/src/unit-conversions/khz.ts @@ -1,13 +1,13 @@ export const convert_khz: Map number> = new Map([ [ 'hz', - (x: number) => { + (x: number): number => { return x * 1000; }, ], [ 'khz', - (x: number) => { + (x: number): number => { return x; }, ], diff --git a/packages/css-calc/src/unit-conversions/mm.ts b/packages/css-calc/src/unit-conversions/mm.ts index f9ab0719b..4d2c92090 100644 --- a/packages/css-calc/src/unit-conversions/mm.ts +++ b/packages/css-calc/src/unit-conversions/mm.ts @@ -1,43 +1,43 @@ export const convert_mm: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return x / 10; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return x; }, ], [ 'q', - (x: number) => { + (x: number): number => { return x * 4; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x / 25.4; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return (x / 25.4) * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return (x / 25.4) * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return (x / 25.4) * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/ms.ts b/packages/css-calc/src/unit-conversions/ms.ts index 1c92e5190..12f175f0a 100644 --- a/packages/css-calc/src/unit-conversions/ms.ts +++ b/packages/css-calc/src/unit-conversions/ms.ts @@ -1,13 +1,13 @@ export const convert_ms: Map number> = new Map([ [ 'ms', - (x: number) => { + (x: number): number => { return x; }, ], [ 's', - (x: number) => { + (x: number): number => { return x / 1000; }, ], diff --git a/packages/css-calc/src/unit-conversions/pc.ts b/packages/css-calc/src/unit-conversions/pc.ts index ec575d94f..8cdcc19b7 100644 --- a/packages/css-calc/src/unit-conversions/pc.ts +++ b/packages/css-calc/src/unit-conversions/pc.ts @@ -1,43 +1,43 @@ export const convert_pc: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return (x / 6) * 2.54; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return (x / 6) * 25.4; }, ], [ 'q', - (x: number) => { + (x: number): number => { return ((x / 6) * 25.4) * 4; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x / 6; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return x; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return (x / 6) * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return (x / 6) * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/pt.ts b/packages/css-calc/src/unit-conversions/pt.ts index 76f551d5b..9f628d41b 100644 --- a/packages/css-calc/src/unit-conversions/pt.ts +++ b/packages/css-calc/src/unit-conversions/pt.ts @@ -1,43 +1,43 @@ export const convert_pt: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return (x / 72) * 2.54; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return (x / 72) * 25.4; }, ], [ 'q', - (x: number) => { + (x: number): number => { return ((x / 72) * 25.4) * 4; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x / 72; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return (x / 72) * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return x; }, ], [ 'px', - (x: number) => { + (x: number): number => { return (x / 72) * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/px.ts b/packages/css-calc/src/unit-conversions/px.ts index 917365725..8a1676363 100644 --- a/packages/css-calc/src/unit-conversions/px.ts +++ b/packages/css-calc/src/unit-conversions/px.ts @@ -1,43 +1,43 @@ export const convert_px: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return (x / 96) * 2.54; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return (x / 96) * 25.4; }, ], [ 'q', - (x: number) => { + (x: number): number => { return ((x / 96) * 25.4) * 4; }, ], [ 'in', - (x: number) => { + (x: number): number => { return x / 96; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return (x / 96) * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return (x / 96) * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return x; }, ], diff --git a/packages/css-calc/src/unit-conversions/q.ts b/packages/css-calc/src/unit-conversions/q.ts index 9475a8621..b388c8bb2 100644 --- a/packages/css-calc/src/unit-conversions/q.ts +++ b/packages/css-calc/src/unit-conversions/q.ts @@ -1,43 +1,43 @@ export const convert_q: Map number> = new Map([ [ 'cm', - (x: number) => { + (x: number): number => { return (x / 4) / 10; }, ], [ 'mm', - (x: number) => { + (x: number): number => { return x / 4; }, ], [ 'q', - (x: number) => { + (x: number): number => { return x; }, ], [ 'in', - (x: number) => { + (x: number): number => { return (x / 4) / 25.4; }, ], [ 'pc', - (x: number) => { + (x: number): number => { return ((x / 4) / 25.4) * 6; }, ], [ 'pt', - (x: number) => { + (x: number): number => { return ((x / 4) / 25.4) * 72; }, ], [ 'px', - (x: number) => { + (x: number): number => { return ((x / 4) / 25.4) * 96; }, ], diff --git a/packages/css-calc/src/unit-conversions/rad.ts b/packages/css-calc/src/unit-conversions/rad.ts index 08b15ccca..fdeef36bb 100644 --- a/packages/css-calc/src/unit-conversions/rad.ts +++ b/packages/css-calc/src/unit-conversions/rad.ts @@ -1,25 +1,25 @@ export const convert_rad: Map number> = new Map([ [ 'deg', - (x: number) => { + (x: number): number => { return x * 180 / (Math.PI); }, ], [ 'grad', - (x: number) => { + (x: number): number => { return (x * 180 / (Math.PI)) / 0.9; }, ], [ 'rad', - (x: number) => { + (x: number): number => { return x; }, ], [ 'turn', - (x: number) => { + (x: number): number => { return (x * 180 / (Math.PI)) / 360; }, ], diff --git a/packages/css-calc/src/unit-conversions/s.ts b/packages/css-calc/src/unit-conversions/s.ts index 5cfc7d6d5..0ef1bef07 100644 --- a/packages/css-calc/src/unit-conversions/s.ts +++ b/packages/css-calc/src/unit-conversions/s.ts @@ -1,13 +1,13 @@ export const convert_s: Map number> = new Map([ [ 'ms', - (x: number) => { + (x: number): number => { return x * 1000; }, ], [ 's', - (x: number) => { + (x: number): number => { return x; }, ], diff --git a/packages/css-calc/src/unit-conversions/turn.ts b/packages/css-calc/src/unit-conversions/turn.ts index 16bbd9ed9..f28d8cff3 100644 --- a/packages/css-calc/src/unit-conversions/turn.ts +++ b/packages/css-calc/src/unit-conversions/turn.ts @@ -1,25 +1,25 @@ export const convert_turn: Map number> = new Map([ [ 'deg', - (x: number) => { + (x: number): number => { return x * 360; }, ], [ 'grad', - (x: number) => { + (x: number): number => { return (x * 360) / 0.9; }, ], [ 'rad', - (x: number) => { + (x: number): number => { return (x * 360) / 180 * (Math.PI); }, ], [ 'turn', - (x: number) => { + (x: number): number => { return x; }, ], diff --git a/packages/css-color-parser/dist/index.cjs b/packages/css-color-parser/dist/index.cjs index 1cb4d4949..e5d72f4f1 100644 --- a/packages/css-color-parser/dist/index.cjs +++ b/packages/css-color-parser/dist/index.cjs @@ -1 +1 @@ -"use strict";var e,o,a=require("@csstools/css-tokenizer"),n=require("@csstools/color-helpers"),t=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-calc");function colorData_to_XYZ_D50(e){switch(e.colorNotation){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:case exports.ColorNotation.sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Linear_sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Display_P3:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Rec2020:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.A98_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.ProPhoto_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HSL:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HWB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Lab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.LCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D50:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D65:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}exports.ColorNotation=void 0,(e=exports.ColorNotation||(exports.ColorNotation={})).A98_RGB="a98-rgb",e.Display_P3="display-p3",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65",exports.SyntaxFlag=void 0,(o=exports.SyntaxFlag||(exports.SyntaxFlag={})).ColorKeyword="color-keyword",o.HasAlpha="has-alpha",o.HasDimensionValues="has-dimension-values",o.HasNoneKeywords="has-none-keywords",o.HasNumberValues="has-number-values",o.HasPercentageAlpha="has-percentage-alpha",o.HasPercentageValues="has-percentage-values",o.HasVariableAlpha="has-variable-alpha",o.Hex="hex",o.LegacyHSL="legacy-hsl",o.LegacyRGB="legacy-rgb",o.NamedColor="named-color",o.RelativeColorSyntax="relative-color-syntax",o.ColorMix="color-mix",o.Experimental="experimental";const l=new Set([exports.ColorNotation.A98_RGB,exports.ColorNotation.Display_P3,exports.ColorNotation.HEX,exports.ColorNotation.Linear_sRGB,exports.ColorNotation.ProPhoto_RGB,exports.ColorNotation.RGB,exports.ColorNotation.sRGB,exports.ColorNotation.Rec2020,exports.ColorNotation.XYZ_D50,exports.ColorNotation.XYZ_D65]);function colorDataTo(e,o){const a={...e};if(e.colorNotation!==o){const e=colorData_to_XYZ_D50(a);switch(o){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:a.colorNotation=exports.ColorNotation.RGB,a.channels=n.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.sRGB:a.colorNotation=exports.ColorNotation.sRGB,a.channels=n.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.Linear_sRGB:a.colorNotation=exports.ColorNotation.Linear_sRGB,a.channels=n.XYZ_D50_to_lin_sRGB(e.channels);break;case exports.ColorNotation.Display_P3:a.colorNotation=exports.ColorNotation.Display_P3,a.channels=n.XYZ_D50_to_P3(e.channels);break;case exports.ColorNotation.Rec2020:a.colorNotation=exports.ColorNotation.Rec2020,a.channels=n.XYZ_D50_to_rec_2020(e.channels);break;case exports.ColorNotation.ProPhoto_RGB:a.colorNotation=exports.ColorNotation.ProPhoto_RGB,a.channels=n.XYZ_D50_to_ProPhoto(e.channels);break;case exports.ColorNotation.A98_RGB:a.colorNotation=exports.ColorNotation.A98_RGB,a.channels=n.XYZ_D50_to_a98_RGB(e.channels);break;case exports.ColorNotation.HSL:a.colorNotation=exports.ColorNotation.HSL,a.channels=n.XYZ_D50_to_HSL(e.channels);break;case exports.ColorNotation.HWB:a.colorNotation=exports.ColorNotation.HWB,a.channels=n.XYZ_D50_to_HWB(e.channels);break;case exports.ColorNotation.Lab:a.colorNotation=exports.ColorNotation.Lab,a.channels=n.XYZ_D50_to_Lab(e.channels);break;case exports.ColorNotation.LCH:a.colorNotation=exports.ColorNotation.LCH,a.channels=n.XYZ_D50_to_LCH(e.channels);break;case exports.ColorNotation.OKLCH:a.colorNotation=exports.ColorNotation.OKLCH,a.channels=n.XYZ_D50_to_OKLCH(e.channels);break;case exports.ColorNotation.OKLab:a.colorNotation=exports.ColorNotation.OKLab,a.channels=n.XYZ_D50_to_OKLab(e.channels);break;case exports.ColorNotation.XYZ_D50:a.colorNotation=exports.ColorNotation.XYZ_D50,a.channels=n.XYZ_D50_to_XYZ_D50(e.channels);break;case exports.ColorNotation.XYZ_D65:a.colorNotation=exports.ColorNotation.XYZ_D65,a.channels=n.XYZ_D50_to_XYZ_D65(e.channels);break;default:throw new Error("Unsupported color notation")}}else a.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(o===e.colorNotation)a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else if(l.has(o)&&l.has(e.colorNotation))a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else switch(o){case exports.ColorNotation.HSL:switch(e.colorNotation){case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[2],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0])}break;case exports.ColorNotation.HWB:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2])}break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0])}break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0]);break;case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2])}}return a.channels=convertPowerlessComponentsToMissingComponents(a.channels,o),a}function convertPowerlessComponentsToMissingComponents(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:reducePrecision(a[1],4)<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1],4))+Math.max(0,reducePrecision(a[2],4))>=100&&(a[0]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1],4)<=0&&(a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1],6)<=0&&(a[2]=NaN)}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:(reducePrecision(a[2])<=0||reducePrecision(a[2])>=100)&&(a[0]=NaN,a[1]=NaN),reducePrecision(a[1])<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1]))+Math.max(0,reducePrecision(a[2]))>=100&&(a[0]=NaN);break;case exports.ColorNotation.Lab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN)}return a}function carryForwardMissingComponents(e,o,a,n){const t=[...a];for(const a of o)Number.isNaN(e[o[a]])&&(t[n[a]]=NaN);return t}function normalizeRelativeColorDataChannels(e){const o=new Map;switch(e.colorNotation){case exports.ColorNotation.RGB:case exports.ColorNotation.HEX:o.set("r",dummyNumberToken(255*e.channels[0])),o.set("g",dummyNumberToken(255*e.channels[1])),o.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HSL:o.set("h",dummyNumberToken(e.channels[0])),o.set("s",dummyNumberToken(e.channels[1])),o.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HWB:o.set("h",dummyNumberToken(e.channels[0])),o.set("w",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:o.set("l",dummyNumberToken(e.channels[0])),o.set("a",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:o.set("l",dummyNumberToken(e.channels[0])),o.set("c",dummyNumberToken(e.channels[1])),o.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.sRGB:case exports.ColorNotation.A98_RGB:case exports.ColorNotation.Display_P3:case exports.ColorNotation.Rec2020:case exports.ColorNotation.Linear_sRGB:case exports.ColorNotation.ProPhoto_RGB:o.set("r",dummyNumberToken(e.channels[0])),o.set("g",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.XYZ_D50:case exports.ColorNotation.XYZ_D65:o.set("x",dummyNumberToken(e.channels[0])),o.set("y",dummyNumberToken(e.channels[1])),o.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha))}return o}function noneToZeroInRelativeColorDataChannels(e){const o=new Map(e);for(const[a,n]of e)Number.isNaN(n[4].value)&&o.set(a,dummyNumberToken(0));return o}function dummyNumberToken(e){return[a.TokenType.Number,e.toString(),-1,-1,{value:e,type:a.NumberType.Number}]}function reducePrecision(e,o=7){if(Number.isNaN(e))return 0;const a=Math.pow(10,o);return Math.round(e*a)/a}function normalize(e,o,a,n){return Math.min(Math.max(e/o,a),n)}const s=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(s,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}const i=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,o){const n=[],l=[],s=[],u=[];let c,p,N=!1,m=!1;const h={colorNotation:exports.ColorNotation.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let y=n;for(let x=0;x=0){i=u.value[4].value;continue}}return!1}if(!s)return!1;n.push({color:s,percentage:i}),s=!1,i=!1}}if(s&&n.push({color:s,percentage:i}),2!==n.length)return!1;let u=n[0].percentage,c=n[1].percentage;return(!1===u||!(u<0||u>100))&&((!1===c||!(c<0||c>100))&&(!1===u&&!1===c?(u=50,c=50):!1!==u&&!1===c?c=100-u:!1===u&&!1!==c&&(u=100-c),(0!==u||0!==c)&&(!1!==u&&!1!==c&&(u+c>100&&(u=u/(u+c)*100,c=c/(u+c)*100),u+c<100&&(l=(u+c)/100,u=u/(u+c)*100,c=c/(u+c)*100),{a:{color:n[0].color,percentage:u},b:{color:n[1].color,percentage:c},alphaMultiplier:l}))))}function colorMixRectangular(e,o){if(!o)return!1;const a=o.a.color,n=o.b.color,t=o.a.percentage/100;let r=a.channels,l=n.channels,s=exports.ColorNotation.RGB,i=a.alpha;if("number"!=typeof i)return!1;let u=n.alpha;if("number"!=typeof u)return!1;switch(i=Number.isNaN(i)?u:i,u=Number.isNaN(u)?i:u,e){case"srgb":s=exports.ColorNotation.RGB;break;case"srgb-linear":s=exports.ColorNotation.Linear_sRGB;break;case"lab":s=exports.ColorNotation.Lab;break;case"oklab":s=exports.ColorNotation.OKLab;break;case"xyz-d50":s=exports.ColorNotation.XYZ_D50;break;case"xyz":case"xyz-d65":s=exports.ColorNotation.XYZ_D65}r=colorDataTo(a,s).channels,l=colorDataTo(n,s).channels,r[0]=fillInMissingComponent(r[0],l[0]),l[0]=fillInMissingComponent(l[0],r[0]),r[1]=fillInMissingComponent(r[1],l[1]),l[1]=fillInMissingComponent(l[1],r[1]),r[2]=fillInMissingComponent(r[2],l[2]),l[2]=fillInMissingComponent(l[2],r[2]),r[0]=premultiply(r[0],i),r[1]=premultiply(r[1],i),r[2]=premultiply(r[2],i),l[0]=premultiply(l[0],u),l[1]=premultiply(l[1],u),l[2]=premultiply(l[2],u);const c=interpolate(i,u,t),p={colorNotation:s,channels:[un_premultiply(interpolate(r[0],l[0],t),c),un_premultiply(interpolate(r[1],l[1],t),c),un_premultiply(interpolate(r[2],l[2],t),c)],alpha:c*o.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])};return(o.a.color.syntaxFlags.has(exports.SyntaxFlag.Experimental)||o.b.color.syntaxFlags.has(exports.SyntaxFlag.Experimental))&&p.syntaxFlags.add(exports.SyntaxFlag.Experimental),p}function colorMixPolar(e,o,a){if(!a)return!1;const n=a.a.color,t=a.b.color,r=a.a.percentage/100;let l=n.channels,s=t.channels,i=0,u=0,c=0,p=0,N=0,m=0,h=exports.ColorNotation.RGB,y=n.alpha;if("number"!=typeof y)return!1;let x=t.alpha;if("number"!=typeof x)return!1;switch(y=Number.isNaN(y)?x:y,x=Number.isNaN(x)?y:x,e){case"hsl":h=exports.ColorNotation.HSL;break;case"hwb":h=exports.ColorNotation.HWB;break;case"lch":h=exports.ColorNotation.LCH;break;case"oklch":h=exports.ColorNotation.OKLCH}switch(l=colorDataTo(n,h).channels,s=colorDataTo(t,h).channels,e){case"hsl":case"hwb":i=l[0],u=s[0],c=l[1],p=s[1],N=l[2],m=s[2];break;case"lch":case"oklch":c=l[0],p=s[0],N=l[1],m=s[1],i=l[2],u=s[2]}i=fillInMissingComponent(i,u),Number.isNaN(i)&&(i=0),u=fillInMissingComponent(u,i),Number.isNaN(u)&&(u=0),c=fillInMissingComponent(c,p),p=fillInMissingComponent(p,c),N=fillInMissingComponent(N,m),m=fillInMissingComponent(m,N);const T=u-i;switch(o){case"shorter":T>180?i+=360:T<-180&&(u+=360);break;case"longer":-1800?i+=360:u+=360);break;case"increasing":T<0&&(u+=360);break;case"decreasing":T>0&&(i+=360);break;default:throw new Error("Unknown hue interpolation method")}c=premultiply(c,y),N=premultiply(N,y),p=premultiply(p,x),m=premultiply(m,x);let b=[0,0,0];const C=interpolate(y,x,r);switch(e){case"hsl":case"hwb":b=[interpolate(i,u,r),un_premultiply(interpolate(c,p,r),C),un_premultiply(interpolate(N,m,r),C)];break;case"lch":case"oklch":b=[un_premultiply(interpolate(c,p,r),C),un_premultiply(interpolate(N,m,r),C),interpolate(i,u,r)]}const d={colorNotation:h,channels:b,alpha:C*a.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])};return(a.a.color.syntaxFlags.has(exports.SyntaxFlag.Experimental)||a.b.color.syntaxFlags.has(exports.SyntaxFlag.Experimental))&&d.syntaxFlags.add(exports.SyntaxFlag.Experimental),d}function fillInMissingComponent(e,o){return Number.isNaN(e)?o:e}function interpolate(e,o,a){return e*a+o*(1-a)}function premultiply(e,o){return Number.isNaN(o)?e:Number.isNaN(e)?NaN:e*o}function un_premultiply(e,o){return 0===o||Number.isNaN(o)?e:Number.isNaN(e)?NaN:e/o}function hex(e){const o=toLowerCaseAZ(e[4].value);if(o.match(/[^a-f0-9]/))return!1;const a={colorNotation:exports.ColorNotation.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.Hex])},n=o.length;if(3===n){const e=o[0],n=o[1],t=o[2];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a}if(6===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a}if(4===n){const e=o[0],n=o[1],t=o[2],r=o[3];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a.alpha=parseInt(r+r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}if(8===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5],r=o[6]+o[7];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a.alpha=parseInt(r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}return!1}function normalizeHue(e){if(e[0]===a.TokenType.Number)return e[4].value=e[4].value%360,e[1]=e[4].value.toString(),e;if(e[0]===a.TokenType.Dimension){let o=e[4].value;switch(toLowerCaseAZ(e[4].unit)){case"deg":break;case"rad":o=180*e[4].value/Math.PI;break;case"grad":o=.9*e[4].value;break;case"turn":o=360*e[4].value;break;default:return!1}return o%=360,[a.TokenType.Number,o.toString(),e[2],e[3],{value:o,type:a.NumberType.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(e,o,n){if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){if(3!==o)return!1;let n=normalize(e[4].value,1,0,100);return 3===o&&(n=normalize(e[4].value,1,0,1)),[a.TokenType.Number,n.toString(),e[2],e[3],{value:n,type:a.NumberType.Number}]}return!1}function normalize_modern_HSL_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o?t=normalize(e[4].value,100,0,1):1===o&&(t=normalize(e[4].value,1,0,1/0)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o?t=normalize(e[4].value,1,0,1):1===o&&(t=normalize(e[4].value,1,0,1/0)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function threeChannelLegacySyntax(e,o,n,l){const s=[],i=[],u=[],c=[],p={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(l)};let N=s;for(let o=0;ot.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=hslCommaSeparated(e);if(!1!==o)return o}{const a=hslSpaceSeparated(e,o);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,exports.ColorNotation.HSL,[exports.SyntaxFlag.LegacyHSL])}function hslSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,exports.ColorNotation.HSL,[],o)}function normalize_HWB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_Lab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,.8,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lab(e,o){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,exports.ColorNotation.Lab,[],o)}function normalize_LCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,100/150,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lch(e,o){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,exports.ColorNotation.LCH,[],o)}const N=new Map;for(const[e,o]of Object.entries(n.namedColors))N.set(e,o);function namedColor(e){const o=N.get(toLowerCaseAZ(e));return!!o&&{colorNotation:exports.ColorNotation.RGB,channels:[o[0]/255,o[1]/255,o[2]/255],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword,exports.SyntaxFlag.NamedColor])}}function normalize_OKLab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o||2===o?t=normalize(e[4].value,250,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklab(e,o){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,exports.ColorNotation.OKLab,[],o)}function normalize_OKLCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o?t=normalize(e[4].value,250,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklch(e,o){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,exports.ColorNotation.OKLCH,[],o)}function normalize_legacy_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);const t=normalize(e[4].value,100,0,1);return[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,0,1);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function rgb(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=rgbCommaSeparated(e);if(!1!==o)return(!o.syntaxFlags.has(exports.SyntaxFlag.HasNumberValues)||!o.syntaxFlags.has(exports.SyntaxFlag.HasPercentageValues))&&o}else{const a=rgbSpaceSeparated(e,o);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,exports.ColorNotation.RGB,[exports.SyntaxFlag.LegacyRGB])}function rgbSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,exports.ColorNotation.RGB,[],o)}function toPrecision(e,o=7){e=+e,o=+o;const a=(Math.floor(e)+"").length;if(o>a)return+e.toFixed(o-a);{const n=10**(a-o);return Math.round(e/n)*n}}function XYZ_D50_to_P3_Gamut(e){const o=n.XYZ_D50_to_P3(e);if(n.inGamut(o))return n.clip(o);let a=e.slice();return a=n.XYZ_D50_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.mapGamut(a,(e=>(e=n.OKLCH_to_OKLab(e),e=n.OKLab_to_XYZ(e),e=n.XYZ_to_lin_P3(e),n.gam_P3(e))),(e=>(e=n.lin_P3(e),e=n.lin_P3_to_XYZ(e),e=n.XYZ_to_OKLab(e),n.OKLab_to_OKLCH(e))))}function serializeWithAlpha(e,o,n,r){const l=[a.TokenType.CloseParen,")",-1,-1,void 0];if("number"==typeof e.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(s,4)?new t.FunctionNode(o,l,r):new t.FunctionNode(o,l,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Number,toPrecision(s,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Integer}])])}return new t.FunctionNode(o,l,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),e.alpha])}function XYZ_D50_to_sRGB_Gamut(e){const o=n.XYZ_D50_to_sRGB(e);if(n.inGamut(o))return n.clip(o);let a=e.slice();return a=n.XYZ_D50_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.mapGamut(a,(e=>(e=n.OKLCH_to_OKLab(e),e=n.OKLab_to_XYZ(e),e=n.XYZ_to_lin_sRGB(e),n.gam_sRGB(e))),(e=>(e=n.lin_sRGB(e),e=n.lin_sRGB_to_XYZ(e),e=n.XYZ_to_OKLab(e),n.OKLab_to_OKLCH(e))))}exports.color=function color(e){if(t.isFunctionNode(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return o=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,exports.ColorNotation.HWB,[],o);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color)}}var o;if(t.isTokenNode(e)){if(e.value[0]===a.TokenType.Hash)return hex(e.value);if(e.value[0]===a.TokenType.Ident){const o=namedColor(e.value[4].value);return!1!==o?o:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:exports.ColorNotation.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword])}}}return!1},exports.colorDataFitsDisplayP3_Gamut=function colorDataFitsDisplayP3_Gamut(e){const o={...e,channels:[...e.channels]};return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.Display_P3).channels.find((e=>e<-1e-5||e>1.00001))},exports.colorDataFitsRGB_Gamut=function colorDataFitsRGB_Gamut(e){const o={...e,channels:[...e.channels]};return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.RGB).channels.find((e=>e<-1e-5||e>1.00001))},exports.serializeHSL=function serializeHSL(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));r=o?n.XYZ_D50_to_HSL(n.sRGB_to_XYZ_D50(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels))):n.XYZ_D50_to_HSL(colorData_to_XYZ_D50(e).channels),r=r.map((e=>Number.isNaN(e)?0:e));const l=Math.min(360,Math.max(0,Math.round(toPrecision(r[0])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(r[1])))),i=Math.min(100,Math.max(0,Math.round(toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Percentage,s.toString()+"%",-1,-1,{value:r[1]}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Percentage,i.toString()+"%",-1,-1,{value:r[2]}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"hsl(",-1,-1,{value:"hsl"}],u,N):new t.FunctionNode([a.TokenType.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),e.alpha])},exports.serializeOKLCH=function serializeOKLCH(e){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let o=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.OKLCH&&(o=n.XYZ_D50_to_OKLCH(colorData_to_XYZ_D50(e).channels));const r=toPrecision(o[0],6),l=toPrecision(o[1],6),s=toPrecision(o[2],6),i=[a.TokenType.Function,"oklch(",-1,-1,{value:"oklch"}],u=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,i,u,[new t.TokenNode([a.TokenType.Number,r.toString(),-1,-1,{value:o[0],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:o[1],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:o[2],type:a.NumberType.Number}])])},exports.serializeP3=function serializeP3(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.Display_P3&&(r=o?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(e).channels):n.XYZ_D50_to_P3(colorData_to_XYZ_D50(e).channels));const l=toPrecision(r[0],6),s=toPrecision(r[1],6),i=toPrecision(r[2],6),u=[a.TokenType.Function,"color(",-1,-1,{value:"color"}],c=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,u,c,[new t.TokenNode([a.TokenType.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[1],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Number}])])},exports.serializeRGB=function serializeRGB(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));r=o?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels):n.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(e).channels);const l=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[0])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[1])))),i=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[1],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Integer}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"rgb(",-1,-1,{value:"rgb"}],u,N):new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),e.alpha])}; +"use strict";var e,o,a=require("@csstools/css-tokenizer"),n=require("@csstools/color-helpers"),t=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-calc");function colorData_to_XYZ_D50(e){switch(e.colorNotation){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:case exports.ColorNotation.sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Linear_sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Display_P3:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Rec2020:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.A98_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.ProPhoto_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HSL:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HWB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Lab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.LCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D50:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D65:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}exports.ColorNotation=void 0,(e=exports.ColorNotation||(exports.ColorNotation={})).A98_RGB="a98-rgb",e.Display_P3="display-p3",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65",exports.SyntaxFlag=void 0,(o=exports.SyntaxFlag||(exports.SyntaxFlag={})).ColorKeyword="color-keyword",o.HasAlpha="has-alpha",o.HasDimensionValues="has-dimension-values",o.HasNoneKeywords="has-none-keywords",o.HasNumberValues="has-number-values",o.HasPercentageAlpha="has-percentage-alpha",o.HasPercentageValues="has-percentage-values",o.HasVariableAlpha="has-variable-alpha",o.Hex="hex",o.LegacyHSL="legacy-hsl",o.LegacyRGB="legacy-rgb",o.NamedColor="named-color",o.RelativeColorSyntax="relative-color-syntax",o.ColorMix="color-mix",o.Experimental="experimental";const l=new Set([exports.ColorNotation.A98_RGB,exports.ColorNotation.Display_P3,exports.ColorNotation.HEX,exports.ColorNotation.Linear_sRGB,exports.ColorNotation.ProPhoto_RGB,exports.ColorNotation.RGB,exports.ColorNotation.sRGB,exports.ColorNotation.Rec2020,exports.ColorNotation.XYZ_D50,exports.ColorNotation.XYZ_D65]);function colorDataTo(e,o){const a={...e};if(e.colorNotation!==o){const e=colorData_to_XYZ_D50(a);switch(o){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:a.colorNotation=exports.ColorNotation.RGB,a.channels=n.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.sRGB:a.colorNotation=exports.ColorNotation.sRGB,a.channels=n.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.Linear_sRGB:a.colorNotation=exports.ColorNotation.Linear_sRGB,a.channels=n.XYZ_D50_to_lin_sRGB(e.channels);break;case exports.ColorNotation.Display_P3:a.colorNotation=exports.ColorNotation.Display_P3,a.channels=n.XYZ_D50_to_P3(e.channels);break;case exports.ColorNotation.Rec2020:a.colorNotation=exports.ColorNotation.Rec2020,a.channels=n.XYZ_D50_to_rec_2020(e.channels);break;case exports.ColorNotation.ProPhoto_RGB:a.colorNotation=exports.ColorNotation.ProPhoto_RGB,a.channels=n.XYZ_D50_to_ProPhoto(e.channels);break;case exports.ColorNotation.A98_RGB:a.colorNotation=exports.ColorNotation.A98_RGB,a.channels=n.XYZ_D50_to_a98_RGB(e.channels);break;case exports.ColorNotation.HSL:a.colorNotation=exports.ColorNotation.HSL,a.channels=n.XYZ_D50_to_HSL(e.channels);break;case exports.ColorNotation.HWB:a.colorNotation=exports.ColorNotation.HWB,a.channels=n.XYZ_D50_to_HWB(e.channels);break;case exports.ColorNotation.Lab:a.colorNotation=exports.ColorNotation.Lab,a.channels=n.XYZ_D50_to_Lab(e.channels);break;case exports.ColorNotation.LCH:a.colorNotation=exports.ColorNotation.LCH,a.channels=n.XYZ_D50_to_LCH(e.channels);break;case exports.ColorNotation.OKLCH:a.colorNotation=exports.ColorNotation.OKLCH,a.channels=n.XYZ_D50_to_OKLCH(e.channels);break;case exports.ColorNotation.OKLab:a.colorNotation=exports.ColorNotation.OKLab,a.channels=n.XYZ_D50_to_OKLab(e.channels);break;case exports.ColorNotation.XYZ_D50:a.colorNotation=exports.ColorNotation.XYZ_D50,a.channels=n.XYZ_D50_to_XYZ_D50(e.channels);break;case exports.ColorNotation.XYZ_D65:a.colorNotation=exports.ColorNotation.XYZ_D65,a.channels=n.XYZ_D50_to_XYZ_D65(e.channels);break;default:throw new Error("Unsupported color notation")}}else a.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(o===e.colorNotation)a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else if(l.has(o)&&l.has(e.colorNotation))a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else switch(o){case exports.ColorNotation.HSL:switch(e.colorNotation){case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[2],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0])}break;case exports.ColorNotation.HWB:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2])}break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0])}break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0]);break;case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2])}}return a.channels=convertPowerlessComponentsToMissingComponents(a.channels,o),a}function convertPowerlessComponentsToMissingComponents(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:reducePrecision(a[1],4)<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1],4))+Math.max(0,reducePrecision(a[2],4))>=100&&(a[0]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1],4)<=0&&(a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1],6)<=0&&(a[2]=NaN)}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:(reducePrecision(a[2])<=0||reducePrecision(a[2])>=100)&&(a[0]=NaN,a[1]=NaN),reducePrecision(a[1])<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1]))+Math.max(0,reducePrecision(a[2]))>=100&&(a[0]=NaN);break;case exports.ColorNotation.Lab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN)}return a}function carryForwardMissingComponents(e,o,a,n){const t=[...a];for(const a of o)Number.isNaN(e[o[a]])&&(t[n[a]]=NaN);return t}function normalizeRelativeColorDataChannels(e){const o=new Map;switch(e.colorNotation){case exports.ColorNotation.RGB:case exports.ColorNotation.HEX:o.set("r",dummyNumberToken(255*e.channels[0])),o.set("g",dummyNumberToken(255*e.channels[1])),o.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HSL:o.set("h",dummyNumberToken(e.channels[0])),o.set("s",dummyNumberToken(e.channels[1])),o.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HWB:o.set("h",dummyNumberToken(e.channels[0])),o.set("w",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:o.set("l",dummyNumberToken(e.channels[0])),o.set("a",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:o.set("l",dummyNumberToken(e.channels[0])),o.set("c",dummyNumberToken(e.channels[1])),o.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.sRGB:case exports.ColorNotation.A98_RGB:case exports.ColorNotation.Display_P3:case exports.ColorNotation.Rec2020:case exports.ColorNotation.Linear_sRGB:case exports.ColorNotation.ProPhoto_RGB:o.set("r",dummyNumberToken(e.channels[0])),o.set("g",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.XYZ_D50:case exports.ColorNotation.XYZ_D65:o.set("x",dummyNumberToken(e.channels[0])),o.set("y",dummyNumberToken(e.channels[1])),o.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha))}return o}function noneToZeroInRelativeColorDataChannels(e){const o=new Map(e);for(const[a,n]of e)Number.isNaN(n[4].value)&&o.set(a,dummyNumberToken(0));return o}function dummyNumberToken(e){return[a.TokenType.Number,e.toString(),-1,-1,{value:e,type:a.NumberType.Number}]}function reducePrecision(e,o=7){if(Number.isNaN(e))return 0;const a=Math.pow(10,o);return Math.round(e*a)/a}function normalize(e,o,a,n){return Math.min(Math.max(e/o,a),n)}const s=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(s,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}const i=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,o){const n=[],l=[],s=[],u=[];let c,p,N=!1,m=!1;const h={colorNotation:exports.ColorNotation.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let y=n;for(let x=0;x=0){i=u.value[4].value;continue}}return!1}if(!s)return!1;n.push({color:s,percentage:i}),s=!1,i=!1}}if(s&&n.push({color:s,percentage:i}),2!==n.length)return!1;let u=n[0].percentage,c=n[1].percentage;return(!1===u||!(u<0||u>100))&&((!1===c||!(c<0||c>100))&&(!1===u&&!1===c?(u=50,c=50):!1!==u&&!1===c?c=100-u:!1===u&&!1!==c&&(u=100-c),(0!==u||0!==c)&&(!1!==u&&!1!==c&&(u+c>100&&(u=u/(u+c)*100,c=c/(u+c)*100),u+c<100&&(l=(u+c)/100,u=u/(u+c)*100,c=c/(u+c)*100),{a:{color:n[0].color,percentage:u},b:{color:n[1].color,percentage:c},alphaMultiplier:l}))))}function colorMixRectangular(e,o){if(!o)return!1;const a=o.a.color,n=o.b.color,t=o.a.percentage/100;let r=a.channels,l=n.channels,s=exports.ColorNotation.RGB,i=a.alpha;if("number"!=typeof i)return!1;let u=n.alpha;if("number"!=typeof u)return!1;switch(i=Number.isNaN(i)?u:i,u=Number.isNaN(u)?i:u,e){case"srgb":s=exports.ColorNotation.RGB;break;case"srgb-linear":s=exports.ColorNotation.Linear_sRGB;break;case"lab":s=exports.ColorNotation.Lab;break;case"oklab":s=exports.ColorNotation.OKLab;break;case"xyz-d50":s=exports.ColorNotation.XYZ_D50;break;case"xyz":case"xyz-d65":s=exports.ColorNotation.XYZ_D65}r=colorDataTo(a,s).channels,l=colorDataTo(n,s).channels,r[0]=fillInMissingComponent(r[0],l[0]),l[0]=fillInMissingComponent(l[0],r[0]),r[1]=fillInMissingComponent(r[1],l[1]),l[1]=fillInMissingComponent(l[1],r[1]),r[2]=fillInMissingComponent(r[2],l[2]),l[2]=fillInMissingComponent(l[2],r[2]),r[0]=premultiply(r[0],i),r[1]=premultiply(r[1],i),r[2]=premultiply(r[2],i),l[0]=premultiply(l[0],u),l[1]=premultiply(l[1],u),l[2]=premultiply(l[2],u);const c=interpolate(i,u,t),p={colorNotation:s,channels:[un_premultiply(interpolate(r[0],l[0],t),c),un_premultiply(interpolate(r[1],l[1],t),c),un_premultiply(interpolate(r[2],l[2],t),c)],alpha:c*o.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])};return(o.a.color.syntaxFlags.has(exports.SyntaxFlag.Experimental)||o.b.color.syntaxFlags.has(exports.SyntaxFlag.Experimental))&&p.syntaxFlags.add(exports.SyntaxFlag.Experimental),p}function colorMixPolar(e,o,a){if(!a)return!1;const n=a.a.color,t=a.b.color,r=a.a.percentage/100;let l=n.channels,s=t.channels,i=0,u=0,c=0,p=0,N=0,m=0,h=exports.ColorNotation.RGB,y=n.alpha;if("number"!=typeof y)return!1;let x=t.alpha;if("number"!=typeof x)return!1;switch(y=Number.isNaN(y)?x:y,x=Number.isNaN(x)?y:x,e){case"hsl":h=exports.ColorNotation.HSL;break;case"hwb":h=exports.ColorNotation.HWB;break;case"lch":h=exports.ColorNotation.LCH;break;case"oklch":h=exports.ColorNotation.OKLCH}switch(l=colorDataTo(n,h).channels,s=colorDataTo(t,h).channels,e){case"hsl":case"hwb":i=l[0],u=s[0],c=l[1],p=s[1],N=l[2],m=s[2];break;case"lch":case"oklch":c=l[0],p=s[0],N=l[1],m=s[1],i=l[2],u=s[2]}i=fillInMissingComponent(i,u),Number.isNaN(i)&&(i=0),u=fillInMissingComponent(u,i),Number.isNaN(u)&&(u=0),c=fillInMissingComponent(c,p),p=fillInMissingComponent(p,c),N=fillInMissingComponent(N,m),m=fillInMissingComponent(m,N);const T=u-i;switch(o){case"shorter":T>180?i+=360:T<-180&&(u+=360);break;case"longer":-1800?i+=360:u+=360);break;case"increasing":T<0&&(u+=360);break;case"decreasing":T>0&&(i+=360);break;default:throw new Error("Unknown hue interpolation method")}c=premultiply(c,y),N=premultiply(N,y),p=premultiply(p,x),m=premultiply(m,x);let b=[0,0,0];const C=interpolate(y,x,r);switch(e){case"hsl":case"hwb":b=[interpolate(i,u,r),un_premultiply(interpolate(c,p,r),C),un_premultiply(interpolate(N,m,r),C)];break;case"lch":case"oklch":b=[un_premultiply(interpolate(c,p,r),C),un_premultiply(interpolate(N,m,r),C),interpolate(i,u,r)]}const d={colorNotation:h,channels:b,alpha:C*a.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])};return(a.a.color.syntaxFlags.has(exports.SyntaxFlag.Experimental)||a.b.color.syntaxFlags.has(exports.SyntaxFlag.Experimental))&&d.syntaxFlags.add(exports.SyntaxFlag.Experimental),d}function fillInMissingComponent(e,o){return Number.isNaN(e)?o:e}function interpolate(e,o,a){return e*a+o*(1-a)}function premultiply(e,o){return Number.isNaN(o)?e:Number.isNaN(e)?NaN:e*o}function un_premultiply(e,o){return 0===o||Number.isNaN(o)?e:Number.isNaN(e)?NaN:e/o}function hex(e){const o=toLowerCaseAZ(e[4].value);if(o.match(/[^a-f0-9]/))return!1;const a={colorNotation:exports.ColorNotation.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.Hex])},n=o.length;if(3===n){const e=o[0],n=o[1],t=o[2];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a}if(6===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a}if(4===n){const e=o[0],n=o[1],t=o[2],r=o[3];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a.alpha=parseInt(r+r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}if(8===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5],r=o[6]+o[7];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a.alpha=parseInt(r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}return!1}function normalizeHue(e){if(e[0]===a.TokenType.Number)return e[4].value=e[4].value%360,e[1]=e[4].value.toString(),e;if(e[0]===a.TokenType.Dimension){let o=e[4].value;switch(toLowerCaseAZ(e[4].unit)){case"deg":break;case"rad":o=180*e[4].value/Math.PI;break;case"grad":o=.9*e[4].value;break;case"turn":o=360*e[4].value;break;default:return!1}return o%=360,[a.TokenType.Number,o.toString(),e[2],e[3],{value:o,type:a.NumberType.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(e,o,n){if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){if(3!==o)return!1;let n=normalize(e[4].value,1,0,100);return 3===o&&(n=normalize(e[4].value,1,0,1)),[a.TokenType.Number,n.toString(),e[2],e[3],{value:n,type:a.NumberType.Number}]}return!1}function normalize_modern_HSL_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o?t=normalize(e[4].value,100,0,1):1===o&&(t=normalize(e[4].value,1,0,1/0)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o?t=normalize(e[4].value,1,0,1):1===o&&(t=normalize(e[4].value,1,0,1/0)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function threeChannelLegacySyntax(e,o,n,l){const s=[],i=[],u=[],c=[],p={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(l)};let N=s;for(let o=0;ot.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=hslCommaSeparated(e);if(!1!==o)return o}{const a=hslSpaceSeparated(e,o);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,exports.ColorNotation.HSL,[exports.SyntaxFlag.LegacyHSL])}function hslSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,exports.ColorNotation.HSL,[],o)}function normalize_HWB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_Lab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,.8,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lab(e,o){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,exports.ColorNotation.Lab,[],o)}function normalize_LCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,100/150,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lch(e,o){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,exports.ColorNotation.LCH,[],o)}const N=new Map;for(const[e,o]of Object.entries(n.namedColors))N.set(e,o);function namedColor(e){const o=N.get(toLowerCaseAZ(e));return!!o&&{colorNotation:exports.ColorNotation.RGB,channels:[o[0]/255,o[1]/255,o[2]/255],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword,exports.SyntaxFlag.NamedColor])}}function normalize_OKLab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o||2===o?t=normalize(e[4].value,250,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklab(e,o){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,exports.ColorNotation.OKLab,[],o)}function normalize_OKLCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o?t=normalize(e[4].value,250,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklch(e,o){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,exports.ColorNotation.OKLCH,[],o)}function normalize_legacy_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);const t=normalize(e[4].value,100,0,1);return[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,0,1);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===e[4].value.toLowerCase())return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function rgb(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=rgbCommaSeparated(e);if(!1!==o)return(!o.syntaxFlags.has(exports.SyntaxFlag.HasNumberValues)||!o.syntaxFlags.has(exports.SyntaxFlag.HasPercentageValues))&&o}else{const a=rgbSpaceSeparated(e,o);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,exports.ColorNotation.RGB,[exports.SyntaxFlag.LegacyRGB])}function rgbSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,exports.ColorNotation.RGB,[],o)}function toPrecision(e,o=7){e=+e,o=+o;const a=(Math.floor(e)+"").length;if(o>a)return+e.toFixed(o-a);{const n=10**(a-o);return Math.round(e/n)*n}}function XYZ_D50_to_P3_Gamut(e){const o=n.XYZ_D50_to_P3(e);if(n.inGamut(o))return n.clip(o);let a=e.slice();return a=n.XYZ_D50_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.mapGamut(a,(e=>(e=n.OKLCH_to_OKLab(e),e=n.OKLab_to_XYZ(e),e=n.XYZ_to_lin_P3(e),n.gam_P3(e))),(e=>(e=n.lin_P3(e),e=n.lin_P3_to_XYZ(e),e=n.XYZ_to_OKLab(e),n.OKLab_to_OKLCH(e))))}function serializeWithAlpha(e,o,n,r){const l=[a.TokenType.CloseParen,")",-1,-1,void 0];if("number"==typeof e.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(s,4)?new t.FunctionNode(o,l,r):new t.FunctionNode(o,l,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Number,toPrecision(s,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Integer}])])}return new t.FunctionNode(o,l,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),e.alpha])}function XYZ_D50_to_sRGB_Gamut(e){const o=n.XYZ_D50_to_sRGB(e);if(n.inGamut(o))return n.clip(o);let a=e.slice();return a=n.XYZ_D50_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.mapGamut(a,(e=>(e=n.OKLCH_to_OKLab(e),e=n.OKLab_to_XYZ(e),e=n.XYZ_to_lin_sRGB(e),n.gam_sRGB(e))),(e=>(e=n.lin_sRGB(e),e=n.lin_sRGB_to_XYZ(e),e=n.XYZ_to_OKLab(e),n.OKLab_to_OKLCH(e))))}exports.color=function color(e){if(t.isFunctionNode(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return o=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,exports.ColorNotation.HWB,[],o);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color)}}var o;if(t.isTokenNode(e)){if(e.value[0]===a.TokenType.Hash)return hex(e.value);if(e.value[0]===a.TokenType.Ident){const o=namedColor(e.value[4].value);return!1!==o?o:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:exports.ColorNotation.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword])}}}return!1},exports.colorDataFitsDisplayP3_Gamut=function colorDataFitsDisplayP3_Gamut(e){const o={...e,channels:[...e.channels]};return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.Display_P3).channels.find((e=>e<-1e-5||e>1.00001))},exports.colorDataFitsRGB_Gamut=function colorDataFitsRGB_Gamut(e){const o={...e,channels:[...e.channels]};return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.RGB).channels.find((e=>e<-1e-5||e>1.00001))},exports.serializeHSL=function serializeHSL(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));r=o?n.XYZ_D50_to_HSL(n.sRGB_to_XYZ_D50(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels))):n.XYZ_D50_to_HSL(colorData_to_XYZ_D50(e).channels),r=r.map((e=>Number.isNaN(e)?0:e));const l=Math.min(360,Math.max(0,Math.round(toPrecision(r[0])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(r[1])))),i=Math.min(100,Math.max(0,Math.round(toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Percentage,s.toString()+"%",-1,-1,{value:r[1]}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Percentage,i.toString()+"%",-1,-1,{value:r[2]}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"hsl(",-1,-1,{value:"hsl"}],u,N):new t.FunctionNode([a.TokenType.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),e.alpha])},exports.serializeOKLCH=function serializeOKLCH(e){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let o=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.OKLCH&&(o=n.XYZ_D50_to_OKLCH(colorData_to_XYZ_D50(e).channels));const r=toPrecision(o[0],6),l=toPrecision(o[1],6),s=toPrecision(o[2],6),i=[a.TokenType.Function,"oklch(",-1,-1,{value:"oklch"}],u=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,i,u,[new t.TokenNode([a.TokenType.Number,r.toString(),-1,-1,{value:o[0],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:o[1],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:o[2],type:a.NumberType.Number}])])},exports.serializeP3=function serializeP3(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.Display_P3&&(r=o?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(e).channels):n.XYZ_D50_to_P3(colorData_to_XYZ_D50(e).channels));const l=toPrecision(r[0],6),s=toPrecision(r[1],6),i=toPrecision(r[2],6),u=[a.TokenType.Function,"color(",-1,-1,{value:"color"}],c=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,u,c,[new t.TokenNode([a.TokenType.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[1],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Number}])])},exports.serializeRGB=function serializeRGB(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));r=o?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels):n.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(e).channels);const l=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[0])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[1])))),i=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[1],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Integer}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"rgb(",-1,-1,{value:"rgb"}],u,N):new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),e.alpha])}; diff --git a/packages/css-color-parser/dist/index.mjs b/packages/css-color-parser/dist/index.mjs index f75ef4563..dc97a8b52 100644 --- a/packages/css-color-parser/dist/index.mjs +++ b/packages/css-color-parser/dist/index.mjs @@ -1 +1 @@ -import{TokenType as e,NumberType as a}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D50 as n,XYZ_D50_to_XYZ_D50 as r,OKLCH_to_XYZ_D50 as o,LCH_to_XYZ_D50 as t,OKLab_to_XYZ_D50 as l,Lab_to_XYZ_D50 as s,HWB_to_XYZ_D50 as u,HSL_to_XYZ_D50 as i,ProPhoto_RGB_to_XYZ_D50 as c,a98_RGB_to_XYZ_D50 as m,rec_2020_to_XYZ_D50 as h,P3_to_XYZ_D50 as N,lin_sRGB_to_XYZ_D50 as p,sRGB_to_XYZ_D50 as b,XYZ_D50_to_XYZ_D65 as g,XYZ_D50_to_OKLab as v,XYZ_D50_to_OKLCH as d,XYZ_D50_to_LCH as f,XYZ_D50_to_Lab as y,XYZ_D50_to_HWB as C,XYZ_D50_to_HSL as w,XYZ_D50_to_a98_RGB as _,XYZ_D50_to_ProPhoto as H,XYZ_D50_to_rec_2020 as x,XYZ_D50_to_P3 as L,XYZ_D50_to_lin_sRGB as P,XYZ_D50_to_sRGB as D,namedColors as S,inGamut as k,clip as z,mapGamut as F,OKLCH_to_OKLab as Z,OKLab_to_XYZ as M,XYZ_to_lin_P3 as R,gam_P3 as B,lin_P3 as G,lin_P3_to_XYZ as V,XYZ_to_OKLab as A,OKLab_to_OKLCH as T,XYZ_to_lin_sRGB as I,gam_sRGB as X,lin_sRGB as K,lin_sRGB_to_XYZ as Y}from"@csstools/color-helpers";import{isWhitespaceNode as O,isCommentNode as E,isTokenNode as W,isFunctionNode as U,TokenNode as $,FunctionNode as j,WhitespaceNode as q}from"@csstools/css-parser-algorithms";import{mathFunctionNames as J,calcFromComponentValues as Q}from"@csstools/css-calc";var ee,ae;function colorData_to_XYZ_D50(e){switch(e.colorNotation){case ee.HEX:case ee.RGB:case ee.sRGB:return{...e,colorNotation:ee.XYZ_D50,channels:b(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Linear_sRGB:return{...e,colorNotation:ee.XYZ_D50,channels:p(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Display_P3:return{...e,colorNotation:ee.XYZ_D50,channels:N(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Rec2020:return{...e,colorNotation:ee.XYZ_D50,channels:h(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.A98_RGB:return{...e,colorNotation:ee.XYZ_D50,channels:m(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.ProPhoto_RGB:return{...e,colorNotation:ee.XYZ_D50,channels:c(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.HSL:return{...e,colorNotation:ee.XYZ_D50,channels:i(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.HWB:return{...e,colorNotation:ee.XYZ_D50,channels:u(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Lab:return{...e,colorNotation:ee.XYZ_D50,channels:s(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.OKLab:return{...e,colorNotation:ee.XYZ_D50,channels:l(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.LCH:return{...e,colorNotation:ee.XYZ_D50,channels:t(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.OKLCH:return{...e,colorNotation:ee.XYZ_D50,channels:o(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.XYZ_D50:return{...e,colorNotation:ee.XYZ_D50,channels:r(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.XYZ_D65:return{...e,colorNotation:ee.XYZ_D50,channels:n(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(ee||(ee={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.Experimental="experimental"}(ae||(ae={}));const ne=new Set([ee.A98_RGB,ee.Display_P3,ee.HEX,ee.Linear_sRGB,ee.ProPhoto_RGB,ee.RGB,ee.sRGB,ee.Rec2020,ee.XYZ_D50,ee.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a){const e=colorData_to_XYZ_D50(n);switch(a){case ee.HEX:case ee.RGB:n.colorNotation=ee.RGB,n.channels=D(e.channels);break;case ee.sRGB:n.colorNotation=ee.sRGB,n.channels=D(e.channels);break;case ee.Linear_sRGB:n.colorNotation=ee.Linear_sRGB,n.channels=P(e.channels);break;case ee.Display_P3:n.colorNotation=ee.Display_P3,n.channels=L(e.channels);break;case ee.Rec2020:n.colorNotation=ee.Rec2020,n.channels=x(e.channels);break;case ee.ProPhoto_RGB:n.colorNotation=ee.ProPhoto_RGB,n.channels=H(e.channels);break;case ee.A98_RGB:n.colorNotation=ee.A98_RGB,n.channels=_(e.channels);break;case ee.HSL:n.colorNotation=ee.HSL,n.channels=w(e.channels);break;case ee.HWB:n.colorNotation=ee.HWB,n.channels=C(e.channels);break;case ee.Lab:n.colorNotation=ee.Lab,n.channels=y(e.channels);break;case ee.LCH:n.colorNotation=ee.LCH,n.channels=f(e.channels);break;case ee.OKLCH:n.colorNotation=ee.OKLCH,n.channels=d(e.channels);break;case ee.OKLab:n.colorNotation=ee.OKLab,n.channels=v(e.channels);break;case ee.XYZ_D50:n.colorNotation=ee.XYZ_D50,n.channels=r(e.channels);break;case ee.XYZ_D65:n.colorNotation=ee.XYZ_D65,n.channels=g(e.channels);break;default:throw new Error("Unsupported color notation")}}else n.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else if(ne.has(a)&&ne.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else switch(a){case ee.HSL:switch(e.colorNotation){case ee.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[2],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0])}break;case ee.HWB:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2])}break;case ee.Lab:case ee.OKLab:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0])}break;case ee.LCH:case ee.OKLCH:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0]);break;case ee.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2])}}return n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case ee.HSL:reducePrecision(n[1],4)<=0&&(n[0]=NaN);break;case ee.HWB:Math.max(0,reducePrecision(n[1],4))+Math.max(0,reducePrecision(n[2],4))>=100&&(n[0]=NaN);break;case ee.LCH:reducePrecision(n[1],4)<=0&&(n[2]=NaN);break;case ee.OKLCH:reducePrecision(n[1],6)<=0&&(n[2]=NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case ee.HSL:(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=NaN,n[1]=NaN),reducePrecision(n[1])<=0&&(n[0]=NaN);break;case ee.HWB:Math.max(0,reducePrecision(n[1]))+Math.max(0,reducePrecision(n[2]))>=100&&(n[0]=NaN);break;case ee.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case ee.LCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case ee.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN);break;case ee.OKLCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN)}return n}function carryForwardMissingComponents(e,a,n,r){const o=[...n];for(const n of a)Number.isNaN(e[a[n]])&&(o[r[n]]=NaN);return o}function normalizeRelativeColorDataChannels(e){const a=new Map;switch(e.colorNotation){case ee.RGB:case ee.HEX:a.set("r",dummyNumberToken(255*e.channels[0])),a.set("g",dummyNumberToken(255*e.channels[1])),a.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.HSL:a.set("h",dummyNumberToken(e.channels[0])),a.set("s",dummyNumberToken(e.channels[1])),a.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.HWB:a.set("h",dummyNumberToken(e.channels[0])),a.set("w",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.Lab:case ee.OKLab:a.set("l",dummyNumberToken(e.channels[0])),a.set("a",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.LCH:case ee.OKLCH:a.set("l",dummyNumberToken(e.channels[0])),a.set("c",dummyNumberToken(e.channels[1])),a.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.sRGB:case ee.A98_RGB:case ee.Display_P3:case ee.Rec2020:case ee.Linear_sRGB:case ee.ProPhoto_RGB:a.set("r",dummyNumberToken(e.channels[0])),a.set("g",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.XYZ_D50:case ee.XYZ_D65:a.set("x",dummyNumberToken(e.channels[0])),a.set("y",dummyNumberToken(e.channels[1])),a.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha))}return a}function noneToZeroInRelativeColorDataChannels(e){const a=new Map(e);for(const[n,r]of e)Number.isNaN(r[4].value)&&a.set(n,dummyNumberToken(0));return a}function dummyNumberToken(n){return[e.Number,n.toString(),-1,-1,{value:n,type:a.Number}]}function reducePrecision(e,a=7){if(Number.isNaN(e))return 0;const n=Math.pow(10,a);return Math.round(e*n)/n}function colorDataFitsRGB_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,ee.RGB).channels.find((e=>e<-1e-5||e>1.00001))}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,ee.Display_P3).channels.find((e=>e<-1e-5||e>1.00001))}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const re=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(re,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}const oe=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(a,n){const r=[],o=[],t=[],l=[];let s,u,i=!1,c=!1;const m={colorNotation:ee.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let h=r;for(let N=0;N=0){l=s.value[4].value;continue}}return!1}if(!t)return!1;r.push({color:t,percentage:l}),t=!1,l=!1}}if(t&&r.push({color:t,percentage:l}),2!==r.length)return!1;let s=r[0].percentage,u=r[1].percentage;return(!1===s||!(s<0||s>100))&&((!1===u||!(u<0||u>100))&&(!1===s&&!1===u?(s=50,u=50):!1!==s&&!1===u?u=100-s:!1===s&&!1!==u&&(s=100-u),(0!==s||0!==u)&&(!1!==s&&!1!==u&&(s+u>100&&(s=s/(s+u)*100,u=u/(s+u)*100),s+u<100&&(o=(s+u)/100,s=s/(s+u)*100,u=u/(s+u)*100),{a:{color:r[0].color,percentage:s},b:{color:r[1].color,percentage:u},alphaMultiplier:o}))))}function colorMixRectangular(e,a){if(!a)return!1;const n=a.a.color,r=a.b.color,o=a.a.percentage/100;let t=n.channels,l=r.channels,s=ee.RGB,u=n.alpha;if("number"!=typeof u)return!1;let i=r.alpha;if("number"!=typeof i)return!1;switch(u=Number.isNaN(u)?i:u,i=Number.isNaN(i)?u:i,e){case"srgb":s=ee.RGB;break;case"srgb-linear":s=ee.Linear_sRGB;break;case"lab":s=ee.Lab;break;case"oklab":s=ee.OKLab;break;case"xyz-d50":s=ee.XYZ_D50;break;case"xyz":case"xyz-d65":s=ee.XYZ_D65}t=colorDataTo(n,s).channels,l=colorDataTo(r,s).channels,t[0]=fillInMissingComponent(t[0],l[0]),l[0]=fillInMissingComponent(l[0],t[0]),t[1]=fillInMissingComponent(t[1],l[1]),l[1]=fillInMissingComponent(l[1],t[1]),t[2]=fillInMissingComponent(t[2],l[2]),l[2]=fillInMissingComponent(l[2],t[2]),t[0]=premultiply(t[0],u),t[1]=premultiply(t[1],u),t[2]=premultiply(t[2],u),l[0]=premultiply(l[0],i),l[1]=premultiply(l[1],i),l[2]=premultiply(l[2],i);const c=interpolate(u,i,o),m={colorNotation:s,channels:[un_premultiply(interpolate(t[0],l[0],o),c),un_premultiply(interpolate(t[1],l[1],o),c),un_premultiply(interpolate(t[2],l[2],o),c)],alpha:c*a.alphaMultiplier,syntaxFlags:new Set([ae.ColorMix])};return(a.a.color.syntaxFlags.has(ae.Experimental)||a.b.color.syntaxFlags.has(ae.Experimental))&&m.syntaxFlags.add(ae.Experimental),m}function colorMixPolar(e,a,n){if(!n)return!1;const r=n.a.color,o=n.b.color,t=n.a.percentage/100;let l=r.channels,s=o.channels,u=0,i=0,c=0,m=0,h=0,N=0,p=ee.RGB,b=r.alpha;if("number"!=typeof b)return!1;let g=o.alpha;if("number"!=typeof g)return!1;switch(b=Number.isNaN(b)?g:b,g=Number.isNaN(g)?b:g,e){case"hsl":p=ee.HSL;break;case"hwb":p=ee.HWB;break;case"lch":p=ee.LCH;break;case"oklch":p=ee.OKLCH}switch(l=colorDataTo(r,p).channels,s=colorDataTo(o,p).channels,e){case"hsl":case"hwb":u=l[0],i=s[0],c=l[1],m=s[1],h=l[2],N=s[2];break;case"lch":case"oklch":c=l[0],m=s[0],h=l[1],N=s[1],u=l[2],i=s[2]}u=fillInMissingComponent(u,i),Number.isNaN(u)&&(u=0),i=fillInMissingComponent(i,u),Number.isNaN(i)&&(i=0),c=fillInMissingComponent(c,m),m=fillInMissingComponent(m,c),h=fillInMissingComponent(h,N),N=fillInMissingComponent(N,h);const v=i-u;switch(a){case"shorter":v>180?u+=360:v<-180&&(i+=360);break;case"longer":-1800?u+=360:i+=360);break;case"increasing":v<0&&(i+=360);break;case"decreasing":v>0&&(u+=360);break;default:throw new Error("Unknown hue interpolation method")}c=premultiply(c,b),h=premultiply(h,b),m=premultiply(m,g),N=premultiply(N,g);let d=[0,0,0];const f=interpolate(b,g,t);switch(e){case"hsl":case"hwb":d=[interpolate(u,i,t),un_premultiply(interpolate(c,m,t),f),un_premultiply(interpolate(h,N,t),f)];break;case"lch":case"oklch":d=[un_premultiply(interpolate(c,m,t),f),un_premultiply(interpolate(h,N,t),f),interpolate(u,i,t)]}const y={colorNotation:p,channels:d,alpha:f*n.alphaMultiplier,syntaxFlags:new Set([ae.ColorMix])};return(n.a.color.syntaxFlags.has(ae.Experimental)||n.b.color.syntaxFlags.has(ae.Experimental))&&y.syntaxFlags.add(ae.Experimental),y}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*n+a*(1-n)}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?NaN:e/a}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:ee.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([ae.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(ae.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(ae.HasAlpha),n}return!1}function normalizeHue(n){if(n[0]===e.Number)return n[4].value=n[4].value%360,n[1]=n[4].value.toString(),n;if(n[0]===e.Dimension){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return r%=360,[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,r,o){if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){if(3!==r)return!1;let o=normalize(n[4].value,1,0,100);return 3===r&&(o=normalize(n[4].value,1,0,1)),[e.Number,o.toString(),n[2],n[3],{value:o,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=n[4].value;return 3===r?t=normalize(n[4].value,100,0,1):1===r&&(t=normalize(n[4].value,1,0,1/0)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=n[4].value;return 3===r?t=normalize(n[4].value,1,0,1):1===r&&(t=normalize(n[4].value,1,0,1/0)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function threeChannelLegacySyntax(a,n,r,o){const t=[],l=[],s=[],u=[],i={colorNotation:r,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let c=t;for(let n=0;nW(a)&&a.value[0]===e.Comma))){const e=hslCommaSeparated(a);if(!1!==e)return e}{const e=hslSpaceSeparated(a,n);if(!1!==e)return e}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,ee.HSL,[ae.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,ee.HSL,[],a)}function normalize_HWB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,.8,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,ee.Lab,[],a)}function normalize_LCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,100/150,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,ee.LCH,[],a)}const ue=new Map;for(const[e,a]of Object.entries(S))ue.set(e,a);function namedColor(e){const a=ue.get(toLowerCaseAZ(e));return!!a&&{colorNotation:ee.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([ae.ColorKeyword,ae.NamedColor])}}function normalize_OKLab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r||2===r?t=normalize(n[4].value,250,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,ee.OKLab,[],a)}function normalize_OKLCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r?t=normalize(n[4].value,250,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,ee.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,r,o){if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);const t=normalize(n[4].value,100,0,1);return[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,255,0,1);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,255,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function rgb(a,n){if(a.value.some((a=>W(a)&&a.value[0]===e.Comma))){const e=rgbCommaSeparated(a);if(!1!==e)return(!e.syntaxFlags.has(ae.HasNumberValues)||!e.syntaxFlags.has(ae.HasPercentageValues))&&e}else{const e=rgbSpaceSeparated(a,n);if(!1!==e)return e}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,ee.RGB,[ae.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,ee.RGB,[],a)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(e)+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function XYZ_D50_to_P3_Gamut(e){const a=L(e);if(k(a))return z(a);let n=e.slice();return n=d(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),F(n,(e=>(e=Z(e),e=M(e),e=R(e),B(e))),(e=>(e=G(e),e=V(e),e=A(e),T(e))))}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new j(r,l,t):new j(r,l,[...t,new q([o]),new $([e.Delim,"/",-1,-1,{value:"/"}]),new q([o]),new $([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new j(r,l,[...t,new q([o]),new $([e.Delim,"/",-1,-1,{value:"/"}]),new q([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));n.colorNotation!==ee.Display_P3&&(o=r?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(n).channels):L(colorData_to_XYZ_D50(n).channels));const t=toPrecision(o[0],6),l=toPrecision(o[1],6),s=toPrecision(o[2],6),u=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,u,i,[new $([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new q([i]),new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new q([i]),new $([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new q([i]),new $([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function XYZ_D50_to_sRGB_Gamut(e){const a=D(e);if(k(a))return z(a);let n=e.slice();return n=d(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),F(n,(e=>(e=Z(e),e=M(e),e=I(e),X(e))),(e=>(e=K(e),e=Y(e),e=A(e),T(e))))}function serializeRGB(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));o=r?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels):D(colorData_to_XYZ_D50(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),u=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],c=[e.Comma,",",-1,-1,void 0],m=[new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new $(c),new q([i]),new $([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Integer}]),new $(c),new q([i]),new $([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new j([e.Function,"rgb(",-1,-1,{value:"rgb"}],u,m):new j([e.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...m,new $(c),new q([i]),new $([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new j([e.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...m,new $(c),new q([i]),n.alpha])}function serializeHSL(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));o=w(r?b(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels)):colorData_to_XYZ_D50(n).channels),o=o.map((e=>Number.isNaN(e)?0:e));const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0])))),l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),u=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],c=[e.Comma,",",-1,-1,void 0],m=[new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new $(c),new q([i]),new $([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new $(c),new q([i]),new $([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new j([e.Function,"hsl(",-1,-1,{value:"hsl"}],u,m):new j([e.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...m,new $(c),new q([i]),new $([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new j([e.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...m,new $(c),new q([i]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map((e=>Number.isNaN(e)?0:e));n.colorNotation!==ee.OKLCH&&(r=d(colorData_to_XYZ_D50(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,u,[new $([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new q([u]),new $([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new q([u]),new $([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(a){if(U(a)){switch(toLowerCaseAZ(a.getName())){case"rgb":case"rgba":return rgb(a,color);case"hsl":case"hsla":return hsl(a,color);case"hwb":return n=color,threeChannelSpaceSeparated(a,normalize_HWB_ChannelValues,ee.HWB,[],n);case"lab":return lab(a,color);case"lch":return lch(a,color);case"oklab":return oklab(a,color);case"oklch":return oklch(a,color);case"color":return color$1(a,color);case"color-mix":return colorMix(a,color)}}var n;if(W(a)){if(a.value[0]===e.Hash)return hex(a.value);if(a.value[0]===e.Ident){const e=namedColor(a.value[4].value);return!1!==e?e:"transparent"===toLowerCaseAZ(a.value[4].value)&&{colorNotation:ee.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([ae.ColorKeyword])}}}return!1}export{ee as ColorNotation,ae as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; +import{TokenType as e,NumberType as a}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D50 as n,XYZ_D50_to_XYZ_D50 as r,OKLCH_to_XYZ_D50 as o,LCH_to_XYZ_D50 as t,OKLab_to_XYZ_D50 as l,Lab_to_XYZ_D50 as s,HWB_to_XYZ_D50 as u,HSL_to_XYZ_D50 as i,ProPhoto_RGB_to_XYZ_D50 as c,a98_RGB_to_XYZ_D50 as m,rec_2020_to_XYZ_D50 as h,P3_to_XYZ_D50 as N,lin_sRGB_to_XYZ_D50 as p,sRGB_to_XYZ_D50 as b,XYZ_D50_to_XYZ_D65 as g,XYZ_D50_to_OKLab as v,XYZ_D50_to_OKLCH as d,XYZ_D50_to_LCH as f,XYZ_D50_to_Lab as y,XYZ_D50_to_HWB as C,XYZ_D50_to_HSL as w,XYZ_D50_to_a98_RGB as _,XYZ_D50_to_ProPhoto as H,XYZ_D50_to_rec_2020 as x,XYZ_D50_to_P3 as L,XYZ_D50_to_lin_sRGB as P,XYZ_D50_to_sRGB as D,namedColors as S,inGamut as k,clip as z,mapGamut as F,OKLCH_to_OKLab as M,OKLab_to_XYZ as Z,XYZ_to_lin_P3 as R,gam_P3 as B,lin_P3 as G,lin_P3_to_XYZ as V,XYZ_to_OKLab as A,OKLab_to_OKLCH as T,XYZ_to_lin_sRGB as I,gam_sRGB as X,lin_sRGB as K,lin_sRGB_to_XYZ as Y}from"@csstools/color-helpers";import{isWhitespaceNode as O,isCommentNode as E,isTokenNode as W,isFunctionNode as U,TokenNode as $,FunctionNode as j,WhitespaceNode as q}from"@csstools/css-parser-algorithms";import{mathFunctionNames as J,calcFromComponentValues as Q}from"@csstools/css-calc";var ee,ae;function colorData_to_XYZ_D50(e){switch(e.colorNotation){case ee.HEX:case ee.RGB:case ee.sRGB:return{...e,colorNotation:ee.XYZ_D50,channels:b(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Linear_sRGB:return{...e,colorNotation:ee.XYZ_D50,channels:p(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Display_P3:return{...e,colorNotation:ee.XYZ_D50,channels:N(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Rec2020:return{...e,colorNotation:ee.XYZ_D50,channels:h(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.A98_RGB:return{...e,colorNotation:ee.XYZ_D50,channels:m(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.ProPhoto_RGB:return{...e,colorNotation:ee.XYZ_D50,channels:c(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.HSL:return{...e,colorNotation:ee.XYZ_D50,channels:i(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.HWB:return{...e,colorNotation:ee.XYZ_D50,channels:u(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.Lab:return{...e,colorNotation:ee.XYZ_D50,channels:s(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.OKLab:return{...e,colorNotation:ee.XYZ_D50,channels:l(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.LCH:return{...e,colorNotation:ee.XYZ_D50,channels:t(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.OKLCH:return{...e,colorNotation:ee.XYZ_D50,channels:o(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.XYZ_D50:return{...e,colorNotation:ee.XYZ_D50,channels:r(e.channels.map((e=>Number.isNaN(e)?0:e)))};case ee.XYZ_D65:return{...e,colorNotation:ee.XYZ_D50,channels:n(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(ee||(ee={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.Experimental="experimental"}(ae||(ae={}));const ne=new Set([ee.A98_RGB,ee.Display_P3,ee.HEX,ee.Linear_sRGB,ee.ProPhoto_RGB,ee.RGB,ee.sRGB,ee.Rec2020,ee.XYZ_D50,ee.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a){const e=colorData_to_XYZ_D50(n);switch(a){case ee.HEX:case ee.RGB:n.colorNotation=ee.RGB,n.channels=D(e.channels);break;case ee.sRGB:n.colorNotation=ee.sRGB,n.channels=D(e.channels);break;case ee.Linear_sRGB:n.colorNotation=ee.Linear_sRGB,n.channels=P(e.channels);break;case ee.Display_P3:n.colorNotation=ee.Display_P3,n.channels=L(e.channels);break;case ee.Rec2020:n.colorNotation=ee.Rec2020,n.channels=x(e.channels);break;case ee.ProPhoto_RGB:n.colorNotation=ee.ProPhoto_RGB,n.channels=H(e.channels);break;case ee.A98_RGB:n.colorNotation=ee.A98_RGB,n.channels=_(e.channels);break;case ee.HSL:n.colorNotation=ee.HSL,n.channels=w(e.channels);break;case ee.HWB:n.colorNotation=ee.HWB,n.channels=C(e.channels);break;case ee.Lab:n.colorNotation=ee.Lab,n.channels=y(e.channels);break;case ee.LCH:n.colorNotation=ee.LCH,n.channels=f(e.channels);break;case ee.OKLCH:n.colorNotation=ee.OKLCH,n.channels=d(e.channels);break;case ee.OKLab:n.colorNotation=ee.OKLab,n.channels=v(e.channels);break;case ee.XYZ_D50:n.colorNotation=ee.XYZ_D50,n.channels=r(e.channels);break;case ee.XYZ_D65:n.colorNotation=ee.XYZ_D65,n.channels=g(e.channels);break;default:throw new Error("Unsupported color notation")}}else n.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else if(ne.has(a)&&ne.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else switch(a){case ee.HSL:switch(e.colorNotation){case ee.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[2],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0])}break;case ee.HWB:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2])}break;case ee.Lab:case ee.OKLab:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0])}break;case ee.LCH:case ee.OKLCH:switch(e.colorNotation){case ee.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0]);break;case ee.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case ee.Lab:case ee.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case ee.LCH:case ee.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2])}}return n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case ee.HSL:reducePrecision(n[1],4)<=0&&(n[0]=NaN);break;case ee.HWB:Math.max(0,reducePrecision(n[1],4))+Math.max(0,reducePrecision(n[2],4))>=100&&(n[0]=NaN);break;case ee.LCH:reducePrecision(n[1],4)<=0&&(n[2]=NaN);break;case ee.OKLCH:reducePrecision(n[1],6)<=0&&(n[2]=NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case ee.HSL:(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=NaN,n[1]=NaN),reducePrecision(n[1])<=0&&(n[0]=NaN);break;case ee.HWB:Math.max(0,reducePrecision(n[1]))+Math.max(0,reducePrecision(n[2]))>=100&&(n[0]=NaN);break;case ee.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case ee.LCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case ee.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN);break;case ee.OKLCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN)}return n}function carryForwardMissingComponents(e,a,n,r){const o=[...n];for(const n of a)Number.isNaN(e[a[n]])&&(o[r[n]]=NaN);return o}function normalizeRelativeColorDataChannels(e){const a=new Map;switch(e.colorNotation){case ee.RGB:case ee.HEX:a.set("r",dummyNumberToken(255*e.channels[0])),a.set("g",dummyNumberToken(255*e.channels[1])),a.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.HSL:a.set("h",dummyNumberToken(e.channels[0])),a.set("s",dummyNumberToken(e.channels[1])),a.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.HWB:a.set("h",dummyNumberToken(e.channels[0])),a.set("w",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.Lab:case ee.OKLab:a.set("l",dummyNumberToken(e.channels[0])),a.set("a",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.LCH:case ee.OKLCH:a.set("l",dummyNumberToken(e.channels[0])),a.set("c",dummyNumberToken(e.channels[1])),a.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.sRGB:case ee.A98_RGB:case ee.Display_P3:case ee.Rec2020:case ee.Linear_sRGB:case ee.ProPhoto_RGB:a.set("r",dummyNumberToken(e.channels[0])),a.set("g",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case ee.XYZ_D50:case ee.XYZ_D65:a.set("x",dummyNumberToken(e.channels[0])),a.set("y",dummyNumberToken(e.channels[1])),a.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha))}return a}function noneToZeroInRelativeColorDataChannels(e){const a=new Map(e);for(const[n,r]of e)Number.isNaN(r[4].value)&&a.set(n,dummyNumberToken(0));return a}function dummyNumberToken(n){return[e.Number,n.toString(),-1,-1,{value:n,type:a.Number}]}function reducePrecision(e,a=7){if(Number.isNaN(e))return 0;const n=Math.pow(10,a);return Math.round(e*n)/n}function colorDataFitsRGB_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,ee.RGB).channels.find((e=>e<-1e-5||e>1.00001))}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,ee.Display_P3).channels.find((e=>e<-1e-5||e>1.00001))}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const re=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(re,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}const oe=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(a,n){const r=[],o=[],t=[],l=[];let s,u,i=!1,c=!1;const m={colorNotation:ee.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let h=r;for(let N=0;N=0){l=s.value[4].value;continue}}return!1}if(!t)return!1;r.push({color:t,percentage:l}),t=!1,l=!1}}if(t&&r.push({color:t,percentage:l}),2!==r.length)return!1;let s=r[0].percentage,u=r[1].percentage;return(!1===s||!(s<0||s>100))&&((!1===u||!(u<0||u>100))&&(!1===s&&!1===u?(s=50,u=50):!1!==s&&!1===u?u=100-s:!1===s&&!1!==u&&(s=100-u),(0!==s||0!==u)&&(!1!==s&&!1!==u&&(s+u>100&&(s=s/(s+u)*100,u=u/(s+u)*100),s+u<100&&(o=(s+u)/100,s=s/(s+u)*100,u=u/(s+u)*100),{a:{color:r[0].color,percentage:s},b:{color:r[1].color,percentage:u},alphaMultiplier:o}))))}function colorMixRectangular(e,a){if(!a)return!1;const n=a.a.color,r=a.b.color,o=a.a.percentage/100;let t=n.channels,l=r.channels,s=ee.RGB,u=n.alpha;if("number"!=typeof u)return!1;let i=r.alpha;if("number"!=typeof i)return!1;switch(u=Number.isNaN(u)?i:u,i=Number.isNaN(i)?u:i,e){case"srgb":s=ee.RGB;break;case"srgb-linear":s=ee.Linear_sRGB;break;case"lab":s=ee.Lab;break;case"oklab":s=ee.OKLab;break;case"xyz-d50":s=ee.XYZ_D50;break;case"xyz":case"xyz-d65":s=ee.XYZ_D65}t=colorDataTo(n,s).channels,l=colorDataTo(r,s).channels,t[0]=fillInMissingComponent(t[0],l[0]),l[0]=fillInMissingComponent(l[0],t[0]),t[1]=fillInMissingComponent(t[1],l[1]),l[1]=fillInMissingComponent(l[1],t[1]),t[2]=fillInMissingComponent(t[2],l[2]),l[2]=fillInMissingComponent(l[2],t[2]),t[0]=premultiply(t[0],u),t[1]=premultiply(t[1],u),t[2]=premultiply(t[2],u),l[0]=premultiply(l[0],i),l[1]=premultiply(l[1],i),l[2]=premultiply(l[2],i);const c=interpolate(u,i,o),m={colorNotation:s,channels:[un_premultiply(interpolate(t[0],l[0],o),c),un_premultiply(interpolate(t[1],l[1],o),c),un_premultiply(interpolate(t[2],l[2],o),c)],alpha:c*a.alphaMultiplier,syntaxFlags:new Set([ae.ColorMix])};return(a.a.color.syntaxFlags.has(ae.Experimental)||a.b.color.syntaxFlags.has(ae.Experimental))&&m.syntaxFlags.add(ae.Experimental),m}function colorMixPolar(e,a,n){if(!n)return!1;const r=n.a.color,o=n.b.color,t=n.a.percentage/100;let l=r.channels,s=o.channels,u=0,i=0,c=0,m=0,h=0,N=0,p=ee.RGB,b=r.alpha;if("number"!=typeof b)return!1;let g=o.alpha;if("number"!=typeof g)return!1;switch(b=Number.isNaN(b)?g:b,g=Number.isNaN(g)?b:g,e){case"hsl":p=ee.HSL;break;case"hwb":p=ee.HWB;break;case"lch":p=ee.LCH;break;case"oklch":p=ee.OKLCH}switch(l=colorDataTo(r,p).channels,s=colorDataTo(o,p).channels,e){case"hsl":case"hwb":u=l[0],i=s[0],c=l[1],m=s[1],h=l[2],N=s[2];break;case"lch":case"oklch":c=l[0],m=s[0],h=l[1],N=s[1],u=l[2],i=s[2]}u=fillInMissingComponent(u,i),Number.isNaN(u)&&(u=0),i=fillInMissingComponent(i,u),Number.isNaN(i)&&(i=0),c=fillInMissingComponent(c,m),m=fillInMissingComponent(m,c),h=fillInMissingComponent(h,N),N=fillInMissingComponent(N,h);const v=i-u;switch(a){case"shorter":v>180?u+=360:v<-180&&(i+=360);break;case"longer":-1800?u+=360:i+=360);break;case"increasing":v<0&&(i+=360);break;case"decreasing":v>0&&(u+=360);break;default:throw new Error("Unknown hue interpolation method")}c=premultiply(c,b),h=premultiply(h,b),m=premultiply(m,g),N=premultiply(N,g);let d=[0,0,0];const f=interpolate(b,g,t);switch(e){case"hsl":case"hwb":d=[interpolate(u,i,t),un_premultiply(interpolate(c,m,t),f),un_premultiply(interpolate(h,N,t),f)];break;case"lch":case"oklch":d=[un_premultiply(interpolate(c,m,t),f),un_premultiply(interpolate(h,N,t),f),interpolate(u,i,t)]}const y={colorNotation:p,channels:d,alpha:f*n.alphaMultiplier,syntaxFlags:new Set([ae.ColorMix])};return(n.a.color.syntaxFlags.has(ae.Experimental)||n.b.color.syntaxFlags.has(ae.Experimental))&&y.syntaxFlags.add(ae.Experimental),y}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*n+a*(1-n)}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?NaN:e/a}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:ee.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([ae.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(ae.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(ae.HasAlpha),n}return!1}function normalizeHue(n){if(n[0]===e.Number)return n[4].value=n[4].value%360,n[1]=n[4].value.toString(),n;if(n[0]===e.Dimension){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return r%=360,[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,r,o){if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){if(3!==r)return!1;let o=normalize(n[4].value,1,0,100);return 3===r&&(o=normalize(n[4].value,1,0,1)),[e.Number,o.toString(),n[2],n[3],{value:o,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=n[4].value;return 3===r?t=normalize(n[4].value,100,0,1):1===r&&(t=normalize(n[4].value,1,0,1/0)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=n[4].value;return 3===r?t=normalize(n[4].value,1,0,1):1===r&&(t=normalize(n[4].value,1,0,1/0)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function threeChannelLegacySyntax(a,n,r,o){const t=[],l=[],s=[],u=[],i={colorNotation:r,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let c=t;for(let n=0;nW(a)&&a.value[0]===e.Comma))){const e=hslCommaSeparated(a);if(!1!==e)return e}{const e=hslSpaceSeparated(a,n);if(!1!==e)return e}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,ee.HSL,[ae.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,ee.HSL,[],a)}function normalize_HWB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,.8,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,ee.Lab,[],a)}function normalize_LCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,100/150,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,ee.LCH,[],a)}const ue=new Map;for(const[e,a]of Object.entries(S))ue.set(e,a);function namedColor(e){const a=ue.get(toLowerCaseAZ(e));return!!a&&{colorNotation:ee.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([ae.ColorKeyword,ae.NamedColor])}}function normalize_OKLab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r||2===r?t=normalize(n[4].value,250,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,ee.OKLab,[],a)}function normalize_OKLCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(ae.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r?t=normalize(n[4].value,250,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,ee.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,r,o){if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(ae.HasPercentageAlpha):o.syntaxFlags.add(ae.HasPercentageValues);const t=normalize(n[4].value,100,0,1);return[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,255,0,1);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===n[4].value.toLowerCase())return o.syntaxFlags.add(ae.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(ae.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(ae.HasNumberValues);let t=normalize(n[4].value,255,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function rgb(a,n){if(a.value.some((a=>W(a)&&a.value[0]===e.Comma))){const e=rgbCommaSeparated(a);if(!1!==e)return(!e.syntaxFlags.has(ae.HasNumberValues)||!e.syntaxFlags.has(ae.HasPercentageValues))&&e}else{const e=rgbSpaceSeparated(a,n);if(!1!==e)return e}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,ee.RGB,[ae.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,ee.RGB,[],a)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(e)+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function XYZ_D50_to_P3_Gamut(e){const a=L(e);if(k(a))return z(a);let n=e.slice();return n=d(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),F(n,(e=>(e=M(e),e=Z(e),e=R(e),B(e))),(e=>(e=G(e),e=V(e),e=A(e),T(e))))}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new j(r,l,t):new j(r,l,[...t,new q([o]),new $([e.Delim,"/",-1,-1,{value:"/"}]),new q([o]),new $([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new j(r,l,[...t,new q([o]),new $([e.Delim,"/",-1,-1,{value:"/"}]),new q([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));n.colorNotation!==ee.Display_P3&&(o=r?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(n).channels):L(colorData_to_XYZ_D50(n).channels));const t=toPrecision(o[0],6),l=toPrecision(o[1],6),s=toPrecision(o[2],6),u=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,u,i,[new $([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new q([i]),new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new q([i]),new $([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new q([i]),new $([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function XYZ_D50_to_sRGB_Gamut(e){const a=D(e);if(k(a))return z(a);let n=e.slice();return n=d(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),F(n,(e=>(e=M(e),e=Z(e),e=I(e),X(e))),(e=>(e=K(e),e=Y(e),e=A(e),T(e))))}function serializeRGB(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));o=r?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels):D(colorData_to_XYZ_D50(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),u=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],c=[e.Comma,",",-1,-1,void 0],m=[new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new $(c),new q([i]),new $([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Integer}]),new $(c),new q([i]),new $([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new j([e.Function,"rgb(",-1,-1,{value:"rgb"}],u,m):new j([e.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...m,new $(c),new q([i]),new $([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new j([e.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...m,new $(c),new q([i]),n.alpha])}function serializeHSL(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map((e=>Number.isNaN(e)?0:e));o=w(r?b(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels)):colorData_to_XYZ_D50(n).channels),o=o.map((e=>Number.isNaN(e)?0:e));const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0])))),l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),u=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],c=[e.Comma,",",-1,-1,void 0],m=[new $([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new $(c),new q([i]),new $([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new $(c),new q([i]),new $([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new j([e.Function,"hsl(",-1,-1,{value:"hsl"}],u,m):new j([e.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...m,new $(c),new q([i]),new $([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new j([e.Function,"hsla(",-1,-1,{value:"hsla"}],u,[...m,new $(c),new q([i]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map((e=>Number.isNaN(e)?0:e));n.colorNotation!==ee.OKLCH&&(r=d(colorData_to_XYZ_D50(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,u,[new $([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new q([u]),new $([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new q([u]),new $([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(a){if(U(a)){switch(toLowerCaseAZ(a.getName())){case"rgb":case"rgba":return rgb(a,color);case"hsl":case"hsla":return hsl(a,color);case"hwb":return n=color,threeChannelSpaceSeparated(a,normalize_HWB_ChannelValues,ee.HWB,[],n);case"lab":return lab(a,color);case"lch":return lch(a,color);case"oklab":return oklab(a,color);case"oklch":return oklch(a,color);case"color":return color$1(a,color);case"color-mix":return colorMix(a,color)}}var n;if(W(a)){if(a.value[0]===e.Hash)return hex(a.value);if(a.value[0]===e.Ident){const e=namedColor(a.value[4].value);return!1!==e?e:"transparent"===toLowerCaseAZ(a.value[4].value)&&{colorNotation:ee.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([ae.ColorKeyword])}}}return!1}export{ee as ColorNotation,ae as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; diff --git a/packages/css-color-parser/src/functions/rgb-normalize-channel-values.ts b/packages/css-color-parser/src/functions/rgb-normalize-channel-values.ts index 3cc664e08..ef8c1d582 100644 --- a/packages/css-color-parser/src/functions/rgb-normalize-channel-values.ts +++ b/packages/css-color-parser/src/functions/rgb-normalize-channel-values.ts @@ -2,7 +2,6 @@ import type { ColorData } from '../color-data'; import { CSSToken, NumberType, TokenType } from '@csstools/css-tokenizer'; import { SyntaxFlag } from '../color-data'; import { normalize } from './normalize'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; export function normalize_legacy_sRGB_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false { if (token[0] === TokenType.Percentage) { @@ -52,7 +51,7 @@ export function normalize_legacy_sRGB_ChannelValues(token: CSSToken, index: numb } export function normalize_modern_sRGB_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false { - if (token[0] === TokenType.Ident && toLowerCaseAZ(token[4].value) === 'none') { + if (token[0] === TokenType.Ident && token[4].value.toLowerCase() === 'none') { colorData.syntaxFlags.add(SyntaxFlag.HasNoneKeywords); return [ diff --git a/packages/css-color-parser/src/functions/three-channel-legacy-syntax.ts b/packages/css-color-parser/src/functions/three-channel-legacy-syntax.ts index 2e282b772..5a612cddb 100644 --- a/packages/css-color-parser/src/functions/three-channel-legacy-syntax.ts +++ b/packages/css-color-parser/src/functions/three-channel-legacy-syntax.ts @@ -6,7 +6,6 @@ import { SyntaxFlag } from '../color-data'; import { calcFromComponentValues } from '@csstools/css-calc'; import { isCommentNode, isFunctionNode, isTokenNode, isWhitespaceNode } from '@csstools/css-parser-algorithms'; import { normalizeChannelValuesFn } from './normalize-channel-values'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; import { mathFunctionNames } from '@csstools/css-calc'; export function threeChannelLegacySyntax( @@ -56,13 +55,13 @@ export function threeChannelLegacySyntax( } if (isFunctionNode(node)) { - if (focus === channelAlpha && toLowerCaseAZ(node.getName()) === 'var') { + if (focus === channelAlpha && node.getName().toLowerCase() === 'var') { colorData.syntaxFlags.add(SyntaxFlag.HasVariableAlpha); focus.push(node); continue; } - if (!mathFunctionNames.has(toLowerCaseAZ(node.getName()))) { + if (!mathFunctionNames.has(node.getName().toLowerCase())) { return false; } diff --git a/packages/css-color-parser/src/functions/three-channel-space-separated.ts b/packages/css-color-parser/src/functions/three-channel-space-separated.ts index 8898d2171..1d2b63b3b 100644 --- a/packages/css-color-parser/src/functions/three-channel-space-separated.ts +++ b/packages/css-color-parser/src/functions/three-channel-space-separated.ts @@ -66,13 +66,13 @@ export function threeChannelSpaceSeparated( } if (isFunctionNode(node)) { - if (focus === channelAlpha && toLowerCaseAZ(node.getName()) === 'var') { + if (focus === channelAlpha && node.getName().toLowerCase() === 'var') { colorData.syntaxFlags.add(SyntaxFlag.HasVariableAlpha); focus.push(node); continue; } - if (!mathFunctionNames.has(toLowerCaseAZ(node.getName()))) { + if (!mathFunctionNames.has(node.getName().toLowerCase())) { return false; } @@ -100,7 +100,7 @@ export function threeChannelSpaceSeparated( channel1.length === 0 && isTokenNode(node) && node.value[0] === TokenType.Ident && - toLowerCaseAZ(node.value[4].value) === 'from' && + node.value[4].value.toLowerCase() === 'from' && functionName !== 'hsla' && functionName !== 'rgba' ) { @@ -137,10 +137,14 @@ export function threeChannelSpaceSeparated( } if (isTokenNode(node)) { - if (node.value[0] === TokenType.Ident && relativeColorChannels && relativeColorChannels.has(toLowerCaseAZ(node.value[4].value))) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - focus.push(new TokenNode(relativeColorChannels.get(toLowerCaseAZ(node.value[4].value))!)); - continue; + if (node.value[0] === TokenType.Ident && relativeColorChannels) { + const channelKeyword = node.value[4].value.toLowerCase(); + + if (relativeColorChannels.has(channelKeyword)) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + focus.push(new TokenNode(relativeColorChannels.get(channelKeyword)!)); + continue; + } } focus.push(node); diff --git a/packages/css-parser-algorithms/dist/index.d.ts b/packages/css-parser-algorithms/dist/index.d.ts index c83b29b85..a89e0b391 100644 --- a/packages/css-parser-algorithms/dist/index.d.ts +++ b/packages/css-parser-algorithms/dist/index.d.ts @@ -106,10 +106,7 @@ export declare class CommentNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON(): { - type: ComponentValueType; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -351,7 +348,7 @@ export declare function isWhitespaceNode(x: unknown): x is WhitespaceNode; */ export declare function parseCommaSeparatedListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void; -}): ComponentValue[][]; +}): Array>; /** * Parse a single component value. @@ -382,13 +379,13 @@ export declare function parseComponentValue(tokens: Array, options?: { */ export declare function parseListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void; -}): ComponentValue[]; +}): Array; /** * Replace specific component values in a list of component values. * A helper for the most common and simplistic cases when mutating an AST. */ -export declare function replaceComponentValues(componentValuesList: Array>, replaceWith: (componentValue: ComponentValue) => Array | ComponentValue | void): ComponentValue[][]; +export declare function replaceComponentValues(componentValuesList: Array>, replaceWith: (componentValue: ComponentValue) => Array | ComponentValue | void): Array>; /** * A simple block node. @@ -492,10 +489,7 @@ export declare class TokenNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON(): { - type: ComponentValueType; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -590,10 +584,7 @@ export declare class WhitespaceNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON(): { - type: ComponentValueType; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ diff --git a/packages/css-parser-algorithms/docs/css-parser-algorithms.api.json b/packages/css-parser-algorithms/docs/css-parser-algorithms.api.json index b61033046..d1fa05de7 100644 --- a/packages/css-parser-algorithms/docs/css-parser-algorithms.api.json +++ b/packages/css-parser-algorithms/docs/css-parser-algorithms.api.json @@ -1913,6 +1913,24 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "ComponentValue", @@ -1920,7 +1938,7 @@ }, { "kind": "Content", - "text": "[][]" + "text": ">>" }, { "kind": "Content", @@ -1930,7 +1948,7 @@ "fileUrlPath": "dist/_types/parse/comma-separated-list-of-component-values.d.ts", "returnTypeTokenRange": { "startIndex": 10, - "endIndex": 12 + "endIndex": 16 }, "releaseTag": "Public", "overloadIndex": 1, @@ -2002,10 +2020,6 @@ "kind": "Content", "text": "): " }, - { - "kind": "Content", - "text": "import(\"../consume/component-block-function\")." - }, { "kind": "Reference", "text": "ComponentValue", @@ -2023,7 +2037,7 @@ "fileUrlPath": "dist/_types/parse/component-value.d.ts", "returnTypeTokenRange": { "startIndex": 10, - "endIndex": 13 + "endIndex": 12 }, "releaseTag": "Public", "overloadIndex": 1, @@ -2095,6 +2109,15 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "ComponentValue", @@ -2102,7 +2125,7 @@ }, { "kind": "Content", - "text": "[]" + "text": ">" }, { "kind": "Content", @@ -2112,7 +2135,7 @@ "fileUrlPath": "dist/_types/parse/list-of-component-values.d.ts", "returnTypeTokenRange": { "startIndex": 10, - "endIndex": 12 + "endIndex": 14 }, "releaseTag": "Public", "overloadIndex": 1, @@ -2220,6 +2243,24 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "ComponentValue", @@ -2227,7 +2268,7 @@ }, { "kind": "Content", - "text": "[][]" + "text": ">>" }, { "kind": "Content", @@ -2237,7 +2278,7 @@ "fileUrlPath": "dist/_types/util/replace-component-values.d.ts", "returnTypeTokenRange": { "startIndex": 18, - "endIndex": 20 + "endIndex": 24 }, "releaseTag": "Public", "overloadIndex": 1, diff --git a/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecommaseparatedlistofcomponentvalues.md b/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecommaseparatedlistofcomponentvalues.md index 74e5cec4c..8bbee93c3 100644 --- a/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecommaseparatedlistofcomponentvalues.md +++ b/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecommaseparatedlistofcomponentvalues.md @@ -11,7 +11,7 @@ Parse a comma-separated list of component values. ```typescript export declare function parseCommaSeparatedListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void; -}): ComponentValue[][]; +}): Array>; ``` ## Parameters @@ -23,7 +23,7 @@ export declare function parseCommaSeparatedListOfComponentValues(tokens: Array\[\]\[\] +Array<Array<[ComponentValue](./css-parser-algorithms.componentvalue.md)>> ## Example diff --git a/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecomponentvalue.md b/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecomponentvalue.md index 3723c5645..f135874e6 100644 --- a/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecomponentvalue.md +++ b/packages/css-parser-algorithms/docs/css-parser-algorithms.parsecomponentvalue.md @@ -11,7 +11,7 @@ Parse a single component value. ```typescript export declare function parseComponentValue(tokens: Array, options?: { onParseError?: (error: ParseError) => void; -}): import("../consume/component-block-function").ComponentValue | undefined; +}): ComponentValue | undefined; ``` ## Parameters @@ -23,7 +23,7 @@ export declare function parseComponentValue(tokens: Array, options?: { **Returns:** -import("../consume/component-block-function").[ComponentValue](./css-parser-algorithms.componentvalue.md) \| undefined +[ComponentValue](./css-parser-algorithms.componentvalue.md) \| undefined ## Example diff --git a/packages/css-parser-algorithms/docs/css-parser-algorithms.parselistofcomponentvalues.md b/packages/css-parser-algorithms/docs/css-parser-algorithms.parselistofcomponentvalues.md index 8136d36b2..675037f43 100644 --- a/packages/css-parser-algorithms/docs/css-parser-algorithms.parselistofcomponentvalues.md +++ b/packages/css-parser-algorithms/docs/css-parser-algorithms.parselistofcomponentvalues.md @@ -11,7 +11,7 @@ Parse a list of component values. ```typescript export declare function parseListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void; -}): ComponentValue[]; +}): Array; ``` ## Parameters @@ -23,7 +23,7 @@ export declare function parseListOfComponentValues(tokens: Array, opti **Returns:** -[ComponentValue](./css-parser-algorithms.componentvalue.md)\[\] +Array<[ComponentValue](./css-parser-algorithms.componentvalue.md)> ## Example diff --git a/packages/css-parser-algorithms/docs/css-parser-algorithms.replacecomponentvalues.md b/packages/css-parser-algorithms/docs/css-parser-algorithms.replacecomponentvalues.md index ea03e8c30..2764d3ba3 100644 --- a/packages/css-parser-algorithms/docs/css-parser-algorithms.replacecomponentvalues.md +++ b/packages/css-parser-algorithms/docs/css-parser-algorithms.replacecomponentvalues.md @@ -9,7 +9,7 @@ Replace specific component values in a list of component values. A helper for th **Signature:** ```typescript -export declare function replaceComponentValues(componentValuesList: Array>, replaceWith: (componentValue: ComponentValue) => Array | ComponentValue | void): ComponentValue[][]; +export declare function replaceComponentValues(componentValuesList: Array>, replaceWith: (componentValue: ComponentValue) => Array | ComponentValue | void): Array>; ``` ## Parameters @@ -21,5 +21,5 @@ export declare function replaceComponentValues(componentValuesList: Array\[\]\[\] +Array<Array<[ComponentValue](./css-parser-algorithms.componentvalue.md)>> diff --git a/packages/css-parser-algorithms/src/consume/component-block-function.ts b/packages/css-parser-algorithms/src/consume/component-block-function.ts index 7720febb2..b912e1985 100644 --- a/packages/css-parser-algorithms/src/consume/component-block-function.ts +++ b/packages/css-parser-algorithms/src/consume/component-block-function.ts @@ -205,7 +205,7 @@ export class FunctionNode extends ContainerNodeBaseClass { * Normalize the current function: * 1. if the "endToken" is EOF, replace with a ")-token" */ - normalize() { + normalize(): void { if (this.endToken[0] === TokenType.EOF) { this.endToken = [TokenType.CloseParen, ')', -1, -1, undefined]; } @@ -376,7 +376,7 @@ export class SimpleBlockNode extends ContainerNodeBaseClass { * Normalize the current simple block * 1. if the "endToken" is EOF, replace with the mirror token of the "startToken" */ - normalize() { + normalize(): void { if (this.endToken[0] === TokenType.EOF) { const mirror = mirrorVariant(this.startToken); if (mirror) { @@ -552,7 +552,7 @@ export class WhitespaceNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON() { + toJSON(): Record { return { type: this.type, tokens: this.tokens(), @@ -639,7 +639,7 @@ export class CommentNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON() { + toJSON(): Record { return { type: this.type, tokens: this.tokens(), @@ -742,7 +742,7 @@ export class TokenNode { * A debug helper to convert the current object to a JSON representation. * This is useful in asserts and to store large ASTs in files. */ - toJSON() { + toJSON(): Record { return { type: this.type, tokens: this.tokens(), diff --git a/packages/css-parser-algorithms/src/parse/comma-separated-list-of-component-values.ts b/packages/css-parser-algorithms/src/parse/comma-separated-list-of-component-values.ts index 418f0b3d5..3ed675d37 100644 --- a/packages/css-parser-algorithms/src/parse/comma-separated-list-of-component-values.ts +++ b/packages/css-parser-algorithms/src/parse/comma-separated-list-of-component-values.ts @@ -12,9 +12,9 @@ import { ComponentValue, consumeComponentValue } from '../consume/component-bloc * parseCommaSeparatedListOfComponentValues(tokenize({ css: `20deg, 50%, 30%` })); * ``` */ -export function parseCommaSeparatedListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void }) { +export function parseCommaSeparatedListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void }): Array> { const ctx = { - onParseError: options?.onParseError ?? (() => { /* noop */ }), + onParseError: options?.onParseError ?? ((): void => { /* noop */ }), }; const tokensCopy = [ diff --git a/packages/css-parser-algorithms/src/parse/component-value.ts b/packages/css-parser-algorithms/src/parse/component-value.ts index eced490c4..768730d39 100644 --- a/packages/css-parser-algorithms/src/parse/component-value.ts +++ b/packages/css-parser-algorithms/src/parse/component-value.ts @@ -1,5 +1,5 @@ import { CSSToken, ParseError, TokenType } from '@csstools/css-tokenizer'; -import { consumeComponentValue } from '../consume/component-block-function'; +import { ComponentValue, consumeComponentValue } from '../consume/component-block-function'; /** * Parse a single component value. @@ -13,9 +13,9 @@ import { consumeComponentValue } from '../consume/component-block-function'; * parseCommaSeparatedListOfComponentValues(tokenize({ css: `calc((10px + 1x) * 4)` })); * ``` */ -export function parseComponentValue(tokens: Array, options?: { onParseError?: (error: ParseError) => void }) { +export function parseComponentValue(tokens: Array, options?: { onParseError?: (error: ParseError) => void }): ComponentValue|undefined { const ctx = { - onParseError: options?.onParseError ?? (() => { /* noop */ }), + onParseError: options?.onParseError ?? ((): void => { /* noop */ }), }; const tokensCopy = [ diff --git a/packages/css-parser-algorithms/src/parse/list-of-component-values.ts b/packages/css-parser-algorithms/src/parse/list-of-component-values.ts index 4a2f12e41..3acd56d01 100644 --- a/packages/css-parser-algorithms/src/parse/list-of-component-values.ts +++ b/packages/css-parser-algorithms/src/parse/list-of-component-values.ts @@ -12,9 +12,9 @@ import { ComponentValue, consumeComponentValue } from '../consume/component-bloc * parseListOfComponentValues(tokenize({ css: `20deg 30%` })); * ``` */ -export function parseListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void }) { +export function parseListOfComponentValues(tokens: Array, options?: { onParseError?: (error: ParseError) => void }): Array { const ctx = { - onParseError: options?.onParseError ?? (() => { /* noop */ }), + onParseError: options?.onParseError ?? ((): void => { /* noop */ }), }; const tokensCopy = [ diff --git a/packages/css-parser-algorithms/src/util/node-ancestry.ts b/packages/css-parser-algorithms/src/util/node-ancestry.ts index 7209858a0..e4b603d1e 100644 --- a/packages/css-parser-algorithms/src/util/node-ancestry.ts +++ b/packages/css-parser-algorithms/src/util/node-ancestry.ts @@ -24,7 +24,7 @@ * }); * ``` */ -export function gatherNodeAncestry(node: { walk(cb: (entry: { node: Array | unknown, parent: unknown }, index: number | string) => boolean | void): false | undefined }) { +export function gatherNodeAncestry(node: { walk(cb: (entry: { node: Array | unknown, parent: unknown }, index: number | string) => boolean | void): false | undefined }): Map { const ancestry: Map = new Map(); node.walk((entry) => { diff --git a/packages/css-parser-algorithms/src/util/replace-component-values.ts b/packages/css-parser-algorithms/src/util/replace-component-values.ts index 76bb3e79f..6c53a8ce6 100644 --- a/packages/css-parser-algorithms/src/util/replace-component-values.ts +++ b/packages/css-parser-algorithms/src/util/replace-component-values.ts @@ -8,7 +8,7 @@ import { walk } from './walk'; export function replaceComponentValues( componentValuesList: Array>, replaceWith: (componentValue: ComponentValue) => Array | ComponentValue | void, -) { +): Array> { for (let i = 0; i < componentValuesList.length; i++) { const componentValues = componentValuesList[i]; diff --git a/packages/css-parser-algorithms/src/util/walker-index-generator.ts b/packages/css-parser-algorithms/src/util/walker-index-generator.ts index 5cba1c198..53d9b88ec 100644 --- a/packages/css-parser-algorithms/src/util/walker-index-generator.ts +++ b/packages/css-parser-algorithms/src/util/walker-index-generator.ts @@ -8,7 +8,7 @@ * 5. removing an element does not cause elements to be skipped. * 6. an element added later in the list will be visited. */ -export function walkerIndexGenerator(initialList: Array) { +export function walkerIndexGenerator(initialList: Array): (list: Array, child: T, index: number) => number { // 1. Keep a reference of the original ordered list. let reference: Array = initialList.slice(); diff --git a/packages/css-tokenizer/src/consume/bad-url.ts b/packages/css-tokenizer/src/consume/bad-url.ts index 1435a50a5..1192184e4 100644 --- a/packages/css-tokenizer/src/consume/bad-url.ts +++ b/packages/css-tokenizer/src/consume/bad-url.ts @@ -5,7 +5,7 @@ import { Context } from '../interfaces/context'; import { consumeEscapedCodePoint } from './escaped-code-point'; // https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#consume-remnants-of-bad-url -export function consumeBadURL(ctx: Context, reader: CodePointReader) { +export function consumeBadURL(ctx: Context, reader: CodePointReader): void { // eslint-disable-next-line no-constant-condition while (true) { if (reader.codePointSource[reader.cursor] === undefined) { diff --git a/packages/css-tokenizer/src/tokenizer.ts b/packages/css-tokenizer/src/tokenizer.ts index 3031b5bea..f8f071e70 100644 --- a/packages/css-tokenizer/src/tokenizer.ts +++ b/packages/css-tokenizer/src/tokenizer.ts @@ -65,7 +65,7 @@ export function tokenizer( options?: { onParseError?: (error: ParseError) => void }, -) { +): { nextToken: () => CSSToken | undefined, endOfFile: () => boolean } { const css = input.css.valueOf(); const unicodeRangesAllowed = input.unicodeRangesAllowed ?? false; @@ -75,7 +75,7 @@ export function tokenizer( onParseError: options?.onParseError ?? noop, }; - function endOfFile() { + function endOfFile(): boolean { return reader.codePointSource[reader.cursor] === undefined; } @@ -253,4 +253,4 @@ export function tokenizer( }; } -function noop() { /* do nothing */ } +function noop(): void { /* do nothing */ } diff --git a/packages/media-query-list-parser/dist/index.cjs b/packages/media-query-list-parser/dist/index.cjs index 8d3e5aea9..28013a67f 100644 --- a/packages/media-query-list-parser/dist/index.cjs +++ b/packages/media-query-list-parser/dist/index.cjs @@ -1 +1 @@ -"use strict";var e,t=require("@csstools/css-parser-algorithms"),i=require("@csstools/css-tokenizer");exports.NodeType=void 0,(e=exports.NodeType||(exports.NodeType={})).CustomMedia="custom-media",e.GeneralEnclosed="general-enclosed",e.MediaAnd="media-and",e.MediaCondition="media-condition",e.MediaConditionListWithAnd="media-condition-list-and",e.MediaConditionListWithOr="media-condition-list-or",e.MediaFeature="media-feature",e.MediaFeatureBoolean="mf-boolean",e.MediaFeatureName="mf-name",e.MediaFeaturePlain="mf-plain",e.MediaFeatureRangeNameValue="mf-range-name-value",e.MediaFeatureRangeValueName="mf-range-value-name",e.MediaFeatureRangeValueNameValue="mf-range-value-name-value",e.MediaFeatureValue="mf-value",e.MediaInParens="media-in-parens",e.MediaNot="media-not",e.MediaOr="media-or",e.MediaQueryWithType="media-query-with-type",e.MediaQueryWithoutType="media-query-without-type",e.MediaQueryInvalid="media-query-invalid";const a=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(a,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}class MediaCondition{type=exports.NodeType.MediaCondition;media;constructor(e){this.media=e}tokens(){return this.media.tokens()}toString(){return this.media.toString()}indexOf(e){return e===this.media?"media":-1}at(e){if("media"===e)return this.media}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.media,parent:this,state:i},"media")&&this.media.walk(e,i)}toJSON(){return{type:this.type,media:this.media.toJSON()}}isMediaCondition(){return MediaCondition.isMediaCondition(this)}static isMediaCondition(e){return!!e&&(e instanceof MediaCondition&&e.type===exports.NodeType.MediaCondition)}}class MediaInParens{type=exports.NodeType.MediaInParens;media;before;after;constructor(e,t=[],i=[]){this.media=e,this.before=t,this.after=i}tokens(){return[...this.before,...this.media.tokens(),...this.after]}toString(){return i.stringify(...this.before)+this.media.toString()+i.stringify(...this.after)}indexOf(e){return e===this.media?"media":-1}at(e){if("media"===e)return this.media}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.media,parent:this,state:i},"media")&&("walk"in this.media?this.media.walk(e,i):void 0)}toJSON(){return{type:this.type,media:this.media.toJSON(),before:this.before,after:this.after}}isMediaInParens(){return MediaInParens.isMediaInParens(this)}static isMediaInParens(e){return!!e&&(e instanceof MediaInParens&&e.type===exports.NodeType.MediaInParens)}}class MediaQueryWithType{type=exports.NodeType.MediaQueryWithType;modifier;mediaType;and=void 0;media=void 0;constructor(e,t,i,a){this.modifier=e,this.mediaType=t,i&&a&&(this.and=i,this.media=a)}getModifier(){if(!this.modifier.length)return"";for(let e=0;ee.tokens()))}toString(){return this.media.map((e=>e.toString())).join("")}walk(e,i){if(0===this.media.length)return;const a=t.walkerIndexGenerator(this.media);let r=0;for(;re.tokens())),...this.after]}toString(){return i.stringify(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+i.stringify(...this.after)}indexOf(e){return e===this.leading?"leading":"media-and"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(e,i){let a;if(i&&(a={...i}),!1===e({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(e,a))return!1;if(0===this.list.length)return;const r=t.walkerIndexGenerator(this.list);let n=0;for(;ne.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithAnd(){return MediaConditionListWithAnd.isMediaConditionListWithAnd(this)}static isMediaConditionListWithAnd(e){return!!e&&(e instanceof MediaConditionListWithAnd&&e.type===exports.NodeType.MediaConditionListWithAnd)}}class MediaConditionListWithOr{type=exports.NodeType.MediaConditionListWithOr;leading;list;before;after;constructor(e,t,i=[],a=[]){this.leading=e,this.list=t,this.before=i,this.after=a}tokens(){return[...this.before,...this.leading.tokens(),...this.list.flatMap((e=>e.tokens())),...this.after]}toString(){return i.stringify(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+i.stringify(...this.after)}indexOf(e){return e===this.leading?"leading":"media-or"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(e,i){let a;if(i&&(a={...i}),!1===e({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(e,a))return!1;if(0===this.list.length)return;const r=t.walkerIndexGenerator(this.list);let n=0;for(;ne.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithOr(){return MediaConditionListWithOr.isMediaConditionListWithOr(this)}static isMediaConditionListWithOr(e){return!!e&&(e instanceof MediaConditionListWithOr&&e.type===exports.NodeType.MediaConditionListWithOr)}}function isNumber(e){return!!(e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Number||e.type===t.ComponentValueType.Function&&r.has(toLowerCaseAZ(e.name[4].value)))}const r=new Set(["abs","acos","asin","atan","atan2","calc","clamp","cos","exp","hypot","log","max","min","mod","pow","rem","round","sign","sin","sqrt","tan"]);function isDimension(e){return e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Dimension}function isIdent(e){return e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Ident}function isEnvironmentVariable(e){return e.type===t.ComponentValueType.Function&&"env"===toLowerCaseAZ(e.name[4].value)}class MediaFeatureName{type=exports.NodeType.MediaFeatureName;name;before;after;constructor(e,t=[],i=[]){this.name=e,this.before=t,this.after=i}getName(){return this.name.value[4].value}getNameToken(){return this.name.value}tokens(){return[...this.before,...this.name.tokens(),...this.after]}toString(){return i.stringify(...this.before)+this.name.toString()+i.stringify(...this.after)}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens()}}isMediaFeatureName(){return MediaFeatureName.isMediaFeatureName(this)}static isMediaFeatureName(e){return!!e&&(e instanceof MediaFeatureName&&e.type===exports.NodeType.MediaFeatureName)}}function parseMediaFeatureName(e){let i=-1;for(let a=0;ae.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}class MediaFeatureBoolean{type=exports.NodeType.MediaFeatureBoolean;name;constructor(e){this.name=e}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return this.name.tokens()}toString(){return this.name.toString()}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.name.toJSON(),tokens:this.tokens()}}isMediaFeatureBoolean(){return MediaFeatureBoolean.isMediaFeatureBoolean(this)}static isMediaFeatureBoolean(e){return!!e&&(e instanceof MediaFeatureBoolean&&e.type===exports.NodeType.MediaFeatureBoolean)}}function parseMediaFeatureBoolean(e){const t=parseMediaFeatureName(e);return!1===t?t:new MediaFeatureBoolean(t)}class MediaFeatureValue{type=exports.NodeType.MediaFeatureValue;value;before;after;constructor(e,t=[],i=[]){Array.isArray(e)&&1===e.length?this.value=e[0]:this.value=e,this.before=t,this.after=i}tokens(){return Array.isArray(this.value)?[...this.before,...this.value.flatMap((e=>e.tokens())),...this.after]:[...this.before,...this.value.tokens(),...this.after]}toString(){return Array.isArray(this.value)?i.stringify(...this.before)+this.value.map((e=>e.toString())).join("")+i.stringify(...this.after):i.stringify(...this.before)+this.value.toString()+i.stringify(...this.after)}indexOf(e){return e===this.value?"value":-1}at(e){return"value"===e?this.value:Array.isArray(this.value)&&"number"==typeof e?(e<0&&(e=this.value.length+e),this.value[e]):void 0}walk(e,i){if(Array.isArray(this.value)){if(0===this.value.length)return;const a=t.walkerIndexGenerator(this.value);let r=0;for(;re.toJSON())),tokens:this.tokens()}:{type:this.type,value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureValue(){return MediaFeatureValue.isMediaFeatureValue(this)}static isMediaFeatureValue(e){return!!e&&(e instanceof MediaFeatureValue&&e.type===exports.NodeType.MediaFeatureValue)}}function parseMediaFeatureValue(e,i=!1){let a=-1,r=-1;for(let n=0;ne.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function matchesRatioExactly(e){let t=-1,i=-1;const a=matchesRatio(e);if(-1===a)return-1;t=a[0],i=a[1];for(let t=i+1;t2)return!1;if(e[0][0]!==i.TokenType.Delim)return!1;if(1===e.length)switch(e[0][4].value){case exports.MediaFeatureEQ.EQ:return exports.MediaFeatureEQ.EQ;case exports.MediaFeatureLT.LT:return exports.MediaFeatureLT.LT;case exports.MediaFeatureGT.GT:return exports.MediaFeatureGT.GT;default:return!1}if(e[1][0]!==i.TokenType.Delim)return!1;if(e[1][4].value!==exports.MediaFeatureEQ.EQ)return!1;switch(e[0][4].value){case exports.MediaFeatureLT.LT:return exports.MediaFeatureLT.LT_OR_EQ;case exports.MediaFeatureGT.GT:return exports.MediaFeatureGT.GT_OR_EQ;default:return!1}}exports.MediaFeatureLT=void 0,(n=exports.MediaFeatureLT||(exports.MediaFeatureLT={})).LT="<",n.LT_OR_EQ="<=",exports.MediaFeatureGT=void 0,(s=exports.MediaFeatureGT||(exports.MediaFeatureGT={})).GT=">",s.GT_OR_EQ=">=",exports.MediaFeatureEQ=void 0,(exports.MediaFeatureEQ||(exports.MediaFeatureEQ={})).EQ="=";class MediaFeatureRangeNameValue{type=exports.NodeType.MediaFeatureRangeNameValue;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.name.tokens(),...this.operator,...this.value.tokens()]}toString(){return this.name.toString()+i.stringify(...this.operator)+this.value.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeNameValue(){return MediaFeatureRangeNameValue.isMediaFeatureRangeNameValue(this)}static isMediaFeatureRangeNameValue(e){return!!e&&(e instanceof MediaFeatureRangeNameValue&&e.type===exports.NodeType.MediaFeatureRangeNameValue)}}class MediaFeatureRangeValueName{type=exports.NodeType.MediaFeatureRangeValueName;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.value.tokens(),...this.operator,...this.name.tokens()]}toString(){return this.value.toString()+i.stringify(...this.operator)+this.name.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueName(){return MediaFeatureRangeValueName.isMediaFeatureRangeValueName(this)}static isMediaFeatureRangeValueName(e){return!!e&&(e instanceof MediaFeatureRangeValueName&&e.type===exports.NodeType.MediaFeatureRangeValueName)}}class MediaFeatureRangeValueNameValue{type=exports.NodeType.MediaFeatureRangeValueNameValue;name;valueOne;valueOneOperator;valueTwo;valueTwoOperator;constructor(e,t,i,a,r){this.name=e,this.valueOne=t,this.valueOneOperator=i,this.valueTwo=a,this.valueTwoOperator=r}valueOneOperatorKind(){return comparisonFromTokens(this.valueOneOperator)}valueTwoOperatorKind(){return comparisonFromTokens(this.valueTwoOperator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.valueOne.tokens(),...this.valueOneOperator,...this.name.tokens(),...this.valueTwoOperator,...this.valueTwo.tokens()]}toString(){return this.valueOne.toString()+i.stringify(...this.valueOneOperator)+this.name.toString()+i.stringify(...this.valueTwoOperator)+this.valueTwo.toString()}indexOf(e){return e===this.name?"name":e===this.valueOne?"valueOne":e===this.valueTwo?"valueTwo":-1}at(e){return"name"===e?this.name:"valueOne"===e?this.valueOne:"valueTwo"===e?this.valueTwo:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.valueOne,parent:this,state:i},"valueOne")&&((!("walk"in this.valueOne)||!1!==this.valueOne.walk(e,i))&&(t&&(i={...t}),!1!==e({node:this.valueTwo,parent:this,state:i},"valueTwo")&&((!("walk"in this.valueTwo)||!1!==this.valueTwo.walk(e,i))&&void 0)))}toJSON(){return{type:this.type,name:this.name.toJSON(),valueOne:this.valueOne.toJSON(),valueTwo:this.valueTwo.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueNameValue(){return MediaFeatureRangeValueNameValue.isMediaFeatureRangeValueNameValue(this)}static isMediaFeatureRangeValueNameValue(e){return!!e&&(e instanceof MediaFeatureRangeValueNameValue&&e.type===exports.NodeType.MediaFeatureRangeValueNameValue)}}function parseMediaFeatureRange(e){let a=!1,r=!1;for(let n=0;ne.tokens())),-1!==r&&(o=e.slice(a+1,r+1).flatMap((e=>e.tokens())))):-1!==r&&(o=e.slice(0,r+1).flatMap((e=>e.tokens())));const u=parseMediaConditionWithoutOr(e.slice(Math.max(a,r,n)+1));return!1===u?new MediaQueryWithType(s,[...o,...e.slice(r+1).flatMap((e=>e.tokens()))]):new MediaQueryWithType(s,o,e.slice(r+1,n+1).flatMap((e=>e.tokens())),u)}}function parseMediaConditionListWithOr(e){let i=!1;const a=[];let r=-1,n=-1;for(let s=0;se.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function parseMediaConditionListWithAnd(e){let i=!1;const a=[];let r=-1,n=-1;for(let s=0;se.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function parseMediaCondition(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaConditionListWithOr(e);if(!1!==a)return new MediaCondition(a);const r=parseMediaInParens(e);return!1!==r&&new MediaCondition(r)}function parseMediaConditionWithoutOr(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaInParens(e);return!1!==a&&new MediaCondition(a)}function parseMediaInParens(e){let a=-1;for(let i=0;ie.tokens())),r.startToken],s=[r.endToken,...e.slice(a+1).flatMap((e=>e.tokens()))],o=parseMediaFeature(r,n,s);if(!1!==o)return new MediaInParens(o);const u=parseMediaCondition(r.value);return!1!==u?new MediaInParens(u,n,s):new MediaInParens(new GeneralEnclosed(r),e.slice(0,a).flatMap((e=>e.tokens())),e.slice(a+1).flatMap((e=>e.tokens())))}function parseMediaInParensFromSimpleBlock(e){if(e.startToken[0]!==i.TokenType.OpenParen)return!1;const t=parseMediaFeature(e,[e.startToken],[e.endToken]);if(!1!==t)return new MediaInParens(t);const a=parseMediaCondition(e.value);return!1!==a?new MediaInParens(a,[e.startToken],[e.endToken]):new MediaInParens(new GeneralEnclosed(e))}function parseMediaNot(e){let i=!1,a=null;for(let r=0;re.tokens())),t)}}}return a||!1}function parseMediaOr(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseMediaAnd(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseFromTokens(e,i){const a=t.parseCommaSeparatedListOfComponentValues(e,{onParseError:i?.onParseError});return a.map(((e,t)=>{const r=parseMediaQuery(e);return 0==r&&!0===i?.preserveInvalidMediaQueries?new MediaQueryInvalid(a[t]):r})).filter((e=>!!e))}exports.MediaQueryModifier=void 0,(o=exports.MediaQueryModifier||(exports.MediaQueryModifier={})).Not="not",o.Only="only";class CustomMedia{type=exports.NodeType.CustomMedia;name;mediaQueryList=null;trueOrFalseKeyword=null;constructor(e,t,i){this.name=e,this.mediaQueryList=t,this.trueOrFalseKeyword=i??null}getName(){for(let e=0;ee.toJSON()))}}isCustomMedia(){return CustomMedia.isCustomMedia(this)}static isCustomMedia(e){return!!e&&(e instanceof CustomMedia&&e.type===exports.NodeType.CustomMedia)}}function parseCustomMediaFromTokens(e,t){let a=[],r=e;for(let t=0;te.tokens()))}toString(){return this.media.map((e=>e.toString())).join("")}walk(e,i){if(0===this.media.length)return;const a=t.walkerIndexGenerator(this.media);let r=0;for(;re.tokens())),...this.after]}toString(){return i.stringify(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+i.stringify(...this.after)}indexOf(e){return e===this.leading?"leading":"media-and"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(e,i){let a;if(i&&(a={...i}),!1===e({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(e,a))return!1;if(0===this.list.length)return;const r=t.walkerIndexGenerator(this.list);let n=0;for(;ne.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithAnd(){return MediaConditionListWithAnd.isMediaConditionListWithAnd(this)}static isMediaConditionListWithAnd(e){return!!e&&(e instanceof MediaConditionListWithAnd&&e.type===exports.NodeType.MediaConditionListWithAnd)}}class MediaConditionListWithOr{type=exports.NodeType.MediaConditionListWithOr;leading;list;before;after;constructor(e,t,i=[],a=[]){this.leading=e,this.list=t,this.before=i,this.after=a}tokens(){return[...this.before,...this.leading.tokens(),...this.list.flatMap((e=>e.tokens())),...this.after]}toString(){return i.stringify(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+i.stringify(...this.after)}indexOf(e){return e===this.leading?"leading":"media-or"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(e,i){let a;if(i&&(a={...i}),!1===e({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(e,a))return!1;if(0===this.list.length)return;const r=t.walkerIndexGenerator(this.list);let n=0;for(;ne.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithOr(){return MediaConditionListWithOr.isMediaConditionListWithOr(this)}static isMediaConditionListWithOr(e){return!!e&&(e instanceof MediaConditionListWithOr&&e.type===exports.NodeType.MediaConditionListWithOr)}}function isNumber(e){return!!(e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Number||e.type===t.ComponentValueType.Function&&a.has(e.name[4].value.toLowerCase()))}const a=new Set(["abs","acos","asin","atan","atan2","calc","clamp","cos","exp","hypot","log","max","min","mod","pow","rem","round","sign","sin","sqrt","tan"]);function isDimension(e){return e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Dimension}function isIdent(e){return e.type===t.ComponentValueType.Token&&e.value[0]===i.TokenType.Ident}const r=/^env$/i;function isEnvironmentVariable(e){return!(e.type!==t.ComponentValueType.Function||!r.test(e.name[4].value))}class MediaFeatureName{type=exports.NodeType.MediaFeatureName;name;before;after;constructor(e,t=[],i=[]){this.name=e,this.before=t,this.after=i}getName(){return this.name.value[4].value}getNameToken(){return this.name.value}tokens(){return[...this.before,...this.name.tokens(),...this.after]}toString(){return i.stringify(...this.before)+this.name.toString()+i.stringify(...this.after)}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens()}}isMediaFeatureName(){return MediaFeatureName.isMediaFeatureName(this)}static isMediaFeatureName(e){return!!e&&(e instanceof MediaFeatureName&&e.type===exports.NodeType.MediaFeatureName)}}function parseMediaFeatureName(e){let i=-1;for(let a=0;ae.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}class MediaFeatureBoolean{type=exports.NodeType.MediaFeatureBoolean;name;constructor(e){this.name=e}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return this.name.tokens()}toString(){return this.name.toString()}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.name.toJSON(),tokens:this.tokens()}}isMediaFeatureBoolean(){return MediaFeatureBoolean.isMediaFeatureBoolean(this)}static isMediaFeatureBoolean(e){return!!e&&(e instanceof MediaFeatureBoolean&&e.type===exports.NodeType.MediaFeatureBoolean)}}function parseMediaFeatureBoolean(e){const t=parseMediaFeatureName(e);return!1===t?t:new MediaFeatureBoolean(t)}class MediaFeatureValue{type=exports.NodeType.MediaFeatureValue;value;before;after;constructor(e,t=[],i=[]){Array.isArray(e)&&1===e.length?this.value=e[0]:this.value=e,this.before=t,this.after=i}tokens(){return Array.isArray(this.value)?[...this.before,...this.value.flatMap((e=>e.tokens())),...this.after]:[...this.before,...this.value.tokens(),...this.after]}toString(){return Array.isArray(this.value)?i.stringify(...this.before)+this.value.map((e=>e.toString())).join("")+i.stringify(...this.after):i.stringify(...this.before)+this.value.toString()+i.stringify(...this.after)}indexOf(e){return e===this.value?"value":-1}at(e){return"value"===e?this.value:Array.isArray(this.value)&&"number"==typeof e?(e<0&&(e=this.value.length+e),this.value[e]):void 0}walk(e,i){if(Array.isArray(this.value)){if(0===this.value.length)return;const a=t.walkerIndexGenerator(this.value);let r=0;for(;re.toJSON())),tokens:this.tokens()}:{type:this.type,value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureValue(){return MediaFeatureValue.isMediaFeatureValue(this)}static isMediaFeatureValue(e){return!!e&&(e instanceof MediaFeatureValue&&e.type===exports.NodeType.MediaFeatureValue)}}function parseMediaFeatureValue(e,i=!1){let a=-1,r=-1;for(let n=0;ne.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function matchesRatioExactly(e){let t=-1,i=-1;const a=matchesRatio(e);if(-1===a)return-1;t=a[0],i=a[1];for(let t=i+1;t2)return!1;if(e[0][0]!==i.TokenType.Delim)return!1;if(1===e.length)switch(e[0][4].value){case exports.MediaFeatureEQ.EQ:return exports.MediaFeatureEQ.EQ;case exports.MediaFeatureLT.LT:return exports.MediaFeatureLT.LT;case exports.MediaFeatureGT.GT:return exports.MediaFeatureGT.GT;default:return!1}if(e[1][0]!==i.TokenType.Delim)return!1;if(e[1][4].value!==exports.MediaFeatureEQ.EQ)return!1;switch(e[0][4].value){case exports.MediaFeatureLT.LT:return exports.MediaFeatureLT.LT_OR_EQ;case exports.MediaFeatureGT.GT:return exports.MediaFeatureGT.GT_OR_EQ;default:return!1}}exports.MediaFeatureLT=void 0,(n=exports.MediaFeatureLT||(exports.MediaFeatureLT={})).LT="<",n.LT_OR_EQ="<=",exports.MediaFeatureGT=void 0,(s=exports.MediaFeatureGT||(exports.MediaFeatureGT={})).GT=">",s.GT_OR_EQ=">=",exports.MediaFeatureEQ=void 0,(exports.MediaFeatureEQ||(exports.MediaFeatureEQ={})).EQ="=";class MediaFeatureRangeNameValue{type=exports.NodeType.MediaFeatureRangeNameValue;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.name.tokens(),...this.operator,...this.value.tokens()]}toString(){return this.name.toString()+i.stringify(...this.operator)+this.value.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeNameValue(){return MediaFeatureRangeNameValue.isMediaFeatureRangeNameValue(this)}static isMediaFeatureRangeNameValue(e){return!!e&&(e instanceof MediaFeatureRangeNameValue&&e.type===exports.NodeType.MediaFeatureRangeNameValue)}}class MediaFeatureRangeValueName{type=exports.NodeType.MediaFeatureRangeValueName;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.value.tokens(),...this.operator,...this.name.tokens()]}toString(){return this.value.toString()+i.stringify(...this.operator)+this.name.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueName(){return MediaFeatureRangeValueName.isMediaFeatureRangeValueName(this)}static isMediaFeatureRangeValueName(e){return!!e&&(e instanceof MediaFeatureRangeValueName&&e.type===exports.NodeType.MediaFeatureRangeValueName)}}class MediaFeatureRangeValueNameValue{type=exports.NodeType.MediaFeatureRangeValueNameValue;name;valueOne;valueOneOperator;valueTwo;valueTwoOperator;constructor(e,t,i,a,r){this.name=e,this.valueOne=t,this.valueOneOperator=i,this.valueTwo=a,this.valueTwoOperator=r}valueOneOperatorKind(){return comparisonFromTokens(this.valueOneOperator)}valueTwoOperatorKind(){return comparisonFromTokens(this.valueTwoOperator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.valueOne.tokens(),...this.valueOneOperator,...this.name.tokens(),...this.valueTwoOperator,...this.valueTwo.tokens()]}toString(){return this.valueOne.toString()+i.stringify(...this.valueOneOperator)+this.name.toString()+i.stringify(...this.valueTwoOperator)+this.valueTwo.toString()}indexOf(e){return e===this.name?"name":e===this.valueOne?"valueOne":e===this.valueTwo?"valueTwo":-1}at(e){return"name"===e?this.name:"valueOne"===e?this.valueOne:"valueTwo"===e?this.valueTwo:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.valueOne,parent:this,state:i},"valueOne")&&((!("walk"in this.valueOne)||!1!==this.valueOne.walk(e,i))&&(t&&(i={...t}),!1!==e({node:this.valueTwo,parent:this,state:i},"valueTwo")&&((!("walk"in this.valueTwo)||!1!==this.valueTwo.walk(e,i))&&void 0)))}toJSON(){return{type:this.type,name:this.name.toJSON(),valueOne:this.valueOne.toJSON(),valueTwo:this.valueTwo.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueNameValue(){return MediaFeatureRangeValueNameValue.isMediaFeatureRangeValueNameValue(this)}static isMediaFeatureRangeValueNameValue(e){return!!e&&(e instanceof MediaFeatureRangeValueNameValue&&e.type===exports.NodeType.MediaFeatureRangeValueNameValue)}}function parseMediaFeatureRange(e){let a=!1,r=!1;for(let n=0;ne.tokens())),-1!==r&&(o=e.slice(a+1,r+1).flatMap((e=>e.tokens())))):-1!==r&&(o=e.slice(0,r+1).flatMap((e=>e.tokens())));const u=parseMediaConditionWithoutOr(e.slice(Math.max(a,r,n)+1));return!1===u?new MediaQueryWithType(s,[...o,...e.slice(r+1).flatMap((e=>e.tokens()))]):new MediaQueryWithType(s,o,e.slice(r+1,n+1).flatMap((e=>e.tokens())),u)}}function parseMediaConditionListWithOr(e){let i=!1;const a=[];let r=-1,n=-1;for(let s=0;se.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function parseMediaConditionListWithAnd(e){let i=!1;const a=[];let r=-1,n=-1;for(let s=0;se.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function parseMediaCondition(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaConditionListWithOr(e);if(!1!==a)return new MediaCondition(a);const r=parseMediaInParens(e);return!1!==r&&new MediaCondition(r)}function parseMediaConditionWithoutOr(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaInParens(e);return!1!==a&&new MediaCondition(a)}function parseMediaInParens(e){let a=-1;for(let i=0;ie.tokens())),r.startToken],s=[r.endToken,...e.slice(a+1).flatMap((e=>e.tokens()))],o=parseMediaFeature(r,n,s);if(!1!==o)return new MediaInParens(o);const u=parseMediaCondition(r.value);return!1!==u?new MediaInParens(u,n,s):new MediaInParens(new GeneralEnclosed(r),e.slice(0,a).flatMap((e=>e.tokens())),e.slice(a+1).flatMap((e=>e.tokens())))}function parseMediaInParensFromSimpleBlock(e){if(e.startToken[0]!==i.TokenType.OpenParen)return!1;const t=parseMediaFeature(e,[e.startToken],[e.endToken]);if(!1!==t)return new MediaInParens(t);const a=parseMediaCondition(e.value);return!1!==a?new MediaInParens(a,[e.startToken],[e.endToken]):new MediaInParens(new GeneralEnclosed(e))}exports.MediaQueryModifier=void 0,(o=exports.MediaQueryModifier||(exports.MediaQueryModifier={})).Not="not",o.Only="only";const u=/^not$/i;function parseMediaNot(e){let i=!1,a=null;for(let r=0;re.tokens())),t)}}}return a||!1}const d=/^or$/i;function parseMediaOr(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}const l=/^and$/i;function parseMediaAnd(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseFromTokens(e,i){const a=t.parseCommaSeparatedListOfComponentValues(e,{onParseError:i?.onParseError});return a.map(((e,t)=>{const r=parseMediaQuery(e);return!1===r&&!0===i?.preserveInvalidMediaQueries?new MediaQueryInvalid(a[t]):r})).filter((e=>!!e))}class CustomMedia{type=exports.NodeType.CustomMedia;name;mediaQueryList=null;trueOrFalseKeyword=null;constructor(e,t,i){this.name=e,this.mediaQueryList=t,this.trueOrFalseKeyword=i??null}getName(){for(let e=0;ee.toJSON()))}}isCustomMedia(){return CustomMedia.isCustomMedia(this)}static isCustomMedia(e){return!!e&&(e instanceof CustomMedia&&e.type===exports.NodeType.CustomMedia)}}function parseCustomMediaFromTokens(e,t){let a=[],r=e;for(let t=0;t; /** * @internal */ @@ -74,10 +50,7 @@ export declare class GeneralEnclosed { /** * @internal */ - toJSON(): { - type: NodeType; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -139,9 +112,9 @@ export declare function isMediaQueryWithType(x: unknown): x is MediaQueryWithTyp export declare function matchesComparison(componentValues: Array): false | [number, number]; -export declare function matchesRatio(componentValues: Array): number[] | -1; +export declare function matchesRatio(componentValues: Array): -1 | [number, number]; -export declare function matchesRatioExactly(componentValues: Array): number[] | -1; +export declare function matchesRatioExactly(componentValues: Array): -1 | [number, number]; export declare class MediaAnd { type: NodeType; @@ -278,20 +251,7 @@ export declare class MediaFeature { /** * @internal */ - toJSON(): { - type: NodeType; - feature: { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; - before: CSSToken[]; - after: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -312,15 +272,7 @@ export declare class MediaFeatureBoolean { /** * @internal */ - toJSON(): { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -359,11 +311,7 @@ export declare class MediaFeatureName { /** * @internal */ - toJSON(): { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -391,20 +339,7 @@ export declare class MediaFeaturePlain { /** * @internal */ - toJSON(): { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - value: { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -439,20 +374,7 @@ export declare class MediaFeatureRangeNameValue { /** * @internal */ - toJSON(): { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - value: { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -481,20 +403,7 @@ export declare class MediaFeatureRangeValueName { /** * @internal */ - toJSON(): { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - value: { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -526,25 +435,7 @@ export declare class MediaFeatureRangeValueNameValue { /** * @internal */ - toJSON(): { - type: NodeType; - name: { - type: NodeType; - name: string; - tokens: CSSToken[]; - }; - valueOne: { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; - valueTwo: { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -574,11 +465,7 @@ export declare class MediaFeatureValue { /** * @internal */ - toJSON(): { - type: NodeType; - value: unknown; - tokens: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -612,12 +499,7 @@ export declare class MediaInParens { /** * @internal */ - toJSON(): { - type: NodeType; - media: unknown; - before: CSSToken[]; - after: CSSToken[]; - }; + toJSON(): Record; /** * @internal */ @@ -646,16 +528,7 @@ export declare class MediaNot { /** * @internal */ - toJSON(): { - type: NodeType; - modifier: CSSToken[]; - media: { - type: NodeType; - media: unknown; - before: CSSToken[]; - after: CSSToken[]; - }; - }; + toJSON(): Record; /** * @internal */ @@ -684,16 +557,7 @@ export declare class MediaOr { /** * @internal */ - toJSON(): { - type: NodeType; - modifier: CSSToken[]; - media: { - type: NodeType; - media: unknown; - before: CSSToken[]; - after: CSSToken[]; - }; - }; + toJSON(): Record; /** * @internal */ @@ -722,11 +586,7 @@ export declare class MediaQueryInvalid { /** * @internal */ - toJSON(): { - type: NodeType; - string: string; - media: ComponentValue[]; - }; + toJSON(): Record; /** * @internal */ @@ -760,11 +620,7 @@ export declare class MediaQueryWithoutType { /** * @internal */ - toJSON(): { - type: NodeType; - string: string; - media: MediaCondition; - }; + toJSON(): Record; /** * @internal */ @@ -798,14 +654,7 @@ export declare class MediaQueryWithType { /** * @internal */ - toJSON(): { - type: NodeType; - string: string; - modifier: CSSToken[]; - mediaType: CSSToken[]; - and: CSSToken[] | undefined; - media: MediaCondition | undefined; - }; + toJSON(): Record; /** * @internal */ @@ -872,7 +721,7 @@ export declare enum NodeType { export declare function parse(source: string, options?: { preserveInvalidMediaQueries?: boolean; onParseError?: (error: ParseError) => void; -}): MediaQuery[]; +}): Array; export declare function parseCustomMedia(source: string, options?: { preserveInvalidMediaQueries?: boolean; @@ -887,7 +736,7 @@ export declare function parseCustomMediaFromTokens(tokens: Array, opti export declare function parseFromTokens(tokens: Array, options?: { preserveInvalidMediaQueries?: boolean; onParseError?: (error: ParseError) => void; -}): MediaQuery[]; +}): Array; export declare function typeFromToken(token: TokenIdent): MediaType | false; diff --git a/packages/media-query-list-parser/dist/index.mjs b/packages/media-query-list-parser/dist/index.mjs index 6a84592c1..aa536f275 100644 --- a/packages/media-query-list-parser/dist/index.mjs +++ b/packages/media-query-list-parser/dist/index.mjs @@ -1 +1 @@ -import{walkerIndexGenerator as e,ComponentValueType as t,TokenNode as i,parseListOfComponentValues as a,isWhitespaceNode as n,isCommentNode as r,isTokenNode as s,isSimpleBlockNode as o,parseCommaSeparatedListOfComponentValues as u}from"@csstools/css-parser-algorithms";import{stringify as d,TokenType as l,mutateIdent as h,tokenizer as m,cloneTokens as f}from"@csstools/css-tokenizer";var c;!function(e){e.CustomMedia="custom-media",e.GeneralEnclosed="general-enclosed",e.MediaAnd="media-and",e.MediaCondition="media-condition",e.MediaConditionListWithAnd="media-condition-list-and",e.MediaConditionListWithOr="media-condition-list-or",e.MediaFeature="media-feature",e.MediaFeatureBoolean="mf-boolean",e.MediaFeatureName="mf-name",e.MediaFeaturePlain="mf-plain",e.MediaFeatureRangeNameValue="mf-range-name-value",e.MediaFeatureRangeValueName="mf-range-value-name",e.MediaFeatureRangeValueNameValue="mf-range-value-name-value",e.MediaFeatureValue="mf-value",e.MediaInParens="media-in-parens",e.MediaNot="media-not",e.MediaOr="media-or",e.MediaQueryWithType="media-query-with-type",e.MediaQueryWithoutType="media-query-without-type",e.MediaQueryInvalid="media-query-invalid"}(c||(c={}));const M=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(M,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}class MediaCondition{type=c.MediaCondition;media;constructor(e){this.media=e}tokens(){return this.media.tokens()}toString(){return this.media.toString()}indexOf(e){return e===this.media?"media":-1}at(e){if("media"===e)return this.media}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.media,parent:this,state:i},"media")&&this.media.walk(e,i)}toJSON(){return{type:this.type,media:this.media.toJSON()}}isMediaCondition(){return MediaCondition.isMediaCondition(this)}static isMediaCondition(e){return!!e&&(e instanceof MediaCondition&&e.type===c.MediaCondition)}}class MediaInParens{type=c.MediaInParens;media;before;after;constructor(e,t=[],i=[]){this.media=e,this.before=t,this.after=i}tokens(){return[...this.before,...this.media.tokens(),...this.after]}toString(){return d(...this.before)+this.media.toString()+d(...this.after)}indexOf(e){return e===this.media?"media":-1}at(e){if("media"===e)return this.media}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.media,parent:this,state:i},"media")&&("walk"in this.media?this.media.walk(e,i):void 0)}toJSON(){return{type:this.type,media:this.media.toJSON(),before:this.before,after:this.after}}isMediaInParens(){return MediaInParens.isMediaInParens(this)}static isMediaInParens(e){return!!e&&(e instanceof MediaInParens&&e.type===c.MediaInParens)}}class MediaQueryWithType{type=c.MediaQueryWithType;modifier;mediaType;and=void 0;media=void 0;constructor(e,t,i,a){this.modifier=e,this.mediaType=t,i&&a&&(this.and=i,this.media=a)}getModifier(){if(!this.modifier.length)return"";for(let e=0;ee.tokens()))}toString(){return this.media.map((e=>e.toString())).join("")}walk(t,i){if(0===this.media.length)return;const a=e(this.media);let n=0;for(;ne.tokens())),...this.after]}toString(){return d(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+d(...this.after)}indexOf(e){return e===this.leading?"leading":"media-and"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(t,i){let a;if(i&&(a={...i}),!1===t({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(t,a))return!1;if(0===this.list.length)return;const n=e(this.list);let r=0;for(;re.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithAnd(){return MediaConditionListWithAnd.isMediaConditionListWithAnd(this)}static isMediaConditionListWithAnd(e){return!!e&&(e instanceof MediaConditionListWithAnd&&e.type===c.MediaConditionListWithAnd)}}class MediaConditionListWithOr{type=c.MediaConditionListWithOr;leading;list;before;after;constructor(e,t,i=[],a=[]){this.leading=e,this.list=t,this.before=i,this.after=a}tokens(){return[...this.before,...this.leading.tokens(),...this.list.flatMap((e=>e.tokens())),...this.after]}toString(){return d(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+d(...this.after)}indexOf(e){return e===this.leading?"leading":"media-or"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(t,i){let a;if(i&&(a={...i}),!1===t({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(t,a))return!1;if(0===this.list.length)return;const n=e(this.list);let r=0;for(;re.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithOr(){return MediaConditionListWithOr.isMediaConditionListWithOr(this)}static isMediaConditionListWithOr(e){return!!e&&(e instanceof MediaConditionListWithOr&&e.type===c.MediaConditionListWithOr)}}function isNumber(e){return!!(e.type===t.Token&&e.value[0]===l.Number||e.type===t.Function&&p.has(toLowerCaseAZ(e.name[4].value)))}const p=new Set(["abs","acos","asin","atan","atan2","calc","clamp","cos","exp","hypot","log","max","min","mod","pow","rem","round","sign","sin","sqrt","tan"]);function isDimension(e){return e.type===t.Token&&e.value[0]===l.Dimension}function isIdent(e){return e.type===t.Token&&e.value[0]===l.Ident}function isEnvironmentVariable(e){return e.type===t.Function&&"env"===toLowerCaseAZ(e.name[4].value)}class MediaFeatureName{type=c.MediaFeatureName;name;before;after;constructor(e,t=[],i=[]){this.name=e,this.before=t,this.after=i}getName(){return this.name.value[4].value}getNameToken(){return this.name.value}tokens(){return[...this.before,...this.name.tokens(),...this.after]}toString(){return d(...this.before)+this.name.toString()+d(...this.after)}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens()}}isMediaFeatureName(){return MediaFeatureName.isMediaFeatureName(this)}static isMediaFeatureName(e){return!!e&&(e instanceof MediaFeatureName&&e.type===c.MediaFeatureName)}}function parseMediaFeatureName(e){let i=-1;for(let a=0;ae.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}class MediaFeatureBoolean{type=c.MediaFeatureBoolean;name;constructor(e){this.name=e}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return this.name.tokens()}toString(){return this.name.toString()}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.name.toJSON(),tokens:this.tokens()}}isMediaFeatureBoolean(){return MediaFeatureBoolean.isMediaFeatureBoolean(this)}static isMediaFeatureBoolean(e){return!!e&&(e instanceof MediaFeatureBoolean&&e.type===c.MediaFeatureBoolean)}}function parseMediaFeatureBoolean(e){const t=parseMediaFeatureName(e);return!1===t?t:new MediaFeatureBoolean(t)}class MediaFeatureValue{type=c.MediaFeatureValue;value;before;after;constructor(e,t=[],i=[]){Array.isArray(e)&&1===e.length?this.value=e[0]:this.value=e,this.before=t,this.after=i}tokens(){return Array.isArray(this.value)?[...this.before,...this.value.flatMap((e=>e.tokens())),...this.after]:[...this.before,...this.value.tokens(),...this.after]}toString(){return Array.isArray(this.value)?d(...this.before)+this.value.map((e=>e.toString())).join("")+d(...this.after):d(...this.before)+this.value.toString()+d(...this.after)}indexOf(e){return e===this.value?"value":-1}at(e){return"value"===e?this.value:Array.isArray(this.value)&&"number"==typeof e?(e<0&&(e=this.value.length+e),this.value[e]):void 0}walk(t,i){if(Array.isArray(this.value)){if(0===this.value.length)return;const a=e(this.value);let n=0;for(;ne.toJSON())),tokens:this.tokens()}:{type:this.type,value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureValue(){return MediaFeatureValue.isMediaFeatureValue(this)}static isMediaFeatureValue(e){return!!e&&(e instanceof MediaFeatureValue&&e.type===c.MediaFeatureValue)}}function parseMediaFeatureValue(e,i=!1){let a=-1,n=-1;for(let r=0;re.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function matchesRatioExactly(e){let t=-1,i=-1;const a=matchesRatio(e);if(-1===a)return-1;t=a[0],i=a[1];for(let t=i+1;t2)return!1;if(e[0][0]!==l.Delim)return!1;if(1===e.length)switch(e[0][4].value){case g.EQ:return g.EQ;case y.LT:return y.LT;case v.GT:return v.GT;default:return!1}if(e[1][0]!==l.Delim)return!1;if(e[1][4].value!==g.EQ)return!1;switch(e[0][4].value){case y.LT:return y.LT_OR_EQ;case v.GT:return v.GT_OR_EQ;default:return!1}}function invertComparison(e){switch(e){case g.EQ:return g.EQ;case y.LT:return v.GT;case y.LT_OR_EQ:return v.GT_OR_EQ;case v.GT:return y.LT;case v.GT_OR_EQ:return y.LT_OR_EQ;default:return!1}}!function(e){e.LT="<",e.LT_OR_EQ="<="}(y||(y={})),function(e){e.GT=">",e.GT_OR_EQ=">="}(v||(v={})),function(e){e.EQ="="}(g||(g={}));class MediaFeatureRangeNameValue{type=c.MediaFeatureRangeNameValue;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.name.tokens(),...this.operator,...this.value.tokens()]}toString(){return this.name.toString()+d(...this.operator)+this.value.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeNameValue(){return MediaFeatureRangeNameValue.isMediaFeatureRangeNameValue(this)}static isMediaFeatureRangeNameValue(e){return!!e&&(e instanceof MediaFeatureRangeNameValue&&e.type===c.MediaFeatureRangeNameValue)}}class MediaFeatureRangeValueName{type=c.MediaFeatureRangeValueName;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.value.tokens(),...this.operator,...this.name.tokens()]}toString(){return this.value.toString()+d(...this.operator)+this.name.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueName(){return MediaFeatureRangeValueName.isMediaFeatureRangeValueName(this)}static isMediaFeatureRangeValueName(e){return!!e&&(e instanceof MediaFeatureRangeValueName&&e.type===c.MediaFeatureRangeValueName)}}class MediaFeatureRangeValueNameValue{type=c.MediaFeatureRangeValueNameValue;name;valueOne;valueOneOperator;valueTwo;valueTwoOperator;constructor(e,t,i,a,n){this.name=e,this.valueOne=t,this.valueOneOperator=i,this.valueTwo=a,this.valueTwoOperator=n}valueOneOperatorKind(){return comparisonFromTokens(this.valueOneOperator)}valueTwoOperatorKind(){return comparisonFromTokens(this.valueTwoOperator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.valueOne.tokens(),...this.valueOneOperator,...this.name.tokens(),...this.valueTwoOperator,...this.valueTwo.tokens()]}toString(){return this.valueOne.toString()+d(...this.valueOneOperator)+this.name.toString()+d(...this.valueTwoOperator)+this.valueTwo.toString()}indexOf(e){return e===this.name?"name":e===this.valueOne?"valueOne":e===this.valueTwo?"valueTwo":-1}at(e){return"name"===e?this.name:"valueOne"===e?this.valueOne:"valueTwo"===e?this.valueTwo:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.valueOne,parent:this,state:i},"valueOne")&&((!("walk"in this.valueOne)||!1!==this.valueOne.walk(e,i))&&(t&&(i={...t}),!1!==e({node:this.valueTwo,parent:this,state:i},"valueTwo")&&((!("walk"in this.valueTwo)||!1!==this.valueTwo.walk(e,i))&&void 0)))}toJSON(){return{type:this.type,name:this.name.toJSON(),valueOne:this.valueOne.toJSON(),valueTwo:this.valueTwo.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueNameValue(){return MediaFeatureRangeValueNameValue.isMediaFeatureRangeValueNameValue(this)}static isMediaFeatureRangeValueNameValue(e){return!!e&&(e instanceof MediaFeatureRangeValueNameValue&&e.type===c.MediaFeatureRangeValueNameValue)}}function parseMediaFeatureRange(e){let i=!1,a=!1;for(let n=0;ne.tokens())),-1!==i&&(u=e.slice(t+1,i+1).flatMap((e=>e.tokens())))):-1!==i&&(u=e.slice(0,i+1).flatMap((e=>e.tokens())));const d=parseMediaConditionWithoutOr(e.slice(Math.max(t,i,a)+1));return!1===d?new MediaQueryWithType(o,[...u,...e.slice(i+1).flatMap((e=>e.tokens()))]):new MediaQueryWithType(o,u,e.slice(i+1,a+1).flatMap((e=>e.tokens())),d)}}function parseMediaConditionListWithOr(e){let i=!1;const a=[];let n=-1,r=-1;for(let s=0;se.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function parseMediaConditionListWithAnd(e){let i=!1;const a=[];let n=-1,r=-1;for(let s=0;se.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function parseMediaCondition(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaConditionListWithOr(e);if(!1!==a)return new MediaCondition(a);const n=parseMediaInParens(e);return!1!==n&&new MediaCondition(n)}function parseMediaConditionWithoutOr(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaInParens(e);return!1!==a&&new MediaCondition(a)}function parseMediaInParens(e){let i=-1;for(let a=0;ae.tokens())),a.startToken],r=[a.endToken,...e.slice(i+1).flatMap((e=>e.tokens()))],s=parseMediaFeature(a,n,r);if(!1!==s)return new MediaInParens(s);const u=parseMediaCondition(a.value);return!1!==u?new MediaInParens(u,n,r):new MediaInParens(new GeneralEnclosed(a),e.slice(0,i).flatMap((e=>e.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}function parseMediaInParensFromSimpleBlock(e){if(e.startToken[0]!==l.OpenParen)return!1;const t=parseMediaFeature(e,[e.startToken],[e.endToken]);if(!1!==t)return new MediaInParens(t);const i=parseMediaCondition(e.value);return!1!==i?new MediaInParens(i,[e.startToken],[e.endToken]):new MediaInParens(new GeneralEnclosed(e))}function parseMediaNot(e){let i=!1,a=null;for(let n=0;ne.tokens())),t)}}}return a||!1}function parseMediaOr(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseMediaAnd(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseFromTokens(e,t){const i=u(e,{onParseError:t?.onParseError});return i.map(((e,a)=>{const n=parseMediaQuery(e);return 0==n&&!0===t?.preserveInvalidMediaQueries?new MediaQueryInvalid(i[a]):n})).filter((e=>!!e))}function parse(e,t){const i=m({css:e},{onParseError:t?.onParseError}),a=[];for(;!i.endOfFile();)a.push(i.nextToken());return a.push(i.nextToken()),parseFromTokens(a,t)}!function(e){e.Not="not",e.Only="only"}(k||(k={}));class CustomMedia{type=c.CustomMedia;name;mediaQueryList=null;trueOrFalseKeyword=null;constructor(e,t,i){this.name=e,this.mediaQueryList=t,this.trueOrFalseKeyword=i??null}getName(){for(let e=0;ee.toJSON()))}}isCustomMedia(){return CustomMedia.isCustomMedia(this)}static isCustomMedia(e){return!!e&&(e instanceof CustomMedia&&e.type===c.CustomMedia)}}function parseCustomMediaFromTokens(e,t){let i=[],a=e;for(let t=0;te.tokens()))}toString(){return this.media.map((e=>e.toString())).join("")}walk(t,i){if(0===this.media.length)return;const a=e(this.media);let n=0;for(;ne.tokens())),...this.after]}toString(){return d(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+d(...this.after)}indexOf(e){return e===this.leading?"leading":"media-and"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(t,i){let a;if(i&&(a={...i}),!1===t({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(t,a))return!1;if(0===this.list.length)return;const n=e(this.list);let r=0;for(;re.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithAnd(){return MediaConditionListWithAnd.isMediaConditionListWithAnd(this)}static isMediaConditionListWithAnd(e){return!!e&&(e instanceof MediaConditionListWithAnd&&e.type===c.MediaConditionListWithAnd)}}class MediaConditionListWithOr{type=c.MediaConditionListWithOr;leading;list;before;after;constructor(e,t,i=[],a=[]){this.leading=e,this.list=t,this.before=i,this.after=a}tokens(){return[...this.before,...this.leading.tokens(),...this.list.flatMap((e=>e.tokens())),...this.after]}toString(){return d(...this.before)+this.leading.toString()+this.list.map((e=>e.toString())).join("")+d(...this.after)}indexOf(e){return e===this.leading?"leading":"media-or"===e.type?this.list.indexOf(e):-1}at(e){return"leading"===e?this.leading:"number"==typeof e?(e<0&&(e=this.list.length+e),this.list[e]):void 0}walk(t,i){let a;if(i&&(a={...i}),!1===t({node:this.leading,parent:this,state:a},"leading"))return!1;if("walk"in this.leading&&!1===this.leading.walk(t,a))return!1;if(0===this.list.length)return;const n=e(this.list);let r=0;for(;re.toJSON())),before:this.before,after:this.after}}isMediaConditionListWithOr(){return MediaConditionListWithOr.isMediaConditionListWithOr(this)}static isMediaConditionListWithOr(e){return!!e&&(e instanceof MediaConditionListWithOr&&e.type===c.MediaConditionListWithOr)}}function isNumber(e){return!!(e.type===t.Token&&e.value[0]===l.Number||e.type===t.Function&&M.has(e.name[4].value.toLowerCase()))}const M=new Set(["abs","acos","asin","atan","atan2","calc","clamp","cos","exp","hypot","log","max","min","mod","pow","rem","round","sign","sin","sqrt","tan"]);function isDimension(e){return e.type===t.Token&&e.value[0]===l.Dimension}function isIdent(e){return e.type===t.Token&&e.value[0]===l.Ident}const p=/^env$/i;function isEnvironmentVariable(e){return!(e.type!==t.Function||!p.test(e.name[4].value))}class MediaFeatureName{type=c.MediaFeatureName;name;before;after;constructor(e,t=[],i=[]){this.name=e,this.before=t,this.after=i}getName(){return this.name.value[4].value}getNameToken(){return this.name.value}tokens(){return[...this.before,...this.name.tokens(),...this.after]}toString(){return d(...this.before)+this.name.toString()+d(...this.after)}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens()}}isMediaFeatureName(){return MediaFeatureName.isMediaFeatureName(this)}static isMediaFeatureName(e){return!!e&&(e instanceof MediaFeatureName&&e.type===c.MediaFeatureName)}}function parseMediaFeatureName(e){let i=-1;for(let a=0;ae.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}class MediaFeatureBoolean{type=c.MediaFeatureBoolean;name;constructor(e){this.name=e}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return this.name.tokens()}toString(){return this.name.toString()}indexOf(e){return e===this.name?"name":-1}at(e){if("name"===e)return this.name}toJSON(){return{type:this.type,name:this.name.toJSON(),tokens:this.tokens()}}isMediaFeatureBoolean(){return MediaFeatureBoolean.isMediaFeatureBoolean(this)}static isMediaFeatureBoolean(e){return!!e&&(e instanceof MediaFeatureBoolean&&e.type===c.MediaFeatureBoolean)}}function parseMediaFeatureBoolean(e){const t=parseMediaFeatureName(e);return!1===t?t:new MediaFeatureBoolean(t)}class MediaFeatureValue{type=c.MediaFeatureValue;value;before;after;constructor(e,t=[],i=[]){Array.isArray(e)&&1===e.length?this.value=e[0]:this.value=e,this.before=t,this.after=i}tokens(){return Array.isArray(this.value)?[...this.before,...this.value.flatMap((e=>e.tokens())),...this.after]:[...this.before,...this.value.tokens(),...this.after]}toString(){return Array.isArray(this.value)?d(...this.before)+this.value.map((e=>e.toString())).join("")+d(...this.after):d(...this.before)+this.value.toString()+d(...this.after)}indexOf(e){return e===this.value?"value":-1}at(e){return"value"===e?this.value:Array.isArray(this.value)&&"number"==typeof e?(e<0&&(e=this.value.length+e),this.value[e]):void 0}walk(t,i){if(Array.isArray(this.value)){if(0===this.value.length)return;const a=e(this.value);let n=0;for(;ne.toJSON())),tokens:this.tokens()}:{type:this.type,value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureValue(){return MediaFeatureValue.isMediaFeatureValue(this)}static isMediaFeatureValue(e){return!!e&&(e instanceof MediaFeatureValue&&e.type===c.MediaFeatureValue)}}function parseMediaFeatureValue(e,i=!1){let a=-1,n=-1;for(let r=0;re.tokens())),e.slice(n+1).flatMap((e=>e.tokens())))}function matchesRatioExactly(e){let t=-1,i=-1;const a=matchesRatio(e);if(-1===a)return-1;t=a[0],i=a[1];for(let t=i+1;t2)return!1;if(e[0][0]!==l.Delim)return!1;if(1===e.length)switch(e[0][4].value){case g.EQ:return g.EQ;case y.LT:return y.LT;case v.GT:return v.GT;default:return!1}if(e[1][0]!==l.Delim)return!1;if(e[1][4].value!==g.EQ)return!1;switch(e[0][4].value){case y.LT:return y.LT_OR_EQ;case v.GT:return v.GT_OR_EQ;default:return!1}}function invertComparison(e){switch(e){case g.EQ:return g.EQ;case y.LT:return v.GT;case y.LT_OR_EQ:return v.GT_OR_EQ;case v.GT:return y.LT;case v.GT_OR_EQ:return y.LT_OR_EQ;default:return!1}}!function(e){e.LT="<",e.LT_OR_EQ="<="}(y||(y={})),function(e){e.GT=">",e.GT_OR_EQ=">="}(v||(v={})),function(e){e.EQ="="}(g||(g={}));class MediaFeatureRangeNameValue{type=c.MediaFeatureRangeNameValue;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.name.tokens(),...this.operator,...this.value.tokens()]}toString(){return this.name.toString()+d(...this.operator)+this.value.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeNameValue(){return MediaFeatureRangeNameValue.isMediaFeatureRangeNameValue(this)}static isMediaFeatureRangeNameValue(e){return!!e&&(e instanceof MediaFeatureRangeNameValue&&e.type===c.MediaFeatureRangeNameValue)}}class MediaFeatureRangeValueName{type=c.MediaFeatureRangeValueName;name;operator;value;constructor(e,t,i){this.name=e,this.operator=t,this.value=i}operatorKind(){return comparisonFromTokens(this.operator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.value.tokens(),...this.operator,...this.name.tokens()]}toString(){return this.value.toString()+d(...this.operator)+this.name.toString()}indexOf(e){return e===this.name?"name":e===this.value?"value":-1}at(e){return"name"===e?this.name:"value"===e?this.value:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.value,parent:this,state:i},"value")&&("walk"in this.value?this.value.walk(e,i):void 0)}toJSON(){return{type:this.type,name:this.name.toJSON(),value:this.value.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueName(){return MediaFeatureRangeValueName.isMediaFeatureRangeValueName(this)}static isMediaFeatureRangeValueName(e){return!!e&&(e instanceof MediaFeatureRangeValueName&&e.type===c.MediaFeatureRangeValueName)}}class MediaFeatureRangeValueNameValue{type=c.MediaFeatureRangeValueNameValue;name;valueOne;valueOneOperator;valueTwo;valueTwoOperator;constructor(e,t,i,a,n){this.name=e,this.valueOne=t,this.valueOneOperator=i,this.valueTwo=a,this.valueTwoOperator=n}valueOneOperatorKind(){return comparisonFromTokens(this.valueOneOperator)}valueTwoOperatorKind(){return comparisonFromTokens(this.valueTwoOperator)}getName(){return this.name.getName()}getNameToken(){return this.name.getNameToken()}tokens(){return[...this.valueOne.tokens(),...this.valueOneOperator,...this.name.tokens(),...this.valueTwoOperator,...this.valueTwo.tokens()]}toString(){return this.valueOne.toString()+d(...this.valueOneOperator)+this.name.toString()+d(...this.valueTwoOperator)+this.valueTwo.toString()}indexOf(e){return e===this.name?"name":e===this.valueOne?"valueOne":e===this.valueTwo?"valueTwo":-1}at(e){return"name"===e?this.name:"valueOne"===e?this.valueOne:"valueTwo"===e?this.valueTwo:void 0}walk(e,t){let i;return t&&(i={...t}),!1!==e({node:this.valueOne,parent:this,state:i},"valueOne")&&((!("walk"in this.valueOne)||!1!==this.valueOne.walk(e,i))&&(t&&(i={...t}),!1!==e({node:this.valueTwo,parent:this,state:i},"valueTwo")&&((!("walk"in this.valueTwo)||!1!==this.valueTwo.walk(e,i))&&void 0)))}toJSON(){return{type:this.type,name:this.name.toJSON(),valueOne:this.valueOne.toJSON(),valueTwo:this.valueTwo.toJSON(),tokens:this.tokens()}}isMediaFeatureRangeValueNameValue(){return MediaFeatureRangeValueNameValue.isMediaFeatureRangeValueNameValue(this)}static isMediaFeatureRangeValueNameValue(e){return!!e&&(e instanceof MediaFeatureRangeValueNameValue&&e.type===c.MediaFeatureRangeValueNameValue)}}function parseMediaFeatureRange(e){let i=!1,a=!1;for(let n=0;ne.tokens())),-1!==i&&(u=e.slice(t+1,i+1).flatMap((e=>e.tokens())))):-1!==i&&(u=e.slice(0,i+1).flatMap((e=>e.tokens())));const d=parseMediaConditionWithoutOr(e.slice(Math.max(t,i,a)+1));return!1===d?new MediaQueryWithType(o,[...u,...e.slice(i+1).flatMap((e=>e.tokens()))]):new MediaQueryWithType(o,u,e.slice(i+1,a+1).flatMap((e=>e.tokens())),d)}}function parseMediaConditionListWithOr(e){let i=!1;const a=[];let n=-1,r=-1;for(let s=0;se.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function parseMediaConditionListWithAnd(e){let i=!1;const a=[];let n=-1,r=-1;for(let s=0;se.tokens())),e.slice(r+1).flatMap((e=>e.tokens())))}function parseMediaCondition(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaConditionListWithOr(e);if(!1!==a)return new MediaCondition(a);const n=parseMediaInParens(e);return!1!==n&&new MediaCondition(n)}function parseMediaConditionWithoutOr(e){const t=parseMediaNot(e);if(!1!==t)return new MediaCondition(t);const i=parseMediaConditionListWithAnd(e);if(!1!==i)return new MediaCondition(i);const a=parseMediaInParens(e);return!1!==a&&new MediaCondition(a)}function parseMediaInParens(e){let i=-1;for(let a=0;ae.tokens())),a.startToken],r=[a.endToken,...e.slice(i+1).flatMap((e=>e.tokens()))],s=parseMediaFeature(a,n,r);if(!1!==s)return new MediaInParens(s);const u=parseMediaCondition(a.value);return!1!==u?new MediaInParens(u,n,r):new MediaInParens(new GeneralEnclosed(a),e.slice(0,i).flatMap((e=>e.tokens())),e.slice(i+1).flatMap((e=>e.tokens())))}function parseMediaInParensFromSimpleBlock(e){if(e.startToken[0]!==l.OpenParen)return!1;const t=parseMediaFeature(e,[e.startToken],[e.endToken]);if(!1!==t)return new MediaInParens(t);const i=parseMediaCondition(e.value);return!1!==i?new MediaInParens(i,[e.startToken],[e.endToken]):new MediaInParens(new GeneralEnclosed(e))}!function(e){e.Not="not",e.Only="only"}(k||(k={}));const F=/^not$/i;function parseMediaNot(e){let i=!1,a=null;for(let n=0;ne.tokens())),t)}}}return a||!1}const N=/^or$/i;function parseMediaOr(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}const O=/^and$/i;function parseMediaAnd(e){let i=!1;for(let a=0;ae.tokens())),t)}}return!1}}return!1}function parseFromTokens(e,t){const i=u(e,{onParseError:t?.onParseError});return i.map(((e,a)=>{const n=parseMediaQuery(e);return!1===n&&!0===t?.preserveInvalidMediaQueries?new MediaQueryInvalid(i[a]):n})).filter((e=>!!e))}function parse(e,t){const i=m({css:e},{onParseError:t?.onParseError}),a=[];for(;!i.endOfFile();)a.push(i.nextToken());return a.push(i.nextToken()),parseFromTokens(a,t)}class CustomMedia{type=c.CustomMedia;name;mediaQueryList=null;trueOrFalseKeyword=null;constructor(e,t,i){this.name=e,this.mediaQueryList=t,this.trueOrFalseKeyword=i??null}getName(){for(let e=0;ee.toJSON()))}}isCustomMedia(){return CustomMedia.isCustomMedia(this)}static isCustomMedia(e){return!!e&&(e instanceof CustomMedia&&e.type===c.CustomMedia)}}function parseCustomMediaFromTokens(e,t){let i=[],a=e;for(let t=0;t" }, { "kind": "Content", @@ -16898,7 +16907,7 @@ "fileUrlPath": "dist/_types/parser/parse.d.ts", "returnTypeTokenRange": { "startIndex": 7, - "endIndex": 9 + "endIndex": 11 }, "releaseTag": "Public", "overloadIndex": 1, @@ -17134,6 +17143,15 @@ "kind": "Content", "text": "): " }, + { + "kind": "Reference", + "text": "Array", + "canonicalReference": "!Array:interface" + }, + { + "kind": "Content", + "text": "<" + }, { "kind": "Reference", "text": "MediaQuery", @@ -17141,7 +17159,7 @@ }, { "kind": "Content", - "text": "[]" + "text": ">" }, { "kind": "Content", @@ -17151,7 +17169,7 @@ "fileUrlPath": "dist/_types/parser/parse.d.ts", "returnTypeTokenRange": { "startIndex": 10, - "endIndex": 12 + "endIndex": 14 }, "releaseTag": "Public", "overloadIndex": 1, diff --git a/packages/media-query-list-parser/docs/media-query-list-parser.matchesratio.md b/packages/media-query-list-parser/docs/media-query-list-parser.matchesratio.md index 2986a0bde..57d105688 100644 --- a/packages/media-query-list-parser/docs/media-query-list-parser.matchesratio.md +++ b/packages/media-query-list-parser/docs/media-query-list-parser.matchesratio.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function matchesRatio(componentValues: Array): number[] | -1; +export declare function matchesRatio(componentValues: Array): -1 | [number, number]; ``` ## Parameters @@ -18,5 +18,5 @@ export declare function matchesRatio(componentValues: Array): nu **Returns:** -number\[\] \| -1 +-1 \| \[number, number\] diff --git a/packages/media-query-list-parser/docs/media-query-list-parser.matchesratioexactly.md b/packages/media-query-list-parser/docs/media-query-list-parser.matchesratioexactly.md index 8e4394223..19d5c2144 100644 --- a/packages/media-query-list-parser/docs/media-query-list-parser.matchesratioexactly.md +++ b/packages/media-query-list-parser/docs/media-query-list-parser.matchesratioexactly.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function matchesRatioExactly(componentValues: Array): number[] | -1; +export declare function matchesRatioExactly(componentValues: Array): -1 | [number, number]; ``` ## Parameters @@ -18,5 +18,5 @@ export declare function matchesRatioExactly(componentValues: Array void; -}): MediaQuery[]; +}): Array; ``` ## Parameters @@ -22,5 +22,5 @@ export declare function parse(source: string, options?: { **Returns:** -[MediaQuery](./media-query-list-parser.mediaquery.md)\[\] +Array<[MediaQuery](./media-query-list-parser.mediaquery.md)> diff --git a/packages/media-query-list-parser/docs/media-query-list-parser.parsefromtokens.md b/packages/media-query-list-parser/docs/media-query-list-parser.parsefromtokens.md index 0f6757043..2d37b3658 100644 --- a/packages/media-query-list-parser/docs/media-query-list-parser.parsefromtokens.md +++ b/packages/media-query-list-parser/docs/media-query-list-parser.parsefromtokens.md @@ -10,7 +10,7 @@ export declare function parseFromTokens(tokens: Array, options?: { preserveInvalidMediaQueries?: boolean; onParseError?: (error: ParseError) => void; -}): MediaQuery[]; +}): Array; ``` ## Parameters @@ -22,5 +22,5 @@ export declare function parseFromTokens(tokens: Array, options?: { **Returns:** -[MediaQuery](./media-query-list-parser.mediaquery.md)\[\] +Array<[MediaQuery](./media-query-list-parser.mediaquery.md)> diff --git a/packages/media-query-list-parser/src/nodes/custom-media.ts b/packages/media-query-list-parser/src/nodes/custom-media.ts index 15032d496..7eca6772f 100644 --- a/packages/media-query-list-parser/src/nodes/custom-media.ts +++ b/packages/media-query-list-parser/src/nodes/custom-media.ts @@ -1,6 +1,5 @@ import { CSSToken, stringify, TokenType } from '@csstools/css-tokenizer'; import { NodeType } from '../util/node-type'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; import { MediaQuery } from './media-query'; export class CustomMedia { @@ -58,7 +57,7 @@ export class CustomMedia { } if (token[0] === TokenType.Ident) { - return toLowerCaseAZ(token[4].value) === 'true'; + return token[4].value.toLowerCase() === 'true'; } return false; @@ -83,7 +82,7 @@ export class CustomMedia { } if (token[0] === TokenType.Ident) { - return toLowerCaseAZ(token[4].value) === 'false'; + return token[4].value.toLowerCase() === 'false'; } return false; @@ -130,7 +129,7 @@ export class CustomMedia { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, string: this.toString(), diff --git a/packages/media-query-list-parser/src/nodes/general-enclosed.ts b/packages/media-query-list-parser/src/nodes/general-enclosed.ts index d6536ae25..7efb7c228 100644 --- a/packages/media-query-list-parser/src/nodes/general-enclosed.ts +++ b/packages/media-query-list-parser/src/nodes/general-enclosed.ts @@ -53,7 +53,7 @@ export class GeneralEnclosed { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, tokens: this.tokens(), diff --git a/packages/media-query-list-parser/src/nodes/media-feature-boolean.ts b/packages/media-query-list-parser/src/nodes/media-feature-boolean.ts index d826f29e0..87956e7ca 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature-boolean.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature-boolean.ts @@ -45,7 +45,7 @@ export class MediaFeatureBoolean { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.name.toJSON(), @@ -73,7 +73,7 @@ export class MediaFeatureBoolean { } } -export function parseMediaFeatureBoolean(componentValues: Array) { +export function parseMediaFeatureBoolean(componentValues: Array): MediaFeatureBoolean|false { const mediaFeatureName = parseMediaFeatureName(componentValues); if (mediaFeatureName === false) { return mediaFeatureName; diff --git a/packages/media-query-list-parser/src/nodes/media-feature-name.ts b/packages/media-query-list-parser/src/nodes/media-feature-name.ts index 58e43faa2..d716921ca 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature-name.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature-name.ts @@ -55,7 +55,7 @@ export class MediaFeatureName { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.getName(), diff --git a/packages/media-query-list-parser/src/nodes/media-feature-plain.ts b/packages/media-query-list-parser/src/nodes/media-feature-plain.ts index fc9cf7130..e475dd26f 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature-plain.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature-plain.ts @@ -59,7 +59,7 @@ export class MediaFeaturePlain { } } - walk>(cb: (entry: { node: MediaFeaturePlainWalkerEntry, parent: MediaFeaturePlainWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T) { + walk>(cb: (entry: { node: MediaFeaturePlainWalkerEntry, parent: MediaFeaturePlainWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T): false | undefined { let stateClone: T | undefined = undefined; if (state) { stateClone = { @@ -77,7 +77,7 @@ export class MediaFeaturePlain { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.name.toJSON(), diff --git a/packages/media-query-list-parser/src/nodes/media-feature-range.ts b/packages/media-query-list-parser/src/nodes/media-feature-range.ts index 0fcbd68f5..a2a543d14 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature-range.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature-range.ts @@ -88,7 +88,7 @@ export class MediaFeatureRangeNameValue { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.name.toJSON(), @@ -176,7 +176,7 @@ export class MediaFeatureRangeValueName { } } - walk>(cb: (entry: { node: MediaFeatureRangeWalkerEntry, parent: MediaFeatureRangeWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T) { + walk>(cb: (entry: { node: MediaFeatureRangeWalkerEntry, parent: MediaFeatureRangeWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T): false | undefined { let stateClone: T | undefined = undefined; if (state) { stateClone = { @@ -196,7 +196,7 @@ export class MediaFeatureRangeValueName { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.name.toJSON(), @@ -302,7 +302,7 @@ export class MediaFeatureRangeValueNameValue { } } - walk>(cb: (entry: { node: MediaFeatureRangeWalkerEntry, parent: MediaFeatureRangeWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T) { + walk>(cb: (entry: { node: MediaFeatureRangeWalkerEntry, parent: MediaFeatureRangeWalkerParent, state?: T }, index: number | string) => boolean | void, state?: T): false | undefined { let stateClone: T | undefined = undefined; if (state) { stateClone = { @@ -340,7 +340,7 @@ export class MediaFeatureRangeValueNameValue { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, name: this.name.toJSON(), diff --git a/packages/media-query-list-parser/src/nodes/media-feature-value.ts b/packages/media-query-list-parser/src/nodes/media-feature-value.ts index 56a03c8d7..3a16fe9d1 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature-value.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature-value.ts @@ -121,7 +121,7 @@ export class MediaFeatureValue { /** * @internal */ - toJSON() { + toJSON(): Record { if (Array.isArray(this.value)) { return { type: this.type, @@ -228,7 +228,7 @@ export function parseMediaFeatureValue(componentValues: Array, i ); } -export function matchesRatioExactly(componentValues: Array) { +export function matchesRatioExactly(componentValues: Array): -1 | [number, number] { let firstNumber = -1; let secondNumber = -1; @@ -256,7 +256,7 @@ export function matchesRatioExactly(componentValues: Array) { return [firstNumber, secondNumber]; } -export function matchesRatio(componentValues: Array) { +export function matchesRatio(componentValues: Array): -1 | [number, number] { let firstNumber = -1; let delim = -1; diff --git a/packages/media-query-list-parser/src/nodes/media-feature.ts b/packages/media-query-list-parser/src/nodes/media-feature.ts index 49d2c0e26..17499521b 100644 --- a/packages/media-query-list-parser/src/nodes/media-feature.ts +++ b/packages/media-query-list-parser/src/nodes/media-feature.ts @@ -74,7 +74,7 @@ export class MediaFeature { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, feature: this.feature.toJSON(), @@ -106,7 +106,7 @@ export class MediaFeature { export type MediaFeatureWalkerEntry = MediaFeaturePlainWalkerEntry | MediaFeatureRangeWalkerEntry | MediaFeaturePlain | MediaFeatureBoolean | MediaFeatureRange; export type MediaFeatureWalkerParent = MediaFeaturePlainWalkerParent | MediaFeatureRangeWalkerParent | MediaFeature; -export function parseMediaFeature(simpleBlock: SimpleBlockNode, before: Array = [], after: Array = []) { +export function parseMediaFeature(simpleBlock: SimpleBlockNode, before: Array = [], after: Array = []): false | MediaFeature { if (simpleBlock.startToken[0] !== TokenType.OpenParen) { return false; } diff --git a/packages/media-query-list-parser/src/nodes/media-in-parens.ts b/packages/media-query-list-parser/src/nodes/media-in-parens.ts index 8b1d180f6..610b1910b 100644 --- a/packages/media-query-list-parser/src/nodes/media-in-parens.ts +++ b/packages/media-query-list-parser/src/nodes/media-in-parens.ts @@ -73,7 +73,7 @@ export class MediaInParens { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, media: this.media.toJSON(), diff --git a/packages/media-query-list-parser/src/nodes/media-not.ts b/packages/media-query-list-parser/src/nodes/media-not.ts index 510f5f28d..9168d1a0a 100644 --- a/packages/media-query-list-parser/src/nodes/media-not.ts +++ b/packages/media-query-list-parser/src/nodes/media-not.ts @@ -56,7 +56,7 @@ export class MediaNot { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, modifier: this.modifier, diff --git a/packages/media-query-list-parser/src/nodes/media-or.ts b/packages/media-query-list-parser/src/nodes/media-or.ts index a639613e0..e97ea6257 100644 --- a/packages/media-query-list-parser/src/nodes/media-or.ts +++ b/packages/media-query-list-parser/src/nodes/media-or.ts @@ -56,7 +56,7 @@ export class MediaOr { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, modifier: this.modifier, diff --git a/packages/media-query-list-parser/src/nodes/media-query-modifier.ts b/packages/media-query-list-parser/src/nodes/media-query-modifier.ts index a401f25fc..22d94d092 100644 --- a/packages/media-query-list-parser/src/nodes/media-query-modifier.ts +++ b/packages/media-query-list-parser/src/nodes/media-query-modifier.ts @@ -1,5 +1,4 @@ import { TokenIdent, TokenType } from '@csstools/css-tokenizer'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; export enum MediaQueryModifier { Not = 'not', @@ -11,7 +10,7 @@ export function modifierFromToken(token: TokenIdent): MediaQueryModifier | false return false; } - const matchingValue = toLowerCaseAZ(token[4].value); + const matchingValue = token[4].value.toLowerCase(); switch (matchingValue) { case MediaQueryModifier.Not: return MediaQueryModifier.Not; diff --git a/packages/media-query-list-parser/src/nodes/media-query.ts b/packages/media-query-list-parser/src/nodes/media-query.ts index a46a870cd..831945728 100644 --- a/packages/media-query-list-parser/src/nodes/media-query.ts +++ b/packages/media-query-list-parser/src/nodes/media-query.ts @@ -1,7 +1,6 @@ import { ComponentValue, walkerIndexGenerator } from '@csstools/css-parser-algorithms'; import { CSSToken, stringify, TokenType } from '@csstools/css-tokenizer'; import { NodeType } from '../util/node-type'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; import { MediaCondition, MediaConditionWalkerEntry, MediaConditionWalkerParent } from './media-condition'; import { MediaInParens } from './media-in-parens'; import { MediaNot } from './media-not'; @@ -54,12 +53,12 @@ export class MediaQueryWithType { for (let i = 0; i < copy.modifier.length; i++) { const token = copy.modifier[i]; - if (token[0] === TokenType.Ident && toLowerCaseAZ(token[4].value) === 'not') { + if (token[0] === TokenType.Ident && token[4].value.toLowerCase() === 'not') { copy.modifier.splice(i, 1); break; } - if (token[0] === TokenType.Ident && toLowerCaseAZ(token[4].value) === 'only') { + if (token[0] === TokenType.Ident && token[4].value.toLowerCase() === 'only') { token[1] = 'not'; token[4].value = 'not'; break; @@ -144,7 +143,7 @@ export class MediaQueryWithType { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, string: this.toString(), @@ -270,7 +269,7 @@ export class MediaQueryWithoutType { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, string: this.toString(), @@ -360,7 +359,7 @@ export class MediaQueryInvalid { /** * @internal */ - toJSON() { + toJSON(): Record { return { type: this.type, string: this.toString(), diff --git a/packages/media-query-list-parser/src/nodes/media-type.ts b/packages/media-query-list-parser/src/nodes/media-type.ts index f387871c5..d30336bea 100644 --- a/packages/media-query-list-parser/src/nodes/media-type.ts +++ b/packages/media-query-list-parser/src/nodes/media-type.ts @@ -1,5 +1,4 @@ import { TokenIdent, TokenType } from '@csstools/css-tokenizer'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; export enum MediaType { /** Always matches */ @@ -29,7 +28,7 @@ export function typeFromToken(token: TokenIdent): MediaType | false { return false; } - const matchingValue = toLowerCaseAZ(token[4].value); + const matchingValue = token[4].value.toLowerCase(); switch (matchingValue) { case MediaType.All: return MediaType.All; diff --git a/packages/media-query-list-parser/src/parser/parse-custom-media.ts b/packages/media-query-list-parser/src/parser/parse-custom-media.ts index 3858bf160..64e5ed68d 100644 --- a/packages/media-query-list-parser/src/parser/parse-custom-media.ts +++ b/packages/media-query-list-parser/src/parser/parse-custom-media.ts @@ -1,6 +1,5 @@ import { CSSToken, tokenizer, ParseError, TokenType, TokenIdent, cloneTokens } from '@csstools/css-tokenizer'; import { CustomMedia } from '../nodes/custom-media'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; import { parseFromTokens } from './parse'; export function parseCustomMediaFromTokens( @@ -43,7 +42,7 @@ export function parseCustomMediaFromTokens( if (remainder[i][0] === TokenType.Ident) { const identToken = remainder[i] as TokenIdent; - const identValue = toLowerCaseAZ(identToken[4].value); + const identValue = identToken[4].value.toLowerCase(); if (identValue === 'false') { continue; } diff --git a/packages/media-query-list-parser/src/parser/parse-media-query.ts b/packages/media-query-list-parser/src/parser/parse-media-query.ts index 675a9ff10..33f4d30a4 100644 --- a/packages/media-query-list-parser/src/parser/parse-media-query.ts +++ b/packages/media-query-list-parser/src/parser/parse-media-query.ts @@ -12,7 +12,6 @@ import { MediaOr } from '../nodes/media-or'; import { MediaQuery, MediaQueryWithoutType, MediaQueryWithType } from '../nodes/media-query'; import { modifierFromToken } from '../nodes/media-query-modifier'; import { isIdent } from '../util/component-value-is'; -import { toLowerCaseAZ } from '../util/to-lower-case-a-z'; export function parseMediaQuery(componentValues: Array): MediaQuery | false { { @@ -49,7 +48,7 @@ export function parseMediaQuery(componentValues: Array): MediaQu continue; } - if (andIndex === -1 && token[0] === TokenType.Ident && toLowerCaseAZ(token[4].value) === 'and') { + if (andIndex === -1 && token[0] === TokenType.Ident && IS_AND_REGEX.test(token[4].value)) { andIndex = i; const condition = parseMediaConditionWithoutOr(componentValues.slice(i+1)); if (condition === false) { @@ -361,6 +360,8 @@ function parseMediaInParensFromSimpleBlock(simpleBlock: SimpleBlockNode): MediaI return new MediaInParens(new GeneralEnclosed(simpleBlock)); } +const IS_NOT_REGEX = /^not$/i; + function parseMediaNot(componentValues: Array): MediaNot | false { let sawNot = false; let node: MediaNot | null = null; @@ -377,7 +378,7 @@ function parseMediaNot(componentValues: Array): MediaNot | false if (isIdent(componentValue)) { const token = (componentValue.value as TokenIdent); - if (toLowerCaseAZ(token[4].value) === 'not') { + if (IS_NOT_REGEX.test(token[4].value)) { if (sawNot) { return false; } @@ -416,7 +417,9 @@ function parseMediaNot(componentValues: Array): MediaNot | false return false; } -function parseMediaOr(componentValues: Array) { +const IS_OR_REGEX = /^or$/i; + +function parseMediaOr(componentValues: Array): { advance: number, node: MediaOr } | false { let sawOr = false; for (let i = 0; i < componentValues.length; i++) { @@ -431,7 +434,7 @@ function parseMediaOr(componentValues: Array) { if (isIdent(componentValue)) { const token = (componentValue.value as TokenIdent); - if (toLowerCaseAZ(token[4].value) === 'or') { + if (IS_OR_REGEX.test(token[4].value)) { if (sawOr) { return false; } @@ -467,7 +470,9 @@ function parseMediaOr(componentValues: Array) { return false; } -function parseMediaAnd(componentValues: Array) { +const IS_AND_REGEX = /^and$/i; + +function parseMediaAnd(componentValues: Array): { advance: number, node: MediaAnd } | false { let sawAnd = false; for (let i = 0; i < componentValues.length; i++) { @@ -482,7 +487,7 @@ function parseMediaAnd(componentValues: Array) { if (isIdent(componentValue)) { const token = (componentValue.value as TokenIdent); - if (toLowerCaseAZ(token[4].value) === 'and') { + if (IS_AND_REGEX.test(token[4].value)) { if (sawAnd) { return false; } diff --git a/packages/media-query-list-parser/src/parser/parse.ts b/packages/media-query-list-parser/src/parser/parse.ts index 55088b7f2..68f357961 100644 --- a/packages/media-query-list-parser/src/parser/parse.ts +++ b/packages/media-query-list-parser/src/parser/parse.ts @@ -9,19 +9,19 @@ export function parseFromTokens( preserveInvalidMediaQueries?: boolean, onParseError?: (error: ParseError) => void }, -) { +): Array { const componentValuesLists = parseCommaSeparatedListOfComponentValues(tokens, { onParseError: options?.onParseError, }); return componentValuesLists.map((componentValuesList, index) => { const mediaQuery = parseMediaQuery(componentValuesList); - if (mediaQuery == false && options?.preserveInvalidMediaQueries === true) { + if (mediaQuery === false && options?.preserveInvalidMediaQueries === true) { return new MediaQueryInvalid(componentValuesLists[index]); } return mediaQuery; - }).filter((x) => !!x) as Array; + }).filter((x): x is MediaQuery => !!x); } export function parse( @@ -30,7 +30,7 @@ export function parse( preserveInvalidMediaQueries?: boolean, onParseError?: (error: ParseError) => void }, -) { +): Array { const t = tokenizer({ css: source }, { onParseError: options?.onParseError, }); diff --git a/packages/media-query-list-parser/src/util/component-value-is.ts b/packages/media-query-list-parser/src/util/component-value-is.ts index 3ca5eb1af..796e91fff 100644 --- a/packages/media-query-list-parser/src/util/component-value-is.ts +++ b/packages/media-query-list-parser/src/util/component-value-is.ts @@ -1,11 +1,10 @@ import { ComponentValue, ComponentValueType, FunctionNode } from '@csstools/css-parser-algorithms'; import { CSSToken, TokenFunction, TokenType } from '@csstools/css-tokenizer'; -import { toLowerCaseAZ } from './to-lower-case-a-z'; -export function isNumber(componentValue: ComponentValue) { +export function isNumber(componentValue: ComponentValue): boolean { if ( (componentValue.type === ComponentValueType.Token && (componentValue.value as CSSToken)[0] === TokenType.Number) || - (componentValue.type === ComponentValueType.Function && mathFunctions.has(toLowerCaseAZ(((componentValue as FunctionNode).name as TokenFunction)[4].value))) + (componentValue.type === ComponentValueType.Function && mathFunctions.has(((componentValue as FunctionNode).name as TokenFunction)[4].value.toLowerCase())) ) { return true; } @@ -37,7 +36,7 @@ const mathFunctions = new Set([ 'tan', ]); -export function isDimension(componentValue: ComponentValue) { +export function isDimension(componentValue: ComponentValue): boolean { if (componentValue.type === ComponentValueType.Token && (componentValue.value as CSSToken)[0] === TokenType.Dimension) { return true; } @@ -45,7 +44,7 @@ export function isDimension(componentValue: ComponentValue) { return false; } -export function isIdent(componentValue: ComponentValue) { +export function isIdent(componentValue: ComponentValue): boolean { if (componentValue.type === ComponentValueType.Token && (componentValue.value as CSSToken)[0] === TokenType.Ident) { return true; } @@ -53,9 +52,11 @@ export function isIdent(componentValue: ComponentValue) { return false; } -export function isEnvironmentVariable(componentValue: ComponentValue) { +const IS_ENV_REGEX = /^env$/i; + +export function isEnvironmentVariable(componentValue: ComponentValue): boolean { if (componentValue.type === ComponentValueType.Function && - toLowerCaseAZ(((componentValue as FunctionNode).name as TokenFunction)[4].value) === 'env' + IS_ENV_REGEX.test(((componentValue as FunctionNode).name as TokenFunction)[4].value) ) { return true; } diff --git a/packages/media-query-list-parser/src/util/to-lower-case-a-z.ts b/packages/media-query-list-parser/src/util/to-lower-case-a-z.ts deleted file mode 100644 index ec9cff610..000000000 --- a/packages/media-query-list-parser/src/util/to-lower-case-a-z.ts +++ /dev/null @@ -1,4 +0,0 @@ -const toLowerCaseAZRegex = /[A-Z]/g; -export function toLowerCaseAZ(x: string): string { - return x.replace(toLowerCaseAZRegex, (c) => String.fromCharCode(c.charCodeAt(0) + 32)); -} diff --git a/packages/postcss-tape/dist/index.cjs b/packages/postcss-tape/dist/index.cjs index c9d6faca7..cd1e86f65 100644 --- a/packages/postcss-tape/dist/index.cjs +++ b/packages/postcss-tape/dist/index.cjs @@ -1,3 +1,3 @@ /* node:coverage disable */ -"use strict";var e=require("node:assert/strict"),s=require("node:fs/promises"),t=require("node:fs"),n=require("node:path"),o=require("postcss"),r=require("postcss-8.4"),i=require("node:test"),a=require("node:url");const noopPlugin=()=>({postcssPlugin:"noop-plugin",Rule(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch(e){return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(n.resolve("package.json"))}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(n.resolve(s))}:1:1`}}exports.atRuleClonerPlugin=l,exports.declarationClonerPlugin=c,exports.postcssTape=function postcssTape(a,c){c=c??{},i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),i("package.json",(async t=>{const n=await s.readFile("./package.json","utf-8"),o=JSON.parse(n);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(o.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s=o.name;if(s.startsWith("@")){s=o.name.split("/").slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(o.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(o.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const p=a().postcssPlugin;return async c=>{await i(p,(async i=>{for(const p in c)await i.test(p,(async i=>{const l=c[p];l.before&&await l.before();const u=n.join(".","test",...p.split(":")[0].split(n.posix.sep)),d=n.join(".","test",...p.replace(/:/g,".").split(n.posix.sep)),g="css";let m=`${u}.${g}`,w=`${d}.expect.${g}`,f=`${d}.result.${g}`;l.source&&(m=n.join(".","test",l.source)),l.expect&&(w=n.join(".","test",l.expect)),l.result&&(f=n.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(m),y=await fileContentsOrEmptyString(w);let E;try{E=await o(k).process(h,{from:m,to:f,map:{inline:!1,annotation:!1}})}catch(e){if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,m));const x=E.css.toString();{const e=[s.writeFile(f,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(w,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(w),new OutcomeError(`Missing expect file: "${w}"`,m)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings()}`)})),await i.test("sourcemaps",(async()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(f),t=await o([noopPlugin()]).process(s,{from:f,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:o([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:m,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}},exports.ruleClonerPlugin=p; +"use strict";var e=require("node:assert/strict"),s=require("node:fs/promises"),t=require("node:fs"),n=require("node:path"),o=require("postcss"),r=require("postcss-8.4"),i=require("node:test"),a=require("node:url");const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch(e){return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(n.resolve("package.json"))}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(n.resolve(s))}:1:1`}}exports.atRuleClonerPlugin=l,exports.declarationClonerPlugin=c,exports.postcssTape=function postcssTape(a,c){c=c??{},i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),i("package.json",(async t=>{const n=await s.readFile("./package.json","utf-8"),o=JSON.parse(n);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(o.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s=o.name;if(s.startsWith("@")){s=o.name.split("/").slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(o.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(o.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const p=a().postcssPlugin;return async c=>{await i(p,(async i=>{for(const p in c)await i.test(p,(async i=>{const l=c[p];l.before&&await l.before();const u=n.join(".","test",...p.split(":")[0].split(n.posix.sep)),d=n.join(".","test",...p.replace(/:/g,".").split(n.posix.sep)),g="css";let m=`${u}.${g}`,w=`${d}.expect.${g}`,f=`${d}.result.${g}`;l.source&&(m=n.join(".","test",l.source)),l.expect&&(w=n.join(".","test",l.expect)),l.result&&(f=n.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(m),y=await fileContentsOrEmptyString(w);let E;try{E=await o(k).process(h,{from:m,to:f,map:{inline:!1,annotation:!1}})}catch(e){if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,m));const x=E.css.toString();{const e=[s.writeFile(f,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(w,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(w),new OutcomeError(`Missing expect file: "${w}"`,m)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings()}`)})),await i.test("sourcemaps",(async()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(f),t=await o([noopPlugin()]).process(s,{from:f,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:o([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:m,to:f,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}},exports.ruleClonerPlugin=p; /* node:coverage enable */ diff --git a/packages/postcss-tape/dist/index.d.ts b/packages/postcss-tape/dist/index.d.ts index bd4b5eb87..5a0c1b454 100644 --- a/packages/postcss-tape/dist/index.d.ts +++ b/packages/postcss-tape/dist/index.d.ts @@ -27,20 +27,16 @@ * @packageDocumentation */ -import type { AtRule } from 'postcss'; import type { Declaration } from 'postcss'; import type { Plugin } from 'postcss'; import type { PluginCreator } from 'postcss'; -import type { Rule } from 'postcss'; /** * A dummy PostCSS plugin that clones any at rule with params `to-clone` to a new at rule with params `cloned`. */ export declare const atRuleClonerPlugin: { postcssPlugin: string; - prepare(): { - AtRuleExit(atRule: AtRule): void; - }; + prepare(): Plugin; }; /** @@ -83,9 +79,7 @@ export declare function postcssTape(pluginCreator: PluginCreator, runOp */ export declare const ruleClonerPlugin: { postcssPlugin: string; - prepare(): { - RuleExit(rule: Rule): void; - }; + prepare(): Plugin; }; /** diff --git a/packages/postcss-tape/dist/index.mjs b/packages/postcss-tape/dist/index.mjs index 5585ab194..06ca07539 100644 --- a/packages/postcss-tape/dist/index.mjs +++ b/packages/postcss-tape/dist/index.mjs @@ -1,3 +1,3 @@ /* node:coverage disable */ -import e from"node:assert/strict";import s from"node:fs/promises";import t from"node:fs";import o from"node:path";import n from"postcss";import r from"postcss-8.4";import i from"node:test";import a from"node:url";const noopPlugin=()=>({postcssPlugin:"noop-plugin",Rule(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch(e){return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}function postcssTape(a,c){c=c??{},i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),i("package.json",(async t=>{const o=await s.readFile("./package.json","utf-8"),n=JSON.parse(o);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(n.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s=n.name;if(s.startsWith("@")){s=n.name.split("/").slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(n.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(n.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const p=a().postcssPlugin;return async c=>{await i(p,(async i=>{for(const p in c)await i.test(p,(async i=>{const l=c[p];l.before&&await l.before();const u=o.join(".","test",...p.split(":")[0].split(o.posix.sep)),d=o.join(".","test",...p.replace(/:/g,".").split(o.posix.sep)),m="css";let g=`${u}.${m}`,f=`${d}.expect.${m}`,w=`${d}.result.${m}`;l.source&&(g=o.join(".","test",l.source)),l.expect&&(f=o.join(".","test",l.expect)),l.result&&(w=o.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(g),y=await fileContentsOrEmptyString(f);let E;try{E=await n(k).process(h,{from:g,to:w,map:{inline:!1,annotation:!1}})}catch(e){if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,g));const x=E.css.toString();{const e=[s.writeFile(w,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(f,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(f),new OutcomeError(`Missing expect file: "${f}"`,g)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings()}`)})),await i.test("sourcemaps",(async()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(w),t=await n([noopPlugin()]).process(s,{from:w,to:w,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:n([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:g,to:w,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(o.resolve("package.json"))}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(o.resolve(s))}:1:1`}}export{l as atRuleClonerPlugin,c as declarationClonerPlugin,postcssTape,p as ruleClonerPlugin}; +import e from"node:assert/strict";import s from"node:fs/promises";import t from"node:fs";import o from"node:path";import n from"postcss";import r from"postcss-8.4";import i from"node:test";import a from"node:url";const noopPlugin=()=>({postcssPlugin:"noop-plugin",Once(){}});async function fileContentsOrEmptyString(e){try{return await s.readFile(e,"utf8")}catch(e){return""}}function reduceInformationInCssSyntaxError(e){process.env.DEBUG||(delete e.source,e.input&&delete e.input.source,delete e.postcssNode)}function postcssTape(a,c){c=c??{},i("`postcss` flag is set on exported plugin creator",(()=>{e.equal(a.postcss,!0)})),i("exported plugin creator is a function",(()=>{e.equal(typeof a,"function")})),i("`postcssPlugin` is set on a plugin instance",(()=>{const s=a();e.ok(s.postcssPlugin),e.equal(typeof s.postcssPlugin,"string")})),i("package.json",(async t=>{const o=await s.readFile("./package.json","utf-8"),n=JSON.parse(o);await t.test('includes "postcss-plugin" keyword',(()=>{e.ok(n.keywords?.includes("postcss-plugin"),new PackageDescriptionError('Missing "postcss-plugin" keyword in package.json',"keywords"))})),await t.test('name starts with "postcss-"',{skip:c?.skipPackageNameCheck},(()=>{let s=n.name;if(s.startsWith("@")){s=n.name.split("/").slice(1).join("/")}e.ok(s.startsWith("postcss-"),new PackageDescriptionError(`package name "${s}" does not start with "postcss-"`,"name"))})),await t.test("`postcss` is a peer dependency and not a direct dependency",{skip:"postcssTapeSelfTest"in a},(()=>{e.ok(Object.keys(Object(n.peerDependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must be listed in "peerDependencies"',"peerDependencies")),e.ok(!Object.keys(Object(n.dependencies)).includes("postcss"),new PackageDescriptionError('"postcss" must not be listed in "dependencies"',"dependencies"))}))}));const p=a().postcssPlugin;return async c=>{await i(p,(async i=>{for(const p in c)await i.test(p,(async i=>{const l=c[p];l.before&&await l.before();const u=o.join(".","test",...p.split(":")[0].split(o.posix.sep)),d=o.join(".","test",...p.replace(/:/g,".").split(o.posix.sep)),m="css";let g=`${u}.${m}`,f=`${d}.expect.${m}`,w=`${d}.result.${m}`;l.source&&(g=o.join(".","test",l.source)),l.expect&&(f=o.join(".","test",l.expect)),l.result&&(w=o.join(".","test",l.result));const k=l.plugins??[a(l.options)],h=await fileContentsOrEmptyString(g),y=await fileContentsOrEmptyString(f);let E;try{E=await n(k).process(h,{from:g,to:w,map:{inline:!1,annotation:!1}})}catch(e){if(reduceInformationInCssSyntaxError(e),l.exception&&l.exception.test(e.message))return;throw e}e.ok(!l.exception,new OutcomeError(`expected an exception matching "${l.exception}"`,g));const x=E.css.toString();{const e=[s.writeFile(w,x,"utf8")];process.env.REWRITE_EXPECTS&&e.push(s.writeFile(f,x,"utf8")),await Promise.all(e)}y||e.ok(t.existsSync(f),new OutcomeError(`Missing expect file: "${f}"`,g)),await i.test("has expected output",(()=>{e.deepEqual(x,y),e.deepEqual(E.warnings().length,l.warnings??0,`Unexpected number warnings:\n${E.warnings()}`)})),await i.test("sourcemaps",(async()=>{e.ok(!E.map.toJSON().sources.includes(""),'Sourcemap is broken. This is most likely a newly created PostCSS AST Node without a value for "source". See: https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes')})),l.after&&await l.after(),await i.test("output is parsable with PostCSS",(async()=>{const s=await fileContentsOrEmptyString(w),t=await n([noopPlugin()]).process(s,{from:w,to:w,map:{inline:!1,annotation:!1}});e.deepEqual(t.warnings(),[],"Unexpected warnings on second pass")})),await i.test("The oldest and current PostCSS version produce the same result",{skip:n([noopPlugin()]).version===r([noopPlugin()]).version},(async()=>{const s=await r(k).process(h,{from:g,to:w,map:{inline:!1,annotation:!1}});e.deepEqual(s.css.toString(),x)}))}))}))}}noopPlugin.postcss=!0;const c={postcssPlugin:"declaration-cloner",Declaration(e){"to-clone"===e.prop&&e.cloneBefore({prop:"cloned"})}},p={postcssPlugin:"rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"rule-cloner",RuleExit(s){e.has(s)||"to-clone"===s.selector&&(e.add(s),s.cloneBefore({selector:"cloned"}))}}}},l={postcssPlugin:"at-rule-cloner",prepare(){const e=new WeakSet;return{postcssPlugin:"at-rule-cloner",AtRuleExit(s){if(!e.has(s))return"to-clone"===s.params?(e.add(s),void s.cloneBefore({params:"cloned"})):"to-clone"===s.name?(e.add(s),void s.cloneBefore({name:"cloned"})):void 0}}}};class PackageDescriptionError extends Error{constructor(e,s){super(e),this.name="PackageDescriptionError",this.stack=`${this.name}: ${this.message}\n at "${s}" (${a.pathToFileURL(o.resolve("package.json"))}:1:1)`}}class OutcomeError extends Error{constructor(e,s){super(e),this.name="OutcomeError",this.stack=`${this.name}: ${this.message}\n at ${a.pathToFileURL(o.resolve(s))}:1:1`}}export{l as atRuleClonerPlugin,c as declarationClonerPlugin,postcssTape,p as ruleClonerPlugin}; /* node:coverage enable */ diff --git a/packages/postcss-tape/docs/postcss-tape.api.json b/packages/postcss-tape/docs/postcss-tape.api.json index dd991f60b..8d442bf11 100644 --- a/packages/postcss-tape/docs/postcss-tape.api.json +++ b/packages/postcss-tape/docs/postcss-tape.api.json @@ -182,16 +182,16 @@ }, { "kind": "Content", - "text": "{\n postcssPlugin: string;\n prepare(): {\n AtRuleExit(atRule: " + "text": "{\n postcssPlugin: string;\n prepare(): " }, { "kind": "Reference", - "text": "AtRule", - "canonicalReference": "postcss!AtRule_:class" + "text": "Plugin", + "canonicalReference": "postcss!postcss.Plugin:interface" }, { "kind": "Content", - "text": "): void;\n };\n}" + "text": ";\n}" } ], "fileUrlPath": "dist/_types/index.d.ts", @@ -366,16 +366,16 @@ }, { "kind": "Content", - "text": "{\n postcssPlugin: string;\n prepare(): {\n RuleExit(rule: " + "text": "{\n postcssPlugin: string;\n prepare(): " }, { "kind": "Reference", - "text": "Rule", - "canonicalReference": "postcss!Rule_:class" + "text": "Plugin", + "canonicalReference": "postcss!postcss.Plugin:interface" }, { "kind": "Content", - "text": "): void;\n };\n}" + "text": ";\n}" } ], "fileUrlPath": "dist/_types/index.d.ts", diff --git a/packages/postcss-tape/docs/postcss-tape.atruleclonerplugin.md b/packages/postcss-tape/docs/postcss-tape.atruleclonerplugin.md index 968fc025b..d6d8fae27 100644 --- a/packages/postcss-tape/docs/postcss-tape.atruleclonerplugin.md +++ b/packages/postcss-tape/docs/postcss-tape.atruleclonerplugin.md @@ -11,8 +11,6 @@ A dummy PostCSS plugin that clones any at rule with params `to-clone` to a new a ```typescript atRuleClonerPlugin: { postcssPlugin: string; - prepare(): { - AtRuleExit(atRule: AtRule): void; - }; + prepare(): Plugin; } ``` diff --git a/packages/postcss-tape/docs/postcss-tape.ruleclonerplugin.md b/packages/postcss-tape/docs/postcss-tape.ruleclonerplugin.md index a0f74d903..e7921d357 100644 --- a/packages/postcss-tape/docs/postcss-tape.ruleclonerplugin.md +++ b/packages/postcss-tape/docs/postcss-tape.ruleclonerplugin.md @@ -11,8 +11,6 @@ A dummy PostCSS plugin that clones any rule with the selector `to-clone` to a ne ```typescript ruleClonerPlugin: { postcssPlugin: string; - prepare(): { - RuleExit(rule: Rule): void; - }; + prepare(): Plugin; } ``` diff --git a/packages/postcss-tape/src/index.ts b/packages/postcss-tape/src/index.ts index acf83b742..a12f9fa4f 100644 --- a/packages/postcss-tape/src/index.ts +++ b/packages/postcss-tape/src/index.ts @@ -71,7 +71,7 @@ export type Options = { /** * Create a test suite for a PostCSS plugin. */ -export function postcssTape(pluginCreator: PluginCreator, runOptions?: Options) { +export function postcssTape(pluginCreator: PluginCreator, runOptions?: Options): (options: Record) => Promise { runOptions = runOptions ?? {}; // Plugin conforms to https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md @@ -283,7 +283,7 @@ export function postcssTape(pluginCreator: PluginCreator, runOptions?: */ export const declarationClonerPlugin = { postcssPlugin: 'declaration-cloner', - Declaration(decl: Declaration) { + Declaration(decl: Declaration): void { if (decl.prop === 'to-clone') { decl.cloneBefore({ prop: 'cloned' }); } @@ -295,11 +295,12 @@ export const declarationClonerPlugin = { */ export const ruleClonerPlugin = { postcssPlugin: 'rule-cloner', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - RuleExit(rule: Rule) { + postcssPlugin: 'rule-cloner', + RuleExit(rule: Rule): void { if (transformedNodes.has(rule)) { return; } @@ -318,11 +319,12 @@ export const ruleClonerPlugin = { */ export const atRuleClonerPlugin = { postcssPlugin: 'at-rule-cloner', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - AtRuleExit(atRule: AtRule) { + postcssPlugin: 'at-rule-cloner', + AtRuleExit(atRule: AtRule): void { if (transformedNodes.has(atRule)) { return; } diff --git a/packages/postcss-tape/src/noop-plugin.ts b/packages/postcss-tape/src/noop-plugin.ts index a41143aa4..9fda5b25f 100644 --- a/packages/postcss-tape/src/noop-plugin.ts +++ b/packages/postcss-tape/src/noop-plugin.ts @@ -1,7 +1,9 @@ -const noopPlugin = () => { +import type { PluginCreator } from 'postcss'; + +const noopPlugin: PluginCreator = () => { return { postcssPlugin: 'noop-plugin', - Rule() { + Once(): void { // do nothing }, }; diff --git a/packages/selector-resolve-nested/src/compound-selector-order.ts b/packages/selector-resolve-nested/src/compound-selector-order.ts index ca1e696bd..adcc7bd9b 100644 --- a/packages/selector-resolve-nested/src/compound-selector-order.ts +++ b/packages/selector-resolve-nested/src/compound-selector-order.ts @@ -2,7 +2,7 @@ import parser from 'postcss-selector-parser'; import type { Container, Node } from 'postcss-selector-parser'; import { sourceFrom } from './source'; -export function sortCompoundSelectorsInsideComplexSelector(node: Container) { +export function sortCompoundSelectorsInsideComplexSelector(node: Container): void { const compoundSelectors: Array> = []; let currentCompoundSelector: Array = []; diff --git a/packages/selector-resolve-nested/src/resolve-nested-selector.ts b/packages/selector-resolve-nested/src/resolve-nested-selector.ts index 56b46061f..189210e96 100644 --- a/packages/selector-resolve-nested/src/resolve-nested-selector.ts +++ b/packages/selector-resolve-nested/src/resolve-nested-selector.ts @@ -75,7 +75,7 @@ export function resolveNestedSelector(selector: Root, parentSelector: Root): Roo return root; } -function prepareParentSelectors(parentSelectors: Root, forceIsPseudo: boolean = false) { +function prepareParentSelectors(parentSelectors: Root, forceIsPseudo: boolean = false): Array { if ( forceIsPseudo || !isCompoundSelector(parentSelectors.nodes) diff --git a/packages/selector-resolve-nested/src/source.ts b/packages/selector-resolve-nested/src/source.ts index 895793243..0aad95f1b 100644 --- a/packages/selector-resolve-nested/src/source.ts +++ b/packages/selector-resolve-nested/src/source.ts @@ -1,6 +1,6 @@ -import type { Node } from 'postcss-selector-parser'; +import type { Node, NodeSource } from 'postcss-selector-parser'; -export function sourceFrom(node: Node) { +export function sourceFrom(node: Node): { sourceIndex: number; source: NodeSource|undefined }{ return { sourceIndex: node.sourceIndex ?? 0, source: node.source, diff --git a/packages/selector-specificity/dist/index.cjs b/packages/selector-specificity/dist/index.cjs index 12815ff91..2583d2bc9 100644 --- a/packages/selector-specificity/dist/index.cjs +++ b/packages/selector-specificity/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const s=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(s,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function selectorSpecificity(s){if(!s)return{a:0,b:0,c:0};let t=0,c=0,n=0;if("universal"==s.type)return{a:0,b:0,c:0};if("id"===s.type)t+=1;else if("tag"===s.type)n+=1;else if("class"===s.type)c+=1;else if("attribute"===s.type)c+=1;else if(isPseudoElement(s))switch(toLowerCaseAZ(s.value)){case"::slotted":if(n+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,n+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:n+=1}else if(e.isPseudoClass(s))switch(toLowerCaseAZ(s.value)){case":-webkit-any":case":any":default:c+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,n+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(c+=1,s.nodes&&s.nodes.length>0){const i=s.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===toLowerCaseAZ(e.value)));if(i>-1){const o=[e.selector({nodes:s.nodes[0].nodes.slice(i+1),value:""})];s.nodes.length>1&&o.push(...s.nodes.slice(1));const a=specificityOfMostSpecificListItem(o);t+=a.a,c+=a.b,n+=a.c}}break;case":local":case":global":s.nodes&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,c+=s.b,n+=s.c}));break;case":host":case":host-context":if(c+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,n+=e.c}break;case":active-view-transition":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:1,c:0}:{a:0,b:2,c:0}}else e.isContainer(s)&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,c+=s.b,n+=s.c}));return{a:t,b:c,c:n}}function specificityOfMostSpecificListItem(e){let s={a:0,b:0,c:0};return e.forEach((e=>{const t=selectorSpecificity(e);t.a>s.a?s=t:t.as.b?s=t:t.bs.c&&(s=t))})),s}function isPseudoElement(s){return e.isPseudoElement(s)}function selectorNodeContainsOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const s=e.nodes.filter((e=>"comment"!==e.type));return 1===s.length&&"universal"===s[0].type}exports.compare=function compare(e,s){return e.a===s.a?e.b===s.b?e.c-s.c:e.b-s.b:e.a-s.a},exports.selectorSpecificity=selectorSpecificity; +"use strict";var e=require("postcss-selector-parser");function selectorSpecificity(s){if(!s)return{a:0,b:0,c:0};let t=0,c=0,i=0;if("universal"==s.type)return{a:0,b:0,c:0};if("id"===s.type)t+=1;else if("tag"===s.type)i+=1;else if("class"===s.type)c+=1;else if("attribute"===s.type)c+=1;else if(isPseudoElement(s))switch(s.value.toLowerCase()){case"::slotted":if(i+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,i+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:i+=1}else if(e.isPseudoClass(s))switch(s.value.toLowerCase()){case":-webkit-any":case":any":default:c+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,i+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(c+=1,s.nodes&&s.nodes.length>0){const n=s.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===e.value.toLowerCase()));if(n>-1){const o=[e.selector({nodes:s.nodes[0].nodes.slice(n+1),value:""})];s.nodes.length>1&&o.push(...s.nodes.slice(1));const a=specificityOfMostSpecificListItem(o);t+=a.a,c+=a.b,i+=a.c}}break;case":local":case":global":s.nodes&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,c+=s.b,i+=s.c}));break;case":host":case":host-context":if(c+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,c+=e.b,i+=e.c}break;case":active-view-transition":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:1,c:0}:{a:0,b:2,c:0}}else e.isContainer(s)&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,c+=s.b,i+=s.c}));return{a:t,b:c,c:i}}function specificityOfMostSpecificListItem(e){let s={a:0,b:0,c:0};return e.forEach((e=>{const t=selectorSpecificity(e);t.a>s.a?s=t:t.as.b?s=t:t.bs.c&&(s=t))})),s}function isPseudoElement(s){return e.isPseudoElement(s)}function selectorNodeContainsOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const s=e.nodes.filter((e=>"comment"!==e.type));return 1===s.length&&"universal"===s[0].type}exports.compare=function compare(e,s){return e.a===s.a?e.b===s.b?e.c-s.c:e.b-s.b:e.a-s.a},exports.selectorSpecificity=selectorSpecificity; diff --git a/packages/selector-specificity/dist/index.mjs b/packages/selector-specificity/dist/index.mjs index 00d86da74..705edbc63 100644 --- a/packages/selector-specificity/dist/index.mjs +++ b/packages/selector-specificity/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";const s=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(s,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function compare(e,s){return e.a===s.a?e.b===s.b?e.c-s.c:e.b-s.b:e.a-s.a}function selectorSpecificity(s){if(!s)return{a:0,b:0,c:0};let t=0,n=0,c=0;if("universal"==s.type)return{a:0,b:0,c:0};if("id"===s.type)t+=1;else if("tag"===s.type)c+=1;else if("class"===s.type)n+=1;else if("attribute"===s.type)n+=1;else if(isPseudoElement(s))switch(toLowerCaseAZ(s.value)){case"::slotted":if(c+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:c+=1}else if(e.isPseudoClass(s))switch(toLowerCaseAZ(s.value)){case":-webkit-any":case":any":default:n+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(n+=1,s.nodes&&s.nodes.length>0){const o=s.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===toLowerCaseAZ(e.value)));if(o>-1){const i=[e.selector({nodes:s.nodes[0].nodes.slice(o+1),value:""})];s.nodes.length>1&&i.push(...s.nodes.slice(1));const a=specificityOfMostSpecificListItem(i);t+=a.a,n+=a.b,c+=a.c}}break;case":local":case":global":s.nodes&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,n+=s.b,c+=s.c}));break;case":host":case":host-context":if(n+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case":active-view-transition":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:1,c:0}:{a:0,b:2,c:0}}else e.isContainer(s)&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,n+=s.b,c+=s.c}));return{a:t,b:n,c:c}}function specificityOfMostSpecificListItem(e){let s={a:0,b:0,c:0};return e.forEach((e=>{const t=selectorSpecificity(e);t.a>s.a?s=t:t.as.b?s=t:t.bs.c&&(s=t))})),s}function isPseudoElement(s){return e.isPseudoElement(s)}function selectorNodeContainsOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const s=e.nodes.filter((e=>"comment"!==e.type));return 1===s.length&&"universal"===s[0].type}export{compare,selectorSpecificity}; +import e from"postcss-selector-parser";function compare(e,s){return e.a===s.a?e.b===s.b?e.c-s.c:e.b-s.b:e.a-s.a}function selectorSpecificity(s){if(!s)return{a:0,b:0,c:0};let t=0,n=0,c=0;if("universal"==s.type)return{a:0,b:0,c:0};if("id"===s.type)t+=1;else if("tag"===s.type)c+=1;else if("class"===s.type)n+=1;else if("attribute"===s.type)n+=1;else if(isPseudoElement(s))switch(s.value.toLowerCase()){case"::slotted":if(c+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:c+=1}else if(e.isPseudoClass(s))switch(s.value.toLowerCase()){case":-webkit-any":case":any":default:n+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(n+=1,s.nodes&&s.nodes.length>0){const i=s.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===e.value.toLowerCase()));if(i>-1){const o=[e.selector({nodes:s.nodes[0].nodes.slice(i+1),value:""})];s.nodes.length>1&&o.push(...s.nodes.slice(1));const a=specificityOfMostSpecificListItem(o);t+=a.a,n+=a.b,c+=a.c}}break;case":local":case":global":s.nodes&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,n+=s.b,c+=s.c}));break;case":host":case":host-context":if(n+=1,s.nodes&&s.nodes.length>0){const e=specificityOfMostSpecificListItem(s.nodes);t+=e.a,n+=e.b,c+=e.c}break;case":active-view-transition":return s.nodes&&1===s.nodes.length&&"selector"===s.nodes[0].type&&selectorNodeContainsOnlyUniversal(s.nodes[0])?{a:0,b:1,c:0}:{a:0,b:2,c:0}}else e.isContainer(s)&&s.nodes.length>0&&s.nodes.forEach((e=>{const s=selectorSpecificity(e);t+=s.a,n+=s.b,c+=s.c}));return{a:t,b:n,c:c}}function specificityOfMostSpecificListItem(e){let s={a:0,b:0,c:0};return e.forEach((e=>{const t=selectorSpecificity(e);t.a>s.a?s=t:t.as.b?s=t:t.bs.c&&(s=t))})),s}function isPseudoElement(s){return e.isPseudoElement(s)}function selectorNodeContainsOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const s=e.nodes.filter((e=>"comment"!==e.type));return 1===s.length&&"universal"===s[0].type}export{compare,selectorSpecificity}; diff --git a/packages/selector-specificity/src/index.ts b/packages/selector-specificity/src/index.ts index aa380b28a..ae9974579 100644 --- a/packages/selector-specificity/src/index.ts +++ b/packages/selector-specificity/src/index.ts @@ -1,6 +1,5 @@ import parser from 'postcss-selector-parser'; import type { Node, Selector } from 'postcss-selector-parser'; -import { toLowerCaseAZ } from './to-lower-case-a-z'; export type Specificity = { a: number, @@ -50,7 +49,7 @@ export function selectorSpecificity(node: Node): Specificity { } else if (isPseudoElement(node)) { node = node as parser.Pseudo; - switch (toLowerCaseAZ(node.value)) { + switch (node.value.toLowerCase()) { case '::slotted': // “The specificity of ::slotted() is that of a pseudo-element, plus the specificity of its argument.” @@ -105,7 +104,7 @@ export function selectorSpecificity(node: Node): Specificity { } } else if (parser.isPseudoClass(node)) { - switch (toLowerCaseAZ(node.value)) { + switch (node.value.toLowerCase()) { // The specificity of :any() and :-webkit-any() as implemented in browsers is 1 nomatter the content. case ':-webkit-any': case ':any': @@ -144,7 +143,7 @@ export function selectorSpecificity(node: Node): Specificity { if (node.nodes && node.nodes.length > 0) { const ofSeparatorIndex = node.nodes[0].nodes.findIndex((x) => { - return x.type === 'tag' && toLowerCaseAZ(x.value) === 'of'; + return x.type === 'tag' && x.value.toLowerCase() === 'of'; }); if (ofSeparatorIndex > -1) { @@ -249,7 +248,7 @@ export function selectorSpecificity(node: Node): Specificity { }; } -function specificityOfMostSpecificListItem(nodes: Array) { +function specificityOfMostSpecificListItem(nodes: Array): { a: number, b: number, c: number } { let mostSpecificListItem = { a: 0, b: 0, diff --git a/packages/selector-specificity/src/to-lower-case-a-z.ts b/packages/selector-specificity/src/to-lower-case-a-z.ts deleted file mode 100644 index ec9cff610..000000000 --- a/packages/selector-specificity/src/to-lower-case-a-z.ts +++ /dev/null @@ -1,4 +0,0 @@ -const toLowerCaseAZRegex = /[A-Z]/g; -export function toLowerCaseAZ(x: string): string { - return x.replace(toLowerCaseAZRegex, (c) => String.fromCharCode(c.charCodeAt(0) + 32)); -} diff --git a/plugin-packs/postcss-bundler/src/postcss-import/index.ts b/plugin-packs/postcss-bundler/src/postcss-import/index.ts index 1ed6471d1..a0e617152 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/index.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/index.ts @@ -7,7 +7,7 @@ import { postProcess } from './lib/post-process'; const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-bundler', - async Once(styles, { result, atRule, postcss }) { + async Once(styles, { result, atRule, postcss }): Promise { const bundle = await parseStyles( result, styles, diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-conditions.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-conditions.ts index 7fcfc49f7..8fe57322d 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-conditions.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-conditions.ts @@ -2,7 +2,7 @@ import type { AtRule, AtRuleProps } from 'postcss'; import { Stylesheet, isImportStatement, isPreImportStatement, isWarning } from './statement'; import { base64EncodedConditionalImport } from './base64-encoded-import'; -export function applyConditions(stylesheet: Stylesheet, atRule: (defaults?: AtRuleProps) => AtRule) { +export function applyConditions(stylesheet: Stylesheet, atRule: (defaults?: AtRuleProps) => AtRule): void { stylesheet.statements.forEach((stmt, index) => { if (isWarning(stmt) || isPreImportStatement(stmt) || !stmt.conditions?.length) { return; diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-styles.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-styles.ts index 8bf26ceff..51384cb69 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-styles.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/apply-styles.ts @@ -1,7 +1,7 @@ import type { Document, Root } from 'postcss'; import { Stylesheet, isImportStatement, isNodesStatement } from './statement'; -export function applyStyles(stylesheet: Stylesheet, styles: Root | Document) { +export function applyStyles(stylesheet: Stylesheet, styles: Root | Document): void { styles.nodes = []; if (stylesheet.charset) { diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/load-content.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/load-content.ts index 234e9013e..622140182 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/load-content.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/load-content.ts @@ -1,7 +1,7 @@ import fs from 'fs/promises'; import { dataURLContents, isValidDataURL } from './data-url'; -export async function loadContent(filename: string) { +export async function loadContent(filename: string): Promise { if (isValidDataURL(filename)) { return dataURLContents(filename); } diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/noop-plugin.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/noop-plugin.ts index b5845908e..a9b7aef0e 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/noop-plugin.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/noop-plugin.ts @@ -1,8 +1,10 @@ +import type { PluginCreator } from 'postcss'; + // https://github.com/postcss/postcss/issues/1869 -const noopPlugin = () => { +const noopPlugin: PluginCreator = () => { return { postcssPlugin: 'noop-plugin', - Once() { + Once(): void { // do nothing }, }; diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-at-import.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-at-import.ts index ffe242c62..eb0d994d5 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-at-import.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-at-import.ts @@ -143,7 +143,7 @@ export function parseAtImport(params: string) : false | { uri: string; fullUri: }; } -function stripHash(str: string) { +function stripHash(str: string): string { if (str.startsWith('#')) { return ''; } else if (!str.includes('#')) { diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-styles.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-styles.ts index b83f51941..e086621c6 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-styles.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/parse-styles.ts @@ -68,7 +68,7 @@ export async function parseStyles( return stylesheet; } -async function resolveImportId(result: Result, stmt: ImportStatement, postcss: Postcss, require: NodeRequire, sourceFile: string, base: string) { +async function resolveImportId(result: Result, stmt: ImportStatement, postcss: Postcss, require: NodeRequire, sourceFile: string, base: string): Promise { if (isValidDataURL(stmt.uri)) { stmt.stylesheet = await loadImportContent( result, diff --git a/plugin-packs/postcss-bundler/src/postcss-import/lib/post-process.ts b/plugin-packs/postcss-bundler/src/postcss-import/lib/post-process.ts index 8d41f8cbb..2b140fb20 100644 --- a/plugin-packs/postcss-bundler/src/postcss-import/lib/post-process.ts +++ b/plugin-packs/postcss-bundler/src/postcss-import/lib/post-process.ts @@ -1,7 +1,7 @@ import type { AtRule, AtRuleProps } from 'postcss'; import { ImportStatement, NodesStatement, Stylesheet, isImportStatement, isNodesStatement, isPreImportStatement } from './statement'; -export function postProcess(stylesheet: Stylesheet, atRule: (defaults?: AtRuleProps) => AtRule) { +export function postProcess(stylesheet: Stylesheet, atRule: (defaults?: AtRuleProps) => AtRule): void { let indexOfFirstImport = -1; let indexOfFirstPreImport = -1; let indexOfFirstMeaningfulNode = -1; diff --git a/plugin-packs/postcss-preset-env/dist/index.cjs b/plugin-packs/postcss-preset-env/dist/index.cjs index 05d379f18..3095497b7 100644 --- a/plugin-packs/postcss-preset-env/dist/index.cjs +++ b/plugin-packs/postcss-preset-env/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("autoprefixer"),e=require("cssdb"),o=require("browserslist"),t=require("@csstools/postcss-initial"),i=require("postcss-pseudo-class-any-link"),r=require("css-blank-pseudo"),a=require("postcss-page-break"),c=require("@csstools/postcss-cascade-layers"),n=require("postcss-attribute-case-insensitive"),p=require("postcss-clamp"),l=require("@csstools/postcss-color-function"),u=require("postcss-color-functional-notation"),m=require("@csstools/postcss-color-mix-function"),d=require("postcss-custom-media"),g=require("postcss-custom-properties"),f=require("postcss-custom-selectors"),b=require("postcss-dir-pseudo-class"),h=require("@csstools/postcss-normalize-display-values"),v=require("postcss-double-position-gradients"),N=require("@csstools/postcss-exponential-functions"),y=require("@csstools/postcss-logical-float-and-clear"),k=require("postcss-focus-visible"),w=require("postcss-focus-within"),q=require("@csstools/postcss-font-format-keywords"),x=require("postcss-font-variant"),F=require("@csstools/postcss-gamut-mapping"),O=require("postcss-gap-properties"),$=require("@csstools/postcss-gradients-interpolation-method"),S=require("css-has-pseudo"),P=require("postcss-color-hex-alpha"),C=require("@csstools/postcss-hwb-function"),I=require("@csstools/postcss-ic-unit"),B=require("postcss-image-set-function"),E=require("@csstools/postcss-is-pseudo-class"),A=require("postcss-lab-function"),L=require("@csstools/postcss-light-dark-function"),U=require("@csstools/postcss-logical-overflow"),_=require("@csstools/postcss-logical-overscroll-behavior"),j=require("postcss-logical"),D=require("@csstools/postcss-logical-resize"),M=require("@csstools/postcss-logical-viewport-units"),z=require("@csstools/postcss-media-queries-aspect-ratio-number-values"),R=require("@csstools/postcss-media-minmax"),V=require("@csstools/postcss-nested-calc"),T=require("postcss-nesting"),H=require("postcss-selector-not"),W=require("@csstools/postcss-oklab-function"),G=require("postcss-opacity-percentage"),K=require("postcss-overflow-shorthand"),Z=require("postcss-replace-overflow-wrap"),Q=require("postcss-place"),J=require("css-prefers-color-scheme"),X=require("@csstools/postcss-progressive-custom-properties"),Y=require("postcss-color-rebeccapurple"),ss=require("@csstools/postcss-relative-color-syntax"),es=require("@csstools/postcss-scope-pseudo-class"),os=require("@csstools/postcss-stepped-value-functions"),ts=require("@csstools/postcss-text-decoration-shorthand"),is=require("@csstools/postcss-trigonometric-functions"),rs=require("@csstools/postcss-unset-value");const as={"blank-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-blank-pseudo/README.md#browser","focus-visible-pseudo-class":"https://github.com/WICG/focus-visible","focus-within-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/postcss-focus-within/README.md#browser","has-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-has-pseudo/README.md#browser","prefers-color-scheme-query":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-prefers-color-scheme/README.md#browser"},cs=["blank-pseudo-class","focus-visible-pseudo-class","focus-within-pseudo-class","has-pseudo-class","prefers-color-scheme-query"];function logFeaturesList(s,e,o){if(e.debug){o.log("Enabling the following feature(s):");const t=[],i=[];!1!==e.autoprefixer&&i.push(" autoprefixer"),s.forEach((s=>{s.id.startsWith("before")||s.id.startsWith("after")?i.push(` ${s.id} (injected via options)`):i.push(` ${s.id}`),void 0!==as[s.id]&&t.push(s.id)})),i.sort(((s,e)=>s.localeCompare(e))),t.sort(((s,e)=>s.localeCompare(e))),i.forEach((s=>o.log(s))),t.length&&(o.log("These feature(s) need a browser library to work:"),t.forEach((s=>o.log(` ${s}: ${as[s]}`))))}}function initializeSharedOptions(s){if("preserve"in s){const e={};return e.preserve=s.preserve,e}return!1}function clamp(s,e,o){return Math.max(s,Math.min(e,o))}const ns=2,ps=5;function stageFromOptions(s,e){let o=ns;if(void 0===s.stage)return e.log(`Using features from Stage ${o} (default)`),o;if(!1===s.stage)o=ps;else{let e=parseInt(s.stage,10);Number.isNaN(e)&&(e=0),o=clamp(0,e,ps)}return o===ps?e.log('Stage has been disabled, features will be handled via the "features" option.'):e.log(`Using features from Stage ${o}`),o}const ls=Symbol("insertBefore"),us=Symbol("insertAfter"),ms=Symbol("insertOrder"),ds=Symbol("plugin");function getTransformedInsertions(s,e,o){if("insertBefore"!==o&&"insertAfter"!==o)return[];const t="insertBefore"===o?ls:us,i=[];for(const o in e){if(!Object.hasOwnProperty.call(e,o))continue;if(!s.find((s=>s.id===o)))continue;let r=e[o];Array.isArray(r)||(r=[r]);for(let s=0;sfeatureIsInsertedOrHasAPlugin(s))).sort(((s,e)=>featureIsLess(s,e)))}const ws=["and_chr","and_ff","android","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"];function getUnsupportedBrowsersByFeature(s){if(!s)return[];if(!("browser_support"in s))return["> 0%"];const e=[];return ws.forEach((o=>{if("op_mini"===o&&void 0===s.browser_support[o])return void e.push("op_mini all");const t=s.browser_support[o];"string"==typeof t&&qs.test(t)?e.push(`${o} < ${s.browser_support[o]}`):e.push(`${o} >= 1`)})),e}const qs=/^[0-9|.]+$/;function getOptionsForBrowsersByFeature(s,e,o,t,i){switch(e.id){case"is-pseudo-class":return{onComplexSelector:"warning"};case"nesting-rules":if(needsOptionFor(o.find((s=>"is-pseudo-class"===s.id)),s))return i.log('Disabling :is on "nesting-rules" due to lack of browser support.'),{noIsPseudoSelector:!0};return{};case"any-link-pseudo-class":if(s.find((s=>s.startsWith("ie ")||s.startsWith("edge "))))return i.log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'),{subFeatures:{areaHrefNeedsFixing:!0}};return{};case"logical-properties-and-values":case"float-clear-logical-values":case"logical-resize":case"logical-viewport-units":case"logical-overflow":case"logical-overscroll-behavior":return"logical"in t?t.logical:{};default:return{}}}function needsOptionFor(s,e){const t=getUnsupportedBrowsersByFeature(s),i=o(t,{ignoreUnknownVersions:!0});return!!e.some((s=>i.some((e=>e===s))))}function formatPolyfillableFeature(s){const e=getUnsupportedBrowsersByFeature(s);if(s[ls]||s[us]){let o=s.id;return o=s.insertBefore?`before-${o}`:`after-${o}`,{browsers:e,vendors_implementations:s.vendors_implementations,plugin:s[ds],id:o,stage:ps+1}}return{browsers:e,vendors_implementations:s.vendors_implementations,plugin:ks.get(s.id),id:s.id,stage:s.stage}}function formatStagedFeature(s,e,o,t,i,r,a){let c,n;return c=getOptionsForBrowsersByFeature(e,t,s,r,a),c=i?Object.assign({},c,i,featureOptions(o,t.id)):Object.assign({},c,featureOptions(o,t.id)),"progressive-custom-properties"!==t.id&&(c.enableProgressiveCustomProperties=!1),"overflow-wrap-property"===t.id&&"preserve"in c&&(c.method=c.preserve?"copy":"replace"),n=t.plugin.postcss&&"function"==typeof t.plugin?t.plugin(c):t.plugin&&t.plugin.default&&"function"==typeof t.plugin.default&&t.plugin.default.postcss?t.plugin.default(c):t.plugin,{browsers:t.browsers,vendors_implementations:t.vendors_implementations,plugin:n,pluginOptions:c,id:t.id}}function featureOptions(s,e){if(!(e in s))return;const o=s[e];return Array.isArray(o)?o[1]:o}function intOrZero(s){const e=parseInt(s,10);return Number.isNaN(e)?0:e}const xs=new Set(["progressive-custom-properties"]);function listFeatures(s,e,t,i){const r=Object(e.features),a="enableClientSidePolyfills"in e&&e.enableClientSidePolyfills,c=Object(e.insertBefore),n=Object(e.insertAfter),p=e.browsers?void 0:e.env,l=e.browsers,u=clamp(0,intOrZero(e.minimumVendorImplementations),3);u>0&&i.log(`Using features with ${u} or more vendor implementations`);const m=stageFromOptions(e,i),d=prepareFeaturesList([...s,{id:"progressive-custom-properties"}],c,n).map((s=>formatPolyfillableFeature(s))).filter((s=>!!xs.has(s.id)||(0===u||(!(!s[ls]&&!s[us])||(u<=s.vendors_implementations||(!0===featureEnabledByOptions(r,s.id)?(i.log(` ${s.id} does not meet the required vendor implementations but has been enabled by options`),!0):(i.log(` ${s.id} with ${s.vendors_implementations} vendor implementations has been disabled`),!1))))))),g=o(l,{env:p,ignoreUnknownVersions:!0}).filter((s=>ws.includes(s.split(" ")[0])));return d.filter((s=>{if(xs.has(s.id))return!0;const e=s.stage>=m,o=a||!cs.includes(s.id),t=featureEnabledByOptions(r,s.id),c=!1===t,n=!0===t||e&&o;return c?i.log(` ${s.id} has been disabled by options`):e?o||i.log(` ${s.id} has been disabled by "enableClientSidePolyfills: false".`):n?i.log(` ${s.id} does not meet the required stage but has been enabled by options`):i.log(` ${s.id} with stage ${s.stage} has been disabled`),!c&&n})).map((o=>formatStagedFeature(s,g,r,o,t,e,i))).filter((s=>{if(xs.has(s.id))return!0;const e=featureEnabledByOptions(r,s.id);if(!0===e||!1===e)return e;const t=o(s.browsers,{ignoreUnknownVersions:!0}),a=g.some((s=>t.some((e=>e===s))));return a||i.log(`${s.id} disabled due to browser support`),a}))}function featureEnabledByOptions(s,e){if(!(e in s))return"auto";const o=s[e];return Array.isArray(o)?!0===o[0]||!1!==o[0]&&"auto":Boolean(o)}class Logger{constructor(){this.logs=[]}log(s){this.logs.push(s)}resetLogger(){this.logs.length=0}dumpLogs(s){s&&s.warn(this.logs.join("\n")),this.resetLogger()}}var Fs=[{packageName:"css-blank-pseudo",id:"blank-pseudo-class",importName:"postcssBlankPseudo"},{packageName:"css-has-pseudo",id:"has-pseudo-class",importName:"postcssHasPseudo"},{packageName:"css-prefers-color-scheme",id:"prefers-color-scheme-query",importName:"postcssPrefersColorScheme"},{packageName:"postcss-attribute-case-insensitive",id:"case-insensitive-attributes",importName:"postcssAttributeCaseInsensitive"},{packageName:"postcss-clamp",id:"clamp",importName:"postcssClamp"},{packageName:"@csstools/postcss-color-mix-function",id:"color-mix",importName:"postcssColorMixFunction"},{packageName:"@csstools/postcss-color-function",id:"color-function",importName:"postcssColorFunction"},{packageName:"postcss-color-functional-notation",id:"color-functional-notation",importName:"postcssColorFunctionalNotation"},{packageName:"postcss-color-hex-alpha",id:"hexadecimal-alpha-notation",importName:"postcssColorHexAlpha"},{packageName:"postcss-color-rebeccapurple",id:"rebeccapurple-color",importName:"postcssColorRebeccapurple"},{packageName:"postcss-custom-media",id:"custom-media-queries",importName:"postcssCustomMedia"},{packageName:"postcss-custom-properties",id:"custom-properties",importName:"postcssCustomProperties"},{packageName:"postcss-custom-selectors",id:"custom-selectors",importName:"postcssCustomSelectors"},{packageName:"postcss-dir-pseudo-class",id:"dir-pseudo-class",importName:"postcssDirPseudoClass"},{packageName:"postcss-double-position-gradients",id:"double-position-gradients",importName:"postcssDoublePositionGradients"},{packageName:"@csstools/postcss-exponential-functions",id:"exponential-functions",importName:"postcssExponentialFunctions"},{packageName:"postcss-focus-visible",id:"focus-visible-pseudo-class",importName:"postcssFocusVisible"},{packageName:"postcss-focus-within",id:"focus-within-pseudo-class",importName:"postcssFocusWithin"},{packageName:"@csstools/postcss-font-format-keywords",id:"font-format-keywords",importName:"postcssFontFormatKeywords"},{packageName:"postcss-font-variant",id:"font-variant-property",importName:"postcssFontVariant"},{packageName:"@csstools/postcss-gamut-mapping",id:"gamut-mapping",importName:"postcssGamutMapping"},{packageName:"postcss-gap-properties",id:"gap-properties",importName:"postcssGapProperties"},{packageName:"@csstools/postcss-gradients-interpolation-method",id:"gradients-interpolation-method",importName:"postcssGradientsInterpolationMethod"},{packageName:"@csstools/postcss-hwb-function",id:"hwb-function",importName:"postcssHWBFunction"},{packageName:"@csstools/postcss-ic-unit",id:"ic-unit",importName:"postcssICUnit"},{packageName:"postcss-image-set-function",id:"image-set-function",importName:"postcssImageSetFunction"},{packageName:"@csstools/postcss-initial",id:"all-property",importName:"postcssInitial"},{packageName:"@csstools/postcss-is-pseudo-class",id:"is-pseudo-class",importName:"postcssIsPseudoClass"},{packageName:"@csstools/postcss-scope-pseudo-class",id:"scope-pseudo-class",importName:"postcssScopePseudoClass"},{packageName:"postcss-lab-function",id:"lab-function",importName:"postcssLabFunction"},{packageName:"@csstools/postcss-light-dark-function",id:"light-dark-function",importName:"postcssLightDarkFunction"},{packageName:"postcss-logical",id:"logical-properties-and-values",importName:"postcssLogical"},{packageName:"@csstools/postcss-logical-float-and-clear",id:"float-clear-logical-values",importName:"postcssLogicalFloatAndClear"},{packageName:"@csstools/postcss-logical-overflow",id:"logical-overflow",importName:"postcssLogicalOverflow"},{packageName:"@csstools/postcss-logical-overscroll-behavior",id:"logical-overscroll-behavior",importName:"postcssLogicalOverscrollBehavor"},{packageName:"@csstools/postcss-logical-resize",id:"logical-resize",importName:"postcssLogicalResize"},{packageName:"@csstools/postcss-logical-viewport-units",id:"logical-viewport-units",importName:"postcssLogicalViewportUnits"},{packageName:"@csstools/postcss-media-minmax",id:"media-query-ranges",importName:"postcssMediaMinmax"},{packageName:"@csstools/postcss-media-queries-aspect-ratio-number-values",id:"media-queries-aspect-ratio-number-values",importName:"postcssMediaQueriesAspectRatioNumberValues"},{packageName:"postcss-nesting",id:"nesting-rules",importName:"postcssNesting"},{packageName:"@csstools/postcss-normalize-display-values",id:"display-two-values",importName:"postcssNormalizeDisplayValues"},{packageName:"@csstools/postcss-oklab-function",id:"oklab-function",importName:"postcssOKLabFunction"},{packageName:"@csstools/postcss-relative-color-syntax",id:"relative-color-syntax",importName:"postcssRelativeColorSyntax"},{packageName:"postcss-opacity-percentage",id:"opacity-percentage",importName:"postcssOpacityPercentage"},{packageName:"postcss-overflow-shorthand",id:"overflow-property",importName:"postcssOverflowShorthand"},{packageName:"postcss-page-break",id:"break-properties",importName:"postcssPageBreak"},{packageName:"postcss-place",id:"place-properties",importName:"postcssPlace"},{packageName:"postcss-pseudo-class-any-link",id:"any-link-pseudo-class",importName:"postcssPseudoClassAnyLink"},{packageName:"postcss-replace-overflow-wrap",id:"overflow-wrap-property",importName:"postcssReplaceOverflowWrap"},{packageName:"postcss-selector-not",id:"not-pseudo-class",importName:"postcssSelectorNot"},{packageName:"@csstools/postcss-stepped-value-functions",id:"stepped-value-functions",importName:"postcssSteppedValueFunctions"},{packageName:"postcss-system-ui-font-family",importedPackage:"../patch/postcss-system-ui-font-family.mjs",id:"system-ui-font-family",importName:"postcssFontFamilySystemUI"},{packageName:"@csstools/postcss-unset-value",id:"unset-value",importName:"postcssUnsetValue"},{packageName:"@csstools/postcss-cascade-layers",id:"cascade-layers",importName:"postcssCascadeLayers"},{packageName:"@csstools/postcss-trigonometric-functions",id:"trigonometric-functions",importName:"postcssTrigonometricFunctions"},{packageName:"@csstools/postcss-nested-calc",id:"nested-calc",importName:"postcssNestedCalc"},{packageName:"@csstools/postcss-text-decoration-shorthand",id:"text-decoration-shorthand",importName:"postcssTextDecorationShorthand"},{packageName:"@csstools/postcss-progressive-custom-properties",id:"progressive-custom-properties",importName:"postcssProgressiveCustomProperties",omitTypedOptions:!0,omitDocs:!0}];function getPackageNamesToIds(){const s={};return Fs.forEach((e=>{s[e.packageName]=e.id})),s}function pluginIdHelp(s,e,o){const t=Fs.map((s=>s.id)),i=Fs.map((s=>s.packageName)),r=getPackageNamesToIds();s.forEach((s=>{if(t.includes(s))return;const a=[...t.map((e=>[e,levenshteinDistance(s,e)])),...i.map((e=>[r[e],levenshteinDistance(s,e)]))].sort(((s,e)=>s[1]-e[1])).filter((s=>s[1]<10)),c=new Set;for(let s=0;s=3));s++);if(!c.size)return void e.warn(o,`Unknown feature: "${s}", see the list of features https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md`);let n='"';n+=Array.from(c).join('", "'),n+='"',e.warn(o,`Unknown feature: "${s}", did you mean one of: ${n}`)}))}function levenshteinDistance(s,e){if(!s.length)return e.length;if(!e.length)return s.length;const o=[];for(let t=0;t<=e.length;t++){o[t]=[t];for(let i=1;i<=s.length;i++)o[t][i]=0===t?i:Math.min(o[t-1][i]+1,o[t][i-1]+1,o[t-1][i-1]+(s[i-1]===e[t-1]?0:1))}return o[e.length][s.length]}const creator=o=>{const t=new Logger,i=Object(o),r=Object.keys(Object(i.features)),a=i.browsers?void 0:i.env,c=i.browsers,n=initializeSharedOptions(i),p=listFeatures(e,i,n,t),l=p.map((s=>s.plugin));!1!==i.autoprefixer&&l.push(s(Object.assign({env:a,overrideBrowserslist:c},i.autoprefixer))),logFeaturesList(p,i,t);const internalPlugin=()=>({postcssPlugin:"postcss-preset-env",OnceExit:function(s,{result:e}){pluginIdHelp(r,s,e),i.debug&&t.dumpLogs(e),t.resetLogger()}});return internalPlugin.postcss=!0,{postcssPlugin:"postcss-preset-env",plugins:[...l,internalPlugin()]}};creator.postcss=!0,module.exports=creator; +"use strict";var s=require("autoprefixer"),e=require("cssdb"),o=require("browserslist"),t=require("@csstools/postcss-initial"),i=require("postcss-pseudo-class-any-link"),r=require("css-blank-pseudo"),a=require("postcss-page-break"),c=require("@csstools/postcss-cascade-layers"),n=require("postcss-attribute-case-insensitive"),p=require("postcss-clamp"),l=require("@csstools/postcss-color-function"),u=require("postcss-color-functional-notation"),m=require("@csstools/postcss-color-mix-function"),d=require("postcss-custom-media"),g=require("postcss-custom-properties"),f=require("postcss-custom-selectors"),b=require("postcss-dir-pseudo-class"),h=require("@csstools/postcss-normalize-display-values"),v=require("postcss-double-position-gradients"),N=require("@csstools/postcss-exponential-functions"),y=require("@csstools/postcss-logical-float-and-clear"),k=require("postcss-focus-visible"),w=require("postcss-focus-within"),q=require("@csstools/postcss-font-format-keywords"),x=require("postcss-font-variant"),F=require("@csstools/postcss-gamut-mapping"),O=require("postcss-gap-properties"),$=require("@csstools/postcss-gradients-interpolation-method"),S=require("css-has-pseudo"),P=require("postcss-color-hex-alpha"),C=require("@csstools/postcss-hwb-function"),I=require("@csstools/postcss-ic-unit"),B=require("postcss-image-set-function"),E=require("@csstools/postcss-is-pseudo-class"),A=require("postcss-lab-function"),L=require("@csstools/postcss-light-dark-function"),U=require("@csstools/postcss-logical-overflow"),_=require("@csstools/postcss-logical-overscroll-behavior"),j=require("postcss-logical"),D=require("@csstools/postcss-logical-resize"),M=require("@csstools/postcss-logical-viewport-units"),z=require("@csstools/postcss-media-queries-aspect-ratio-number-values"),R=require("@csstools/postcss-media-minmax"),V=require("@csstools/postcss-nested-calc"),T=require("postcss-nesting"),H=require("postcss-selector-not"),W=require("@csstools/postcss-oklab-function"),G=require("postcss-opacity-percentage"),K=require("postcss-overflow-shorthand"),Z=require("postcss-replace-overflow-wrap"),Q=require("postcss-place"),J=require("css-prefers-color-scheme"),X=require("@csstools/postcss-progressive-custom-properties"),Y=require("postcss-color-rebeccapurple"),ss=require("@csstools/postcss-relative-color-syntax"),es=require("@csstools/postcss-scope-pseudo-class"),os=require("@csstools/postcss-stepped-value-functions"),ts=require("@csstools/postcss-text-decoration-shorthand"),is=require("@csstools/postcss-trigonometric-functions"),rs=require("@csstools/postcss-unset-value");const as={"blank-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-blank-pseudo/README.md#browser","focus-visible-pseudo-class":"https://github.com/WICG/focus-visible","focus-within-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/postcss-focus-within/README.md#browser","has-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-has-pseudo/README.md#browser","prefers-color-scheme-query":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-prefers-color-scheme/README.md#browser"},cs=["blank-pseudo-class","focus-visible-pseudo-class","focus-within-pseudo-class","has-pseudo-class","prefers-color-scheme-query"];function logFeaturesList(s,e,o){if(e.debug){o.log("Enabling the following feature(s):");const t=[],i=[];!1!==e.autoprefixer&&i.push(" autoprefixer"),s.forEach((s=>{s.id.startsWith("before")||s.id.startsWith("after")?i.push(` ${s.id} (injected via options)`):i.push(` ${s.id}`),void 0!==as[s.id]&&t.push(s.id)})),i.sort(((s,e)=>s.localeCompare(e))),t.sort(((s,e)=>s.localeCompare(e))),i.forEach((s=>o.log(s))),t.length&&(o.log("These feature(s) need a browser library to work:"),t.forEach((s=>o.log(` ${s}: ${as[s]}`))))}}function initializeSharedOptions(s){if("preserve"in s){const e={};return e.preserve=s.preserve,e}return!1}function clamp(s,e,o){return Math.max(s,Math.min(e,o))}const ns=2,ps=5;function stageFromOptions(s,e){let o=ns;if(void 0===s.stage)return e.log(`Using features from Stage ${o} (default)`),o;if(!1===s.stage)o=ps;else{let e=parseInt(s.stage,10);Number.isNaN(e)&&(e=0),o=clamp(0,e,ps)}return o===ps?e.log('Stage has been disabled, features will be handled via the "features" option.'):e.log(`Using features from Stage ${o}`),o}const ls=Symbol("insertBefore"),us=Symbol("insertAfter"),ms=Symbol("insertOrder"),ds=Symbol("plugin");function getTransformedInsertions(s,e,o){if("insertBefore"!==o&&"insertAfter"!==o)return[];const t="insertBefore"===o?ls:us,i=[];for(const o in e){if(!Object.hasOwnProperty.call(e,o))continue;if(!s.find((s=>s.id===o)))continue;let r=e[o];Array.isArray(r)||(r=[r]);for(let s=0;sfeatureIsInsertedOrHasAPlugin(s))).sort(((s,e)=>featureIsLess(s,e)))}const ws=["and_chr","and_ff","android","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"];function getUnsupportedBrowsersByFeature(s){if(!s)return[];if(!("browser_support"in s))return["> 0%"];const e=[];return ws.forEach((o=>{if("op_mini"===o&&void 0===s.browser_support[o])return void e.push("op_mini all");const t=s.browser_support[o];"string"==typeof t&&qs.test(t)?e.push(`${o} < ${s.browser_support[o]}`):e.push(`${o} >= 1`)})),e}const qs=/^[0-9|.]+$/;function getOptionsForBrowsersByFeature(s,e,o,t,i){switch(e.id){case"is-pseudo-class":return{onComplexSelector:"warning"};case"nesting-rules":if(needsOptionFor(o.find((s=>"is-pseudo-class"===s.id)),s))return i.log('Disabling :is on "nesting-rules" due to lack of browser support.'),{noIsPseudoSelector:!0};return{};case"any-link-pseudo-class":if(s.find((s=>s.startsWith("ie ")||s.startsWith("edge "))))return i.log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'),{subFeatures:{areaHrefNeedsFixing:!0}};return{};case"logical-properties-and-values":case"float-clear-logical-values":case"logical-resize":case"logical-viewport-units":case"logical-overflow":case"logical-overscroll-behavior":return"logical"in t?t.logical:{};default:return{}}}function needsOptionFor(s,e){const t=getUnsupportedBrowsersByFeature(s),i=o(t,{ignoreUnknownVersions:!0});return!!e.some((s=>i.some((e=>e===s))))}function formatPolyfillableFeature(s){const e=getUnsupportedBrowsersByFeature(s);if(s[ls]||s[us]){let o=s.id;return o=s.insertBefore?`before-${o}`:`after-${o}`,{browsers:e,vendors_implementations:s.vendors_implementations,plugin:s[ds],id:o,stage:ps+1}}return{browsers:e,vendors_implementations:s.vendors_implementations,plugin:ks.get(s.id),id:s.id,stage:s.stage}}function formatStagedFeature(s,e,o,t,i,r,a){let c,n;return c=getOptionsForBrowsersByFeature(e,t,s,r,a),c=i?Object.assign({},c,i,featureOptions(o,t.id)):Object.assign({},c,featureOptions(o,t.id)),"progressive-custom-properties"!==t.id&&(c.enableProgressiveCustomProperties=!1),"overflow-wrap-property"===t.id&&"preserve"in c&&(c.method=c.preserve?"copy":"replace"),n=t.plugin.postcss&&"function"==typeof t.plugin?t.plugin(c):t.plugin&&t.plugin.default&&"function"==typeof t.plugin.default&&t.plugin.default.postcss?t.plugin.default(c):t.plugin,{browsers:t.browsers,vendors_implementations:t.vendors_implementations,plugin:n,pluginOptions:c,id:t.id}}function featureOptions(s,e){if(!(e in s))return;const o=s[e];return Array.isArray(o)?o[1]:o}function intOrZero(s){const e=parseInt(s,10);return Number.isNaN(e)?0:e}const xs=new Set(["progressive-custom-properties"]);function listFeatures(s,e,t,i){const r=Object(e.features),a="enableClientSidePolyfills"in e&&e.enableClientSidePolyfills,c=Object(e.insertBefore),n=Object(e.insertAfter),p=e.browsers?void 0:e.env,l=e.browsers,u=clamp(0,intOrZero(e.minimumVendorImplementations),3);u>0&&i.log(`Using features with ${u} or more vendor implementations`);const m=stageFromOptions(e,i),d=prepareFeaturesList([...s,{id:"progressive-custom-properties"}],c,n).map((s=>formatPolyfillableFeature(s))).filter((s=>!!xs.has(s.id)||(0===u||(!(!s[ls]&&!s[us])||(u<=s.vendors_implementations||(!0===featureEnabledByOptions(r,s.id)?(i.log(` ${s.id} does not meet the required vendor implementations but has been enabled by options`),!0):(i.log(` ${s.id} with ${s.vendors_implementations} vendor implementations has been disabled`),!1))))))),g=o(l,{env:p,ignoreUnknownVersions:!0}).filter((s=>ws.includes(s.split(" ")[0])));return d.filter((s=>{if(xs.has(s.id))return!0;const e=s.stage>=m,o=a||!cs.includes(s.id),t=featureEnabledByOptions(r,s.id),c=!1===t,n=!0===t||e&&o;return c?i.log(` ${s.id} has been disabled by options`):e?o||i.log(` ${s.id} has been disabled by "enableClientSidePolyfills: false".`):n?i.log(` ${s.id} does not meet the required stage but has been enabled by options`):i.log(` ${s.id} with stage ${s.stage} has been disabled`),!c&&n})).map((o=>formatStagedFeature(s,g,r,o,t,e,i))).filter((s=>{if(xs.has(s.id))return!0;const e=featureEnabledByOptions(r,s.id);if(!0===e||!1===e)return e;const t=o(s.browsers,{ignoreUnknownVersions:!0}),a=g.some((s=>t.some((e=>e===s))));return a||i.log(`${s.id} disabled due to browser support`),a}))}function featureEnabledByOptions(s,e){if(!(e in s))return"auto";const o=s[e];return Array.isArray(o)?!0===o[0]||!1!==o[0]&&"auto":Boolean(o)}class Logger{constructor(){this.logs=[]}log(s){this.logs.push(s)}resetLogger(){this.logs.length=0}dumpLogs(s){s&&s.warn(this.logs.join("\n")),this.resetLogger()}}var Fs=[{packageName:"css-blank-pseudo",id:"blank-pseudo-class",importName:"postcssBlankPseudo"},{packageName:"css-has-pseudo",id:"has-pseudo-class",importName:"postcssHasPseudo"},{packageName:"css-prefers-color-scheme",id:"prefers-color-scheme-query",importName:"postcssPrefersColorScheme"},{packageName:"postcss-attribute-case-insensitive",id:"case-insensitive-attributes",importName:"postcssAttributeCaseInsensitive"},{packageName:"postcss-clamp",id:"clamp",importName:"postcssClamp"},{packageName:"@csstools/postcss-color-mix-function",id:"color-mix",importName:"postcssColorMixFunction"},{packageName:"@csstools/postcss-color-function",id:"color-function",importName:"postcssColorFunction"},{packageName:"postcss-color-functional-notation",id:"color-functional-notation",importName:"postcssColorFunctionalNotation"},{packageName:"postcss-color-hex-alpha",id:"hexadecimal-alpha-notation",importName:"postcssColorHexAlpha"},{packageName:"postcss-color-rebeccapurple",id:"rebeccapurple-color",importName:"postcssColorRebeccapurple"},{packageName:"postcss-custom-media",id:"custom-media-queries",importName:"postcssCustomMedia"},{packageName:"postcss-custom-properties",id:"custom-properties",importName:"postcssCustomProperties"},{packageName:"postcss-custom-selectors",id:"custom-selectors",importName:"postcssCustomSelectors"},{packageName:"postcss-dir-pseudo-class",id:"dir-pseudo-class",importName:"postcssDirPseudoClass"},{packageName:"postcss-double-position-gradients",id:"double-position-gradients",importName:"postcssDoublePositionGradients"},{packageName:"@csstools/postcss-exponential-functions",id:"exponential-functions",importName:"postcssExponentialFunctions"},{packageName:"postcss-focus-visible",id:"focus-visible-pseudo-class",importName:"postcssFocusVisible"},{packageName:"postcss-focus-within",id:"focus-within-pseudo-class",importName:"postcssFocusWithin"},{packageName:"@csstools/postcss-font-format-keywords",id:"font-format-keywords",importName:"postcssFontFormatKeywords"},{packageName:"postcss-font-variant",id:"font-variant-property",importName:"postcssFontVariant"},{packageName:"@csstools/postcss-gamut-mapping",id:"gamut-mapping",importName:"postcssGamutMapping"},{packageName:"postcss-gap-properties",id:"gap-properties",importName:"postcssGapProperties"},{packageName:"@csstools/postcss-gradients-interpolation-method",id:"gradients-interpolation-method",importName:"postcssGradientsInterpolationMethod"},{packageName:"@csstools/postcss-hwb-function",id:"hwb-function",importName:"postcssHWBFunction"},{packageName:"@csstools/postcss-ic-unit",id:"ic-unit",importName:"postcssICUnit"},{packageName:"postcss-image-set-function",id:"image-set-function",importName:"postcssImageSetFunction"},{packageName:"@csstools/postcss-initial",id:"all-property",importName:"postcssInitial"},{packageName:"@csstools/postcss-is-pseudo-class",id:"is-pseudo-class",importName:"postcssIsPseudoClass"},{packageName:"@csstools/postcss-scope-pseudo-class",id:"scope-pseudo-class",importName:"postcssScopePseudoClass"},{packageName:"postcss-lab-function",id:"lab-function",importName:"postcssLabFunction"},{packageName:"@csstools/postcss-light-dark-function",id:"light-dark-function",importName:"postcssLightDarkFunction"},{packageName:"postcss-logical",id:"logical-properties-and-values",importName:"postcssLogical"},{packageName:"@csstools/postcss-logical-float-and-clear",id:"float-clear-logical-values",importName:"postcssLogicalFloatAndClear"},{packageName:"@csstools/postcss-logical-overflow",id:"logical-overflow",importName:"postcssLogicalOverflow"},{packageName:"@csstools/postcss-logical-overscroll-behavior",id:"logical-overscroll-behavior",importName:"postcssLogicalOverscrollBehavor"},{packageName:"@csstools/postcss-logical-resize",id:"logical-resize",importName:"postcssLogicalResize"},{packageName:"@csstools/postcss-logical-viewport-units",id:"logical-viewport-units",importName:"postcssLogicalViewportUnits"},{packageName:"@csstools/postcss-media-minmax",id:"media-query-ranges",importName:"postcssMediaMinmax"},{packageName:"@csstools/postcss-media-queries-aspect-ratio-number-values",id:"media-queries-aspect-ratio-number-values",importName:"postcssMediaQueriesAspectRatioNumberValues"},{packageName:"postcss-nesting",id:"nesting-rules",importName:"postcssNesting"},{packageName:"@csstools/postcss-normalize-display-values",id:"display-two-values",importName:"postcssNormalizeDisplayValues"},{packageName:"@csstools/postcss-oklab-function",id:"oklab-function",importName:"postcssOKLabFunction"},{packageName:"@csstools/postcss-relative-color-syntax",id:"relative-color-syntax",importName:"postcssRelativeColorSyntax"},{packageName:"postcss-opacity-percentage",id:"opacity-percentage",importName:"postcssOpacityPercentage"},{packageName:"postcss-overflow-shorthand",id:"overflow-property",importName:"postcssOverflowShorthand"},{packageName:"postcss-page-break",id:"break-properties",importName:"postcssPageBreak"},{packageName:"postcss-place",id:"place-properties",importName:"postcssPlace"},{packageName:"postcss-pseudo-class-any-link",id:"any-link-pseudo-class",importName:"postcssPseudoClassAnyLink"},{packageName:"postcss-replace-overflow-wrap",id:"overflow-wrap-property",importName:"postcssReplaceOverflowWrap"},{packageName:"postcss-selector-not",id:"not-pseudo-class",importName:"postcssSelectorNot"},{packageName:"@csstools/postcss-stepped-value-functions",id:"stepped-value-functions",importName:"postcssSteppedValueFunctions"},{packageName:"postcss-system-ui-font-family",importedPackage:"../patch/postcss-system-ui-font-family.mjs",id:"system-ui-font-family",importName:"postcssFontFamilySystemUI"},{packageName:"@csstools/postcss-unset-value",id:"unset-value",importName:"postcssUnsetValue"},{packageName:"@csstools/postcss-cascade-layers",id:"cascade-layers",importName:"postcssCascadeLayers"},{packageName:"@csstools/postcss-trigonometric-functions",id:"trigonometric-functions",importName:"postcssTrigonometricFunctions"},{packageName:"@csstools/postcss-nested-calc",id:"nested-calc",importName:"postcssNestedCalc"},{packageName:"@csstools/postcss-text-decoration-shorthand",id:"text-decoration-shorthand",importName:"postcssTextDecorationShorthand"},{packageName:"@csstools/postcss-progressive-custom-properties",id:"progressive-custom-properties",importName:"postcssProgressiveCustomProperties",omitTypedOptions:!0,omitDocs:!0}];function getPackageNamesToIds(){const s={};return Fs.forEach((e=>{s[e.packageName]=e.id})),s}function pluginIdHelp(s,e,o){const t=Fs.map((s=>s.id)),i=Fs.map((s=>s.packageName)),r=getPackageNamesToIds();s.forEach((s=>{if(t.includes(s))return;const a=[...t.map((e=>[e,levenshteinDistance(s,e)])),...i.map((e=>[r[e],levenshteinDistance(s,e)]))].sort(((s,e)=>s[1]-e[1])).filter((s=>s[1]<10)),c=new Set;for(let s=0;s=3));s++);if(!c.size)return void e.warn(o,`Unknown feature: "${s}", see the list of features https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md`);let n='"';n+=Array.from(c).join('", "'),n+='"',e.warn(o,`Unknown feature: "${s}", did you mean one of: ${n}`)}))}function levenshteinDistance(s,e){if(!s.length)return e.length;if(!e.length)return s.length;const o=[];for(let t=0;t<=e.length;t++){o[t]=[t];for(let i=1;i<=s.length;i++)o[t][i]=0===t?i:Math.min(o[t-1][i]+1,o[t][i-1]+1,o[t-1][i-1]+(s[i-1]===e[t-1]?0:1))}return o[e.length][s.length]}const creator=o=>{const t=new Logger,i=Object(o),r=Object.keys(Object(i.features)),a=i.browsers?void 0:i.env,c=i.browsers,n=initializeSharedOptions(i),p=listFeatures(e,i,n,t),l=p.map((s=>s.plugin));!1!==i.autoprefixer&&l.push(s(Object.assign({env:a,overrideBrowserslist:c},i.autoprefixer))),logFeaturesList(p,i,t);const internalPlugin=()=>({postcssPlugin:"postcss-preset-env",OnceExit(s,{result:e}){pluginIdHelp(r,s,e),i.debug&&t.dumpLogs(e),t.resetLogger()}});return internalPlugin.postcss=!0,{postcssPlugin:"postcss-preset-env",plugins:[...l,internalPlugin()]}};creator.postcss=!0,module.exports=creator; diff --git a/plugin-packs/postcss-preset-env/dist/index.mjs b/plugin-packs/postcss-preset-env/dist/index.mjs index ca6cf962c..93078b0e9 100644 --- a/plugin-packs/postcss-preset-env/dist/index.mjs +++ b/plugin-packs/postcss-preset-env/dist/index.mjs @@ -1 +1 @@ -import s from"autoprefixer";import o from"cssdb";import e from"browserslist";import t from"@csstools/postcss-initial";import i from"postcss-pseudo-class-any-link";import r from"css-blank-pseudo";import a from"postcss-page-break";import c from"@csstools/postcss-cascade-layers";import p from"postcss-attribute-case-insensitive";import n from"postcss-clamp";import l from"@csstools/postcss-color-function";import m from"postcss-color-functional-notation";import u from"@csstools/postcss-color-mix-function";import d from"postcss-custom-media";import f from"postcss-custom-properties";import g from"postcss-custom-selectors";import b from"postcss-dir-pseudo-class";import h from"@csstools/postcss-normalize-display-values";import v from"postcss-double-position-gradients";import N from"@csstools/postcss-exponential-functions";import y from"@csstools/postcss-logical-float-and-clear";import k from"postcss-focus-visible";import w from"postcss-focus-within";import x from"@csstools/postcss-font-format-keywords";import F from"postcss-font-variant";import O from"@csstools/postcss-gamut-mapping";import $ from"postcss-gap-properties";import S from"@csstools/postcss-gradients-interpolation-method";import P from"css-has-pseudo";import C from"postcss-color-hex-alpha";import I from"@csstools/postcss-hwb-function";import B from"@csstools/postcss-ic-unit";import E from"postcss-image-set-function";import A from"@csstools/postcss-is-pseudo-class";import L from"postcss-lab-function";import U from"@csstools/postcss-light-dark-function";import _ from"@csstools/postcss-logical-overflow";import q from"@csstools/postcss-logical-overscroll-behavior";import j from"postcss-logical";import D from"@csstools/postcss-logical-resize";import M from"@csstools/postcss-logical-viewport-units";import z from"@csstools/postcss-media-queries-aspect-ratio-number-values";import R from"@csstools/postcss-media-minmax";import V from"@csstools/postcss-nested-calc";import T from"postcss-nesting";import H from"postcss-selector-not";import W from"@csstools/postcss-oklab-function";import G from"postcss-opacity-percentage";import K from"postcss-overflow-shorthand";import Z from"postcss-replace-overflow-wrap";import Q from"postcss-place";import J from"css-prefers-color-scheme";import X from"@csstools/postcss-progressive-custom-properties";import Y from"postcss-color-rebeccapurple";import ss from"@csstools/postcss-relative-color-syntax";import os from"@csstools/postcss-scope-pseudo-class";import es from"@csstools/postcss-stepped-value-functions";import ts from"@csstools/postcss-text-decoration-shorthand";import is from"@csstools/postcss-trigonometric-functions";import rs from"@csstools/postcss-unset-value";const as={"blank-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-blank-pseudo/README.md#browser","focus-visible-pseudo-class":"https://github.com/WICG/focus-visible","focus-within-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/postcss-focus-within/README.md#browser","has-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-has-pseudo/README.md#browser","prefers-color-scheme-query":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-prefers-color-scheme/README.md#browser"},cs=["blank-pseudo-class","focus-visible-pseudo-class","focus-within-pseudo-class","has-pseudo-class","prefers-color-scheme-query"];function logFeaturesList(s,o,e){if(o.debug){e.log("Enabling the following feature(s):");const t=[],i=[];!1!==o.autoprefixer&&i.push(" autoprefixer"),s.forEach((s=>{s.id.startsWith("before")||s.id.startsWith("after")?i.push(` ${s.id} (injected via options)`):i.push(` ${s.id}`),void 0!==as[s.id]&&t.push(s.id)})),i.sort(((s,o)=>s.localeCompare(o))),t.sort(((s,o)=>s.localeCompare(o))),i.forEach((s=>e.log(s))),t.length&&(e.log("These feature(s) need a browser library to work:"),t.forEach((s=>e.log(` ${s}: ${as[s]}`))))}}function initializeSharedOptions(s){if("preserve"in s){const o={};return o.preserve=s.preserve,o}return!1}function clamp(s,o,e){return Math.max(s,Math.min(o,e))}const ps=2,ns=5;function stageFromOptions(s,o){let e=ps;if(void 0===s.stage)return o.log(`Using features from Stage ${e} (default)`),e;if(!1===s.stage)e=ns;else{let o=parseInt(s.stage,10);Number.isNaN(o)&&(o=0),e=clamp(0,o,ns)}return e===ns?o.log('Stage has been disabled, features will be handled via the "features" option.'):o.log(`Using features from Stage ${e}`),e}const ls=Symbol("insertBefore"),ms=Symbol("insertAfter"),us=Symbol("insertOrder"),ds=Symbol("plugin");function getTransformedInsertions(s,o,e){if("insertBefore"!==e&&"insertAfter"!==e)return[];const t="insertBefore"===e?ls:ms,i=[];for(const e in o){if(!Object.hasOwnProperty.call(o,e))continue;if(!s.find((s=>s.id===e)))continue;let r=o[e];Array.isArray(r)||(r=[r]);for(let s=0;sfeatureIsInsertedOrHasAPlugin(s))).sort(((s,o)=>featureIsLess(s,o)))}const ws=["and_chr","and_ff","android","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"];function getUnsupportedBrowsersByFeature(s){if(!s)return[];if(!("browser_support"in s))return["> 0%"];const o=[];return ws.forEach((e=>{if("op_mini"===e&&void 0===s.browser_support[e])return void o.push("op_mini all");const t=s.browser_support[e];"string"==typeof t&&xs.test(t)?o.push(`${e} < ${s.browser_support[e]}`):o.push(`${e} >= 1`)})),o}const xs=/^[0-9|.]+$/;function getOptionsForBrowsersByFeature(s,o,e,t,i){switch(o.id){case"is-pseudo-class":return{onComplexSelector:"warning"};case"nesting-rules":if(needsOptionFor(e.find((s=>"is-pseudo-class"===s.id)),s))return i.log('Disabling :is on "nesting-rules" due to lack of browser support.'),{noIsPseudoSelector:!0};return{};case"any-link-pseudo-class":if(s.find((s=>s.startsWith("ie ")||s.startsWith("edge "))))return i.log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'),{subFeatures:{areaHrefNeedsFixing:!0}};return{};case"logical-properties-and-values":case"float-clear-logical-values":case"logical-resize":case"logical-viewport-units":case"logical-overflow":case"logical-overscroll-behavior":return"logical"in t?t.logical:{};default:return{}}}function needsOptionFor(s,o){const t=getUnsupportedBrowsersByFeature(s),i=e(t,{ignoreUnknownVersions:!0});return!!o.some((s=>i.some((o=>o===s))))}function formatPolyfillableFeature(s){const o=getUnsupportedBrowsersByFeature(s);if(s[ls]||s[ms]){let e=s.id;return e=s.insertBefore?`before-${e}`:`after-${e}`,{browsers:o,vendors_implementations:s.vendors_implementations,plugin:s[ds],id:e,stage:ns+1}}return{browsers:o,vendors_implementations:s.vendors_implementations,plugin:ks.get(s.id),id:s.id,stage:s.stage}}function formatStagedFeature(s,o,e,t,i,r,a){let c,p;return c=getOptionsForBrowsersByFeature(o,t,s,r,a),c=i?Object.assign({},c,i,featureOptions(e,t.id)):Object.assign({},c,featureOptions(e,t.id)),"progressive-custom-properties"!==t.id&&(c.enableProgressiveCustomProperties=!1),"overflow-wrap-property"===t.id&&"preserve"in c&&(c.method=c.preserve?"copy":"replace"),p=t.plugin.postcss&&"function"==typeof t.plugin?t.plugin(c):t.plugin&&t.plugin.default&&"function"==typeof t.plugin.default&&t.plugin.default.postcss?t.plugin.default(c):t.plugin,{browsers:t.browsers,vendors_implementations:t.vendors_implementations,plugin:p,pluginOptions:c,id:t.id}}function featureOptions(s,o){if(!(o in s))return;const e=s[o];return Array.isArray(e)?e[1]:e}function intOrZero(s){const o=parseInt(s,10);return Number.isNaN(o)?0:o}const Fs=new Set(["progressive-custom-properties"]);function listFeatures(s,o,t,i){const r=Object(o.features),a="enableClientSidePolyfills"in o&&o.enableClientSidePolyfills,c=Object(o.insertBefore),p=Object(o.insertAfter),n=o.browsers?void 0:o.env,l=o.browsers,m=clamp(0,intOrZero(o.minimumVendorImplementations),3);m>0&&i.log(`Using features with ${m} or more vendor implementations`);const u=stageFromOptions(o,i),d=prepareFeaturesList([...s,{id:"progressive-custom-properties"}],c,p).map((s=>formatPolyfillableFeature(s))).filter((s=>!!Fs.has(s.id)||(0===m||(!(!s[ls]&&!s[ms])||(m<=s.vendors_implementations||(!0===featureEnabledByOptions(r,s.id)?(i.log(` ${s.id} does not meet the required vendor implementations but has been enabled by options`),!0):(i.log(` ${s.id} with ${s.vendors_implementations} vendor implementations has been disabled`),!1))))))),f=e(l,{env:n,ignoreUnknownVersions:!0}).filter((s=>ws.includes(s.split(" ")[0])));return d.filter((s=>{if(Fs.has(s.id))return!0;const o=s.stage>=u,e=a||!cs.includes(s.id),t=featureEnabledByOptions(r,s.id),c=!1===t,p=!0===t||o&&e;return c?i.log(` ${s.id} has been disabled by options`):o?e||i.log(` ${s.id} has been disabled by "enableClientSidePolyfills: false".`):p?i.log(` ${s.id} does not meet the required stage but has been enabled by options`):i.log(` ${s.id} with stage ${s.stage} has been disabled`),!c&&p})).map((e=>formatStagedFeature(s,f,r,e,t,o,i))).filter((s=>{if(Fs.has(s.id))return!0;const o=featureEnabledByOptions(r,s.id);if(!0===o||!1===o)return o;const t=e(s.browsers,{ignoreUnknownVersions:!0}),a=f.some((s=>t.some((o=>o===s))));return a||i.log(`${s.id} disabled due to browser support`),a}))}function featureEnabledByOptions(s,o){if(!(o in s))return"auto";const e=s[o];return Array.isArray(e)?!0===e[0]||!1!==e[0]&&"auto":Boolean(e)}class Logger{constructor(){this.logs=[]}log(s){this.logs.push(s)}resetLogger(){this.logs.length=0}dumpLogs(s){s&&s.warn(this.logs.join("\n")),this.resetLogger()}}var Os=[{packageName:"css-blank-pseudo",id:"blank-pseudo-class",importName:"postcssBlankPseudo"},{packageName:"css-has-pseudo",id:"has-pseudo-class",importName:"postcssHasPseudo"},{packageName:"css-prefers-color-scheme",id:"prefers-color-scheme-query",importName:"postcssPrefersColorScheme"},{packageName:"postcss-attribute-case-insensitive",id:"case-insensitive-attributes",importName:"postcssAttributeCaseInsensitive"},{packageName:"postcss-clamp",id:"clamp",importName:"postcssClamp"},{packageName:"@csstools/postcss-color-mix-function",id:"color-mix",importName:"postcssColorMixFunction"},{packageName:"@csstools/postcss-color-function",id:"color-function",importName:"postcssColorFunction"},{packageName:"postcss-color-functional-notation",id:"color-functional-notation",importName:"postcssColorFunctionalNotation"},{packageName:"postcss-color-hex-alpha",id:"hexadecimal-alpha-notation",importName:"postcssColorHexAlpha"},{packageName:"postcss-color-rebeccapurple",id:"rebeccapurple-color",importName:"postcssColorRebeccapurple"},{packageName:"postcss-custom-media",id:"custom-media-queries",importName:"postcssCustomMedia"},{packageName:"postcss-custom-properties",id:"custom-properties",importName:"postcssCustomProperties"},{packageName:"postcss-custom-selectors",id:"custom-selectors",importName:"postcssCustomSelectors"},{packageName:"postcss-dir-pseudo-class",id:"dir-pseudo-class",importName:"postcssDirPseudoClass"},{packageName:"postcss-double-position-gradients",id:"double-position-gradients",importName:"postcssDoublePositionGradients"},{packageName:"@csstools/postcss-exponential-functions",id:"exponential-functions",importName:"postcssExponentialFunctions"},{packageName:"postcss-focus-visible",id:"focus-visible-pseudo-class",importName:"postcssFocusVisible"},{packageName:"postcss-focus-within",id:"focus-within-pseudo-class",importName:"postcssFocusWithin"},{packageName:"@csstools/postcss-font-format-keywords",id:"font-format-keywords",importName:"postcssFontFormatKeywords"},{packageName:"postcss-font-variant",id:"font-variant-property",importName:"postcssFontVariant"},{packageName:"@csstools/postcss-gamut-mapping",id:"gamut-mapping",importName:"postcssGamutMapping"},{packageName:"postcss-gap-properties",id:"gap-properties",importName:"postcssGapProperties"},{packageName:"@csstools/postcss-gradients-interpolation-method",id:"gradients-interpolation-method",importName:"postcssGradientsInterpolationMethod"},{packageName:"@csstools/postcss-hwb-function",id:"hwb-function",importName:"postcssHWBFunction"},{packageName:"@csstools/postcss-ic-unit",id:"ic-unit",importName:"postcssICUnit"},{packageName:"postcss-image-set-function",id:"image-set-function",importName:"postcssImageSetFunction"},{packageName:"@csstools/postcss-initial",id:"all-property",importName:"postcssInitial"},{packageName:"@csstools/postcss-is-pseudo-class",id:"is-pseudo-class",importName:"postcssIsPseudoClass"},{packageName:"@csstools/postcss-scope-pseudo-class",id:"scope-pseudo-class",importName:"postcssScopePseudoClass"},{packageName:"postcss-lab-function",id:"lab-function",importName:"postcssLabFunction"},{packageName:"@csstools/postcss-light-dark-function",id:"light-dark-function",importName:"postcssLightDarkFunction"},{packageName:"postcss-logical",id:"logical-properties-and-values",importName:"postcssLogical"},{packageName:"@csstools/postcss-logical-float-and-clear",id:"float-clear-logical-values",importName:"postcssLogicalFloatAndClear"},{packageName:"@csstools/postcss-logical-overflow",id:"logical-overflow",importName:"postcssLogicalOverflow"},{packageName:"@csstools/postcss-logical-overscroll-behavior",id:"logical-overscroll-behavior",importName:"postcssLogicalOverscrollBehavor"},{packageName:"@csstools/postcss-logical-resize",id:"logical-resize",importName:"postcssLogicalResize"},{packageName:"@csstools/postcss-logical-viewport-units",id:"logical-viewport-units",importName:"postcssLogicalViewportUnits"},{packageName:"@csstools/postcss-media-minmax",id:"media-query-ranges",importName:"postcssMediaMinmax"},{packageName:"@csstools/postcss-media-queries-aspect-ratio-number-values",id:"media-queries-aspect-ratio-number-values",importName:"postcssMediaQueriesAspectRatioNumberValues"},{packageName:"postcss-nesting",id:"nesting-rules",importName:"postcssNesting"},{packageName:"@csstools/postcss-normalize-display-values",id:"display-two-values",importName:"postcssNormalizeDisplayValues"},{packageName:"@csstools/postcss-oklab-function",id:"oklab-function",importName:"postcssOKLabFunction"},{packageName:"@csstools/postcss-relative-color-syntax",id:"relative-color-syntax",importName:"postcssRelativeColorSyntax"},{packageName:"postcss-opacity-percentage",id:"opacity-percentage",importName:"postcssOpacityPercentage"},{packageName:"postcss-overflow-shorthand",id:"overflow-property",importName:"postcssOverflowShorthand"},{packageName:"postcss-page-break",id:"break-properties",importName:"postcssPageBreak"},{packageName:"postcss-place",id:"place-properties",importName:"postcssPlace"},{packageName:"postcss-pseudo-class-any-link",id:"any-link-pseudo-class",importName:"postcssPseudoClassAnyLink"},{packageName:"postcss-replace-overflow-wrap",id:"overflow-wrap-property",importName:"postcssReplaceOverflowWrap"},{packageName:"postcss-selector-not",id:"not-pseudo-class",importName:"postcssSelectorNot"},{packageName:"@csstools/postcss-stepped-value-functions",id:"stepped-value-functions",importName:"postcssSteppedValueFunctions"},{packageName:"postcss-system-ui-font-family",importedPackage:"../patch/postcss-system-ui-font-family.mjs",id:"system-ui-font-family",importName:"postcssFontFamilySystemUI"},{packageName:"@csstools/postcss-unset-value",id:"unset-value",importName:"postcssUnsetValue"},{packageName:"@csstools/postcss-cascade-layers",id:"cascade-layers",importName:"postcssCascadeLayers"},{packageName:"@csstools/postcss-trigonometric-functions",id:"trigonometric-functions",importName:"postcssTrigonometricFunctions"},{packageName:"@csstools/postcss-nested-calc",id:"nested-calc",importName:"postcssNestedCalc"},{packageName:"@csstools/postcss-text-decoration-shorthand",id:"text-decoration-shorthand",importName:"postcssTextDecorationShorthand"},{packageName:"@csstools/postcss-progressive-custom-properties",id:"progressive-custom-properties",importName:"postcssProgressiveCustomProperties",omitTypedOptions:!0,omitDocs:!0}];function getPackageNamesToIds(){const s={};return Os.forEach((o=>{s[o.packageName]=o.id})),s}function pluginIdHelp(s,o,e){const t=Os.map((s=>s.id)),i=Os.map((s=>s.packageName)),r=getPackageNamesToIds();s.forEach((s=>{if(t.includes(s))return;const a=[...t.map((o=>[o,levenshteinDistance(s,o)])),...i.map((o=>[r[o],levenshteinDistance(s,o)]))].sort(((s,o)=>s[1]-o[1])).filter((s=>s[1]<10)),c=new Set;for(let s=0;s=3));s++);if(!c.size)return void o.warn(e,`Unknown feature: "${s}", see the list of features https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md`);let p='"';p+=Array.from(c).join('", "'),p+='"',o.warn(e,`Unknown feature: "${s}", did you mean one of: ${p}`)}))}function levenshteinDistance(s,o){if(!s.length)return o.length;if(!o.length)return s.length;const e=[];for(let t=0;t<=o.length;t++){e[t]=[t];for(let i=1;i<=s.length;i++)e[t][i]=0===t?i:Math.min(e[t-1][i]+1,e[t][i-1]+1,e[t-1][i-1]+(s[i-1]===o[t-1]?0:1))}return e[o.length][s.length]}const creator=e=>{const t=new Logger,i=Object(e),r=Object.keys(Object(i.features)),a=i.browsers?void 0:i.env,c=i.browsers,p=initializeSharedOptions(i),n=listFeatures(o,i,p,t),l=n.map((s=>s.plugin));!1!==i.autoprefixer&&l.push(s(Object.assign({env:a,overrideBrowserslist:c},i.autoprefixer))),logFeaturesList(n,i,t);const internalPlugin=()=>({postcssPlugin:"postcss-preset-env",OnceExit:function(s,{result:o}){pluginIdHelp(r,s,o),i.debug&&t.dumpLogs(o),t.resetLogger()}});return internalPlugin.postcss=!0,{postcssPlugin:"postcss-preset-env",plugins:[...l,internalPlugin()]}};creator.postcss=!0;export{creator as default}; +import s from"autoprefixer";import o from"cssdb";import e from"browserslist";import t from"@csstools/postcss-initial";import i from"postcss-pseudo-class-any-link";import r from"css-blank-pseudo";import a from"postcss-page-break";import p from"@csstools/postcss-cascade-layers";import c from"postcss-attribute-case-insensitive";import n from"postcss-clamp";import l from"@csstools/postcss-color-function";import m from"postcss-color-functional-notation";import u from"@csstools/postcss-color-mix-function";import d from"postcss-custom-media";import f from"postcss-custom-properties";import g from"postcss-custom-selectors";import b from"postcss-dir-pseudo-class";import h from"@csstools/postcss-normalize-display-values";import v from"postcss-double-position-gradients";import N from"@csstools/postcss-exponential-functions";import y from"@csstools/postcss-logical-float-and-clear";import k from"postcss-focus-visible";import w from"postcss-focus-within";import x from"@csstools/postcss-font-format-keywords";import F from"postcss-font-variant";import O from"@csstools/postcss-gamut-mapping";import $ from"postcss-gap-properties";import S from"@csstools/postcss-gradients-interpolation-method";import P from"css-has-pseudo";import C from"postcss-color-hex-alpha";import I from"@csstools/postcss-hwb-function";import B from"@csstools/postcss-ic-unit";import E from"postcss-image-set-function";import A from"@csstools/postcss-is-pseudo-class";import L from"postcss-lab-function";import U from"@csstools/postcss-light-dark-function";import _ from"@csstools/postcss-logical-overflow";import q from"@csstools/postcss-logical-overscroll-behavior";import j from"postcss-logical";import D from"@csstools/postcss-logical-resize";import M from"@csstools/postcss-logical-viewport-units";import z from"@csstools/postcss-media-queries-aspect-ratio-number-values";import R from"@csstools/postcss-media-minmax";import V from"@csstools/postcss-nested-calc";import T from"postcss-nesting";import H from"postcss-selector-not";import W from"@csstools/postcss-oklab-function";import G from"postcss-opacity-percentage";import K from"postcss-overflow-shorthand";import Z from"postcss-replace-overflow-wrap";import Q from"postcss-place";import J from"css-prefers-color-scheme";import X from"@csstools/postcss-progressive-custom-properties";import Y from"postcss-color-rebeccapurple";import ss from"@csstools/postcss-relative-color-syntax";import os from"@csstools/postcss-scope-pseudo-class";import es from"@csstools/postcss-stepped-value-functions";import ts from"@csstools/postcss-text-decoration-shorthand";import is from"@csstools/postcss-trigonometric-functions";import rs from"@csstools/postcss-unset-value";const as={"blank-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-blank-pseudo/README.md#browser","focus-visible-pseudo-class":"https://github.com/WICG/focus-visible","focus-within-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/postcss-focus-within/README.md#browser","has-pseudo-class":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-has-pseudo/README.md#browser","prefers-color-scheme-query":"https://github.com/csstools/postcss-plugins/blob/main/plugins/css-prefers-color-scheme/README.md#browser"},ps=["blank-pseudo-class","focus-visible-pseudo-class","focus-within-pseudo-class","has-pseudo-class","prefers-color-scheme-query"];function logFeaturesList(s,o,e){if(o.debug){e.log("Enabling the following feature(s):");const t=[],i=[];!1!==o.autoprefixer&&i.push(" autoprefixer"),s.forEach((s=>{s.id.startsWith("before")||s.id.startsWith("after")?i.push(` ${s.id} (injected via options)`):i.push(` ${s.id}`),void 0!==as[s.id]&&t.push(s.id)})),i.sort(((s,o)=>s.localeCompare(o))),t.sort(((s,o)=>s.localeCompare(o))),i.forEach((s=>e.log(s))),t.length&&(e.log("These feature(s) need a browser library to work:"),t.forEach((s=>e.log(` ${s}: ${as[s]}`))))}}function initializeSharedOptions(s){if("preserve"in s){const o={};return o.preserve=s.preserve,o}return!1}function clamp(s,o,e){return Math.max(s,Math.min(o,e))}const cs=2,ns=5;function stageFromOptions(s,o){let e=cs;if(void 0===s.stage)return o.log(`Using features from Stage ${e} (default)`),e;if(!1===s.stage)e=ns;else{let o=parseInt(s.stage,10);Number.isNaN(o)&&(o=0),e=clamp(0,o,ns)}return e===ns?o.log('Stage has been disabled, features will be handled via the "features" option.'):o.log(`Using features from Stage ${e}`),e}const ls=Symbol("insertBefore"),ms=Symbol("insertAfter"),us=Symbol("insertOrder"),ds=Symbol("plugin");function getTransformedInsertions(s,o,e){if("insertBefore"!==e&&"insertAfter"!==e)return[];const t="insertBefore"===e?ls:ms,i=[];for(const e in o){if(!Object.hasOwnProperty.call(o,e))continue;if(!s.find((s=>s.id===e)))continue;let r=o[e];Array.isArray(r)||(r=[r]);for(let s=0;sfeatureIsInsertedOrHasAPlugin(s))).sort(((s,o)=>featureIsLess(s,o)))}const ws=["and_chr","and_ff","android","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"];function getUnsupportedBrowsersByFeature(s){if(!s)return[];if(!("browser_support"in s))return["> 0%"];const o=[];return ws.forEach((e=>{if("op_mini"===e&&void 0===s.browser_support[e])return void o.push("op_mini all");const t=s.browser_support[e];"string"==typeof t&&xs.test(t)?o.push(`${e} < ${s.browser_support[e]}`):o.push(`${e} >= 1`)})),o}const xs=/^[0-9|.]+$/;function getOptionsForBrowsersByFeature(s,o,e,t,i){switch(o.id){case"is-pseudo-class":return{onComplexSelector:"warning"};case"nesting-rules":if(needsOptionFor(e.find((s=>"is-pseudo-class"===s.id)),s))return i.log('Disabling :is on "nesting-rules" due to lack of browser support.'),{noIsPseudoSelector:!0};return{};case"any-link-pseudo-class":if(s.find((s=>s.startsWith("ie ")||s.startsWith("edge "))))return i.log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'),{subFeatures:{areaHrefNeedsFixing:!0}};return{};case"logical-properties-and-values":case"float-clear-logical-values":case"logical-resize":case"logical-viewport-units":case"logical-overflow":case"logical-overscroll-behavior":return"logical"in t?t.logical:{};default:return{}}}function needsOptionFor(s,o){const t=getUnsupportedBrowsersByFeature(s),i=e(t,{ignoreUnknownVersions:!0});return!!o.some((s=>i.some((o=>o===s))))}function formatPolyfillableFeature(s){const o=getUnsupportedBrowsersByFeature(s);if(s[ls]||s[ms]){let e=s.id;return e=s.insertBefore?`before-${e}`:`after-${e}`,{browsers:o,vendors_implementations:s.vendors_implementations,plugin:s[ds],id:e,stage:ns+1}}return{browsers:o,vendors_implementations:s.vendors_implementations,plugin:ks.get(s.id),id:s.id,stage:s.stage}}function formatStagedFeature(s,o,e,t,i,r,a){let p,c;return p=getOptionsForBrowsersByFeature(o,t,s,r,a),p=i?Object.assign({},p,i,featureOptions(e,t.id)):Object.assign({},p,featureOptions(e,t.id)),"progressive-custom-properties"!==t.id&&(p.enableProgressiveCustomProperties=!1),"overflow-wrap-property"===t.id&&"preserve"in p&&(p.method=p.preserve?"copy":"replace"),c=t.plugin.postcss&&"function"==typeof t.plugin?t.plugin(p):t.plugin&&t.plugin.default&&"function"==typeof t.plugin.default&&t.plugin.default.postcss?t.plugin.default(p):t.plugin,{browsers:t.browsers,vendors_implementations:t.vendors_implementations,plugin:c,pluginOptions:p,id:t.id}}function featureOptions(s,o){if(!(o in s))return;const e=s[o];return Array.isArray(e)?e[1]:e}function intOrZero(s){const o=parseInt(s,10);return Number.isNaN(o)?0:o}const Fs=new Set(["progressive-custom-properties"]);function listFeatures(s,o,t,i){const r=Object(o.features),a="enableClientSidePolyfills"in o&&o.enableClientSidePolyfills,p=Object(o.insertBefore),c=Object(o.insertAfter),n=o.browsers?void 0:o.env,l=o.browsers,m=clamp(0,intOrZero(o.minimumVendorImplementations),3);m>0&&i.log(`Using features with ${m} or more vendor implementations`);const u=stageFromOptions(o,i),d=prepareFeaturesList([...s,{id:"progressive-custom-properties"}],p,c).map((s=>formatPolyfillableFeature(s))).filter((s=>!!Fs.has(s.id)||(0===m||(!(!s[ls]&&!s[ms])||(m<=s.vendors_implementations||(!0===featureEnabledByOptions(r,s.id)?(i.log(` ${s.id} does not meet the required vendor implementations but has been enabled by options`),!0):(i.log(` ${s.id} with ${s.vendors_implementations} vendor implementations has been disabled`),!1))))))),f=e(l,{env:n,ignoreUnknownVersions:!0}).filter((s=>ws.includes(s.split(" ")[0])));return d.filter((s=>{if(Fs.has(s.id))return!0;const o=s.stage>=u,e=a||!ps.includes(s.id),t=featureEnabledByOptions(r,s.id),p=!1===t,c=!0===t||o&&e;return p?i.log(` ${s.id} has been disabled by options`):o?e||i.log(` ${s.id} has been disabled by "enableClientSidePolyfills: false".`):c?i.log(` ${s.id} does not meet the required stage but has been enabled by options`):i.log(` ${s.id} with stage ${s.stage} has been disabled`),!p&&c})).map((e=>formatStagedFeature(s,f,r,e,t,o,i))).filter((s=>{if(Fs.has(s.id))return!0;const o=featureEnabledByOptions(r,s.id);if(!0===o||!1===o)return o;const t=e(s.browsers,{ignoreUnknownVersions:!0}),a=f.some((s=>t.some((o=>o===s))));return a||i.log(`${s.id} disabled due to browser support`),a}))}function featureEnabledByOptions(s,o){if(!(o in s))return"auto";const e=s[o];return Array.isArray(e)?!0===e[0]||!1!==e[0]&&"auto":Boolean(e)}class Logger{constructor(){this.logs=[]}log(s){this.logs.push(s)}resetLogger(){this.logs.length=0}dumpLogs(s){s&&s.warn(this.logs.join("\n")),this.resetLogger()}}var Os=[{packageName:"css-blank-pseudo",id:"blank-pseudo-class",importName:"postcssBlankPseudo"},{packageName:"css-has-pseudo",id:"has-pseudo-class",importName:"postcssHasPseudo"},{packageName:"css-prefers-color-scheme",id:"prefers-color-scheme-query",importName:"postcssPrefersColorScheme"},{packageName:"postcss-attribute-case-insensitive",id:"case-insensitive-attributes",importName:"postcssAttributeCaseInsensitive"},{packageName:"postcss-clamp",id:"clamp",importName:"postcssClamp"},{packageName:"@csstools/postcss-color-mix-function",id:"color-mix",importName:"postcssColorMixFunction"},{packageName:"@csstools/postcss-color-function",id:"color-function",importName:"postcssColorFunction"},{packageName:"postcss-color-functional-notation",id:"color-functional-notation",importName:"postcssColorFunctionalNotation"},{packageName:"postcss-color-hex-alpha",id:"hexadecimal-alpha-notation",importName:"postcssColorHexAlpha"},{packageName:"postcss-color-rebeccapurple",id:"rebeccapurple-color",importName:"postcssColorRebeccapurple"},{packageName:"postcss-custom-media",id:"custom-media-queries",importName:"postcssCustomMedia"},{packageName:"postcss-custom-properties",id:"custom-properties",importName:"postcssCustomProperties"},{packageName:"postcss-custom-selectors",id:"custom-selectors",importName:"postcssCustomSelectors"},{packageName:"postcss-dir-pseudo-class",id:"dir-pseudo-class",importName:"postcssDirPseudoClass"},{packageName:"postcss-double-position-gradients",id:"double-position-gradients",importName:"postcssDoublePositionGradients"},{packageName:"@csstools/postcss-exponential-functions",id:"exponential-functions",importName:"postcssExponentialFunctions"},{packageName:"postcss-focus-visible",id:"focus-visible-pseudo-class",importName:"postcssFocusVisible"},{packageName:"postcss-focus-within",id:"focus-within-pseudo-class",importName:"postcssFocusWithin"},{packageName:"@csstools/postcss-font-format-keywords",id:"font-format-keywords",importName:"postcssFontFormatKeywords"},{packageName:"postcss-font-variant",id:"font-variant-property",importName:"postcssFontVariant"},{packageName:"@csstools/postcss-gamut-mapping",id:"gamut-mapping",importName:"postcssGamutMapping"},{packageName:"postcss-gap-properties",id:"gap-properties",importName:"postcssGapProperties"},{packageName:"@csstools/postcss-gradients-interpolation-method",id:"gradients-interpolation-method",importName:"postcssGradientsInterpolationMethod"},{packageName:"@csstools/postcss-hwb-function",id:"hwb-function",importName:"postcssHWBFunction"},{packageName:"@csstools/postcss-ic-unit",id:"ic-unit",importName:"postcssICUnit"},{packageName:"postcss-image-set-function",id:"image-set-function",importName:"postcssImageSetFunction"},{packageName:"@csstools/postcss-initial",id:"all-property",importName:"postcssInitial"},{packageName:"@csstools/postcss-is-pseudo-class",id:"is-pseudo-class",importName:"postcssIsPseudoClass"},{packageName:"@csstools/postcss-scope-pseudo-class",id:"scope-pseudo-class",importName:"postcssScopePseudoClass"},{packageName:"postcss-lab-function",id:"lab-function",importName:"postcssLabFunction"},{packageName:"@csstools/postcss-light-dark-function",id:"light-dark-function",importName:"postcssLightDarkFunction"},{packageName:"postcss-logical",id:"logical-properties-and-values",importName:"postcssLogical"},{packageName:"@csstools/postcss-logical-float-and-clear",id:"float-clear-logical-values",importName:"postcssLogicalFloatAndClear"},{packageName:"@csstools/postcss-logical-overflow",id:"logical-overflow",importName:"postcssLogicalOverflow"},{packageName:"@csstools/postcss-logical-overscroll-behavior",id:"logical-overscroll-behavior",importName:"postcssLogicalOverscrollBehavor"},{packageName:"@csstools/postcss-logical-resize",id:"logical-resize",importName:"postcssLogicalResize"},{packageName:"@csstools/postcss-logical-viewport-units",id:"logical-viewport-units",importName:"postcssLogicalViewportUnits"},{packageName:"@csstools/postcss-media-minmax",id:"media-query-ranges",importName:"postcssMediaMinmax"},{packageName:"@csstools/postcss-media-queries-aspect-ratio-number-values",id:"media-queries-aspect-ratio-number-values",importName:"postcssMediaQueriesAspectRatioNumberValues"},{packageName:"postcss-nesting",id:"nesting-rules",importName:"postcssNesting"},{packageName:"@csstools/postcss-normalize-display-values",id:"display-two-values",importName:"postcssNormalizeDisplayValues"},{packageName:"@csstools/postcss-oklab-function",id:"oklab-function",importName:"postcssOKLabFunction"},{packageName:"@csstools/postcss-relative-color-syntax",id:"relative-color-syntax",importName:"postcssRelativeColorSyntax"},{packageName:"postcss-opacity-percentage",id:"opacity-percentage",importName:"postcssOpacityPercentage"},{packageName:"postcss-overflow-shorthand",id:"overflow-property",importName:"postcssOverflowShorthand"},{packageName:"postcss-page-break",id:"break-properties",importName:"postcssPageBreak"},{packageName:"postcss-place",id:"place-properties",importName:"postcssPlace"},{packageName:"postcss-pseudo-class-any-link",id:"any-link-pseudo-class",importName:"postcssPseudoClassAnyLink"},{packageName:"postcss-replace-overflow-wrap",id:"overflow-wrap-property",importName:"postcssReplaceOverflowWrap"},{packageName:"postcss-selector-not",id:"not-pseudo-class",importName:"postcssSelectorNot"},{packageName:"@csstools/postcss-stepped-value-functions",id:"stepped-value-functions",importName:"postcssSteppedValueFunctions"},{packageName:"postcss-system-ui-font-family",importedPackage:"../patch/postcss-system-ui-font-family.mjs",id:"system-ui-font-family",importName:"postcssFontFamilySystemUI"},{packageName:"@csstools/postcss-unset-value",id:"unset-value",importName:"postcssUnsetValue"},{packageName:"@csstools/postcss-cascade-layers",id:"cascade-layers",importName:"postcssCascadeLayers"},{packageName:"@csstools/postcss-trigonometric-functions",id:"trigonometric-functions",importName:"postcssTrigonometricFunctions"},{packageName:"@csstools/postcss-nested-calc",id:"nested-calc",importName:"postcssNestedCalc"},{packageName:"@csstools/postcss-text-decoration-shorthand",id:"text-decoration-shorthand",importName:"postcssTextDecorationShorthand"},{packageName:"@csstools/postcss-progressive-custom-properties",id:"progressive-custom-properties",importName:"postcssProgressiveCustomProperties",omitTypedOptions:!0,omitDocs:!0}];function getPackageNamesToIds(){const s={};return Os.forEach((o=>{s[o.packageName]=o.id})),s}function pluginIdHelp(s,o,e){const t=Os.map((s=>s.id)),i=Os.map((s=>s.packageName)),r=getPackageNamesToIds();s.forEach((s=>{if(t.includes(s))return;const a=[...t.map((o=>[o,levenshteinDistance(s,o)])),...i.map((o=>[r[o],levenshteinDistance(s,o)]))].sort(((s,o)=>s[1]-o[1])).filter((s=>s[1]<10)),p=new Set;for(let s=0;s=3));s++);if(!p.size)return void o.warn(e,`Unknown feature: "${s}", see the list of features https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/FEATURES.md`);let c='"';c+=Array.from(p).join('", "'),c+='"',o.warn(e,`Unknown feature: "${s}", did you mean one of: ${c}`)}))}function levenshteinDistance(s,o){if(!s.length)return o.length;if(!o.length)return s.length;const e=[];for(let t=0;t<=o.length;t++){e[t]=[t];for(let i=1;i<=s.length;i++)e[t][i]=0===t?i:Math.min(e[t-1][i]+1,e[t][i-1]+1,e[t-1][i-1]+(s[i-1]===o[t-1]?0:1))}return e[o.length][s.length]}const creator=e=>{const t=new Logger,i=Object(e),r=Object.keys(Object(i.features)),a=i.browsers?void 0:i.env,p=i.browsers,c=initializeSharedOptions(i),n=listFeatures(o,i,c,t),l=n.map((s=>s.plugin));!1!==i.autoprefixer&&l.push(s(Object.assign({env:a,overrideBrowserslist:p},i.autoprefixer))),logFeaturesList(n,i,t);const internalPlugin=()=>({postcssPlugin:"postcss-preset-env",OnceExit(s,{result:o}){pluginIdHelp(r,s,o),i.debug&&t.dumpLogs(o),t.resetLogger()}});return internalPlugin.postcss=!0,{postcssPlugin:"postcss-preset-env",plugins:[...l,internalPlugin()]}};creator.postcss=!0;export{creator as default}; diff --git a/plugin-packs/postcss-preset-env/src/index.ts b/plugin-packs/postcss-preset-env/src/index.ts index e0d74dbde..4e03a270f 100644 --- a/plugin-packs/postcss-preset-env/src/index.ts +++ b/plugin-packs/postcss-preset-env/src/index.ts @@ -37,10 +37,10 @@ const creator: PluginCreator = (opts?: pluginOptions) => { logFeaturesList(features, options, logger); - const internalPlugin = () => { + const internalPlugin: PluginCreator = () => { return { postcssPlugin: 'postcss-preset-env', - OnceExit: function (root, { result }) { + OnceExit(root, { result }): void { pluginIdHelp(featureNamesInOptions, root, result); if (options.debug) { diff --git a/plugins/css-blank-pseudo/dist/index.cjs b/plugins/css-blank-pseudo/dist/index.cjs index e4fcf78d5..171053ffa 100644 --- a/plugins/css-blank-pseudo/dist/index.cjs +++ b/plugins/css-blank-pseudo/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let n=!0;for(let t=0,r=s.length;t-1&&(n=!1);return n}const n="js-blank-pseudo",t=":blank",creator=s=>{const r=Object.assign({preserve:!0,replaceWith:"[blank]",disablePolyfillReadyClass:!1},s),o=e().astSync(r.replaceWith);return isValidReplacement(r.replaceWith)?{postcssPlugin:"css-blank-pseudo",prepare(){const s=new WeakSet;return{Rule(l,{result:a}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(t))return;const i=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(t))return[s];let i;try{i=e().astSync(s)}catch(e){return l.warn(a,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),[s]}if(void 0===i)return[s];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===t&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(o.clone({}))))})),!c)return[s];const d=i.clone();if(!r.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let s=0;s{e.warn(s,`${r.replaceWith} is not a valid replacement since it can't be applied to single elements.`)}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let n=!0;for(let t=0,o=s.length;t-1&&(n=!1);return n}const n="js-blank-pseudo",t=":blank",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[blank]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"css-blank-pseudo",prepare(){const s=new WeakSet;return{postcssPlugin:"css-blank-pseudo",Rule(l,{result:a}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(t))return;const i=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(t))return[s];let i;try{i=e().astSync(s)}catch(e){return l.warn(a,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),[s]}if(void 0===i)return[s];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===t&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=i.clone();if(!o.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let s=0;s","~",":","+","@","#","(",")"];function isValidReplacement(e){let n=!0;for(let t=0,o=s.length;t-1&&(n=!1);return n}const n="js-blank-pseudo",t=":blank",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[blank]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"css-blank-pseudo",prepare(){const s=new WeakSet;return{Rule(l,{result:a}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(t))return;const i=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(t))return[s];let i;try{i=e().astSync(s)}catch(e){return l.warn(a,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),[s]}if(void 0===i)return[s];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===t&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=i.clone();if(!o.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let s=0;s{e.warn(s,`${o.replaceWith} is not a valid replacement since it can't be applied to single elements.`)}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let n=!0;for(let t=0,o=s.length;t-1&&(n=!1);return n}const n="js-blank-pseudo",t=":blank",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[blank]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"css-blank-pseudo",prepare(){const s=new WeakSet;return{postcssPlugin:"css-blank-pseudo",Rule(l,{result:a}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(t))return;const i=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(t))return[s];let i;try{i=e().astSync(s)}catch(e){return l.warn(a,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),[s]}if(void 0===i)return[s];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===t&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=i.clone();if(!o.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let s=0;s = (opts?: pluginOptions) => { if (!isValidReplacement(options.replaceWith)) { return { postcssPlugin: 'css-blank-pseudo', - Once: (root, { result }) => { + Once(root, { result }): void { root.warn( result, `${options.replaceWith} is not a valid replacement since it can't be applied to single elements.`, @@ -42,11 +42,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'css-blank-pseudo', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'css-blank-pseudo', + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/css-has-pseudo/dist/index.cjs b/plugins/css-has-pseudo/dist/index.cjs index 235c888d6..33b81a423 100644 --- a/plugins/css-has-pseudo/dist/index.cjs +++ b/plugins/css-has-pseudo/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser"),t=require("postcss-value-parser"),s=require("@csstools/selector-specificity");function encodeCSS(e){if(""===e)return"";let t,s="";for(let r=0;r{if("function"===e.type&&"selector"===e.value.toLowerCase())return r.add(t.stringify(e.nodes)),!1})),r.forEach((e=>{selectorContainsHasPseudo(e)&&(s=!0)}))}catch(e){}return s}function selectorContainsHasPseudo(t){if(!t.toLowerCase().includes(":has("))return!1;let s=!1;try{e().astSync(t).walk((e=>{if("pseudo"===e.type&&":has"===e.value.toLowerCase()&&e.nodes&&e.nodes.length>0)return s=!0,!1}))}catch(e){}return s}const creator=t=>{const r={preserve:!0,specificityMatchingName:"does-not-exist",...t||{}},o=":not(#"+r.specificityMatchingName+")",n=":not(."+r.specificityMatchingName+")",a=":not("+r.specificityMatchingName+")";return{postcssPlugin:"css-has-pseudo",prepare(){const t=new WeakSet;return{RuleExit:(c,{result:i})=>{if(t.has(c))return;if(!c.selector.toLowerCase().includes(":has(")||isWithinSupportCheck(c))return;const l=c.selectors.map((t=>{if(!t.toLowerCase().includes(":has("))return t;let l;try{l=e().astSync(t)}catch(e){return c.warn(i,`Failed to parse selector : "${t}" with message: "${e instanceof Error?e.message:e}"`),t}if(void 0===l)return t;l.walkPseudos((t=>{let s=t.parent,o=!1;for(;s;)e.isPseudoClass(s)&&":has"===s.value.toLowerCase()&&(o=!0),s=s.parent;o&&(":visited"===t.value.toLowerCase()&&t.replaceWith(e.className({value:r.specificityMatchingName})),":any-link"===t.value.toLowerCase()&&(t.value=":link"))})),l.walkPseudos((t=>{if(":has"!==t.value.toLowerCase()||!t.nodes)return;const r=t.parent;if(!r)return;const c=e.selector({value:"",nodes:[]});{let t=r.nodes.length;e:for(let s=0;s=0;e--)if("combinator"!==r.nodes[s].type&&"comment"!==r.nodes[s].type){t=e+1;break e}}r.nodes.slice(0,t).forEach((e=>{e.remove(),"selector"===e.type?e.nodes.forEach((e=>{delete e.parent,c.append(e)})):(delete e.parent,c.append(e))}))}const i="["+encodeCSS(c.toString())+"]",l=s.selectorSpecificity(c);let u=i;for(let e=0;e=0;e--)r.prepend(d[e])}));const u=l.toString();return u!==t?".js-has-pseudo "+u:t}));l.join(",")!==c.selectors.join(",")&&(t.add(c),c.cloneBefore({selectors:l}),r.preserve||c.remove())}}}}};function isWithinSupportCheck(e){let t=e.parent;for(;t;){if("atrule"===t.type&&isGuardedByAtSupportsFromAtRuleParams(t.params))return!0;t=t.parent}return!1}creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser"),t=require("postcss-value-parser"),s=require("@csstools/selector-specificity");function encodeCSS(e){if(""===e)return"";let t,s="";for(let r=0;r{if("function"===e.type&&"selector"===e.value.toLowerCase())return r.add(t.stringify(e.nodes)),!1})),r.forEach((e=>{selectorContainsHasPseudo(e)&&(s=!0)}))}catch(e){}return s}function selectorContainsHasPseudo(t){if(!t.toLowerCase().includes(":has("))return!1;let s=!1;try{e().astSync(t).walk((e=>{if("pseudo"===e.type&&":has"===e.value.toLowerCase()&&e.nodes&&e.nodes.length>0)return s=!0,!1}))}catch(e){}return s}const creator=t=>{const r={preserve:!0,specificityMatchingName:"does-not-exist",...t||{}},o=":not(#"+r.specificityMatchingName+")",n=":not(."+r.specificityMatchingName+")",a=":not("+r.specificityMatchingName+")";return{postcssPlugin:"css-has-pseudo",prepare(){const t=new WeakSet;return{postcssPlugin:"css-has-pseudo",RuleExit(c,{result:i}){if(t.has(c))return;if(!c.selector.toLowerCase().includes(":has(")||isWithinSupportCheck(c))return;const l=c.selectors.map((t=>{if(!t.toLowerCase().includes(":has("))return t;let l;try{l=e().astSync(t)}catch(e){return c.warn(i,`Failed to parse selector : "${t}" with message: "${e instanceof Error?e.message:e}"`),t}if(void 0===l)return t;l.walkPseudos((t=>{let s=t.parent,o=!1;for(;s;)e.isPseudoClass(s)&&":has"===s.value.toLowerCase()&&(o=!0),s=s.parent;o&&(":visited"===t.value.toLowerCase()&&t.replaceWith(e.className({value:r.specificityMatchingName})),":any-link"===t.value.toLowerCase()&&(t.value=":link"))})),l.walkPseudos((t=>{if(":has"!==t.value.toLowerCase()||!t.nodes)return;const r=t.parent;if(!r)return;const c=e.selector({value:"",nodes:[]});{let t=r.nodes.length;e:for(let s=0;s=0;e--)if("combinator"!==r.nodes[s].type&&"comment"!==r.nodes[s].type){t=e+1;break e}}r.nodes.slice(0,t).forEach((e=>{e.remove(),"selector"===e.type?e.nodes.forEach((e=>{delete e.parent,c.append(e)})):(delete e.parent,c.append(e))}))}const i="["+encodeCSS(c.toString())+"]",l=s.selectorSpecificity(c);let u=i;for(let e=0;e=0;e--)r.prepend(d[e])}));const u=l.toString();return u!==t?".js-has-pseudo "+u:t}));l.join(",")!==c.selectors.join(",")&&(t.add(c),c.cloneBefore({selectors:l}),r.preserve||c.remove())}}}}};function isWithinSupportCheck(e){let t=e.parent;for(;t;){if("atrule"===t.type&&isGuardedByAtSupportsFromAtRuleParams(t.params))return!0;t=t.parent}return!1}creator.postcss=!0,module.exports=creator; diff --git a/plugins/css-has-pseudo/dist/index.mjs b/plugins/css-has-pseudo/dist/index.mjs index 7d44b5239..66b4a8538 100644 --- a/plugins/css-has-pseudo/dist/index.mjs +++ b/plugins/css-has-pseudo/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";import t from"postcss-value-parser";import{selectorSpecificity as s}from"@csstools/selector-specificity";function encodeCSS(e){if(""===e)return"";let t,s="";for(let o=0;o{if("function"===e.type&&"selector"===e.value.toLowerCase())return o.add(t.stringify(e.nodes)),!1})),o.forEach((e=>{selectorContainsHasPseudo(e)&&(s=!0)}))}catch(e){}return s}function selectorContainsHasPseudo(t){if(!t.toLowerCase().includes(":has("))return!1;let s=!1;try{e().astSync(t).walk((e=>{if("pseudo"===e.type&&":has"===e.value.toLowerCase()&&e.nodes&&e.nodes.length>0)return s=!0,!1}))}catch(e){}return s}const creator=t=>{const o={preserve:!0,specificityMatchingName:"does-not-exist",...t||{}},r=":not(#"+o.specificityMatchingName+")",n=":not(."+o.specificityMatchingName+")",a=":not("+o.specificityMatchingName+")";return{postcssPlugin:"css-has-pseudo",prepare(){const t=new WeakSet;return{RuleExit:(c,{result:i})=>{if(t.has(c))return;if(!c.selector.toLowerCase().includes(":has(")||isWithinSupportCheck(c))return;const l=c.selectors.map((t=>{if(!t.toLowerCase().includes(":has("))return t;let l;try{l=e().astSync(t)}catch(e){return c.warn(i,`Failed to parse selector : "${t}" with message: "${e instanceof Error?e.message:e}"`),t}if(void 0===l)return t;l.walkPseudos((t=>{let s=t.parent,r=!1;for(;s;)e.isPseudoClass(s)&&":has"===s.value.toLowerCase()&&(r=!0),s=s.parent;r&&(":visited"===t.value.toLowerCase()&&t.replaceWith(e.className({value:o.specificityMatchingName})),":any-link"===t.value.toLowerCase()&&(t.value=":link"))})),l.walkPseudos((t=>{if(":has"!==t.value.toLowerCase()||!t.nodes)return;const o=t.parent;if(!o)return;const c=e.selector({value:"",nodes:[]});{let t=o.nodes.length;e:for(let s=0;s=0;e--)if("combinator"!==o.nodes[s].type&&"comment"!==o.nodes[s].type){t=e+1;break e}}o.nodes.slice(0,t).forEach((e=>{e.remove(),"selector"===e.type?e.nodes.forEach((e=>{delete e.parent,c.append(e)})):(delete e.parent,c.append(e))}))}const i="["+encodeCSS(c.toString())+"]",l=s(c);let u=i;for(let e=0;e=0;e--)o.prepend(d[e])}));const u=l.toString();return u!==t?".js-has-pseudo "+u:t}));l.join(",")!==c.selectors.join(",")&&(t.add(c),c.cloneBefore({selectors:l}),o.preserve||c.remove())}}}}};function isWithinSupportCheck(e){let t=e.parent;for(;t;){if("atrule"===t.type&&isGuardedByAtSupportsFromAtRuleParams(t.params))return!0;t=t.parent}return!1}creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";import t from"postcss-value-parser";import{selectorSpecificity as s}from"@csstools/selector-specificity";function encodeCSS(e){if(""===e)return"";let t,s="";for(let o=0;o{if("function"===e.type&&"selector"===e.value.toLowerCase())return o.add(t.stringify(e.nodes)),!1})),o.forEach((e=>{selectorContainsHasPseudo(e)&&(s=!0)}))}catch(e){}return s}function selectorContainsHasPseudo(t){if(!t.toLowerCase().includes(":has("))return!1;let s=!1;try{e().astSync(t).walk((e=>{if("pseudo"===e.type&&":has"===e.value.toLowerCase()&&e.nodes&&e.nodes.length>0)return s=!0,!1}))}catch(e){}return s}const creator=t=>{const o={preserve:!0,specificityMatchingName:"does-not-exist",...t||{}},r=":not(#"+o.specificityMatchingName+")",n=":not(."+o.specificityMatchingName+")",a=":not("+o.specificityMatchingName+")";return{postcssPlugin:"css-has-pseudo",prepare(){const t=new WeakSet;return{postcssPlugin:"css-has-pseudo",RuleExit(c,{result:i}){if(t.has(c))return;if(!c.selector.toLowerCase().includes(":has(")||isWithinSupportCheck(c))return;const l=c.selectors.map((t=>{if(!t.toLowerCase().includes(":has("))return t;let l;try{l=e().astSync(t)}catch(e){return c.warn(i,`Failed to parse selector : "${t}" with message: "${e instanceof Error?e.message:e}"`),t}if(void 0===l)return t;l.walkPseudos((t=>{let s=t.parent,r=!1;for(;s;)e.isPseudoClass(s)&&":has"===s.value.toLowerCase()&&(r=!0),s=s.parent;r&&(":visited"===t.value.toLowerCase()&&t.replaceWith(e.className({value:o.specificityMatchingName})),":any-link"===t.value.toLowerCase()&&(t.value=":link"))})),l.walkPseudos((t=>{if(":has"!==t.value.toLowerCase()||!t.nodes)return;const o=t.parent;if(!o)return;const c=e.selector({value:"",nodes:[]});{let t=o.nodes.length;e:for(let s=0;s=0;e--)if("combinator"!==o.nodes[s].type&&"comment"!==o.nodes[s].type){t=e+1;break e}}o.nodes.slice(0,t).forEach((e=>{e.remove(),"selector"===e.type?e.nodes.forEach((e=>{delete e.parent,c.append(e)})):(delete e.parent,c.append(e))}))}const i="["+encodeCSS(c.toString())+"]",l=s(c);let u=i;for(let e=0;e=0;e--)o.prepend(d[e])}));const u=l.toString();return u!==t?".js-has-pseudo "+u:t}));l.join(",")!==c.selectors.join(",")&&(t.add(c),c.cloneBefore({selectors:l}),o.preserve||c.remove())}}}}};function isWithinSupportCheck(e){let t=e.parent;for(;t;){if("atrule"===t.type&&isGuardedByAtSupportsFromAtRuleParams(t.params))return!0;t=t.parent}return!1}creator.postcss=!0;export{creator as default}; diff --git a/plugins/css-has-pseudo/src/index.ts b/plugins/css-has-pseudo/src/index.ts index 0f866cfd7..6ca568cb5 100644 --- a/plugins/css-has-pseudo/src/index.ts +++ b/plugins/css-has-pseudo/src/index.ts @@ -1,6 +1,6 @@ import encodeCSS from './encode/encode.mjs'; import parser from 'postcss-selector-parser'; -import type { AtRule, ChildNode, Container, Document, PluginCreator, Rule } from 'postcss'; +import type { AtRule, ChildNode, Container, Document, Plugin, PluginCreator, Rule } from 'postcss'; import { isGuardedByAtSupportsFromAtRuleParams } from './is-guarded-by-at-supports.js'; import { selectorSpecificity } from '@csstools/selector-specificity'; @@ -25,11 +25,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'css-has-pseudo', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - RuleExit: (rule, { result }) => { + postcssPlugin: 'css-has-pseudo', + RuleExit(rule, { result }): void { if (transformedNodes.has(rule)) { return; } @@ -197,7 +198,7 @@ creator.postcss = true; export default creator; -function isWithinSupportCheck(rule: Rule) { +function isWithinSupportCheck(rule: Rule): boolean { let ruleParent: Container | Document | undefined = rule.parent; while (ruleParent) { diff --git a/plugins/css-prefers-color-scheme/dist/index.cjs b/plugins/css-prefers-color-scheme/dist/index.cjs index ac52d7d9c..c04e4456e 100644 --- a/plugins/css-prefers-color-scheme/dist/index.cjs +++ b/plugins/css-prefers-color-scheme/dist/index.cjs @@ -1 +1 @@ -"use strict";const e=/\(\s*prefers-color-scheme\s*:\s*(dark|light)\s*\)/gi,r="(color: 48842621)",s="(color: 70318723)",creator=o=>{const t=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-prefers-color-scheme",prepare(){const o=new WeakSet;return{AtRule:a=>{if(o.has(a))return;if("media"!==a.name.toLowerCase())return;const{params:c}=a,n=c.replace(e,((e,o)=>"dark"===o.toLowerCase()?r:"light"===o.toLowerCase()?s:e));c!==n&&(o.add(a),a.cloneBefore({params:n}),t.preserve||a.remove())}}}}};creator.postcss=!0,module.exports=creator; +"use strict";const e=/\(\s*prefers-color-scheme\s*:\s*(dark|light)\s*\)/gi,s="(color: 48842621)",r="(color: 70318723)",creator=o=>{const t=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-prefers-color-scheme",prepare(){const o=new WeakSet;return{postcssPlugin:"postcss-prefers-color-scheme",AtRule(c){if(o.has(c))return;if("media"!==c.name.toLowerCase())return;const{params:a}=c,p=a.replace(e,((e,o)=>"dark"===o.toLowerCase()?s:"light"===o.toLowerCase()?r:e));a!==p&&(o.add(c),c.cloneBefore({params:p}),t.preserve||c.remove())}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/css-prefers-color-scheme/dist/index.mjs b/plugins/css-prefers-color-scheme/dist/index.mjs index 520672ee8..9219f4a96 100644 --- a/plugins/css-prefers-color-scheme/dist/index.mjs +++ b/plugins/css-prefers-color-scheme/dist/index.mjs @@ -1 +1 @@ -const e=/\(\s*prefers-color-scheme\s*:\s*(dark|light)\s*\)/gi,r="(color: 48842621)",s="(color: 70318723)",creator=o=>{const t=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-prefers-color-scheme",prepare(){const o=new WeakSet;return{AtRule:a=>{if(o.has(a))return;if("media"!==a.name.toLowerCase())return;const{params:c}=a,n=c.replace(e,((e,o)=>"dark"===o.toLowerCase()?r:"light"===o.toLowerCase()?s:e));c!==n&&(o.add(a),a.cloneBefore({params:n}),t.preserve||a.remove())}}}}};creator.postcss=!0;export{creator as default}; +const e=/\(\s*prefers-color-scheme\s*:\s*(dark|light)\s*\)/gi,s="(color: 48842621)",r="(color: 70318723)",creator=o=>{const t=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-prefers-color-scheme",prepare(){const o=new WeakSet;return{postcssPlugin:"postcss-prefers-color-scheme",AtRule(c){if(o.has(c))return;if("media"!==c.name.toLowerCase())return;const{params:a}=c,p=a.replace(e,((e,o)=>"dark"===o.toLowerCase()?s:"light"===o.toLowerCase()?r:e));a!==p&&(o.add(c),c.cloneBefore({params:p}),t.preserve||c.remove())}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/css-prefers-color-scheme/src/index.ts b/plugins/css-prefers-color-scheme/src/index.ts index 91d31fd58..a5924c052 100644 --- a/plugins/css-prefers-color-scheme/src/index.ts +++ b/plugins/css-prefers-color-scheme/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; const prefersInterfaceRegExp = /\(\s*prefers-color-scheme\s*:\s*(dark|light)\s*\)/gi; @@ -22,11 +22,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-prefers-color-scheme', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - AtRule: (atRule) => { + postcssPlugin: 'postcss-prefers-color-scheme', + AtRule(atRule): void { if (transformedNodes.has(atRule)) { return; } diff --git a/plugins/postcss-attribute-case-insensitive/dist/index.cjs b/plugins/postcss-attribute-case-insensitive/dist/index.cjs index d48fa9e7d..38c1791e4 100644 --- a/plugins/postcss-attribute-case-insensitive/dist/index.cjs +++ b/plugins/postcss-attribute-case-insensitive/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");function nodeIsInsensitiveAttribute(e){return"attribute"===e.type&&(e.insensitive??!1)}function selectorHasInsensitiveAttribute(e){return e.some(nodeIsInsensitiveAttribute)}function transformString(e,t,r){const s=r.charAt(t);if(""===s)return e;let n=e.map((e=>e+s));const o=s.toLocaleUpperCase();return o!==s&&(n=n.concat(e.map((e=>e+o)))),transformString(n,t+1,r)}function createNewSelectors(t){let r=[e.selector({value:"",nodes:[]})];return t.each((e=>{if(!nodeIsInsensitiveAttribute(e))return void r.forEach((t=>{t.append(e.clone())}));const t=transformString([""],0,(s=e).value??"").map((e=>{const t=s.clone({spaces:{after:s.spaces.after,before:s.spaces.before},insensitive:!1});return t.setValue(e),t}));var s;const n=[];t.forEach((e=>{r.forEach((t=>{const r=t.clone({});r.append(e),n.push(r)}))})),r=n})),r}const creator=t=>{const r=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-attribute-case-insensitive",prepare(){const t=new WeakSet;return{Rule(s,{result:n}){if(t.has(s))return;if(!/i\s*]/gim.test(s.selector))return;let o;try{o=e((e=>{let t=[];e.each((e=>{selectorHasInsensitiveAttribute(e)&&(t=t.concat(createNewSelectors(e)),e.remove())})),t.length&&t.forEach((t=>e.append(t)))})).processSync(s.selector)}catch(e){return void s.warn(n,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}o!==s.selector&&(t.add(s),s.cloneBefore({selector:o}),r.preserve||s.remove())}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");function nodeIsInsensitiveAttribute(e){return"attribute"===e.type&&(e.insensitive??!1)}function selectorHasInsensitiveAttribute(e){return e.some(nodeIsInsensitiveAttribute)}function transformString(e,t,s){const r=s.charAt(t);if(""===r)return e;let n=e.map((e=>e+r));const o=r.toLocaleUpperCase();return o!==r&&(n=n.concat(e.map((e=>e+o)))),transformString(n,t+1,s)}function createNewSelectors(t){let s=[e.selector({value:"",nodes:[]})];return t.each((e=>{if(!nodeIsInsensitiveAttribute(e))return void s.forEach((t=>{t.append(e.clone())}));const t=transformString([""],0,(r=e).value??"").map((e=>{const t=r.clone({spaces:{after:r.spaces.after,before:r.spaces.before},insensitive:!1});return t.setValue(e),t}));var r;const n=[];t.forEach((e=>{s.forEach((t=>{const s=t.clone({});s.append(e),n.push(s)}))})),s=n})),s}const creator=t=>{const s=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-attribute-case-insensitive",prepare(){const t=new WeakSet;return{postcssPlugin:"postcss-attribute-case-insensitive",Rule(r,{result:n}){if(t.has(r))return;if(!/i\s*]/gim.test(r.selector))return;let o;try{o=e((e=>{let t=[];e.each((e=>{selectorHasInsensitiveAttribute(e)&&(t=t.concat(createNewSelectors(e)),e.remove())})),t.length&&t.forEach((t=>e.append(t)))})).processSync(r.selector)}catch(e){return void r.warn(n,`Failed to parse selector : "${r.selector}" with message: "${e instanceof Error?e.message:e}"`)}o!==r.selector&&(t.add(r),r.cloneBefore({selector:o}),s.preserve||r.remove())}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-attribute-case-insensitive/dist/index.mjs b/plugins/postcss-attribute-case-insensitive/dist/index.mjs index 9b40c56c0..6da75f8c5 100644 --- a/plugins/postcss-attribute-case-insensitive/dist/index.mjs +++ b/plugins/postcss-attribute-case-insensitive/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";function nodeIsInsensitiveAttribute(e){return"attribute"===e.type&&(e.insensitive??!1)}function selectorHasInsensitiveAttribute(e){return e.some(nodeIsInsensitiveAttribute)}function transformString(e,t,r){const s=r.charAt(t);if(""===s)return e;let n=e.map((e=>e+s));const o=s.toLocaleUpperCase();return o!==s&&(n=n.concat(e.map((e=>e+o)))),transformString(n,t+1,r)}function createNewSelectors(t){let r=[e.selector({value:"",nodes:[]})];return t.each((e=>{if(!nodeIsInsensitiveAttribute(e))return void r.forEach((t=>{t.append(e.clone())}));const t=transformString([""],0,(s=e).value??"").map((e=>{const t=s.clone({spaces:{after:s.spaces.after,before:s.spaces.before},insensitive:!1});return t.setValue(e),t}));var s;const n=[];t.forEach((e=>{r.forEach((t=>{const r=t.clone({});r.append(e),n.push(r)}))})),r=n})),r}const creator=t=>{const r=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-attribute-case-insensitive",prepare(){const t=new WeakSet;return{Rule(s,{result:n}){if(t.has(s))return;if(!/i\s*]/gim.test(s.selector))return;let o;try{o=e((e=>{let t=[];e.each((e=>{selectorHasInsensitiveAttribute(e)&&(t=t.concat(createNewSelectors(e)),e.remove())})),t.length&&t.forEach((t=>e.append(t)))})).processSync(s.selector)}catch(e){return void s.warn(n,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}o!==s.selector&&(t.add(s),s.cloneBefore({selector:o}),r.preserve||s.remove())}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";function nodeIsInsensitiveAttribute(e){return"attribute"===e.type&&(e.insensitive??!1)}function selectorHasInsensitiveAttribute(e){return e.some(nodeIsInsensitiveAttribute)}function transformString(e,t,s){const r=s.charAt(t);if(""===r)return e;let n=e.map((e=>e+r));const o=r.toLocaleUpperCase();return o!==r&&(n=n.concat(e.map((e=>e+o)))),transformString(n,t+1,s)}function createNewSelectors(t){let s=[e.selector({value:"",nodes:[]})];return t.each((e=>{if(!nodeIsInsensitiveAttribute(e))return void s.forEach((t=>{t.append(e.clone())}));const t=transformString([""],0,(r=e).value??"").map((e=>{const t=r.clone({spaces:{after:r.spaces.after,before:r.spaces.before},insensitive:!1});return t.setValue(e),t}));var r;const n=[];t.forEach((e=>{s.forEach((t=>{const s=t.clone({});s.append(e),n.push(s)}))})),s=n})),s}const creator=t=>{const s=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-attribute-case-insensitive",prepare(){const t=new WeakSet;return{postcssPlugin:"postcss-attribute-case-insensitive",Rule(r,{result:n}){if(t.has(r))return;if(!/i\s*]/gim.test(r.selector))return;let o;try{o=e((e=>{let t=[];e.each((e=>{selectorHasInsensitiveAttribute(e)&&(t=t.concat(createNewSelectors(e)),e.remove())})),t.length&&t.forEach((t=>e.append(t)))})).processSync(r.selector)}catch(e){return void r.warn(n,`Failed to parse selector : "${r.selector}" with message: "${e instanceof Error?e.message:e}"`)}o!==r.selector&&(t.add(r),r.cloneBefore({selector:o}),s.preserve||r.remove())}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-attribute-case-insensitive/src/index.ts b/plugins/postcss-attribute-case-insensitive/src/index.ts index 73794546a..7395c98d5 100644 --- a/plugins/postcss-attribute-case-insensitive/src/index.ts +++ b/plugins/postcss-attribute-case-insensitive/src/index.ts @@ -1,15 +1,15 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import selectorParser from 'postcss-selector-parser'; function nodeIsInsensitiveAttribute(node: selectorParser.Node): node is selectorParser.Attribute { return node.type === 'attribute' && (node.insensitive ?? false); } -function selectorHasInsensitiveAttribute(selector: selectorParser.Selector) { +function selectorHasInsensitiveAttribute(selector: selectorParser.Selector): boolean { return selector.some(nodeIsInsensitiveAttribute); } -function transformString(strings: Array, charPos: number, string: string) { +function transformString(strings: Array, charPos: number, string: string): Array { const char = string.charAt(charPos); if (char === '') { return strings; @@ -25,7 +25,7 @@ function transformString(strings: Array, charPos: number, string: string return transformString(newStrings, charPos + 1, string); } -function createSensitiveAttributes(attribute: selectorParser.Attribute) { +function createSensitiveAttributes(attribute: selectorParser.Attribute): Array { const attributes = transformString([''], 0, attribute.value ?? ''); return attributes.map(x => { const newAttribute = attribute.clone({ @@ -42,7 +42,7 @@ function createSensitiveAttributes(attribute: selectorParser.Attribute) { }); } -function createNewSelectors(selector: selectorParser.Selector) { +function createNewSelectors(selector: selectorParser.Selector): Array { let newSelectors: Array = [selectorParser.selector({ value: '', nodes: [] })]; selector.each((node) => { @@ -88,11 +88,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-attribute-case-insensitive', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-attribute-case-insensitive', + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/postcss-base-plugin/src/index.ts b/plugins/postcss-base-plugin/src/index.ts index 56136fd0c..d9de7c4e8 100644 --- a/plugins/postcss-base-plugin/src/index.ts +++ b/plugins/postcss-base-plugin/src/index.ts @@ -21,7 +21,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-base-plugin', - Declaration(decl) { + Declaration(decl): void { if (decl.value === 'red') { // Determine the new value. let newValue = 'blue'; diff --git a/plugins/postcss-cascade-layers/src/adjust-selector-specificity.ts b/plugins/postcss-cascade-layers/src/adjust-selector-specificity.ts index 979e9df63..44ed91a8c 100644 --- a/plugins/postcss-cascade-layers/src/adjust-selector-specificity.ts +++ b/plugins/postcss-cascade-layers/src/adjust-selector-specificity.ts @@ -20,7 +20,7 @@ export function adjustSelectorSpecificity(selector: string, amount: number): str return selectorAST.toString(); } -function generateNot(specificity: number) { +function generateNot(specificity: number): string { if (specificity === 0) { return ''; } diff --git a/plugins/postcss-cascade-layers/src/clean-blocks.ts b/plugins/postcss-cascade-layers/src/clean-blocks.ts index fe515022e..88c5cc119 100644 --- a/plugins/postcss-cascade-layers/src/clean-blocks.ts +++ b/plugins/postcss-cascade-layers/src/clean-blocks.ts @@ -1,7 +1,7 @@ import type { ChildNode, Container, Document } from 'postcss'; import { CONDITIONAL_ATRULES } from './constants'; -export function removeEmptyDescendantBlocks(block: Container | undefined) { +export function removeEmptyDescendantBlocks(block: Container | undefined): void { if (!block) { return; } @@ -19,7 +19,7 @@ export function removeEmptyDescendantBlocks(block: Container | undefined) { } } -export function removeEmptyAncestorBlocks(block: Container | undefined) { +export function removeEmptyAncestorBlocks(block: Container | undefined): void { if (!block) { return; } diff --git a/plugins/postcss-cascade-layers/src/desugar-and-parse-layer-names.ts b/plugins/postcss-cascade-layers/src/desugar-and-parse-layer-names.ts index 295d3ffaa..7a00cf019 100644 --- a/plugins/postcss-cascade-layers/src/desugar-and-parse-layer-names.ts +++ b/plugins/postcss-cascade-layers/src/desugar-and-parse-layer-names.ts @@ -7,7 +7,7 @@ import { getLayerAtRuleAncestor } from './get-layer-atrule-ancestor'; import { removeEmptyAncestorBlocks, removeEmptyDescendantBlocks } from './clean-blocks'; import { isProcessableLayerRule } from './is-processable-layer-rule'; -export function desugarAndParseLayerNames(root: Container, model: Model) { +export function desugarAndParseLayerNames(root: Container, model: Model): void { // - parse layer names // - rename anon layers // - handle empty layers diff --git a/plugins/postcss-cascade-layers/src/desugar-nested-layers.ts b/plugins/postcss-cascade-layers/src/desugar-nested-layers.ts index 8a03282c0..d9acf98f4 100644 --- a/plugins/postcss-cascade-layers/src/desugar-nested-layers.ts +++ b/plugins/postcss-cascade-layers/src/desugar-nested-layers.ts @@ -4,7 +4,7 @@ import { isProcessableLayerRule } from './is-processable-layer-rule'; import type { Model } from './model'; import { someAtRuleInTree } from './some-in-tree'; -export function desugarNestedLayers(root: Container, model: Model) { +export function desugarNestedLayers(root: Container, model: Model): void { while (someAtRuleInTree(root, (node) => { return !!node.nodes && someAtRuleInTree(node, (nested) => { return isProcessableLayerRule(nested); diff --git a/plugins/postcss-cascade-layers/src/index.ts b/plugins/postcss-cascade-layers/src/index.ts index 693dfdc6e..2a3a0173a 100644 --- a/plugins/postcss-cascade-layers/src/index.ts +++ b/plugins/postcss-cascade-layers/src/index.ts @@ -25,7 +25,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-cascade-layers', - OnceExit(root: Container, { result }: { result: Result }) { + OnceExit(root: Container, { result }: { result: Result }): void { let hasAnyLayer = false; diff --git a/plugins/postcss-cascade-layers/src/model.ts b/plugins/postcss-cascade-layers/src/model.ts index 6c16810eb..a9a78d6b7 100644 --- a/plugins/postcss-cascade-layers/src/model.ts +++ b/plugins/postcss-cascade-layers/src/model.ts @@ -114,7 +114,7 @@ export class Model { return layerNameList; } - sortLayerNames() { + sortLayerNames(): void { for (const [layerName, layerIndex] of this.layerOrder) { const parts = this.layerNameParts.get(layerName) ?? []; diff --git a/plugins/postcss-cascade-layers/src/record-layer-order.ts b/plugins/postcss-cascade-layers/src/record-layer-order.ts index 058c939fd..98e454738 100644 --- a/plugins/postcss-cascade-layers/src/record-layer-order.ts +++ b/plugins/postcss-cascade-layers/src/record-layer-order.ts @@ -5,7 +5,7 @@ import { isProcessableLayerRule } from './is-processable-layer-rule'; import type { Model } from './model'; import { pluginOptions } from './options'; -export function recordLayerOrder(root: Container, model: Model, { result, options }: { result: Result, options: pluginOptions }) { +export function recordLayerOrder(root: Container, model: Model, { result, options }: { result: Result, options: pluginOptions }): void { // record layer order root.walkAtRules((layerRule) => { if (!isProcessableLayerRule(layerRule)) { diff --git a/plugins/postcss-cascade-layers/src/sort-root-nodes.ts b/plugins/postcss-cascade-layers/src/sort-root-nodes.ts index d99601dc0..8dc39925f 100644 --- a/plugins/postcss-cascade-layers/src/sort-root-nodes.ts +++ b/plugins/postcss-cascade-layers/src/sort-root-nodes.ts @@ -7,7 +7,7 @@ import { isProcessableLayerRule } from './is-processable-layer-rule'; // Sort root nodes to apply the preferred order by layer priority for non-selector rules. // Selector rules are adjusted by specificity. -export function sortRootNodes(root: Container, model: Model) { +export function sortRootNodes(root: Container, model: Model): void { if (!root.nodes) { return; } diff --git a/plugins/postcss-cascade-layers/src/split-important-styles.ts b/plugins/postcss-cascade-layers/src/split-important-styles.ts index 74ee10098..f4edfa958 100644 --- a/plugins/postcss-cascade-layers/src/split-important-styles.ts +++ b/plugins/postcss-cascade-layers/src/split-important-styles.ts @@ -4,7 +4,7 @@ import { ATRULES_WITH_NON_SELECTOR_BLOCK_LISTS } from './constants'; // Declarations with !important have inverse priority in layers. // Splitting rules allows us to assign different specificity to rules with or without !important declarations. -export function splitImportantStyles(root: Container) { +export function splitImportantStyles(root: Container): void { root.walkDecls((decl) => { if (!decl.important) { return; diff --git a/plugins/postcss-color-function/dist/index.cjs b/plugins/postcss-color-function/dist/index.cjs index 451354f2b..608715ec5 100644 --- a/plugins/postcss-color-function/dist/index.cjs +++ b/plugins/postcss-color-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-tokenizer"),o=require("@csstools/css-color-parser"),r=require("@csstools/utilities"),t=require("@csstools/css-parser-algorithms");const a=/\b(?:color)\(/i,n=/^(?:color)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-function",Declaration:i=>{const c=i.value;if(!a.test(c))return;if(r.hasFallback(i))return;if(r.hasSupportsAtRuleAncestor(i,a))return;const l=e.tokenize({css:c}),u=t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(l),(s=>{if(!t.isFunctionNode(s)||!n.test(s.getName()))return;const e=o.color(s);return e&&!(e.syntaxFlags.has(o.SyntaxFlag.Experimental)||e.syntaxFlags.has(o.SyntaxFlag.HasNoneKeywords)||e.syntaxFlags.has(o.SyntaxFlag.RelativeColorSyntax))?o.serializeRGB(e):void 0})),p=t.stringify(u);p!==c&&(i.cloneBefore({value:p}),s?.preserve||i.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const o=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return o.enableProgressiveCustomProperties&&o.preserve?{postcssPlugin:"postcss-color-function",plugins:[s(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-tokenizer"),o=require("@csstools/css-color-parser"),r=require("@csstools/utilities"),t=require("@csstools/css-parser-algorithms");const a=/\b(?:color)\(/i,n=/^(?:color)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-function",Declaration(i){const c=i.value;if(!a.test(c))return;if(r.hasFallback(i))return;if(r.hasSupportsAtRuleAncestor(i,a))return;const l=e.tokenize({css:c}),u=t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(l),(s=>{if(!t.isFunctionNode(s)||!n.test(s.getName()))return;const e=o.color(s);return e&&!(e.syntaxFlags.has(o.SyntaxFlag.Experimental)||e.syntaxFlags.has(o.SyntaxFlag.HasNoneKeywords)||e.syntaxFlags.has(o.SyntaxFlag.RelativeColorSyntax))?o.serializeRGB(e):void 0})),p=t.stringify(u);p!==c&&(i.cloneBefore({value:p}),s?.preserve||i.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const o=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return o.enableProgressiveCustomProperties&&o.preserve?{postcssPlugin:"postcss-color-function",plugins:[s(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-color-function/dist/index.mjs b/plugins/postcss-color-function/dist/index.mjs index 5d14a20ad..d1cf0967e 100644 --- a/plugins/postcss-color-function/dist/index.mjs +++ b/plugins/postcss-color-function/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{tokenize as o}from"@csstools/css-tokenizer";import{color as r,SyntaxFlag as e,serializeRGB as t}from"@csstools/css-color-parser";import{hasFallback as c,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as l,isFunctionNode as a,stringify as p}from"@csstools/css-parser-algorithms";const u=/\b(?:color)\(/i,m=/^(?:color)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-function",Declaration:f=>{const g=f.value;if(!u.test(g))return;if(c(f))return;if(i(f,u))return;const v=o({css:g}),x=n(l(v),(s=>{if(!a(s)||!m.test(s.getName()))return;const o=r(s);return o&&!(o.syntaxFlags.has(e.Experimental)||o.syntaxFlags.has(e.HasNoneKeywords)||o.syntaxFlags.has(e.RelativeColorSyntax))?t(o):void 0})),P=p(x);P!==g&&(f.cloneBefore({value:P}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const r=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return r.enableProgressiveCustomProperties&&r.preserve?{postcssPlugin:"postcss-color-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{tokenize as o}from"@csstools/css-tokenizer";import{color as r,SyntaxFlag as e,serializeRGB as t}from"@csstools/css-color-parser";import{hasFallback as c,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as l,isFunctionNode as a,stringify as p}from"@csstools/css-parser-algorithms";const u=/\b(?:color)\(/i,m=/^(?:color)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-function",Declaration(f){const g=f.value;if(!u.test(g))return;if(c(f))return;if(i(f,u))return;const v=o({css:g}),x=n(l(v),(s=>{if(!a(s)||!m.test(s.getName()))return;const o=r(s);return o&&!(o.syntaxFlags.has(e.Experimental)||o.syntaxFlags.has(e.HasNoneKeywords)||o.syntaxFlags.has(e.RelativeColorSyntax))?t(o):void 0})),P=p(x);P!==g&&(f.cloneBefore({value:P}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const r=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return r.enableProgressiveCustomProperties&&r.preserve?{postcssPlugin:"postcss-color-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-color-function/src/index.ts b/plugins/postcss-color-function/src/index.ts index 1bad2dae4..be6e91d08 100644 --- a/plugins/postcss-color-function/src/index.ts +++ b/plugins/postcss-color-function/src/index.ts @@ -16,7 +16,7 @@ const COLOR_NAME_REGEX = /^(?:color)$/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-color-function', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(COLOR_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-color-functional-notation/dist/index.cjs b/plugins/postcss-color-functional-notation/dist/index.cjs index 3f2dbeec5..f83a389ad 100644 --- a/plugins/postcss-color-functional-notation/dist/index.cjs +++ b/plugins/postcss-color-functional-notation/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),o=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-tokenizer");const r=/^(?:rgb|hsl)a?$/i,n=/\b(?:rgb|hsl)a?\(/i,basePlugin=s=>({postcssPlugin:"postcss-color-functional-notation",Declaration:l=>{const i=l.value;if(!n.test(i))return;if(t.hasFallback(l))return;if(t.hasSupportsAtRuleAncestor(l,n))return;const c=o.replaceComponentValues(o.parseCommaSeparatedListOfComponentValues(a.tokenize({css:i})),(s=>{if(!o.isFunctionNode(s)||!r.test(s.getName()))return;const t=e.color(s);return!t||t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)||(t.syntaxFlags.has(e.SyntaxFlag.LegacyRGB)||t.syntaxFlags.has(e.SyntaxFlag.LegacyHSL))&&!t.syntaxFlags.has(e.SyntaxFlag.HasPercentageAlpha)?void 0:"hsl"===t.colorNotation?e.serializeHSL(t):e.serializeRGB(t)})),u=o.stringify(c);u!==i&&(l.cloneBefore({value:u}),s?.preserve||l.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-color-functional-notation",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),o=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-tokenizer");const r=/^(?:rgb|hsl)a?$/i,n=/\b(?:rgb|hsl)a?\(/i,basePlugin=s=>({postcssPlugin:"postcss-color-functional-notation",Declaration(l){const i=l.value;if(!n.test(i))return;if(t.hasFallback(l))return;if(t.hasSupportsAtRuleAncestor(l,n))return;const c=o.replaceComponentValues(o.parseCommaSeparatedListOfComponentValues(a.tokenize({css:i})),(s=>{if(!o.isFunctionNode(s)||!r.test(s.getName()))return;const t=e.color(s);return!t||t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)||(t.syntaxFlags.has(e.SyntaxFlag.LegacyRGB)||t.syntaxFlags.has(e.SyntaxFlag.LegacyHSL))&&!t.syntaxFlags.has(e.SyntaxFlag.HasPercentageAlpha)?void 0:"hsl"===t.colorNotation?e.serializeHSL(t):e.serializeRGB(t)})),u=o.stringify(c);u!==i&&(l.cloneBefore({value:u}),s?.preserve||l.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-color-functional-notation",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-color-functional-notation/dist/index.mjs b/plugins/postcss-color-functional-notation/dist/index.mjs index 1f567fa89..045cea099 100644 --- a/plugins/postcss-color-functional-notation/dist/index.mjs +++ b/plugins/postcss-color-functional-notation/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as o,SyntaxFlag as t,serializeHSL as e,serializeRGB as r}from"@csstools/css-color-parser";import{hasFallback as a,hasSupportsAtRuleAncestor as n}from"@csstools/utilities";import{replaceComponentValues as l,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as i,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as g}from"@csstools/css-tokenizer";const u=/^(?:rgb|hsl)a?$/i,m=/\b(?:rgb|hsl)a?\(/i,basePlugin=s=>({postcssPlugin:"postcss-color-functional-notation",Declaration:f=>{const h=f.value;if(!m.test(h))return;if(a(f))return;if(n(f,m))return;const v=l(c(g({css:h})),(s=>{if(!i(s)||!u.test(s.getName()))return;const a=o(s);return!a||a.syntaxFlags.has(t.Experimental)||a.syntaxFlags.has(t.HasNoneKeywords)||a.syntaxFlags.has(t.RelativeColorSyntax)||(a.syntaxFlags.has(t.LegacyRGB)||a.syntaxFlags.has(t.LegacyHSL))&&!a.syntaxFlags.has(t.HasPercentageAlpha)?void 0:"hsl"===a.colorNotation?e(a):r(a)})),y=p(v);y!==h&&(f.cloneBefore({value:y}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-color-functional-notation",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as o,SyntaxFlag as t,serializeHSL as e,serializeRGB as r}from"@csstools/css-color-parser";import{hasFallback as a,hasSupportsAtRuleAncestor as n}from"@csstools/utilities";import{replaceComponentValues as l,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as i,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as g}from"@csstools/css-tokenizer";const u=/^(?:rgb|hsl)a?$/i,m=/\b(?:rgb|hsl)a?\(/i,basePlugin=s=>({postcssPlugin:"postcss-color-functional-notation",Declaration(f){const h=f.value;if(!m.test(h))return;if(a(f))return;if(n(f,m))return;const v=l(c(g({css:h})),(s=>{if(!i(s)||!u.test(s.getName()))return;const a=o(s);return!a||a.syntaxFlags.has(t.Experimental)||a.syntaxFlags.has(t.HasNoneKeywords)||a.syntaxFlags.has(t.RelativeColorSyntax)||(a.syntaxFlags.has(t.LegacyRGB)||a.syntaxFlags.has(t.LegacyHSL))&&!a.syntaxFlags.has(t.HasPercentageAlpha)?void 0:"hsl"===a.colorNotation?e(a):r(a)})),y=p(v);y!==h&&(f.cloneBefore({value:y}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-color-functional-notation",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-color-functional-notation/src/index.ts b/plugins/postcss-color-functional-notation/src/index.ts index a060b7f74..278aa78c0 100644 --- a/plugins/postcss-color-functional-notation/src/index.ts +++ b/plugins/postcss-color-functional-notation/src/index.ts @@ -16,7 +16,7 @@ const RGB_HSL_FUNCTION_REGEX = /\b(?:rgb|hsl)a?\(/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-color-functional-notation', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(RGB_HSL_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-color-hex-alpha/dist/index.cjs b/plugins/postcss-color-hex-alpha/dist/index.cjs index bd64bbe90..5deda5879 100644 --- a/plugins/postcss-color-hex-alpha/dist/index.cjs +++ b/plugins/postcss-color-hex-alpha/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser"),s=require("@csstools/utilities");const creator=t=>{const r=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-color-hex-alpha",Declaration(t){if(!/#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)\b/.test(t.value))return;if(s.hasFallback(t))return;const{value:a}=t,l=e(a);l.walk((e=>{if("function"===e.type&&"url"===e.value)return!1;isAlphaHex(e)&&hexa2rgba(e)}));const c=l.toString();c!==a&&(t.cloneBefore({value:c}),r.preserve||t.remove())}}};function isAlphaHex(e){return"word"===e.type&&/^#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)$/.test(e.value)}creator.postcss=!0;const t=1e5,hexa2rgba=e=>{const s=e.value,r=`0x${5===s.length?s.slice(1).replace(/[0-9A-Fa-f]/g,"$&$&"):s.slice(1)}`,[a,l,c,n]=[parseInt(r.slice(2,4),16),parseInt(r.slice(4,6),16),parseInt(r.slice(6,8),16),Math.round(parseInt(r.slice(8,10),16)/255*t)/t];e.value=`rgba(${a},${l},${c},${n})`};module.exports=creator; +"use strict";var e=require("postcss-value-parser"),s=require("@csstools/utilities");const creator=a=>{const l=Object.assign({preserve:!1},a);return{postcssPlugin:"postcss-color-hex-alpha",Declaration(a){if(!t.test(a.value))return;if(s.hasFallback(a))return;const{value:c}=a,n=e(c);n.walk((e=>{if("function"===e.type&&"url"===e.value)return!1;"word"===e.type&&r.test(e.value)&&hexa2rgba(e)}));const o=n.toString();o!==c&&(a.cloneBefore({value:o}),l.preserve||a.remove())}}};creator.postcss=!0;const t=/#([0-9a-f]{4}(?:[0-9a-f]{4})?)\b/i,r=/^#([0-9a-f]{4}(?:[0-9a-f]{4})?)$/i,a=1e5,l=/[0-9a-f]/gi;function hexa2rgba(e){const s=e.value,t=`0x${5===s.length?s.slice(1).replace(l,"$&$&"):s.slice(1)}`,[r,c,n,o]=[parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),parseInt(t.slice(6,8),16),Math.round(parseInt(t.slice(8,10),16)/255*a)/a];e.value=`rgba(${r},${c},${n},${o})`}module.exports=creator; diff --git a/plugins/postcss-color-hex-alpha/dist/index.mjs b/plugins/postcss-color-hex-alpha/dist/index.mjs index d1d4624e6..27b52f0b2 100644 --- a/plugins/postcss-color-hex-alpha/dist/index.mjs +++ b/plugins/postcss-color-hex-alpha/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";import{hasFallback as s}from"@csstools/utilities";const creator=t=>{const r=Object.assign({preserve:!1},t);return{postcssPlugin:"postcss-color-hex-alpha",Declaration(t){if(!/#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)\b/.test(t.value))return;if(s(t))return;const{value:a}=t,l=e(a);l.walk((e=>{if("function"===e.type&&"url"===e.value)return!1;isAlphaHex(e)&&hexa2rgba(e)}));const o=l.toString();o!==a&&(t.cloneBefore({value:o}),r.preserve||t.remove())}}};function isAlphaHex(e){return"word"===e.type&&/^#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)$/.test(e.value)}creator.postcss=!0;const t=1e5,hexa2rgba=e=>{const s=e.value,r=`0x${5===s.length?s.slice(1).replace(/[0-9A-Fa-f]/g,"$&$&"):s.slice(1)}`,[a,l,o,n]=[parseInt(r.slice(2,4),16),parseInt(r.slice(4,6),16),parseInt(r.slice(6,8),16),Math.round(parseInt(r.slice(8,10),16)/255*t)/t];e.value=`rgba(${a},${l},${o},${n})`};export{creator as default}; +import e from"postcss-value-parser";import{hasFallback as s}from"@csstools/utilities";const creator=a=>{const o=Object.assign({preserve:!1},a);return{postcssPlugin:"postcss-color-hex-alpha",Declaration(a){if(!t.test(a.value))return;if(s(a))return;const{value:l}=a,n=e(l);n.walk((e=>{if("function"===e.type&&"url"===e.value)return!1;"word"===e.type&&r.test(e.value)&&hexa2rgba(e)}));const c=n.toString();c!==l&&(a.cloneBefore({value:c}),o.preserve||a.remove())}}};creator.postcss=!0;const t=/#([0-9a-f]{4}(?:[0-9a-f]{4})?)\b/i,r=/^#([0-9a-f]{4}(?:[0-9a-f]{4})?)$/i,a=1e5,o=/[0-9a-f]/gi;function hexa2rgba(e){const s=e.value,t=`0x${5===s.length?s.slice(1).replace(o,"$&$&"):s.slice(1)}`,[r,l,n,c]=[parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),parseInt(t.slice(6,8),16),Math.round(parseInt(t.slice(8,10),16)/255*a)/a];e.value=`rgba(${r},${l},${n},${c})`}export{creator as default}; diff --git a/plugins/postcss-color-hex-alpha/src/index.ts b/plugins/postcss-color-hex-alpha/src/index.ts index cf8aaeaed..86d3e2e0d 100644 --- a/plugins/postcss-color-hex-alpha/src/index.ts +++ b/plugins/postcss-color-hex-alpha/src/index.ts @@ -1,4 +1,4 @@ -import type { Declaration, PluginCreator } from 'postcss'; +import type { PluginCreator } from 'postcss'; import valuesParser from 'postcss-value-parser'; import { hasFallback } from '@csstools/utilities'; @@ -20,8 +20,8 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-color-hex-alpha', - Declaration(decl) { - if (!hasAlphaHex(decl)) { + Declaration(decl): void { + if (!HAS_HEX_ALPHA_REGEX.test(decl.value)) { return; } @@ -39,7 +39,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return false; } - if (isAlphaHex(node)) { + if (node.type === 'word' && IS_HEX_ALPHA_REGEX.test(node.value)) { hexa2rgba(node); } }); @@ -64,28 +64,21 @@ creator.postcss = true; export default creator; +const HAS_HEX_ALPHA_REGEX = /#([0-9a-f]{4}(?:[0-9a-f]{4})?)\b/i; -/** Returns whether a node has a hexa. */ -function hasAlphaHex(node: Declaration) { - /** Expresssion to match any hexa */ - return /#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)\b/.test(node.value); -} - -/** Returns whether a node matches a hexa node. */ -function isAlphaHex(node: valuesParser.Node) { - /** Expresssion to match an exact hexa */ - return node.type === 'word' && /^#([0-9A-Fa-f]{4}(?:[0-9A-Fa-f]{4})?)$/.test(node.value); -} +const IS_HEX_ALPHA_REGEX = /^#([0-9a-f]{4}(?:[0-9a-f]{4})?)$/i; /** Decimal precision. */ const alphaDecimalPrecision = 100000; -const hexa2rgba = (node: valuesParser.Node) => { +const HEX_ALPHA_REPLACER_REGEX = /[0-9a-f]/gi; + +function hexa2rgba(node: valuesParser.Node): void { // hex is the node value const hex = node.value; // conditionally expand a hex - const hex8 = `0x${hex.length === 5 ? hex.slice(1).replace(/[0-9A-Fa-f]/g, '$&$&') : hex.slice(1)}`; + const hex8 = `0x${hex.length === 5 ? hex.slice(1).replace(HEX_ALPHA_REPLACER_REGEX, '$&$&') : hex.slice(1)}`; // extract the red, blue, green, and alpha values from the hex const [r, g, b, a] = [ @@ -98,4 +91,4 @@ const hexa2rgba = (node: valuesParser.Node) => { ]; node.value = `rgba(${r},${g},${b},${a})`; -}; +} diff --git a/plugins/postcss-color-mix-function/dist/index.cjs b/plugins/postcss-color-mix-function/dist/index.cjs index fa4f35e24..f539e7613 100644 --- a/plugins/postcss-color-mix-function/dist/index.cjs +++ b/plugins/postcss-color-mix-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),r=require("@csstools/utilities"),t=require("@csstools/css-parser-algorithms"),o=require("@csstools/css-tokenizer");const i=/\b(?:color-mix)\(/i,a=/^(?:color-mix)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-mix-function",Declaration:n=>{const l=n.value;if(!i.test(l))return;if(r.hasFallback(n))return;if(r.hasSupportsAtRuleAncestor(n,i))return;const u=o.tokenize({css:l}),c=t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!t.isFunctionNode(s)||!a.test(s.getName()))return;const r=e.color(s);return r&&!r.syntaxFlags.has(e.SyntaxFlag.Experimental)?e.serializeRGB(r):void 0})),p=t.stringify(c);if(p===l)return;let m=p;s?.subFeatures.displayP3&&(m=t.stringify(t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!t.isFunctionNode(s)||!a.test(s.getName()))return;const r=e.color(s);return r&&!r.syntaxFlags.has(e.SyntaxFlag.Experimental)?e.colorDataFitsRGB_Gamut(r)?e.serializeRGB(r):e.serializeP3(r):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&m!==p&&n.cloneBefore({value:m}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return r.subFeatures=Object.assign({displayP3:!0},r.subFeatures),r.enableProgressiveCustomProperties&&(r.preserve||r.subFeatures.displayP3)?{postcssPlugin:"postcss-color-mix-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),r=require("@csstools/utilities"),t=require("@csstools/css-parser-algorithms"),o=require("@csstools/css-tokenizer");const i=/\b(?:color-mix)\(/i,a=/^(?:color-mix)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-mix-function",Declaration(n){const l=n.value;if(!i.test(l))return;if(r.hasFallback(n))return;if(r.hasSupportsAtRuleAncestor(n,i))return;const u=o.tokenize({css:l}),c=t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!t.isFunctionNode(s)||!a.test(s.getName()))return;const r=e.color(s);return r&&!r.syntaxFlags.has(e.SyntaxFlag.Experimental)?e.serializeRGB(r):void 0})),p=t.stringify(c);if(p===l)return;let m=p;s?.subFeatures.displayP3&&(m=t.stringify(t.replaceComponentValues(t.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!t.isFunctionNode(s)||!a.test(s.getName()))return;const r=e.color(s);return r&&!r.syntaxFlags.has(e.SyntaxFlag.Experimental)?e.colorDataFitsRGB_Gamut(r)?e.serializeRGB(r):e.serializeP3(r):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&m!==p&&n.cloneBefore({value:m}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return r.subFeatures=Object.assign({displayP3:!0},r.subFeatures),r.enableProgressiveCustomProperties&&(r.preserve||r.subFeatures.displayP3)?{postcssPlugin:"postcss-color-mix-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-color-mix-function/dist/index.mjs b/plugins/postcss-color-mix-function/dist/index.mjs index 981cee6a6..1996ee7ff 100644 --- a/plugins/postcss-color-mix-function/dist/index.mjs +++ b/plugins/postcss-color-mix-function/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as r,serializeRGB as t,colorDataFitsRGB_Gamut as o,serializeP3 as i}from"@csstools/css-color-parser";import{hasFallback as c,hasSupportsAtRuleAncestor as a}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as l,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const f=/\b(?:color-mix)\(/i,g=/^(?:color-mix)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-mix-function",Declaration:v=>{const b=v.value;if(!f.test(b))return;if(c(v))return;if(a(v,f))return;const P=m({css:b}),x=n(l(P),(s=>{if(!u(s)||!g.test(s.getName()))return;const o=e(s);return o&&!o.syntaxFlags.has(r.Experimental)?t(o):void 0})),d=p(x);if(d===b)return;let F=d;s?.subFeatures.displayP3&&(F=p(n(l(P),(s=>{if(!u(s)||!g.test(s.getName()))return;const c=e(s);return c&&!c.syntaxFlags.has(r.Experimental)?o(c)?t(c):i(c):void 0})))),v.cloneBefore({value:d}),s?.subFeatures.displayP3&&F!==d&&v.cloneBefore({value:F}),s?.preserve||v.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return r.subFeatures=Object.assign({displayP3:!0},r.subFeatures),r.enableProgressiveCustomProperties&&(r.preserve||r.subFeatures.displayP3)?{postcssPlugin:"postcss-color-mix-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as r,serializeRGB as t,colorDataFitsRGB_Gamut as o,serializeP3 as i}from"@csstools/css-color-parser";import{hasFallback as c,hasSupportsAtRuleAncestor as a}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as l,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const f=/\b(?:color-mix)\(/i,g=/^(?:color-mix)$/i,basePlugin=s=>({postcssPlugin:"postcss-color-mix-function",Declaration(v){const b=v.value;if(!f.test(b))return;if(c(v))return;if(a(v,f))return;const P=m({css:b}),x=n(l(P),(s=>{if(!u(s)||!g.test(s.getName()))return;const o=e(s);return o&&!o.syntaxFlags.has(r.Experimental)?t(o):void 0})),d=p(x);if(d===b)return;let F=d;s?.subFeatures.displayP3&&(F=p(n(l(P),(s=>{if(!u(s)||!g.test(s.getName()))return;const c=e(s);return c&&!c.syntaxFlags.has(r.Experimental)?o(c)?t(c):i(c):void 0})))),v.cloneBefore({value:d}),s?.subFeatures.displayP3&&F!==d&&v.cloneBefore({value:F}),s?.preserve||v.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return r.subFeatures=Object.assign({displayP3:!0},r.subFeatures),r.enableProgressiveCustomProperties&&(r.preserve||r.subFeatures.displayP3)?{postcssPlugin:"postcss-color-mix-function",plugins:[s(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-color-mix-function/src/index.ts b/plugins/postcss-color-mix-function/src/index.ts index 06945a8ad..134e9a95e 100644 --- a/plugins/postcss-color-mix-function/src/index.ts +++ b/plugins/postcss-color-mix-function/src/index.ts @@ -19,7 +19,7 @@ const COLOR_MIX_NAME_REGEX = /^(?:color-mix)$/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-color-mix-function', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(COLOR_MIX_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-color-rebeccapurple/src/index.ts b/plugins/postcss-color-rebeccapurple/src/index.ts index a8dbba21a..5a80f58e0 100644 --- a/plugins/postcss-color-rebeccapurple/src/index.ts +++ b/plugins/postcss-color-rebeccapurple/src/index.ts @@ -23,7 +23,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-color-rebeccapurple', - Declaration(decl) { + Declaration(decl): void { if (!HAS_REBECCAPURPLE_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-conditional-values/dist/index.cjs b/plugins/postcss-conditional-values/dist/index.cjs index dc90f61e2..2e7a6a22c 100644 --- a/plugins/postcss-conditional-values/dist/index.cjs +++ b/plugins/postcss-conditional-values/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser");const creator=t=>{const o=Object.assign({functionName:"csstools-if"},t);return{postcssPlugin:"postcss-conditional-values",prepare(){const t=new Map,r=new Set,s=new Set;return{Declaration(n,{postcss:a}){if(!n.value.toLowerCase().includes(o.functionName))return;const u=e(n.value);let i="";const l=[];let c=!1;const p=[];if(u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.nodes.forEach((t=>{i||"word"!==t.type||"--"!==t.value.slice(0,2)?i&&("word"!==t.type||"else"!==t.value?c?p.push(t):l.push(t):c=!0):i=e.stringify(t).trim()})),!1})),!i)return;if(l.some((e=>"div"===e.type&&","===e.value)))return;if(p.some((e=>"div"===e.type&&","===e.value)))return;const d=e.stringify(l).trim(),f=e.stringify(p).trim();if(d&&f){{const r=t.get(i)||0;t.set(i,r+1);const s=`${i}--${r}`;n.cloneBefore({prop:s,value:`var(${i}) ${f}`}),u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.value="var",t.nodes=[...e(s).nodes,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""},...e(d).nodes],!1})),n.cloneBefore({value:u.toString()})}if(!r.has(i)&&(n.root().walkDecls(i,(e=>{e.prop===i&&(""!==e.value.trim()?"true"===e.value.trim().toLowerCase()?e.value="initial":"false"===e.value.trim().toLowerCase()&&(e.value=" ",s.add(i)):s.add(i))})),r.add(i),!s.has(i))){let e;s.add(i),n.root().each((t=>{if("rule"===t.type&&":root"===t.selector)return e=t,!1})),e||(e=a.rule({selector:":root",source:n.source,raws:{before:"",after:"\n",between:" "}}),n.root().prepend(e));const t=a.decl({value:" ",prop:i,raws:{before:"\n\t"}});t.source=n.source,e.append(t)}n.remove()}}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser");const creator=t=>{const o=Object.assign({functionName:"csstools-if"},t);return{postcssPlugin:"postcss-conditional-values",prepare(){const t=new Map,r=new Set,s=new Set;return{postcssPlugin:"postcss-conditional-values",Declaration(n,{postcss:a}){if(!n.value.toLowerCase().includes(o.functionName))return;const u=e(n.value);let i="";const l=[];let c=!1;const p=[];if(u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.nodes.forEach((t=>{i||"word"!==t.type||"--"!==t.value.slice(0,2)?i&&("word"!==t.type||"else"!==t.value?c?p.push(t):l.push(t):c=!0):i=e.stringify(t).trim()})),!1})),!i)return;if(l.some((e=>"div"===e.type&&","===e.value)))return;if(p.some((e=>"div"===e.type&&","===e.value)))return;const d=e.stringify(l).trim(),f=e.stringify(p).trim();if(d&&f){{const r=t.get(i)||0;t.set(i,r+1);const s=`${i}--${r}`;n.cloneBefore({prop:s,value:`var(${i}) ${f}`}),u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.value="var",t.nodes=[...e(s).nodes,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""},...e(d).nodes],!1})),n.cloneBefore({value:u.toString()})}if(!r.has(i)&&(n.root().walkDecls(i,(e=>{e.prop===i&&(""!==e.value.trim()?"true"===e.value.trim().toLowerCase()?e.value="initial":"false"===e.value.trim().toLowerCase()&&(e.value=" ",s.add(i)):s.add(i))})),r.add(i),!s.has(i))){let e;s.add(i),n.root().each((t=>{if("rule"===t.type&&":root"===t.selector)return e=t,!1})),e||(e=a.rule({selector:":root",source:n.source,raws:{before:"",after:"\n",between:" "}}),n.root().prepend(e));const t=a.decl({value:" ",prop:i,raws:{before:"\n\t"}});t.source=n.source,e.append(t)}n.remove()}}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-conditional-values/dist/index.mjs b/plugins/postcss-conditional-values/dist/index.mjs index 665d12936..903134f87 100644 --- a/plugins/postcss-conditional-values/dist/index.mjs +++ b/plugins/postcss-conditional-values/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";const creator=t=>{const o=Object.assign({functionName:"csstools-if"},t);return{postcssPlugin:"postcss-conditional-values",prepare(){const t=new Map,r=new Set,s=new Set;return{Declaration(n,{postcss:a}){if(!n.value.toLowerCase().includes(o.functionName))return;const u=e(n.value);let l="";const i=[];let c=!1;const p=[];if(u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.nodes.forEach((t=>{l||"word"!==t.type||"--"!==t.value.slice(0,2)?l&&("word"!==t.type||"else"!==t.value?c?p.push(t):i.push(t):c=!0):l=e.stringify(t).trim()})),!1})),!l)return;if(i.some((e=>"div"===e.type&&","===e.value)))return;if(p.some((e=>"div"===e.type&&","===e.value)))return;const f=e.stringify(i).trim(),d=e.stringify(p).trim();if(f&&d){{const r=t.get(l)||0;t.set(l,r+1);const s=`${l}--${r}`;n.cloneBefore({prop:s,value:`var(${l}) ${d}`}),u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.value="var",t.nodes=[...e(s).nodes,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""},...e(f).nodes],!1})),n.cloneBefore({value:u.toString()})}if(!r.has(l)&&(n.root().walkDecls(l,(e=>{e.prop===l&&(""!==e.value.trim()?"true"===e.value.trim().toLowerCase()?e.value="initial":"false"===e.value.trim().toLowerCase()&&(e.value=" ",s.add(l)):s.add(l))})),r.add(l),!s.has(l))){let e;s.add(l),n.root().each((t=>{if("rule"===t.type&&":root"===t.selector)return e=t,!1})),e||(e=a.rule({selector:":root",source:n.source,raws:{before:"",after:"\n",between:" "}}),n.root().prepend(e));const t=a.decl({value:" ",prop:l,raws:{before:"\n\t"}});t.source=n.source,e.append(t)}n.remove()}}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";const creator=o=>{const t=Object.assign({functionName:"csstools-if"},o);return{postcssPlugin:"postcss-conditional-values",prepare(){const o=new Map,r=new Set,s=new Set;return{postcssPlugin:"postcss-conditional-values",Declaration(n,{postcss:a}){if(!n.value.toLowerCase().includes(t.functionName))return;const u=e(n.value);let l="";const i=[];let c=!1;const p=[];if(u.walk((o=>{if("function"===o.type&&o.nodes&&o.value.toLowerCase()===t.functionName)return o.nodes.forEach((o=>{l||"word"!==o.type||"--"!==o.value.slice(0,2)?l&&("word"!==o.type||"else"!==o.value?c?p.push(o):i.push(o):c=!0):l=e.stringify(o).trim()})),!1})),!l)return;if(i.some((e=>"div"===e.type&&","===e.value)))return;if(p.some((e=>"div"===e.type&&","===e.value)))return;const f=e.stringify(i).trim(),d=e.stringify(p).trim();if(f&&d){{const r=o.get(l)||0;o.set(l,r+1);const s=`${l}--${r}`;n.cloneBefore({prop:s,value:`var(${l}) ${d}`}),u.walk((o=>{if("function"===o.type&&o.nodes&&o.value.toLowerCase()===t.functionName)return o.value="var",o.nodes=[...e(s).nodes,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""},...e(f).nodes],!1})),n.cloneBefore({value:u.toString()})}if(!r.has(l)&&(n.root().walkDecls(l,(e=>{e.prop===l&&(""!==e.value.trim()?"true"===e.value.trim().toLowerCase()?e.value="initial":"false"===e.value.trim().toLowerCase()&&(e.value=" ",s.add(l)):s.add(l))})),r.add(l),!s.has(l))){let e;s.add(l),n.root().each((o=>{if("rule"===o.type&&":root"===o.selector)return e=o,!1})),e||(e=a.rule({selector:":root",source:n.source,raws:{before:"",after:"\n",between:" "}}),n.root().prepend(e));const o=a.decl({value:" ",prop:l,raws:{before:"\n\t"}});o.source=n.source,e.append(o)}n.remove()}}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-conditional-values/src/index.ts b/plugins/postcss-conditional-values/src/index.ts index c5055c5f1..7fb3213a8 100644 --- a/plugins/postcss-conditional-values/src/index.ts +++ b/plugins/postcss-conditional-values/src/index.ts @@ -1,4 +1,4 @@ -import type { Rule, PluginCreator } from 'postcss'; +import type { Rule, PluginCreator, Plugin } from 'postcss'; import valuesParser from 'postcss-value-parser'; export type pluginOptions = { @@ -10,13 +10,14 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-conditional-values', - prepare() { + prepare(): Plugin { const counters = new Map(); const didReplaceTrueFalse = new Set(); const didFindFalse = new Set(); return { - Declaration(decl, { postcss }) { + postcssPlugin: 'postcss-conditional-values', + Declaration(decl, { postcss }): void { if (!decl.value.toLowerCase().includes(pluginOptions.functionName)) { return; } diff --git a/plugins/postcss-custom-media/dist/index.cjs b/plugins/postcss-custom-media/dist/index.cjs index 54186e432..841bef7d1 100644 --- a/plugins/postcss-custom-media/dist/index.cjs +++ b/plugins/postcss-custom-media/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/cascade-layer-name-parser"),r=require("@csstools/css-tokenizer"),t=require("@csstools/media-query-list-parser");const n=e.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(r){const t=new Map,o=new Map,a=[];r.walkAtRules((r=>{if("layer"!==r.name.toLowerCase())return;{let e=r.parent;for(;e;){if("atrule"!==e.type||"layer"!==e.name.toLowerCase()){if(e===r.root())break;return}e=e.parent}}let s;if(r.nodes)s=normalizeLayerName(r.params,1);else{if(!r.params.trim())return;s=r.params}let i=e.parse(s);if(i?.length){{let e=r.parent;for(;e&&"atrule"===e.type&&"layer"===e.name.toLowerCase();){const r=o.get(e);r?(i=i.map((e=>r.concat(e))),e=e.parent):e=e.parent}}if(e.addLayerToModel(a,i),r.nodes){const e=i[0].concat(n);t.set(r,e),o.set(r,i[0])}}}));for(const r of t.values())e.addLayerToModel(a,[r]);const s=new WeakMap;for(const[e,r]of t)s.set(e,a.findIndex((e=>r.equal(e))));return s}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const o=new Set(["scope","container","layer"]);function isProcessableCustomMediaRule(e){if("custom-media"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes("--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("atrule"===r.type&&!o.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function removeCyclicReferences(e,r){const t=new Set;let n=r;for(;e.size>0;)try{toposort(Array.from(e.keys()),n);break}catch(r){if(!r._graphNode)throw r;e.delete(r._graphNode),t.add(r._graphNode),n=n.filter((e=>-1===e.indexOf(r._graphNode)))}return t}function toposort(e,r){let t=e.length;const n=new Array(t),o={};let a=t;const s=makeOutgoingEdges(r),i=makeNodesHash(e);for(;a--;)o[a]||visit(e[a],a,new Set);return n;function visit(e,r,a){if(a.has(e)){const r=new Error("Cyclic dependency"+JSON.stringify(e));throw r._graphNode=e,r}if(!i.has(e))return;if(o[r])return;o[r]=!0;let l=s.get(e)||new Set;if(l=Array.from(l),r=l.length){a.add(e);do{const e=l[--r];visit(e,i.get(e),a)}while(r);a.delete(e)}n[--t]=e}}function makeOutgoingEdges(e){const r=new Map;for(let t=0,n=e.length;t{throw new Error(`Unable to parse media query "${e}"`)}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n}const a=[[r.TokenType.Ident,"max-color",0,0,{value:"max-color"}],[r.TokenType.Colon,":",0,0,void 0],[r.TokenType.Number,"2147477350",0,0,{value:2147477350,type:r.NumberType.Integer}]],s=[[r.TokenType.Ident,"color",0,0,{value:"color"}],[r.TokenType.Colon,":",0,0,void 0],[r.TokenType.Number,"2147477350",0,0,{value:2147477350,type:r.NumberType.Integer}]];function replaceTrueAndFalseTokens(e){let t,n=[];for(let o=0;o{throw new Error(`Unable to parse media query "${r.stringify(...s)}"`)}}),l=t.parseFromTokens(r.cloneTokens(s),{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${r.stringify(...s)}"`)}});for(let e=0;e[e,a]))}}function getCustomMedia(e,r,t){const n=new Map,o=new Map,a=[],s=collectCascadeLayerOrder(e);e.walkAtRules((e=>{if(!isProcessableCustomMediaRule(e))return;const r=parseCustomMedia(e.params);if(!r)return;if(0===r.truthy.length)return;const i=(u=s,(l=e).parent&&"atrule"===l.parent.type&&"layer"===l.parent.name.toLowerCase()?u.has(l.parent)?u.get(l.parent)+1:0:1e7);var l,u;const c=o.get(r.name)??-1;if(i&&i>=c&&(o.set(r.name,i),n.set(r.name,{truthy:r.truthy,falsy:r.falsy}),a.push(...r.dependsOn)),!t.preserve){const r=e.parent;e.remove(),removeEmptyAncestorBlocks(r)}}));const i=removeCyclicReferences(n,a);for(const t of i.values())e.warn(r,`@custom-media rules have cyclic dependencies for "${t}"`);return n}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformAtMediaListTokens(e,r){const n=t.parse(e,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${e}"`)}}),o=n.map((e=>e.toString()));for(let e=0;et===e?n:{replaceWith:r}))}const s=transformComplexMediaQuery(t,r);if(s&&0!==s.length&&s[0].replaceWith!==a)return o.flatMap(((r,t)=>t===e?s:[{replaceWith:r}]))}return[]}function transformSimpleMediaQuery(e,r){if(!mediaQueryIsSimple(e))return null;let n=null;return e.walk((e=>{const o=e.node;if(!t.isMediaFeatureBoolean(o))return;const a=o.getName();if(!a.startsWith("--"))return!1;const s=r.get(a);return s?(n={replaceWith:s.truthy.map((e=>e.toString().trim())).join(",")},!1):void 0})),n}function transformComplexMediaQuery(e,r){let n=[];return e.walk((o=>{const i=o.node;if(!t.isMediaFeatureBoolean(i))return;const l=o.parent;if(!t.isMediaFeature(l))return;const u=i.getName();if(!u.startsWith("--"))return!1;const c=r.get(u);if(c){if(1===c.truthy.length&&mediaQueryIsSimple(c.truthy[0])){let r=null;if(c.truthy[0].walk((e=>{if(t.isMediaFeature(e.node))return r=e.node,!1})),r&&r.feature)return l.feature=r.feature,n=[{replaceWith:e.toString()}],!1}const r=t.newMediaFeaturePlain(a[0][4].value,a[2]);l.feature=r.feature;const o=e.toString(),i=t.newMediaFeaturePlain(s[0][4].value,s[2]);l.feature=i.feature;const u=e.toString();return n=[{replaceWith:o,encapsulateWith:c.truthy.map((e=>e.toString().trim())).join(",")},{replaceWith:u,encapsulateWith:c.falsy.map((e=>e.toString().trim())).join(",")}],!1}})),n}function mediaQueryIsSimple(e){if(t.isMediaQueryInvalid(e))return!1;if(t.isMediaQueryWithType(e))return!1;let r=!0;return e.walk((e=>{if(t.isMediaAnd(e.node)||t.isMediaOr(e.node)||t.isMediaNot(e.node)||t.isMediaConditionList(e.node)||t.isGeneralEnclosed(e.node))return r=!1,!1})),r}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-media] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-media] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-media",prepare(){const e=new WeakSet;let t=new Map;return{Once:(e,{result:n})=>{t=getCustomMedia(e,n,{preserve:r})},AtRule:(n,{result:o})=>{if(e.has(n))return;if("media"!==n.name.toLowerCase())return;if(!n.params)return;if(!n.params.includes("--"))return;let a=[];try{a=transformAtMediaListTokens(n.params,t)}catch(e){return void n.warn(o,`Failed to parse @custom-media params with error message: "${e instanceof Error?e.message:e}"`)}if(!a||0===a.length)return;if(1===a.length){if(n.params.trim()===a[0].replaceWith.trim())return;return e.add(n),n.cloneBefore({params:a[0].replaceWith.trim()}),r?void 0:void n.remove()}if(!!!a.find((e=>!!e.encapsulateWith)))return e.add(n),n.cloneBefore({params:a.map((e=>e.replaceWith)).join(",").trim()}),void(r||n.remove());a.forEach((r=>{if(!r.encapsulateWith)return void n.cloneBefore({params:r.replaceWith.trim()});const t=n.clone({params:r.replaceWith}),o=n.clone({params:r.encapsulateWith.trim(),nodes:[]});t.parent=void 0,o.parent=void 0,e.add(n),o.append(t),n.before(o)})),r||n.remove()}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("@csstools/cascade-layer-name-parser"),r=require("@csstools/css-tokenizer"),t=require("@csstools/media-query-list-parser");const n=e.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(r){const t=new Map,o=new Map,a=[];r.walkAtRules((r=>{if("layer"!==r.name.toLowerCase())return;{let e=r.parent;for(;e;){if("atrule"!==e.type||"layer"!==e.name.toLowerCase()){if(e===r.root())break;return}e=e.parent}}let s;if(r.nodes)s=normalizeLayerName(r.params,1);else{if(!r.params.trim())return;s=r.params}let i=e.parse(s);if(i?.length){{let e=r.parent;for(;e&&"atrule"===e.type&&"layer"===e.name.toLowerCase();){const r=o.get(e);r?(i=i.map((e=>r.concat(e))),e=e.parent):e=e.parent}}if(e.addLayerToModel(a,i),r.nodes){const e=i[0].concat(n);t.set(r,e),o.set(r,i[0])}}}));for(const r of t.values())e.addLayerToModel(a,[r]);const s=new WeakMap;for(const[e,r]of t)s.set(e,a.findIndex((e=>r.equal(e))));return s}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const o=new Set(["scope","container","layer"]);function isProcessableCustomMediaRule(e){if("custom-media"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes("--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("atrule"===r.type&&!o.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function removeCyclicReferences(e,r){const t=new Set;for(;e.size>0;){const n=findCyclicNode(Array.from(e.keys()),r);if(!n)return t;e.delete(n),t.add(n),r=r.filter((e=>-1===e.indexOf(n)))}return t}function findCyclicNode(e,r){let t=e.length;const n=new Array(t),o={};let a=t;const s=makeOutgoingEdges(r),i=makeNodesHash(e);for(;a--;)if(!o[a]){const r=visit(e[a],a,new Set);if(!r)continue;return r}function visit(e,r,a){if(a.has(e))return e;if(!i.has(e))return;if(o[r])return;o[r]=!0;const l=Array.from(s.get(e)||new Set);if(r=l.length){a.add(e);do{const e=l[--r],t=visit(e,i.get(e),a);if(t)return t}while(r);a.delete(e)}n[--t]=e}}function makeOutgoingEdges(e){const r=new Map;for(let t=0,n=e.length;t{throw new Error(`Unable to parse media query "${e}"`)}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n}const a=[[r.TokenType.Ident,"max-color",0,0,{value:"max-color"}],[r.TokenType.Colon,":",0,0,void 0],[r.TokenType.Number,"2147477350",0,0,{value:2147477350,type:r.NumberType.Integer}]],s=[[r.TokenType.Ident,"color",0,0,{value:"color"}],[r.TokenType.Colon,":",0,0,void 0],[r.TokenType.Number,"2147477350",0,0,{value:2147477350,type:r.NumberType.Integer}]];function replaceTrueAndFalseTokens(e){let t,n=[];for(let o=0;o{throw new Error(`Unable to parse media query "${r.stringify(...s)}"`)}}),l=t.parseFromTokens(r.cloneTokens(s),{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${r.stringify(...s)}"`)}});for(let e=0;e[a,e]))}}function getCustomMedia(e,r,t){const n=new Map,o=new Map,a=[],s=collectCascadeLayerOrder(e);e.walkAtRules((e=>{if(!isProcessableCustomMediaRule(e))return;const r=parseCustomMedia(e.params);if(!r)return;if(0===r.truthy.length)return;const i=(u=s,(l=e).parent&&"atrule"===l.parent.type&&"layer"===l.parent.name.toLowerCase()?u.has(l.parent)?u.get(l.parent)+1:0:1e7);var l,u;const c=o.get(r.name)??-1;if(i&&i>=c&&(o.set(r.name,i),n.set(r.name,{truthy:r.truthy,falsy:r.falsy}),a.push(...r.dependencies)),!t.preserve){const r=e.parent;e.remove(),removeEmptyAncestorBlocks(r)}}));const i=removeCyclicReferences(n,a);for(const t of i.values())e.warn(r,`@custom-media rules have cyclic dependencies for "${t}"`);return n}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformAtMediaListTokens(e,r){const n=t.parse(e,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${e}"`)}}),o=n.map((e=>e.toString()));for(let e=0;et===e?n:{replaceWith:r}))}const s=transformComplexMediaQuery(t,r);if(s&&0!==s.length&&s[0].replaceWith!==a)return o.flatMap(((r,t)=>t===e?s:[{replaceWith:r}]))}return[]}function transformSimpleMediaQuery(e,r){if(!mediaQueryIsSimple(e))return null;let n=null;return e.walk((e=>{const o=e.node;if(!t.isMediaFeatureBoolean(o))return;const a=o.getName();if(!a.startsWith("--"))return!1;const s=r.get(a);return s?(n={replaceWith:s.truthy.map((e=>e.toString().trim())).join(",")},!1):void 0})),n}function transformComplexMediaQuery(e,r){let n=[];return e.walk((o=>{const i=o.node;if(!t.isMediaFeatureBoolean(i))return;const l=o.parent;if(!t.isMediaFeature(l))return;const u=i.getName();if(!u.startsWith("--"))return!1;const c=r.get(u);if(c){if(1===c.truthy.length&&mediaQueryIsSimple(c.truthy[0])){let r=null;if(c.truthy[0].walk((e=>{if(t.isMediaFeature(e.node))return r=e.node,!1})),r&&r.feature)return l.feature=r.feature,n=[{replaceWith:e.toString()}],!1}const r=t.newMediaFeaturePlain(a[0][4].value,a[2]);l.feature=r.feature;const o=e.toString(),i=t.newMediaFeaturePlain(s[0][4].value,s[2]);l.feature=i.feature;const u=e.toString();return n=[{replaceWith:o,encapsulateWith:c.truthy.map((e=>e.toString().trim())).join(",")},{replaceWith:u,encapsulateWith:c.falsy.map((e=>e.toString().trim())).join(",")}],!1}})),n}function mediaQueryIsSimple(e){if(t.isMediaQueryInvalid(e))return!1;if(t.isMediaQueryWithType(e))return!1;let r=!0;return e.walk((e=>{if(t.isMediaAnd(e.node)||t.isMediaOr(e.node)||t.isMediaNot(e.node)||t.isMediaConditionList(e.node)||t.isGeneralEnclosed(e.node))return r=!1,!1})),r}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-media] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-media] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-media",prepare(){const e=new WeakSet;let t=new Map;return{postcssPlugin:"postcss-custom-media",Once(e,{result:n}){t=getCustomMedia(e,n,{preserve:r})},AtRule(n,{result:o}){if(e.has(n))return;if("media"!==n.name.toLowerCase())return;if(!n.params)return;if(!n.params.includes("--"))return;let a=[];try{a=transformAtMediaListTokens(n.params,t)}catch(e){return void n.warn(o,`Failed to parse @custom-media params with error message: "${e instanceof Error?e.message:e}"`)}if(!a||0===a.length)return;if(1===a.length){if(n.params.trim()===a[0].replaceWith.trim())return;return e.add(n),n.cloneBefore({params:a[0].replaceWith.trim()}),r?void 0:void n.remove()}if(!!!a.find((e=>!!e.encapsulateWith)))return e.add(n),n.cloneBefore({params:a.map((e=>e.replaceWith)).join(",").trim()}),void(r||n.remove());a.forEach((r=>{if(!r.encapsulateWith)return void n.cloneBefore({params:r.replaceWith.trim()});const t=n.clone({params:r.replaceWith}),o=n.clone({params:r.encapsulateWith.trim(),nodes:[]});t.parent=void 0,o.parent=void 0,e.add(n),o.append(t),n.before(o)})),r||n.remove()}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-custom-media/dist/index.mjs b/plugins/postcss-custom-media/dist/index.mjs index 0463fa6b8..1740c2e26 100644 --- a/plugins/postcss-custom-media/dist/index.mjs +++ b/plugins/postcss-custom-media/dist/index.mjs @@ -1 +1 @@ -import{parse as e,addLayerToModel as r}from"@csstools/cascade-layer-name-parser";import{tokenizer as t,TokenType as n,NumberType as o,cloneTokens as a,stringify as s}from"@csstools/css-tokenizer";import{parseFromTokens as i,parse as l,isMediaFeatureBoolean as u,isMediaFeature as c,newMediaFeaturePlain as p,isMediaQueryInvalid as f,isMediaQueryWithType as m,isMediaAnd as d,isMediaOr as h,isMediaNot as y,isMediaConditionList as g,isGeneralEnclosed as v}from"@csstools/media-query-list-parser";const w=e("csstools-implicit-layer")[0];function collectCascadeLayerOrder(t){const n=new Map,o=new Map,a=[];t.walkAtRules((t=>{if("layer"!==t.name.toLowerCase())return;{let e=t.parent;for(;e;){if("atrule"!==e.type||"layer"!==e.name.toLowerCase()){if(e===t.root())break;return}e=e.parent}}let s;if(t.nodes)s=normalizeLayerName(t.params,1);else{if(!t.params.trim())return;s=t.params}let i=e(s);if(i?.length){{let e=t.parent;for(;e&&"atrule"===e.type&&"layer"===e.name.toLowerCase();){const r=o.get(e);r?(i=i.map((e=>r.concat(e))),e=e.parent):e=e.parent}}if(r(a,i),t.nodes){const e=i[0].concat(w);n.set(t,e),o.set(t,i[0])}}}));for(const e of n.values())r(a,[e]);const s=new WeakMap;for(const[e,r]of n)s.set(e,a.findIndex((e=>r.equal(e))));return s}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const C=new Set(["scope","container","layer"]);function isProcessableCustomMediaRule(e){if("custom-media"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes("--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("atrule"===r.type&&!C.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function removeCyclicReferences(e,r){const t=new Set;let n=r;for(;e.size>0;)try{toposort(Array.from(e.keys()),n);break}catch(r){if(!r._graphNode)throw r;e.delete(r._graphNode),t.add(r._graphNode),n=n.filter((e=>-1===e.indexOf(r._graphNode)))}return t}function toposort(e,r){let t=e.length;const n=new Array(t),o={};let a=t;const s=makeOutgoingEdges(r),i=makeNodesHash(e);for(;a--;)o[a]||visit(e[a],a,new Set);return n;function visit(e,r,a){if(a.has(e)){const r=new Error("Cyclic dependency"+JSON.stringify(e));throw r._graphNode=e,r}if(!i.has(e))return;if(o[r])return;o[r]=!0;let l=s.get(e)||new Set;if(l=Array.from(l),r=l.length){a.add(e);do{const e=l[--r];visit(e,i.get(e),a)}while(r);a.delete(e)}n[--t]=e}}function makeOutgoingEdges(e){const r=new Map;for(let t=0,n=e.length;t{throw new Error(`Unable to parse media query "${e}"`)}}),n=[];for(;!r.endOfFile();)n.push(r.nextToken());return n}const W=[[n.Ident,"max-color",0,0,{value:"max-color"}],[n.Colon,":",0,0,void 0],[n.Number,"2147477350",0,0,{value:2147477350,type:o.Integer}]],k=[[n.Ident,"color",0,0,{value:"color"}],[n.Colon,":",0,0,void 0],[n.Number,"2147477350",0,0,{value:2147477350,type:o.Integer}]];function replaceTrueAndFalseTokens(e){let r,t=[];for(let o=0;o{throw new Error(`Unable to parse media query "${s(...l)}"`)}}),c=i(a(l),{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${s(...l)}"`)}});for(let e=0;e[e,o]))}}function getCustomMedia(e,r,t){const n=new Map,o=new Map,a=[],s=collectCascadeLayerOrder(e);e.walkAtRules((e=>{if(!isProcessableCustomMediaRule(e))return;const r=parseCustomMedia(e.params);if(!r)return;if(0===r.truthy.length)return;const i=(u=s,(l=e).parent&&"atrule"===l.parent.type&&"layer"===l.parent.name.toLowerCase()?u.has(l.parent)?u.get(l.parent)+1:0:1e7);var l,u;const c=o.get(r.name)??-1;if(i&&i>=c&&(o.set(r.name,i),n.set(r.name,{truthy:r.truthy,falsy:r.falsy}),a.push(...r.dependsOn)),!t.preserve){const r=e.parent;e.remove(),removeEmptyAncestorBlocks(r)}}));const i=removeCyclicReferences(n,a);for(const t of i.values())e.warn(r,`@custom-media rules have cyclic dependencies for "${t}"`);return n}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformAtMediaListTokens(e,r){const t=l(e,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${e}"`)}}),n=t.map((e=>e.toString()));for(let e=0;en===e?t:{replaceWith:r}))}const s=transformComplexMediaQuery(o,r);if(s&&0!==s.length&&s[0].replaceWith!==a)return n.flatMap(((r,t)=>t===e?s:[{replaceWith:r}]))}return[]}function transformSimpleMediaQuery(e,r){if(!mediaQueryIsSimple(e))return null;let t=null;return e.walk((e=>{const n=e.node;if(!u(n))return;const o=n.getName();if(!o.startsWith("--"))return!1;const a=r.get(o);return a?(t={replaceWith:a.truthy.map((e=>e.toString().trim())).join(",")},!1):void 0})),t}function transformComplexMediaQuery(e,r){let t=[];return e.walk((n=>{const o=n.node;if(!u(o))return;const a=n.parent;if(!c(a))return;const s=o.getName();if(!s.startsWith("--"))return!1;const i=r.get(s);if(i){if(1===i.truthy.length&&mediaQueryIsSimple(i.truthy[0])){let r=null;if(i.truthy[0].walk((e=>{if(c(e.node))return r=e.node,!1})),r&&r.feature)return a.feature=r.feature,t=[{replaceWith:e.toString()}],!1}const r=p(W[0][4].value,W[2]);a.feature=r.feature;const n=e.toString(),o=p(k[0][4].value,k[2]);a.feature=o.feature;const s=e.toString();return t=[{replaceWith:n,encapsulateWith:i.truthy.map((e=>e.toString().trim())).join(",")},{replaceWith:s,encapsulateWith:i.falsy.map((e=>e.toString().trim())).join(",")}],!1}})),t}function mediaQueryIsSimple(e){if(f(e))return!1;if(m(e))return!1;let r=!0;return e.walk((e=>{if(d(e.node)||h(e.node)||y(e.node)||g(e.node)||v(e.node))return r=!1,!1})),r}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-media] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-media] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-media",prepare(){const e=new WeakSet;let t=new Map;return{Once:(e,{result:n})=>{t=getCustomMedia(e,n,{preserve:r})},AtRule:(n,{result:o})=>{if(e.has(n))return;if("media"!==n.name.toLowerCase())return;if(!n.params)return;if(!n.params.includes("--"))return;let a=[];try{a=transformAtMediaListTokens(n.params,t)}catch(e){return void n.warn(o,`Failed to parse @custom-media params with error message: "${e instanceof Error?e.message:e}"`)}if(!a||0===a.length)return;if(1===a.length){if(n.params.trim()===a[0].replaceWith.trim())return;return e.add(n),n.cloneBefore({params:a[0].replaceWith.trim()}),r?void 0:void n.remove()}if(!!!a.find((e=>!!e.encapsulateWith)))return e.add(n),n.cloneBefore({params:a.map((e=>e.replaceWith)).join(",").trim()}),void(r||n.remove());a.forEach((r=>{if(!r.encapsulateWith)return void n.cloneBefore({params:r.replaceWith.trim()});const t=n.clone({params:r.replaceWith}),o=n.clone({params:r.encapsulateWith.trim(),nodes:[]});t.parent=void 0,o.parent=void 0,e.add(n),o.append(t),n.before(o)})),r||n.remove()}}}}};creator.postcss=!0;export{creator as default}; +import{parse as e,addLayerToModel as r}from"@csstools/cascade-layer-name-parser";import{tokenizer as t,TokenType as n,NumberType as o,cloneTokens as a,stringify as s}from"@csstools/css-tokenizer";import{parseFromTokens as i,parse as l,isMediaFeatureBoolean as u,isMediaFeature as c,newMediaFeaturePlain as f,isMediaQueryInvalid as m,isMediaQueryWithType as p,isMediaAnd as d,isMediaOr as h,isMediaNot as y,isMediaConditionList as v,isGeneralEnclosed as g}from"@csstools/media-query-list-parser";const w=e("csstools-implicit-layer")[0];function collectCascadeLayerOrder(t){const n=new Map,o=new Map,a=[];t.walkAtRules((t=>{if("layer"!==t.name.toLowerCase())return;{let e=t.parent;for(;e;){if("atrule"!==e.type||"layer"!==e.name.toLowerCase()){if(e===t.root())break;return}e=e.parent}}let s;if(t.nodes)s=normalizeLayerName(t.params,1);else{if(!t.params.trim())return;s=t.params}let i=e(s);if(i?.length){{let e=t.parent;for(;e&&"atrule"===e.type&&"layer"===e.name.toLowerCase();){const r=o.get(e);r?(i=i.map((e=>r.concat(e))),e=e.parent):e=e.parent}}if(r(a,i),t.nodes){const e=i[0].concat(w);n.set(t,e),o.set(t,i[0])}}}));for(const e of n.values())r(a,[e]);const s=new WeakMap;for(const[e,r]of n)s.set(e,a.findIndex((e=>r.equal(e))));return s}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const C=new Set(["scope","container","layer"]);function isProcessableCustomMediaRule(e){if("custom-media"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes("--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("atrule"===r.type&&!C.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function removeCyclicReferences(e,r){const t=new Set;for(;e.size>0;){const n=findCyclicNode(Array.from(e.keys()),r);if(!n)return t;e.delete(n),t.add(n),r=r.filter((e=>-1===e.indexOf(n)))}return t}function findCyclicNode(e,r){let t=e.length;const n=new Array(t),o={};let a=t;const s=makeOutgoingEdges(r),i=makeNodesHash(e);for(;a--;)if(!o[a]){const r=visit(e[a],a,new Set);if(!r)continue;return r}function visit(e,r,a){if(a.has(e))return e;if(!i.has(e))return;if(o[r])return;o[r]=!0;const l=Array.from(s.get(e)||new Set);if(r=l.length){a.add(e);do{const e=l[--r],t=visit(e,i.get(e),a);if(t)return t}while(r);a.delete(e)}n[--t]=e}}function makeOutgoingEdges(e){const r=new Map;for(let t=0,n=e.length;t{throw new Error(`Unable to parse media query "${e}"`)}}),n=[];for(;!r.endOfFile();)n.push(r.nextToken());return n}const W=[[n.Ident,"max-color",0,0,{value:"max-color"}],[n.Colon,":",0,0,void 0],[n.Number,"2147477350",0,0,{value:2147477350,type:o.Integer}]],k=[[n.Ident,"color",0,0,{value:"color"}],[n.Colon,":",0,0,void 0],[n.Number,"2147477350",0,0,{value:2147477350,type:o.Integer}]];function replaceTrueAndFalseTokens(e){let r,t=[];for(let o=0;o{throw new Error(`Unable to parse media query "${s(...l)}"`)}}),c=i(a(l),{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${s(...l)}"`)}});for(let e=0;e[o,e]))}}function getCustomMedia(e,r,t){const n=new Map,o=new Map,a=[],s=collectCascadeLayerOrder(e);e.walkAtRules((e=>{if(!isProcessableCustomMediaRule(e))return;const r=parseCustomMedia(e.params);if(!r)return;if(0===r.truthy.length)return;const i=(u=s,(l=e).parent&&"atrule"===l.parent.type&&"layer"===l.parent.name.toLowerCase()?u.has(l.parent)?u.get(l.parent)+1:0:1e7);var l,u;const c=o.get(r.name)??-1;if(i&&i>=c&&(o.set(r.name,i),n.set(r.name,{truthy:r.truthy,falsy:r.falsy}),a.push(...r.dependencies)),!t.preserve){const r=e.parent;e.remove(),removeEmptyAncestorBlocks(r)}}));const i=removeCyclicReferences(n,a);for(const t of i.values())e.warn(r,`@custom-media rules have cyclic dependencies for "${t}"`);return n}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformAtMediaListTokens(e,r){const t=l(e,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw new Error(`Unable to parse media query "${e}"`)}}),n=t.map((e=>e.toString()));for(let e=0;en===e?t:{replaceWith:r}))}const s=transformComplexMediaQuery(o,r);if(s&&0!==s.length&&s[0].replaceWith!==a)return n.flatMap(((r,t)=>t===e?s:[{replaceWith:r}]))}return[]}function transformSimpleMediaQuery(e,r){if(!mediaQueryIsSimple(e))return null;let t=null;return e.walk((e=>{const n=e.node;if(!u(n))return;const o=n.getName();if(!o.startsWith("--"))return!1;const a=r.get(o);return a?(t={replaceWith:a.truthy.map((e=>e.toString().trim())).join(",")},!1):void 0})),t}function transformComplexMediaQuery(e,r){let t=[];return e.walk((n=>{const o=n.node;if(!u(o))return;const a=n.parent;if(!c(a))return;const s=o.getName();if(!s.startsWith("--"))return!1;const i=r.get(s);if(i){if(1===i.truthy.length&&mediaQueryIsSimple(i.truthy[0])){let r=null;if(i.truthy[0].walk((e=>{if(c(e.node))return r=e.node,!1})),r&&r.feature)return a.feature=r.feature,t=[{replaceWith:e.toString()}],!1}const r=f(W[0][4].value,W[2]);a.feature=r.feature;const n=e.toString(),o=f(k[0][4].value,k[2]);a.feature=o.feature;const s=e.toString();return t=[{replaceWith:n,encapsulateWith:i.truthy.map((e=>e.toString().trim())).join(",")},{replaceWith:s,encapsulateWith:i.falsy.map((e=>e.toString().trim())).join(",")}],!1}})),t}function mediaQueryIsSimple(e){if(m(e))return!1;if(p(e))return!1;let r=!0;return e.walk((e=>{if(d(e.node)||h(e.node)||y(e.node)||v(e.node)||g(e.node))return r=!1,!1})),r}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-media] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-media] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-media",prepare(){const e=new WeakSet;let t=new Map;return{postcssPlugin:"postcss-custom-media",Once(e,{result:n}){t=getCustomMedia(e,n,{preserve:r})},AtRule(n,{result:o}){if(e.has(n))return;if("media"!==n.name.toLowerCase())return;if(!n.params)return;if(!n.params.includes("--"))return;let a=[];try{a=transformAtMediaListTokens(n.params,t)}catch(e){return void n.warn(o,`Failed to parse @custom-media params with error message: "${e instanceof Error?e.message:e}"`)}if(!a||0===a.length)return;if(1===a.length){if(n.params.trim()===a[0].replaceWith.trim())return;return e.add(n),n.cloneBefore({params:a[0].replaceWith.trim()}),r?void 0:void n.remove()}if(!!!a.find((e=>!!e.encapsulateWith)))return e.add(n),n.cloneBefore({params:a.map((e=>e.replaceWith)).join(",").trim()}),void(r||n.remove());a.forEach((r=>{if(!r.encapsulateWith)return void n.cloneBefore({params:r.replaceWith.trim()});const t=n.clone({params:r.replaceWith}),o=n.clone({params:r.encapsulateWith.trim(),nodes:[]});t.parent=void 0,o.parent=void 0,e.add(n),o.append(t),n.before(o)})),r||n.remove()}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-custom-media/src/cascade-layers.ts b/plugins/postcss-custom-media/src/cascade-layers.ts index 31e9f250f..79751908e 100644 --- a/plugins/postcss-custom-media/src/cascade-layers.ts +++ b/plugins/postcss-custom-media/src/cascade-layers.ts @@ -3,7 +3,7 @@ import { LayerName, parse as parseCascadeLayerNames, addLayerToModel } from '@cs const implicitLayerNameForCloning = parseCascadeLayerNames('csstools-implicit-layer')[0]; -export function collectCascadeLayerOrder(root: Root) { +export function collectCascadeLayerOrder(root: Root): WeakMap { const references: Map = new Map(); const referencesForLayerNames: Map = new Map(); @@ -118,7 +118,7 @@ export function cascadeLayerNumberForNode(node: Node, layers: WeakMap = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-custom-media', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); let customMedia: Map, falsy: Array }> = new Map(); return { - Once: (root, { result }) => { + postcssPlugin: 'postcss-custom-media', + Once(root, { result }): void { customMedia = getCustomMedia(root, result, { preserve: preserve }); }, - AtRule: (atRule, { result }) => { + AtRule(atRule, { result }): void { if (transformedNodes.has(atRule)) { return; } diff --git a/plugins/postcss-custom-media/src/toposort.ts b/plugins/postcss-custom-media/src/toposort.ts index 9b944c3cb..fff20af35 100644 --- a/plugins/postcss-custom-media/src/toposort.ts +++ b/plugins/postcss-custom-media/src/toposort.ts @@ -28,32 +28,23 @@ export function removeCyclicReferences(nodes: Map, edges: Array>): Set { const cyclicReferences: Set = new Set(); - // eslint-disable-next-line no-constant-condition - let _edges = edges; while (nodes.size > 0) { - try { - toposort(Array.from(nodes.keys()), _edges); - break; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (e: any) { - /* see the hack below */ - if (e['_graphNode']) { - - nodes.delete(e['_graphNode']); - cyclicReferences.add(e['_graphNode']); - _edges = _edges.filter((x) => { - return x.indexOf(e['_graphNode']) === -1; - }); - } else { - throw e; - } + const cyclicNode = findCyclicNode(Array.from(nodes.keys()), edges); + if (!cyclicNode) { + return cyclicReferences; } + + nodes.delete(cyclicNode); + cyclicReferences.add(cyclicNode); + edges = edges.filter((x) => { + return x.indexOf(cyclicNode) === -1; + }); } return cyclicReferences; } -function toposort(nodes: Array, edges: Array>): Array { +function findCyclicNode(nodes: Array, edges: Array>): string | undefined { let cursor = nodes.length; const sorted: Array = new Array(cursor); const visited: Record = {}; @@ -64,19 +55,18 @@ function toposort(nodes: Array, edges: Array>): Array) { + function visit(node: string, j: number, predecessors: Set): string | undefined { if (predecessors.has(node)) { - const err = new Error('Cyclic dependency' + JSON.stringify(node)); - // @ts-expect-error custom field on object - err['_graphNode'] = node; /* a hack to communicate which node is causing the cyclic error */ - - throw err; + return node; } if (!nodesHash.has(node)) { @@ -86,17 +76,22 @@ function toposort(nodes: Array, edges: Array>): Array = Array.from(outgoingEdges.get(node) || new Set()); // eslint-disable-next-line no-cond-assign if (j = outgoing.length) { predecessors.add(node); do { const child = outgoing[--j]; - visit(child, nodesHash.get(child), predecessors); + const cyclicNode = visit(child, nodesHash.get(child)!, predecessors); + if (!cyclicNode) { + continue; + } + + return cyclicNode; } while (j); predecessors.delete(node); } @@ -105,8 +100,8 @@ function toposort(nodes: Array, edges: Array>): Array>) { - const edges = new Map(); +function makeOutgoingEdges(arr: Array>): Map> { + const edges: Map> = new Map(); for (let i = 0, len = arr.length; i < len; i++) { const edge = arr[i]; if (!edges.has(edge[0])) { @@ -115,12 +110,12 @@ function makeOutgoingEdges(arr: Array>) { if (!edges.has(edge[1])) { edges.set(edge[1], new Set()); } - edges.get(edge[0]).add(edge[1]); + edges.get(edge[0])!.add(edge[1]); } return edges; } -function makeNodesHash(arr: Array) { +function makeNodesHash(arr: Array): Map { const res = new Map(); for (let i = 0, len = arr.length; i < len; i++) { res.set(arr[i], i); diff --git a/plugins/postcss-custom-media/src/transform-at-media/custom-media.ts b/plugins/postcss-custom-media/src/transform-at-media/custom-media.ts index bd9de7806..17fa02e82 100644 --- a/plugins/postcss-custom-media/src/transform-at-media/custom-media.ts +++ b/plugins/postcss-custom-media/src/transform-at-media/custom-media.ts @@ -3,7 +3,7 @@ import { parseFromTokens, MediaQuery } from '@csstools/media-query-list-parser'; import { atMediaParamsTokens } from '../transform-at-media/at-media-params-tokens'; import { replaceTrueAndFalseTokens } from './true-and-false'; -export function parseCustomMedia(params: string): { name: string, truthy: Array, falsy: Array, dependsOn: Array<[string, string]> } | false { +export function parseCustomMedia(params: string): { name: string, truthy: Array, falsy: Array, dependencies: Array<[string, string]> } | false { const tokens = atMediaParamsTokens(params); const customMediaReferences: Set = new Set(); @@ -62,8 +62,8 @@ export function parseCustomMedia(params: string): { name: string, truthy: Array< name: name, truthy: mediaQueryListTruthy, falsy: mediaQueryListFalsy, - dependsOn: Array.from(customMediaReferences).map((x) => { - return [x, name]; + dependencies: Array.from(customMediaReferences).map((x) => { + return [name, x]; }), }; } diff --git a/plugins/postcss-custom-properties/dist/index.cjs b/plugins/postcss-custom-properties/dist/index.cjs index 118036ce2..9fa18ce50 100644 --- a/plugins/postcss-custom-properties/dist/index.cjs +++ b/plugins/postcss-custom-properties/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser"),t=require("@csstools/cascade-layer-name-parser"),r=require("@csstools/utilities");const o=t.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const r=new Map,n=new Map,s=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let t=e.parent;for(;t;){if("atrule"!==t.type||"layer"!==t.name.toLowerCase()){if(t===e.root())break;return}t=t.parent}}let a;if(e.nodes)a=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;a=e.params}let i=t.parse(a);if(i?.length){{let t=e.parent;for(;t&&"atrule"===t.type&&"layer"===t.name.toLowerCase();){const e=n.get(t);e?(i=i.map((t=>e.concat(t))),t=t.parent):t=t.parent}}if(t.addLayerToModel(s,i),e.nodes){const t=i[0].concat(o);r.set(e,t),n.set(e,i[0])}}}));for(const e of r.values())t.addLayerToModel(s,[e]);const a=new WeakMap;for(const[e,t]of r)a.set(e,s.findIndex((e=>t.equal(e))));return a}function normalizeLayerName(e,t){return e.trim()?e:"csstools-anon-layer--"+t++}const n=/(!\s*)?postcss-custom-properties:\s*off\b/i,s=new WeakMap;function isBlockIgnored(e){if(!e||!e.nodes)return!1;if(s.has(e))return s.get(e);const t=e.some((e=>isIgnoreComment(e,n)));return s.set(e,t),t}const a=/(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i;function isDeclarationIgnored(e){return!!e&&(!!isBlockIgnored(e.parent)||isIgnoreComment(e.prev(),a))}function isIgnoreComment(e,t){return!!e&&"comment"===e.type&&t.test(e.text)}const i=new Set(["layer"]);function isProcessableRule(e){let t=e.parent;for(;t;){if("atrule"===t.type&&!i.has(t.name.toLowerCase()))return!1;t=t.parent}return!0}const l=/^html$/i,c=/^:where\(html\)$/i,u=/^:root$/i,p=/^:where\(:root\)$/i,f=/(html|:root)/i,d=/^var$/i;function isVarFunction(e){return"function"===e.type&&d.test(e.value)&&Object(e.nodes).length>0}const w=/\bvar\(/i;function removeCyclicReferences(e,t){const r=new Set;let o=t;for(;e.size>0;)try{toposort(Array.from(e.keys()),o);break}catch(t){if(!t._graphNode)throw t;e.delete(t._graphNode),r.add(t._graphNode),o=o.filter((e=>-1===e.indexOf(t._graphNode)))}return r}function toposort(e,t){let r=e.length;const o=new Array(r),n={};let s=r;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(;s--;)n[s]||visit(e[s],s,new Set);return o;function visit(e,t,s){if(s.has(e)){const t=new Error("Cyclic dependency"+JSON.stringify(e));throw t._graphNode=e,t}if(!i.has(e))return;if(n[t])return;n[t]=!0;let l=a.get(e)||new Set;if(l=Array.from(l),t=l.length){s.add(e);do{const e=l[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}o[--r]=e}}function makeOutgoingEdges(e){const t=new Map;for(let r=0,o=e.length;r{f.test(e.selector)&&e.nodes?.length&&isProcessableRule(e)&&(isBlockIgnored(e)||e.selectors.forEach((t=>{let r=-1;if(c.test(t)||p.test(t))r=0;else if(l.test(t))r=1;else{if(!u.test(t))return;r=2}const a=(f=s,((i=e).parent&&"atrule"===i.parent.type&&"layer"===i.parent.name.toLowerCase()?f.has(i.parent)?f.get(i.parent)+1:0:1e7)+10+r);var i,f;e.each((e=>{if("decl"!==e.type)return;if(!e.variable||isDeclarationIgnored(e))return;if("initial"===e.value.toLowerCase().trim())return;const t=n.get(e.prop)??-1;a>=t&&(n.set(e.prop,a),o.set(e.prop,e.value))}))})))}));const a=[],i=new Map;for(const[t,n]of o.entries()){const o=parseOrCached(n,r);e.walk(o.nodes,(e=>{if(isVarFunction(e)){const[r]=e.nodes.filter((e=>"word"===e.type));a.push([r.value,t])}})),i.set(t,o)}return removeCyclicReferences(i,a),i}function transformValueAST(t,r,o){if(!t.nodes?.length)return"";const n=new Map;return t.nodes.forEach((e=>{n.set(e,t)})),e.walk(t.nodes,(e=>{"nodes"in e&&e.nodes.length&&e.nodes.forEach((t=>{n.set(t,e)}))})),e.walk(t.nodes,(t=>{if(!isVarFunction(t))return;const[s,...a]=t.nodes.filter((e=>"div"!==e.type)),{value:i}=s,l=n.get(t);if(!l)return;const c=l.nodes.indexOf(t);if(-1===c)return;let u=!1;a&&e.walk(a,(e=>{if(isVarFunction(e)){const[t]=e.nodes.filter((e=>"word"===e.type));if(r.has(t.value)||o.has(t.value))return;return u=!0,!1}}));let p=o.get(i)?.nodes??r.get(i)?.nodes;p||!a.length||u||(p=t.nodes.slice(t.nodes.indexOf(a[0]))),void 0!==p&&(p.length?(l.nodes.splice(c,1,...p),l.nodes.forEach((e=>n.set(e,l)))):(l.nodes.splice(c,1,{type:"comment",value:"",sourceIndex:t.sourceIndex,sourceEndIndex:t.sourceEndIndex}),l.nodes.forEach((e=>n.set(e,l)))))}),!0),e.stringify(t.nodes)}function transformProperties(t,r,o,n,s){if(isTransformableDecl(t)&&!isDeclarationIgnored(t)){const n=t.value;let a=transformValueAST(e(n),r,o);const i=new Set;for(;w.test(a)&&!i.has(a);){i.add(a);a=transformValueAST(e(a),r,o)}if(a!==n){if(parentHasExactFallback(t,a))return void(s.preserve||t.remove());if(s.preserve){const e=t.cloneBefore({value:a});hasTrailingComment(e)&&e.raws?.value&&(e.raws.value.value=e.value.replace(v,"$1"),e.raws.value.raw=e.raws.value.value+e.raws.value.raw.replace(v,"$2"))}else t.value=a,hasTrailingComment(t)&&t.raws?.value&&(t.raws.value.value=t.value.replace(v,"$1"),t.raws.value.raw=t.raws.value.value+t.raws.value.raw.replace(v,"$2"))}}}const isTransformableDecl=e=>!e.variable&&e.value.includes("--")&&e.value.toLowerCase().includes("var("),hasTrailingComment=e=>"value"in Object(Object(e.raws).value)&&"raw"in(e.raws?.value??{})&&v.test(e.raws.value?.raw??""),v=/^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/;function parentHasExactFallback(e,t){if(!e||!e.parent)return!1;let r=!1;const o=e.parent.index(e);return e.parent.each(((n,s)=>n!==e&&(!(s>=o)&&void("decl"===n.type&&n.prop.toLowerCase()===e.prop.toLowerCase()&&n.value===t&&(r=!0))))),r}const m=/^initial$/i,h=/(?:\bvar\()|(?:\(top: var\(--f\))/i,creator=e=>{const t=!("preserve"in Object(e))||Boolean(e?.preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-properties] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-properties] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-properties",prepare:()=>{let e=new Map;const o=new Map;return{Once:t=>{e=getCustomPropertiesFromRoot(t,o)},Declaration:n=>{if(!w.test(n.value))return;if(r.hasSupportsAtRuleAncestor(n,h))return;const s=new Map;t&&n.parent&&n.parent.each((e=>{"decl"===e.type&&e.variable&&n!==e&&(isDeclarationIgnored(e)||(m.test(e.value)?s.delete(e.prop):s.set(e.prop,parseOrCached(e.value,o))))})),transformProperties(n,e,s,0,{preserve:t})}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser"),t=require("@csstools/cascade-layer-name-parser"),r=require("@csstools/utilities");const n=t.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const r=new Map,s=new Map,o=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let t=e.parent;for(;t;){if("atrule"!==t.type||"layer"!==t.name.toLowerCase()){if(t===e.root())break;return}t=t.parent}}let a;if(e.nodes)a=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;a=e.params}let i=t.parse(a);if(i?.length){{let t=e.parent;for(;t&&"atrule"===t.type&&"layer"===t.name.toLowerCase();){const e=s.get(t);e?(i=i.map((t=>e.concat(t))),t=t.parent):t=t.parent}}if(t.addLayerToModel(o,i),e.nodes){const t=i[0].concat(n);r.set(e,t),s.set(e,i[0])}}}));for(const e of r.values())t.addLayerToModel(o,[e]);const a=new WeakMap;for(const[e,t]of r)a.set(e,o.findIndex((e=>t.equal(e))));return a}function normalizeLayerName(e,t){return e.trim()?e:"csstools-anon-layer--"+t++}const s=/(!\s*)?postcss-custom-properties:\s*off\b/i,o=new WeakMap;function isBlockIgnored(e){if(!e||!e.nodes)return!1;if(o.has(e))return o.get(e);const t=e.some((e=>isIgnoreComment(e,s)));return o.set(e,t),t}const a=/(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i;function isDeclarationIgnored(e){return!!e&&(!!isBlockIgnored(e.parent)||isIgnoreComment(e.prev(),a))}function isIgnoreComment(e,t){return!!e&&"comment"===e.type&&t.test(e.text)}const i=new Set(["layer"]);function isProcessableRule(e){let t=e.parent;for(;t;){if("atrule"===t.type&&!i.has(t.name.toLowerCase()))return!1;t=t.parent}return!0}const l=/^html$/i,c=/^:where\(html\)$/i,u=/^:root$/i,p=/^:where\(:root\)$/i,f=/(html|:root)/i,d=/^var$/i;function isVarFunction(e){return"function"===e.type&&d.test(e.value)&&Object(e.nodes).length>0}const w=/\bvar\(/i;function removeCyclicReferences(e,t){const r=new Set;for(;e.size>0;){const n=findCyclicNode(Array.from(e.keys()),t);if(!n)return r;e.delete(n),r.add(n),t=t.filter((e=>-1===e.indexOf(n)))}return r}function findCyclicNode(e,t){let r=e.length;const n=new Array(r),s={};let o=r;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(;o--;)if(!s[o]){const t=visit(e[o],o,new Set);if(!t)continue;return t}function visit(e,t,o){if(o.has(e))return e;if(!i.has(e))return;if(s[t])return;s[t]=!0;const l=Array.from(a.get(e)||new Set);if(t=l.length){o.add(e);do{const e=l[--t],r=visit(e,i.get(e),o);if(r)return r}while(t);o.delete(e)}n[--r]=e}}function makeOutgoingEdges(e){const t=new Map;for(let r=0,n=e.length;r{f.test(e.selector)&&e.nodes?.length&&isProcessableRule(e)&&(isBlockIgnored(e)||e.selectors.forEach((t=>{let r=-1;if(c.test(t)||p.test(t))r=0;else if(l.test(t))r=1;else{if(!u.test(t))return;r=2}const a=(f=o,((i=e).parent&&"atrule"===i.parent.type&&"layer"===i.parent.name.toLowerCase()?f.has(i.parent)?f.get(i.parent)+1:0:1e7)+10+r);var i,f;e.each((e=>{if("decl"!==e.type)return;if(!e.variable||isDeclarationIgnored(e))return;if("initial"===e.value.toLowerCase().trim())return;const t=s.get(e.prop)??-1;a>=t&&(s.set(e.prop,a),n.set(e.prop,e.value))}))})))}));const a=[],i=new Map;for(const[t,s]of n.entries()){const n=parseOrCached(s,r);e.walk(n.nodes,(e=>{if(isVarFunction(e)){const[r]=e.nodes.filter((e=>"word"===e.type));a.push([r.value,t])}})),i.set(t,n)}return removeCyclicReferences(i,a),i}function transformValueAST(t,r,n){if(!t.nodes?.length)return"";const s=new Map;return t.nodes.forEach((e=>{s.set(e,t)})),e.walk(t.nodes,(e=>{"nodes"in e&&e.nodes.length&&e.nodes.forEach((t=>{s.set(t,e)}))})),e.walk(t.nodes,(t=>{if(!isVarFunction(t))return;const[o,...a]=t.nodes.filter((e=>"div"!==e.type)),{value:i}=o,l=s.get(t);if(!l)return;const c=l.nodes.indexOf(t);if(-1===c)return;let u=!1;a&&e.walk(a,(e=>{if(isVarFunction(e)){const[t]=e.nodes.filter((e=>"word"===e.type));if(r.has(t.value)||n.has(t.value))return;return u=!0,!1}}));let p=n.get(i)?.nodes??r.get(i)?.nodes;p||!a.length||u||(p=t.nodes.slice(t.nodes.indexOf(a[0]))),void 0!==p&&(p.length?(l.nodes.splice(c,1,...p),l.nodes.forEach((e=>s.set(e,l)))):(l.nodes.splice(c,1,{type:"comment",value:"",sourceIndex:t.sourceIndex,sourceEndIndex:t.sourceEndIndex}),l.nodes.forEach((e=>s.set(e,l)))))}),!0),e.stringify(t.nodes)}function transformProperties(t,r,n,s,o){if(isTransformableDecl(t)&&!isDeclarationIgnored(t)){const s=t.value;let a=transformValueAST(e(s),r,n);const i=new Set;for(;w.test(a)&&!i.has(a);){i.add(a);a=transformValueAST(e(a),r,n)}if(a!==s){if(parentHasExactFallback(t,a))return void(o.preserve||t.remove());if(o.preserve){const e=t.cloneBefore({value:a});hasTrailingComment(e)&&e.raws?.value&&(e.raws.value.value=e.value.replace(v,"$1"),e.raws.value.raw=e.raws.value.value+e.raws.value.raw.replace(v,"$2"))}else t.value=a,hasTrailingComment(t)&&t.raws?.value&&(t.raws.value.value=t.value.replace(v,"$1"),t.raws.value.raw=t.raws.value.value+t.raws.value.raw.replace(v,"$2"))}}}const isTransformableDecl=e=>!e.variable&&e.value.includes("--")&&e.value.toLowerCase().includes("var("),hasTrailingComment=e=>"value"in Object(Object(e.raws).value)&&"raw"in(e.raws?.value??{})&&v.test(e.raws.value?.raw??""),v=/^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/;function parentHasExactFallback(e,t){if(!e||!e.parent)return!1;let r=!1;const n=e.parent.index(e);return e.parent.each(((s,o)=>s!==e&&(!(o>=n)&&void("decl"===s.type&&s.prop.toLowerCase()===e.prop.toLowerCase()&&s.value===t&&(r=!0))))),r}const m=/^initial$/i,g=/(?:\bvar\()|(?:\(top: var\(--f\))/i,creator=e=>{const t=!("preserve"in Object(e))||Boolean(e?.preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-properties] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-properties] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-properties",prepare(){let e=new Map;const n=new Map;return{postcssPlugin:"postcss-custom-properties",Once(t){e=getCustomPropertiesFromRoot(t,n)},Declaration(s){if(!w.test(s.value))return;if(r.hasSupportsAtRuleAncestor(s,g))return;const o=new Map;t&&s.parent&&s.parent.each((e=>{"decl"===e.type&&e.variable&&s!==e&&(isDeclarationIgnored(e)||(m.test(e.value)?o.delete(e.prop):o.set(e.prop,parseOrCached(e.value,n))))})),transformProperties(s,e,o,0,{preserve:t})}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-custom-properties/dist/index.mjs b/plugins/postcss-custom-properties/dist/index.mjs index ef9a9e063..05c20c650 100644 --- a/plugins/postcss-custom-properties/dist/index.mjs +++ b/plugins/postcss-custom-properties/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";import{parse as t,addLayerToModel as r}from"@csstools/cascade-layer-name-parser";import{hasSupportsAtRuleAncestor as o}from"@csstools/utilities";const n=t("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const o=new Map,s=new Map,a=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let t=e.parent;for(;t;){if("atrule"!==t.type||"layer"!==t.name.toLowerCase()){if(t===e.root())break;return}t=t.parent}}let i;if(e.nodes)i=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;i=e.params}let l=t(i);if(l?.length){{let t=e.parent;for(;t&&"atrule"===t.type&&"layer"===t.name.toLowerCase();){const e=s.get(t);e?(l=l.map((t=>e.concat(t))),t=t.parent):t=t.parent}}if(r(a,l),e.nodes){const t=l[0].concat(n);o.set(e,t),s.set(e,l[0])}}}));for(const e of o.values())r(a,[e]);const i=new WeakMap;for(const[e,t]of o)i.set(e,a.findIndex((e=>t.equal(e))));return i}function normalizeLayerName(e,t){return e.trim()?e:"csstools-anon-layer--"+t++}const s=/(!\s*)?postcss-custom-properties:\s*off\b/i,a=new WeakMap;function isBlockIgnored(e){if(!e||!e.nodes)return!1;if(a.has(e))return a.get(e);const t=e.some((e=>isIgnoreComment(e,s)));return a.set(e,t),t}const i=/(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i;function isDeclarationIgnored(e){return!!e&&(!!isBlockIgnored(e.parent)||isIgnoreComment(e.prev(),i))}function isIgnoreComment(e,t){return!!e&&"comment"===e.type&&t.test(e.text)}const l=new Set(["layer"]);function isProcessableRule(e){let t=e.parent;for(;t;){if("atrule"===t.type&&!l.has(t.name.toLowerCase()))return!1;t=t.parent}return!0}const c=/^html$/i,u=/^:where\(html\)$/i,p=/^:root$/i,f=/^:where\(:root\)$/i,d=/(html|:root)/i,w=/^var$/i;function isVarFunction(e){return"function"===e.type&&w.test(e.value)&&Object(e.nodes).length>0}const m=/\bvar\(/i;function removeCyclicReferences(e,t){const r=new Set;let o=t;for(;e.size>0;)try{toposort(Array.from(e.keys()),o);break}catch(t){if(!t._graphNode)throw t;e.delete(t._graphNode),r.add(t._graphNode),o=o.filter((e=>-1===e.indexOf(t._graphNode)))}return r}function toposort(e,t){let r=e.length;const o=new Array(r),n={};let s=r;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(;s--;)n[s]||visit(e[s],s,new Set);return o;function visit(e,t,s){if(s.has(e)){const t=new Error("Cyclic dependency"+JSON.stringify(e));throw t._graphNode=e,t}if(!i.has(e))return;if(n[t])return;n[t]=!0;let l=a.get(e)||new Set;if(l=Array.from(l),t=l.length){s.add(e);do{const e=l[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}o[--r]=e}}function makeOutgoingEdges(e){const t=new Map;for(let r=0,o=e.length;r{d.test(e.selector)&&e.nodes?.length&&isProcessableRule(e)&&(isBlockIgnored(e)||e.selectors.forEach((t=>{let r=-1;if(u.test(t)||f.test(t))r=0;else if(c.test(t))r=1;else{if(!p.test(t))return;r=2}const a=(l=s,((i=e).parent&&"atrule"===i.parent.type&&"layer"===i.parent.name.toLowerCase()?l.has(i.parent)?l.get(i.parent)+1:0:1e7)+10+r);var i,l;e.each((e=>{if("decl"!==e.type)return;if(!e.variable||isDeclarationIgnored(e))return;if("initial"===e.value.toLowerCase().trim())return;const t=n.get(e.prop)??-1;a>=t&&(n.set(e.prop,a),o.set(e.prop,e.value))}))})))}));const a=[],i=new Map;for(const[t,n]of o.entries()){const o=parseOrCached(n,r);e.walk(o.nodes,(e=>{if(isVarFunction(e)){const[r]=e.nodes.filter((e=>"word"===e.type));a.push([r.value,t])}})),i.set(t,o)}return removeCyclicReferences(i,a),i}function transformValueAST(t,r,o){if(!t.nodes?.length)return"";const n=new Map;return t.nodes.forEach((e=>{n.set(e,t)})),e.walk(t.nodes,(e=>{"nodes"in e&&e.nodes.length&&e.nodes.forEach((t=>{n.set(t,e)}))})),e.walk(t.nodes,(t=>{if(!isVarFunction(t))return;const[s,...a]=t.nodes.filter((e=>"div"!==e.type)),{value:i}=s,l=n.get(t);if(!l)return;const c=l.nodes.indexOf(t);if(-1===c)return;let u=!1;a&&e.walk(a,(e=>{if(isVarFunction(e)){const[t]=e.nodes.filter((e=>"word"===e.type));if(r.has(t.value)||o.has(t.value))return;return u=!0,!1}}));let p=o.get(i)?.nodes??r.get(i)?.nodes;p||!a.length||u||(p=t.nodes.slice(t.nodes.indexOf(a[0]))),void 0!==p&&(p.length?(l.nodes.splice(c,1,...p),l.nodes.forEach((e=>n.set(e,l)))):(l.nodes.splice(c,1,{type:"comment",value:"",sourceIndex:t.sourceIndex,sourceEndIndex:t.sourceEndIndex}),l.nodes.forEach((e=>n.set(e,l)))))}),!0),e.stringify(t.nodes)}function transformProperties(t,r,o,n,s){if(isTransformableDecl(t)&&!isDeclarationIgnored(t)){const n=t.value;let a=transformValueAST(e(n),r,o);const i=new Set;for(;m.test(a)&&!i.has(a);){i.add(a);a=transformValueAST(e(a),r,o)}if(a!==n){if(parentHasExactFallback(t,a))return void(s.preserve||t.remove());if(s.preserve){const e=t.cloneBefore({value:a});hasTrailingComment(e)&&e.raws?.value&&(e.raws.value.value=e.value.replace(v,"$1"),e.raws.value.raw=e.raws.value.value+e.raws.value.raw.replace(v,"$2"))}else t.value=a,hasTrailingComment(t)&&t.raws?.value&&(t.raws.value.value=t.value.replace(v,"$1"),t.raws.value.raw=t.raws.value.value+t.raws.value.raw.replace(v,"$2"))}}}const isTransformableDecl=e=>!e.variable&&e.value.includes("--")&&e.value.toLowerCase().includes("var("),hasTrailingComment=e=>"value"in Object(Object(e.raws).value)&&"raw"in(e.raws?.value??{})&&v.test(e.raws.value?.raw??""),v=/^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/;function parentHasExactFallback(e,t){if(!e||!e.parent)return!1;let r=!1;const o=e.parent.index(e);return e.parent.each(((n,s)=>n!==e&&(!(s>=o)&&void("decl"===n.type&&n.prop.toLowerCase()===e.prop.toLowerCase()&&n.value===t&&(r=!0))))),r}const g=/^initial$/i,h=/(?:\bvar\()|(?:\(top: var\(--f\))/i,creator=e=>{const t=!("preserve"in Object(e))||Boolean(e?.preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-properties] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-properties] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-properties",prepare:()=>{let e=new Map;const r=new Map;return{Once:t=>{e=getCustomPropertiesFromRoot(t,r)},Declaration:n=>{if(!m.test(n.value))return;if(o(n,h))return;const s=new Map;t&&n.parent&&n.parent.each((e=>{"decl"===e.type&&e.variable&&n!==e&&(isDeclarationIgnored(e)||(g.test(e.value)?s.delete(e.prop):s.set(e.prop,parseOrCached(e.value,r))))})),transformProperties(n,e,s,0,{preserve:t})}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";import{parse as t,addLayerToModel as r}from"@csstools/cascade-layer-name-parser";import{hasSupportsAtRuleAncestor as n}from"@csstools/utilities";const o=t("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const n=new Map,s=new Map,a=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let t=e.parent;for(;t;){if("atrule"!==t.type||"layer"!==t.name.toLowerCase()){if(t===e.root())break;return}t=t.parent}}let i;if(e.nodes)i=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;i=e.params}let l=t(i);if(l?.length){{let t=e.parent;for(;t&&"atrule"===t.type&&"layer"===t.name.toLowerCase();){const e=s.get(t);e?(l=l.map((t=>e.concat(t))),t=t.parent):t=t.parent}}if(r(a,l),e.nodes){const t=l[0].concat(o);n.set(e,t),s.set(e,l[0])}}}));for(const e of n.values())r(a,[e]);const i=new WeakMap;for(const[e,t]of n)i.set(e,a.findIndex((e=>t.equal(e))));return i}function normalizeLayerName(e,t){return e.trim()?e:"csstools-anon-layer--"+t++}const s=/(!\s*)?postcss-custom-properties:\s*off\b/i,a=new WeakMap;function isBlockIgnored(e){if(!e||!e.nodes)return!1;if(a.has(e))return a.get(e);const t=e.some((e=>isIgnoreComment(e,s)));return a.set(e,t),t}const i=/(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i;function isDeclarationIgnored(e){return!!e&&(!!isBlockIgnored(e.parent)||isIgnoreComment(e.prev(),i))}function isIgnoreComment(e,t){return!!e&&"comment"===e.type&&t.test(e.text)}const l=new Set(["layer"]);function isProcessableRule(e){let t=e.parent;for(;t;){if("atrule"===t.type&&!l.has(t.name.toLowerCase()))return!1;t=t.parent}return!0}const c=/^html$/i,u=/^:where\(html\)$/i,p=/^:root$/i,f=/^:where\(:root\)$/i,d=/(html|:root)/i,m=/^var$/i;function isVarFunction(e){return"function"===e.type&&m.test(e.value)&&Object(e.nodes).length>0}const w=/\bvar\(/i;function removeCyclicReferences(e,t){const r=new Set;for(;e.size>0;){const n=findCyclicNode(Array.from(e.keys()),t);if(!n)return r;e.delete(n),r.add(n),t=t.filter((e=>-1===e.indexOf(n)))}return r}function findCyclicNode(e,t){let r=e.length;const n=new Array(r),o={};let s=r;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(;s--;)if(!o[s]){const t=visit(e[s],s,new Set);if(!t)continue;return t}function visit(e,t,s){if(s.has(e))return e;if(!i.has(e))return;if(o[t])return;o[t]=!0;const l=Array.from(a.get(e)||new Set);if(t=l.length){s.add(e);do{const e=l[--t],r=visit(e,i.get(e),s);if(r)return r}while(t);s.delete(e)}n[--r]=e}}function makeOutgoingEdges(e){const t=new Map;for(let r=0,n=e.length;r{d.test(e.selector)&&e.nodes?.length&&isProcessableRule(e)&&(isBlockIgnored(e)||e.selectors.forEach((t=>{let r=-1;if(u.test(t)||f.test(t))r=0;else if(c.test(t))r=1;else{if(!p.test(t))return;r=2}const a=(l=s,((i=e).parent&&"atrule"===i.parent.type&&"layer"===i.parent.name.toLowerCase()?l.has(i.parent)?l.get(i.parent)+1:0:1e7)+10+r);var i,l;e.each((e=>{if("decl"!==e.type)return;if(!e.variable||isDeclarationIgnored(e))return;if("initial"===e.value.toLowerCase().trim())return;const t=o.get(e.prop)??-1;a>=t&&(o.set(e.prop,a),n.set(e.prop,e.value))}))})))}));const a=[],i=new Map;for(const[t,o]of n.entries()){const n=parseOrCached(o,r);e.walk(n.nodes,(e=>{if(isVarFunction(e)){const[r]=e.nodes.filter((e=>"word"===e.type));a.push([r.value,t])}})),i.set(t,n)}return removeCyclicReferences(i,a),i}function transformValueAST(t,r,n){if(!t.nodes?.length)return"";const o=new Map;return t.nodes.forEach((e=>{o.set(e,t)})),e.walk(t.nodes,(e=>{"nodes"in e&&e.nodes.length&&e.nodes.forEach((t=>{o.set(t,e)}))})),e.walk(t.nodes,(t=>{if(!isVarFunction(t))return;const[s,...a]=t.nodes.filter((e=>"div"!==e.type)),{value:i}=s,l=o.get(t);if(!l)return;const c=l.nodes.indexOf(t);if(-1===c)return;let u=!1;a&&e.walk(a,(e=>{if(isVarFunction(e)){const[t]=e.nodes.filter((e=>"word"===e.type));if(r.has(t.value)||n.has(t.value))return;return u=!0,!1}}));let p=n.get(i)?.nodes??r.get(i)?.nodes;p||!a.length||u||(p=t.nodes.slice(t.nodes.indexOf(a[0]))),void 0!==p&&(p.length?(l.nodes.splice(c,1,...p),l.nodes.forEach((e=>o.set(e,l)))):(l.nodes.splice(c,1,{type:"comment",value:"",sourceIndex:t.sourceIndex,sourceEndIndex:t.sourceEndIndex}),l.nodes.forEach((e=>o.set(e,l)))))}),!0),e.stringify(t.nodes)}function transformProperties(t,r,n,o,s){if(isTransformableDecl(t)&&!isDeclarationIgnored(t)){const o=t.value;let a=transformValueAST(e(o),r,n);const i=new Set;for(;w.test(a)&&!i.has(a);){i.add(a);a=transformValueAST(e(a),r,n)}if(a!==o){if(parentHasExactFallback(t,a))return void(s.preserve||t.remove());if(s.preserve){const e=t.cloneBefore({value:a});hasTrailingComment(e)&&e.raws?.value&&(e.raws.value.value=e.value.replace(v,"$1"),e.raws.value.raw=e.raws.value.value+e.raws.value.raw.replace(v,"$2"))}else t.value=a,hasTrailingComment(t)&&t.raws?.value&&(t.raws.value.value=t.value.replace(v,"$1"),t.raws.value.raw=t.raws.value.value+t.raws.value.raw.replace(v,"$2"))}}}const isTransformableDecl=e=>!e.variable&&e.value.includes("--")&&e.value.toLowerCase().includes("var("),hasTrailingComment=e=>"value"in Object(Object(e.raws).value)&&"raw"in(e.raws?.value??{})&&v.test(e.raws.value?.raw??""),v=/^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/;function parentHasExactFallback(e,t){if(!e||!e.parent)return!1;let r=!1;const n=e.parent.index(e);return e.parent.each(((o,s)=>o!==e&&(!(s>=n)&&void("decl"===o.type&&o.prop.toLowerCase()===e.prop.toLowerCase()&&o.value===t&&(r=!0))))),r}const g=/^initial$/i,h=/(?:\bvar\()|(?:\(top: var\(--f\))/i,creator=e=>{const t=!("preserve"in Object(e))||Boolean(e?.preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-properties] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-properties] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-properties",prepare(){let e=new Map;const r=new Map;return{postcssPlugin:"postcss-custom-properties",Once(t){e=getCustomPropertiesFromRoot(t,r)},Declaration(o){if(!w.test(o.value))return;if(n(o,h))return;const s=new Map;t&&o.parent&&o.parent.each((e=>{"decl"===e.type&&e.variable&&o!==e&&(isDeclarationIgnored(e)||(g.test(e.value)?s.delete(e.prop):s.set(e.prop,parseOrCached(e.value,r))))})),transformProperties(o,e,s,0,{preserve:t})}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-custom-properties/src/cascade-layers.ts b/plugins/postcss-custom-properties/src/cascade-layers.ts index 31e9f250f..79751908e 100644 --- a/plugins/postcss-custom-properties/src/cascade-layers.ts +++ b/plugins/postcss-custom-properties/src/cascade-layers.ts @@ -3,7 +3,7 @@ import { LayerName, parse as parseCascadeLayerNames, addLayerToModel } from '@cs const implicitLayerNameForCloning = parseCascadeLayerNames('csstools-implicit-layer')[0]; -export function collectCascadeLayerOrder(root: Root) { +export function collectCascadeLayerOrder(root: Root): WeakMap { const references: Map = new Map(); const referencesForLayerNames: Map = new Map(); @@ -118,7 +118,7 @@ export function cascadeLayerNumberForNode(node: Node, layers: WeakMap = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-custom-properties', - prepare: () => { + prepare(): Plugin { let customProperties: Map = new Map(); const parsedValuesCache: Map = new Map(); return { - Once: (root) => { + postcssPlugin: 'postcss-custom-properties', + Once(root): void { customProperties = getCustomPropertiesFromRoot(root, parsedValuesCache); }, - Declaration: (decl) => { + Declaration(decl): void { if (!HAS_VAR_FUNCTION_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-custom-properties/src/is-ignored.ts b/plugins/postcss-custom-properties/src/is-ignored.ts index 61f326813..191e3f377 100644 --- a/plugins/postcss-custom-properties/src/is-ignored.ts +++ b/plugins/postcss-custom-properties/src/is-ignored.ts @@ -4,7 +4,7 @@ const blockRegExp = /(!\s*)?postcss-custom-properties:\s*off\b/i; const blockIgnoredCache = new WeakMap(); -export function isBlockIgnored(container: Container | undefined) { +export function isBlockIgnored(container: Container | undefined): boolean { if (!container || !container.nodes) { return false; } @@ -21,7 +21,7 @@ export function isBlockIgnored(container: Container | undefined) { const DECLARATION_REG_EXP = /(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i; -export function isDeclarationIgnored(decl: Declaration | undefined) { +export function isDeclarationIgnored(decl: Declaration | undefined): boolean { if (!decl) { return false; } @@ -33,6 +33,6 @@ export function isDeclarationIgnored(decl: Declaration | undefined) { return isIgnoreComment(decl.prev(), DECLARATION_REG_EXP); } -function isIgnoreComment(node: Node | undefined, regexp: RegExp) { +function isIgnoreComment(node: Node | undefined, regexp: RegExp): boolean { return !!node && node.type === 'comment' && regexp.test((node as Comment).text); } diff --git a/plugins/postcss-custom-properties/src/toposort.ts b/plugins/postcss-custom-properties/src/toposort.ts index 9b944c3cb..fff20af35 100644 --- a/plugins/postcss-custom-properties/src/toposort.ts +++ b/plugins/postcss-custom-properties/src/toposort.ts @@ -28,32 +28,23 @@ export function removeCyclicReferences(nodes: Map, edges: Array>): Set { const cyclicReferences: Set = new Set(); - // eslint-disable-next-line no-constant-condition - let _edges = edges; while (nodes.size > 0) { - try { - toposort(Array.from(nodes.keys()), _edges); - break; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (e: any) { - /* see the hack below */ - if (e['_graphNode']) { - - nodes.delete(e['_graphNode']); - cyclicReferences.add(e['_graphNode']); - _edges = _edges.filter((x) => { - return x.indexOf(e['_graphNode']) === -1; - }); - } else { - throw e; - } + const cyclicNode = findCyclicNode(Array.from(nodes.keys()), edges); + if (!cyclicNode) { + return cyclicReferences; } + + nodes.delete(cyclicNode); + cyclicReferences.add(cyclicNode); + edges = edges.filter((x) => { + return x.indexOf(cyclicNode) === -1; + }); } return cyclicReferences; } -function toposort(nodes: Array, edges: Array>): Array { +function findCyclicNode(nodes: Array, edges: Array>): string | undefined { let cursor = nodes.length; const sorted: Array = new Array(cursor); const visited: Record = {}; @@ -64,19 +55,18 @@ function toposort(nodes: Array, edges: Array>): Array) { + function visit(node: string, j: number, predecessors: Set): string | undefined { if (predecessors.has(node)) { - const err = new Error('Cyclic dependency' + JSON.stringify(node)); - // @ts-expect-error custom field on object - err['_graphNode'] = node; /* a hack to communicate which node is causing the cyclic error */ - - throw err; + return node; } if (!nodesHash.has(node)) { @@ -86,17 +76,22 @@ function toposort(nodes: Array, edges: Array>): Array = Array.from(outgoingEdges.get(node) || new Set()); // eslint-disable-next-line no-cond-assign if (j = outgoing.length) { predecessors.add(node); do { const child = outgoing[--j]; - visit(child, nodesHash.get(child), predecessors); + const cyclicNode = visit(child, nodesHash.get(child)!, predecessors); + if (!cyclicNode) { + continue; + } + + return cyclicNode; } while (j); predecessors.delete(node); } @@ -105,8 +100,8 @@ function toposort(nodes: Array, edges: Array>): Array>) { - const edges = new Map(); +function makeOutgoingEdges(arr: Array>): Map> { + const edges: Map> = new Map(); for (let i = 0, len = arr.length; i < len; i++) { const edge = arr[i]; if (!edges.has(edge[0])) { @@ -115,12 +110,12 @@ function makeOutgoingEdges(arr: Array>) { if (!edges.has(edge[1])) { edges.set(edge[1], new Set()); } - edges.get(edge[0]).add(edge[1]); + edges.get(edge[0])!.add(edge[1]); } return edges; } -function makeNodesHash(arr: Array) { +function makeNodesHash(arr: Array): Map { const res = new Map(); for (let i = 0, len = arr.length; i < len; i++) { res.set(arr[i], i); diff --git a/plugins/postcss-custom-properties/src/transform-properties.ts b/plugins/postcss-custom-properties/src/transform-properties.ts index 5c37042e7..3e1ba04e4 100644 --- a/plugins/postcss-custom-properties/src/transform-properties.ts +++ b/plugins/postcss-custom-properties/src/transform-properties.ts @@ -5,7 +5,7 @@ import { isDeclarationIgnored } from './is-ignored'; import { HAS_VAR_FUNCTION_REGEX } from './is-var-function'; // transform custom pseudo selectors with custom selectors -export function transformProperties(decl: Declaration, customProperties: Map, localCustomProperties: Map, parsedValuesCache: Map, opts: { preserve?: boolean }) { +export function transformProperties(decl: Declaration, customProperties: Map, localCustomProperties: Map, parsedValuesCache: Map, opts: { preserve?: boolean }): void { if (isTransformableDecl(decl) && !isDeclarationIgnored(decl)) { const originalValue = decl.value; const valueAST = valuesParser(originalValue); @@ -52,10 +52,10 @@ export function transformProperties(decl: Declaration, customProperties: Map !decl.variable && decl.value.includes('--') && decl.value.toLowerCase().includes('var('); +const isTransformableDecl = (decl: Declaration): boolean => !decl.variable && decl.value.includes('--') && decl.value.toLowerCase().includes('var('); // whether the declaration has a trailing comment -const hasTrailingComment = (decl: Declaration) => 'value' in Object(Object(decl.raws).value) && ('raw' in (decl.raws?.value ?? {})) && TRAILING_COMMENT_REGEX.test(decl.raws.value?.raw ?? ''); +const hasTrailingComment = (decl: Declaration): boolean => 'value' in Object(Object(decl.raws).value) && ('raw' in (decl.raws?.value ?? {})) && TRAILING_COMMENT_REGEX.test(decl.raws.value?.raw ?? ''); const TRAILING_COMMENT_REGEX = /^([\W\w]+)(\s*\/\*[\W\w]+?\*\/)$/; function parentHasExactFallback(decl: Declaration, value: string): boolean { diff --git a/plugins/postcss-custom-selectors/dist/index.cjs b/plugins/postcss-custom-selectors/dist/index.cjs index 6f5bacb0a..693730659 100644 --- a/plugins/postcss-custom-selectors/dist/index.cjs +++ b/plugins/postcss-custom-selectors/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser"),r=require("@csstools/cascade-layer-name-parser");const t=r.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const s=new Map,o=new Map,n=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let r=e.parent;for(;r;){if("atrule"!==r.type||"layer"!==r.name.toLowerCase()){if(r===e.root())break;return}r=r.parent}}let a;if(e.nodes)a=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;a=e.params}let c=r.parse(a);if(c?.length){{let r=e.parent;for(;r&&"atrule"===r.type&&"layer"===r.name.toLowerCase();){const e=o.get(r);e?(c=c.map((r=>e.concat(r))),r=r.parent):r=r.parent}}if(r.addLayerToModel(n,c),e.nodes){const r=c[0].concat(t);s.set(e,r),o.set(e,c[0])}}}));for(const e of s.values())r.addLayerToModel(n,[e]);const a=new WeakMap;for(const[e,r]of s)a.set(e,n.findIndex((e=>r.equal(e))));return a}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const s=new Set(["scope","container","layer"]);function isProcessableCustomSelectorRule(e){if("atrule"!==e.type)return!1;if("custom-selector"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes(":--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("rule"===r.type)return!1;if("atrule"===r.type&&!s.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function getCustomSelectors(r,t,s){const o=new Map,n=new Map,a=collectCascadeLayerOrder(r);return r.walkAtRules((r=>{var c,l;if(isProcessableCustomSelectorRule(r))try{const t=r.params.trim(),p=e().astSync(t),u=p?.nodes?.[0]?.nodes?.[0];if(!u||"pseudo"!==u.type||!u.value.startsWith(":--"))return;const i=u.toString(),m=(l=a,(c=r).parent&&"atrule"===c.parent.type&&"layer"===c.parent.name.toLowerCase()?l.has(c.parent)?l.get(c.parent)+1:0:1e7),f=n.get(i)??-1;if(m&&m>=f&&(n.set(i,m),o.set(i,e().astSync(t.slice(i.length).trim()))),!s.preserve){const e=r.parent;r.remove(),removeEmptyAncestorBlocks(e)}}catch(e){r.warn(t,`Failed to parse selector : "${r.params}" with message: "${e instanceof Error?e.message:e}"`)}})),o}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformRule(r,t,s){let o=r.selector;try{o=e((r=>{r.walkPseudos((r=>{if(!s.has(r.value))return;const t=e.pseudo({value:":is",nodes:[]}),o=s.get(r.value);o&&(o.each((e=>{t.append(e.clone({}))})),r.replaceWith(t))}))})).processSync(r.selector)}catch(e){return r.warn(t,`Failed to parse selector : "${o}" with message: "${e instanceof Error?e.message:e}"`),r.selector}return o}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-selectors] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-selectors] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-selectors",prepare(){const e=new WeakSet;let t=new Map;return{Once:(e,{result:s})=>{t=getCustomSelectors(e,s,{preserve:r})},Rule:(s,{result:o})=>{if(e.has(s))return;if(!s.selector?.includes(":--"))return;const n=transformRule(s,o,t);n!==s.selector&&(e.add(s),s.cloneBefore({selector:n}),r||s.remove())}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser"),r=require("@csstools/cascade-layer-name-parser");const t=r.parse("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const s=new Map,o=new Map,n=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let r=e.parent;for(;r;){if("atrule"!==r.type||"layer"!==r.name.toLowerCase()){if(r===e.root())break;return}r=r.parent}}let a;if(e.nodes)a=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;a=e.params}let c=r.parse(a);if(c?.length){{let r=e.parent;for(;r&&"atrule"===r.type&&"layer"===r.name.toLowerCase();){const e=o.get(r);e?(c=c.map((r=>e.concat(r))),r=r.parent):r=r.parent}}if(r.addLayerToModel(n,c),e.nodes){const r=c[0].concat(t);s.set(e,r),o.set(e,c[0])}}}));for(const e of s.values())r.addLayerToModel(n,[e]);const a=new WeakMap;for(const[e,r]of s)a.set(e,n.findIndex((e=>r.equal(e))));return a}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const s=new Set(["scope","container","layer"]);function isProcessableCustomSelectorRule(e){if("atrule"!==e.type)return!1;if("custom-selector"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes(":--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("rule"===r.type)return!1;if("atrule"===r.type&&!s.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function getCustomSelectors(r,t,s){const o=new Map,n=new Map,a=collectCascadeLayerOrder(r);return r.walkAtRules((r=>{var c,l;if(isProcessableCustomSelectorRule(r))try{const t=r.params.trim(),p=e().astSync(t),u=p?.nodes?.[0]?.nodes?.[0];if(!u||"pseudo"!==u.type||!u.value.startsWith(":--"))return;const i=u.toString(),m=(l=a,(c=r).parent&&"atrule"===c.parent.type&&"layer"===c.parent.name.toLowerCase()?l.has(c.parent)?l.get(c.parent)+1:0:1e7),f=n.get(i)??-1;if(m&&m>=f&&(n.set(i,m),o.set(i,e().astSync(t.slice(i.length).trim()))),!s.preserve){const e=r.parent;r.remove(),removeEmptyAncestorBlocks(e)}}catch(e){r.warn(t,`Failed to parse selector : "${r.params}" with message: "${e instanceof Error?e.message:e}"`)}})),o}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformRule(r,t,s){let o=r.selector;try{o=e((r=>{r.walkPseudos((r=>{if(!s.has(r.value))return;const t=e.pseudo({value:":is",nodes:[]}),o=s.get(r.value);o&&(o.each((e=>{t.append(e.clone({}))})),r.replaceWith(t))}))})).processSync(r.selector)}catch(e){return r.warn(t,`Failed to parse selector : "${o}" with message: "${e instanceof Error?e.message:e}"`),r.selector}return o}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-selectors] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-selectors] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-selectors",prepare(){const e=new WeakSet;let t=new Map;return{postcssPlugin:"postcss-custom-selectors",Once(e,{result:s}){t=getCustomSelectors(e,s,{preserve:r})},Rule(s,{result:o}){if(e.has(s))return;if(!s.selector?.includes(":--"))return;const n=transformRule(s,o,t);n!==s.selector&&(e.add(s),s.cloneBefore({selector:n}),r||s.remove())}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-custom-selectors/dist/index.mjs b/plugins/postcss-custom-selectors/dist/index.mjs index 963d91c8d..8d1b0cb64 100644 --- a/plugins/postcss-custom-selectors/dist/index.mjs +++ b/plugins/postcss-custom-selectors/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";import{parse as r,addLayerToModel as t}from"@csstools/cascade-layer-name-parser";const s=r("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const o=new Map,n=new Map,a=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let r=e.parent;for(;r;){if("atrule"!==r.type||"layer"!==r.name.toLowerCase()){if(r===e.root())break;return}r=r.parent}}let c;if(e.nodes)c=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;c=e.params}let l=r(c);if(l?.length){{let r=e.parent;for(;r&&"atrule"===r.type&&"layer"===r.name.toLowerCase();){const e=n.get(r);e?(l=l.map((r=>e.concat(r))),r=r.parent):r=r.parent}}if(t(a,l),e.nodes){const r=l[0].concat(s);o.set(e,r),n.set(e,l[0])}}}));for(const e of o.values())t(a,[e]);const c=new WeakMap;for(const[e,r]of o)c.set(e,a.findIndex((e=>r.equal(e))));return c}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const o=new Set(["scope","container","layer"]);function isProcessableCustomSelectorRule(e){if("atrule"!==e.type)return!1;if("custom-selector"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes(":--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("rule"===r.type)return!1;if("atrule"===r.type&&!o.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function getCustomSelectors(r,t,s){const o=new Map,n=new Map,a=collectCascadeLayerOrder(r);return r.walkAtRules((r=>{var c,l;if(isProcessableCustomSelectorRule(r))try{const t=r.params.trim(),p=e().astSync(t),u=p?.nodes?.[0]?.nodes?.[0];if(!u||"pseudo"!==u.type||!u.value.startsWith(":--"))return;const i=u.toString(),m=(l=a,(c=r).parent&&"atrule"===c.parent.type&&"layer"===c.parent.name.toLowerCase()?l.has(c.parent)?l.get(c.parent)+1:0:1e7),f=n.get(i)??-1;if(m&&m>=f&&(n.set(i,m),o.set(i,e().astSync(t.slice(i.length).trim()))),!s.preserve){const e=r.parent;r.remove(),removeEmptyAncestorBlocks(e)}}catch(e){r.warn(t,`Failed to parse selector : "${r.params}" with message: "${e instanceof Error?e.message:e}"`)}})),o}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformRule(r,t,s){let o=r.selector;try{o=e((r=>{r.walkPseudos((r=>{if(!s.has(r.value))return;const t=e.pseudo({value:":is",nodes:[]}),o=s.get(r.value);o&&(o.each((e=>{t.append(e.clone({}))})),r.replaceWith(t))}))})).processSync(r.selector)}catch(e){return r.warn(t,`Failed to parse selector : "${o}" with message: "${e instanceof Error?e.message:e}"`),r.selector}return o}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-selectors] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-selectors] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-selectors",prepare(){const e=new WeakSet;let t=new Map;return{Once:(e,{result:s})=>{t=getCustomSelectors(e,s,{preserve:r})},Rule:(s,{result:o})=>{if(e.has(s))return;if(!s.selector?.includes(":--"))return;const n=transformRule(s,o,t);n!==s.selector&&(e.add(s),s.cloneBefore({selector:n}),r||s.remove())}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";import{parse as r,addLayerToModel as t}from"@csstools/cascade-layer-name-parser";const s=r("csstools-implicit-layer")[0];function collectCascadeLayerOrder(e){const o=new Map,n=new Map,a=[];e.walkAtRules((e=>{if("layer"!==e.name.toLowerCase())return;{let r=e.parent;for(;r;){if("atrule"!==r.type||"layer"!==r.name.toLowerCase()){if(r===e.root())break;return}r=r.parent}}let c;if(e.nodes)c=normalizeLayerName(e.params,1);else{if(!e.params.trim())return;c=e.params}let l=r(c);if(l?.length){{let r=e.parent;for(;r&&"atrule"===r.type&&"layer"===r.name.toLowerCase();){const e=n.get(r);e?(l=l.map((r=>e.concat(r))),r=r.parent):r=r.parent}}if(t(a,l),e.nodes){const r=l[0].concat(s);o.set(e,r),n.set(e,l[0])}}}));for(const e of o.values())t(a,[e]);const c=new WeakMap;for(const[e,r]of o)c.set(e,a.findIndex((e=>r.equal(e))));return c}function normalizeLayerName(e,r){return e.trim()?e:"csstools-anon-layer--"+r++}const o=new Set(["scope","container","layer"]);function isProcessableCustomSelectorRule(e){if("atrule"!==e.type)return!1;if("custom-selector"!==e.name.toLowerCase())return!1;if(!e.params||!e.params.includes(":--"))return!1;if(e.nodes&&e.nodes.length>0)return!1;let r=e.parent;for(;r;){if("rule"===r.type)return!1;if("atrule"===r.type&&!o.has(r.name.toLowerCase()))return!1;r=r.parent}return!0}function getCustomSelectors(r,t,s){const o=new Map,n=new Map,a=collectCascadeLayerOrder(r);return r.walkAtRules((r=>{var c,l;if(isProcessableCustomSelectorRule(r))try{const t=r.params.trim(),p=e().astSync(t),u=p?.nodes?.[0]?.nodes?.[0];if(!u||"pseudo"!==u.type||!u.value.startsWith(":--"))return;const i=u.toString(),m=(l=a,(c=r).parent&&"atrule"===c.parent.type&&"layer"===c.parent.name.toLowerCase()?l.has(c.parent)?l.get(c.parent)+1:0:1e7),f=n.get(i)??-1;if(m&&m>=f&&(n.set(i,m),o.set(i,e().astSync(t.slice(i.length).trim()))),!s.preserve){const e=r.parent;r.remove(),removeEmptyAncestorBlocks(e)}}catch(e){r.warn(t,`Failed to parse selector : "${r.params}" with message: "${e instanceof Error?e.message:e}"`)}})),o}function removeEmptyAncestorBlocks(e){if(!e)return;let r=e;for(;r;){if(r.nodes&&r.nodes.length>0)return;const e=r.parent;r.remove(),r=e}}function transformRule(r,t,s){let o=r.selector;try{o=e((r=>{r.walkPseudos((r=>{if(!s.has(r.value))return;const t=e.pseudo({value:":is",nodes:[]}),o=s.get(r.value);o&&(o.each((e=>{t.append(e.clone({}))})),r.replaceWith(t))}))})).processSync(r.selector)}catch(e){return r.warn(t,`Failed to parse selector : "${o}" with message: "${e instanceof Error?e.message:e}"`),r.selector}return o}const creator=e=>{const r=Boolean(Object(e).preserve);if("importFrom"in Object(e))throw new Error('[postcss-custom-selectors] "importFrom" is no longer supported');if("exportTo"in Object(e))throw new Error('[postcss-custom-selectors] "exportTo" is no longer supported');return{postcssPlugin:"postcss-custom-selectors",prepare(){const e=new WeakSet;let t=new Map;return{postcssPlugin:"postcss-custom-selectors",Once(e,{result:s}){t=getCustomSelectors(e,s,{preserve:r})},Rule(s,{result:o}){if(e.has(s))return;if(!s.selector?.includes(":--"))return;const n=transformRule(s,o,t);n!==s.selector&&(e.add(s),s.cloneBefore({selector:n}),r||s.remove())}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-custom-selectors/src/cascade-layers.ts b/plugins/postcss-custom-selectors/src/cascade-layers.ts index 31e9f250f..79751908e 100644 --- a/plugins/postcss-custom-selectors/src/cascade-layers.ts +++ b/plugins/postcss-custom-selectors/src/cascade-layers.ts @@ -3,7 +3,7 @@ import { LayerName, parse as parseCascadeLayerNames, addLayerToModel } from '@cs const implicitLayerNameForCloning = parseCascadeLayerNames('csstools-implicit-layer')[0]; -export function collectCascadeLayerOrder(root: Root) { +export function collectCascadeLayerOrder(root: Root): WeakMap { const references: Map = new Map(); const referencesForLayerNames: Map = new Map(); @@ -118,7 +118,7 @@ export function cascadeLayerNumberForNode(node: Node, layers: WeakMap = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-custom-selectors', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); let customSelectors = new Map(); return { - Once: (root, { result }) => { + postcssPlugin: 'postcss-custom-selectors', + Once(root, { result }): void { customSelectors = getCustomSelectors(root, result, { preserve: preserve }); }, - Rule: (rule, { result }) => { + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/postcss-design-tokens/dist/index.cjs b/plugins/postcss-design-tokens/dist/index.cjs index a3e6f9091..a43d4fb78 100644 --- a/plugins/postcss-design-tokens/dist/index.cjs +++ b/plugins/postcss-design-tokens/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser"),t=require("path"),n=require("fs"),r=require("module"),o=require("@csstools/css-parser-algorithms"),s=require("@csstools/css-tokenizer");function toposort(e,t){let n=e.length;const r=new Array(n),o={};let s=n;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(t.forEach((function(e){if(!i.has(e[0])||!i.has(e[1]))throw new Error("Unknown token. Make sure to provide all tokens used in aliases.")}));s--;)o[s]||visit(e[s],s,new Set);return r;function visit(e,t,s){if(s.has(e)){let t;try{t=", token was: "+JSON.stringify(e)}catch(e){t=""}throw new Error("Cyclic dependency"+t)}if(!i.has(e))throw new Error("Found unknown token. Make sure to provided all involved tokens. Unknown token: "+JSON.stringify(e));if(o[t])return;o[t]=!0;let u=a.get(e)||new Set;if(u=Array.from(u),t=u.length){s.add(e);do{const e=u[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}r[--n]=e}}function makeOutgoingEdges(e){const t=new Map;for(let n=0,r=e.length;napplyTransformsToValue(o,e),name:String(e.name??"")||t,comment:String(e.comment??"")||void 0,metadata:{name:String(e.name??"")?t:void 0,path:[...n,t],filePath:r,isSource:!0}}}const a=new Map;function applyTransformsToValue(t,n){if(!t)return"";if(!n)return t;if(!n.toUnit)return t;const r=e.unit(t);if(!r||r.unit===n.toUnit)return t;if(!r.unit){if(a.has(n.toUnit)){if(a.get(n.toUnit))return`${t}${n.toUnit}`;throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}try{const r=e.unit(`${t}${n.toUnit}`);if(r&&r.unit===n.toUnit)return a.set(n.toUnit,!0),`${t}${n.toUnit}`;a.set(n.toUnit,!1)}catch(e){a.set(n.toUnit,!1)}throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}return"rem"===r.unit&&"px"===n.toUnit?remToPx(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):"px"===r.unit&&"rem"===n.toUnit?pxToRem(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):t}function remToPx(e,t){return`${formatFloat(e*t)}px`}function pxToRem(e,t){return`${formatFloat(e/t)}rem`}function formatFloat(e){if(Number.isInteger(e))return e.toString();let t=e.toFixed(5);for(let e=t.length-1;e>=0&&"."!==t[e]&&"0"===t[e];e--)t=t.slice(0,e);return t}function dereferenceTokenValues(e){const t=new Set,n=new Map;for(const[r,o]of e.entries()){const e=parseReferences(o.value);e.length&&(t.add(r),n.set(r,e))}for(const[r,o]of n.entries()){for(let n=0;n"value-reference"===e.type)))continue;const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e;{const r=Array.from(e.keys()),o=[];for(const[e,t]of n.entries())for(let n=0;n"value-reference"===e.type)))throw new Error('Token "'+r+'" can not be fully resolved');const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e}return e}function parseReferences(e){if("string"!=typeof e)return[];if(-1===e.indexOf("{"))return[];const t=[];let n=!1,r=!1,o="";for(let s=0;s0&&(t.push({type:"value-non-reference",value:o}),o=""),r=!0;break;case"}":if(!r)throw new Error('Unexpected "}" in "'+e+'" at '+s);if(0===o.length)throw new Error('Empty alias "{}" in "'+e+'" at '+s);{let e=o.trim();".value"===e.slice(-6)&&(e=e.slice(0,-6)),t.push({type:"value-reference",raw:e}),o=""}n=!0,r=!1;break;default:o+=a}}if(r)throw new Error('Unexpected end of alias in "'+e+'"');return o.length>0&&t.push({type:"value-non-reference",value:o}),n?t:[]}function extractTokens(e,t,n){const r=new Map;for(const o in e)if(Object.hasOwnProperty.call(e,o)){if(null===e[o]||"object"!=typeof e[o]||Array.isArray(e[o]))throw new Error(`Parsing error at "${[...t,o].join(".")}"`);const s=Object(e[o]);if(!s)throw new Error(`Parsing error at "${[...t,o].join(".")}"`);if(void 0!==s.value){const e=extractStyleDictionaryV3Token(s,o,t,n);r.set(e.metadata.path.join("."),e);continue}for(const[e,a]of extractTokens(s,[...t,o],n).entries())r.set(e,a)}return r}function extractStyleDictionaryV3Tokens(e,t){return dereferenceTokenValues(extractTokens(e,[],t))}function extractStyleDictionaryTokens(e,t,n){if("3"===e)return extractStyleDictionaryV3Tokens(t,n);throw new Error("Unsupported version: "+e)}const i="6b4e71e7-4787-42f7-a092-8684961895db";function parseImport(t){const n=e(t),r={filePath:"",format:"standard",conditions:[i]};return n.walk((e=>{"function"===e.type&&"url"===e.value&&(r.filePath=e.nodes[0].value),"function"===e.type&&"format"===e.value&&(r.format=e.nodes[0].value),"function"===e.type&&"when"===e.value&&(r.conditions=e.nodes.filter((e=>"string"===e.type)).map((e=>e.value)))})),r.conditions.length||(r.conditions=[i]),r}async function tokensFromImport(e,o,s,a,i,u){const{filePath:l,format:c,conditions:f}=parseImport(i);if(!f.every((e=>s.includes(e))))return!1;let p="";try{if(l.startsWith("node_modules://")){p=r.createRequire(t.dirname(a)).resolve(l.slice(15))}else if(l.startsWith("node_modules:")){p=r.createRequire(t.dirname(a)).resolve(l.slice(13))}else p=t.resolve(t.dirname(a),l)}catch(e){throw new Error(`Failed to read ${l} with error ${e instanceof Error?e.message:e}`)}if(u.has(p))return!1;o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:p,parent:e.source?.input?.file}),u.add(p);const d=await n.promises.readFile(p,"utf8"),m=JSON.parse(d);if("style-dictionary3"===c)return{filePath:t.resolve(l),tokens:extractStyleDictionaryTokens("3",m,p)};throw new Error("Unsupported format: "+c)}function mergeTokens(e,t){const n=new Map(e);for(const[e,r]of t)n.set(e,r);return n}function parsePluginOptions(e){const t={importAtRuleName:"design-tokens",is:[i],unitsAndValues:{rootFontSize:16},valueFunctionName:"design-token"};return e?("object"!=typeof e||(Array.isArray(e.is)&&(t.is=e.is.filter((e=>"string"==typeof e))),0===t.is.length&&(t.is=[i]),"object"==typeof e.unitsAndValues&&"number"==typeof e.unitsAndValues.rootFontSize&&((n=e.unitsAndValues.rootFontSize)>0&&n!==1/0)&&(t.unitsAndValues.rootFontSize=e.unitsAndValues.rootFontSize),"string"==typeof e.valueFunctionName&&(t.valueFunctionName=e.valueFunctionName),"string"==typeof e.importAtRuleName&&(t.importAtRuleName=e.importAtRuleName)),t):t;var n}function parseComponentValuesFromTokens(e){return o.parseListOfComponentValues(e,{onParseError:e=>{throw e}})}function parseComponentValues(e){const t=s.tokenizer({css:e},{onParseError:e=>{throw e}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n.push(t.nextToken()),parseComponentValuesFromTokens(n)}function transform(e,t,n,r,o){const s=parseComponentValues(r);let a=!1;return s.forEach(((r,i)=>{if("walk"in r){{const u=transformComponentValue(r,e,t,n,o);if(u)return s.splice(i,1,...u),a=!0,!1}r.walk(((r,s)=>{if("string"==typeof s)return;const i=transformComponentValue(r.node,e,t,n,o);return i?(r.parent.value.splice(s,1,...i),a=!0,!1):void 0}))}})),a?s.map((e=>e.toString())).join(""):r}function transformComponentValue(e,t,n,r,a){if(!o.isFunctionNode(e))return;if(e.getName().toLowerCase()!==a.valueFunctionName)return;let i="",u="",l="";for(let t=0;t{const t=parsePluginOptions(e);return{postcssPlugin:"postcss-design-tokens",prepare(){let e=new Map,n=new Set;return{OnceExit(){e=new Map,n=new Set},Once:async(r,o)=>{const s=[];r.walkAtRules((e=>{if(e.name.toLowerCase()!==t.importAtRuleName)return;if(!e?.source?.input?.file)return;const n=e.source.input.file,r=e.params;e.remove(),s.push({filePath:n,params:r,node:e})}));for(const a of s.values()){let s;try{if(s=await tokensFromImport(r,o,t.is,a.filePath,a.params,n),!s)continue}catch(e){a.node.warn(o.result,`Failed to import design tokens from "${a.params}" with error:\n\t`+(e instanceof Error?e.message:e));continue}o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:s.filePath,parent:a.filePath}),e=mergeTokens(e,s.tokens)}},Declaration(n,{result:r}){if(n.value.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.value,t);if(o===n.value)return;n.value=o}catch(e){n.warn(r,`Failed to parse and transform "${n.value}"`)}},AtRule(n,{result:r}){if(n.params.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.params,t);if(o===n.params)return;n.params=o}catch(e){n.warn(r,`Failed to parse and transform "${n.params}"`)}}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser"),t=require("path"),n=require("fs"),r=require("module"),o=require("@csstools/css-parser-algorithms"),s=require("@csstools/css-tokenizer");function toposort(e,t){let n=e.length;const r=new Array(n),o={};let s=n;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(t.forEach((function(e){if(!i.has(e[0])||!i.has(e[1]))throw new Error("Unknown token. Make sure to provide all tokens used in aliases.")}));s--;)o[s]||visit(e[s],s,new Set);return r;function visit(e,t,s){if(s.has(e)){let t;try{t=", token was: "+JSON.stringify(e)}catch(e){t=""}throw new Error("Cyclic dependency"+t)}if(!i.has(e))throw new Error("Found unknown token. Make sure to provided all involved tokens. Unknown token: "+JSON.stringify(e));if(o[t])return;o[t]=!0;const u=Array.from(a.get(e)||new Set);if(t=u.length){s.add(e);do{const e=u[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}r[--n]=e}}function makeOutgoingEdges(e){const t=new Map;for(let n=0,r=e.length;napplyTransformsToValue(o,e),name:String(e.name??"")||t,comment:String(e.comment??"")||void 0,metadata:{name:String(e.name??"")?t:void 0,path:[...n,t],filePath:r,isSource:!0}}}const a=new Map;function applyTransformsToValue(t,n){if(!t)return"";if(!n)return t;if(!n.toUnit)return t;const r=e.unit(t);if(!r||r.unit===n.toUnit)return t;if(!r.unit){if(a.has(n.toUnit)){if(a.get(n.toUnit))return`${t}${n.toUnit}`;throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}try{const r=e.unit(`${t}${n.toUnit}`);if(r&&r.unit===n.toUnit)return a.set(n.toUnit,!0),`${t}${n.toUnit}`;a.set(n.toUnit,!1)}catch(e){a.set(n.toUnit,!1)}throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}return"rem"===r.unit&&"px"===n.toUnit?remToPx(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):"px"===r.unit&&"rem"===n.toUnit?pxToRem(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):t}function remToPx(e,t){return`${formatFloat(e*t)}px`}function pxToRem(e,t){return`${formatFloat(e/t)}rem`}function formatFloat(e){if(Number.isInteger(e))return e.toString();let t=e.toFixed(5);for(let e=t.length-1;e>=0&&"."!==t[e]&&"0"===t[e];e--)t=t.slice(0,e);return t}function dereferenceTokenValues(e){const t=new Set,n=new Map;for(const[r,o]of e.entries()){const e=parseReferences(o.value);e.length&&(t.add(r),n.set(r,e))}for(const[r,o]of n.entries()){for(let n=0;n"value-reference"===e.type)))continue;const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e;{const r=Array.from(e.keys()),o=[];for(const[e,t]of n.entries())for(let n=0;n"value-reference"===e.type)))throw new Error('Token "'+r+'" can not be fully resolved');const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e}return e}function parseReferences(e){if("string"!=typeof e)return[];if(-1===e.indexOf("{"))return[];const t=[];let n=!1,r=!1,o="";for(let s=0;s0&&(t.push({type:"value-non-reference",value:o}),o=""),r=!0;break;case"}":if(!r)throw new Error('Unexpected "}" in "'+e+'" at '+s);if(0===o.length)throw new Error('Empty alias "{}" in "'+e+'" at '+s);{let e=o.trim();".value"===e.slice(-6)&&(e=e.slice(0,-6)),t.push({type:"value-reference",raw:e}),o=""}n=!0,r=!1;break;default:o+=a}}if(r)throw new Error('Unexpected end of alias in "'+e+'"');return o.length>0&&t.push({type:"value-non-reference",value:o}),n?t:[]}function extractTokens(e,t,n){const r=new Map;for(const o in e)if(Object.hasOwnProperty.call(e,o)){if(null===e[o]||"object"!=typeof e[o]||Array.isArray(e[o]))throw new Error(`Parsing error at "${[...t,o].join(".")}"`);const s=Object(e[o]);if(!s)throw new Error(`Parsing error at "${[...t,o].join(".")}"`);if(void 0!==s.value){const e=extractStyleDictionaryV3Token(s,o,t,n);r.set(e.metadata.path.join("."),e);continue}for(const[e,a]of extractTokens(s,[...t,o],n).entries())r.set(e,a)}return r}function extractStyleDictionaryV3Tokens(e,t){return dereferenceTokenValues(extractTokens(e,[],t))}function extractStyleDictionaryTokens(e,t,n){if("3"===e)return extractStyleDictionaryV3Tokens(t,n);throw new Error("Unsupported version: "+e)}const i="6b4e71e7-4787-42f7-a092-8684961895db";function parseImport(t){const n=e(t),r={filePath:"",format:"standard",conditions:[i]};return n.walk((e=>{"function"===e.type&&"url"===e.value&&(r.filePath=e.nodes[0].value),"function"===e.type&&"format"===e.value&&(r.format=e.nodes[0].value),"function"===e.type&&"when"===e.value&&(r.conditions=e.nodes.filter((e=>"string"===e.type)).map((e=>e.value)))})),r.conditions.length||(r.conditions=[i]),r}async function tokensFromImport(e,o,s,a,i,u){const{filePath:l,format:c,conditions:f}=parseImport(i);if(!f.every((e=>s.includes(e))))return!1;let p="";try{if(l.startsWith("node_modules://")){p=r.createRequire(t.dirname(a)).resolve(l.slice(15))}else if(l.startsWith("node_modules:")){p=r.createRequire(t.dirname(a)).resolve(l.slice(13))}else p=t.resolve(t.dirname(a),l)}catch(e){throw new Error(`Failed to read ${l} with error ${e instanceof Error?e.message:e}`)}if(u.has(p))return!1;o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:p,parent:e.source?.input?.file}),u.add(p);const d=await n.promises.readFile(p,"utf8"),m=JSON.parse(d);if("style-dictionary3"===c)return{filePath:t.resolve(l),tokens:extractStyleDictionaryTokens("3",m,p)};throw new Error("Unsupported format: "+c)}function mergeTokens(e,t){const n=new Map(e);for(const[e,r]of t)n.set(e,r);return n}function parsePluginOptions(e){const t={importAtRuleName:"design-tokens",is:[i],unitsAndValues:{rootFontSize:16},valueFunctionName:"design-token"};return e?("object"!=typeof e||(Array.isArray(e.is)&&(t.is=e.is.filter((e=>"string"==typeof e))),0===t.is.length&&(t.is=[i]),"object"==typeof e.unitsAndValues&&"number"==typeof e.unitsAndValues.rootFontSize&&((n=e.unitsAndValues.rootFontSize)>0&&n!==1/0)&&(t.unitsAndValues.rootFontSize=e.unitsAndValues.rootFontSize),"string"==typeof e.valueFunctionName&&(t.valueFunctionName=e.valueFunctionName),"string"==typeof e.importAtRuleName&&(t.importAtRuleName=e.importAtRuleName)),t):t;var n}function parseComponentValuesFromTokens(e){return o.parseListOfComponentValues(e,{onParseError:e=>{throw e}})}function parseComponentValues(e){const t=s.tokenizer({css:e},{onParseError:e=>{throw e}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n.push(t.nextToken()),parseComponentValuesFromTokens(n)}function transform(e,t,n,r,o){const s=parseComponentValues(r);let a=!1;return s.forEach(((r,i)=>{if("walk"in r){{const u=transformComponentValue(r,e,t,n,o);if(u)return s.splice(i,1,...u),a=!0,!1}r.walk(((r,s)=>{if("string"==typeof s)return;const i=transformComponentValue(r.node,e,t,n,o);return i?(r.parent.value.splice(s,1,...i),a=!0,!1):void 0}))}})),a?s.map((e=>e.toString())).join(""):r}function transformComponentValue(e,t,n,r,a){if(!o.isFunctionNode(e))return;if(e.getName().toLowerCase()!==a.valueFunctionName)return;let i="",u="",l="";for(let t=0;t{const t=parsePluginOptions(e);return{postcssPlugin:"postcss-design-tokens",prepare(){let e=new Map,n=new Set;return{postcssPlugin:"postcss-design-tokens",OnceExit(){e=new Map,n=new Set},async Once(r,o){const s=[];r.walkAtRules((e=>{if(e.name.toLowerCase()!==t.importAtRuleName)return;if(!e?.source?.input?.file)return;const n=e.source.input.file,r=e.params;e.remove(),s.push({filePath:n,params:r,node:e})}));for(const a of s.values()){let s;try{if(s=await tokensFromImport(r,o,t.is,a.filePath,a.params,n),!s)continue}catch(e){a.node.warn(o.result,`Failed to import design tokens from "${a.params}" with error:\n\t`+(e instanceof Error?e.message:e));continue}o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:s.filePath,parent:a.filePath}),e=mergeTokens(e,s.tokens)}},Declaration(n,{result:r}){if(n.value.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.value,t);if(o===n.value)return;n.value=o}catch(e){n.warn(r,`Failed to parse and transform "${n.value}"`)}},AtRule(n,{result:r}){if(n.params.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.params,t);if(o===n.params)return;n.params=o}catch(e){n.warn(r,`Failed to parse and transform "${n.params}"`)}}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-design-tokens/dist/index.mjs b/plugins/postcss-design-tokens/dist/index.mjs index 66f63a9a7..8ee81b7d0 100644 --- a/plugins/postcss-design-tokens/dist/index.mjs +++ b/plugins/postcss-design-tokens/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";import t from"path";import{promises as n}from"fs";import r from"module";import{parseListOfComponentValues as o,isFunctionNode as s,isWhitespaceNode as a,isCommentNode as i,isTokenNode as u}from"@csstools/css-parser-algorithms";import{tokenizer as l,TokenType as c}from"@csstools/css-tokenizer";function toposort(e,t){let n=e.length;const r=new Array(n),o={};let s=n;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(t.forEach((function(e){if(!i.has(e[0])||!i.has(e[1]))throw new Error("Unknown token. Make sure to provide all tokens used in aliases.")}));s--;)o[s]||visit(e[s],s,new Set);return r;function visit(e,t,s){if(s.has(e)){let t;try{t=", token was: "+JSON.stringify(e)}catch(e){t=""}throw new Error("Cyclic dependency"+t)}if(!i.has(e))throw new Error("Found unknown token. Make sure to provided all involved tokens. Unknown token: "+JSON.stringify(e));if(o[t])return;o[t]=!0;let u=a.get(e)||new Set;if(u=Array.from(u),t=u.length){s.add(e);do{const e=u[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}r[--n]=e}}function makeOutgoingEdges(e){const t=new Map;for(let n=0,r=e.length;napplyTransformsToValue(o,e),name:String(e.name??"")||t,comment:String(e.comment??"")||void 0,metadata:{name:String(e.name??"")?t:void 0,path:[...n,t],filePath:r,isSource:!0}}}const f=new Map;function applyTransformsToValue(t,n){if(!t)return"";if(!n)return t;if(!n.toUnit)return t;const r=e.unit(t);if(!r||r.unit===n.toUnit)return t;if(!r.unit){if(f.has(n.toUnit)){if(f.get(n.toUnit))return`${t}${n.toUnit}`;throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}try{const r=e.unit(`${t}${n.toUnit}`);if(r&&r.unit===n.toUnit)return f.set(n.toUnit,!0),`${t}${n.toUnit}`;f.set(n.toUnit,!1)}catch(e){f.set(n.toUnit,!1)}throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}return"rem"===r.unit&&"px"===n.toUnit?remToPx(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):"px"===r.unit&&"rem"===n.toUnit?pxToRem(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):t}function remToPx(e,t){return`${formatFloat(e*t)}px`}function pxToRem(e,t){return`${formatFloat(e/t)}rem`}function formatFloat(e){if(Number.isInteger(e))return e.toString();let t=e.toFixed(5);for(let e=t.length-1;e>=0&&"."!==t[e]&&"0"===t[e];e--)t=t.slice(0,e);return t}function dereferenceTokenValues(e){const t=new Set,n=new Map;for(const[r,o]of e.entries()){const e=parseReferences(o.value);e.length&&(t.add(r),n.set(r,e))}for(const[r,o]of n.entries()){for(let n=0;n"value-reference"===e.type)))continue;const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e;{const r=Array.from(e.keys()),o=[];for(const[e,t]of n.entries())for(let n=0;n"value-reference"===e.type)))throw new Error('Token "'+r+'" can not be fully resolved');const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e}return e}function parseReferences(e){if("string"!=typeof e)return[];if(-1===e.indexOf("{"))return[];const t=[];let n=!1,r=!1,o="";for(let s=0;s0&&(t.push({type:"value-non-reference",value:o}),o=""),r=!0;break;case"}":if(!r)throw new Error('Unexpected "}" in "'+e+'" at '+s);if(0===o.length)throw new Error('Empty alias "{}" in "'+e+'" at '+s);{let e=o.trim();".value"===e.slice(-6)&&(e=e.slice(0,-6)),t.push({type:"value-reference",raw:e}),o=""}n=!0,r=!1;break;default:o+=a}}if(r)throw new Error('Unexpected end of alias in "'+e+'"');return o.length>0&&t.push({type:"value-non-reference",value:o}),n?t:[]}function extractTokens(e,t,n){const r=new Map;for(const o in e)if(Object.hasOwnProperty.call(e,o)){if(null===e[o]||"object"!=typeof e[o]||Array.isArray(e[o]))throw new Error(`Parsing error at "${[...t,o].join(".")}"`);const s=Object(e[o]);if(!s)throw new Error(`Parsing error at "${[...t,o].join(".")}"`);if(void 0!==s.value){const e=extractStyleDictionaryV3Token(s,o,t,n);r.set(e.metadata.path.join("."),e);continue}for(const[e,a]of extractTokens(s,[...t,o],n).entries())r.set(e,a)}return r}function extractStyleDictionaryV3Tokens(e,t){return dereferenceTokenValues(extractTokens(e,[],t))}function extractStyleDictionaryTokens(e,t,n){if("3"===e)return extractStyleDictionaryV3Tokens(t,n);throw new Error("Unsupported version: "+e)}const p="6b4e71e7-4787-42f7-a092-8684961895db";function parseImport(t){const n=e(t),r={filePath:"",format:"standard",conditions:[p]};return n.walk((e=>{"function"===e.type&&"url"===e.value&&(r.filePath=e.nodes[0].value),"function"===e.type&&"format"===e.value&&(r.format=e.nodes[0].value),"function"===e.type&&"when"===e.value&&(r.conditions=e.nodes.filter((e=>"string"===e.type)).map((e=>e.value)))})),r.conditions.length||(r.conditions=[p]),r}async function tokensFromImport(e,o,s,a,i,u){const{filePath:l,format:c,conditions:f}=parseImport(i);if(!f.every((e=>s.includes(e))))return!1;let p="";try{if(l.startsWith("node_modules://")){p=r.createRequire(t.dirname(a)).resolve(l.slice(15))}else if(l.startsWith("node_modules:")){p=r.createRequire(t.dirname(a)).resolve(l.slice(13))}else p=t.resolve(t.dirname(a),l)}catch(e){throw new Error(`Failed to read ${l} with error ${e instanceof Error?e.message:e}`)}if(u.has(p))return!1;o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:p,parent:e.source?.input?.file}),u.add(p);const m=await n.readFile(p,"utf8"),d=JSON.parse(m);if("style-dictionary3"===c)return{filePath:t.resolve(l),tokens:extractStyleDictionaryTokens("3",d,p)};throw new Error("Unsupported format: "+c)}function mergeTokens(e,t){const n=new Map(e);for(const[e,r]of t)n.set(e,r);return n}function parsePluginOptions(e){const t={importAtRuleName:"design-tokens",is:[p],unitsAndValues:{rootFontSize:16},valueFunctionName:"design-token"};return e?("object"!=typeof e||(Array.isArray(e.is)&&(t.is=e.is.filter((e=>"string"==typeof e))),0===t.is.length&&(t.is=[p]),"object"==typeof e.unitsAndValues&&"number"==typeof e.unitsAndValues.rootFontSize&&((n=e.unitsAndValues.rootFontSize)>0&&n!==1/0)&&(t.unitsAndValues.rootFontSize=e.unitsAndValues.rootFontSize),"string"==typeof e.valueFunctionName&&(t.valueFunctionName=e.valueFunctionName),"string"==typeof e.importAtRuleName&&(t.importAtRuleName=e.importAtRuleName)),t):t;var n}function parseComponentValuesFromTokens(e){return o(e,{onParseError:e=>{throw e}})}function parseComponentValues(e){const t=l({css:e},{onParseError:e=>{throw e}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n.push(t.nextToken()),parseComponentValuesFromTokens(n)}function transform(e,t,n,r,o){const s=parseComponentValues(r);let a=!1;return s.forEach(((r,i)=>{if("walk"in r){{const u=transformComponentValue(r,e,t,n,o);if(u)return s.splice(i,1,...u),a=!0,!1}r.walk(((r,s)=>{if("string"==typeof s)return;const i=transformComponentValue(r.node,e,t,n,o);return i?(r.parent.value.splice(s,1,...i),a=!0,!1):void 0}))}})),a?s.map((e=>e.toString())).join(""):r}function transformComponentValue(e,t,n,r,o){if(!s(e))return;if(e.getName().toLowerCase()!==o.valueFunctionName)return;let l="",f="",p="";for(let t=0;t{const t=parsePluginOptions(e);return{postcssPlugin:"postcss-design-tokens",prepare(){let e=new Map,n=new Set;return{OnceExit(){e=new Map,n=new Set},Once:async(r,o)=>{const s=[];r.walkAtRules((e=>{if(e.name.toLowerCase()!==t.importAtRuleName)return;if(!e?.source?.input?.file)return;const n=e.source.input.file,r=e.params;e.remove(),s.push({filePath:n,params:r,node:e})}));for(const a of s.values()){let s;try{if(s=await tokensFromImport(r,o,t.is,a.filePath,a.params,n),!s)continue}catch(e){a.node.warn(o.result,`Failed to import design tokens from "${a.params}" with error:\n\t`+(e instanceof Error?e.message:e));continue}o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:s.filePath,parent:a.filePath}),e=mergeTokens(e,s.tokens)}},Declaration(n,{result:r}){if(n.value.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.value,t);if(o===n.value)return;n.value=o}catch(e){n.warn(r,`Failed to parse and transform "${n.value}"`)}},AtRule(n,{result:r}){if(n.params.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.params,t);if(o===n.params)return;n.params=o}catch(e){n.warn(r,`Failed to parse and transform "${n.params}"`)}}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";import t from"path";import{promises as n}from"fs";import r from"module";import{parseListOfComponentValues as o,isFunctionNode as s,isWhitespaceNode as a,isCommentNode as i,isTokenNode as u}from"@csstools/css-parser-algorithms";import{tokenizer as l,TokenType as c}from"@csstools/css-tokenizer";function toposort(e,t){let n=e.length;const r=new Array(n),o={};let s=n;const a=makeOutgoingEdges(t),i=makeNodesHash(e);for(t.forEach((function(e){if(!i.has(e[0])||!i.has(e[1]))throw new Error("Unknown token. Make sure to provide all tokens used in aliases.")}));s--;)o[s]||visit(e[s],s,new Set);return r;function visit(e,t,s){if(s.has(e)){let t;try{t=", token was: "+JSON.stringify(e)}catch(e){t=""}throw new Error("Cyclic dependency"+t)}if(!i.has(e))throw new Error("Found unknown token. Make sure to provided all involved tokens. Unknown token: "+JSON.stringify(e));if(o[t])return;o[t]=!0;const u=Array.from(a.get(e)||new Set);if(t=u.length){s.add(e);do{const e=u[--t];visit(e,i.get(e),s)}while(t);s.delete(e)}r[--n]=e}}function makeOutgoingEdges(e){const t=new Map;for(let n=0,r=e.length;napplyTransformsToValue(o,e),name:String(e.name??"")||t,comment:String(e.comment??"")||void 0,metadata:{name:String(e.name??"")?t:void 0,path:[...n,t],filePath:r,isSource:!0}}}const f=new Map;function applyTransformsToValue(t,n){if(!t)return"";if(!n)return t;if(!n.toUnit)return t;const r=e.unit(t);if(!r||r.unit===n.toUnit)return t;if(!r.unit){if(f.has(n.toUnit)){if(f.get(n.toUnit))return`${t}${n.toUnit}`;throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}try{const r=e.unit(`${t}${n.toUnit}`);if(r&&r.unit===n.toUnit)return f.set(n.toUnit,!0),`${t}${n.toUnit}`;f.set(n.toUnit,!1)}catch(e){f.set(n.toUnit,!1)}throw new Error(`Invalid unit "${n.toUnit}" for "${t}"`)}return"rem"===r.unit&&"px"===n.toUnit?remToPx(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):"px"===r.unit&&"rem"===n.toUnit?pxToRem(parseFloat(r.number),n.pluginOptions?.rootFontSize??16):t}function remToPx(e,t){return`${formatFloat(e*t)}px`}function pxToRem(e,t){return`${formatFloat(e/t)}rem`}function formatFloat(e){if(Number.isInteger(e))return e.toString();let t=e.toFixed(5);for(let e=t.length-1;e>=0&&"."!==t[e]&&"0"===t[e];e--)t=t.slice(0,e);return t}function dereferenceTokenValues(e){const t=new Set,n=new Map;for(const[r,o]of e.entries()){const e=parseReferences(o.value);e.length&&(t.add(r),n.set(r,e))}for(const[r,o]of n.entries()){for(let n=0;n"value-reference"===e.type)))continue;const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e;{const r=Array.from(e.keys()),o=[];for(const[e,t]of n.entries())for(let n=0;n"value-reference"===e.type)))throw new Error('Token "'+r+'" can not be fully resolved');const s=o.map((e=>e.value)).join(""),a=e.get(r);a.value=s,a.cssValue=e=>applyTransformsToValue(s,e),e.set(r,a),t.delete(r),n.delete(r)}if(0===t.size)return e}return e}function parseReferences(e){if("string"!=typeof e)return[];if(-1===e.indexOf("{"))return[];const t=[];let n=!1,r=!1,o="";for(let s=0;s0&&(t.push({type:"value-non-reference",value:o}),o=""),r=!0;break;case"}":if(!r)throw new Error('Unexpected "}" in "'+e+'" at '+s);if(0===o.length)throw new Error('Empty alias "{}" in "'+e+'" at '+s);{let e=o.trim();".value"===e.slice(-6)&&(e=e.slice(0,-6)),t.push({type:"value-reference",raw:e}),o=""}n=!0,r=!1;break;default:o+=a}}if(r)throw new Error('Unexpected end of alias in "'+e+'"');return o.length>0&&t.push({type:"value-non-reference",value:o}),n?t:[]}function extractTokens(e,t,n){const r=new Map;for(const o in e)if(Object.hasOwnProperty.call(e,o)){if(null===e[o]||"object"!=typeof e[o]||Array.isArray(e[o]))throw new Error(`Parsing error at "${[...t,o].join(".")}"`);const s=Object(e[o]);if(!s)throw new Error(`Parsing error at "${[...t,o].join(".")}"`);if(void 0!==s.value){const e=extractStyleDictionaryV3Token(s,o,t,n);r.set(e.metadata.path.join("."),e);continue}for(const[e,a]of extractTokens(s,[...t,o],n).entries())r.set(e,a)}return r}function extractStyleDictionaryV3Tokens(e,t){return dereferenceTokenValues(extractTokens(e,[],t))}function extractStyleDictionaryTokens(e,t,n){if("3"===e)return extractStyleDictionaryV3Tokens(t,n);throw new Error("Unsupported version: "+e)}const p="6b4e71e7-4787-42f7-a092-8684961895db";function parseImport(t){const n=e(t),r={filePath:"",format:"standard",conditions:[p]};return n.walk((e=>{"function"===e.type&&"url"===e.value&&(r.filePath=e.nodes[0].value),"function"===e.type&&"format"===e.value&&(r.format=e.nodes[0].value),"function"===e.type&&"when"===e.value&&(r.conditions=e.nodes.filter((e=>"string"===e.type)).map((e=>e.value)))})),r.conditions.length||(r.conditions=[p]),r}async function tokensFromImport(e,o,s,a,i,u){const{filePath:l,format:c,conditions:f}=parseImport(i);if(!f.every((e=>s.includes(e))))return!1;let p="";try{if(l.startsWith("node_modules://")){p=r.createRequire(t.dirname(a)).resolve(l.slice(15))}else if(l.startsWith("node_modules:")){p=r.createRequire(t.dirname(a)).resolve(l.slice(13))}else p=t.resolve(t.dirname(a),l)}catch(e){throw new Error(`Failed to read ${l} with error ${e instanceof Error?e.message:e}`)}if(u.has(p))return!1;o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:p,parent:e.source?.input?.file}),u.add(p);const m=await n.readFile(p,"utf8"),d=JSON.parse(m);if("style-dictionary3"===c)return{filePath:t.resolve(l),tokens:extractStyleDictionaryTokens("3",d,p)};throw new Error("Unsupported format: "+c)}function mergeTokens(e,t){const n=new Map(e);for(const[e,r]of t)n.set(e,r);return n}function parsePluginOptions(e){const t={importAtRuleName:"design-tokens",is:[p],unitsAndValues:{rootFontSize:16},valueFunctionName:"design-token"};return e?("object"!=typeof e||(Array.isArray(e.is)&&(t.is=e.is.filter((e=>"string"==typeof e))),0===t.is.length&&(t.is=[p]),"object"==typeof e.unitsAndValues&&"number"==typeof e.unitsAndValues.rootFontSize&&((n=e.unitsAndValues.rootFontSize)>0&&n!==1/0)&&(t.unitsAndValues.rootFontSize=e.unitsAndValues.rootFontSize),"string"==typeof e.valueFunctionName&&(t.valueFunctionName=e.valueFunctionName),"string"==typeof e.importAtRuleName&&(t.importAtRuleName=e.importAtRuleName)),t):t;var n}function parseComponentValuesFromTokens(e){return o(e,{onParseError:e=>{throw e}})}function parseComponentValues(e){const t=l({css:e},{onParseError:e=>{throw e}}),n=[];for(;!t.endOfFile();)n.push(t.nextToken());return n.push(t.nextToken()),parseComponentValuesFromTokens(n)}function transform(e,t,n,r,o){const s=parseComponentValues(r);let a=!1;return s.forEach(((r,i)=>{if("walk"in r){{const u=transformComponentValue(r,e,t,n,o);if(u)return s.splice(i,1,...u),a=!0,!1}r.walk(((r,s)=>{if("string"==typeof s)return;const i=transformComponentValue(r.node,e,t,n,o);return i?(r.parent.value.splice(s,1,...i),a=!0,!1):void 0}))}})),a?s.map((e=>e.toString())).join(""):r}function transformComponentValue(e,t,n,r,o){if(!s(e))return;if(e.getName().toLowerCase()!==o.valueFunctionName)return;let l="",f="",p="";for(let t=0;t{const t=parsePluginOptions(e);return{postcssPlugin:"postcss-design-tokens",prepare(){let e=new Map,n=new Set;return{postcssPlugin:"postcss-design-tokens",OnceExit(){e=new Map,n=new Set},async Once(r,o){const s=[];r.walkAtRules((e=>{if(e.name.toLowerCase()!==t.importAtRuleName)return;if(!e?.source?.input?.file)return;const n=e.source.input.file,r=e.params;e.remove(),s.push({filePath:n,params:r,node:e})}));for(const a of s.values()){let s;try{if(s=await tokensFromImport(r,o,t.is,a.filePath,a.params,n),!s)continue}catch(e){a.node.warn(o.result,`Failed to import design tokens from "${a.params}" with error:\n\t`+(e instanceof Error?e.message:e));continue}o.result.messages.push({type:"dependency",plugin:"postcss-design-tokens",file:s.filePath,parent:a.filePath}),e=mergeTokens(e,s.tokens)}},Declaration(n,{result:r}){if(n.value.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.value,t);if(o===n.value)return;n.value=o}catch(e){n.warn(r,`Failed to parse and transform "${n.value}"`)}},AtRule(n,{result:r}){if(n.params.toLowerCase().includes(t.valueFunctionName))try{const o=transform(e,r,n,n.params,t);if(o===n.params)return;n.params=o}catch(e){n.warn(r,`Failed to parse and transform "${n.params}"`)}}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/dereference.ts b/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/dereference.ts index 5ac37c07b..46a5f6782 100644 --- a/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/dereference.ts +++ b/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/dereference.ts @@ -55,7 +55,7 @@ export function dereferenceTokenValues(tokens: Map { + currentToken.cssValue = (transformOptions: TokenTransformOptions): string => { return applyTransformsToValue(value, transformOptions); }; @@ -127,7 +127,7 @@ export function dereferenceTokenValues(tokens: Map { + currentToken.cssValue = (transformOptions: TokenTransformOptions): string => { return applyTransformsToValue(value, transformOptions); }; diff --git a/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/value.ts b/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/value.ts index abf8806bd..4a3b86ace 100644 --- a/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/value.ts +++ b/plugins/postcss-design-tokens/src/data-formats/style-dictionary/v3/value.ts @@ -45,7 +45,7 @@ export function extractStyleDictionaryV3Token(node: Record, key return { value: value, - cssValue: (transformOptions?: TokenTransformOptions) => { + cssValue: (transformOptions?: TokenTransformOptions): string => { return applyTransformsToValue(value, transformOptions); }, name: String(node['name'] ?? '') || key, diff --git a/plugins/postcss-design-tokens/src/data-formats/toposort/toposort.ts b/plugins/postcss-design-tokens/src/data-formats/toposort/toposort.ts index 7ff5a7e5e..515a5e0bc 100644 --- a/plugins/postcss-design-tokens/src/data-formats/toposort/toposort.ts +++ b/plugins/postcss-design-tokens/src/data-formats/toposort/toposort.ts @@ -43,7 +43,7 @@ export function toposort(nodes: Array, edges: Array>): Arr return sorted; - function visit(node: string, j: number, predecessors: Set) { + function visit(node: string, j: number, predecessors: Set): void { if (predecessors.has(node)) { let nodeRep; try { @@ -63,15 +63,14 @@ export function toposort(nodes: Array, edges: Array>): Arr } visited[j] = true; - let outgoing = outgoingEdges.get(node) || new Set(); - outgoing = Array.from(outgoing); + const outgoing: Array = Array.from(outgoingEdges.get(node) || new Set()); // eslint-disable-next-line no-cond-assign if (j = outgoing.length) { predecessors.add(node); do { const child = outgoing[--j]; - visit(child, nodesHash.get(child), predecessors); + visit(child, nodesHash.get(child)!, predecessors); } while (j); predecessors.delete(node); } @@ -80,7 +79,7 @@ export function toposort(nodes: Array, edges: Array>): Arr } } -function makeOutgoingEdges(arr: Array>) { +function makeOutgoingEdges(arr: Array>): Map> { const edges = new Map(); for (let i = 0, len = arr.length; i < len; i++) { const edge = arr[i]; @@ -95,7 +94,7 @@ function makeOutgoingEdges(arr: Array>) { return edges; } -function makeNodesHash(arr: Array) { +function makeNodesHash(arr: Array): Map { const res = new Map(); for (let i = 0, len = arr.length; i < len; i++) { res.set(arr[i], i); diff --git a/plugins/postcss-design-tokens/src/index.ts b/plugins/postcss-design-tokens/src/index.ts index 40d74de3b..1c66dbf77 100644 --- a/plugins/postcss-design-tokens/src/index.ts +++ b/plugins/postcss-design-tokens/src/index.ts @@ -1,4 +1,4 @@ -import type { Node, PluginCreator } from 'postcss'; +import type { Node, Plugin, PluginCreator } from 'postcss'; import { Token } from './data-formats/base/token'; import { tokensFromImport } from './data-formats/parse-import'; import { mergeTokens } from './data-formats/token'; @@ -11,16 +11,17 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-design-tokens', - prepare() { + prepare(): Plugin { let tokens = new Map(); let importedFiles = new Set(); return { - OnceExit() { + postcssPlugin: 'postcss-design-tokens', + OnceExit(): void { tokens = new Map(); importedFiles = new Set(); }, - Once: async (root, postcssHelpers) => { + async Once(root, postcssHelpers): Promise { const designTokenAtRules: Array<{filePath: string, params: string, node: Node}> = []; root.walkAtRules((atRule) => { if (atRule.name.toLowerCase() !== options.importAtRuleName) { @@ -64,7 +65,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { tokens = mergeTokens(tokens, importResult.tokens); } }, - Declaration(decl, { result }) { + Declaration(decl, { result }): void { if (!decl.value.toLowerCase().includes(options.valueFunctionName)) { return; } @@ -80,7 +81,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { decl.warn(result, `Failed to parse and transform "${decl.value}"`); } }, - AtRule(atRule, { result }) { + AtRule(atRule, { result }): void { if (!atRule.params.toLowerCase().includes(options.valueFunctionName)) { return; } diff --git a/plugins/postcss-design-tokens/src/options.ts b/plugins/postcss-design-tokens/src/options.ts index 75d183006..a4f4ad80e 100644 --- a/plugins/postcss-design-tokens/src/options.ts +++ b/plugins/postcss-design-tokens/src/options.ts @@ -63,6 +63,6 @@ export function parsePluginOptions(opts?: pluginOptions): parsedPluginOptions { return options; } -function isPositiveAndNotZero(x: number) { +function isPositiveAndNotZero(x: number): boolean { return x > 0 && x !== Infinity; } diff --git a/plugins/postcss-design-tokens/src/parse-component-values.ts b/plugins/postcss-design-tokens/src/parse-component-values.ts index 29f5fc193..a7c8cd98d 100644 --- a/plugins/postcss-design-tokens/src/parse-component-values.ts +++ b/plugins/postcss-design-tokens/src/parse-component-values.ts @@ -1,7 +1,7 @@ -import { parseListOfComponentValues } from '@csstools/css-parser-algorithms'; +import { ComponentValue, parseListOfComponentValues } from '@csstools/css-parser-algorithms'; import { CSSToken, tokenizer } from '@csstools/css-tokenizer'; -function parseComponentValuesFromTokens(tokens: Array) { +function parseComponentValuesFromTokens(tokens: Array): Array { return parseListOfComponentValues(tokens, { onParseError: (err) => { throw err; @@ -9,7 +9,7 @@ function parseComponentValuesFromTokens(tokens: Array) { }); } -export function parseComponentValues(source: string) { +export function parseComponentValues(source: string): Array { const t = tokenizer({ css: source }, { onParseError: (err) => { throw err; diff --git a/plugins/postcss-design-tokens/src/transform.ts b/plugins/postcss-design-tokens/src/transform.ts index 8e2ad6bc8..f188f60e5 100644 --- a/plugins/postcss-design-tokens/src/transform.ts +++ b/plugins/postcss-design-tokens/src/transform.ts @@ -5,7 +5,7 @@ import { Token, TokenTransformOptions } from './data-formats/base/token'; import { parsedPluginOptions } from './options'; import { parseComponentValues } from './parse-component-values'; -export function transform(tokens: Map, result: Result, postCSSNode: Node, source: string, opts: parsedPluginOptions) { +export function transform(tokens: Map, result: Result, postCSSNode: Node, source: string, opts: parsedPluginOptions): string { const componentValues = parseComponentValues(source); let didChangeSomething = false; @@ -46,7 +46,7 @@ export function transform(tokens: Map, result: Result, postCSSNod } -function transformComponentValue(node: ComponentValue, tokens: Map, result: Result, postCSSNode: Node, opts: parsedPluginOptions) { +function transformComponentValue(node: ComponentValue, tokens: Map, result: Result, postCSSNode: Node, opts: parsedPluginOptions): Array | undefined { if (!isFunctionNode(node)) { return; } diff --git a/plugins/postcss-dir-pseudo-class/dist/index.cjs b/plugins/postcss-dir-pseudo-class/dist/index.cjs index f09a68b4d..5a8dce696 100644 --- a/plugins/postcss-dir-pseudo-class/dist/index.cjs +++ b/plugins/postcss-dir-pseudo-class/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const creator=t=>{const r=Object.assign({dir:null,preserve:!1,shadow:!1},t);return{postcssPlugin:"postcss-dir-pseudo-class",prepare(){const t=new WeakSet;return{Rule(o,{result:s}){if(t.has(o))return;let a,n=!1;if(o.selector.toLowerCase().includes(":dir(")){try{a=e((t=>{t.nodes.forEach((t=>{t.walk((t=>{if("pseudo"!==t.type)return;if(":dir"!==t.value.toLowerCase())return;if(!t.nodes||!t.nodes.length)return;const a=t.nodes.toString().toLowerCase();if("rtl"!==a&&"ltr"!==a)return;const l=t.parent;if(!l)return;l.nodes.filter((e=>"pseudo"===e.type&&":dir"===e.value.toLowerCase())).length>1&&!n&&(n=!0,o.warn(s,`Hierarchical :dir pseudo class usage can't be transformed correctly to [dir] attributes. This will lead to incorrect selectors for "${o.selector}"`));const c=t.prev(),i=t.next(),p=c&&c.type&&"combinator"!==c.type,u=i&&i.type&&"combinator"!==i.type,d=i&&i.type&&("combinator"!==i.type||"combinator"===i.type&&" "===i.value);p||u||0===l.nodes.indexOf(t)&&d||1===l.nodes.length?t.remove():t.replaceWith(e.universal());const v=l.nodes[0],f=v&&"combinator"===v.type&&" "===v.value,w=v&&"tag"===v.type&&"html"===v.value.toLowerCase(),y=v&&"pseudo"===v.type&&":root"===v.value.toLowerCase();!v||w||y||f||l.prepend(e.combinator({value:" "}));const h=r.dir===a,b=e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${a}"`,raws:{}}),m=e.pseudo({value:":host-context"});m.append(e.selector({value:"",nodes:[b]}));const g=e.pseudo({value:(w||y?"":"html")+":not"});g.append(e.selector({value:"",nodes:[e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${"ltr"===a?"rtl":"ltr"}"`,raws:{}})]})),h?w?l.insertAfter(v,g):l.prepend(g):w?l.insertAfter(v,b):r.shadow&&!y?l.prepend(m):l.prepend(b)}))}))})).processSync(o.selector)}catch(e){return void o.warn(s,`Failed to parse selector : ${o.selector}`)}void 0!==a&&a!==o.selector&&(t.add(o),o.cloneBefore({selector:a}),r.preserve||o.remove())}}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");const creator=t=>{const r=Object.assign({dir:null,preserve:!1,shadow:!1},t);return{postcssPlugin:"postcss-dir-pseudo-class",prepare(){const t=new WeakSet;return{postcssPlugin:"postcss-dir-pseudo-class",Rule(o,{result:s}){if(t.has(o))return;let a,n=!1;if(o.selector.toLowerCase().includes(":dir(")){try{a=e((t=>{t.nodes.forEach((t=>{t.walk((t=>{if("pseudo"!==t.type)return;if(":dir"!==t.value.toLowerCase())return;if(!t.nodes||!t.nodes.length)return;const a=t.nodes.toString().toLowerCase();if("rtl"!==a&&"ltr"!==a)return;const l=t.parent;if(!l)return;l.nodes.filter((e=>"pseudo"===e.type&&":dir"===e.value.toLowerCase())).length>1&&!n&&(n=!0,o.warn(s,`Hierarchical :dir pseudo class usage can't be transformed correctly to [dir] attributes. This will lead to incorrect selectors for "${o.selector}"`));const c=t.prev(),p=t.next(),i=c&&c.type&&"combinator"!==c.type,u=p&&p.type&&"combinator"!==p.type,d=p&&p.type&&("combinator"!==p.type||"combinator"===p.type&&" "===p.value);i||u||0===l.nodes.indexOf(t)&&d||1===l.nodes.length?t.remove():t.replaceWith(e.universal());const v=l.nodes[0],f=v&&"combinator"===v.type&&" "===v.value,w=v&&"tag"===v.type&&"html"===v.value.toLowerCase(),y=v&&"pseudo"===v.type&&":root"===v.value.toLowerCase();!v||w||y||f||l.prepend(e.combinator({value:" "}));const h=r.dir===a,b=e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${a}"`,raws:{}}),m=e.pseudo({value:":host-context"});m.append(e.selector({value:"",nodes:[b]}));const g=e.pseudo({value:(w||y?"":"html")+":not"});g.append(e.selector({value:"",nodes:[e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${"ltr"===a?"rtl":"ltr"}"`,raws:{}})]})),h?w?l.insertAfter(v,g):l.prepend(g):w?l.insertAfter(v,b):r.shadow&&!y?l.prepend(m):l.prepend(b)}))}))})).processSync(o.selector)}catch(e){return void o.warn(s,`Failed to parse selector : ${o.selector}`)}void 0!==a&&a!==o.selector&&(t.add(o),o.cloneBefore({selector:a}),r.preserve||o.remove())}}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-dir-pseudo-class/dist/index.mjs b/plugins/postcss-dir-pseudo-class/dist/index.mjs index d3c2142de..9321d9b86 100644 --- a/plugins/postcss-dir-pseudo-class/dist/index.mjs +++ b/plugins/postcss-dir-pseudo-class/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";const creator=t=>{const r=Object.assign({dir:null,preserve:!1,shadow:!1},t);return{postcssPlugin:"postcss-dir-pseudo-class",prepare(){const t=new WeakSet;return{Rule(o,{result:s}){if(t.has(o))return;let a,n=!1;if(o.selector.toLowerCase().includes(":dir(")){try{a=e((t=>{t.nodes.forEach((t=>{t.walk((t=>{if("pseudo"!==t.type)return;if(":dir"!==t.value.toLowerCase())return;if(!t.nodes||!t.nodes.length)return;const a=t.nodes.toString().toLowerCase();if("rtl"!==a&&"ltr"!==a)return;const l=t.parent;if(!l)return;l.nodes.filter((e=>"pseudo"===e.type&&":dir"===e.value.toLowerCase())).length>1&&!n&&(n=!0,o.warn(s,`Hierarchical :dir pseudo class usage can't be transformed correctly to [dir] attributes. This will lead to incorrect selectors for "${o.selector}"`));const c=t.prev(),p=t.next(),i=c&&c.type&&"combinator"!==c.type,d=p&&p.type&&"combinator"!==p.type,u=p&&p.type&&("combinator"!==p.type||"combinator"===p.type&&" "===p.value);i||d||0===l.nodes.indexOf(t)&&u||1===l.nodes.length?t.remove():t.replaceWith(e.universal());const v=l.nodes[0],f=v&&"combinator"===v.type&&" "===v.value,w=v&&"tag"===v.type&&"html"===v.value.toLowerCase(),y=v&&"pseudo"===v.type&&":root"===v.value.toLowerCase();!v||w||y||f||l.prepend(e.combinator({value:" "}));const h=r.dir===a,b=e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${a}"`,raws:{}}),m=e.pseudo({value:":host-context"});m.append(e.selector({value:"",nodes:[b]}));const g=e.pseudo({value:(w||y?"":"html")+":not"});g.append(e.selector({value:"",nodes:[e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${"ltr"===a?"rtl":"ltr"}"`,raws:{}})]})),h?w?l.insertAfter(v,g):l.prepend(g):w?l.insertAfter(v,b):r.shadow&&!y?l.prepend(m):l.prepend(b)}))}))})).processSync(o.selector)}catch(e){return void o.warn(s,`Failed to parse selector : ${o.selector}`)}void 0!==a&&a!==o.selector&&(t.add(o),o.cloneBefore({selector:a}),r.preserve||o.remove())}}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";const creator=t=>{const r=Object.assign({dir:null,preserve:!1,shadow:!1},t);return{postcssPlugin:"postcss-dir-pseudo-class",prepare(){const t=new WeakSet;return{postcssPlugin:"postcss-dir-pseudo-class",Rule(o,{result:s}){if(t.has(o))return;let a,n=!1;if(o.selector.toLowerCase().includes(":dir(")){try{a=e((t=>{t.nodes.forEach((t=>{t.walk((t=>{if("pseudo"!==t.type)return;if(":dir"!==t.value.toLowerCase())return;if(!t.nodes||!t.nodes.length)return;const a=t.nodes.toString().toLowerCase();if("rtl"!==a&&"ltr"!==a)return;const l=t.parent;if(!l)return;l.nodes.filter((e=>"pseudo"===e.type&&":dir"===e.value.toLowerCase())).length>1&&!n&&(n=!0,o.warn(s,`Hierarchical :dir pseudo class usage can't be transformed correctly to [dir] attributes. This will lead to incorrect selectors for "${o.selector}"`));const c=t.prev(),p=t.next(),i=c&&c.type&&"combinator"!==c.type,d=p&&p.type&&"combinator"!==p.type,u=p&&p.type&&("combinator"!==p.type||"combinator"===p.type&&" "===p.value);i||d||0===l.nodes.indexOf(t)&&u||1===l.nodes.length?t.remove():t.replaceWith(e.universal());const v=l.nodes[0],f=v&&"combinator"===v.type&&" "===v.value,w=v&&"tag"===v.type&&"html"===v.value.toLowerCase(),y=v&&"pseudo"===v.type&&":root"===v.value.toLowerCase();!v||w||y||f||l.prepend(e.combinator({value:" "}));const h=r.dir===a,b=e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${a}"`,raws:{}}),m=e.pseudo({value:":host-context"});m.append(e.selector({value:"",nodes:[b]}));const g=e.pseudo({value:(w||y?"":"html")+":not"});g.append(e.selector({value:"",nodes:[e.attribute({attribute:"dir",operator:"=",quoteMark:'"',value:`"${"ltr"===a?"rtl":"ltr"}"`,raws:{}})]})),h?w?l.insertAfter(v,g):l.prepend(g):w?l.insertAfter(v,b):r.shadow&&!y?l.prepend(m):l.prepend(b)}))}))})).processSync(o.selector)}catch(e){return void o.warn(s,`Failed to parse selector : ${o.selector}`)}void 0!==a&&a!==o.selector&&(t.add(o),o.cloneBefore({selector:a}),r.preserve||o.remove())}}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-dir-pseudo-class/src/index.ts b/plugins/postcss-dir-pseudo-class/src/index.ts index be26fb661..6af9405cd 100644 --- a/plugins/postcss-dir-pseudo-class/src/index.ts +++ b/plugins/postcss-dir-pseudo-class/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import selectorParser from 'postcss-selector-parser'; /** postcss-dir-pseudo-class plugin options */ @@ -29,11 +29,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-dir-pseudo-class', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-dir-pseudo-class', + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/postcss-double-position-gradients/src/index.ts b/plugins/postcss-double-position-gradients/src/index.ts index c589dfa6b..30a17c76c 100644 --- a/plugins/postcss-double-position-gradients/src/index.ts +++ b/plugins/postcss-double-position-gradients/src/index.ts @@ -22,9 +22,9 @@ const keywords = [ 'top', ]; -const isPunctuationCommaNode = (node: valueParser.Node) => node.type === 'div' && node.value === ','; +const isPunctuationCommaNode = (node: valueParser.Node): boolean => node.type === 'div' && node.value === ','; -function isNumericNode(node: valueParser.Node) { +function isNumericNode(node: valueParser.Node): boolean { try { return valueParser.unit(node?.value) !== false; } catch (_) { @@ -40,7 +40,7 @@ function isNumericNode(node: valueParser.Node) { const basePlugin: PluginCreator<{ preserve?: boolean }> = (opts?: { preserve?: boolean }) => { return { postcssPlugin: 'postcss-double-position-gradients', - Declaration(decl, { result }) { + Declaration(decl, { result }): void { if (!HAS_GRADIENT_FUNCTION_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-exponential-functions/src/index.ts b/plugins/postcss-exponential-functions/src/index.ts index fb224dbe2..fd53d0940 100644 --- a/plugins/postcss-exponential-functions/src/index.ts +++ b/plugins/postcss-exponential-functions/src/index.ts @@ -21,7 +21,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-exponential-functions', - Declaration(decl) { + Declaration(decl): void { if (!FUNCTION_CALL_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-extract/dist/index.cjs b/plugins/postcss-extract/dist/index.cjs index 969f81b9f..28b369757 100644 --- a/plugins/postcss-extract/dist/index.cjs +++ b/plugins/postcss-extract/dist/index.cjs @@ -1 +1 @@ -"use strict";var e,t=require("postcss-selector-parser");function notPseudo(e,t){return e.filter((e=>!t.includes(e)))}function adjacentSiblingCombinator(e){return e.map((e=>e.prev())).filter((e=>!!e))}function childCombinator(e){return e.map((e=>e.parent)).filter((e=>!!e))}function descendantCombinator(e){return e.flatMap((t=>{const n=[];let r=t.parent;for(;r;)n.push(r),r=r.parent;return e.length?n:[]})).filter((e=>!!e))}function generalSiblingCombinator(e){return e.flatMap((t=>{const n=[];let r=t.prev();for(;r;)n.push(r),r=r.prev();return e.length?n:[]})).filter((e=>!!e))}function matchAttribute(t,n,r,a,s=!1){if(n.startsWith("__proto__")||r?.startsWith("__proto__"))return[];let i=!1;r||""===r||(i=!0);let o="";i||(o=r.toString()),s&&(o=o.toLowerCase());return t.filter((t=>{let r="";if(r="variable"===n.toLowerCase()&&"decl"===t.type&&"variable"in t?"variable":Object.keys(t).find((e=>e.toLowerCase()===n.toLowerCase()&&Object.prototype.hasOwnProperty.call(t,e))),!r)return!1;if("boolean"==typeof t[r])return t[r];if(i)return!0;let u=[t[r].toString()];switch("rule"!==t.type||"selector"!==r&&"selectors"!==r||(u=t.selectors),s&&(u=u.map((e=>e.toLowerCase()))),a){case e.StartsWith:return!!u.find((e=>e.startsWith(o)));case e.EndsWith:return!!u.find((e=>e.endsWith(o)));case e.Contains:return!!u.find((e=>e.includes(o)));case e.Exact:default:return!!u.find((e=>e===o))}}))}function matchTagName(e,t){return e.filter((e=>e.type.toLowerCase()===t.toLowerCase()))}function simplifyASTNode(e){switch(e.type){case"decl":{const t=e;return cleanUndefinedValues({type:t.type,important:t.important,prop:t.prop,value:t.value,variable:t.variable})}case"rule":{const t=e;return cleanUndefinedValues({type:t.type,selectors:t.selectors})}case"atrule":{const t=e;return cleanUndefinedValues({type:t.type,name:t.name,params:t.params})}case"comment":{const t=e;return cleanUndefinedValues({type:t.type,text:t.text})}default:return{}}}function cleanUndefinedValues(e){return Object.keys(e).forEach((t=>{void 0===e[t]&&delete e[t]})),e}function extract(e,t){const n={};for(const[r,a]of t){let t=new Set;a.each((n=>{t=selectNodesForSingleQuery(e,n,t)})),n[r]=[];for(const e of t)n[r].push(simplifyASTNode(e))}return n}function selectNodesForSingleQuery(e,t,n){const r=buildQuery(t);if(!r)return new Set;const a=new Set(n);return e.walk((e=>{if(a.has(e))return;executeConditions(r,[e]).length>0&&a.add(e)})),a}function buildQuery(t){if(!t||!t.nodes)return;let n;return t.each((t=>{switch(t.type){case"universal":n={next:n,run:e=>e};break;case"combinator":switch(t.value){case" ":n={next:n,run:e=>descendantCombinator(e)};break;case">":n={next:n,run:e=>childCombinator(e)};break;case"+":n={next:n,run:e=>adjacentSiblingCombinator(e)};break;case"~":n={next:n,run:e=>generalSiblingCombinator(e)};break;default:n={next:n,run:()=>[]}}break;case"tag":n={next:n,run:e=>matchTagName(e,t.value)};break;case"pseudo":if(":not"===t.value)n={next:n,run:e=>{const n=t.nodes.map((e=>buildQuery(e))),r=e.filter((e=>n.flatMap((t=>t?executeConditions(t,[e]):[])).length>0));return notPseudo(e,r)}};else n={next:n,run:()=>[]};break;case"attribute":switch(t.operator){case"^=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.StartsWith,t.insensitive)};break;case"$=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.EndsWith,t.insensitive)};break;case"*=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.Contains,t.insensitive)};break;default:n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.Exact,t.insensitive)}}break;default:n={next:n,run:()=>[]}}})),n}function executeConditions(e,t){let n=e,r=t;for(;n&&r.length>0;)r=n.run(r),n=n.next;return r}!function(e){e.Exact="",e.StartsWith="^",e.EndsWith="$",e.Contains="*"}(e||(e={}));const creator=e=>{const n=Object(e),r=new Map;return Object.keys(n.queries??{}).forEach((e=>{r.set(e,t().astSync(n.queries[e]))})),n.results||(n.results=e=>{console.log(e)}),{postcssPlugin:"postcss-extract",prepare:()=>n.extractLate?{OnceExit:e=>{n.results(extract(e,r))}}:{Once:e=>{n.results(extract(e,r))}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e,t=require("postcss-selector-parser");function notPseudo(e,t){return e.filter((e=>!t.includes(e)))}function adjacentSiblingCombinator(e){return e.map((e=>e.prev())).filter((e=>!!e))}function childCombinator(e){return e.map((e=>e.parent)).filter((e=>!!e))}function descendantCombinator(e){return e.flatMap((t=>{const n=[];let r=t.parent;for(;r;)n.push(r),r=r.parent;return e.length?n:[]})).filter((e=>!!e))}function generalSiblingCombinator(e){return e.flatMap((t=>{const n=[];let r=t.prev();for(;r;)n.push(r),r=r.prev();return e.length?n:[]})).filter((e=>!!e))}function matchAttribute(t,n,r,a,s=!1){if(n.startsWith("__proto__")||r?.startsWith("__proto__"))return[];let i=!1;r||""===r||(i=!0);let o="";i||(o=r.toString()),s&&(o=o.toLowerCase());return t.filter((t=>{let r="";if(r="variable"===n.toLowerCase()&&"decl"===t.type&&"variable"in t?"variable":Object.keys(t).find((e=>e.toLowerCase()===n.toLowerCase()&&Object.prototype.hasOwnProperty.call(t,e))),!r)return!1;if("boolean"==typeof t[r])return t[r];if(i)return!0;let u=[t[r].toString()];switch("rule"!==t.type||"selector"!==r&&"selectors"!==r||(u=t.selectors),s&&(u=u.map((e=>e.toLowerCase()))),a){case e.StartsWith:return!!u.find((e=>e.startsWith(o)));case e.EndsWith:return!!u.find((e=>e.endsWith(o)));case e.Contains:return!!u.find((e=>e.includes(o)));case e.Exact:default:return!!u.find((e=>e===o))}}))}function matchTagName(e,t){return e.filter((e=>e.type.toLowerCase()===t.toLowerCase()))}function simplifyASTNode(e){switch(e.type){case"decl":{const t=e;return cleanUndefinedValues({type:t.type,important:t.important,prop:t.prop,value:t.value,variable:t.variable})}case"rule":{const t=e;return cleanUndefinedValues({type:t.type,selectors:t.selectors})}case"atrule":{const t=e;return cleanUndefinedValues({type:t.type,name:t.name,params:t.params})}case"comment":{const t=e;return cleanUndefinedValues({type:t.type,text:t.text})}default:return{}}}function cleanUndefinedValues(e){return Object.keys(e).forEach((t=>{void 0===e[t]&&delete e[t]})),e}function extract(e,t){const n={};for(const[r,a]of t){let t=new Set;a.each((n=>{t=selectNodesForSingleQuery(e,n,t)})),n[r]=[];for(const e of t)n[r].push(simplifyASTNode(e))}return n}function selectNodesForSingleQuery(e,t,n){const r=buildQuery(t);if(!r)return new Set;const a=new Set(n);return e.walk((e=>{if(a.has(e))return;executeConditions(r,[e]).length>0&&a.add(e)})),a}function buildQuery(t){if(!t||!t.nodes)return;let n;return t.each((t=>{switch(t.type){case"universal":n={next:n,run:e=>e};break;case"combinator":switch(t.value){case" ":n={next:n,run:e=>descendantCombinator(e)};break;case">":n={next:n,run:e=>childCombinator(e)};break;case"+":n={next:n,run:e=>adjacentSiblingCombinator(e)};break;case"~":n={next:n,run:e=>generalSiblingCombinator(e)};break;default:n={next:n,run:()=>[]}}break;case"tag":n={next:n,run:e=>matchTagName(e,t.value)};break;case"pseudo":if(":not"===t.value)n={next:n,run:e=>{const n=t.nodes.map((e=>buildQuery(e))),r=e.filter((e=>n.flatMap((t=>t?executeConditions(t,[e]):[])).length>0));return notPseudo(e,r)}};else n={next:n,run:()=>[]};break;case"attribute":switch(t.operator){case"^=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.StartsWith,t.insensitive)};break;case"$=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.EndsWith,t.insensitive)};break;case"*=":n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.Contains,t.insensitive)};break;default:n={next:n,run:n=>matchAttribute(n,t.attribute,t.value,e.Exact,t.insensitive)}}break;default:n={next:n,run:()=>[]}}})),n}function executeConditions(e,t){let n=e,r=t;for(;n&&r.length>0;)r=n.run(r),n=n.next;return r}!function(e){e.Exact="",e.StartsWith="^",e.EndsWith="$",e.Contains="*"}(e||(e={}));const creator=e=>{const n=Object(e),r=new Map;return Object.keys(n.queries??{}).forEach((e=>{r.set(e,t().astSync(n.queries[e]))})),n.results||(n.results=e=>{console.log(e)}),{postcssPlugin:"postcss-extract",prepare:()=>n.extractLate?{postcssPlugin:"postcss-extract",OnceExit(e){n.results(extract(e,r))}}:{postcssPlugin:"postcss-extract",Once(e){n.results(extract(e,r))}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-extract/dist/index.mjs b/plugins/postcss-extract/dist/index.mjs index 89889233c..7e34e7bb2 100644 --- a/plugins/postcss-extract/dist/index.mjs +++ b/plugins/postcss-extract/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";function notPseudo(e,t){return e.filter((e=>!t.includes(e)))}function adjacentSiblingCombinator(e){return e.map((e=>e.prev())).filter((e=>!!e))}function childCombinator(e){return e.map((e=>e.parent)).filter((e=>!!e))}function descendantCombinator(e){return e.flatMap((t=>{const n=[];let r=t.parent;for(;r;)n.push(r),r=r.parent;return e.length?n:[]})).filter((e=>!!e))}function generalSiblingCombinator(e){return e.flatMap((t=>{const n=[];let r=t.prev();for(;r;)n.push(r),r=r.prev();return e.length?n:[]})).filter((e=>!!e))}var t;function matchAttribute(e,n,r,a,s=!1){if(n.startsWith("__proto__")||r?.startsWith("__proto__"))return[];let i=!1;r||""===r||(i=!0);let o="";i||(o=r.toString()),s&&(o=o.toLowerCase());return e.filter((e=>{let r="";if(r="variable"===n.toLowerCase()&&"decl"===e.type&&"variable"in e?"variable":Object.keys(e).find((t=>t.toLowerCase()===n.toLowerCase()&&Object.prototype.hasOwnProperty.call(e,t))),!r)return!1;if("boolean"==typeof e[r])return e[r];if(i)return!0;let u=[e[r].toString()];switch("rule"!==e.type||"selector"!==r&&"selectors"!==r||(u=e.selectors),s&&(u=u.map((e=>e.toLowerCase()))),a){case t.StartsWith:return!!u.find((e=>e.startsWith(o)));case t.EndsWith:return!!u.find((e=>e.endsWith(o)));case t.Contains:return!!u.find((e=>e.includes(o)));case t.Exact:default:return!!u.find((e=>e===o))}}))}function matchTagName(e,t){return e.filter((e=>e.type.toLowerCase()===t.toLowerCase()))}function simplifyASTNode(e){switch(e.type){case"decl":{const t=e;return cleanUndefinedValues({type:t.type,important:t.important,prop:t.prop,value:t.value,variable:t.variable})}case"rule":{const t=e;return cleanUndefinedValues({type:t.type,selectors:t.selectors})}case"atrule":{const t=e;return cleanUndefinedValues({type:t.type,name:t.name,params:t.params})}case"comment":{const t=e;return cleanUndefinedValues({type:t.type,text:t.text})}default:return{}}}function cleanUndefinedValues(e){return Object.keys(e).forEach((t=>{void 0===e[t]&&delete e[t]})),e}function extract(e,t){const n={};for(const[r,a]of t){let t=new Set;a.each((n=>{t=selectNodesForSingleQuery(e,n,t)})),n[r]=[];for(const e of t)n[r].push(simplifyASTNode(e))}return n}function selectNodesForSingleQuery(e,t,n){const r=buildQuery(t);if(!r)return new Set;const a=new Set(n);return e.walk((e=>{if(a.has(e))return;executeConditions(r,[e]).length>0&&a.add(e)})),a}function buildQuery(e){if(!e||!e.nodes)return;let n;return e.each((e=>{switch(e.type){case"universal":n={next:n,run:e=>e};break;case"combinator":switch(e.value){case" ":n={next:n,run:e=>descendantCombinator(e)};break;case">":n={next:n,run:e=>childCombinator(e)};break;case"+":n={next:n,run:e=>adjacentSiblingCombinator(e)};break;case"~":n={next:n,run:e=>generalSiblingCombinator(e)};break;default:n={next:n,run:()=>[]}}break;case"tag":n={next:n,run:t=>matchTagName(t,e.value)};break;case"pseudo":if(":not"===e.value)n={next:n,run:t=>{const n=e.nodes.map((e=>buildQuery(e))),r=t.filter((e=>n.flatMap((t=>t?executeConditions(t,[e]):[])).length>0));return notPseudo(t,r)}};else n={next:n,run:()=>[]};break;case"attribute":switch(e.operator){case"^=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.StartsWith,e.insensitive)};break;case"$=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.EndsWith,e.insensitive)};break;case"*=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.Contains,e.insensitive)};break;default:n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.Exact,e.insensitive)}}break;default:n={next:n,run:()=>[]}}})),n}function executeConditions(e,t){let n=e,r=t;for(;n&&r.length>0;)r=n.run(r),n=n.next;return r}!function(e){e.Exact="",e.StartsWith="^",e.EndsWith="$",e.Contains="*"}(t||(t={}));const creator=t=>{const n=Object(t),r=new Map;return Object.keys(n.queries??{}).forEach((t=>{r.set(t,e().astSync(n.queries[t]))})),n.results||(n.results=e=>{console.log(e)}),{postcssPlugin:"postcss-extract",prepare:()=>n.extractLate?{OnceExit:e=>{n.results(extract(e,r))}}:{Once:e=>{n.results(extract(e,r))}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";function notPseudo(e,t){return e.filter((e=>!t.includes(e)))}function adjacentSiblingCombinator(e){return e.map((e=>e.prev())).filter((e=>!!e))}function childCombinator(e){return e.map((e=>e.parent)).filter((e=>!!e))}function descendantCombinator(e){return e.flatMap((t=>{const n=[];let r=t.parent;for(;r;)n.push(r),r=r.parent;return e.length?n:[]})).filter((e=>!!e))}function generalSiblingCombinator(e){return e.flatMap((t=>{const n=[];let r=t.prev();for(;r;)n.push(r),r=r.prev();return e.length?n:[]})).filter((e=>!!e))}var t;function matchAttribute(e,n,r,a,s=!1){if(n.startsWith("__proto__")||r?.startsWith("__proto__"))return[];let i=!1;r||""===r||(i=!0);let o="";i||(o=r.toString()),s&&(o=o.toLowerCase());return e.filter((e=>{let r="";if(r="variable"===n.toLowerCase()&&"decl"===e.type&&"variable"in e?"variable":Object.keys(e).find((t=>t.toLowerCase()===n.toLowerCase()&&Object.prototype.hasOwnProperty.call(e,t))),!r)return!1;if("boolean"==typeof e[r])return e[r];if(i)return!0;let u=[e[r].toString()];switch("rule"!==e.type||"selector"!==r&&"selectors"!==r||(u=e.selectors),s&&(u=u.map((e=>e.toLowerCase()))),a){case t.StartsWith:return!!u.find((e=>e.startsWith(o)));case t.EndsWith:return!!u.find((e=>e.endsWith(o)));case t.Contains:return!!u.find((e=>e.includes(o)));case t.Exact:default:return!!u.find((e=>e===o))}}))}function matchTagName(e,t){return e.filter((e=>e.type.toLowerCase()===t.toLowerCase()))}function simplifyASTNode(e){switch(e.type){case"decl":{const t=e;return cleanUndefinedValues({type:t.type,important:t.important,prop:t.prop,value:t.value,variable:t.variable})}case"rule":{const t=e;return cleanUndefinedValues({type:t.type,selectors:t.selectors})}case"atrule":{const t=e;return cleanUndefinedValues({type:t.type,name:t.name,params:t.params})}case"comment":{const t=e;return cleanUndefinedValues({type:t.type,text:t.text})}default:return{}}}function cleanUndefinedValues(e){return Object.keys(e).forEach((t=>{void 0===e[t]&&delete e[t]})),e}function extract(e,t){const n={};for(const[r,a]of t){let t=new Set;a.each((n=>{t=selectNodesForSingleQuery(e,n,t)})),n[r]=[];for(const e of t)n[r].push(simplifyASTNode(e))}return n}function selectNodesForSingleQuery(e,t,n){const r=buildQuery(t);if(!r)return new Set;const a=new Set(n);return e.walk((e=>{if(a.has(e))return;executeConditions(r,[e]).length>0&&a.add(e)})),a}function buildQuery(e){if(!e||!e.nodes)return;let n;return e.each((e=>{switch(e.type){case"universal":n={next:n,run:e=>e};break;case"combinator":switch(e.value){case" ":n={next:n,run:e=>descendantCombinator(e)};break;case">":n={next:n,run:e=>childCombinator(e)};break;case"+":n={next:n,run:e=>adjacentSiblingCombinator(e)};break;case"~":n={next:n,run:e=>generalSiblingCombinator(e)};break;default:n={next:n,run:()=>[]}}break;case"tag":n={next:n,run:t=>matchTagName(t,e.value)};break;case"pseudo":if(":not"===e.value)n={next:n,run:t=>{const n=e.nodes.map((e=>buildQuery(e))),r=t.filter((e=>n.flatMap((t=>t?executeConditions(t,[e]):[])).length>0));return notPseudo(t,r)}};else n={next:n,run:()=>[]};break;case"attribute":switch(e.operator){case"^=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.StartsWith,e.insensitive)};break;case"$=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.EndsWith,e.insensitive)};break;case"*=":n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.Contains,e.insensitive)};break;default:n={next:n,run:n=>matchAttribute(n,e.attribute,e.value,t.Exact,e.insensitive)}}break;default:n={next:n,run:()=>[]}}})),n}function executeConditions(e,t){let n=e,r=t;for(;n&&r.length>0;)r=n.run(r),n=n.next;return r}!function(e){e.Exact="",e.StartsWith="^",e.EndsWith="$",e.Contains="*"}(t||(t={}));const creator=t=>{const n=Object(t),r=new Map;return Object.keys(n.queries??{}).forEach((t=>{r.set(t,e().astSync(n.queries[t]))})),n.results||(n.results=e=>{console.log(e)}),{postcssPlugin:"postcss-extract",prepare:()=>n.extractLate?{postcssPlugin:"postcss-extract",OnceExit(e){n.results(extract(e,r))}}:{postcssPlugin:"postcss-extract",Once(e){n.results(extract(e,r))}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-extract/src/index.ts b/plugins/postcss-extract/src/index.ts index 9b7ef4f18..79a4829db 100644 --- a/plugins/postcss-extract/src/index.ts +++ b/plugins/postcss-extract/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import selectorParser from 'postcss-selector-parser'; import { extract } from './select-nodes'; @@ -21,23 +21,25 @@ const creator: PluginCreator = (opts?: pluginOptions) => { }); if (!options.results) { - options.results = (results) => { + options.results = (results): void => { console.log(results); }; } return { postcssPlugin: 'postcss-extract', - prepare: () => { + prepare(): Plugin { if (options.extractLate) { return { - OnceExit: (root) => { + postcssPlugin: 'postcss-extract', + OnceExit(root): void { options.results(extract(root, parsedQueries)); }, }; } else { return { - Once: (root) => { + postcssPlugin: 'postcss-extract', + Once(root): void { options.results(extract(root, parsedQueries)); }, }; diff --git a/plugins/postcss-extract/src/simplify-ast-nodes.ts b/plugins/postcss-extract/src/simplify-ast-nodes.ts index a54dfa9b4..657a89188 100644 --- a/plugins/postcss-extract/src/simplify-ast-nodes.ts +++ b/plugins/postcss-extract/src/simplify-ast-nodes.ts @@ -39,7 +39,7 @@ export function simplifyASTNode(node: Node): Record { } } -function cleanUndefinedValues(object: Record) { +function cleanUndefinedValues>(object: T): T { Object.keys(object).forEach((key) => { if (typeof object[key] === 'undefined') { delete object[key]; diff --git a/plugins/postcss-focus-visible/dist/index.cjs b/plugins/postcss-focus-visible/dist/index.cjs index 1c2c2c5c5..a726af5f8 100644 --- a/plugins/postcss-focus-visible/dist/index.cjs +++ b/plugins/postcss-focus-visible/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const s="js-focus-visible",o=":focus-visible",creator=r=>{const t=Object.assign({preserve:!0,replaceWith:".focus-visible",disablePolyfillReadyClass:!1},r),n=e().astSync(t.replaceWith);return{postcssPlugin:"postcss-focus-visible",prepare(){const r=new WeakSet;return{Rule(l,{result:a}){if(r.has(l))return;if(!l.selector.toLowerCase().includes(o))return;const i=l.selectors.flatMap((r=>{if(!r.toLowerCase().includes(o))return[r];let i;try{i=e().astSync(r)}catch(e){return l.warn(a,`Failed to parse selector : "${r}" with message: "${e instanceof Error?e.message:e}"`),r}if(void 0===i)return[r];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===o&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(n.clone({}))))})),!c)return[r];const d=i.clone();if(!t.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let o=0;o{const t=Object.assign({preserve:!0,replaceWith:".focus-visible",disablePolyfillReadyClass:!1},r),n=e().astSync(t.replaceWith);return{postcssPlugin:"postcss-focus-visible",prepare(){const r=new WeakSet;return{postcssPlugin:"postcss-focus-visible",Rule(l,{result:a}){if(r.has(l))return;if(!l.selector.toLowerCase().includes(o))return;const i=l.selectors.flatMap((r=>{if(!r.toLowerCase().includes(o))return[r];let i;try{i=e().astSync(r)}catch(e){return l.warn(a,`Failed to parse selector : "${r}" with message: "${e instanceof Error?e.message:e}"`),r}if(void 0===i)return[r];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===o&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(n.clone({}))))})),!c)return[r];const d=i.clone();if(!t.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let o=0;o{const t=Object.assign({preserve:!0,replaceWith:".focus-visible",disablePolyfillReadyClass:!1},r),n=e().astSync(t.replaceWith);return{postcssPlugin:"postcss-focus-visible",prepare(){const r=new WeakSet;return{Rule(l,{result:a}){if(r.has(l))return;if(!l.selector.toLowerCase().includes(o))return;const i=l.selectors.flatMap((r=>{if(!r.toLowerCase().includes(o))return[r];let i;try{i=e().astSync(r)}catch(e){return l.warn(a,`Failed to parse selector : "${r}" with message: "${e instanceof Error?e.message:e}"`),r}if(void 0===i)return[r];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===o&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(n.clone({}))))})),!c)return[r];const d=i.clone();if(!t.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let o=0;o{const r=Object.assign({preserve:!0,replaceWith:".focus-visible",disablePolyfillReadyClass:!1},t),n=e().astSync(r.replaceWith);return{postcssPlugin:"postcss-focus-visible",prepare(){const t=new WeakSet;return{postcssPlugin:"postcss-focus-visible",Rule(l,{result:a}){if(t.has(l))return;if(!l.selector.toLowerCase().includes(o))return;const i=l.selectors.flatMap((t=>{if(!t.toLowerCase().includes(o))return[t];let i;try{i=e().astSync(t)}catch(e){return l.warn(a,`Failed to parse selector : "${t}" with message: "${e instanceof Error?e.message:e}"`),t}if(void 0===i)return[t];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===o&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(n.clone({}))))})),!c)return[t];const d=i.clone();if(!r.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let o=0;o = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-focus-visible', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-focus-visible', + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/postcss-focus-within/dist/index.cjs b/plugins/postcss-focus-within/dist/index.cjs index 684420699..d44e053ae 100644 --- a/plugins/postcss-focus-within/dist/index.cjs +++ b/plugins/postcss-focus-within/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let t=!0;for(let n=0,o=s.length;n-1&&(t=!1);return t}const t="js-focus-within",n=":focus-within",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[focus-within]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"postcss-focus-within",prepare(){const s=new WeakSet;return{Rule(l,{result:i}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(n))return;const a=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(n))return[s];let a;try{a=e().astSync(s)}catch(e){return l.warn(i,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),s}if(void 0===a)return[s];let c=!1;if(a.walkPseudos((e=>{e.value.toLowerCase()===n&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=a.clone();if(!o.disablePolyfillReadyClass){if(a.nodes?.[0]?.nodes?.length)for(let s=0;s{e.warn(s,`${o.replaceWith} is not a valid replacement since it can't be applied to single elements.`)}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let t=!0;for(let n=0,o=s.length;n-1&&(t=!1);return t}const t="js-focus-within",n=":focus-within",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[focus-within]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"postcss-focus-within",prepare(){const s=new WeakSet;return{postcssPlugin:"postcss-focus-within",Rule(l,{result:i}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(n))return;const a=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(n))return[s];let a;try{a=e().astSync(s)}catch(e){return l.warn(i,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),s}if(void 0===a)return[s];let c=!1;if(a.walkPseudos((e=>{e.value.toLowerCase()===n&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=a.clone();if(!o.disablePolyfillReadyClass){if(a.nodes?.[0]?.nodes?.length)for(let s=0;s","~",":","+","@","#","(",")"];function isValidReplacement(e){let t=!0;for(let n=0,o=s.length;n-1&&(t=!1);return t}const t="js-focus-within",n=":focus-within",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[focus-within]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"postcss-focus-within",prepare(){const s=new WeakSet;return{Rule(l,{result:a}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(n))return;const i=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(n))return[s];let i;try{i=e().astSync(s)}catch(e){return l.warn(a,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),s}if(void 0===i)return[s];let c=!1;if(i.walkPseudos((e=>{e.value.toLowerCase()===n&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=i.clone();if(!o.disablePolyfillReadyClass){if(i.nodes?.[0]?.nodes?.length)for(let s=0;s{e.warn(s,`${o.replaceWith} is not a valid replacement since it can't be applied to single elements.`)}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";const s=[" ",">","~",":","+","@","#","(",")"];function isValidReplacement(e){let t=!0;for(let n=0,o=s.length;n-1&&(t=!1);return t}const t="js-focus-within",n=":focus-within",creator=s=>{const o=Object.assign({preserve:!0,replaceWith:"[focus-within]",disablePolyfillReadyClass:!1},s),r=e().astSync(o.replaceWith);return isValidReplacement(o.replaceWith)?{postcssPlugin:"postcss-focus-within",prepare(){const s=new WeakSet;return{postcssPlugin:"postcss-focus-within",Rule(l,{result:i}){if(s.has(l))return;if(!l.selector.toLowerCase().includes(n))return;const a=l.selectors.flatMap((s=>{if(!s.toLowerCase().includes(n))return[s];let a;try{a=e().astSync(s)}catch(e){return l.warn(i,`Failed to parse selector : "${s}" with message: "${e instanceof Error?e.message:e}"`),s}if(void 0===a)return[s];let c=!1;if(a.walkPseudos((e=>{e.value.toLowerCase()===n&&(e.nodes&&e.nodes.length||(c=!0,e.replaceWith(r.clone({}))))})),!c)return[s];const d=a.clone();if(!o.disablePolyfillReadyClass){if(a.nodes?.[0]?.nodes?.length)for(let s=0;s = (opts?: pluginOptions) => { if (!isValidReplacement(options.replaceWith)) { return { postcssPlugin: 'postcss-focus-within', - Once: (root, { result }) => { + Once(root, { result }): void { root.warn( result, `${options.replaceWith} is not a valid replacement since it can't be applied to single elements.`, @@ -42,11 +42,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-focus-within', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-focus-within', + Rule(rule, { result }): void { if (transformedNodes.has(rule)) { return; } diff --git a/plugins/postcss-font-format-keywords/src/index.ts b/plugins/postcss-font-format-keywords/src/index.ts index 634679cfd..57b666876 100644 --- a/plugins/postcss-font-format-keywords/src/index.ts +++ b/plugins/postcss-font-format-keywords/src/index.ts @@ -23,7 +23,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-font-format-keywords', - Declaration(decl) { + Declaration(decl): void { if (decl.prop.toLowerCase() !== 'src') { return; } diff --git a/plugins/postcss-gamut-mapping/dist/index.cjs b/plugins/postcss-gamut-mapping/dist/index.cjs index e8bf04db2..0609d6d79 100644 --- a/plugins/postcss-gamut-mapping/dist/index.cjs +++ b/plugins/postcss-gamut-mapping/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/css-tokenizer"),o=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-color-parser");const t=/\bcolor-gamut\b/i;function hasConditionalAncestor(e){let o=e.parent;for(;o;)if("atrule"===o.type){if("media"===o.name.toLowerCase()&&t.test(o.params))return!0;o=o.parent}else o=o.parent;return!1}function hasOverrideOrFallback(e){const o=e.prop.toLowerCase();let a=!1,t=!1;const s=e.parent?.nodes??[],r=s.indexOf(e);for(let e=0;e({postcssPlugin:"postcss-gamut-mapping",prepare(){const t=new WeakMap;return{OnceExit:(n,{postcss:l})=>{n.walkDecls((n=>{const i=n.value;if(!s.test(i))return;if(!n.parent||hasConditionalAncestor(n))return;const{hasOverride:c,hasFallback:p}=hasOverrideOrFallback(n);if(c)return;const u=t.get(n.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{media:void 0},lastConditionalRule:void 0};t.set(n.parent,u);let d=!1;const m=o.replaceComponentValues(o.parseCommaSeparatedListOfComponentValues(e.tokenize({css:i})),(e=>{if(!o.isFunctionNode(e)||!r.test(e.getName()))return;const t=a.color(e);return!t||t.syntaxFlags.has(a.SyntaxFlag.HasNoneKeywords)||a.colorDataFitsRGB_Gamut(t)?void 0:(d||a.colorDataFitsDisplayP3_Gamut(t)||(d=!0),a.serializeRGB(t,!0))})),f=o.stringify(m);if(f===i)return;const h=`(color-gamut: ${d?"rec2020":"p3"})`;if(u.lastConditionParams.media!==h&&(u.lastConditionalRule=void 0),u.lastConditionalRule)return p||n.cloneBefore({value:f}),u.lastConditionalRule.append(n.clone()),void n.remove();p||n.cloneBefore({value:f});const v=l.atRule({name:"media",params:h,source:n.parent.source,raws:{before:"\n\n",after:"\n"}}),C=n.parent.clone();C.removeAll(),C.raws.before="\n",C.append(n.clone()),n.remove(),u.lastConditionParams.media=v.params,u.lastConditionalRule=C,v.append(C),u.conditionalRules.push(v)})),n.walk((e=>{const o=t.get(e);o&&0!==o.conditionalRules.length&&o.conditionalRules.reverse().forEach((o=>{e.after(o)}))}))}}}});creator.postcss=!0,module.exports=creator; +"use strict";var e=require("@csstools/css-tokenizer"),o=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-color-parser");const t=/\bcolor-gamut\b/i;function hasConditionalAncestor(e){let o=e.parent;for(;o;)if("atrule"===o.type){if("media"===o.name.toLowerCase()&&t.test(o.params))return!0;o=o.parent}else o=o.parent;return!1}function hasOverrideOrFallback(e){const o=e.prop.toLowerCase();let a=!1,t=!1;const s=e.parent?.nodes??[],n=s.indexOf(e);for(let e=0;e({postcssPlugin:"postcss-gamut-mapping",prepare(){const t=new WeakMap;return{postcssPlugin:"postcss-gamut-mapping",OnceExit(r,{postcss:l}){r.walkDecls((r=>{const i=r.value;if(!s.test(i))return;if(!r.parent||hasConditionalAncestor(r))return;const{hasOverride:c,hasFallback:p}=hasOverrideOrFallback(r);if(c)return;const u=t.get(r.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{media:void 0},lastConditionalRule:void 0};t.set(r.parent,u);let d=!1;const m=o.replaceComponentValues(o.parseCommaSeparatedListOfComponentValues(e.tokenize({css:i})),(e=>{if(!o.isFunctionNode(e)||!n.test(e.getName()))return;const t=a.color(e);return!t||t.syntaxFlags.has(a.SyntaxFlag.HasNoneKeywords)||a.colorDataFitsRGB_Gamut(t)?void 0:(d||a.colorDataFitsDisplayP3_Gamut(t)||(d=!0),a.serializeRGB(t,!0))})),f=o.stringify(m);if(f===i)return;const h=`(color-gamut: ${d?"rec2020":"p3"})`;if(u.lastConditionParams.media!==h&&(u.lastConditionalRule=void 0),u.lastConditionalRule)return p||r.cloneBefore({value:f}),u.lastConditionalRule.append(r.clone()),void r.remove();p||r.cloneBefore({value:f});const g=l.atRule({name:"media",params:h,source:r.parent.source,raws:{before:"\n\n",after:"\n"}}),v=r.parent.clone();v.removeAll(),v.raws.before="\n",v.append(r.clone()),r.remove(),u.lastConditionParams.media=g.params,u.lastConditionalRule=v,g.append(v),u.conditionalRules.push(g)})),r.walk((e=>{const o=t.get(e);o&&0!==o.conditionalRules.length&&o.conditionalRules.reverse().forEach((o=>{e.after(o)}))}))}}}});creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-gamut-mapping/dist/index.mjs b/plugins/postcss-gamut-mapping/dist/index.mjs index d4355811a..96da1d198 100644 --- a/plugins/postcss-gamut-mapping/dist/index.mjs +++ b/plugins/postcss-gamut-mapping/dist/index.mjs @@ -1 +1 @@ -import{tokenize as e}from"@csstools/css-tokenizer";import{replaceComponentValues as o,parseCommaSeparatedListOfComponentValues as t,isFunctionNode as a,stringify as r}from"@csstools/css-parser-algorithms";import{color as s,SyntaxFlag as n,colorDataFitsRGB_Gamut as l,colorDataFitsDisplayP3_Gamut as i,serializeRGB as c}from"@csstools/css-color-parser";const p=/\bcolor-gamut\b/i;function hasConditionalAncestor(e){let o=e.parent;for(;o;)if("atrule"===o.type){if("media"===o.name.toLowerCase()&&p.test(o.params))return!0;o=o.parent}else o=o.parent;return!1}function hasOverrideOrFallback(e){const o=e.prop.toLowerCase();let t=!1,a=!1;const r=e.parent?.nodes??[],s=r.indexOf(e);for(let e=0;e({postcssPlugin:"postcss-gamut-mapping",prepare(){const p=new WeakMap;return{OnceExit:(m,{postcss:f})=>{m.walkDecls((m=>{const h=m.value;if(!d.test(h))return;if(!m.parent||hasConditionalAncestor(m))return;const{hasOverride:v,hasFallback:b}=hasOverrideOrFallback(m);if(v)return;const k=p.get(m.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{media:void 0},lastConditionalRule:void 0};p.set(m.parent,k);let C=!1;const g=o(t(e({css:h})),(e=>{if(!a(e)||!u.test(e.getName()))return;const o=s(e);return!o||o.syntaxFlags.has(n.HasNoneKeywords)||l(o)?void 0:(C||i(o)||(C=!0),c(o,!0))})),w=r(g);if(w===h)return;const R=`(color-gamut: ${C?"rec2020":"p3"})`;if(k.lastConditionParams.media!==R&&(k.lastConditionalRule=void 0),k.lastConditionalRule)return b||m.cloneBefore({value:w}),k.lastConditionalRule.append(m.clone()),void m.remove();b||m.cloneBefore({value:w});const O=f.atRule({name:"media",params:R,source:m.parent.source,raws:{before:"\n\n",after:"\n"}}),F=m.parent.clone();F.removeAll(),F.raws.before="\n",F.append(m.clone()),m.remove(),k.lastConditionParams.media=O.params,k.lastConditionalRule=F,O.append(F),k.conditionalRules.push(O)})),m.walk((e=>{const o=p.get(e);o&&0!==o.conditionalRules.length&&o.conditionalRules.reverse().forEach((o=>{e.after(o)}))}))}}}});creator.postcss=!0;export{creator as default}; +import{tokenize as e}from"@csstools/css-tokenizer";import{replaceComponentValues as o,parseCommaSeparatedListOfComponentValues as t,isFunctionNode as a,stringify as s}from"@csstools/css-parser-algorithms";import{color as n,SyntaxFlag as r,colorDataFitsRGB_Gamut as l,colorDataFitsDisplayP3_Gamut as i,serializeRGB as c}from"@csstools/css-color-parser";const p=/\bcolor-gamut\b/i;function hasConditionalAncestor(e){let o=e.parent;for(;o;)if("atrule"===o.type){if("media"===o.name.toLowerCase()&&p.test(o.params))return!0;o=o.parent}else o=o.parent;return!1}function hasOverrideOrFallback(e){const o=e.prop.toLowerCase();let t=!1,a=!1;const s=e.parent?.nodes??[],n=s.indexOf(e);for(let e=0;e({postcssPlugin:"postcss-gamut-mapping",prepare(){const p=new WeakMap;return{postcssPlugin:"postcss-gamut-mapping",OnceExit(m,{postcss:f}){m.walkDecls((m=>{const h=m.value;if(!u.test(h))return;if(!m.parent||hasConditionalAncestor(m))return;const{hasOverride:v,hasFallback:g}=hasOverrideOrFallback(m);if(v)return;const b=p.get(m.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{media:void 0},lastConditionalRule:void 0};p.set(m.parent,b);let k=!1;const C=o(t(e({css:h})),(e=>{if(!a(e)||!d.test(e.getName()))return;const o=n(e);return!o||o.syntaxFlags.has(r.HasNoneKeywords)||l(o)?void 0:(k||i(o)||(k=!0),c(o,!0))})),w=s(C);if(w===h)return;const R=`(color-gamut: ${k?"rec2020":"p3"})`;if(b.lastConditionParams.media!==R&&(b.lastConditionalRule=void 0),b.lastConditionalRule)return g||m.cloneBefore({value:w}),b.lastConditionalRule.append(m.clone()),void m.remove();g||m.cloneBefore({value:w});const O=f.atRule({name:"media",params:R,source:m.parent.source,raws:{before:"\n\n",after:"\n"}}),F=m.parent.clone();F.removeAll(),F.raws.before="\n",F.append(m.clone()),m.remove(),b.lastConditionParams.media=O.params,b.lastConditionalRule=F,O.append(F),b.conditionalRules.push(O)})),m.walk((e=>{const o=p.get(e);o&&0!==o.conditionalRules.length&&o.conditionalRules.reverse().forEach((o=>{e.after(o)}))}))}}}});creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-gamut-mapping/src/index.ts b/plugins/postcss-gamut-mapping/src/index.ts index 48b33233c..6a66a3d57 100644 --- a/plugins/postcss-gamut-mapping/src/index.ts +++ b/plugins/postcss-gamut-mapping/src/index.ts @@ -1,4 +1,4 @@ -import type { AtRule, Container, Node, PluginCreator } from 'postcss'; +import type { AtRule, Container, Node, Plugin, PluginCreator } from 'postcss'; import { hasConditionalAncestor } from './has-conditional-ancestor'; import { tokenize } from '@csstools/css-tokenizer'; import { isFunctionNode, parseCommaSeparatedListOfComponentValues, replaceComponentValues, stringify } from '@csstools/css-parser-algorithms'; @@ -24,11 +24,12 @@ const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-gamut-mapping', - prepare() { + prepare(): Plugin { const states = new WeakMap(); return { - OnceExit: (root, { postcss }) => { + postcssPlugin: 'postcss-gamut-mapping', + OnceExit(root, { postcss }): void { root.walkDecls((decl) => { const originalValue = decl.value; if (!HAS_WIDE_GAMUT_COLOR_FUNCTION_REGEX.test(originalValue)) { diff --git a/plugins/postcss-gap-properties/src/index.ts b/plugins/postcss-gap-properties/src/index.ts index 006247484..ccf30adb3 100644 --- a/plugins/postcss-gap-properties/src/index.ts +++ b/plugins/postcss-gap-properties/src/index.ts @@ -25,7 +25,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-gap-properties', // walk decl shorthand gap, column-gap, or row-gap declaration - Declaration(decl) { + Declaration(decl): void { if (!gapProperties.includes(decl.prop.toLowerCase())) { return; } diff --git a/plugins/postcss-global-data/dist/index.cjs b/plugins/postcss-global-data/dist/index.cjs index dddab85e0..d6924837f 100644 --- a/plugins/postcss-global-data/dist/index.cjs +++ b/plugins/postcss-global-data/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("path"),s=require("fs"),r=require("module");function parseImport(t,o,a,c){let n="";try{if(a.startsWith("node_modules://")){n=r.createRequire(process.cwd()).resolve(a.slice(15))}else if(a.startsWith("node_modules:")){n=r.createRequire(process.cwd()).resolve(a.slice(13))}else n=e.resolve(a)}catch(e){throw new Error(`Failed to read ${a} with error ${e instanceof Error?e.message:e}`)}if(c.has(n))return!1;c.add(n),o.result.messages.push({type:"dependency",plugin:"postcss-global-data",file:n,parent:t.source?.input?.file});const i=s.readFileSync(n,"utf8");return o.postcss.parse(i,{from:n})}const creator=e=>{const s=Object.assign({files:[]},e);return{postcssPlugin:"postcss-global-data",prepare(){let e=new Set,r=new Set;return{Once:(t,o)=>{s.files.forEach((s=>{if(e.has(s))return;const a=parseImport(t,o,s,e);a&&a.each((e=>{t.append(e),r.add(e)}))}))},OnceExit:()=>{r.forEach((e=>{e.remove()})),r=new Set,e=new Set}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("path"),s=require("fs"),r=require("module");function parseImport(t,o,a,c){let n="";try{if(a.startsWith("node_modules://")){n=r.createRequire(process.cwd()).resolve(a.slice(15))}else if(a.startsWith("node_modules:")){n=r.createRequire(process.cwd()).resolve(a.slice(13))}else n=e.resolve(a)}catch(e){throw new Error(`Failed to read ${a} with error ${e instanceof Error?e.message:e}`)}if(c.has(n))return!1;c.add(n),o.result.messages.push({type:"dependency",plugin:"postcss-global-data",file:n,parent:t.source?.input?.file});const i=s.readFileSync(n,"utf8");return o.postcss.parse(i,{from:n})}const creator=e=>{const s=Object.assign({files:[]},e);return{postcssPlugin:"postcss-global-data",prepare(){let e=new Set,r=new Set;return{postcssPlugin:"postcss-global-data",Once(t,o){s.files.forEach((s=>{if(e.has(s))return;const a=parseImport(t,o,s,e);a&&a.each((e=>{t.append(e),r.add(e)}))}))},OnceExit(){r.forEach((e=>{e.remove()})),r=new Set,e=new Set}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-global-data/dist/index.mjs b/plugins/postcss-global-data/dist/index.mjs index 4711b2d8c..46e88248c 100644 --- a/plugins/postcss-global-data/dist/index.mjs +++ b/plugins/postcss-global-data/dist/index.mjs @@ -1 +1 @@ -import e from"path";import s from"fs";import r from"module";function parseImport(t,o,a,n){let c="";try{if(a.startsWith("node_modules://")){c=r.createRequire(process.cwd()).resolve(a.slice(15))}else if(a.startsWith("node_modules:")){c=r.createRequire(process.cwd()).resolve(a.slice(13))}else c=e.resolve(a)}catch(e){throw new Error(`Failed to read ${a} with error ${e instanceof Error?e.message:e}`)}if(n.has(c))return!1;n.add(c),o.result.messages.push({type:"dependency",plugin:"postcss-global-data",file:c,parent:t.source?.input?.file});const i=s.readFileSync(c,"utf8");return o.postcss.parse(i,{from:c})}const creator=e=>{const s=Object.assign({files:[]},e);return{postcssPlugin:"postcss-global-data",prepare(){let e=new Set,r=new Set;return{Once:(t,o)=>{s.files.forEach((s=>{if(e.has(s))return;const a=parseImport(t,o,s,e);a&&a.each((e=>{t.append(e),r.add(e)}))}))},OnceExit:()=>{r.forEach((e=>{e.remove()})),r=new Set,e=new Set}}}}};creator.postcss=!0;export{creator as default}; +import e from"path";import s from"fs";import r from"module";function parseImport(t,o,a,c){let n="";try{if(a.startsWith("node_modules://")){n=r.createRequire(process.cwd()).resolve(a.slice(15))}else if(a.startsWith("node_modules:")){n=r.createRequire(process.cwd()).resolve(a.slice(13))}else n=e.resolve(a)}catch(e){throw new Error(`Failed to read ${a} with error ${e instanceof Error?e.message:e}`)}if(c.has(n))return!1;c.add(n),o.result.messages.push({type:"dependency",plugin:"postcss-global-data",file:n,parent:t.source?.input?.file});const l=s.readFileSync(n,"utf8");return o.postcss.parse(l,{from:n})}const creator=e=>{const s=Object.assign({files:[]},e);return{postcssPlugin:"postcss-global-data",prepare(){let e=new Set,r=new Set;return{postcssPlugin:"postcss-global-data",Once(t,o){s.files.forEach((s=>{if(e.has(s))return;const a=parseImport(t,o,s,e);a&&a.each((e=>{t.append(e),r.add(e)}))}))},OnceExit(){r.forEach((e=>{e.remove()})),r=new Set,e=new Set}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-global-data/src/index.ts b/plugins/postcss-global-data/src/index.ts index 369348b0a..1e77c67f2 100644 --- a/plugins/postcss-global-data/src/index.ts +++ b/plugins/postcss-global-data/src/index.ts @@ -1,4 +1,4 @@ -import type { ChildNode, PluginCreator } from 'postcss'; +import type { ChildNode, Plugin, PluginCreator } from 'postcss'; import { parseImport } from './parse-import'; /** postcss-global-data plugin options */ @@ -19,12 +19,13 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-global-data', - prepare() { + prepare(): Plugin { let importedFiles = new Set(); let importedCSS = new Set(); return { - Once: (root, postcssHelpers) => { + postcssPlugin: 'postcss-global-data', + Once(root, postcssHelpers): void { options.files.forEach((file) => { if (importedFiles.has(file)) { return; @@ -41,7 +42,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { }); }); }, - OnceExit: () => { + OnceExit(): void { importedCSS.forEach((node) => { node.remove(); }); diff --git a/plugins/postcss-global-data/src/parse-import.ts b/plugins/postcss-global-data/src/parse-import.ts index 6823b75c9..22d7100d0 100644 --- a/plugins/postcss-global-data/src/parse-import.ts +++ b/plugins/postcss-global-data/src/parse-import.ts @@ -3,7 +3,7 @@ import fs from 'fs'; import type { Helpers, Root } from 'postcss'; import module from 'module'; -export function parseImport(root: Root, postcssHelpers: Helpers, filePath: string, alreadyImported: Set) { +export function parseImport(root: Root, postcssHelpers: Helpers, filePath: string, alreadyImported: Set): Root|false { let resolvedPath = ''; try { diff --git a/plugins/postcss-gradients-interpolation-method/src/index.ts b/plugins/postcss-gradients-interpolation-method/src/index.ts index 7e3ba31c4..06c6f9260 100644 --- a/plugins/postcss-gradients-interpolation-method/src/index.ts +++ b/plugins/postcss-gradients-interpolation-method/src/index.ts @@ -14,7 +14,7 @@ type basePluginOptions = { const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-gradients-interpolation-method', - Declaration(decl) { + Declaration(decl): void { if (!IS_GRADIENT_FUNCTION.test(decl.value)) { return; } diff --git a/plugins/postcss-hwb-function/dist/index.cjs b/plugins/postcss-hwb-function/dist/index.cjs index ba1175d93..11fc03b40 100644 --- a/plugins/postcss-hwb-function/dist/index.cjs +++ b/plugins/postcss-hwb-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),r=require("@csstools/css-parser-algorithms"),o=require("@csstools/css-tokenizer");const a=/\bhwb\(/i,n=/^hwb$/i,basePlugin=s=>({postcssPlugin:"postcss-hwb-function",Declaration:i=>{const c=i.value;if(!a.test(c))return;if(t.hasFallback(i))return;if(t.hasSupportsAtRuleAncestor(i,a))return;const l=r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(o.tokenize({css:c})),(s=>{if(!r.isFunctionNode(s)||!n.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),u=r.stringify(l);u!==c&&(i.cloneBefore({value:u}),s?.preserve||i.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-hwb-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),r=require("@csstools/css-parser-algorithms"),o=require("@csstools/css-tokenizer");const a=/\bhwb\(/i,n=/^hwb$/i,basePlugin=s=>({postcssPlugin:"postcss-hwb-function",Declaration(i){const c=i.value;if(!a.test(c))return;if(t.hasFallback(i))return;if(t.hasSupportsAtRuleAncestor(i,a))return;const l=r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(o.tokenize({css:c})),(s=>{if(!r.isFunctionNode(s)||!n.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),u=r.stringify(l);u!==c&&(i.cloneBefore({value:u}),s?.preserve||i.remove())}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},e);return t.enableProgressiveCustomProperties&&t.preserve?{postcssPlugin:"postcss-hwb-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-hwb-function/dist/index.mjs b/plugins/postcss-hwb-function/dist/index.mjs index 0d6c55663..d4af1683d 100644 --- a/plugins/postcss-hwb-function/dist/index.mjs +++ b/plugins/postcss-hwb-function/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as o,SyntaxFlag as e,serializeRGB as t}from"@csstools/css-color-parser";import{hasFallback as r,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as a,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as l}from"@csstools/css-tokenizer";const u=/\bhwb\(/i,m=/^hwb$/i,basePlugin=s=>({postcssPlugin:"postcss-hwb-function",Declaration:f=>{const g=f.value;if(!u.test(g))return;if(r(f))return;if(i(f,u))return;const v=n(c(l({css:g})),(s=>{if(!a(s)||!m.test(s.getName()))return;const r=o(s);return r&&!(r.syntaxFlags.has(e.Experimental)||r.syntaxFlags.has(e.HasNoneKeywords)||r.syntaxFlags.has(e.RelativeColorSyntax))?t(r):void 0})),b=p(v);b!==g&&(f.cloneBefore({value:b}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const e=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return e.enableProgressiveCustomProperties&&e.preserve?{postcssPlugin:"postcss-hwb-function",plugins:[s(),basePlugin(e)]}:basePlugin(e)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as o,SyntaxFlag as e,serializeRGB as t}from"@csstools/css-color-parser";import{hasFallback as r,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as a,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as l}from"@csstools/css-tokenizer";const u=/\bhwb\(/i,m=/^hwb$/i,basePlugin=s=>({postcssPlugin:"postcss-hwb-function",Declaration(f){const g=f.value;if(!u.test(g))return;if(r(f))return;if(i(f,u))return;const v=n(c(l({css:g})),(s=>{if(!a(s)||!m.test(s.getName()))return;const r=o(s);return r&&!(r.syntaxFlags.has(e.Experimental)||r.syntaxFlags.has(e.HasNoneKeywords)||r.syntaxFlags.has(e.RelativeColorSyntax))?t(r):void 0})),b=p(v);b!==g&&(f.cloneBefore({value:b}),s?.preserve||f.remove())}});basePlugin.postcss=!0;const postcssPlugin=o=>{const e=Object.assign({preserve:!1,enableProgressiveCustomProperties:!0},o);return e.enableProgressiveCustomProperties&&e.preserve?{postcssPlugin:"postcss-hwb-function",plugins:[s(),basePlugin(e)]}:basePlugin(e)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-hwb-function/src/index.ts b/plugins/postcss-hwb-function/src/index.ts index 7218fdd37..f1a38254d 100644 --- a/plugins/postcss-hwb-function/src/index.ts +++ b/plugins/postcss-hwb-function/src/index.ts @@ -18,7 +18,7 @@ export type basePluginOptions = { const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-hwb-function', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(HWB_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-ic-unit/src/index.ts b/plugins/postcss-ic-unit/src/index.ts index c6d64562e..437289f68 100644 --- a/plugins/postcss-ic-unit/src/index.ts +++ b/plugins/postcss-ic-unit/src/index.ts @@ -13,7 +13,7 @@ const HAS_IC_DECLARATION_REGEX = /\(font-size: \d+ic\)/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-ic-unit', - Declaration(decl) { + Declaration(decl): void { if (!HAS_IC_UNIT_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-image-set-function/src/index.ts b/plugins/postcss-image-set-function/src/index.ts index 2bac6bc2c..28b71331c 100644 --- a/plugins/postcss-image-set-function/src/index.ts +++ b/plugins/postcss-image-set-function/src/index.ts @@ -31,7 +31,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-image-set-function', - Declaration(decl, { result, postcss }) { + Declaration(decl, { result, postcss }): void { const value = decl.value; // if a declaration likely uses an image-set() function diff --git a/plugins/postcss-image-set-function/src/lib/get-image.ts b/plugins/postcss-image-set-function/src/lib/get-image.ts index 23ff34d9f..485429305 100644 --- a/plugins/postcss-image-set-function/src/lib/get-image.ts +++ b/plugins/postcss-image-set-function/src/lib/get-image.ts @@ -2,7 +2,7 @@ import valueParser from 'postcss-value-parser'; const IMAGE_FUNC_REGEX = /^(cross-fade|image|(repeating-)?(conic|linear|radial)-gradient|url|var)$/i; -export function getImage(node: valueParser.Node) { +export function getImage(node: valueParser.Node): string|false { // | | | // the image-set() function can not be nested inside of itself if (!node || !node.type) { diff --git a/plugins/postcss-image-set-function/src/lib/get-media.ts b/plugins/postcss-image-set-function/src/lib/get-media.ts index 29ca125ad..c471db043 100644 --- a/plugins/postcss-image-set-function/src/lib/get-media.ts +++ b/plugins/postcss-image-set-function/src/lib/get-media.ts @@ -1,4 +1,4 @@ -import type { Declaration, Postcss } from 'postcss'; +import type { AtRule, Declaration, Postcss } from 'postcss'; import type { Node } from 'postcss-value-parser'; import valueParser from 'postcss-value-parser'; @@ -10,7 +10,7 @@ const dpiRatios: Map = new Map([ ]); // return a valid @media rule -export function getMedia(dpi: number | false, postcss: Postcss, decl: Declaration) { +export function getMedia(dpi: number | false, postcss: Postcss, decl: Declaration): AtRule|false { if (typeof dpi === 'boolean') { return false; } @@ -27,7 +27,7 @@ export function getMedia(dpi: number | false, postcss: Postcss, decl: Declaratio return media; } -export function getMediaDPI(node: Node) { +export function getMediaDPI(node: Node): number|false { if (!node) { return false; } diff --git a/plugins/postcss-image-set-function/src/lib/handle-invalidation.ts b/plugins/postcss-image-set-function/src/lib/handle-invalidation.ts index af5b3c175..eedb526fc 100644 --- a/plugins/postcss-image-set-function/src/lib/handle-invalidation.ts +++ b/plugins/postcss-image-set-function/src/lib/handle-invalidation.ts @@ -1,6 +1,6 @@ import type { Declaration, Result } from 'postcss'; -export const handleInvalidation = (opts: { oninvalid: 'warn'|'throw'|unknown, decl: Declaration, result: Result }, message: string, word: string) => { +export const handleInvalidation = (opts: { oninvalid: 'warn' | 'throw' | unknown, decl: Declaration, result: Result }, message: string, word: string): void => { if (opts.oninvalid === 'warn') { opts.decl.warn(opts.result, message, { word: String(word) }); } else if (opts.oninvalid === 'throw') { diff --git a/plugins/postcss-image-set-function/src/lib/get-comma.ts b/plugins/postcss-image-set-function/src/lib/is-comma.ts similarity index 73% rename from plugins/postcss-image-set-function/src/lib/get-comma.ts rename to plugins/postcss-image-set-function/src/lib/is-comma.ts index 50441e17c..33f40aebf 100644 --- a/plugins/postcss-image-set-function/src/lib/get-comma.ts +++ b/plugins/postcss-image-set-function/src/lib/is-comma.ts @@ -1,6 +1,6 @@ import valueParser from 'postcss-value-parser'; // return whether a node is a valid comma -export function getComma(node: valueParser.Node) { +export function isComma(node: valueParser.Node): boolean { return Object(node).type === 'div' && Object(node).value === ','; } diff --git a/plugins/postcss-image-set-function/src/lib/process-image-set.ts b/plugins/postcss-image-set-function/src/lib/process-image-set.ts index 7a0475ee4..aea9e1078 100644 --- a/plugins/postcss-image-set-function/src/lib/process-image-set.ts +++ b/plugins/postcss-image-set-function/src/lib/process-image-set.ts @@ -1,5 +1,5 @@ import valueParser from 'postcss-value-parser'; -import { getComma } from './get-comma'; +import { isComma } from './is-comma'; import { getImage } from './get-image'; import { getMedia, getMediaDPI } from './get-media'; import { handleInvalidation } from './handle-invalidation'; @@ -16,7 +16,7 @@ type mediaByDpr = { value: string; } -export const processImageSet = (imageSetFunctions: Array, decl: Declaration, opts: { decl: Declaration, oninvalid: 'warn' | 'throw' | 'ignore' | false | undefined, preserve: boolean, result: Result, postcss: Postcss }) => { +export const processImageSet = (imageSetFunctions: Array, decl: Declaration, opts: { decl: Declaration, oninvalid: 'warn' | 'throw' | 'ignore' | false | undefined, preserve: boolean, result: Result, postcss: Postcss }): void => { const parent = decl.parent; if (!parent) { return; @@ -33,7 +33,7 @@ export const processImageSet = (imageSetFunctions: Array, decl let index = -1; while (index < length) { - const comma = index < 0 ? true : getComma(imageSetOptionNodes[index]); + const comma = index < 0 ? true : isComma(imageSetOptionNodes[index]); const value = getImage(imageSetOptionNodes[index + 1]); const mediaDPI = getMediaDPI(imageSetOptionNodes[index + 2]); diff --git a/plugins/postcss-initial/src/index.ts b/plugins/postcss-initial/src/index.ts index 19bd734e7..8d89b25d2 100644 --- a/plugins/postcss-initial/src/index.ts +++ b/plugins/postcss-initial/src/index.ts @@ -34,7 +34,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-initial', - Declaration(decl) { + Declaration(decl): void { if (decl.variable) { return; } diff --git a/plugins/postcss-is-pseudo-class/dist/index.cjs b/plugins/postcss-is-pseudo-class/dist/index.cjs index d1355d60c..31b3157c8 100644 --- a/plugins/postcss-is-pseudo-class/dist/index.cjs +++ b/plugins/postcss-is-pseudo-class/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser"),o=require("@csstools/selector-specificity");function alwaysValidSelector(o){const s=e().astSync(o);let t=!0;return s.walk((e=>{if("class"!==e.type&&"comment"!==e.type&&"id"!==e.type&&"root"!==e.type&&"selector"!==e.type&&"string"!==e.type&&"tag"!==e.type&&"universal"!==e.type&&("attribute"!==e.type||e.insensitive)&&("combinator"!==e.type||"+"!==e.value&&">"!==e.value&&"~"!==e.value&&" "!==e.value)&&("pseudo"!==e.type||e.nodes?.length||":hover"!==e.value.toLowerCase()&&":focus"!==e.value.toLowerCase())){if("pseudo"===e.type&&1===e.nodes?.length&&":not"===e.value.toLowerCase()){let o=!0;if(e.nodes[0].walkCombinators((()=>{o=!1})),o)return}return t=!1,!1}})),t}function sortCompoundSelectorsInsideComplexSelector(o){if(!o||!o.nodes||1===o.nodes.length)return;const s=[];let t=[];for(let n=0;n"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o,o.type):"selector"===o.type&&o.nodes.length?selectorTypeOrder(e,e.type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):selectorTypeOrder(e,e.type)-selectorTypeOrder(o,o.type)));const t=new Set(o.map((e=>e.type))),r=t.has("universal")&&(t.has("tag")||t.has("attribute")||t.has("class")||t.has("id")||t.has("pseudo"));for(let e=0;e=0;s--){const t=n[s-1];if(n[s].remove(),t&&"tag"===t.type&&"tag"===n[s].type){const t=e.pseudo({value:":is",nodes:[e.selector({value:"",nodes:[n[s]]})]});o.prepend(t)}else o.prepend(n[s])}}function selectorTypeOrder(o,t){return e.isPseudoElement(o)?s.pseudoElement:s[t]}const s={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function childAdjacentChild(e){return!(!e||!e.nodes)&&("selector"===e.type&&(3===e.nodes.length&&(!(!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value)&&(!(!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value&&"~"!==e.nodes[1].value)&&(!(!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value)&&(!(!e.nodes[0].nodes||1!==e.nodes[0].nodes.length)&&("selector"===e.nodes[0].nodes[0].type&&(!(!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length)&&(!(!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value)&&(!(!e.nodes[2].nodes||1!==e.nodes[2].nodes.length)&&("selector"===e.nodes[2].nodes[0].type&&(!(!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length)&&(!(!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value)&&(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),!0))))))))))))))}function isInCompoundWithOneOtherElement(o){if(!o||!o.nodes)return!1;if("selector"!==o.type)return!1;if(2!==o.nodes.length)return!1;let s,t;return o.nodes[0]&&"pseudo"===o.nodes[0].type&&":-csstools-matches"===o.nodes[0].value?(s=0,t=1):o.nodes[1]&&"pseudo"===o.nodes[1].type&&":-csstools-matches"===o.nodes[1].value&&(s=1,t=0),!!s&&(!!o.nodes[t]&&(("selector"!==o.nodes[t].type||!o.nodes[t].some((o=>"combinator"===o.type||e.isPseudoElement(o))))&&("combinator"!==o.nodes[t].type&&(o.nodes[s].nodes[0].append(o.nodes[t].clone()),o.nodes[s].replaceWith(...o.nodes[s].nodes[0].nodes),o.nodes[t].remove(),!0))))}function isPseudoInFirstCompound(e){if(!e||!e.nodes)return!1;if("selector"!==e.type)return!1;let o=-1;for(let s=0;s{t.nodes[0].append(e.clone())})),n.forEach((e=>{t.nodes[0].append(e.clone())})),t.replaceWith(...t.nodes),s.forEach((e=>{e.remove()})),n.forEach((e=>{e.remove()})),!0}function complexSelectors(o,s,t,n){return o.flatMap((o=>{if(-1===o.indexOf(":-csstools-matches")&&-1===o.toLowerCase().indexOf(":is"))return o;const r=e().astSync(o);return r.walkPseudos((o=>{if(":is"===o.value.toLowerCase()&&o.nodes&&o.nodes.length&&"selector"===o.nodes[0].type&&0===o.nodes[0].nodes.length)return o.value=":not",void o.nodes[0].append(e.universal());if(":-csstools-matches"===o.value)if(!o.nodes||o.nodes.length){if(o.walkPseudos((o=>{if(e.isPseudoElement(o)){let e=o.value;if(e.startsWith("::-csstools-invalid-"))return;for(;e.startsWith(":");)e=e.slice(1);o.value=`::-csstools-invalid-${e}`,n()}})),1===o.nodes.length&&"selector"===o.nodes[0].type){if(1===o.nodes[0].nodes.length)return void o.replaceWith(o.nodes[0].nodes[0]);if(!o.nodes[0].some((e=>"combinator"===e.type)))return void o.replaceWith(...o.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==o?childAdjacentChild(o.parent)||isInCompoundWithOneOtherElement(o.parent)||isPseudoInFirstCompound(o.parent)||("warning"===s.onComplexSelector&&t(),o.value=":is"):o.replaceWith(...o.nodes[0].nodes)}else o.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((e=>{"nodes"in e&&sortCompoundSelectorsInsideComplexSelector(e)})),r.toString()})).filter((e=>!!e))}function splitSelectors(s,t,n=0){const r=":not(#"+t.specificityMatchingName+")",d=":not(."+t.specificityMatchingName+")",l=":not("+t.specificityMatchingName+")";return s.flatMap((s=>{if(-1===s.toLowerCase().indexOf(":is"))return s;let c=!1;const i=[];if(e().astSync(s).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;if("pseudo"===e.parent?.parent?.type&&":not"===e.parent?.parent?.value?.toLowerCase())return void i.push([{start:e.parent.parent.sourceIndex,end:e.parent.parent.sourceIndex+e.parent.parent.toString().length,option:`:not(${e.nodes.toString()})`}]);if("pseudo"===e.parent?.parent?.type&&":has"===e.parent?.parent?.value?.toLowerCase())return void(e.value=":-csstools-matches");let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(c=!0);s=s.parent}const t=o.selectorSpecificity(e),n=e.sourceIndex,a=n+e.toString().length,p=[];e.nodes.forEach((e=>{const s={start:n,end:a,option:""},c=o.selectorSpecificity(e);let i=e.toString().trim();const u=Math.max(0,t.a-c.a),h=Math.max(0,t.b-c.b),f=Math.max(0,t.c-c.c);for(let e=0;e{let o="";for(let t=0;t!!e))}function cartesianProduct(...e){const o=[],s=e.length-1;return function helper(t,n){for(let r=0,d=e[n].length;r{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",prepare(){const e=new WeakSet;return{Rule(s,{result:n}){if(!s.selector)return;if(!t.test(s.selector))return;if(e.has(s))return;let r=!1;const warnOnComplexSelector=()=>{"warning"===o.onComplexSelector&&(r||(r=!0,s.warn(n,`Complex selectors in '${s.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let d=!1;const warnOnPseudoElements=()=>{"warning"===o.onPseudoElement&&(d||(d=!0,s.warn(n,`Pseudo elements are not allowed in ':is()', unable to transform '${s.selector}'`)))};try{let t=!1;const n=[],r=complexSelectors(splitSelectors(s.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},warnOnComplexSelector,warnOnPseudoElements);if(Array.from(new Set(r)).forEach((o=>{if(s.selectors.indexOf(o)>-1)n.push(o);else{if(alwaysValidSelector(o))return n.push(o),void(t=!0);e.add(s),s.cloneBefore({selector:o}),t=!0}})),n.length&&t&&(e.add(s),s.cloneBefore({selectors:n})),!o.preserve){if(!t)return;s.remove()}}catch(e){if(e.message.indexOf("call stack size exceeded")>-1)throw e;s.warn(n,`Failed to parse selector "${s.selector}"`)}}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser"),o=require("@csstools/selector-specificity");function alwaysValidSelector(o){const s=e().astSync(o);let t=!0;return s.walk((e=>{if("class"!==e.type&&"comment"!==e.type&&"id"!==e.type&&"root"!==e.type&&"selector"!==e.type&&"string"!==e.type&&"tag"!==e.type&&"universal"!==e.type&&("attribute"!==e.type||e.insensitive)&&("combinator"!==e.type||"+"!==e.value&&">"!==e.value&&"~"!==e.value&&" "!==e.value)&&("pseudo"!==e.type||e.nodes?.length||":hover"!==e.value.toLowerCase()&&":focus"!==e.value.toLowerCase())){if("pseudo"===e.type&&1===e.nodes?.length&&":not"===e.value.toLowerCase()){let o=!0;if(e.nodes[0].walkCombinators((()=>{o=!1})),o)return}return t=!1,!1}})),t}function sortCompoundSelectorsInsideComplexSelector(o){if(!o||!o.nodes||1===o.nodes.length)return;const s=[];let t=[];for(let n=0;n"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o,o.type):"selector"===o.type&&o.nodes.length?selectorTypeOrder(e,e.type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):selectorTypeOrder(e,e.type)-selectorTypeOrder(o,o.type)));const t=new Set(o.map((e=>e.type))),r=t.has("universal")&&(t.has("tag")||t.has("attribute")||t.has("class")||t.has("id")||t.has("pseudo"));for(let e=0;e=0;s--){const t=n[s-1];if(n[s].remove(),t&&"tag"===t.type&&"tag"===n[s].type){const t=e.pseudo({value:":is",nodes:[e.selector({value:"",nodes:[n[s]]})]});o.prepend(t)}else o.prepend(n[s])}}function selectorTypeOrder(o,t){return e.isPseudoElement(o)?s.pseudoElement:s[t]}const s={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function childAdjacentChild(e){return!(!e||!e.nodes)&&("selector"===e.type&&(3===e.nodes.length&&(!(!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value)&&(!(!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value&&"~"!==e.nodes[1].value)&&(!(!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value)&&(!(!e.nodes[0].nodes||1!==e.nodes[0].nodes.length)&&("selector"===e.nodes[0].nodes[0].type&&(!(!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length)&&(!(!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value)&&(!(!e.nodes[2].nodes||1!==e.nodes[2].nodes.length)&&("selector"===e.nodes[2].nodes[0].type&&(!(!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length)&&(!(!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value)&&(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),!0))))))))))))))}function isInCompoundWithOneOtherElement(o){if(!o||!o.nodes)return!1;if("selector"!==o.type)return!1;if(2!==o.nodes.length)return!1;let s,t;return o.nodes[0]&&"pseudo"===o.nodes[0].type&&":-csstools-matches"===o.nodes[0].value?(s=0,t=1):o.nodes[1]&&"pseudo"===o.nodes[1].type&&":-csstools-matches"===o.nodes[1].value&&(s=1,t=0),!!s&&(!!o.nodes[t]&&(("selector"!==o.nodes[t].type||!o.nodes[t].some((o=>"combinator"===o.type||e.isPseudoElement(o))))&&("combinator"!==o.nodes[t].type&&(o.nodes[s].nodes[0].append(o.nodes[t].clone()),o.nodes[s].replaceWith(...o.nodes[s].nodes[0].nodes),o.nodes[t].remove(),!0))))}function isPseudoInFirstCompound(e){if(!e||!e.nodes)return!1;if("selector"!==e.type)return!1;let o=-1;for(let s=0;s{t.nodes[0].append(e.clone())})),n.forEach((e=>{t.nodes[0].append(e.clone())})),t.replaceWith(...t.nodes),s.forEach((e=>{e.remove()})),n.forEach((e=>{e.remove()})),!0}function complexSelectors(o,s,t,n){return o.flatMap((o=>{if(-1===o.indexOf(":-csstools-matches")&&-1===o.toLowerCase().indexOf(":is"))return o;const r=e().astSync(o);return r.walkPseudos((o=>{if(":is"===o.value.toLowerCase()&&o.nodes&&o.nodes.length&&"selector"===o.nodes[0].type&&0===o.nodes[0].nodes.length)return o.value=":not",void o.nodes[0].append(e.universal());if(":-csstools-matches"===o.value)if(!o.nodes||o.nodes.length){if(o.walkPseudos((o=>{if(e.isPseudoElement(o)){let e=o.value;if(e.startsWith("::-csstools-invalid-"))return;for(;e.startsWith(":");)e=e.slice(1);o.value=`::-csstools-invalid-${e}`,n()}})),1===o.nodes.length&&"selector"===o.nodes[0].type){if(1===o.nodes[0].nodes.length)return void o.replaceWith(o.nodes[0].nodes[0]);if(!o.nodes[0].some((e=>"combinator"===e.type)))return void o.replaceWith(...o.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==o?childAdjacentChild(o.parent)||isInCompoundWithOneOtherElement(o.parent)||isPseudoInFirstCompound(o.parent)||("warning"===s.onComplexSelector&&t(),o.value=":is"):o.replaceWith(...o.nodes[0].nodes)}else o.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((e=>{"nodes"in e&&sortCompoundSelectorsInsideComplexSelector(e)})),r.toString()})).filter((e=>!!e))}function splitSelectors(s,t,n=0){const r=":not(#"+t.specificityMatchingName+")",d=":not(."+t.specificityMatchingName+")",l=":not("+t.specificityMatchingName+")";return s.flatMap((s=>{if(-1===s.toLowerCase().indexOf(":is"))return s;let c=!1;const i=[];if(e().astSync(s).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;if("pseudo"===e.parent?.parent?.type&&":not"===e.parent?.parent?.value?.toLowerCase())return void i.push([{start:e.parent.parent.sourceIndex,end:e.parent.parent.sourceIndex+e.parent.parent.toString().length,option:`:not(${e.nodes.toString()})`}]);if("pseudo"===e.parent?.parent?.type&&":has"===e.parent?.parent?.value?.toLowerCase())return void(e.value=":-csstools-matches");let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(c=!0);s=s.parent}const t=o.selectorSpecificity(e),n=e.sourceIndex,a=n+e.toString().length,p=[];e.nodes.forEach((e=>{const s={start:n,end:a,option:""},c=o.selectorSpecificity(e);let i=e.toString().trim();const u=Math.max(0,t.a-c.a),h=Math.max(0,t.b-c.b),f=Math.max(0,t.c-c.c);for(let e=0;e{let o="";for(let t=0;t!!e))}function cartesianProduct(...e){const o=[],s=e.length-1;return function helper(t,n){for(let r=0,d=e[n].length;r{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",prepare(){const e=new WeakSet;return{postcssPlugin:"postcss-is-pseudo-class",Rule(s,{result:n}){if(!s.selector)return;if(!t.test(s.selector))return;if(e.has(s))return;let r=!1;const warnOnComplexSelector=()=>{"warning"===o.onComplexSelector&&(r||(r=!0,s.warn(n,`Complex selectors in '${s.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let d=!1;const warnOnPseudoElements=()=>{"warning"===o.onPseudoElement&&(d||(d=!0,s.warn(n,`Pseudo elements are not allowed in ':is()', unable to transform '${s.selector}'`)))};try{let t=!1;const n=[],r=complexSelectors(splitSelectors(s.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},warnOnComplexSelector,warnOnPseudoElements);if(Array.from(new Set(r)).forEach((o=>{if(s.selectors.indexOf(o)>-1)n.push(o);else{if(alwaysValidSelector(o))return n.push(o),void(t=!0);e.add(s),s.cloneBefore({selector:o}),t=!0}})),n.length&&t&&(e.add(s),s.cloneBefore({selectors:n})),!o.preserve){if(!t)return;s.remove()}}catch(e){if(e.message.indexOf("call stack size exceeded")>-1)throw e;s.warn(n,`Failed to parse selector "${s.selector}"`)}}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-is-pseudo-class/dist/index.mjs b/plugins/postcss-is-pseudo-class/dist/index.mjs index a3b17fa53..42a457a37 100644 --- a/plugins/postcss-is-pseudo-class/dist/index.mjs +++ b/plugins/postcss-is-pseudo-class/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";import{selectorSpecificity as o}from"@csstools/selector-specificity";function alwaysValidSelector(o){const s=e().astSync(o);let t=!0;return s.walk((e=>{if("class"!==e.type&&"comment"!==e.type&&"id"!==e.type&&"root"!==e.type&&"selector"!==e.type&&"string"!==e.type&&"tag"!==e.type&&"universal"!==e.type&&("attribute"!==e.type||e.insensitive)&&("combinator"!==e.type||"+"!==e.value&&">"!==e.value&&"~"!==e.value&&" "!==e.value)&&("pseudo"!==e.type||e.nodes?.length||":hover"!==e.value.toLowerCase()&&":focus"!==e.value.toLowerCase())){if("pseudo"===e.type&&1===e.nodes?.length&&":not"===e.value.toLowerCase()){let o=!0;if(e.nodes[0].walkCombinators((()=>{o=!1})),o)return}return t=!1,!1}})),t}function sortCompoundSelectorsInsideComplexSelector(o){if(!o||!o.nodes||1===o.nodes.length)return;const s=[];let t=[];for(let n=0;n"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o,o.type):"selector"===o.type&&o.nodes.length?selectorTypeOrder(e,e.type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):selectorTypeOrder(e,e.type)-selectorTypeOrder(o,o.type)));const t=new Set(o.map((e=>e.type))),r=t.has("universal")&&(t.has("tag")||t.has("attribute")||t.has("class")||t.has("id")||t.has("pseudo"));for(let e=0;e=0;s--){const t=n[s-1];if(n[s].remove(),t&&"tag"===t.type&&"tag"===n[s].type){const t=e.pseudo({value:":is",nodes:[e.selector({value:"",nodes:[n[s]]})]});o.prepend(t)}else o.prepend(n[s])}}function selectorTypeOrder(o,t){return e.isPseudoElement(o)?s.pseudoElement:s[t]}const s={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function childAdjacentChild(e){return!(!e||!e.nodes)&&("selector"===e.type&&(3===e.nodes.length&&(!(!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value)&&(!(!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value&&"~"!==e.nodes[1].value)&&(!(!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value)&&(!(!e.nodes[0].nodes||1!==e.nodes[0].nodes.length)&&("selector"===e.nodes[0].nodes[0].type&&(!(!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length)&&(!(!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value)&&(!(!e.nodes[2].nodes||1!==e.nodes[2].nodes.length)&&("selector"===e.nodes[2].nodes[0].type&&(!(!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length)&&(!(!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value)&&(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),!0))))))))))))))}function isInCompoundWithOneOtherElement(o){if(!o||!o.nodes)return!1;if("selector"!==o.type)return!1;if(2!==o.nodes.length)return!1;let s,t;return o.nodes[0]&&"pseudo"===o.nodes[0].type&&":-csstools-matches"===o.nodes[0].value?(s=0,t=1):o.nodes[1]&&"pseudo"===o.nodes[1].type&&":-csstools-matches"===o.nodes[1].value&&(s=1,t=0),!!s&&(!!o.nodes[t]&&(("selector"!==o.nodes[t].type||!o.nodes[t].some((o=>"combinator"===o.type||e.isPseudoElement(o))))&&("combinator"!==o.nodes[t].type&&(o.nodes[s].nodes[0].append(o.nodes[t].clone()),o.nodes[s].replaceWith(...o.nodes[s].nodes[0].nodes),o.nodes[t].remove(),!0))))}function isPseudoInFirstCompound(e){if(!e||!e.nodes)return!1;if("selector"!==e.type)return!1;let o=-1;for(let s=0;s{t.nodes[0].append(e.clone())})),n.forEach((e=>{t.nodes[0].append(e.clone())})),t.replaceWith(...t.nodes),s.forEach((e=>{e.remove()})),n.forEach((e=>{e.remove()})),!0}function complexSelectors(o,s,t,n){return o.flatMap((o=>{if(-1===o.indexOf(":-csstools-matches")&&-1===o.toLowerCase().indexOf(":is"))return o;const r=e().astSync(o);return r.walkPseudos((o=>{if(":is"===o.value.toLowerCase()&&o.nodes&&o.nodes.length&&"selector"===o.nodes[0].type&&0===o.nodes[0].nodes.length)return o.value=":not",void o.nodes[0].append(e.universal());if(":-csstools-matches"===o.value)if(!o.nodes||o.nodes.length){if(o.walkPseudos((o=>{if(e.isPseudoElement(o)){let e=o.value;if(e.startsWith("::-csstools-invalid-"))return;for(;e.startsWith(":");)e=e.slice(1);o.value=`::-csstools-invalid-${e}`,n()}})),1===o.nodes.length&&"selector"===o.nodes[0].type){if(1===o.nodes[0].nodes.length)return void o.replaceWith(o.nodes[0].nodes[0]);if(!o.nodes[0].some((e=>"combinator"===e.type)))return void o.replaceWith(...o.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==o?childAdjacentChild(o.parent)||isInCompoundWithOneOtherElement(o.parent)||isPseudoInFirstCompound(o.parent)||("warning"===s.onComplexSelector&&t(),o.value=":is"):o.replaceWith(...o.nodes[0].nodes)}else o.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((e=>{"nodes"in e&&sortCompoundSelectorsInsideComplexSelector(e)})),r.toString()})).filter((e=>!!e))}function splitSelectors(s,t,n=0){const r=":not(#"+t.specificityMatchingName+")",d=":not(."+t.specificityMatchingName+")",l=":not("+t.specificityMatchingName+")";return s.flatMap((s=>{if(-1===s.toLowerCase().indexOf(":is"))return s;let a=!1;const c=[];if(e().astSync(s).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;if("pseudo"===e.parent?.parent?.type&&":not"===e.parent?.parent?.value?.toLowerCase())return void c.push([{start:e.parent.parent.sourceIndex,end:e.parent.parent.sourceIndex+e.parent.parent.toString().length,option:`:not(${e.nodes.toString()})`}]);if("pseudo"===e.parent?.parent?.type&&":has"===e.parent?.parent?.value?.toLowerCase())return void(e.value=":-csstools-matches");let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(a=!0);s=s.parent}const t=o(e),n=e.sourceIndex,i=n+e.toString().length,p=[];e.nodes.forEach((e=>{const s={start:n,end:i,option:""},a=o(e);let c=e.toString().trim();const u=Math.max(0,t.a-a.a),h=Math.max(0,t.b-a.b),f=Math.max(0,t.c-a.c);for(let e=0;e{let o="";for(let t=0;t!!e))}function cartesianProduct(...e){const o=[],s=e.length-1;return function helper(t,n){for(let r=0,d=e[n].length;r{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",prepare(){const e=new WeakSet;return{Rule(s,{result:n}){if(!s.selector)return;if(!t.test(s.selector))return;if(e.has(s))return;let r=!1;const warnOnComplexSelector=()=>{"warning"===o.onComplexSelector&&(r||(r=!0,s.warn(n,`Complex selectors in '${s.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let d=!1;const warnOnPseudoElements=()=>{"warning"===o.onPseudoElement&&(d||(d=!0,s.warn(n,`Pseudo elements are not allowed in ':is()', unable to transform '${s.selector}'`)))};try{let t=!1;const n=[],r=complexSelectors(splitSelectors(s.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},warnOnComplexSelector,warnOnPseudoElements);if(Array.from(new Set(r)).forEach((o=>{if(s.selectors.indexOf(o)>-1)n.push(o);else{if(alwaysValidSelector(o))return n.push(o),void(t=!0);e.add(s),s.cloneBefore({selector:o}),t=!0}})),n.length&&t&&(e.add(s),s.cloneBefore({selectors:n})),!o.preserve){if(!t)return;s.remove()}}catch(e){if(e.message.indexOf("call stack size exceeded")>-1)throw e;s.warn(n,`Failed to parse selector "${s.selector}"`)}}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";import{selectorSpecificity as o}from"@csstools/selector-specificity";function alwaysValidSelector(o){const s=e().astSync(o);let t=!0;return s.walk((e=>{if("class"!==e.type&&"comment"!==e.type&&"id"!==e.type&&"root"!==e.type&&"selector"!==e.type&&"string"!==e.type&&"tag"!==e.type&&"universal"!==e.type&&("attribute"!==e.type||e.insensitive)&&("combinator"!==e.type||"+"!==e.value&&">"!==e.value&&"~"!==e.value&&" "!==e.value)&&("pseudo"!==e.type||e.nodes?.length||":hover"!==e.value.toLowerCase()&&":focus"!==e.value.toLowerCase())){if("pseudo"===e.type&&1===e.nodes?.length&&":not"===e.value.toLowerCase()){let o=!0;if(e.nodes[0].walkCombinators((()=>{o=!1})),o)return}return t=!1,!1}})),t}function sortCompoundSelectorsInsideComplexSelector(o){if(!o||!o.nodes||1===o.nodes.length)return;const s=[];let t=[];for(let n=0;n"selector"===e.type&&"selector"===o.type&&e.nodes.length&&o.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):"selector"===e.type&&e.nodes.length?selectorTypeOrder(e.nodes[0],e.nodes[0].type)-selectorTypeOrder(o,o.type):"selector"===o.type&&o.nodes.length?selectorTypeOrder(e,e.type)-selectorTypeOrder(o.nodes[0],o.nodes[0].type):selectorTypeOrder(e,e.type)-selectorTypeOrder(o,o.type)));const t=new Set(o.map((e=>e.type))),r=t.has("universal")&&(t.has("tag")||t.has("attribute")||t.has("class")||t.has("id")||t.has("pseudo"));for(let e=0;e=0;s--){const t=n[s-1];if(n[s].remove(),t&&"tag"===t.type&&"tag"===n[s].type){const t=e.pseudo({value:":is",nodes:[e.selector({value:"",nodes:[n[s]]})]});o.prepend(t)}else o.prepend(n[s])}}function selectorTypeOrder(o,t){return e.isPseudoElement(o)?s.pseudoElement:s[t]}const s={universal:0,tag:1,pseudoElement:2,id:3,class:4,attribute:5,pseudo:6,selector:7,string:8,root:9,comment:10};function childAdjacentChild(e){return!(!e||!e.nodes)&&("selector"===e.type&&(3===e.nodes.length&&(!(!e.nodes[0]||"pseudo"!==e.nodes[0].type||":-csstools-matches"!==e.nodes[0].value)&&(!(!e.nodes[1]||"combinator"!==e.nodes[1].type||"+"!==e.nodes[1].value&&"~"!==e.nodes[1].value)&&(!(!e.nodes[2]||"pseudo"!==e.nodes[2].type||":-csstools-matches"!==e.nodes[2].value)&&(!(!e.nodes[0].nodes||1!==e.nodes[0].nodes.length)&&("selector"===e.nodes[0].nodes[0].type&&(!(!e.nodes[0].nodes[0].nodes||3!==e.nodes[0].nodes[0].nodes.length)&&(!(!e.nodes[0].nodes[0].nodes||"combinator"!==e.nodes[0].nodes[0].nodes[1].type||">"!==e.nodes[0].nodes[0].nodes[1].value)&&(!(!e.nodes[2].nodes||1!==e.nodes[2].nodes.length)&&("selector"===e.nodes[2].nodes[0].type&&(!(!e.nodes[2].nodes[0].nodes||3!==e.nodes[2].nodes[0].nodes.length)&&(!(!e.nodes[2].nodes[0].nodes||"combinator"!==e.nodes[2].nodes[0].nodes[1].type||">"!==e.nodes[2].nodes[0].nodes[1].value)&&(e.nodes[0].nodes[0].insertAfter(e.nodes[0].nodes[0].nodes[0],e.nodes[2].nodes[0].nodes[0].clone()),e.nodes[2].nodes[0].nodes[1].remove(),e.nodes[2].nodes[0].nodes[0].remove(),e.nodes[0].replaceWith(e.nodes[0].nodes[0]),e.nodes[2].replaceWith(e.nodes[2].nodes[0]),!0))))))))))))))}function isInCompoundWithOneOtherElement(o){if(!o||!o.nodes)return!1;if("selector"!==o.type)return!1;if(2!==o.nodes.length)return!1;let s,t;return o.nodes[0]&&"pseudo"===o.nodes[0].type&&":-csstools-matches"===o.nodes[0].value?(s=0,t=1):o.nodes[1]&&"pseudo"===o.nodes[1].type&&":-csstools-matches"===o.nodes[1].value&&(s=1,t=0),!!s&&(!!o.nodes[t]&&(("selector"!==o.nodes[t].type||!o.nodes[t].some((o=>"combinator"===o.type||e.isPseudoElement(o))))&&("combinator"!==o.nodes[t].type&&(o.nodes[s].nodes[0].append(o.nodes[t].clone()),o.nodes[s].replaceWith(...o.nodes[s].nodes[0].nodes),o.nodes[t].remove(),!0))))}function isPseudoInFirstCompound(e){if(!e||!e.nodes)return!1;if("selector"!==e.type)return!1;let o=-1;for(let s=0;s{t.nodes[0].append(e.clone())})),n.forEach((e=>{t.nodes[0].append(e.clone())})),t.replaceWith(...t.nodes),s.forEach((e=>{e.remove()})),n.forEach((e=>{e.remove()})),!0}function complexSelectors(o,s,t,n){return o.flatMap((o=>{if(-1===o.indexOf(":-csstools-matches")&&-1===o.toLowerCase().indexOf(":is"))return o;const r=e().astSync(o);return r.walkPseudos((o=>{if(":is"===o.value.toLowerCase()&&o.nodes&&o.nodes.length&&"selector"===o.nodes[0].type&&0===o.nodes[0].nodes.length)return o.value=":not",void o.nodes[0].append(e.universal());if(":-csstools-matches"===o.value)if(!o.nodes||o.nodes.length){if(o.walkPseudos((o=>{if(e.isPseudoElement(o)){let e=o.value;if(e.startsWith("::-csstools-invalid-"))return;for(;e.startsWith(":");)e=e.slice(1);o.value=`::-csstools-invalid-${e}`,n()}})),1===o.nodes.length&&"selector"===o.nodes[0].type){if(1===o.nodes[0].nodes.length)return void o.replaceWith(o.nodes[0].nodes[0]);if(!o.nodes[0].some((e=>"combinator"===e.type)))return void o.replaceWith(...o.nodes[0].nodes)}1!==r.nodes.length||"selector"!==r.nodes[0].type||1!==r.nodes[0].nodes.length||r.nodes[0].nodes[0]!==o?childAdjacentChild(o.parent)||isInCompoundWithOneOtherElement(o.parent)||isPseudoInFirstCompound(o.parent)||("warning"===s.onComplexSelector&&t(),o.value=":is"):o.replaceWith(...o.nodes[0].nodes)}else o.remove()})),r.walk((e=>{"selector"===e.type&&"nodes"in e&&1===e.nodes.length&&"selector"===e.nodes[0].type&&e.replaceWith(e.nodes[0])})),r.walk((e=>{"nodes"in e&&sortCompoundSelectorsInsideComplexSelector(e)})),r.toString()})).filter((e=>!!e))}function splitSelectors(s,t,n=0){const r=":not(#"+t.specificityMatchingName+")",d=":not(."+t.specificityMatchingName+")",l=":not("+t.specificityMatchingName+")";return s.flatMap((s=>{if(-1===s.toLowerCase().indexOf(":is"))return s;let a=!1;const c=[];if(e().astSync(s).walkPseudos((e=>{if(":is"!==e.value.toLowerCase()||!e.nodes||!e.nodes.length)return;if("selector"===e.nodes[0].type&&0===e.nodes[0].nodes.length)return;if("pseudo"===e.parent?.parent?.type&&":not"===e.parent?.parent?.value?.toLowerCase())return void c.push([{start:e.parent.parent.sourceIndex,end:e.parent.parent.sourceIndex+e.parent.parent.toString().length,option:`:not(${e.nodes.toString()})`}]);if("pseudo"===e.parent?.parent?.type&&":has"===e.parent?.parent?.value?.toLowerCase())return void(e.value=":-csstools-matches");let s=e.parent;for(;s;){if(s.value&&":is"===s.value.toLowerCase()&&"pseudo"===s.type)return void(a=!0);s=s.parent}const t=o(e),n=e.sourceIndex,i=n+e.toString().length,p=[];e.nodes.forEach((e=>{const s={start:n,end:i,option:""},a=o(e);let c=e.toString().trim();const u=Math.max(0,t.a-a.a),h=Math.max(0,t.b-a.b),f=Math.max(0,t.c-a.c);for(let e=0;e{let o="";for(let t=0;t!!e))}function cartesianProduct(...e){const o=[],s=e.length-1;return function helper(t,n){for(let r=0,d=e[n].length;r{const o={specificityMatchingName:"does-not-exist",...e||{}};return{postcssPlugin:"postcss-is-pseudo-class",prepare(){const e=new WeakSet;return{postcssPlugin:"postcss-is-pseudo-class",Rule(s,{result:n}){if(!s.selector)return;if(!t.test(s.selector))return;if(e.has(s))return;let r=!1;const warnOnComplexSelector=()=>{"warning"===o.onComplexSelector&&(r||(r=!0,s.warn(n,`Complex selectors in '${s.selector}' can not be transformed to an equivalent selector without ':is()'.`)))};let d=!1;const warnOnPseudoElements=()=>{"warning"===o.onPseudoElement&&(d||(d=!0,s.warn(n,`Pseudo elements are not allowed in ':is()', unable to transform '${s.selector}'`)))};try{let t=!1;const n=[],r=complexSelectors(splitSelectors(s.selectors,{specificityMatchingName:o.specificityMatchingName}),{onComplexSelector:o.onComplexSelector},warnOnComplexSelector,warnOnPseudoElements);if(Array.from(new Set(r)).forEach((o=>{if(s.selectors.indexOf(o)>-1)n.push(o);else{if(alwaysValidSelector(o))return n.push(o),void(t=!0);e.add(s),s.cloneBefore({selector:o}),t=!0}})),n.length&&t&&(e.add(s),s.cloneBefore({selectors:n})),!o.preserve){if(!t)return;s.remove()}}catch(e){if(e.message.indexOf("call stack size exceeded")>-1)throw e;s.warn(n,`Failed to parse selector "${s.selector}"`)}}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-is-pseudo-class/src/index.ts b/plugins/postcss-is-pseudo-class/src/index.ts index ebda8b150..5d7b13ff8 100644 --- a/plugins/postcss-is-pseudo-class/src/index.ts +++ b/plugins/postcss-is-pseudo-class/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import alwaysValidSelector from './split-selectors/always-valid'; import complexSelectors from './split-selectors/complex'; import splitSelectors from './split-selectors/split-selectors'; @@ -34,11 +34,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-is-pseudo-class', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-is-pseudo-class', + Rule(rule, { result }): void { if (!rule.selector) { return; } @@ -53,7 +54,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { // Because of loops and recursion we try to only warn once per selector. let didWarnForComplexSelectors = false; - const warnOnComplexSelector = () => { + const warnOnComplexSelector = (): void => { if (options.onComplexSelector !== 'warning') { return; } @@ -67,7 +68,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { // Because of loops and recursion we try to only warn once per selector. let didWarnForPseudoElements = false; - const warnOnPseudoElements = () => { + const warnOnPseudoElements = (): void => { if (options.onPseudoElement !== 'warning') { return; } @@ -80,7 +81,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { }; try { - let didModifiy = false; + let didModify = false; const selectorListOnOriginalNode = []; // 1. List behavior. @@ -109,7 +110,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { // `::is()` is incorrect but can't be detected without parsing. // It will be left as is and will eventually trigger this condition. // This prevents an infinite loop. - // didModifiy is the signal to prevent the infinite loop. + // didModify is the signal to prevent the infinite loop. if (rule.selectors.indexOf(modifiedSelector) > -1) { selectorListOnOriginalNode.push(modifiedSelector); return; @@ -117,22 +118,22 @@ const creator: PluginCreator = (opts?: pluginOptions) => { if (alwaysValidSelector(modifiedSelector)) { selectorListOnOriginalNode.push(modifiedSelector); - didModifiy = true; + didModify = true; return; } transformedNodes.add(rule); rule.cloneBefore({ selector: modifiedSelector }); - didModifiy = true; + didModify = true; }); - if (selectorListOnOriginalNode.length && didModifiy) { + if (selectorListOnOriginalNode.length && didModify) { transformedNodes.add(rule); rule.cloneBefore({ selectors: selectorListOnOriginalNode }); } if (!options.preserve) { - if (!didModifiy) { + if (!didModify) { return; } diff --git a/plugins/postcss-is-pseudo-class/src/split-selectors/complex.ts b/plugins/postcss-is-pseudo-class/src/split-selectors/complex.ts index 0367c4a96..4a08cbb5c 100644 --- a/plugins/postcss-is-pseudo-class/src/split-selectors/complex.ts +++ b/plugins/postcss-is-pseudo-class/src/split-selectors/complex.ts @@ -5,7 +5,7 @@ import { isInCompoundWithOneOtherElement } from './complex/is-in-compound'; import type { Container } from 'postcss-selector-parser'; import { isPseudoInFirstCompound } from './complex/is-pseudo-in-first-compound'; -export default function complexSelectors(selectors: Array, pluginOptions: { onComplexSelector?: 'warning' }, warnOnComplexSelector: () => void, warnOnPseudoElements: () => void) { +export default function complexSelectors(selectors: Array, pluginOptions: { onComplexSelector?: 'warning' }, warnOnComplexSelector: () => void, warnOnPseudoElements: () => void): Array { return selectors.flatMap((selector) => { if (selector.indexOf(':-csstools-matches') === -1 && selector.toLowerCase().indexOf(':is') === -1) { return selector; diff --git a/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts b/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts index 57c8360e2..d41ba18f5 100644 --- a/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts +++ b/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts @@ -1,6 +1,6 @@ import parser from 'postcss-selector-parser'; -export function sortCompoundSelectorsInsideComplexSelector(node) { +export function sortCompoundSelectorsInsideComplexSelector(node): void { if (!node || !node.nodes || node.nodes.length === 1) { return; } @@ -99,7 +99,7 @@ export function sortCompoundSelectorsInsideComplexSelector(node) { } } -function selectorTypeOrder(selector, type) { +function selectorTypeOrder(selector, type): number { if (parser.isPseudoElement(selector)) { return selectorTypeOrderIndex.pseudoElement; } diff --git a/plugins/postcss-is-pseudo-class/src/split-selectors/split-selectors.ts b/plugins/postcss-is-pseudo-class/src/split-selectors/split-selectors.ts index 05d3a33c1..1f6b42ba8 100644 --- a/plugins/postcss-is-pseudo-class/src/split-selectors/split-selectors.ts +++ b/plugins/postcss-is-pseudo-class/src/split-selectors/split-selectors.ts @@ -128,11 +128,11 @@ export default function splitSelectors(selectors: Array, pluginOptions: } // https://en.wikipedia.org/wiki/Cartesian_product -function cartesianProduct(...args) { +function cartesianProduct(...args: Array>): Array> { const r = []; const max = args.length - 1; - function helper(arr, i) { + function helper(arr, i): void { for (let j = 0, l = args[i].length; j < l; j++) { const a = arr.slice(0); a.push(args[i][j]); @@ -143,6 +143,8 @@ function cartesianProduct(...args) { } } } + helper([], 0); + return r; } diff --git a/plugins/postcss-lab-function/dist/index.cjs b/plugins/postcss-lab-function/dist/index.cjs index 1a20c2996..ffba0495e 100644 --- a/plugins/postcss-lab-function/dist/index.cjs +++ b/plugins/postcss-lab-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),a=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-tokenizer");const o=/\b(?:lab|lch)\(/i,l=/^(?:lab|lch)$/i,basePlugin=s=>({postcssPlugin:"postcss-lab-function",Declaration:n=>{const i=n.value;if(!o.test(i))return;if(t.hasFallback(n))return;if(t.hasSupportsAtRuleAncestor(n,o))return;const u=r.tokenize({css:i}),c=a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),p=a.stringify(c);if(p===i)return;let g=p;s?.subFeatures.displayP3&&(g=a.stringify(a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&g!==p&&n.cloneBefore({value:g}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),a=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-tokenizer");const o=/\b(?:lab|lch)\(/i,l=/^(?:lab|lch)$/i,basePlugin=s=>({postcssPlugin:"postcss-lab-function",Declaration(n){const i=n.value;if(!o.test(i))return;if(t.hasFallback(n))return;if(t.hasSupportsAtRuleAncestor(n,o))return;const u=r.tokenize({css:i}),c=a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),p=a.stringify(c);if(p===i)return;let g=p;s?.subFeatures.displayP3&&(g=a.stringify(a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&g!==p&&n.cloneBefore({value:g}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-lab-function/dist/index.mjs b/plugins/postcss-lab-function/dist/index.mjs index 33c0353de..cd9739dc8 100644 --- a/plugins/postcss-lab-function/dist/index.mjs +++ b/plugins/postcss-lab-function/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as t,serializeRGB as r,colorDataFitsRGB_Gamut as o,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const g=/\b(?:lab|lch)\(/i,f=/^(?:lab|lch)$/i,basePlugin=s=>({postcssPlugin:"postcss-lab-function",Declaration:b=>{const y=b.value;if(!g.test(y))return;if(l(b))return;if(i(b,g))return;const v=m({css:y}),F=n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const o=e(s);return o&&!(o.syntaxFlags.has(t.Experimental)||o.syntaxFlags.has(t.HasNoneKeywords)||o.syntaxFlags.has(t.RelativeColorSyntax))?r(o):void 0})),x=p(F);if(x===y)return;let P=x;s?.subFeatures.displayP3&&(P=p(n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const l=e(s);return l&&!(l.syntaxFlags.has(t.Experimental)||l.syntaxFlags.has(t.HasNoneKeywords)||l.syntaxFlags.has(t.RelativeColorSyntax))?o(l)?r(l):a(l):void 0})))),b.cloneBefore({value:x}),s?.subFeatures.displayP3&&P!==x&&b.cloneBefore({value:P}),s?.preserve||b.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as t,serializeRGB as r,colorDataFitsRGB_Gamut as o,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const g=/\b(?:lab|lch)\(/i,f=/^(?:lab|lch)$/i,basePlugin=s=>({postcssPlugin:"postcss-lab-function",Declaration(b){const y=b.value;if(!g.test(y))return;if(l(b))return;if(i(b,g))return;const v=m({css:y}),F=n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const o=e(s);return o&&!(o.syntaxFlags.has(t.Experimental)||o.syntaxFlags.has(t.HasNoneKeywords)||o.syntaxFlags.has(t.RelativeColorSyntax))?r(o):void 0})),x=p(F);if(x===y)return;let P=x;s?.subFeatures.displayP3&&(P=p(n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const l=e(s);return l&&!(l.syntaxFlags.has(t.Experimental)||l.syntaxFlags.has(t.HasNoneKeywords)||l.syntaxFlags.has(t.RelativeColorSyntax))?o(l)?r(l):a(l):void 0})))),b.cloneBefore({value:x}),s?.subFeatures.displayP3&&P!==x&&b.cloneBefore({value:P}),s?.preserve||b.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-lab-function/src/index.ts b/plugins/postcss-lab-function/src/index.ts index fd0b4d9c0..6125a8622 100644 --- a/plugins/postcss-lab-function/src/index.ts +++ b/plugins/postcss-lab-function/src/index.ts @@ -19,7 +19,7 @@ const LAB_LCH_NAME_REGEX = /^(?:lab|lch)$/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-lab-function', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(LAB_LCH_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-light-dark-function/dist/index.cjs b/plugins/postcss-light-dark-function/dist/index.cjs index 6f7482506..2352d02cc 100644 --- a/plugins/postcss-light-dark-function/dist/index.cjs +++ b/plugins/postcss-light-dark-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/postcss-progressive-custom-properties"),o=require("@csstools/css-tokenizer"),r=require("@csstools/utilities"),n=require("@csstools/css-parser-algorithms");const s="--csstools-color-scheme--light",t="--csstools-color-scheme--dark",a="initial",i=" ",c=/dark/i,p=/light/i;function colorSchemes(e){const r=o.tokenize({css:e});let n=!1,s=!1;return r.forEach((e=>{e[0]===o.TokenType.Ident&&(p.test(e[4].value)?n=!0:c.test(e[4].value)&&(s=!0))})),[n,s]}const l=/^light-dark$/i;function isComma(e){return n.isTokenNode(e)&&e.value[0]===o.TokenType.Comma}function parseLightDark(e){if(!n.isFunctionNode(e)||!l.test(e.getName()))return!1;const o=e.value.filter((e=>!n.isWhitespaceNode(e)&&!n.isCommentNode(e)&&!n.isSimpleBlockNode(e)));if(3!==o.length)return!1;let r=o[0];const s=o[1];let t=o[2];if(!r||!s||!t)return!1;if(!isComma(s))return!1;if(isComma(r)||isComma(t))return!1;if(n.isFunctionNode(r)){const e=[r];n.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,!0)})),[r]=e}if(n.isFunctionNode(t)){const e=[t];n.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,!1)})),[t]=e}return[r,t]}function recurseLightDark(e,o,r,s){if("number"!=typeof r)return;const t=parseLightDark(e);if(!t)return;let a=t[s?0:1];if(n.isFunctionNode(a)){const e=[a];n.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,s)})),[a]=e}o.value[r]=a}function transformLightDark(e){const r=n.replaceComponentValues(n.parseCommaSeparatedListOfComponentValues(o.tokenize({css:e})),(e=>{const r=parseLightDark(e);if(!r)return;const[a,i]=r;return[new n.FunctionNode([o.TokenType.Function,"var(",-1,-1,{value:"var"}],[o.TokenType.CloseParen,")",-1,-1,void 0],[new n.TokenNode([o.TokenType.Ident,s,-1,-1,{value:s}]),new n.TokenNode([o.TokenType.Comma,",",-1,-1,void 0]),new n.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),a]),new n.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),new n.FunctionNode([o.TokenType.Function,"var(",-1,-1,{value:"var"}],[o.TokenType.CloseParen,")",-1,-1,void 0],[new n.TokenNode([o.TokenType.Ident,t,-1,-1,{value:t}]),new n.TokenNode([o.TokenType.Comma,",",-1,-1,void 0]),new n.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),i])]}));return n.stringify(r)}const u=/^color-scheme$/i,d=/\blight-dark\(/i,basePlugin=e=>({postcssPlugin:"postcss-light-dark-function",prepare(){let o,n=!1;return{Declaration(c,{atRule:p,rule:l}){const v=c.parent;if(v){if(u.test(c.prop)){const[e,o]=colorSchemes(c.value);if(e&&o){c.cloneBefore({prop:s,value:a}),c.cloneBefore({prop:t,value:i});const e=v.clone();e.removeAll(),e.append(c.clone({prop:s,value:i})),e.append(c.clone({prop:t,value:a}));const o=p({name:"media",params:"(prefers-color-scheme: dark)",source:v.source});return o.append(e),void v.after(o)}return o?(c.cloneBefore({prop:s,value:i}),void c.cloneBefore({prop:t,value:a})):e?(c.cloneBefore({prop:s,value:a}),void c.cloneBefore({prop:t,value:i})):void 0}if(d.test(c.value)){if(r.hasFallback(c))return;if(r.hasSupportsAtRuleAncestor(c,d))return;const s=transformLightDark(c.value);if(s===c.value)return;if(n=!0,o||(o=c.source),c.cloneBefore({value:s}),c.variable&&c.parent){const e=l({selector:"& *",source:c.source});e.append(c.clone({value:s})),c.parent.append(e)}e?.preserve||c.remove()}}},OnceExit(e,{atRule:r,rule:c,decl:p}){if(!n||!o)return;const l=p({prop:s,value:a}),u=p({prop:t,value:i});l.source=o,u.source=o;{const r=c({selector:":root",source:o});r.append(l,u),e.append(r)}{const n=c({selector:":root",source:o});n.append(l.clone({value:i}),u.clone({value:a}));const s=r({name:"media",params:"(prefers-color-scheme: dark)",source:o});s.append(n),e.append(s)}}}}});basePlugin.postcss=!0;const postcssPlugin=o=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!0},o);return r.enableProgressiveCustomProperties&&r.preserve?{postcssPlugin:"postcss-light-dark-function",plugins:[e(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var e=require("@csstools/postcss-progressive-custom-properties"),o=require("@csstools/css-tokenizer"),r=require("@csstools/utilities"),s=require("@csstools/css-parser-algorithms");const n="--csstools-color-scheme--light",t="--csstools-color-scheme--dark",a="initial",i=" ",c=/dark/i,p=/light/i;function colorSchemes(e){const r=o.tokenize({css:e});let s=!1,n=!1;return r.forEach((e=>{e[0]===o.TokenType.Ident&&(p.test(e[4].value)?s=!0:c.test(e[4].value)&&(n=!0))})),[s,n]}const l=/^light-dark$/i;function isComma(e){return s.isTokenNode(e)&&e.value[0]===o.TokenType.Comma}function parseLightDark(e){if(!s.isFunctionNode(e)||!l.test(e.getName()))return!1;const o=e.value.filter((e=>!s.isWhitespaceNode(e)&&!s.isCommentNode(e)&&!s.isSimpleBlockNode(e)));if(3!==o.length)return!1;let r=o[0];const n=o[1];let t=o[2];if(!r||!n||!t)return!1;if(!isComma(n))return!1;if(isComma(r)||isComma(t))return!1;if(s.isFunctionNode(r)){const e=[r];s.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,!0)})),[r]=e}if(s.isFunctionNode(t)){const e=[t];s.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,!1)})),[t]=e}return[r,t]}function recurseLightDark(e,o,r,n){if("number"!=typeof r)return;const t=parseLightDark(e);if(!t)return;let a=t[n?0:1];if(s.isFunctionNode(a)){const e=[a];s.walk(e,(({node:e,parent:o},r)=>{recurseLightDark(e,o,r,n)})),[a]=e}o.value[r]=a}function transformLightDark(e){const r=s.replaceComponentValues(s.parseCommaSeparatedListOfComponentValues(o.tokenize({css:e})),(e=>{const r=parseLightDark(e);if(!r)return;const[a,i]=r;return[new s.FunctionNode([o.TokenType.Function,"var(",-1,-1,{value:"var"}],[o.TokenType.CloseParen,")",-1,-1,void 0],[new s.TokenNode([o.TokenType.Ident,n,-1,-1,{value:n}]),new s.TokenNode([o.TokenType.Comma,",",-1,-1,void 0]),new s.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),a]),new s.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),new s.FunctionNode([o.TokenType.Function,"var(",-1,-1,{value:"var"}],[o.TokenType.CloseParen,")",-1,-1,void 0],[new s.TokenNode([o.TokenType.Ident,t,-1,-1,{value:t}]),new s.TokenNode([o.TokenType.Comma,",",-1,-1,void 0]),new s.WhitespaceNode([[o.TokenType.Whitespace," ",-1,-1,void 0]]),i])]}));return s.stringify(r)}const u=/^color-scheme$/i,d=/\blight-dark\(/i,basePlugin=e=>({postcssPlugin:"postcss-light-dark-function",prepare(){let o,s=!1;return{postcssPlugin:"postcss-light-dark-function",Declaration(c,{atRule:p,rule:l}){const v=c.parent;if(v){if(u.test(c.prop)){const[e,o]=colorSchemes(c.value);if(e&&o){c.cloneBefore({prop:n,value:a}),c.cloneBefore({prop:t,value:i});const e=v.clone();e.removeAll(),e.append(c.clone({prop:n,value:i})),e.append(c.clone({prop:t,value:a}));const o=p({name:"media",params:"(prefers-color-scheme: dark)",source:v.source});return o.append(e),void v.after(o)}return o?(c.cloneBefore({prop:n,value:i}),void c.cloneBefore({prop:t,value:a})):e?(c.cloneBefore({prop:n,value:a}),void c.cloneBefore({prop:t,value:i})):void 0}if(d.test(c.value)){if(r.hasFallback(c))return;if(r.hasSupportsAtRuleAncestor(c,d))return;const n=transformLightDark(c.value);if(n===c.value)return;if(s=!0,o||(o=c.source),c.cloneBefore({value:n}),c.variable&&c.parent){const e=l({selector:"& *",source:c.source});e.append(c.clone({value:n})),c.parent.append(e)}e?.preserve||c.remove()}}},OnceExit(e,{atRule:r,rule:c,decl:p}){if(!s||!o)return;const l=p({prop:n,value:a}),u=p({prop:t,value:i});l.source=o,u.source=o;{const r=c({selector:":root",source:o});r.append(l,u),e.append(r)}{const s=c({selector:":root",source:o});s.append(l.clone({value:i}),u.clone({value:a}));const n=r({name:"media",params:"(prefers-color-scheme: dark)",source:o});n.append(s),e.append(n)}}}}});basePlugin.postcss=!0;const postcssPlugin=o=>{const r=Object.assign({enableProgressiveCustomProperties:!0,preserve:!0},o);return r.enableProgressiveCustomProperties&&r.preserve?{postcssPlugin:"postcss-light-dark-function",plugins:[e(),basePlugin(r)]}:basePlugin(r)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-light-dark-function/dist/index.mjs b/plugins/postcss-light-dark-function/dist/index.mjs index 39f32f5eb..f2e1ad2b3 100644 --- a/plugins/postcss-light-dark-function/dist/index.mjs +++ b/plugins/postcss-light-dark-function/dist/index.mjs @@ -1 +1 @@ -import e from"@csstools/postcss-progressive-custom-properties";import{tokenize as r,TokenType as o}from"@csstools/css-tokenizer";import{hasFallback as t,hasSupportsAtRuleAncestor as s}from"@csstools/utilities";import{isFunctionNode as n,isWhitespaceNode as a,isCommentNode as c,isSimpleBlockNode as i,walk as l,isTokenNode as u,replaceComponentValues as p,parseCommaSeparatedListOfComponentValues as v,FunctionNode as f,TokenNode as m,WhitespaceNode as d,stringify as h}from"@csstools/css-parser-algorithms";const g="--csstools-color-scheme--light",k="--csstools-color-scheme--dark",C="initial",D=" ",w=/dark/i,L=/light/i;function colorSchemes(e){const t=r({css:e});let s=!1,n=!1;return t.forEach((e=>{e[0]===o.Ident&&(L.test(e[4].value)?s=!0:w.test(e[4].value)&&(n=!0))})),[s,n]}const P=/^light-dark$/i;function isComma(e){return u(e)&&e.value[0]===o.Comma}function parseLightDark(e){if(!n(e)||!P.test(e.getName()))return!1;const r=e.value.filter((e=>!a(e)&&!c(e)&&!i(e)));if(3!==r.length)return!1;let o=r[0];const t=r[1];let s=r[2];if(!o||!t||!s)return!1;if(!isComma(t))return!1;if(isComma(o)||isComma(s))return!1;if(n(o)){const e=[o];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,!0)})),[o]=e}if(n(s)){const e=[s];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,!1)})),[s]=e}return[o,s]}function recurseLightDark(e,r,o,t){if("number"!=typeof o)return;const s=parseLightDark(e);if(!s)return;let a=s[t?0:1];if(n(a)){const e=[a];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,t)})),[a]=e}r.value[o]=a}function transformLightDark(e){const t=p(v(r({css:e})),(e=>{const r=parseLightDark(e);if(!r)return;const[t,s]=r;return[new f([o.Function,"var(",-1,-1,{value:"var"}],[o.CloseParen,")",-1,-1,void 0],[new m([o.Ident,g,-1,-1,{value:g}]),new m([o.Comma,",",-1,-1,void 0]),new d([[o.Whitespace," ",-1,-1,void 0]]),t]),new d([[o.Whitespace," ",-1,-1,void 0]]),new f([o.Function,"var(",-1,-1,{value:"var"}],[o.CloseParen,")",-1,-1,void 0],[new m([o.Ident,k,-1,-1,{value:k}]),new m([o.Comma,",",-1,-1,void 0]),new d([[o.Whitespace," ",-1,-1,void 0]]),s])]}));return h(t)}const B=/^color-scheme$/i,b=/\blight-dark\(/i,basePlugin=e=>({postcssPlugin:"postcss-light-dark-function",prepare(){let r,o=!1;return{Declaration(n,{atRule:a,rule:c}){const i=n.parent;if(i){if(B.test(n.prop)){const[e,r]=colorSchemes(n.value);if(e&&r){n.cloneBefore({prop:g,value:C}),n.cloneBefore({prop:k,value:D});const e=i.clone();e.removeAll(),e.append(n.clone({prop:g,value:D})),e.append(n.clone({prop:k,value:C}));const r=a({name:"media",params:"(prefers-color-scheme: dark)",source:i.source});return r.append(e),void i.after(r)}return r?(n.cloneBefore({prop:g,value:D}),void n.cloneBefore({prop:k,value:C})):e?(n.cloneBefore({prop:g,value:C}),void n.cloneBefore({prop:k,value:D})):void 0}if(b.test(n.value)){if(t(n))return;if(s(n,b))return;const a=transformLightDark(n.value);if(a===n.value)return;if(o=!0,r||(r=n.source),n.cloneBefore({value:a}),n.variable&&n.parent){const e=c({selector:"& *",source:n.source});e.append(n.clone({value:a})),n.parent.append(e)}e?.preserve||n.remove()}}},OnceExit(e,{atRule:t,rule:s,decl:n}){if(!o||!r)return;const a=n({prop:g,value:C}),c=n({prop:k,value:D});a.source=r,c.source=r;{const o=s({selector:":root",source:r});o.append(a,c),e.append(o)}{const o=s({selector:":root",source:r});o.append(a.clone({value:D}),c.clone({value:C}));const n=t({name:"media",params:"(prefers-color-scheme: dark)",source:r});n.append(o),e.append(n)}}}}});basePlugin.postcss=!0;const postcssPlugin=r=>{const o=Object.assign({enableProgressiveCustomProperties:!0,preserve:!0},r);return o.enableProgressiveCustomProperties&&o.preserve?{postcssPlugin:"postcss-light-dark-function",plugins:[e(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import e from"@csstools/postcss-progressive-custom-properties";import{tokenize as r,TokenType as o}from"@csstools/css-tokenizer";import{hasFallback as t,hasSupportsAtRuleAncestor as s}from"@csstools/utilities";import{isFunctionNode as n,isWhitespaceNode as a,isCommentNode as c,isSimpleBlockNode as i,walk as l,isTokenNode as u,replaceComponentValues as p,parseCommaSeparatedListOfComponentValues as v,FunctionNode as f,TokenNode as m,WhitespaceNode as d,stringify as h}from"@csstools/css-parser-algorithms";const g="--csstools-color-scheme--light",k="--csstools-color-scheme--dark",C="initial",D=" ",w=/dark/i,L=/light/i;function colorSchemes(e){const t=r({css:e});let s=!1,n=!1;return t.forEach((e=>{e[0]===o.Ident&&(L.test(e[4].value)?s=!0:w.test(e[4].value)&&(n=!0))})),[s,n]}const P=/^light-dark$/i;function isComma(e){return u(e)&&e.value[0]===o.Comma}function parseLightDark(e){if(!n(e)||!P.test(e.getName()))return!1;const r=e.value.filter((e=>!a(e)&&!c(e)&&!i(e)));if(3!==r.length)return!1;let o=r[0];const t=r[1];let s=r[2];if(!o||!t||!s)return!1;if(!isComma(t))return!1;if(isComma(o)||isComma(s))return!1;if(n(o)){const e=[o];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,!0)})),[o]=e}if(n(s)){const e=[s];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,!1)})),[s]=e}return[o,s]}function recurseLightDark(e,r,o,t){if("number"!=typeof o)return;const s=parseLightDark(e);if(!s)return;let a=s[t?0:1];if(n(a)){const e=[a];l(e,(({node:e,parent:r},o)=>{recurseLightDark(e,r,o,t)})),[a]=e}r.value[o]=a}function transformLightDark(e){const t=p(v(r({css:e})),(e=>{const r=parseLightDark(e);if(!r)return;const[t,s]=r;return[new f([o.Function,"var(",-1,-1,{value:"var"}],[o.CloseParen,")",-1,-1,void 0],[new m([o.Ident,g,-1,-1,{value:g}]),new m([o.Comma,",",-1,-1,void 0]),new d([[o.Whitespace," ",-1,-1,void 0]]),t]),new d([[o.Whitespace," ",-1,-1,void 0]]),new f([o.Function,"var(",-1,-1,{value:"var"}],[o.CloseParen,")",-1,-1,void 0],[new m([o.Ident,k,-1,-1,{value:k}]),new m([o.Comma,",",-1,-1,void 0]),new d([[o.Whitespace," ",-1,-1,void 0]]),s])]}));return h(t)}const B=/^color-scheme$/i,b=/\blight-dark\(/i,basePlugin=e=>({postcssPlugin:"postcss-light-dark-function",prepare(){let r,o=!1;return{postcssPlugin:"postcss-light-dark-function",Declaration(n,{atRule:a,rule:c}){const i=n.parent;if(i){if(B.test(n.prop)){const[e,r]=colorSchemes(n.value);if(e&&r){n.cloneBefore({prop:g,value:C}),n.cloneBefore({prop:k,value:D});const e=i.clone();e.removeAll(),e.append(n.clone({prop:g,value:D})),e.append(n.clone({prop:k,value:C}));const r=a({name:"media",params:"(prefers-color-scheme: dark)",source:i.source});return r.append(e),void i.after(r)}return r?(n.cloneBefore({prop:g,value:D}),void n.cloneBefore({prop:k,value:C})):e?(n.cloneBefore({prop:g,value:C}),void n.cloneBefore({prop:k,value:D})):void 0}if(b.test(n.value)){if(t(n))return;if(s(n,b))return;const a=transformLightDark(n.value);if(a===n.value)return;if(o=!0,r||(r=n.source),n.cloneBefore({value:a}),n.variable&&n.parent){const e=c({selector:"& *",source:n.source});e.append(n.clone({value:a})),n.parent.append(e)}e?.preserve||n.remove()}}},OnceExit(e,{atRule:t,rule:s,decl:n}){if(!o||!r)return;const a=n({prop:g,value:C}),c=n({prop:k,value:D});a.source=r,c.source=r;{const o=s({selector:":root",source:r});o.append(a,c),e.append(o)}{const o=s({selector:":root",source:r});o.append(a.clone({value:D}),c.clone({value:C}));const n=t({name:"media",params:"(prefers-color-scheme: dark)",source:r});n.append(o),e.append(n)}}}}});basePlugin.postcss=!0;const postcssPlugin=r=>{const o=Object.assign({enableProgressiveCustomProperties:!0,preserve:!0},r);return o.enableProgressiveCustomProperties&&o.preserve?{postcssPlugin:"postcss-light-dark-function",plugins:[e(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-light-dark-function/src/index.ts b/plugins/postcss-light-dark-function/src/index.ts index b2182f784..f140e7f9c 100644 --- a/plugins/postcss-light-dark-function/src/index.ts +++ b/plugins/postcss-light-dark-function/src/index.ts @@ -1,5 +1,5 @@ import postcssProgressiveCustomProperties from '@csstools/postcss-progressive-custom-properties'; -import type { PluginCreator, Source } from 'postcss'; +import type { Plugin, PluginCreator, Source } from 'postcss'; import { DARK_PROP, LIGHT_PROP, OFF, ON } from './props'; import { colorSchemes } from './color-schemes'; import { hasFallback, hasSupportsAtRuleAncestor } from '@csstools/utilities'; @@ -11,12 +11,13 @@ const LIGHT_DARK_FUNCTION_REGEX = /\blight-dark\(/i; const basePlugin: PluginCreator = (opts) => { return { postcssPlugin: 'postcss-light-dark-function', - prepare() { + prepare(): Plugin { let didTransformValues = false; let transformedValueSource: Source | undefined = undefined; return { - Declaration(decl, { atRule, rule }) { + postcssPlugin: 'postcss-light-dark-function', + Declaration(decl, { atRule, rule }): void { const parent = decl.parent; if (!parent) { return; @@ -96,7 +97,7 @@ const basePlugin: PluginCreator = (opts) => { } } }, - OnceExit(root, { atRule, rule, decl }) { + OnceExit(root, { atRule, rule, decl }): void { if (!didTransformValues || !transformedValueSource) { return; } diff --git a/plugins/postcss-light-dark-function/src/parse-light-dark.ts b/plugins/postcss-light-dark-function/src/parse-light-dark.ts index a759eee1e..df4135725 100644 --- a/plugins/postcss-light-dark-function/src/parse-light-dark.ts +++ b/plugins/postcss-light-dark-function/src/parse-light-dark.ts @@ -64,7 +64,7 @@ export function parseLightDark(componentValue: ComponentValue): [ComponentValue, return [light, dark]; } -function recurseLightDark(node: ComponentValue, parent: { value: Array }, index: number | string, isLight: boolean) { +function recurseLightDark(node: ComponentValue, parent: { value: Array }, index: number | string, isLight: boolean): void { if (typeof index !== 'number') { return; } diff --git a/plugins/postcss-logical-float-and-clear/src/index.ts b/plugins/postcss-logical-float-and-clear/src/index.ts index 9b3f7cb24..380a28211 100644 --- a/plugins/postcss-logical-float-and-clear/src/index.ts +++ b/plugins/postcss-logical-float-and-clear/src/index.ts @@ -31,14 +31,14 @@ const creator: PluginCreator = (opts?: pluginOptions) => { if (!isHorizontal) { return { postcssPlugin: 'postcss-logical-float-and-clear', - Once() { + Once(): void { // noop }, }; } const [inlineStart, inlineEnd] = directionFlowToAxes(options.inlineDirection); - const makeTransform = (decl: Declaration) => { + const makeTransform = (decl: Declaration): void => { const value = decl.value.toLowerCase(); const possibleValues = [DirectionValues.InlineStart, DirectionValues.InlineEnd]; diff --git a/plugins/postcss-logical-overflow/src/lib/transform-axes.ts b/plugins/postcss-logical-overflow/src/lib/transform-axes.ts index b467cb61a..cf0f1a38a 100644 --- a/plugins/postcss-logical-overflow/src/lib/transform-axes.ts +++ b/plugins/postcss-logical-overflow/src/lib/transform-axes.ts @@ -1,6 +1,6 @@ import type { Declaration } from 'postcss'; -export function transformAxes(declaration: Declaration, isHorizontal: boolean) { +export function transformAxes(declaration: Declaration, isHorizontal: boolean): void { const inlineProp = isHorizontal ? '-x' : '-y'; const blockProp = isHorizontal ? '-y' : '-x'; const prop = declaration.prop.toLowerCase() diff --git a/plugins/postcss-logical-overscroll-behavior/src/lib/transform-axes.ts b/plugins/postcss-logical-overscroll-behavior/src/lib/transform-axes.ts index b467cb61a..cf0f1a38a 100644 --- a/plugins/postcss-logical-overscroll-behavior/src/lib/transform-axes.ts +++ b/plugins/postcss-logical-overscroll-behavior/src/lib/transform-axes.ts @@ -1,6 +1,6 @@ import type { Declaration } from 'postcss'; -export function transformAxes(declaration: Declaration, isHorizontal: boolean) { +export function transformAxes(declaration: Declaration, isHorizontal: boolean): void { const inlineProp = isHorizontal ? '-x' : '-y'; const blockProp = isHorizontal ? '-y' : '-x'; const prop = declaration.prop.toLowerCase() diff --git a/plugins/postcss-logical-viewport-units/src/index.ts b/plugins/postcss-logical-viewport-units/src/index.ts index 32d8420fc..66dfc5649 100644 --- a/plugins/postcss-logical-viewport-units/src/index.ts +++ b/plugins/postcss-logical-viewport-units/src/index.ts @@ -51,7 +51,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-logical-viewport-units', - Declaration(decl, { atRule }) { + Declaration(decl, { atRule }): void { { if (!HAS_VIEWPORT_UNITS_REGEX.test(decl.value)) { return; diff --git a/plugins/postcss-logical/src/index.ts b/plugins/postcss-logical/src/index.ts index aa18b7541..c90f31ad2 100644 --- a/plugins/postcss-logical/src/index.ts +++ b/plugins/postcss-logical/src/index.ts @@ -151,7 +151,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { 'border-start-end-radius': makeTransform(transforms['border-start-end-radius']), 'border-end-start-radius': makeTransform(transforms['border-end-start-radius']), 'border-end-end-radius': makeTransform(transforms['border-end-end-radius']), - 'transition': (decl, { result, postcss }) => { + 'transition': (decl, { result, postcss }): void => { let transformed: Array = []; try { diff --git a/plugins/postcss-media-minmax/dist/index.cjs b/plugins/postcss-media-minmax/dist/index.cjs index 1552173d7..b18cc666f 100644 --- a/plugins/postcss-media-minmax/dist/index.cjs +++ b/plugins/postcss-media-minmax/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/css-parser-algorithms"),i=require("@csstools/css-tokenizer"),n=require("@csstools/media-query-list-parser"),a=require("@csstools/css-calc");const t=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(t,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const r={width:"px",height:"px","device-width":"px","device-height":"px","aspect-ratio":"","device-aspect-ratio":"",color:"","color-index":"",monochrome:"",resolution:"dpi"},o={width:!1,height:!1,"device-width":!1,"device-height":!1,"aspect-ratio":!1,"device-aspect-ratio":!1,color:!0,"color-index":!0,monochrome:!0,resolution:"dpi"};function featureNamePrefix(e){return e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?"max-":e===n.MediaFeatureGT.GT||e===n.MediaFeatureGT.GT_OR_EQ?"min-":""}const s={">":1,"<":-1},u=.001,d=.02;function transformSingleNameValuePair(t,l,c,p){let T=c.before,m=c.after;if(p||(T=c.after,m=c.before),!p){const e=n.invertComparison(l);if(!1===e)return;l=e}if(l===n.MediaFeatureEQ.EQ||l===n.MediaFeatureLT.LT_OR_EQ||l===n.MediaFeatureGT.GT_OR_EQ)return Array.isArray(c.value)?n.newMediaFeaturePlain(featureNamePrefix(l)+t,...T,...c.value.flatMap((e=>e.tokens())),...m):n.newMediaFeaturePlain(featureNamePrefix(l)+t,...T,...c.value.tokens(),...m);let f,v,y=!1;if(Array.isArray(c.value)){if(!n.matchesRatioExactly(c.value))return;if("aspect-ratio"!==t&&"device-aspect-ratio"!==t)return;const e=n.matchesRatio(c.value);if(-1===e)return;y=!0,f=c.value[e[0]],v=[...c.value.slice(e[0]+1).flatMap((e=>e.tokens()))]}else f=c.value,v=[];const h=r[t.toLowerCase()];if(e.isFunctionNode(f)){const r=toLowerCaseAZ(f.getName());if(a.mathFunctionNames.has(r)||"env"===r){const[[r]]=a.calcFromComponentValues([[f]],{precision:5,toCanonicalUnits:!0});if(!r||!e.isTokenNode(r)||r.value[0]!==i.TokenType.Number&&r.value[0]!==i.TokenType.Percentage&&r.value[0]!==i.TokenType.Dimension||!Number.isInteger(r.value[4].value)){let e;if(void 0!==h){const n=s[l]*("px"===h?d:u);e=[i.TokenType.Dimension,`${n.toString()}${h}`,-1,-1,{value:n,unit:h,type:i.NumberType.Integer}]}else if(!0===o[t]){const n=s[l];e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}else if(y){const n=s[l]*u;e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}else{const n=s[l];e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}return n.newMediaFeaturePlain(featureNamePrefix(l)+t,...T,[i.TokenType.Function,"calc(",-1,-1,{value:"calc("}],[i.TokenType.OpenParen,"(",-1,-1,void 0],...f.tokens().slice(1),[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Delim,"+",-1,-1,{value:"+"}],[i.TokenType.Whitespace," ",-1,-1,void 0],e,[i.TokenType.CloseParen,")",-1,-1,void 0],...v,...m)}f=r}}if(!e.isTokenNode(f))return;let g,k=f.value,M="";if(void 0!==h&&k[0]===i.TokenType.Number&&0===k[4].value)g=s[l],M=h;else if(k[0]===i.TokenType.Number&&0===k[4].value)g=s[l],M="";else if(k[0]===i.TokenType.Dimension&&0===k[4].value)g=s[l],M=k[4].unit;else if(k[0]===i.TokenType.Number&&!0===o[t])g=k[4].value+s[l];else if(k[0]===i.TokenType.Dimension&&"px"===k[4].unit&&k[4].type===i.NumberType.Integer)g=Number(Math.round(Number(k[4].value+d*s[l]+"e6"))+"e-6");else{if(k[0]!==i.TokenType.Dimension&&k[0]!==i.TokenType.Number)return;g=Number(Math.round(Number(k[4].value+u*s[l]+"e6"))+"e-6")}return M&&(k=[i.TokenType.Dimension,k[1],k[2],k[3],{value:k[4].value,unit:M,type:k[4].type}]),k[4].value=g,k[0]===i.TokenType.Dimension?k[1]=k[4].value.toString()+k[4].unit:k[1]=k[4].value.toString(),n.newMediaFeaturePlain(featureNamePrefix(l)+t,...T,k,...v,...m)}const l=new Set(["aspect-ratio","color","color-index","device-aspect-ratio","device-height","device-width","height","horizontal-viewport-segments","monochrome","resolution","vertical-viewport-segments","width"]);function transform(a){return a.map(((a,t)=>{const r=e.gatherNodeAncestry(a);a.walk((e=>{const t=e.node;if(!n.isMediaFeatureRange(t))return;const o=e.parent;if(!n.isMediaFeature(o))return;const s=toLowerCaseAZ(t.name.getName());if(!l.has(s))return;if(n.isMediaFeatureRangeNameValue(t)||n.isMediaFeatureRangeValueName(t)){const e=t.operatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.value,n.isMediaFeatureRangeNameValue(t));return void(i&&(o.feature=i.feature))}const u=r.get(o);if(!n.isMediaInParens(u))return;let d=null,c=null;{const e=t.valueOneOperatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.valueOne,!1);if(!i)return;e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?(d=i,d.before=o.before):(c=i,c.after=o.after)}{const e=t.valueTwoOperatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.valueTwo,!0);if(!i)return;e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?(c=i,c.before=o.before):(d=i,d.after=o.after)}if(!d||!c)return;const p=new n.MediaInParens(d),T=new n.MediaInParens(c),m=getMediaConditionListWithAndFromAncestry(u,r);if(m)return m.leading===u?(m.leading=p,void(m.list=[new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T),...m.list])):void m.list.splice(m.indexOf(r.get(u)),1,new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],p),new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T));const f=new n.MediaConditionListWithAnd(p,[new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T)],[[i.TokenType.Whitespace," ",-1,-1,void 0]]),v=getMediaConditionInShallowMediaQueryFromAncestry(u,a,r);v?v.media=f:u.media=new n.MediaCondition(new n.MediaInParens(new n.MediaCondition(f),[[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.OpenParen,"(",-1,-1,void 0]],[[i.TokenType.CloseParen,")",-1,-1,void 0]]))}));const o=a.tokens();return i.stringify(...o.filter(((e,n)=>(0!==n||0!==t||e[0]!==i.TokenType.Whitespace)&&(e[0]!==i.TokenType.Whitespace||!o[n+1]||o[n+1][0]!==i.TokenType.Whitespace))))})).join(",")}function getMediaConditionListWithAndFromAncestry(e,i){let a=e;if(a){if(a=i.get(a),n.isMediaConditionListWithAnd(a))return a;if(n.isMediaAnd(a))return a=i.get(a),n.isMediaConditionListWithAnd(a)?a:void 0}}function getMediaConditionInShallowMediaQueryFromAncestry(e,i,a){let t=e;if(!t)return;if(t=a.get(t),!n.isMediaCondition(t))return;const r=t;return t=a.get(t),n.isMediaQuery(t)&&t===i?r:void 0}const creator=()=>({postcssPlugin:"postcss-media-minmax",AtRule:{media:e=>{if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const i=transform(n.parse(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}}));e.params!==i&&(e.params=i)},"custom-media":e=>{if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const a=n.parseCustomMedia(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}});if(!a||!a.mediaQueryList)return;const t=a.mediaQueryList.map((e=>e.toString())).join(","),r=transform(a.mediaQueryList);t!==r&&(e.params=`${i.stringify(...a.name)} ${r}`)}}});creator.postcss=!0,module.exports=creator; +"use strict";var e=require("@csstools/css-parser-algorithms"),i=require("@csstools/css-tokenizer"),n=require("@csstools/media-query-list-parser"),a=require("@csstools/css-calc");const t={width:"px",height:"px","device-width":"px","device-height":"px","aspect-ratio":"","device-aspect-ratio":"",color:"","color-index":"",monochrome:"",resolution:"dpi"},r={width:!1,height:!1,"device-width":!1,"device-height":!1,"aspect-ratio":!1,"device-aspect-ratio":!1,color:!0,"color-index":!0,monochrome:!0,resolution:"dpi"};function featureNamePrefix(e){return e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?"max-":e===n.MediaFeatureGT.GT||e===n.MediaFeatureGT.GT_OR_EQ?"min-":""}const o={">":1,"<":-1},s=.001,u=.02;function transformSingleNameValuePair(d,l,p,c){let T=p.before,m=p.after;if(c||(T=p.after,m=p.before),!c){const e=n.invertComparison(l);if(!1===e)return;l=e}if(l===n.MediaFeatureEQ.EQ||l===n.MediaFeatureLT.LT_OR_EQ||l===n.MediaFeatureGT.GT_OR_EQ)return Array.isArray(p.value)?n.newMediaFeaturePlain(featureNamePrefix(l)+d,...T,...p.value.flatMap((e=>e.tokens())),...m):n.newMediaFeaturePlain(featureNamePrefix(l)+d,...T,...p.value.tokens(),...m);let v,f,y=!1;if(Array.isArray(p.value)){if(!n.matchesRatioExactly(p.value))return;if("aspect-ratio"!==d&&"device-aspect-ratio"!==d)return;const e=n.matchesRatio(p.value);if(-1===e)return;y=!0,v=p.value[e[0]],f=[...p.value.slice(e[0]+1).flatMap((e=>e.tokens()))]}else v=p.value,f=[];const h=t[d.toLowerCase()];if(e.isFunctionNode(v)){const t=v.getName().toLowerCase();if(a.mathFunctionNames.has(t)||"env"===t){const[[t]]=a.calcFromComponentValues([[v]],{precision:5,toCanonicalUnits:!0});if(!t||!e.isTokenNode(t)||t.value[0]!==i.TokenType.Number&&t.value[0]!==i.TokenType.Percentage&&t.value[0]!==i.TokenType.Dimension||!Number.isInteger(t.value[4].value)){let e;if(void 0!==h){const n=o[l]*("px"===h?u:s);e=[i.TokenType.Dimension,`${n.toString()}${h}`,-1,-1,{value:n,unit:h,type:i.NumberType.Integer}]}else if(!0===r[d]){const n=o[l];e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}else if(y){const n=o[l]*s;e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}else{const n=o[l];e=[i.TokenType.Number,n.toString(),-1,-1,{value:n,type:i.NumberType.Integer}]}return n.newMediaFeaturePlain(featureNamePrefix(l)+d,...T,[i.TokenType.Function,"calc(",-1,-1,{value:"calc("}],[i.TokenType.OpenParen,"(",-1,-1,void 0],...v.tokens().slice(1),[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Delim,"+",-1,-1,{value:"+"}],[i.TokenType.Whitespace," ",-1,-1,void 0],e,[i.TokenType.CloseParen,")",-1,-1,void 0],...f,...m)}v=t}}if(!e.isTokenNode(v))return;let k,g=v.value,M="";if(void 0!==h&&g[0]===i.TokenType.Number&&0===g[4].value)k=o[l],M=h;else if(g[0]===i.TokenType.Number&&0===g[4].value)k=o[l],M="";else if(g[0]===i.TokenType.Dimension&&0===g[4].value)k=o[l],M=g[4].unit;else if(g[0]===i.TokenType.Number&&!0===r[d])k=g[4].value+o[l];else if(g[0]===i.TokenType.Dimension&&"px"===g[4].unit&&g[4].type===i.NumberType.Integer)k=Number(Math.round(Number(g[4].value+u*o[l]+"e6"))+"e-6");else{if(g[0]!==i.TokenType.Dimension&&g[0]!==i.TokenType.Number)return;k=Number(Math.round(Number(g[4].value+s*o[l]+"e6"))+"e-6")}return M&&(g=[i.TokenType.Dimension,g[1],g[2],g[3],{value:g[4].value,unit:M,type:g[4].type}]),g[4].value=k,g[0]===i.TokenType.Dimension?g[1]=g[4].value.toString()+g[4].unit:g[1]=g[4].value.toString(),n.newMediaFeaturePlain(featureNamePrefix(l)+d,...T,g,...f,...m)}const d=new Set(["aspect-ratio","color","color-index","device-aspect-ratio","device-height","device-width","height","horizontal-viewport-segments","monochrome","resolution","vertical-viewport-segments","width"]);function transform(a){return a.map(((a,t)=>{const r=e.gatherNodeAncestry(a);a.walk((e=>{const t=e.node;if(!n.isMediaFeatureRange(t))return;const o=e.parent;if(!n.isMediaFeature(o))return;const s=t.name.getName().toLowerCase();if(!d.has(s))return;if(n.isMediaFeatureRangeNameValue(t)||n.isMediaFeatureRangeValueName(t)){const e=t.operatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.value,n.isMediaFeatureRangeNameValue(t));return void(i&&(o.feature=i.feature))}const u=r.get(o);if(!n.isMediaInParens(u))return;let l=null,p=null;{const e=t.valueOneOperatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.valueOne,!1);if(!i)return;e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?(l=i,l.before=o.before):(p=i,p.after=o.after)}{const e=t.valueTwoOperatorKind();if(!1===e)return;const i=transformSingleNameValuePair(s,e,t.valueTwo,!0);if(!i)return;e===n.MediaFeatureLT.LT||e===n.MediaFeatureLT.LT_OR_EQ?(p=i,p.before=o.before):(l=i,l.after=o.after)}if(!l||!p)return;const c=new n.MediaInParens(l),T=new n.MediaInParens(p),m=getMediaConditionListWithAndFromAncestry(u,r);if(m)return m.leading===u?(m.leading=c,void(m.list=[new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T),...m.list])):void m.list.splice(m.indexOf(r.get(u)),1,new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],c),new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T));const v=new n.MediaConditionListWithAnd(c,[new n.MediaAnd([[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.Ident,"and",-1,-1,{value:"and"}],[i.TokenType.Whitespace," ",-1,-1,void 0]],T)],[[i.TokenType.Whitespace," ",-1,-1,void 0]]),f=getMediaConditionInShallowMediaQueryFromAncestry(u,a,r);f?f.media=v:u.media=new n.MediaCondition(new n.MediaInParens(new n.MediaCondition(v),[[i.TokenType.Whitespace," ",-1,-1,void 0],[i.TokenType.OpenParen,"(",-1,-1,void 0]],[[i.TokenType.CloseParen,")",-1,-1,void 0]]))}));const o=a.tokens();return i.stringify(...o.filter(((e,n)=>(0!==n||0!==t||e[0]!==i.TokenType.Whitespace)&&(e[0]!==i.TokenType.Whitespace||!o[n+1]||o[n+1][0]!==i.TokenType.Whitespace))))})).join(",")}function getMediaConditionListWithAndFromAncestry(e,i){let a=e;if(a){if(a=i.get(a),n.isMediaConditionListWithAnd(a))return a;if(n.isMediaAnd(a))return a=i.get(a),n.isMediaConditionListWithAnd(a)?a:void 0}}function getMediaConditionInShallowMediaQueryFromAncestry(e,i,a){let t=e;if(!t)return;if(t=a.get(t),!n.isMediaCondition(t))return;const r=t;return t=a.get(t),n.isMediaQuery(t)&&t===i?r:void 0}const creator=()=>({postcssPlugin:"postcss-media-minmax",AtRule:{media(e){if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const i=transform(n.parse(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}}));e.params!==i&&(e.params=i)},"custom-media"(e){if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const a=n.parseCustomMedia(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}});if(!a||!a.mediaQueryList)return;const t=a.mediaQueryList.map((e=>e.toString())).join(","),r=transform(a.mediaQueryList);t!==r&&(e.params=`${i.stringify(...a.name)} ${r}`)}}});creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-media-minmax/dist/index.mjs b/plugins/postcss-media-minmax/dist/index.mjs index 1d4c7bf27..638fbfeca 100644 --- a/plugins/postcss-media-minmax/dist/index.mjs +++ b/plugins/postcss-media-minmax/dist/index.mjs @@ -1 +1 @@ -import{isFunctionNode as e,isTokenNode as t,gatherNodeAncestry as r}from"@csstools/css-parser-algorithms";import{TokenType as i,NumberType as n,stringify as a}from"@csstools/css-tokenizer";import{invertComparison as o,MediaFeatureEQ as s,MediaFeatureLT as u,MediaFeatureGT as l,newMediaFeaturePlain as c,matchesRatioExactly as d,matchesRatio as m,isMediaFeatureRange as f,isMediaFeature as v,isMediaFeatureRangeNameValue as p,isMediaFeatureRangeValueName as h,isMediaInParens as g,MediaInParens as w,MediaAnd as N,MediaConditionListWithAnd as y,MediaCondition as b,isMediaConditionListWithAnd as x,isMediaAnd as P,isMediaCondition as W,isMediaQuery as A,parse as L,parseCustomMedia as S}from"@csstools/media-query-list-parser";import{mathFunctionNames as C,calcFromComponentValues as I}from"@csstools/css-calc";const Q=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(Q,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}const O={width:"px",height:"px","device-width":"px","device-height":"px","aspect-ratio":"","device-aspect-ratio":"",color:"","color-index":"",monochrome:"",resolution:"dpi"},M={width:!1,height:!1,"device-width":!1,"device-height":!1,"aspect-ratio":!1,"device-aspect-ratio":!1,color:!0,"color-index":!0,monochrome:!0,resolution:"dpi"};function featureNamePrefix(e){return e===u.LT||e===u.LT_OR_EQ?"max-":e===l.GT||e===l.GT_OR_EQ?"min-":""}const T={">":1,"<":-1},_=.001,E=.02;function transformSingleNameValuePair(r,a,f,v){let p=f.before,h=f.after;if(v||(p=f.after,h=f.before),!v){const e=o(a);if(!1===e)return;a=e}if(a===s.EQ||a===u.LT_OR_EQ||a===l.GT_OR_EQ)return Array.isArray(f.value)?c(featureNamePrefix(a)+r,...p,...f.value.flatMap((e=>e.tokens())),...h):c(featureNamePrefix(a)+r,...p,...f.value.tokens(),...h);let g,w,N=!1;if(Array.isArray(f.value)){if(!d(f.value))return;if("aspect-ratio"!==r&&"device-aspect-ratio"!==r)return;const e=m(f.value);if(-1===e)return;N=!0,g=f.value[e[0]],w=[...f.value.slice(e[0]+1).flatMap((e=>e.tokens()))]}else g=f.value,w=[];const y=O[r.toLowerCase()];if(e(g)){const e=toLowerCaseAZ(g.getName());if(C.has(e)||"env"===e){const[[e]]=I([[g]],{precision:5,toCanonicalUnits:!0});if(!e||!t(e)||e.value[0]!==i.Number&&e.value[0]!==i.Percentage&&e.value[0]!==i.Dimension||!Number.isInteger(e.value[4].value)){let e;if(void 0!==y){const t=T[a]*("px"===y?E:_);e=[i.Dimension,`${t.toString()}${y}`,-1,-1,{value:t,unit:y,type:n.Integer}]}else if(!0===M[r]){const t=T[a];e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}else if(N){const t=T[a]*_;e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}else{const t=T[a];e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}return c(featureNamePrefix(a)+r,...p,[i.Function,"calc(",-1,-1,{value:"calc("}],[i.OpenParen,"(",-1,-1,void 0],...g.tokens().slice(1),[i.Whitespace," ",-1,-1,void 0],[i.Delim,"+",-1,-1,{value:"+"}],[i.Whitespace," ",-1,-1,void 0],e,[i.CloseParen,")",-1,-1,void 0],...w,...h)}g=e}}if(!t(g))return;let b,x=g.value,P="";if(void 0!==y&&x[0]===i.Number&&0===x[4].value)b=T[a],P=y;else if(x[0]===i.Number&&0===x[4].value)b=T[a],P="";else if(x[0]===i.Dimension&&0===x[4].value)b=T[a],P=x[4].unit;else if(x[0]===i.Number&&!0===M[r])b=x[4].value+T[a];else if(x[0]===i.Dimension&&"px"===x[4].unit&&x[4].type===n.Integer)b=Number(Math.round(Number(x[4].value+E*T[a]+"e6"))+"e-6");else{if(x[0]!==i.Dimension&&x[0]!==i.Number)return;b=Number(Math.round(Number(x[4].value+_*T[a]+"e6"))+"e-6")}return P&&(x=[i.Dimension,x[1],x[2],x[3],{value:x[4].value,unit:P,type:x[4].type}]),x[4].value=b,x[0]===i.Dimension?x[1]=x[4].value.toString()+x[4].unit:x[1]=x[4].value.toString(),c(featureNamePrefix(a)+r,...p,x,...w,...h)}const D=new Set(["aspect-ratio","color","color-index","device-aspect-ratio","device-height","device-width","height","horizontal-viewport-segments","monochrome","resolution","vertical-viewport-segments","width"]);function transform(e){return e.map(((e,t)=>{const n=r(e);e.walk((t=>{const r=t.node;if(!f(r))return;const a=t.parent;if(!v(a))return;const o=toLowerCaseAZ(r.name.getName());if(!D.has(o))return;if(p(r)||h(r)){const e=r.operatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.value,p(r));return void(t&&(a.feature=t.feature))}const s=n.get(a);if(!g(s))return;let l=null,c=null;{const e=r.valueOneOperatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.valueOne,!1);if(!t)return;e===u.LT||e===u.LT_OR_EQ?(l=t,l.before=a.before):(c=t,c.after=a.after)}{const e=r.valueTwoOperatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.valueTwo,!0);if(!t)return;e===u.LT||e===u.LT_OR_EQ?(c=t,c.before=a.before):(l=t,l.after=a.after)}if(!l||!c)return;const d=new w(l),m=new w(c),x=getMediaConditionListWithAndFromAncestry(s,n);if(x)return x.leading===s?(x.leading=d,void(x.list=[new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m),...x.list])):void x.list.splice(x.indexOf(n.get(s)),1,new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],d),new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m));const P=new y(d,[new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m)],[[i.Whitespace," ",-1,-1,void 0]]),W=getMediaConditionInShallowMediaQueryFromAncestry(s,e,n);W?W.media=P:s.media=new b(new w(new b(P),[[i.Whitespace," ",-1,-1,void 0],[i.OpenParen,"(",-1,-1,void 0]],[[i.CloseParen,")",-1,-1,void 0]]))}));const o=e.tokens();return a(...o.filter(((e,r)=>(0!==r||0!==t||e[0]!==i.Whitespace)&&(e[0]!==i.Whitespace||!o[r+1]||o[r+1][0]!==i.Whitespace))))})).join(",")}function getMediaConditionListWithAndFromAncestry(e,t){let r=e;if(r){if(r=t.get(r),x(r))return r;if(P(r))return r=t.get(r),x(r)?r:void 0}}function getMediaConditionInShallowMediaQueryFromAncestry(e,t,r){let i=e;if(!i)return;if(i=r.get(i),!W(i))return;const n=i;return i=r.get(i),A(i)&&i===t?n:void 0}const creator=()=>({postcssPlugin:"postcss-media-minmax",AtRule:{media:e=>{if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const t=transform(L(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}}));e.params!==t&&(e.params=t)},"custom-media":e=>{if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const t=S(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}});if(!t||!t.mediaQueryList)return;const r=t.mediaQueryList.map((e=>e.toString())).join(","),i=transform(t.mediaQueryList);r!==i&&(e.params=`${a(...t.name)} ${i}`)}}});creator.postcss=!0;export{creator as default}; +import{isFunctionNode as e,isTokenNode as t,gatherNodeAncestry as r}from"@csstools/css-parser-algorithms";import{TokenType as i,NumberType as n,stringify as a}from"@csstools/css-tokenizer";import{invertComparison as o,MediaFeatureEQ as s,MediaFeatureLT as u,MediaFeatureGT as l,newMediaFeaturePlain as c,matchesRatioExactly as d,matchesRatio as m,isMediaFeatureRange as f,isMediaFeature as v,isMediaFeatureRangeNameValue as p,isMediaFeatureRangeValueName as h,isMediaInParens as g,MediaInParens as w,MediaAnd as N,MediaConditionListWithAnd as y,MediaCondition as b,isMediaConditionListWithAnd as x,isMediaAnd as P,isMediaCondition as W,isMediaQuery as L,parse as I,parseCustomMedia as Q}from"@csstools/media-query-list-parser";import{mathFunctionNames as S,calcFromComponentValues as O}from"@csstools/css-calc";const M={width:"px",height:"px","device-width":"px","device-height":"px","aspect-ratio":"","device-aspect-ratio":"",color:"","color-index":"",monochrome:"",resolution:"dpi"},T={width:!1,height:!1,"device-width":!1,"device-height":!1,"aspect-ratio":!1,"device-aspect-ratio":!1,color:!0,"color-index":!0,monochrome:!0,resolution:"dpi"};function featureNamePrefix(e){return e===u.LT||e===u.LT_OR_EQ?"max-":e===l.GT||e===l.GT_OR_EQ?"min-":""}const _={">":1,"<":-1},A=.001,C=.02;function transformSingleNameValuePair(r,a,f,v){let p=f.before,h=f.after;if(v||(p=f.after,h=f.before),!v){const e=o(a);if(!1===e)return;a=e}if(a===s.EQ||a===u.LT_OR_EQ||a===l.GT_OR_EQ)return Array.isArray(f.value)?c(featureNamePrefix(a)+r,...p,...f.value.flatMap((e=>e.tokens())),...h):c(featureNamePrefix(a)+r,...p,...f.value.tokens(),...h);let g,w,N=!1;if(Array.isArray(f.value)){if(!d(f.value))return;if("aspect-ratio"!==r&&"device-aspect-ratio"!==r)return;const e=m(f.value);if(-1===e)return;N=!0,g=f.value[e[0]],w=[...f.value.slice(e[0]+1).flatMap((e=>e.tokens()))]}else g=f.value,w=[];const y=M[r.toLowerCase()];if(e(g)){const e=g.getName().toLowerCase();if(S.has(e)||"env"===e){const[[e]]=O([[g]],{precision:5,toCanonicalUnits:!0});if(!e||!t(e)||e.value[0]!==i.Number&&e.value[0]!==i.Percentage&&e.value[0]!==i.Dimension||!Number.isInteger(e.value[4].value)){let e;if(void 0!==y){const t=_[a]*("px"===y?C:A);e=[i.Dimension,`${t.toString()}${y}`,-1,-1,{value:t,unit:y,type:n.Integer}]}else if(!0===T[r]){const t=_[a];e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}else if(N){const t=_[a]*A;e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}else{const t=_[a];e=[i.Number,t.toString(),-1,-1,{value:t,type:n.Integer}]}return c(featureNamePrefix(a)+r,...p,[i.Function,"calc(",-1,-1,{value:"calc("}],[i.OpenParen,"(",-1,-1,void 0],...g.tokens().slice(1),[i.Whitespace," ",-1,-1,void 0],[i.Delim,"+",-1,-1,{value:"+"}],[i.Whitespace," ",-1,-1,void 0],e,[i.CloseParen,")",-1,-1,void 0],...w,...h)}g=e}}if(!t(g))return;let b,x=g.value,P="";if(void 0!==y&&x[0]===i.Number&&0===x[4].value)b=_[a],P=y;else if(x[0]===i.Number&&0===x[4].value)b=_[a],P="";else if(x[0]===i.Dimension&&0===x[4].value)b=_[a],P=x[4].unit;else if(x[0]===i.Number&&!0===T[r])b=x[4].value+_[a];else if(x[0]===i.Dimension&&"px"===x[4].unit&&x[4].type===n.Integer)b=Number(Math.round(Number(x[4].value+C*_[a]+"e6"))+"e-6");else{if(x[0]!==i.Dimension&&x[0]!==i.Number)return;b=Number(Math.round(Number(x[4].value+A*_[a]+"e6"))+"e-6")}return P&&(x=[i.Dimension,x[1],x[2],x[3],{value:x[4].value,unit:P,type:x[4].type}]),x[4].value=b,x[0]===i.Dimension?x[1]=x[4].value.toString()+x[4].unit:x[1]=x[4].value.toString(),c(featureNamePrefix(a)+r,...p,x,...w,...h)}const E=new Set(["aspect-ratio","color","color-index","device-aspect-ratio","device-height","device-width","height","horizontal-viewport-segments","monochrome","resolution","vertical-viewport-segments","width"]);function transform(e){return e.map(((e,t)=>{const n=r(e);e.walk((t=>{const r=t.node;if(!f(r))return;const a=t.parent;if(!v(a))return;const o=r.name.getName().toLowerCase();if(!E.has(o))return;if(p(r)||h(r)){const e=r.operatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.value,p(r));return void(t&&(a.feature=t.feature))}const s=n.get(a);if(!g(s))return;let l=null,c=null;{const e=r.valueOneOperatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.valueOne,!1);if(!t)return;e===u.LT||e===u.LT_OR_EQ?(l=t,l.before=a.before):(c=t,c.after=a.after)}{const e=r.valueTwoOperatorKind();if(!1===e)return;const t=transformSingleNameValuePair(o,e,r.valueTwo,!0);if(!t)return;e===u.LT||e===u.LT_OR_EQ?(c=t,c.before=a.before):(l=t,l.after=a.after)}if(!l||!c)return;const d=new w(l),m=new w(c),x=getMediaConditionListWithAndFromAncestry(s,n);if(x)return x.leading===s?(x.leading=d,void(x.list=[new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m),...x.list])):void x.list.splice(x.indexOf(n.get(s)),1,new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],d),new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m));const P=new y(d,[new N([[i.Whitespace," ",-1,-1,void 0],[i.Ident,"and",-1,-1,{value:"and"}],[i.Whitespace," ",-1,-1,void 0]],m)],[[i.Whitespace," ",-1,-1,void 0]]),W=getMediaConditionInShallowMediaQueryFromAncestry(s,e,n);W?W.media=P:s.media=new b(new w(new b(P),[[i.Whitespace," ",-1,-1,void 0],[i.OpenParen,"(",-1,-1,void 0]],[[i.CloseParen,")",-1,-1,void 0]]))}));const o=e.tokens();return a(...o.filter(((e,r)=>(0!==r||0!==t||e[0]!==i.Whitespace)&&(e[0]!==i.Whitespace||!o[r+1]||o[r+1][0]!==i.Whitespace))))})).join(",")}function getMediaConditionListWithAndFromAncestry(e,t){let r=e;if(r){if(r=t.get(r),x(r))return r;if(P(r))return r=t.get(r),x(r)?r:void 0}}function getMediaConditionInShallowMediaQueryFromAncestry(e,t,r){let i=e;if(!i)return;if(i=r.get(i),!W(i))return;const n=i;return i=r.get(i),L(i)&&i===t?n:void 0}const creator=()=>({postcssPlugin:"postcss-media-minmax",AtRule:{media(e){if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const t=transform(I(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}}));e.params!==t&&(e.params=t)},"custom-media"(e){if(!(e.params.includes("<")||e.params.includes(">")||e.params.includes("=")))return;const t=Q(e.params,{preserveInvalidMediaQueries:!0,onParseError:()=>{throw e.error(`Unable to parse media query "${e.params}"`)}});if(!t||!t.mediaQueryList)return;const r=t.mediaQueryList.map((e=>e.toString())).join(","),i=transform(t.mediaQueryList);r!==i&&(e.params=`${a(...t.name)} ${i}`)}}});creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-media-minmax/src/index.ts b/plugins/postcss-media-minmax/src/index.ts index e7b2bbd1b..4aa533fee 100644 --- a/plugins/postcss-media-minmax/src/index.ts +++ b/plugins/postcss-media-minmax/src/index.ts @@ -10,7 +10,7 @@ const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-media-minmax', AtRule: { - media: (atRule) => { + media(atRule): void { if (!(atRule.params.includes('<') || atRule.params.includes('>') || atRule.params.includes('='))) { return; } @@ -29,7 +29,7 @@ const creator: PluginCreator = () => { atRule.params = transformed; }, - 'custom-media': (atRule) => { + 'custom-media'(atRule): void { if (!(atRule.params.includes('<') || atRule.params.includes('>') || atRule.params.includes('='))) { return; } diff --git a/plugins/postcss-media-minmax/src/to-lower-case-a-z.ts b/plugins/postcss-media-minmax/src/to-lower-case-a-z.ts deleted file mode 100644 index ec9cff610..000000000 --- a/plugins/postcss-media-minmax/src/to-lower-case-a-z.ts +++ /dev/null @@ -1,4 +0,0 @@ -const toLowerCaseAZRegex = /[A-Z]/g; -export function toLowerCaseAZ(x: string): string { - return x.replace(toLowerCaseAZRegex, (c) => String.fromCharCode(c.charCodeAt(0) + 32)); -} diff --git a/plugins/postcss-media-minmax/src/transform-single-pair.ts b/plugins/postcss-media-minmax/src/transform-single-pair.ts index b4cbb1562..f950affad 100644 --- a/plugins/postcss-media-minmax/src/transform-single-pair.ts +++ b/plugins/postcss-media-minmax/src/transform-single-pair.ts @@ -2,7 +2,6 @@ import { calcFromComponentValues, mathFunctionNames } from '@csstools/css-calc'; import { ComponentValue, isFunctionNode, isTokenNode } from '@csstools/css-parser-algorithms'; import { CSSToken, NumberType, TokenType } from '@csstools/css-tokenizer'; import { invertComparison, matchesRatio, matchesRatioExactly, MediaFeature, MediaFeatureComparison, MediaFeatureEQ, MediaFeatureGT, MediaFeatureLT, MediaFeatureValue, newMediaFeaturePlain } from '@csstools/media-query-list-parser'; -import { toLowerCaseAZ } from './to-lower-case-a-z'; const unitsForFeature: Record = { 'width': 'px', @@ -30,7 +29,7 @@ const integerFeatures: Record = { 'resolution': 'dpi', }; -function featureNamePrefix(operator: MediaFeatureComparison) { +function featureNamePrefix(operator: MediaFeatureComparison): 'max-' | 'min-' | '' { if (operator === MediaFeatureLT.LT || operator === MediaFeatureLT.LT_OR_EQ) { return 'max-'; } @@ -117,7 +116,7 @@ export function transformSingleNameValuePair(name: string, operator: MediaFeatur // 1. If the value is a calc() function, try to evaluate it. if (isFunctionNode(valueNode)) { - const functionName = toLowerCaseAZ(valueNode.getName()); + const functionName = valueNode.getName().toLowerCase(); if (mathFunctionNames.has(functionName) || functionName === 'env') { const [[result]] = calcFromComponentValues([[valueNode]], { precision: 5, toCanonicalUnits: true }); if ( diff --git a/plugins/postcss-media-minmax/src/transform.ts b/plugins/postcss-media-minmax/src/transform.ts index 7555010ed..90af5dbde 100644 --- a/plugins/postcss-media-minmax/src/transform.ts +++ b/plugins/postcss-media-minmax/src/transform.ts @@ -1,7 +1,6 @@ import { gatherNodeAncestry } from '@csstools/css-parser-algorithms'; import { stringify, TokenType } from '@csstools/css-tokenizer'; import { isMediaAnd, isMediaCondition, isMediaConditionListWithAnd, isMediaFeature, isMediaFeatureRange, isMediaFeatureRangeNameValue, isMediaFeatureRangeValueName, isMediaInParens, isMediaQuery, MediaAnd, MediaCondition, MediaConditionListWithAnd, MediaFeature, MediaInParens, MediaQuery, MediaFeatureLT } from '@csstools/media-query-list-parser'; -import { toLowerCaseAZ } from './to-lower-case-a-z'; import { transformSingleNameValuePair } from './transform-single-pair'; const supportedFeatureNames = new Set([ @@ -19,7 +18,7 @@ const supportedFeatureNames = new Set([ 'width', ]); -export function transform(mediaQueries: Array) { +export function transform(mediaQueries: Array): string { return mediaQueries.map((mediaQuery, mediaQueryIndex) => { const ancestry = gatherNodeAncestry(mediaQuery); @@ -34,7 +33,7 @@ export function transform(mediaQueries: Array) { return; } - const name = toLowerCaseAZ(node.name.getName()); + const name = node.name.getName().toLowerCase(); if (!supportedFeatureNames.has(name)) { return; } diff --git a/plugins/postcss-media-queries-aspect-ratio-number-values/src/index.ts b/plugins/postcss-media-queries-aspect-ratio-number-values/src/index.ts index 4d5f030aa..aaf00d528 100644 --- a/plugins/postcss-media-queries-aspect-ratio-number-values/src/index.ts +++ b/plugins/postcss-media-queries-aspect-ratio-number-values/src/index.ts @@ -19,7 +19,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-media-queries-aspect-ratio-number-values', - AtRule(atRule, { result }) { + AtRule(atRule, { result }): void { if (atRule.name.toLowerCase() !== 'media') { return; } diff --git a/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-feature-value.ts b/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-feature-value.ts index a1ff695b7..fe1247493 100644 --- a/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-feature-value.ts +++ b/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-feature-value.ts @@ -5,7 +5,7 @@ import { matchesRatioExactly, MediaFeatureValue } from '@csstools/media-query-li const precision = 100000; const nearInfinity = 2147483647; -export function transformMediaFeatureValue(value: MediaFeatureValue) { +export function transformMediaFeatureValue(value: MediaFeatureValue): void { if (Array.isArray(value.value) && matchesRatioExactly(value.value)) { const nodes: Array = []; @@ -220,7 +220,7 @@ export function transformMediaFeatureValue(value: MediaFeatureValue) { return; } -function modifyCalc(focus: FunctionNode) { +function modifyCalc(focus: FunctionNode): FunctionNode { return new FunctionNode( [TokenType.Function, 'calc(', -1, -1, { value: 'calc(' }], [TokenType.CloseParen, ')', -1, -1, undefined], @@ -247,7 +247,7 @@ function modifyCalc(focus: FunctionNode) { } // https://stackoverflow.com/questions/17445231/js-how-to-find-the-greatest-common-divisor -function greatestCommonDivisor(a: number, b: number) { +function greatestCommonDivisor(a: number, b: number): number { if (Number.isNaN(a) || Number.isNaN(b)) { throw new Error('Unexpected \'NaN\' when calculating the greatest common divisor.'); } diff --git a/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-query-list.ts b/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-query-list.ts index b2a8a2568..23af251ba 100644 --- a/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-query-list.ts +++ b/plugins/postcss-media-queries-aspect-ratio-number-values/src/transform-media-query-list.ts @@ -11,7 +11,7 @@ const featureNamesSet = new Set([ 'max-device-aspect-ratio', ]); -export function transformMediaQueryList(params: string, preserve: boolean) { +export function transformMediaQueryList(params: string, preserve: boolean): string { const mediaQueryList = parse(params, { preserveInvalidMediaQueries: true, onParseError: () => { diff --git a/plugins/postcss-minify/src/index.ts b/plugins/postcss-minify/src/index.ts index ce0419474..045f8a78c 100644 --- a/plugins/postcss-minify/src/index.ts +++ b/plugins/postcss-minify/src/index.ts @@ -90,7 +90,7 @@ function removeEmptyNodes(node: Container | Document): boolean { return false; } -function setSemicolon(node: AtRule | Rule) { +function setSemicolon(node: AtRule | Rule): void { if (node.raws.semicolon) { const last = node.last; if (last?.type !== 'decl' || !last.variable) { @@ -107,7 +107,7 @@ const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-minify', - OnceExit(css) { + OnceExit(css): void { css.raws.before = ''; css.raws.after = '\n'; diff --git a/plugins/postcss-nested-calc/src/index.ts b/plugins/postcss-nested-calc/src/index.ts index d4f40e345..8b833358e 100644 --- a/plugins/postcss-nested-calc/src/index.ts +++ b/plugins/postcss-nested-calc/src/index.ts @@ -22,7 +22,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-nested-calc', - Declaration(decl, { result }) { + Declaration(decl, { result }): void { if (numberOfCalcOccurrences(decl.value) < 2) { // must have at least two calc functions. return; diff --git a/plugins/postcss-nesting/src/editions/2021/index.ts b/plugins/postcss-nesting/src/editions/2021/index.ts index a4a36e4c6..d362145fd 100644 --- a/plugins/postcss-nesting/src/editions/2021/index.ts +++ b/plugins/postcss-nesting/src/editions/2021/index.ts @@ -23,7 +23,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-nesting', - Rule(rule, { result }) { + Rule(rule, { result }): void { walk(rule, result, options); if (rule.selector.includes('&')) { diff --git a/plugins/postcss-nesting/src/editions/2021/lib/ampersand-to-scope.ts b/plugins/postcss-nesting/src/editions/2021/lib/ampersand-to-scope.ts index 57685b384..0bc2b6c95 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/ampersand-to-scope.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/ampersand-to-scope.ts @@ -2,7 +2,7 @@ import type { Container, Node, Result, Rule } from 'postcss'; import parser from 'postcss-selector-parser'; import { sortCompoundSelectorsInsideComplexSelector } from './merge-selectors/compound-selector-order'; -export default function ampersandToScope(rule: Rule, result: Result) { +export default function ampersandToScope(rule: Rule, result: Result): void { let parent: Container = rule.parent; while (parent) { diff --git a/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-atrule.ts b/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-atrule.ts index 7f3b6e20c..a83971c10 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-atrule.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-atrule.ts @@ -5,7 +5,7 @@ import mergeParams from './merge-params.js'; import shiftNodesBeforeParent from '../../shared/lib/shift-nodes-before-parent.js'; import validAtrules from '../../shared/lib/valid-atrules.js'; -export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule) { +export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule): void { // Group all declarations after the first one. groupDeclarations(parent); @@ -19,7 +19,7 @@ export default function transformAtruleWithinAtrule(node: AtRule, parent: AtRule cleanupParent(parent); } -export function isAtruleWithinAtrule(node: AtRule, parent: AtRule) { +export function isAtruleWithinAtrule(node: AtRule, parent: AtRule): boolean { return validAtrules.includes(node.name) && node.name === parent.name; } diff --git a/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-rule.ts b/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-rule.ts index 4dd27023e..20ff43461 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-rule.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/atrule-within-rule.ts @@ -6,7 +6,7 @@ import shiftNodesBeforeParent from '../../shared/lib/shift-nodes-before-parent.j import validAtrules from '../../shared/lib/valid-atrules.js'; import { options } from './options.js'; -export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc, opts: options) { +export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc, opts: options): void { // Group all declarations after the first one. groupDeclarations(parent); @@ -31,6 +31,6 @@ export default function atruleWithinRule(node: AtRule, parent: Rule, result: Res } } -export function isAtruleWithinRule(node: AtRule) { +export function isAtruleWithinRule(node: AtRule): boolean { return validAtrules.includes(node.name); } diff --git a/plugins/postcss-nesting/src/editions/2021/lib/group-declarations.ts b/plugins/postcss-nesting/src/editions/2021/lib/group-declarations.ts index 1b881e756..ff64a34cf 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/group-declarations.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/group-declarations.ts @@ -1,6 +1,6 @@ import type { ChildNode, Container } from 'postcss'; -export default function groupDeclarations(node: Container) { +export default function groupDeclarations(node: Container): void { // https://drafts.csswg.org/css-nesting/#mixing // When a style rule contains both declarations and nested style rules or nested conditional group rules, // all three can be arbitrarily mixed. diff --git a/plugins/postcss-nesting/src/editions/2021/lib/list.ts b/plugins/postcss-nesting/src/editions/2021/lib/list.ts index 76d4861d6..0f8483222 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/list.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/list.ts @@ -1,4 +1,4 @@ -export function comma(string: string) { +export function comma(string: string): Array { const array: Array = []; let current = ''; let split = false; diff --git a/plugins/postcss-nesting/src/editions/2021/lib/merge-params.ts b/plugins/postcss-nesting/src/editions/2021/lib/merge-params.ts index 5e97609b8..c252bdff8 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/merge-params.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/merge-params.ts @@ -1,6 +1,6 @@ import { comma } from './list.js'; -export default function mergeParams(fromParams: string, toParams: string) { +export default function mergeParams(fromParams: string, toParams: string): string { return comma(fromParams) .map((params1) => comma(toParams) diff --git a/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/compound-selector-order.ts b/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/compound-selector-order.ts index 3c9985d47..cdc406f17 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/compound-selector-order.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/compound-selector-order.ts @@ -3,7 +3,7 @@ import type { Container, Node, Pseudo } from 'postcss-selector-parser'; const isPseudo = parser.pseudo({ value: ':is' }); -export function sortCompoundSelectorsInsideComplexSelector(node: Container) { +export function sortCompoundSelectorsInsideComplexSelector(node: Container): void { if (!node || !node.nodes) { return; } @@ -79,7 +79,7 @@ export function sortCompoundSelectorsInsideComplexSelector(node: Container, toSelectors: Array, opts: options) { +export default function mergeSelectors(fromSelectors: Array, toSelectors: Array, opts: options): Array { const fromListHasUniformSpecificity = nodesAreEquallySpecific(fromSelectors); let fromSelectorsAST = []; @@ -189,7 +189,7 @@ export default function mergeSelectors(fromSelectors: Array, toSelectors return result; } -function isSimpleSelector(selector) { +function isSimpleSelector(selector): boolean { if (selector.type === 'combinator') { return false; } @@ -201,7 +201,7 @@ function isSimpleSelector(selector) { return true; } -function isCompoundSelector(selector, toSelector = null) { +function isCompoundSelector(selector, toSelector = null): boolean { if (isSimpleSelector(selector)) { return false; } @@ -230,7 +230,7 @@ function isCompoundSelector(selector, toSelector = null) { } -function nestingIsFirstAndOnlyInSelectorWithEitherSpaceOrChildCombinator(selector) { +function nestingIsFirstAndOnlyInSelectorWithEitherSpaceOrChildCombinator(selector): boolean { if (!selector.parent) { return false; } @@ -248,7 +248,7 @@ function nestingIsFirstAndOnlyInSelectorWithEitherSpaceOrChildCombinator(selecto return true; } -function nestingIsNotInsideCompoundSelector(selector: Nesting) { +function nestingIsNotInsideCompoundSelector(selector: Nesting): boolean { if (isSimpleSelector(selector)) { return true; } diff --git a/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/specificity.ts b/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/specificity.ts index a855f8f96..e79db8768 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/specificity.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/merge-selectors/specificity.ts @@ -1,7 +1,7 @@ import parser from 'postcss-selector-parser'; import { selectorSpecificity } from '@csstools/selector-specificity'; -export function nodesAreEquallySpecific(nodes: Array) { +export function nodesAreEquallySpecific(nodes: Array): boolean { // Selector specificity is important when the parent selector is a list. // These cases should be resolved with `:is()` pseudo. // Since browser support for `:is()` is not great, we try to avoid it. diff --git a/plugins/postcss-nesting/src/editions/2021/lib/nest-rule-within-rule.ts b/plugins/postcss-nesting/src/editions/2021/lib/nest-rule-within-rule.ts index 4fabada1a..5f17cf58b 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/nest-rule-within-rule.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/nest-rule-within-rule.ts @@ -6,7 +6,7 @@ import { comma } from './list.js'; import { options } from './options.js'; import cleanupParent from '../../shared/lib/cleanup-parent.js'; -export default function transformNestRuleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc, opts: options) { +export default function transformNestRuleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc, opts: options): void { let selectors = []; try { @@ -40,7 +40,7 @@ export default function transformNestRuleWithinRule(node: AtRule, parent: Rule, walk(rule, result, opts); } -export function isValidNestRuleWithinRule(node: AtRule) { +export function isValidNestRuleWithinRule(node: AtRule): boolean { return comma(node.params).every((selector) => { return selector.split('&').length >= 2 && selector.indexOf('|') === -1; diff --git a/plugins/postcss-nesting/src/editions/2021/lib/rule-within-rule.ts b/plugins/postcss-nesting/src/editions/2021/lib/rule-within-rule.ts index d458db18f..9d5faef3f 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/rule-within-rule.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/rule-within-rule.ts @@ -5,7 +5,7 @@ import mergeSelectors from './merge-selectors/merge-selectors.js'; import shiftNodesBeforeParent from '../../shared/lib/shift-nodes-before-parent.js'; import { options } from './options.js'; -export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result, opts: options) { +export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result, opts: options): void { let selectors = []; // update the selectors of the node to be merged with the parent @@ -40,7 +40,7 @@ export default function transformRuleWithinRule(node: Rule, parent: Rule, result cleanupParent(parent); } -export function isValidRuleWithinRule(node: Rule) { +export function isValidRuleWithinRule(node: Rule): boolean { return node.selectors.every((selector) => { return selector.indexOf('|') === -1; }); diff --git a/plugins/postcss-nesting/src/editions/2021/lib/walk.ts b/plugins/postcss-nesting/src/editions/2021/lib/walk.ts index b0782cc92..82cdd344b 100644 --- a/plugins/postcss-nesting/src/editions/2021/lib/walk.ts +++ b/plugins/postcss-nesting/src/editions/2021/lib/walk.ts @@ -6,7 +6,7 @@ import transformRuleWithinRule, { isValidRuleWithinRule } from './rule-within-ru import { isAtRule, isNestRule, isRule } from '../../shared/lib/is-type-of-rule.js'; import { options } from './options.js'; -export default function walk(node: Container, result: Result, opts: options) { +export default function walk(node: Container, result: Result, opts: options): void { node.each((child) => { const parent = child.parent; diff --git a/plugins/postcss-nesting/src/editions/2024-02/index.ts b/plugins/postcss-nesting/src/editions/2024-02/index.ts index 568420e12..53a36eaa6 100644 --- a/plugins/postcss-nesting/src/editions/2024-02/index.ts +++ b/plugins/postcss-nesting/src/editions/2024-02/index.ts @@ -11,7 +11,7 @@ export type pluginOptions = { const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-nesting', - Rule(rule, { result }) { + Rule(rule, { result }): void { walk(rule, result); if (rule.selector.includes('&')) { @@ -19,7 +19,7 @@ const creator: PluginCreator = () => { } }, AtRule: { - nest(rule) { + nest(rule): void { throw rule.error( '`@nest` was removed from the CSS Nesting specification and will be removed from PostCSS Nesting in the next major version.\n' + `Change \`@nest ${rule.params} {}\` to \`${rule.params} {}\` to migrate to the latest standard.`, diff --git a/plugins/postcss-nesting/src/editions/2024-02/lib/ampersand-to-scope.ts b/plugins/postcss-nesting/src/editions/2024-02/lib/ampersand-to-scope.ts index 66b2cfef3..c76bf6329 100644 --- a/plugins/postcss-nesting/src/editions/2024-02/lib/ampersand-to-scope.ts +++ b/plugins/postcss-nesting/src/editions/2024-02/lib/ampersand-to-scope.ts @@ -1,7 +1,7 @@ import type { Container, Node, Result, Rule } from 'postcss'; import parser from 'postcss-selector-parser'; -export default function ampersandToScope(rule: Rule, result: Result) { +export default function ampersandToScope(rule: Rule, result: Result): void { let parent: Container = rule.parent; while (parent) { diff --git a/plugins/postcss-nesting/src/editions/2024-02/lib/atrule-within-rule.ts b/plugins/postcss-nesting/src/editions/2024-02/lib/atrule-within-rule.ts index 06cb026ad..ecfdd48b1 100644 --- a/plugins/postcss-nesting/src/editions/2024-02/lib/atrule-within-rule.ts +++ b/plugins/postcss-nesting/src/editions/2024-02/lib/atrule-within-rule.ts @@ -5,7 +5,7 @@ import mergeSelectors from './merge-selectors.js'; import shiftNodesBeforeParent from '../../shared/lib/shift-nodes-before-parent.js'; import validAtrules from '../../shared/lib/valid-atrules.js'; -export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc) { +export default function atruleWithinRule(node: AtRule, parent: Rule, result: Result, walk: walkFunc): void { // move previous siblings and the node to before the parent shiftNodesBeforeParent(node, parent); @@ -34,6 +34,6 @@ export default function atruleWithinRule(node: AtRule, parent: Rule, result: Res } } -export function isAtruleWithinRule(node: AtRule) { +export function isAtruleWithinRule(node: AtRule): boolean { return validAtrules.includes(node.name); } diff --git a/plugins/postcss-nesting/src/editions/2024-02/lib/rule-within-rule.ts b/plugins/postcss-nesting/src/editions/2024-02/lib/rule-within-rule.ts index 9a7c58625..fd40c4cd9 100644 --- a/plugins/postcss-nesting/src/editions/2024-02/lib/rule-within-rule.ts +++ b/plugins/postcss-nesting/src/editions/2024-02/lib/rule-within-rule.ts @@ -3,7 +3,7 @@ import cleanupParent from '../../shared/lib/cleanup-parent.js'; import mergeSelectors from './merge-selectors.js'; import shiftNodesBeforeParent from '../../shared/lib/shift-nodes-before-parent.js'; -export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result) { +export default function transformRuleWithinRule(node: Rule, parent: Rule, result: Result): void { const selectors = mergeSelectors(node, node.selector, parent.selector, result); if (!selectors) { return; @@ -26,7 +26,7 @@ export default function transformRuleWithinRule(node: Rule, parent: Rule, result cleanupParent(parent); } -export function isValidRuleWithinRule(node: Rule) { +export function isValidRuleWithinRule(node: Rule): boolean { return node.selectors.every((selector) => { return selector.indexOf('|') === -1; }); diff --git a/plugins/postcss-nesting/src/editions/2024-02/lib/walk.ts b/plugins/postcss-nesting/src/editions/2024-02/lib/walk.ts index 3a3ee2326..4e93bc895 100644 --- a/plugins/postcss-nesting/src/editions/2024-02/lib/walk.ts +++ b/plugins/postcss-nesting/src/editions/2024-02/lib/walk.ts @@ -3,7 +3,7 @@ import transformAtruleWithinRule, { isAtruleWithinRule } from './atrule-within-r import transformRuleWithinRule, { isValidRuleWithinRule } from './rule-within-rule.js'; import { isAtRule, isRule } from '../../shared/lib/is-type-of-rule.js'; -export default function walk(node: Container, result: Result) { +export default function walk(node: Container, result: Result): void { node.each((child) => { const parent = child.parent; diff --git a/plugins/postcss-nesting/src/editions/shared/lib/cleanup-parent.ts b/plugins/postcss-nesting/src/editions/shared/lib/cleanup-parent.ts index 815b1dd1c..92597fbc9 100644 --- a/plugins/postcss-nesting/src/editions/shared/lib/cleanup-parent.ts +++ b/plugins/postcss-nesting/src/editions/shared/lib/cleanup-parent.ts @@ -1,6 +1,6 @@ import type { ChildNode, Container } from 'postcss'; -export default function cleanupParent(parent: Container) { +export default function cleanupParent(parent: Container): void { if (!parent.nodes.length) { parent.remove(); return; diff --git a/plugins/postcss-nesting/src/editions/shared/lib/shift-nodes-before-parent.ts b/plugins/postcss-nesting/src/editions/shared/lib/shift-nodes-before-parent.ts index 9a07f3ca3..745fa0a29 100644 --- a/plugins/postcss-nesting/src/editions/shared/lib/shift-nodes-before-parent.ts +++ b/plugins/postcss-nesting/src/editions/shared/lib/shift-nodes-before-parent.ts @@ -1,7 +1,7 @@ import type { ChildNode, Container } from 'postcss'; import cleanupParent from './cleanup-parent'; -export default function shiftNodesBeforeParent(node: ChildNode, parent: Container) { +export default function shiftNodesBeforeParent(node: ChildNode, parent: Container): void { const index = parent.index(node); // conditionally move previous siblings into a clone of the parent diff --git a/plugins/postcss-normalize-display-values/dist/index.cjs b/plugins/postcss-normalize-display-values/dist/index.cjs index 681198e81..41fd8fb86 100644 --- a/plugins/postcss-normalize-display-values/dist/index.cjs +++ b/plugins/postcss-normalize-display-values/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser"),l=new Map([["block,flow","block"],["block,flow-root","flow-root"],["inline,flow","inline"],["inline,flow-root","inline-block"],["run-in,flow","run-in"],["list-item,block,flow","list-item"],["inline,flow,list-item","inline list-item"],["block,flex","flex"],["inline,flex","inline-flex"],["block,grid","grid"],["inline,grid","inline-grid"],["inline,ruby","ruby"],["block,table","table"],["inline,table","inline-table"],["table-cell,flow","table-cell"],["table-caption,flow","table-caption"],["ruby-base,flow","ruby-base"],["ruby-text,flow","ruby-text"]]);function transform(n){const{nodes:t}=e(n);if(1===t.length)return n;const o=t.filter((e=>"word"===e.type)).map((e=>e.value.toLowerCase()));if(o.length<=1)return n;const i=l.get(o.join(","));return i||n}const n=/^display$/i,creator=e=>{const l=!("preserve"in Object(e))||Boolean(e?.preserve);return{postcssPlugin:"postcss-normalize-display-values",prepare(){const e=new Map;return{Declaration(t){if(!n.test(t.prop))return;const o=t.value;if(!o)return;if(e.has(o))return void(t.value!==e.get(o)&&(t.cloneBefore({value:e.get(o)}),l||t.remove()));const i=transform(o);e.set(o,i),t.value!==i&&(t.cloneBefore({value:i}),l||t.remove())}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser"),l=new Map([["block,flow","block"],["block,flow-root","flow-root"],["inline,flow","inline"],["inline,flow-root","inline-block"],["run-in,flow","run-in"],["list-item,block,flow","list-item"],["inline,flow,list-item","inline list-item"],["block,flex","flex"],["inline,flex","inline-flex"],["block,grid","grid"],["inline,grid","inline-grid"],["inline,ruby","ruby"],["block,table","table"],["inline,table","inline-table"],["table-cell,flow","table-cell"],["table-caption,flow","table-caption"],["ruby-base,flow","ruby-base"],["ruby-text,flow","ruby-text"]]);function transform(n){const{nodes:t}=e(n);if(1===t.length)return n;const o=t.filter((e=>"word"===e.type)).map((e=>e.value.toLowerCase()));if(o.length<=1)return n;const i=l.get(o.join(","));return i||n}const n=/^display$/i,creator=e=>{const l=!("preserve"in Object(e))||Boolean(e?.preserve);return{postcssPlugin:"postcss-normalize-display-values",prepare(){const e=new Map;return{postcssPlugin:"postcss-normalize-display-values",Declaration(t){if(!n.test(t.prop))return;const o=t.value;if(!o)return;if(e.has(o))return void(t.value!==e.get(o)&&(t.cloneBefore({value:e.get(o)}),l||t.remove()));const i=transform(o);e.set(o,i),t.value!==i&&(t.cloneBefore({value:i}),l||t.remove())}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-normalize-display-values/dist/index.mjs b/plugins/postcss-normalize-display-values/dist/index.mjs index 69df945a5..b15f3ec8e 100644 --- a/plugins/postcss-normalize-display-values/dist/index.mjs +++ b/plugins/postcss-normalize-display-values/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";var l=new Map([["block,flow","block"],["block,flow-root","flow-root"],["inline,flow","inline"],["inline,flow-root","inline-block"],["run-in,flow","run-in"],["list-item,block,flow","list-item"],["inline,flow,list-item","inline list-item"],["block,flex","flex"],["inline,flex","inline-flex"],["block,grid","grid"],["inline,grid","inline-grid"],["inline,ruby","ruby"],["block,table","table"],["inline,table","inline-table"],["table-cell,flow","table-cell"],["table-caption,flow","table-caption"],["ruby-base,flow","ruby-base"],["ruby-text,flow","ruby-text"]]);function transform(n){const{nodes:t}=e(n);if(1===t.length)return n;const o=t.filter((e=>"word"===e.type)).map((e=>e.value.toLowerCase()));if(o.length<=1)return n;const i=l.get(o.join(","));return i||n}const n=/^display$/i,creator=e=>{const l=!("preserve"in Object(e))||Boolean(e?.preserve);return{postcssPlugin:"postcss-normalize-display-values",prepare(){const e=new Map;return{Declaration(t){if(!n.test(t.prop))return;const o=t.value;if(!o)return;if(e.has(o))return void(t.value!==e.get(o)&&(t.cloneBefore({value:e.get(o)}),l||t.remove()));const i=transform(o);e.set(o,i),t.value!==i&&(t.cloneBefore({value:i}),l||t.remove())}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";var l=new Map([["block,flow","block"],["block,flow-root","flow-root"],["inline,flow","inline"],["inline,flow-root","inline-block"],["run-in,flow","run-in"],["list-item,block,flow","list-item"],["inline,flow,list-item","inline list-item"],["block,flex","flex"],["inline,flex","inline-flex"],["block,grid","grid"],["inline,grid","inline-grid"],["inline,ruby","ruby"],["block,table","table"],["inline,table","inline-table"],["table-cell,flow","table-cell"],["table-caption,flow","table-caption"],["ruby-base,flow","ruby-base"],["ruby-text,flow","ruby-text"]]);function transform(n){const{nodes:o}=e(n);if(1===o.length)return n;const t=o.filter((e=>"word"===e.type)).map((e=>e.value.toLowerCase()));if(t.length<=1)return n;const i=l.get(t.join(","));return i||n}const n=/^display$/i,creator=e=>{const l=!("preserve"in Object(e))||Boolean(e?.preserve);return{postcssPlugin:"postcss-normalize-display-values",prepare(){const e=new Map;return{postcssPlugin:"postcss-normalize-display-values",Declaration(o){if(!n.test(o.prop))return;const t=o.value;if(!t)return;if(e.has(t))return void(o.value!==e.get(t)&&(o.cloneBefore({value:e.get(t)}),l||o.remove()));const i=transform(t);e.set(t,i),o.value!==i&&(o.cloneBefore({value:i}),l||o.remove())}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-normalize-display-values/src/index.ts b/plugins/postcss-normalize-display-values/src/index.ts index 09767f16a..f389e4ea1 100644 --- a/plugins/postcss-normalize-display-values/src/index.ts +++ b/plugins/postcss-normalize-display-values/src/index.ts @@ -1,8 +1,8 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import valueParser from 'postcss-value-parser'; import mappings from './mappings'; -function transform(value: string) { +function transform(value: string): string { const { nodes } = valueParser(value); if (nodes.length === 1) { @@ -39,10 +39,11 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-normalize-display-values', - prepare() { + prepare(): Plugin { const cache = new Map(); return { - Declaration(decl) { + postcssPlugin: 'postcss-normalize-display-values', + Declaration(decl): void { if (!IS_DISPLAY_REGEX.test(decl.prop)) { return; } diff --git a/plugins/postcss-oklab-function/dist/index.cjs b/plugins/postcss-oklab-function/dist/index.cjs index 7df76e4fb..b9e0e8aa1 100644 --- a/plugins/postcss-oklab-function/dist/index.cjs +++ b/plugins/postcss-oklab-function/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),a=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-tokenizer");const o=/\b(?:oklab|oklch)\(/i,l=/^(?:oklab|oklch)$/i,basePlugin=s=>({postcssPlugin:"postcss-oklab-function",Declaration:n=>{const i=n.value;if(!o.test(i))return;if(t.hasFallback(n))return;if(t.hasSupportsAtRuleAncestor(n,o))return;const u=r.tokenize({css:i}),c=a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),p=a.stringify(c);if(p===i)return;let g=p;s?.subFeatures.displayP3&&(g=a.stringify(a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&g!==p&&n.cloneBefore({value:g}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-oklab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),a=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-tokenizer");const o=/\b(?:oklab|oklch)\(/i,l=/^(?:oklab|oklch)$/i,basePlugin=s=>({postcssPlugin:"postcss-oklab-function",Declaration(n){const i=n.value;if(!o.test(i))return;if(t.hasFallback(n))return;if(t.hasSupportsAtRuleAncestor(n,o))return;const u=r.tokenize({css:i}),c=a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.serializeRGB(t):void 0})),p=a.stringify(c);if(p===i)return;let g=p;s?.subFeatures.displayP3&&(g=a.stringify(a.replaceComponentValues(a.parseCommaSeparatedListOfComponentValues(u),(s=>{if(!a.isFunctionNode(s)||!l.test(s.getName()))return;const t=e.color(s);return t&&!(t.syntaxFlags.has(e.SyntaxFlag.Experimental)||t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)||t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax))?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),n.cloneBefore({value:p}),s?.subFeatures.displayP3&&g!==p&&n.cloneBefore({value:g}),s?.preserve||n.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-oklab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-oklab-function/dist/index.mjs b/plugins/postcss-oklab-function/dist/index.mjs index fc23fc529..faf62c39a 100644 --- a/plugins/postcss-oklab-function/dist/index.mjs +++ b/plugins/postcss-oklab-function/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as t,serializeRGB as o,colorDataFitsRGB_Gamut as r,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const g=/\b(?:oklab|oklch)\(/i,f=/^(?:oklab|oklch)$/i,basePlugin=s=>({postcssPlugin:"postcss-oklab-function",Declaration:b=>{const y=b.value;if(!g.test(y))return;if(l(b))return;if(i(b,g))return;const v=m({css:y}),F=n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const r=e(s);return r&&!(r.syntaxFlags.has(t.Experimental)||r.syntaxFlags.has(t.HasNoneKeywords)||r.syntaxFlags.has(t.RelativeColorSyntax))?o(r):void 0})),x=p(F);if(x===y)return;let P=x;s?.subFeatures.displayP3&&(P=p(n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const l=e(s);return l&&!(l.syntaxFlags.has(t.Experimental)||l.syntaxFlags.has(t.HasNoneKeywords)||l.syntaxFlags.has(t.RelativeColorSyntax))?r(l)?o(l):a(l):void 0})))),b.cloneBefore({value:x}),s?.subFeatures.displayP3&&P!==x&&b.cloneBefore({value:P}),s?.preserve||b.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-oklab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as t,serializeRGB as o,colorDataFitsRGB_Gamut as r,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as n,parseCommaSeparatedListOfComponentValues as c,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as m}from"@csstools/css-tokenizer";const g=/\b(?:oklab|oklch)\(/i,f=/^(?:oklab|oklch)$/i,basePlugin=s=>({postcssPlugin:"postcss-oklab-function",Declaration(b){const y=b.value;if(!g.test(y))return;if(l(b))return;if(i(b,g))return;const v=m({css:y}),F=n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const r=e(s);return r&&!(r.syntaxFlags.has(t.Experimental)||r.syntaxFlags.has(t.HasNoneKeywords)||r.syntaxFlags.has(t.RelativeColorSyntax))?o(r):void 0})),x=p(F);if(x===y)return;let P=x;s?.subFeatures.displayP3&&(P=p(n(c(v),(s=>{if(!u(s)||!f.test(s.getName()))return;const l=e(s);return l&&!(l.syntaxFlags.has(t.Experimental)||l.syntaxFlags.has(t.HasNoneKeywords)||l.syntaxFlags.has(t.RelativeColorSyntax))?r(l)?o(l):a(l):void 0})))),b.cloneBefore({value:x}),s?.subFeatures.displayP3&&P!==x&&b.cloneBefore({value:P}),s?.preserve||b.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-oklab-function",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-oklab-function/src/index.ts b/plugins/postcss-oklab-function/src/index.ts index 4a7dd2282..ed936f8d9 100644 --- a/plugins/postcss-oklab-function/src/index.ts +++ b/plugins/postcss-oklab-function/src/index.ts @@ -19,7 +19,7 @@ const OKLAB_OKLCH_NAME_REGEX = /^(?:oklab|oklch)$/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-oklab-function', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!(OKLAB_OKLCH_FUNCTION_REGEX.test(originalValue))) { return; diff --git a/plugins/postcss-overflow-shorthand/dist/index.cjs b/plugins/postcss-overflow-shorthand/dist/index.cjs index da4166a2a..b2ae16318 100644 --- a/plugins/postcss-overflow-shorthand/dist/index.cjs +++ b/plugins/postcss-overflow-shorthand/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser");const creator=r=>{const o=Object.assign({preserve:!0},r);return{postcssPlugin:"postcss-overflow-shorthand",Declaration:(r,{result:s})=>{if("overflow"!==r.prop.toLowerCase())return;let t="",a="";const l=r.value;try{const r=e(l).nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));if(r.length<2)return;t=e.stringify(r[0]),a=e.stringify(r[1])}catch(e){return void r.warn(s,`Failed to parse value '${l}' as a shorthand for "overflow". Leaving the original value intact.`)}t&&a&&(t.toLowerCase()===a.toLowerCase()?r.cloneBefore({value:t}):(r.cloneBefore({prop:"overflow-x",value:t}),r.cloneBefore({prop:"overflow-y",value:a})),o.preserve||r.remove())}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser");const creator=r=>{const o=Object.assign({preserve:!0},r);return{postcssPlugin:"postcss-overflow-shorthand",Declaration(r,{result:s}){if("overflow"!==r.prop.toLowerCase())return;let t="",a="";const l=r.value;try{const r=e(l).nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));if(r.length<2)return;t=e.stringify(r[0]),a=e.stringify(r[1])}catch(e){return void r.warn(s,`Failed to parse value '${l}' as a shorthand for "overflow". Leaving the original value intact.`)}t&&a&&(t.toLowerCase()===a.toLowerCase()?r.cloneBefore({value:t}):(r.cloneBefore({prop:"overflow-x",value:t}),r.cloneBefore({prop:"overflow-y",value:a})),o.preserve||r.remove())}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-overflow-shorthand/dist/index.mjs b/plugins/postcss-overflow-shorthand/dist/index.mjs index 426c0a0c1..b044dc559 100644 --- a/plugins/postcss-overflow-shorthand/dist/index.mjs +++ b/plugins/postcss-overflow-shorthand/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";const creator=o=>{const r=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-overflow-shorthand",Declaration:(o,{result:t})=>{if("overflow"!==o.prop.toLowerCase())return;let s="",a="";const l=o.value;try{const o=e(l).nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));if(o.length<2)return;s=e.stringify(o[0]),a=e.stringify(o[1])}catch(e){return void o.warn(t,`Failed to parse value '${l}' as a shorthand for "overflow". Leaving the original value intact.`)}s&&a&&(s.toLowerCase()===a.toLowerCase()?o.cloneBefore({value:s}):(o.cloneBefore({prop:"overflow-x",value:s}),o.cloneBefore({prop:"overflow-y",value:a})),r.preserve||o.remove())}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";const creator=o=>{const r=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-overflow-shorthand",Declaration(o,{result:t}){if("overflow"!==o.prop.toLowerCase())return;let s="",a="";const l=o.value;try{const o=e(l).nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));if(o.length<2)return;s=e.stringify(o[0]),a=e.stringify(o[1])}catch(e){return void o.warn(t,`Failed to parse value '${l}' as a shorthand for "overflow". Leaving the original value intact.`)}s&&a&&(s.toLowerCase()===a.toLowerCase()?o.cloneBefore({value:s}):(o.cloneBefore({prop:"overflow-x",value:s}),o.cloneBefore({prop:"overflow-y",value:a})),r.preserve||o.remove())}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-overflow-shorthand/src/index.ts b/plugins/postcss-overflow-shorthand/src/index.ts index 3a31b4115..ccca1a809 100644 --- a/plugins/postcss-overflow-shorthand/src/index.ts +++ b/plugins/postcss-overflow-shorthand/src/index.ts @@ -19,7 +19,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-overflow-shorthand', - Declaration: (decl, { result }) => { + Declaration(decl, { result }): void { if (decl.prop.toLowerCase() !== 'overflow') { return; } diff --git a/plugins/postcss-place/dist/index.cjs b/plugins/postcss-place/dist/index.cjs index daa84cae2..70e9b45af 100644 --- a/plugins/postcss-place/dist/index.cjs +++ b/plugins/postcss-place/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser");function onCSSDeclaration(r,o,s){const n=r.prop.match(t)?.[1].toLowerCase();if(!n)return;let a;try{a=e(r.value)}catch(e){r.warn(o,`Failed to parse value '${r.value}'. Leaving the original value intact.`)}if(void 0===a)return;let i=[];i=a.nodes.length?a.nodes.filter((e=>"word"===e.type||"function"===e.type)).map((t=>e.stringify(t))):[e.stringify(a.nodes)],r.cloneBefore({prop:`align-${n}`,value:i[0]}),r.cloneBefore({prop:`justify-${n}`,value:i[1]||i[0]}),s.preserve||r.remove()}const t=/^place-(content|items|self)/i,creator=e=>{const r=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-place",Declaration:(e,{result:o})=>{t.test(e.prop)&&onCSSDeclaration(e,o,r)}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser");function onCSSDeclaration(r,o,s){const n=r.prop.match(t)?.[1].toLowerCase();if(!n)return;let a;try{a=e(r.value)}catch(e){r.warn(o,`Failed to parse value '${r.value}'. Leaving the original value intact.`)}if(void 0===a)return;let i=[];i=a.nodes.length?a.nodes.filter((e=>"word"===e.type||"function"===e.type)).map((t=>e.stringify(t))):[e.stringify(a.nodes)],r.cloneBefore({prop:`align-${n}`,value:i[0]}),r.cloneBefore({prop:`justify-${n}`,value:i[1]||i[0]}),s.preserve||r.remove()}const t=/^place-(content|items|self)/i,creator=e=>{const r=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-place",Declaration(e,{result:o}){t.test(e.prop)&&onCSSDeclaration(e,o,r)}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-place/dist/index.mjs b/plugins/postcss-place/dist/index.mjs index 4f98a3bdd..c54e1cc91 100644 --- a/plugins/postcss-place/dist/index.mjs +++ b/plugins/postcss-place/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";function onCSSDeclaration(o,r,s){const n=o.prop.match(t)?.[1].toLowerCase();if(!n)return;let a;try{a=e(o.value)}catch(e){o.warn(r,`Failed to parse value '${o.value}'. Leaving the original value intact.`)}if(void 0===a)return;let i=[];i=a.nodes.length?a.nodes.filter((e=>"word"===e.type||"function"===e.type)).map((t=>e.stringify(t))):[e.stringify(a.nodes)],o.cloneBefore({prop:`align-${n}`,value:i[0]}),o.cloneBefore({prop:`justify-${n}`,value:i[1]||i[0]}),s.preserve||o.remove()}const t=/^place-(content|items|self)/i,creator=e=>{const o=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-place",Declaration:(e,{result:r})=>{t.test(e.prop)&&onCSSDeclaration(e,r,o)}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";function onCSSDeclaration(o,r,s){const n=o.prop.match(t)?.[1].toLowerCase();if(!n)return;let a;try{a=e(o.value)}catch(e){o.warn(r,`Failed to parse value '${o.value}'. Leaving the original value intact.`)}if(void 0===a)return;let i=[];i=a.nodes.length?a.nodes.filter((e=>"word"===e.type||"function"===e.type)).map((t=>e.stringify(t))):[e.stringify(a.nodes)],o.cloneBefore({prop:`align-${n}`,value:i[0]}),o.cloneBefore({prop:`justify-${n}`,value:i[1]||i[0]}),s.preserve||o.remove()}const t=/^place-(content|items|self)/i,creator=e=>{const o=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-place",Declaration(e,{result:r}){t.test(e.prop)&&onCSSDeclaration(e,r,o)}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-place/src/index.ts b/plugins/postcss-place/src/index.ts index cdb0ff5fb..e6a97dfc5 100644 --- a/plugins/postcss-place/src/index.ts +++ b/plugins/postcss-place/src/index.ts @@ -19,7 +19,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-place', - Declaration: (decl, { result }) => { + Declaration(decl, { result }): void { if (!PLACE_MATCH_REGEX.test(decl.prop)) { return; } diff --git a/plugins/postcss-place/src/on-css-declaration.ts b/plugins/postcss-place/src/on-css-declaration.ts index ce2f21830..fe80273ea 100644 --- a/plugins/postcss-place/src/on-css-declaration.ts +++ b/plugins/postcss-place/src/on-css-declaration.ts @@ -1,7 +1,7 @@ import type { Declaration, Result } from 'postcss'; import valueParser from 'postcss-value-parser'; -export function onCSSDeclaration(decl: Declaration, result: Result , options: { preserve: boolean }) { +export function onCSSDeclaration(decl: Declaration, result: Result , options: { preserve: boolean }): void { // alignment const alignment = decl.prop.match(PLACE_MATCH_REGEX)?.[1].toLowerCase(); if (!alignment) { diff --git a/plugins/postcss-progressive-custom-properties/dist/index.cjs b/plugins/postcss-progressive-custom-properties/dist/index.cjs index 806f71873..472648560 100644 --- a/plugins/postcss-progressive-custom-properties/dist/index.cjs +++ b/plugins/postcss-progressive-custom-properties/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-value-parser");const a=["at","bottom","center","circle","closest-corner","closest-side","ellipse","farthest-corner","farthest-side","from","in","left","right","to","top"];function doublePositionGradients(e){const r=[],p=e.value.toLowerCase();if("function"===e.type&&("conic-gradient"===p||"linear-gradient"===p||"radial-gradient"===p||"repeating-conic-gradient"===p||"repeating-linear-gradient"===p||"repeating-radial-gradient"===p)){let p=0,t=!1,i=!1;e:for(let o=0;oa.includes(e.sniff)));let s=!1;try{e(a).walk((a=>{"function"===a.type&&p.test(a.value)&&(s=!0);try{const r=e.unit(a.value);!1!==r&&(a.dimension=r)}catch{}for(let e=0;e({postcssPlugin:"postcss-progressive-custom-properties",prepare(){const e=new WeakMap;return{OnceExit:(a,{postcss:r})=>{a.walkDecls((a=>{if(!a.parent)return;const p=e.get(a.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{support:void 0},lastConditionalRule:void 0};if(e.set(a.parent,p),a.variable){if(!p.propNames.has(a.prop))return void p.propNames.add(a.prop)}else{const e=a.prop.toLowerCase();if(!p.propNames.has(e))return void p.propNames.add(e)}if(!a.variable&&!t.test(a.value))return;if(i.test(a.value))return;if(o.test(a.value))return;const s=!a.variable,l=conditionsFromValue(a.value,s).support.join(" and ");if(!l)return;if(p.lastConditionParams.support!==l&&(p.lastConditionalRule=void 0),p.lastConditionalRule)return p.lastConditionalRule.append(a.clone()),void a.remove();const y=[];if(l&&y.push(r.atRule({name:"supports",params:l,source:a.parent.source,raws:{before:"\n\n",after:"\n"}})),!y.length)return;for(let e=0;e{const r=e.get(a);r&&0!==r.conditionalRules.length&&r.conditionalRules.reverse().forEach((e=>{a.after(e)}))}))}}}});creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-value-parser");const a=["at","bottom","center","circle","closest-corner","closest-side","ellipse","farthest-corner","farthest-side","from","in","left","right","to","top"];function doublePositionGradients(e){const r=[],p=e.value.toLowerCase();if("function"===e.type&&("conic-gradient"===p||"linear-gradient"===p||"radial-gradient"===p||"repeating-conic-gradient"===p||"repeating-linear-gradient"===p||"repeating-radial-gradient"===p)){let p=0,t=!1,i=!1;e:for(let o=0;oa.includes(e.sniff)));let s=!1;try{e(a).walk((a=>{"function"===a.type&&p.test(a.value)&&(s=!0);try{const r=e.unit(a.value);!1!==r&&(a.dimension=r)}catch{}for(let e=0;e({postcssPlugin:"postcss-progressive-custom-properties",prepare(){const e=new WeakMap;return{postcssPlugin:"postcss-progressive-custom-properties",OnceExit(a,{postcss:r}){a.walkDecls((a=>{if(!a.parent)return;const p=e.get(a.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{support:void 0},lastConditionalRule:void 0};if(e.set(a.parent,p),a.variable){if(!p.propNames.has(a.prop))return void p.propNames.add(a.prop)}else{const e=a.prop.toLowerCase();if(!p.propNames.has(e))return void p.propNames.add(e)}if(!a.variable&&!t.test(a.value))return;if(i.test(a.value))return;if(o.test(a.value))return;const s=!a.variable,l=conditionsFromValue(a.value,s).support.join(" and ");if(!l)return;if(p.lastConditionParams.support!==l&&(p.lastConditionalRule=void 0),p.lastConditionalRule)return p.lastConditionalRule.append(a.clone()),void a.remove();const y=[];if(l&&y.push(r.atRule({name:"supports",params:l,source:a.parent.source,raws:{before:"\n\n",after:"\n"}})),!y.length)return;for(let e=0;e{const r=e.get(a);r&&0!==r.conditionalRules.length&&r.conditionalRules.reverse().forEach((e=>{a.after(e)}))}))}}}});creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-progressive-custom-properties/dist/index.mjs b/plugins/postcss-progressive-custom-properties/dist/index.mjs index d3612eac9..9bcaeb7e2 100644 --- a/plugins/postcss-progressive-custom-properties/dist/index.mjs +++ b/plugins/postcss-progressive-custom-properties/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-value-parser";const a=["at","bottom","center","circle","closest-corner","closest-side","ellipse","farthest-corner","farthest-side","from","in","left","right","to","top"];function doublePositionGradients(e){const r=[],p=e.value.toLowerCase();if("function"===e.type&&("conic-gradient"===p||"linear-gradient"===p||"radial-gradient"===p||"repeating-conic-gradient"===p||"repeating-linear-gradient"===p||"repeating-radial-gradient"===p)){let p=0,t=!1,i=!1;e:for(let o=0;oa.includes(e.sniff)));let s=!1;try{e(a).walk((a=>{"function"===a.type&&p.test(a.value)&&(s=!0);try{const r=e.unit(a.value);!1!==r&&(a.dimension=r)}catch{}for(let e=0;e({postcssPlugin:"postcss-progressive-custom-properties",prepare(){const e=new WeakMap;return{OnceExit:(a,{postcss:r})=>{a.walkDecls((a=>{if(!a.parent)return;const p=e.get(a.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{support:void 0},lastConditionalRule:void 0};if(e.set(a.parent,p),a.variable){if(!p.propNames.has(a.prop))return void p.propNames.add(a.prop)}else{const e=a.prop.toLowerCase();if(!p.propNames.has(e))return void p.propNames.add(e)}if(!a.variable&&!t.test(a.value))return;if(i.test(a.value))return;if(o.test(a.value))return;const s=!a.variable,l=conditionsFromValue(a.value,s).support.join(" and ");if(!l)return;if(p.lastConditionParams.support!==l&&(p.lastConditionalRule=void 0),p.lastConditionalRule)return p.lastConditionalRule.append(a.clone()),void a.remove();const y=[];if(l&&y.push(r.atRule({name:"supports",params:l,source:a.parent.source,raws:{before:"\n\n",after:"\n"}})),!y.length)return;for(let e=0;e{const r=e.get(a);r&&0!==r.conditionalRules.length&&r.conditionalRules.reverse().forEach((e=>{a.after(e)}))}))}}}});creator.postcss=!0;export{creator as default}; +import e from"postcss-value-parser";const a=["at","bottom","center","circle","closest-corner","closest-side","ellipse","farthest-corner","farthest-side","from","in","left","right","to","top"];function doublePositionGradients(e){const r=[],p=e.value.toLowerCase();if("function"===e.type&&("conic-gradient"===p||"linear-gradient"===p||"radial-gradient"===p||"repeating-conic-gradient"===p||"repeating-linear-gradient"===p||"repeating-radial-gradient"===p)){let p=0,t=!1,i=!1;e:for(let o=0;oa.includes(e.sniff)));let s=!1;try{e(a).walk((a=>{"function"===a.type&&p.test(a.value)&&(s=!0);try{const r=e.unit(a.value);!1!==r&&(a.dimension=r)}catch{}for(let e=0;e({postcssPlugin:"postcss-progressive-custom-properties",prepare(){const e=new WeakMap;return{postcssPlugin:"postcss-progressive-custom-properties",OnceExit(a,{postcss:r}){a.walkDecls((a=>{if(!a.parent)return;const p=e.get(a.parent)||{conditionalRules:[],propNames:new Set,lastConditionParams:{support:void 0},lastConditionalRule:void 0};if(e.set(a.parent,p),a.variable){if(!p.propNames.has(a.prop))return void p.propNames.add(a.prop)}else{const e=a.prop.toLowerCase();if(!p.propNames.has(e))return void p.propNames.add(e)}if(!a.variable&&!t.test(a.value))return;if(i.test(a.value))return;if(o.test(a.value))return;const s=!a.variable,l=conditionsFromValue(a.value,s).support.join(" and ");if(!l)return;if(p.lastConditionParams.support!==l&&(p.lastConditionalRule=void 0),p.lastConditionalRule)return p.lastConditionalRule.append(a.clone()),void a.remove();const y=[];if(l&&y.push(r.atRule({name:"supports",params:l,source:a.parent.source,raws:{before:"\n\n",after:"\n"}})),!y.length)return;for(let e=0;e{const r=e.get(a);r&&0!==r.conditionalRules.length&&r.conditionalRules.reverse().forEach((e=>{a.after(e)}))}))}}}});creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-progressive-custom-properties/src/index.ts b/plugins/postcss-progressive-custom-properties/src/index.ts index e423c88df..5b08697e5 100644 --- a/plugins/postcss-progressive-custom-properties/src/index.ts +++ b/plugins/postcss-progressive-custom-properties/src/index.ts @@ -1,4 +1,4 @@ -import { type Node, type AtRule, type PluginCreator, type Container } from 'postcss'; +import { type Node, type AtRule, type PluginCreator, type Container, Plugin } from 'postcss'; import { conditionsFromValue } from './conditions-from-values'; const HAS_VARIABLE_FUNCTION_REGEX = /var\(/i; @@ -17,11 +17,12 @@ type State = { const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-progressive-custom-properties', - prepare() { + prepare(): Plugin { const states = new WeakMap(); return { - OnceExit: (root, { postcss }) => { + postcssPlugin: 'postcss-progressive-custom-properties', + OnceExit(root, { postcss }): void { root.walkDecls((decl) => { if (!decl.parent) { return; diff --git a/plugins/postcss-progressive-custom-properties/src/match.ts b/plugins/postcss-progressive-custom-properties/src/match.ts index 9f7c4ea1a..771fc65d3 100644 --- a/plugins/postcss-progressive-custom-properties/src/match.ts +++ b/plugins/postcss-progressive-custom-properties/src/match.ts @@ -8,7 +8,7 @@ type MatcherNode = { isVariable?: boolean } -export function matches(a: MatcherNode, b: MatcherNode) { +export function matches(a: MatcherNode, b: MatcherNode): boolean { if ( a.isVariable && ( @@ -60,7 +60,7 @@ export function matches(a: MatcherNode, b: MatcherNode) { return true; } -function doesNotMatchValue(a: MatcherNode, b: MatcherNode) { +function doesNotMatchValue(a: MatcherNode, b: MatcherNode): boolean { if ( a.type === 'space' && b.type === 'space' && a.value?.trim() === b.value?.trim() diff --git a/plugins/postcss-pseudo-class-any-link/dist/index.cjs b/plugins/postcss-pseudo-class-any-link/dist/index.cjs index e5728643b..4d6985cb6 100644 --- a/plugins/postcss-pseudo-class-any-link/dist/index.cjs +++ b/plugins/postcss-pseudo-class-any-link/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const t=e().astSync(":link").nodes[0],s=e().astSync(":visited").nodes[0],n=e().astSync("area[href]").nodes[0],o=e().astSync("[href]").nodes[0];function replaceAnyLink(e,t,s,n){const o=[],r=[];try{for(let t=0;t{const r=[];if(e.walkPseudos((e=>{if(":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length)return;if(!l)return void r.push([t.clone(),s.clone()]);const c=getTagElementsNextToPseudo(e);c.includes("area")?r.push([t.clone(),s.clone(),o.clone()]):c.length?r.push([t.clone(),s.clone()]):r.push([t.clone(),s.clone(),n.clone()])})),!r.length)return;cartesianProduct(...r).forEach((t=>{const s=e.clone();s.walkPseudos((e=>{":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length||(insertNode(e.parent,e,t.shift()),e.remove())})),c.push(s.toString())}))})).processSync(r),c}function cartesianProduct(...e){const t=[],s=e.length-1;return function helper(n,o){for(let r=0,l=e[o].length;r=0&&("combinator"!==t.nodes[s].type&&!e.isPseudoElement(t.nodes[s].type));s--)r=s;if("tag"!==o){for(let s=c;s{const t={preserve:!0,...e},s={areaHrefNeedsFixing:!1,...Object(t.subFeatures)};return{postcssPlugin:"postcss-pseudo-class-any-link",prepare(){const e=new WeakSet;return{Rule(n,{result:o}){if(!n.selector.toLowerCase().includes(":any-link"))return;if(e.has(n))return;if((n.raws.selector&&n.raws.selector.raw||n.selector).endsWith(":"))return;replaceAnyLink(n,o,t.preserve,s.areaHrefNeedsFixing)&&e.add(n)}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");const t=e().astSync(":link").nodes[0],s=e().astSync(":visited").nodes[0],n=e().astSync("area[href]").nodes[0],o=e().astSync("[href]").nodes[0];function replaceAnyLink(e,t,s,n){const o=[],r=[];try{for(let t=0;t{const r=[];if(e.walkPseudos((e=>{if(":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length)return;if(!l)return void r.push([t.clone(),s.clone()]);const c=getTagElementsNextToPseudo(e);c.includes("area")?r.push([t.clone(),s.clone(),o.clone()]):c.length?r.push([t.clone(),s.clone()]):r.push([t.clone(),s.clone(),n.clone()])})),!r.length)return;cartesianProduct(...r).forEach((t=>{const s=e.clone();s.walkPseudos((e=>{":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length||(insertNode(e.parent,e,t.shift()),e.remove())})),c.push(s.toString())}))})).processSync(r),c}function cartesianProduct(...e){const t=[],s=e.length-1;return function helper(n,o){for(let r=0,l=e[o].length;r=0&&("combinator"!==t.nodes[s].type&&!e.isPseudoElement(t.nodes[s].type));s--)r=s;if("tag"!==o){for(let s=c;s{const t={preserve:!0,...e},s={areaHrefNeedsFixing:!1,...Object(t.subFeatures)};return{postcssPlugin:"postcss-pseudo-class-any-link",prepare(){const e=new WeakSet;return{postcssPlugin:"postcss-pseudo-class-any-link",Rule(n,{result:o}){if(!n.selector.toLowerCase().includes(":any-link"))return;if(e.has(n))return;if((n.raws.selector&&n.raws.selector.raw||n.selector).endsWith(":"))return;replaceAnyLink(n,o,t.preserve,s.areaHrefNeedsFixing)&&e.add(n)}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-pseudo-class-any-link/dist/index.mjs b/plugins/postcss-pseudo-class-any-link/dist/index.mjs index 82e2c5bfa..b20087cc7 100644 --- a/plugins/postcss-pseudo-class-any-link/dist/index.mjs +++ b/plugins/postcss-pseudo-class-any-link/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";const t=e().astSync(":link").nodes[0],n=e().astSync(":visited").nodes[0],s=e().astSync("area[href]").nodes[0],o=e().astSync("[href]").nodes[0];function replaceAnyLink(e,t,n,s){const o=[],r=[];try{for(let t=0;t{const r=[];if(e.walkPseudos((e=>{if(":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length)return;if(!l)return void r.push([t.clone(),n.clone()]);const c=getTagElementsNextToPseudo(e);c.includes("area")?r.push([t.clone(),n.clone(),o.clone()]):c.length?r.push([t.clone(),n.clone()]):r.push([t.clone(),n.clone(),s.clone()])})),!r.length)return;cartesianProduct(...r).forEach((t=>{const n=e.clone();n.walkPseudos((e=>{":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length||(insertNode(e.parent,e,t.shift()),e.remove())})),c.push(n.toString())}))})).processSync(r),c}function cartesianProduct(...e){const t=[],n=e.length-1;return function helper(s,o){for(let r=0,l=e[o].length;r=0&&("combinator"!==t.nodes[n].type&&!e.isPseudoElement(t.nodes[n].type));n--)r=n;if("tag"!==o){for(let n=c;n{const t={preserve:!0,...e},n={areaHrefNeedsFixing:!1,...Object(t.subFeatures)};return{postcssPlugin:"postcss-pseudo-class-any-link",prepare(){const e=new WeakSet;return{Rule(s,{result:o}){if(!s.selector.toLowerCase().includes(":any-link"))return;if(e.has(s))return;if((s.raws.selector&&s.raws.selector.raw||s.selector).endsWith(":"))return;replaceAnyLink(s,o,t.preserve,n.areaHrefNeedsFixing)&&e.add(s)}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";const t=e().astSync(":link").nodes[0],s=e().astSync(":visited").nodes[0],n=e().astSync("area[href]").nodes[0],o=e().astSync("[href]").nodes[0];function replaceAnyLink(e,t,s,n){const o=[],r=[];try{for(let t=0;t{const r=[];if(e.walkPseudos((e=>{if(":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length)return;if(!l)return void r.push([t.clone(),s.clone()]);const c=getTagElementsNextToPseudo(e);c.includes("area")?r.push([t.clone(),s.clone(),o.clone()]):c.length?r.push([t.clone(),s.clone()]):r.push([t.clone(),s.clone(),n.clone()])})),!r.length)return;cartesianProduct(...r).forEach((t=>{const s=e.clone();s.walkPseudos((e=>{":any-link"!==e.value.toLowerCase()||e.nodes&&e.nodes.length||(insertNode(e.parent,e,t.shift()),e.remove())})),c.push(s.toString())}))})).processSync(r),c}function cartesianProduct(...e){const t=[],s=e.length-1;return function helper(n,o){for(let r=0,l=e[o].length;r=0&&("combinator"!==t.nodes[s].type&&!e.isPseudoElement(t.nodes[s].type));s--)r=s;if("tag"!==o){for(let s=c;s{const t={preserve:!0,...e},s={areaHrefNeedsFixing:!1,...Object(t.subFeatures)};return{postcssPlugin:"postcss-pseudo-class-any-link",prepare(){const e=new WeakSet;return{postcssPlugin:"postcss-pseudo-class-any-link",Rule(n,{result:o}){if(!n.selector.toLowerCase().includes(":any-link"))return;if(e.has(n))return;if((n.raws.selector&&n.raws.selector.raw||n.selector).endsWith(":"))return;replaceAnyLink(n,o,t.preserve,s.areaHrefNeedsFixing)&&e.add(n)}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-pseudo-class-any-link/src/index.ts b/plugins/postcss-pseudo-class-any-link/src/index.ts index 244a911cf..d0f96da2d 100644 --- a/plugins/postcss-pseudo-class-any-link/src/index.ts +++ b/plugins/postcss-pseudo-class-any-link/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator } from 'postcss'; +import type { Plugin, PluginCreator } from 'postcss'; import { replaceAnyLink } from './replace-any-link'; /** postcss-pseudo-class-any-link plugin options */ @@ -24,11 +24,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-pseudo-class-any-link', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-pseudo-class-any-link', + Rule(rule, { result }): void { if (!rule.selector.toLowerCase().includes(':any-link')) { return; } diff --git a/plugins/postcss-pseudo-class-any-link/src/replace-any-link.ts b/plugins/postcss-pseudo-class-any-link/src/replace-any-link.ts index 1622bff78..51395794e 100644 --- a/plugins/postcss-pseudo-class-any-link/src/replace-any-link.ts +++ b/plugins/postcss-pseudo-class-any-link/src/replace-any-link.ts @@ -47,7 +47,7 @@ export function replaceAnyLink(rule: Rule, result: Result, preserve: boolean, ar return true; } -function modifiedSelector(selector: string, areaHrefNeedsFixing: boolean) { +function modifiedSelector(selector: string, areaHrefNeedsFixing: boolean): Array { const out: Array = []; // update the selector @@ -105,7 +105,7 @@ function cartesianProduct(...args: Array>): Array> = []; const max = args.length - 1; - function helper(arr: Array, i: number) { + function helper(arr: Array, i: number): void { for (let j = 0, l = args[i].length; j < l; j++) { const a = arr.slice(0); a.push(args[i][j]); @@ -116,12 +116,14 @@ function cartesianProduct(...args: Array>): Array { + const tags: Array = []; let prev = pseudo.prev(); while (prev) { @@ -155,7 +157,7 @@ function getTagElementsNextToPseudo(pseudo: parser.Pseudo) { // Inserts a node around a given node. // - in the same compound selector // - try to keep the result serializable without side effects -function insertNode(container: parser.Container | undefined, aroundNode: parser.Node, node: parser.Node | undefined) { +function insertNode(container: parser.Container | undefined, aroundNode: parser.Node, node: parser.Node | undefined): void { if (!container || !node) { return; } diff --git a/plugins/postcss-rebase-url/dist/index.cjs b/plugins/postcss-rebase-url/dist/index.cjs index 802275b4b..0b44881b7 100644 --- a/plugins/postcss-rebase-url/dist/index.cjs +++ b/plugins/postcss-rebase-url/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/css-tokenizer"),r=require("@csstools/css-parser-algorithms"),t=require("path");const i=/^([-_a-z0-9]+:)?\/\//i;function rebase(e,r,s){if(e.startsWith("data:"))return!1;if(i.test(e))return!1;if(e.startsWith("/"))return e;if(e.startsWith("#"))return e;try{const r=new URL(e);if(r.port||r.protocol)return!1}catch{}const o=t.posix.resolve(t.posix.join(r,e));return t.posix.relative(s,o)}function serializeString(e){let r="";for(const t of e){const e=t.codePointAt(0);if(void 0!==e)switch(e){case 0:r+=String.fromCodePoint(65533);break;case 127:r+=`\\${e.toString(16)}`;break;case 34:case 39:case 92:r+=`\\${t}`;break;default:if(1<=e&&e<=31){r+=`\\${e.toString(16)} `;break}r+=t}else r+=String.fromCodePoint(65533)}return r}function normalizedDir(e){return t.parse(t.resolve(e.trim())).dir.split(t.sep).join(t.posix.sep)}const s=/^initial-value$/i,o=/^property$/i,n=/^syntax$/i,a=/url\(/i,u=/^url$/i,l=//i,creator=()=>({postcssPlugin:"postcss-rebase-url",prepare(){const t=new WeakSet,i=new Set;return{Once(e){e.walkAtRules(o,(e=>{if(!e.nodes)return;const r=e.nodes.find((e=>{if("decl"===e.type&&n.test(e.prop))return!0}));r&&l.test(r.value)&&i.add(e.params.trim())}))},Declaration(n,{result:l}){if(t.has(n))return;if(n.variable&&!i.has(n.prop))return;if(s.test(n.prop)&&"atrule"===n.parent?.type&&o.test(n.parent.name))return;const{from:c}=l.opts;if(!c)return;if(!n.source?.input.from)return;if(!a.test(n.value))return;const p=normalizedDir(c),f=n.source.input.from.trim();if(!f)return;const d=normalizedDir(f),v=r.parseCommaSeparatedListOfComponentValues(e.tokenize({css:n.value})),m=r.replaceComponentValues(v,(t=>{if(r.isTokenNode(t)&&t.value[0]===e.TokenType.URL){const e=rebase(t.value[4].value.trim(),d,p);if(e)return t.value[4].value=e,t.value[1]=`url(${serializeString(e)})`,t}if(r.isFunctionNode(t)&&u.test(t.getName()))for(const i of t.value)if(!r.isWhitespaceNode(i)&&!r.isCommentNode(i)&&r.isTokenNode(i)&&i.value[0]===e.TokenType.String){const e=rebase(i.value[4].value.trim(),d,p);if(e)return i.value[4].value=e,i.value[1]=`"${serializeString(e)}"`,t;break}})),k=r.stringify(m);k!==n.value&&(n.value=k,t.add(n))}}}});creator.postcss=!0,module.exports=creator; +"use strict";var e=require("@csstools/css-tokenizer"),r=require("@csstools/css-parser-algorithms"),t=require("path");const s=/^([-_a-z0-9]+:)?\/\//i;function rebase(e,r,i){if(e.startsWith("data:"))return!1;if(s.test(e))return!1;if(e.startsWith("/"))return e;if(e.startsWith("#"))return e;try{const r=new URL(e);if(r.port||r.protocol)return!1}catch{}const o=t.posix.resolve(t.posix.join(r,e));return t.posix.relative(i,o)}function serializeString(e){let r="";for(const t of e){const e=t.codePointAt(0);if(void 0!==e)switch(e){case 0:r+=String.fromCodePoint(65533);break;case 127:r+=`\\${e.toString(16)}`;break;case 34:case 39:case 92:r+=`\\${t}`;break;default:if(1<=e&&e<=31){r+=`\\${e.toString(16)} `;break}r+=t}else r+=String.fromCodePoint(65533)}return r}function normalizedDir(e){return t.parse(t.resolve(e.trim())).dir.split(t.sep).join(t.posix.sep)}const i=/^initial-value$/i,o=/^property$/i,n=/^syntax$/i,a=/url\(/i,u=/^url$/i,l=//i,creator=()=>({postcssPlugin:"postcss-rebase-url",prepare(){const t=new WeakSet,s=new Set;return{postcssPlugin:"postcss-rebase-url",Once(e){e.walkAtRules(o,(e=>{if(!e.nodes)return;const r=e.nodes.find((e=>{if("decl"===e.type&&n.test(e.prop))return!0}));r&&l.test(r.value)&&s.add(e.params.trim())}))},Declaration(n,{result:l}){if(t.has(n))return;if(n.variable&&!s.has(n.prop))return;if(i.test(n.prop)&&"atrule"===n.parent?.type&&o.test(n.parent.name))return;const{from:c}=l.opts;if(!c)return;if(!n.source?.input.from)return;if(!a.test(n.value))return;const p=normalizedDir(c),f=n.source.input.from.trim();if(!f)return;const d=normalizedDir(f),v=r.parseCommaSeparatedListOfComponentValues(e.tokenize({css:n.value})),m=r.replaceComponentValues(v,(t=>{if(r.isTokenNode(t)&&t.value[0]===e.TokenType.URL){const e=rebase(t.value[4].value.trim(),d,p);if(e)return t.value[4].value=e,t.value[1]=`url(${serializeString(e)})`,t}if(r.isFunctionNode(t)&&u.test(t.getName()))for(const s of t.value)if(!r.isWhitespaceNode(s)&&!r.isCommentNode(s)&&r.isTokenNode(s)&&s.value[0]===e.TokenType.String){const e=rebase(s.value[4].value.trim(),d,p);if(e)return s.value[4].value=e,s.value[1]=`"${serializeString(e)}"`,t;break}})),g=r.stringify(m);g!==n.value&&(n.value=g,t.add(n))}}}});creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-rebase-url/dist/index.mjs b/plugins/postcss-rebase-url/dist/index.mjs index e1dd47062..09b6f6b17 100644 --- a/plugins/postcss-rebase-url/dist/index.mjs +++ b/plugins/postcss-rebase-url/dist/index.mjs @@ -1 +1 @@ -import{tokenize as e,TokenType as r}from"@csstools/css-tokenizer";import{parseCommaSeparatedListOfComponentValues as t,replaceComponentValues as i,isTokenNode as s,isFunctionNode as o,isWhitespaceNode as a,isCommentNode as n,stringify as u}from"@csstools/css-parser-algorithms";import l from"path";const c=/^([-_a-z0-9]+:)?\/\//i;function rebase(e,r,t){if(e.startsWith("data:"))return!1;if(c.test(e))return!1;if(e.startsWith("/"))return e;if(e.startsWith("#"))return e;try{const r=new URL(e);if(r.port||r.protocol)return!1}catch{}const i=l.posix.resolve(l.posix.join(r,e));return l.posix.relative(t,i)}function serializeString(e){let r="";for(const t of e){const e=t.codePointAt(0);if(void 0!==e)switch(e){case 0:r+=String.fromCodePoint(65533);break;case 127:r+=`\\${e.toString(16)}`;break;case 34:case 39:case 92:r+=`\\${t}`;break;default:if(1<=e&&e<=31){r+=`\\${e.toString(16)} `;break}r+=t}else r+=String.fromCodePoint(65533)}return r}function normalizedDir(e){return l.parse(l.resolve(e.trim())).dir.split(l.sep).join(l.posix.sep)}const f=/^initial-value$/i,p=/^property$/i,v=/^syntax$/i,m=/url\(/i,d=/^url$/i,g=//i,creator=()=>({postcssPlugin:"postcss-rebase-url",prepare(){const l=new WeakSet,c=new Set;return{Once(e){e.walkAtRules(p,(e=>{if(!e.nodes)return;const r=e.nodes.find((e=>{if("decl"===e.type&&v.test(e.prop))return!0}));r&&g.test(r.value)&&c.add(e.params.trim())}))},Declaration(v,{result:g}){if(l.has(v))return;if(v.variable&&!c.has(v.prop))return;if(f.test(v.prop)&&"atrule"===v.parent?.type&&p.test(v.parent.name))return;const{from:b}=g.opts;if(!b)return;if(!v.source?.input.from)return;if(!m.test(v.value))return;const S=normalizedDir(b),h=v.source.input.from.trim();if(!h)return;const $=normalizedDir(h),k=t(e({css:v.value})),z=i(k,(e=>{if(s(e)&&e.value[0]===r.URL){const r=rebase(e.value[4].value.trim(),$,S);if(r)return e.value[4].value=r,e.value[1]=`url(${serializeString(r)})`,e}if(o(e)&&d.test(e.getName()))for(const t of e.value)if(!a(t)&&!n(t)&&s(t)&&t.value[0]===r.String){const r=rebase(t.value[4].value.trim(),$,S);if(r)return t.value[4].value=r,t.value[1]=`"${serializeString(r)}"`,e;break}})),x=u(z);x!==v.value&&(v.value=x,l.add(v))}}}});creator.postcss=!0;export{creator as default}; +import{tokenize as e,TokenType as r}from"@csstools/css-tokenizer";import{parseCommaSeparatedListOfComponentValues as t,replaceComponentValues as s,isTokenNode as i,isFunctionNode as o,isWhitespaceNode as a,isCommentNode as n,stringify as u}from"@csstools/css-parser-algorithms";import l from"path";const c=/^([-_a-z0-9]+:)?\/\//i;function rebase(e,r,t){if(e.startsWith("data:"))return!1;if(c.test(e))return!1;if(e.startsWith("/"))return e;if(e.startsWith("#"))return e;try{const r=new URL(e);if(r.port||r.protocol)return!1}catch{}const s=l.posix.resolve(l.posix.join(r,e));return l.posix.relative(t,s)}function serializeString(e){let r="";for(const t of e){const e=t.codePointAt(0);if(void 0!==e)switch(e){case 0:r+=String.fromCodePoint(65533);break;case 127:r+=`\\${e.toString(16)}`;break;case 34:case 39:case 92:r+=`\\${t}`;break;default:if(1<=e&&e<=31){r+=`\\${e.toString(16)} `;break}r+=t}else r+=String.fromCodePoint(65533)}return r}function normalizedDir(e){return l.parse(l.resolve(e.trim())).dir.split(l.sep).join(l.posix.sep)}const f=/^initial-value$/i,p=/^property$/i,v=/^syntax$/i,m=/url\(/i,d=/^url$/i,g=//i,creator=()=>({postcssPlugin:"postcss-rebase-url",prepare(){const l=new WeakSet,c=new Set;return{postcssPlugin:"postcss-rebase-url",Once(e){e.walkAtRules(p,(e=>{if(!e.nodes)return;const r=e.nodes.find((e=>{if("decl"===e.type&&v.test(e.prop))return!0}));r&&g.test(r.value)&&c.add(e.params.trim())}))},Declaration(v,{result:g}){if(l.has(v))return;if(v.variable&&!c.has(v.prop))return;if(f.test(v.prop)&&"atrule"===v.parent?.type&&p.test(v.parent.name))return;const{from:b}=g.opts;if(!b)return;if(!v.source?.input.from)return;if(!m.test(v.value))return;const S=normalizedDir(b),h=v.source.input.from.trim();if(!h)return;const $=normalizedDir(h),k=t(e({css:v.value})),z=s(k,(e=>{if(i(e)&&e.value[0]===r.URL){const r=rebase(e.value[4].value.trim(),$,S);if(r)return e.value[4].value=r,e.value[1]=`url(${serializeString(r)})`,e}if(o(e)&&d.test(e.getName()))for(const t of e.value)if(!a(t)&&!n(t)&&i(t)&&t.value[0]===r.String){const r=rebase(t.value[4].value.trim(),$,S);if(r)return t.value[4].value=r,t.value[1]=`"${serializeString(r)}"`,e;break}})),x=u(z);x!==v.value&&(v.value=x,l.add(v))}}}});creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-rebase-url/src/index.ts b/plugins/postcss-rebase-url/src/index.ts index 9d60c0e52..dd5159d25 100644 --- a/plugins/postcss-rebase-url/src/index.ts +++ b/plugins/postcss-rebase-url/src/index.ts @@ -1,4 +1,4 @@ -import type { PluginCreator, Declaration, AtRule } from 'postcss'; +import type { PluginCreator, Declaration, AtRule, Plugin } from 'postcss'; import { TokenType, tokenize } from '@csstools/css-tokenizer'; import { isCommentNode, isFunctionNode, isTokenNode, isWhitespaceNode, parseCommaSeparatedListOfComponentValues, replaceComponentValues, stringify } from '@csstools/css-parser-algorithms'; import { rebase } from './rebase'; @@ -18,12 +18,13 @@ const URL_SYNTAX_REGEX = //i; const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-rebase-url', - prepare() { + prepare(): Plugin { const visited = new WeakSet(); const registeredPropsWithURL_Type = new Set(); return { - Once(root) { + postcssPlugin: 'postcss-rebase-url', + Once(root): void { root.walkAtRules(PROPERTY_NAME_REGEX, (atRule) => { if (!atRule.nodes) { return; @@ -44,7 +45,7 @@ const creator: PluginCreator = () => { } }); }, - Declaration(decl, { result }) { + Declaration(decl, { result }): void { if (visited.has(decl)) { return; } diff --git a/plugins/postcss-relative-color-syntax/dist/index.cjs b/plugins/postcss-relative-color-syntax/dist/index.cjs index a02856097..785be9f63 100644 --- a/plugins/postcss-relative-color-syntax/dist/index.cjs +++ b/plugins/postcss-relative-color-syntax/dist/index.cjs @@ -1 +1 @@ -"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),r=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-tokenizer");const o=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(/i,l=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(\s*?from/i,i=/^(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)$/i,n=/from/i,basePlugin=s=>({postcssPlugin:"postcss-relative-color-syntax",Declaration:c=>{const u=c.value;if(!o.test(u)||!n.test(u))return;if(t.hasFallback(c))return;if(t.hasSupportsAtRuleAncestor(c,l))return;const p=a.tokenize({css:u}),g=r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(p),(s=>{if(!r.isFunctionNode(s)||!i.test(s.getName()))return;const t=e.color(s);return t&&!t.syntaxFlags.has(e.SyntaxFlag.Experimental)&&!t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)&&t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)?e.serializeRGB(t):void 0})),b=r.stringify(g);if(b===u)return;let y=b;s?.subFeatures.displayP3&&(y=r.stringify(r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(p),(s=>{if(!r.isFunctionNode(s)||!i.test(s.getName()))return;const t=e.color(s);return t&&!t.syntaxFlags.has(e.SyntaxFlag.Experimental)&&!t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)&&t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),c.cloneBefore({value:b}),s?.subFeatures.displayP3&&y!==b&&c.cloneBefore({value:y}),s?.preserve||c.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-relative-color-syntax",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; +"use strict";var s=require("@csstools/postcss-progressive-custom-properties"),e=require("@csstools/css-color-parser"),t=require("@csstools/utilities"),r=require("@csstools/css-parser-algorithms"),a=require("@csstools/css-tokenizer");const o=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(/i,l=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(\s*?from/i,i=/^(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)$/i,n=/from/i,basePlugin=s=>({postcssPlugin:"postcss-relative-color-syntax",Declaration(c){const u=c.value;if(!o.test(u)||!n.test(u))return;if(t.hasFallback(c))return;if(t.hasSupportsAtRuleAncestor(c,l))return;const p=a.tokenize({css:u}),g=r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(p),(s=>{if(!r.isFunctionNode(s)||!i.test(s.getName()))return;const t=e.color(s);return t&&!t.syntaxFlags.has(e.SyntaxFlag.Experimental)&&!t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)&&t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)?e.serializeRGB(t):void 0})),b=r.stringify(g);if(b===u)return;let y=b;s?.subFeatures.displayP3&&(y=r.stringify(r.replaceComponentValues(r.parseCommaSeparatedListOfComponentValues(p),(s=>{if(!r.isFunctionNode(s)||!i.test(s.getName()))return;const t=e.color(s);return t&&!t.syntaxFlags.has(e.SyntaxFlag.Experimental)&&!t.syntaxFlags.has(e.SyntaxFlag.HasNoneKeywords)&&t.syntaxFlags.has(e.SyntaxFlag.RelativeColorSyntax)?e.colorDataFitsRGB_Gamut(t)?e.serializeRGB(t):e.serializeP3(t):void 0})))),c.cloneBefore({value:b}),s?.subFeatures.displayP3&&y!==b&&c.cloneBefore({value:y}),s?.preserve||c.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-relative-color-syntax",plugins:[s(),basePlugin(t)]}:basePlugin(t)};postcssPlugin.postcss=!0,module.exports=postcssPlugin; diff --git a/plugins/postcss-relative-color-syntax/dist/index.mjs b/plugins/postcss-relative-color-syntax/dist/index.mjs index 75eefbafe..5e2b05fd9 100644 --- a/plugins/postcss-relative-color-syntax/dist/index.mjs +++ b/plugins/postcss-relative-color-syntax/dist/index.mjs @@ -1 +1 @@ -import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as o,serializeRGB as r,colorDataFitsRGB_Gamut as t,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as c,parseCommaSeparatedListOfComponentValues as n,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as b}from"@csstools/css-tokenizer";const m=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(/i,g=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(\s*?from/i,h=/^(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)$/i,y=/from/i,basePlugin=s=>({postcssPlugin:"postcss-relative-color-syntax",Declaration:f=>{const v=f.value;if(!m.test(v)||!y.test(v))return;if(l(f))return;if(i(f,g))return;const x=b({css:v}),F=c(n(x),(s=>{if(!u(s)||!h.test(s.getName()))return;const t=e(s);return t&&!t.syntaxFlags.has(o.Experimental)&&!t.syntaxFlags.has(o.HasNoneKeywords)&&t.syntaxFlags.has(o.RelativeColorSyntax)?r(t):void 0})),P=p(F);if(P===v)return;let d=P;s?.subFeatures.displayP3&&(d=p(c(n(x),(s=>{if(!u(s)||!h.test(s.getName()))return;const l=e(s);return l&&!l.syntaxFlags.has(o.Experimental)&&!l.syntaxFlags.has(o.HasNoneKeywords)&&l.syntaxFlags.has(o.RelativeColorSyntax)?t(l)?r(l):a(l):void 0})))),f.cloneBefore({value:P}),s?.subFeatures.displayP3&&d!==P&&f.cloneBefore({value:d}),s?.preserve||f.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const o=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return o.subFeatures=Object.assign({displayP3:!0},o.subFeatures),o.enableProgressiveCustomProperties&&(o.preserve||o.subFeatures.displayP3)?{postcssPlugin:"postcss-relative-color-syntax",plugins:[s(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; +import s from"@csstools/postcss-progressive-custom-properties";import{color as e,SyntaxFlag as o,serializeRGB as r,colorDataFitsRGB_Gamut as t,serializeP3 as a}from"@csstools/css-color-parser";import{hasFallback as l,hasSupportsAtRuleAncestor as i}from"@csstools/utilities";import{replaceComponentValues as c,parseCommaSeparatedListOfComponentValues as n,isFunctionNode as u,stringify as p}from"@csstools/css-parser-algorithms";import{tokenize as b}from"@csstools/css-tokenizer";const m=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(/i,g=/\b(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)\(\s*?from/i,h=/^(?:rgb|hsl|hwb|lab|lch|oklch|oklab|color)$/i,y=/from/i,basePlugin=s=>({postcssPlugin:"postcss-relative-color-syntax",Declaration(f){const v=f.value;if(!m.test(v)||!y.test(v))return;if(l(f))return;if(i(f,g))return;const x=b({css:v}),F=c(n(x),(s=>{if(!u(s)||!h.test(s.getName()))return;const t=e(s);return t&&!t.syntaxFlags.has(o.Experimental)&&!t.syntaxFlags.has(o.HasNoneKeywords)&&t.syntaxFlags.has(o.RelativeColorSyntax)?r(t):void 0})),P=p(F);if(P===v)return;let d=P;s?.subFeatures.displayP3&&(d=p(c(n(x),(s=>{if(!u(s)||!h.test(s.getName()))return;const l=e(s);return l&&!l.syntaxFlags.has(o.Experimental)&&!l.syntaxFlags.has(o.HasNoneKeywords)&&l.syntaxFlags.has(o.RelativeColorSyntax)?t(l)?r(l):a(l):void 0})))),f.cloneBefore({value:P}),s?.subFeatures.displayP3&&d!==P&&f.cloneBefore({value:d}),s?.preserve||f.remove()}});basePlugin.postcss=!0;const postcssPlugin=e=>{const o=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return o.subFeatures=Object.assign({displayP3:!0},o.subFeatures),o.enableProgressiveCustomProperties&&(o.preserve||o.subFeatures.displayP3)?{postcssPlugin:"postcss-relative-color-syntax",plugins:[s(),basePlugin(o)]}:basePlugin(o)};postcssPlugin.postcss=!0;export{postcssPlugin as default}; diff --git a/plugins/postcss-relative-color-syntax/src/index.ts b/plugins/postcss-relative-color-syntax/src/index.ts index f32c290bd..64a8f1656 100644 --- a/plugins/postcss-relative-color-syntax/src/index.ts +++ b/plugins/postcss-relative-color-syntax/src/index.ts @@ -21,7 +21,7 @@ const FROM_REGEX = /from/i; const basePlugin: PluginCreator = (opts?: basePluginOptions) => { return { postcssPlugin: 'postcss-relative-color-syntax', - Declaration: (decl: Declaration) => { + Declaration(decl: Declaration): void { const originalValue = decl.value; if (!FUNCTION_REGEX.test(originalValue) || !FROM_REGEX.test(originalValue)) { return; diff --git a/plugins/postcss-scope-pseudo-class/dist/index.cjs b/plugins/postcss-scope-pseudo-class/dist/index.cjs index ef6057c17..e93131df7 100644 --- a/plugins/postcss-scope-pseudo-class/dist/index.cjs +++ b/plugins/postcss-scope-pseudo-class/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");const creator=s=>{const r=Object.assign({preserve:!1},s);return{postcssPlugin:"postcss-scope-pseudo-class",prepare(){const s=new WeakSet;return{Rule(t,{result:o}){if(!t.selector.toLowerCase().includes(":scope"))return;if(s.has(t))return;{let e=t.parent;for(;e;){if("atrule"===e.type&&"scope"===e.name.toLowerCase())return;e=e.parent}}let a=t.selector;try{const s=e().astSync(a);if(!s)return;s.walkPseudos((e=>{if(":has"===e.value.toLowerCase())return!1;":scope"===e.value.toLowerCase()&&(e.value=":root")})),a=s.toString()}catch(e){t.warn(o,`Failed to parse selector : "${t.selector}" with message: "${e instanceof Error?e.message:e}"`)}a!==t.selector&&(s.add(t),t.cloneBefore({selector:a}),r.preserve||t.remove())}}}}};creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");const creator=s=>{const r=Object.assign({preserve:!1},s);return{postcssPlugin:"postcss-scope-pseudo-class",prepare(){const s=new WeakSet;return{postcssPlugin:"postcss-scope-pseudo-class",Rule(t,{result:o}){if(!t.selector.toLowerCase().includes(":scope"))return;if(s.has(t))return;{let e=t.parent;for(;e;){if("atrule"===e.type&&"scope"===e.name.toLowerCase())return;e=e.parent}}let c=t.selector;try{const s=e().astSync(c);if(!s)return;s.walkPseudos((e=>{if(":has"===e.value.toLowerCase())return!1;":scope"===e.value.toLowerCase()&&(e.value=":root")})),c=s.toString()}catch(e){t.warn(o,`Failed to parse selector : "${t.selector}" with message: "${e instanceof Error?e.message:e}"`)}c!==t.selector&&(s.add(t),t.cloneBefore({selector:c}),r.preserve||t.remove())}}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-scope-pseudo-class/dist/index.mjs b/plugins/postcss-scope-pseudo-class/dist/index.mjs index b814412b6..8c88f4f62 100644 --- a/plugins/postcss-scope-pseudo-class/dist/index.mjs +++ b/plugins/postcss-scope-pseudo-class/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";const creator=s=>{const r=Object.assign({preserve:!1},s);return{postcssPlugin:"postcss-scope-pseudo-class",prepare(){const s=new WeakSet;return{Rule(t,{result:o}){if(!t.selector.toLowerCase().includes(":scope"))return;if(s.has(t))return;{let e=t.parent;for(;e;){if("atrule"===e.type&&"scope"===e.name.toLowerCase())return;e=e.parent}}let a=t.selector;try{const s=e().astSync(a);if(!s)return;s.walkPseudos((e=>{if(":has"===e.value.toLowerCase())return!1;":scope"===e.value.toLowerCase()&&(e.value=":root")})),a=s.toString()}catch(e){t.warn(o,`Failed to parse selector : "${t.selector}" with message: "${e instanceof Error?e.message:e}"`)}a!==t.selector&&(s.add(t),t.cloneBefore({selector:a}),r.preserve||t.remove())}}}}};creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";const creator=s=>{const r=Object.assign({preserve:!1},s);return{postcssPlugin:"postcss-scope-pseudo-class",prepare(){const s=new WeakSet;return{postcssPlugin:"postcss-scope-pseudo-class",Rule(t,{result:o}){if(!t.selector.toLowerCase().includes(":scope"))return;if(s.has(t))return;{let e=t.parent;for(;e;){if("atrule"===e.type&&"scope"===e.name.toLowerCase())return;e=e.parent}}let a=t.selector;try{const s=e().astSync(a);if(!s)return;s.walkPseudos((e=>{if(":has"===e.value.toLowerCase())return!1;":scope"===e.value.toLowerCase()&&(e.value=":root")})),a=s.toString()}catch(e){t.warn(o,`Failed to parse selector : "${t.selector}" with message: "${e instanceof Error?e.message:e}"`)}a!==t.selector&&(s.add(t),t.cloneBefore({selector:a}),r.preserve||t.remove())}}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-scope-pseudo-class/src/index.ts b/plugins/postcss-scope-pseudo-class/src/index.ts index d746eb737..73a23d95e 100644 --- a/plugins/postcss-scope-pseudo-class/src/index.ts +++ b/plugins/postcss-scope-pseudo-class/src/index.ts @@ -1,4 +1,4 @@ -import type { AtRule, Container, Document, Node, PluginCreator } from 'postcss'; +import type { AtRule, Container, Document, Node, Plugin, PluginCreator } from 'postcss'; import parser from 'postcss-selector-parser'; /** postcss-scope-pseudo-class plugin options */ @@ -19,11 +19,12 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-scope-pseudo-class', - prepare() { + prepare(): Plugin { const transformedNodes = new WeakSet(); return { - Rule(rule, { result }) { + postcssPlugin: 'postcss-scope-pseudo-class', + Rule(rule, { result }): void { if (!rule.selector.toLowerCase().includes(':scope')) { return; } diff --git a/plugins/postcss-selector-not/dist/index.cjs b/plugins/postcss-selector-not/dist/index.cjs index fa5c279f5..07e00e5ed 100644 --- a/plugins/postcss-selector-not/dist/index.cjs +++ b/plugins/postcss-selector-not/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("postcss-selector-parser");function cleanupWhitespace(e){e.spaces&&(e.spaces.after="",e.spaces.before=""),e.nodes&&e.nodes.length>0&&(e.nodes[0]&&e.nodes[0].spaces&&(e.nodes[0].spaces.before=""),e.nodes[e.nodes.length-1]&&e.nodes[e.nodes.length-1].spaces&&(e.nodes[e.nodes.length-1].spaces.after=""))}const creator=()=>({postcssPlugin:"postcss-selector-not",Rule:(s,{result:o})=>{if(s.selector&&s.selector.toLowerCase().includes(":not("))try{const o=e().astSync(s.selector);o.walkPseudos((s=>{if(":not"!==s.value.toLowerCase())return;if(!s.nodes||s.nodes.length<2)return;const o=[];s.nodes.forEach((s=>{cleanupWhitespace(s);const t=e.pseudo({value:":not",nodes:[s]});o.push(t)})),s.replaceWith(...o)}));const t=o.toString();t!==s.selector&&s.replaceWith(s.clone({selector:t}))}catch(e){s.warn(o,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}}});creator.postcss=!0,module.exports=creator; +"use strict";var e=require("postcss-selector-parser");function cleanupWhitespace(e){e.spaces&&(e.spaces.after="",e.spaces.before=""),e.nodes&&e.nodes.length>0&&(e.nodes[0]&&e.nodes[0].spaces&&(e.nodes[0].spaces.before=""),e.nodes[e.nodes.length-1]&&e.nodes[e.nodes.length-1].spaces&&(e.nodes[e.nodes.length-1].spaces.after=""))}const creator=()=>({postcssPlugin:"postcss-selector-not",Rule(s,{result:o}){if(s.selector&&s.selector.toLowerCase().includes(":not("))try{const o=e().astSync(s.selector);o.walkPseudos((s=>{if(":not"!==s.value.toLowerCase())return;if(!s.nodes||s.nodes.length<2)return;const o=[];s.nodes.forEach((s=>{cleanupWhitespace(s);const t=e.pseudo({value:":not",nodes:[s]});o.push(t)})),s.replaceWith(...o)}));const t=o.toString();t!==s.selector&&s.replaceWith(s.clone({selector:t}))}catch(e){s.warn(o,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}}});creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-selector-not/dist/index.mjs b/plugins/postcss-selector-not/dist/index.mjs index ffbe2ae76..7c8b39e55 100644 --- a/plugins/postcss-selector-not/dist/index.mjs +++ b/plugins/postcss-selector-not/dist/index.mjs @@ -1 +1 @@ -import e from"postcss-selector-parser";function cleanupWhitespace(e){e.spaces&&(e.spaces.after="",e.spaces.before=""),e.nodes&&e.nodes.length>0&&(e.nodes[0]&&e.nodes[0].spaces&&(e.nodes[0].spaces.before=""),e.nodes[e.nodes.length-1]&&e.nodes[e.nodes.length-1].spaces&&(e.nodes[e.nodes.length-1].spaces.after=""))}const creator=()=>({postcssPlugin:"postcss-selector-not",Rule:(s,{result:o})=>{if(s.selector&&s.selector.toLowerCase().includes(":not("))try{const o=e().astSync(s.selector);o.walkPseudos((s=>{if(":not"!==s.value.toLowerCase())return;if(!s.nodes||s.nodes.length<2)return;const o=[];s.nodes.forEach((s=>{cleanupWhitespace(s);const t=e.pseudo({value:":not",nodes:[s]});o.push(t)})),s.replaceWith(...o)}));const t=o.toString();t!==s.selector&&s.replaceWith(s.clone({selector:t}))}catch(e){s.warn(o,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}}});creator.postcss=!0;export{creator as default}; +import e from"postcss-selector-parser";function cleanupWhitespace(e){e.spaces&&(e.spaces.after="",e.spaces.before=""),e.nodes&&e.nodes.length>0&&(e.nodes[0]&&e.nodes[0].spaces&&(e.nodes[0].spaces.before=""),e.nodes[e.nodes.length-1]&&e.nodes[e.nodes.length-1].spaces&&(e.nodes[e.nodes.length-1].spaces.after=""))}const creator=()=>({postcssPlugin:"postcss-selector-not",Rule(s,{result:o}){if(s.selector&&s.selector.toLowerCase().includes(":not("))try{const o=e().astSync(s.selector);o.walkPseudos((s=>{if(":not"!==s.value.toLowerCase())return;if(!s.nodes||s.nodes.length<2)return;const o=[];s.nodes.forEach((s=>{cleanupWhitespace(s);const t=e.pseudo({value:":not",nodes:[s]});o.push(t)})),s.replaceWith(...o)}));const t=o.toString();t!==s.selector&&s.replaceWith(s.clone({selector:t}))}catch(e){s.warn(o,`Failed to parse selector : "${s.selector}" with message: "${e instanceof Error?e.message:e}"`)}}});creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-selector-not/src/index.ts b/plugins/postcss-selector-not/src/index.ts index 7d810a3dc..a0983a762 100644 --- a/plugins/postcss-selector-not/src/index.ts +++ b/plugins/postcss-selector-not/src/index.ts @@ -1,7 +1,7 @@ import type { PluginCreator } from 'postcss'; import parser from 'postcss-selector-parser'; -function cleanupWhitespace(node: parser.Selector) { +function cleanupWhitespace(node: parser.Selector): void { if (node.spaces) { node.spaces.after = ''; node.spaces.before = ''; @@ -27,7 +27,7 @@ export type pluginOptions = Record; const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-selector-not', - Rule: (rule, { result }) => { + Rule(rule, { result }): void { if (!rule.selector || !rule.selector.toLowerCase().includes(':not(')) { return; } diff --git a/plugins/postcss-slow-plugins/dist/index.cjs b/plugins/postcss-slow-plugins/dist/index.cjs index e7ddd5d97..a36f363ae 100644 --- a/plugins/postcss-slow-plugins/dist/index.cjs +++ b/plugins/postcss-slow-plugins/dist/index.cjs @@ -1 +1 @@ -"use strict";const creator=s=>{const o=s?.ignore??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{console.log("Analyzing with file:\n "+s.source?.input.from+"\n");const e=s.source?.input.css??"",i=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],r=(await t(i).process(e??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},c=await medianDuration((async()=>{(await t(i).process(e??"",n.opts)).css}));{const s=[];for(let p=0;ps!==i[p])),a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${c.toFixed(3)}ms`,"kb's per ms":`${(r/c).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let p=0;ps===i[p]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0,module.exports=creator; +"use strict";const creator=s=>{const o=s?.ignore??[];return{postcssPlugin:"postcss-slow-plugins",async Once(s,{result:n,postcss:t}){console.log("Analyzing with file:\n "+s.source?.input.from+"\n");const e=s.source?.input.css??"",i=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],r=(await t(i).process(e??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},c=await medianDuration((async()=>{(await t(i).process(e??"",n.opts)).css}));{const s=[];for(let p=0;ps!==i[p])),a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${c.toFixed(3)}ms`,"kb's per ms":`${(r/c).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let p=0;ps===i[p]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0,module.exports=creator; diff --git a/plugins/postcss-slow-plugins/dist/index.mjs b/plugins/postcss-slow-plugins/dist/index.mjs index 073cd31c7..93db2e9e9 100644 --- a/plugins/postcss-slow-plugins/dist/index.mjs +++ b/plugins/postcss-slow-plugins/dist/index.mjs @@ -1 +1 @@ -const creator=s=>{const o=s?.ignore??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{console.log("Analyzing with file:\n "+s.source?.input.from+"\n");const e=s.source?.input.css??"",i=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],r=(await t(i).process(e??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},c=await medianDuration((async()=>{(await t(i).process(e??"",n.opts)).css}));{const s=[];for(let p=0;ps!==i[p])),a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${c.toFixed(3)}ms`,"kb's per ms":`${(r/c).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let p=0;ps===i[p]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0;export{creator as default}; +const creator=s=>{const o=s?.ignore??[];return{postcssPlugin:"postcss-slow-plugins",async Once(s,{result:n,postcss:t}){console.log("Analyzing with file:\n "+s.source?.input.from+"\n");const e=s.source?.input.css??"",i=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],r=(await t(i).process(e??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},c=await medianDuration((async()=>{(await t(i).process(e??"",n.opts)).css}));{const s=[];for(let p=0;ps!==i[p])),a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${c.toFixed(3)}ms`,"kb's per ms":`${(r/c).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let p=0;ps===i[p]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(e??"",n.opts)).css})),d=c-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(r/a).toFixed(3)}kb/ms`,drop:d,name:l,"index in plugins list":p})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0;export{creator as default}; diff --git a/plugins/postcss-slow-plugins/src/index.ts b/plugins/postcss-slow-plugins/src/index.ts index a1e58d846..69035dc59 100644 --- a/plugins/postcss-slow-plugins/src/index.ts +++ b/plugins/postcss-slow-plugins/src/index.ts @@ -11,7 +11,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-slow-plugins', - Once: async (root, { result, postcss }) => { + async Once(root, { result, postcss }): Promise { console.log('Analyzing with file:\n ' + root.source?.input.from + '\n'); const inputCSS = root.source?.input.css ?? ''; @@ -22,8 +22,8 @@ const creator: PluginCreator = (opts?: pluginOptions) => { const outputCSS_KB = (await postcss(plugins).process(inputCSS ?? '', result.opts)).css.length / 1024; - const medianDuration = async (cb: () => Promise) => { - const durations = []; + const medianDuration = async (cb: () => Promise): Promise => { + const durations: Array = []; for (let i = 0; i < 21; i++) { const start = performance.now(); await cb(); diff --git a/plugins/postcss-stepped-value-functions/src/index.ts b/plugins/postcss-stepped-value-functions/src/index.ts index c25c5b406..fcb308578 100644 --- a/plugins/postcss-stepped-value-functions/src/index.ts +++ b/plugins/postcss-stepped-value-functions/src/index.ts @@ -21,7 +21,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-stepped-value-functions', - Declaration(decl) { + Declaration(decl): void { if (!FUNCTION_CALL_REGEX.test(decl.value)) { return; } diff --git a/plugins/postcss-text-decoration-shorthand/dist/index.cjs b/plugins/postcss-text-decoration-shorthand/dist/index.cjs index 44f618a95..804ffc0d3 100644 --- a/plugins/postcss-text-decoration-shorthand/dist/index.cjs +++ b/plugins/postcss-text-decoration-shorthand/dist/index.cjs @@ -1 +1 @@ -"use strict";var e=require("@csstools/color-helpers"),o=require("postcss-value-parser");const r=/^text-decoration$/i,creator=e=>{const c=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-text-decoration-shorthand",prepare(){const e=new Map;return{OnceExit:()=>{e.clear()},Declaration:u=>{if(!r.test(u.prop))return;const a=u.parent;if(!a)return;const i=a.index(u);if(a.nodes.some((o=>"decl"===o.type&&r.test(o.prop)&&e.get(u.value)===o.value&&a.index(o)!==i)))return;const d=o(u.value),p=d.nodes.filter((e=>"space"!==e.type&&"comment"!==e.type));if(p.find((e=>"var"===e.value.toLowerCase()&&"function"===e.type)))return;if(p.find((e=>"word"===e.type&&t.includes(e.value))))return;const f={line:[],style:null,color:null,thickness:null};for(let e=0;e{const c=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-text-decoration-shorthand",prepare(){const o=new Map;return{postcssPlugin:"postcss-text-decoration-shorthand",OnceExit(){o.clear()},Declaration(u){if(!r.test(u.prop))return;const a=u.parent;if(!a)return;const i=a.index(u);if(a.nodes.some((e=>"decl"===e.type&&r.test(e.prop)&&o.get(u.value)===e.value&&a.index(e)!==i)))return;const d=e(u.value),p=d.nodes.filter((e=>"space"!==e.type&&"comment"!==e.type));if(p.find((e=>"var"===e.value.toLowerCase()&&"function"===e.type)))return;if(p.find((e=>"word"===e.type&&t.includes(e.value))))return;const f={line:[],style:null,color:null,thickness:null};for(let o=0;o{const c=Object.assign({preserve:!0},e);return{postcssPlugin:"postcss-text-decoration-shorthand",prepare(){const e=new Map;return{OnceExit:()=>{e.clear()},Declaration:a=>{if(!r.test(a.prop))return;const u=a.parent;if(!u)return;const i=u.index(a);if(u.nodes.some((o=>"decl"===o.type&&r.test(o.prop)&&e.get(a.value)===o.value&&u.index(o)!==i)))return;const d=o(a.value),p=d.nodes.filter((e=>"space"!==e.type&&"comment"!==e.type));if(p.find((e=>"var"===e.value.toLowerCase()&&"function"===e.type)))return;if(p.find((e=>"word"===e.type&&t.includes(e.value))))return;const f={line:[],style:null,color:null,thickness:null};for(let e=0;e{const c=Object.assign({preserve:!0},o);return{postcssPlugin:"postcss-text-decoration-shorthand",prepare(){const o=new Map;return{postcssPlugin:"postcss-text-decoration-shorthand",OnceExit(){o.clear()},Declaration(a){if(!r.test(a.prop))return;const u=a.parent;if(!u)return;const i=u.index(a);if(u.nodes.some((e=>"decl"===e.type&&r.test(e.prop)&&o.get(a.value)===e.value&&u.index(e)!==i)))return;const d=e(a.value),p=d.nodes.filter((e=>"space"!==e.type&&"comment"!==e.type));if(p.find((e=>"var"===e.value.toLowerCase()&&"function"===e.type)))return;if(p.find((e=>"word"===e.type&&t.includes(e.value))))return;const f={line:[],style:null,color:null,thickness:null};for(let o=0;o = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-text-decoration-shorthand', - prepare() { + prepare(): Plugin { const convertedValues : Map = new Map(); return { - OnceExit: () => { + postcssPlugin: 'postcss-text-decoration-shorthand', + OnceExit(): void { convertedValues.clear(); }, - Declaration: (decl) => { + Declaration(decl): void { if (!IS_TEXT_DECORATION_REGEX.test(decl.prop)) { return; } @@ -259,7 +260,7 @@ creator.postcss = true; export default creator; -function nodeIsAColor(node: valueParser.Node) { +function nodeIsAColor(node: valueParser.Node): boolean { if ('word' === node.type && node.value.startsWith('#')) { return true; } @@ -334,7 +335,7 @@ const colorNames = [ ...Object.keys(namedColors), ]; -function genericNodeParts() { +function genericNodeParts(): { before: '', after: '', sourceIndex: 0, sourceEndIndex: 0 } { return { before: '', after: '', diff --git a/plugins/postcss-todo-or-die/src/index.ts b/plugins/postcss-todo-or-die/src/index.ts index 2cbd35da5..f1adb4eb4 100644 --- a/plugins/postcss-todo-or-die/src/index.ts +++ b/plugins/postcss-todo-or-die/src/index.ts @@ -17,7 +17,7 @@ const creator: PluginCreator = () => { return { postcssPlugin: 'postcss-todo-or-die', - async Once(root, { result }) { + async Once(root, { result }): Promise { const atRules: Array = []; root.walkAtRules((atRule) => { @@ -33,7 +33,7 @@ const creator: PluginCreator = () => { }); for (const atRule of atRules) { - const errorHandler = (err: ParseError) => { + const errorHandler = (err: ParseError): void => { throw atRule.error(err.message); }; diff --git a/plugins/postcss-trigonometric-functions/src/index.ts b/plugins/postcss-trigonometric-functions/src/index.ts index 50bfd9229..8e2ab39e2 100644 --- a/plugins/postcss-trigonometric-functions/src/index.ts +++ b/plugins/postcss-trigonometric-functions/src/index.ts @@ -21,7 +21,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-trigonometric-functions', - Declaration(decl) { + Declaration(decl): void { if (!FUNCTION_CALL_REGEXP.test(decl.value)) { return; } diff --git a/plugins/postcss-unset-value/src/index.ts b/plugins/postcss-unset-value/src/index.ts index 688ae47a9..089513340 100644 --- a/plugins/postcss-unset-value/src/index.ts +++ b/plugins/postcss-unset-value/src/index.ts @@ -13,7 +13,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-unset-value', - Declaration(decl) { + Declaration(decl): void { if (decl.value.toLowerCase() !== 'unset') { return; }