summaryrefslogtreecommitdiff
path: root/node_modules/@csstools/css-tokenizer
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/@csstools/css-tokenizer
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/@csstools/css-tokenizer')
-rw-r--r--node_modules/@csstools/css-tokenizer/CHANGELOG.md54
-rw-r--r--node_modules/@csstools/css-tokenizer/LICENSE.md20
-rw-r--r--node_modules/@csstools/css-tokenizer/README.md108
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/four-code-points-would-start-cdo.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/matches-url-ident.d.ts1
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-cdc.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-ident-sequence.d.ts3
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-number.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-unicode-range.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-are-valid-escape.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-start-comment.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/code-points/code-points.d.ts96
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/code-points/ranges.d.ts13
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/bad-url.d.ts3
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/comment.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/escaped-code-point.d.ts3
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/hash-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/ident-like-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/ident-sequence.d.ts3
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/number.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/numeric-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/string-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/unicode-range-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/url-token.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/consume/whitespace-token.d.ts3
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/index.cjs1
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/index.d.ts9
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/index.mjs1
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/interfaces/code-point-reader.d.ts12
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/interfaces/context.d.ts4
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/interfaces/error.d.ts9
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/interfaces/token.d.ts137
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/reader.d.ts15
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/stringify.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/tokenizer.d.ts21
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/util/clone-tokens.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/dist/util/mutations.d.ts2
-rw-r--r--node_modules/@csstools/css-tokenizer/package.json73
38 files changed, 639 insertions, 0 deletions
diff --git a/node_modules/@csstools/css-tokenizer/CHANGELOG.md b/node_modules/@csstools/css-tokenizer/CHANGELOG.md
new file mode 100644
index 00000000..ee539e2a
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/CHANGELOG.md
@@ -0,0 +1,54 @@
+# Changes to CSS Tokenizer
+
+### 2.2.1
+
+_September 24, 2023_
+
+- Small performance improvements
+
+### 2.2.0
+
+_July 24, 2023_
+
+- Add support for `unicode-range-token`
+- Add `signCharacter` to `DimensionToken`, `NumberToken` and `PercentageToken`
+- Correctly tokenize negative zero `-0`
+
+### 2.1.1
+
+_April 10, 2023_
+
+- Document `tokenize` helper function
+
+### 2.1.0
+
+_February 21, 2023_
+
+- Add `tokenize` helper function
+
+### 2.0.2
+
+_February 13, 2023_
+
+- Relax `isToken` to match artificial tokens that correctly follow the interface.
+
+### 2.0.1
+
+_January 28, 2023_
+
+- Improve `types` declaration in `package.json`
+
+### 2.0.0
+
+_January 19, 2023_
+
+- Simplify `Reader` interface (breaking)
+- Change the `ParseError` interface, this is now a subclass of `Error` (breaking)
+- Remove the `commentsAreTokens` option as `true` was the only desirable value (breaking)
+- Improve performance
+
+### 1.0.0
+
+_November 14, 2022_
+
+- Initial version
diff --git a/node_modules/@csstools/css-tokenizer/LICENSE.md b/node_modules/@csstools/css-tokenizer/LICENSE.md
new file mode 100644
index 00000000..af5411fa
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/LICENSE.md
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2022 Romain Menke, Antonio Laguna <antonio@laguna.es>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@csstools/css-tokenizer/README.md b/node_modules/@csstools/css-tokenizer/README.md
new file mode 100644
index 00000000..810e47c8
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/README.md
@@ -0,0 +1,108 @@
+# CSS Tokenizer
+
+[<img alt="npm version" src="https://img.shields.io/npm/v/@csstools/css-tokenizer.svg" height="20">][npm-url]
+[<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/workflows/test/badge.svg" height="20">][cli-url]
+[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
+
+Implemented from : https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/
+
+## Usage
+
+Add [CSS Tokenizer] to your project:
+
+```bash
+npm install @csstools/css-tokenizer --save-dev
+```
+
+```js
+import { tokenizer, TokenType } from '@csstools/css-tokenizer';
+
+const myCSS = `@media only screen and (min-width: 768rem) {
+ .foo {
+ content: 'Some content!' !important;
+ }
+}
+`;
+
+const t = tokenizer({
+ css: myCSS,
+});
+
+while (true) {
+ const token = t.nextToken();
+ if (token[0] === TokenType.EOF) {
+ break;
+ }
+
+ console.log(token);
+}
+```
+
+Or use the `tokenize` helper function:
+
+```js
+import { tokenize } from '@csstools/css-tokenizer';
+
+const myCSS = `@media only screen and (min-width: 768rem) {
+ .foo {
+ content: 'Some content!' !important;
+ }
+}
+`;
+
+const tokens = tokenize({
+ css: myCSS,
+});
+
+console.log(tokens);
+```
+
+### Options
+
+```ts
+{
+ onParseError?: (error: ParseError) => void
+}
+```
+
+#### `onParseError`
+
+The tokenizer is forgiving and won't stop when a parse error is encountered.
+Parse errors also aren't tokens.
+
+To receive parsing error information you can set a callback.
+
+```js
+import { tokenizer, TokenType } from '@csstools/css-tokenizer';
+
+const t = tokenizer({
+ css: '\\',
+}, { onParseError: (err) => console.warn(err) });
+
+while (true) {
+ const token = t.nextToken();
+ if (token[0] === TokenType.EOF) {
+ break;
+ }
+}
+```
+
+Parser errors will try to inform you about the point in the tokenizer logic the error happened.
+This tells you the kind of error.
+
+## Goals and non-goals
+
+Things this package aims to be:
+- specification compliant CSS tokenizer
+- a reliable low level package to be used in CSS parsers
+
+What it is not:
+- opinionated
+- fast
+- small
+
+[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
+[discord]: https://discord.gg/bUadyRwkJS
+[npm-url]: https://www.npmjs.com/package/@csstools/css-tokenizer
+
+[CSS Tokenizer]: https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/four-code-points-would-start-cdo.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/four-code-points-would-start-cdo.d.ts
new file mode 100644
index 00000000..a9243f63
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/four-code-points-would-start-cdo.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfFourCodePointsWouldStartCDO(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/matches-url-ident.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/matches-url-ident.d.ts
new file mode 100644
index 00000000..6af31e4e
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/matches-url-ident.d.ts
@@ -0,0 +1 @@
+export declare function checkIfCodePointsMatchURLIdent(codePoints: Array<number>): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-cdc.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-cdc.d.ts
new file mode 100644
index 00000000..09bd2323
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-cdc.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfThreeCodePointsWouldStartCDC(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-ident-sequence.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-ident-sequence.d.ts
new file mode 100644
index 00000000..d48323bb
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-ident-sequence.d.ts
@@ -0,0 +1,3 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+export declare function checkIfThreeCodePointsWouldStartAnIdentSequence(ctx: Context, reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-number.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-number.d.ts
new file mode 100644
index 00000000..9c428a45
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-number.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfThreeCodePointsWouldStartANumber(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-unicode-range.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-unicode-range.d.ts
new file mode 100644
index 00000000..46c91076
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/three-code-points-would-start-unicode-range.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfThreeCodePointsWouldStartAUnicodeRange(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-are-valid-escape.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-are-valid-escape.d.ts
new file mode 100644
index 00000000..99d954fd
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-are-valid-escape.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfTwoCodePointsAreAValidEscape(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-start-comment.d.ts b/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-start-comment.d.ts
new file mode 100644
index 00000000..9d9fd495
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/checks/two-code-points-start-comment.d.ts
@@ -0,0 +1,2 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+export declare function checkIfTwoCodePointsStartAComment(reader: CodePointReader): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/code-points/code-points.d.ts b/node_modules/@csstools/css-tokenizer/dist/code-points/code-points.d.ts
new file mode 100644
index 00000000..3dcc4778
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/code-points/code-points.d.ts
@@ -0,0 +1,96 @@
+/** ' */
+export declare const APOSTROPHE = 39;
+/** * */
+export declare const ASTERISK = 42;
+/** \b */
+export declare const BACKSPACE = 8;
+/** \r */
+export declare const CARRIAGE_RETURN = 13;
+/** \t */
+export declare const CHARACTER_TABULATION = 9;
+/** : */
+export declare const COLON = 58;
+/** , */
+export declare const COMMA = 44;
+/** @ */
+export declare const COMMERCIAL_AT = 64;
+/** \x7F */
+export declare const DELETE = 127;
+/** ! */
+export declare const EXCLAMATION_MARK = 33;
+/** \f */
+export declare const FORM_FEED = 12;
+/** . */
+export declare const FULL_STOP = 46;
+/** > */
+export declare const GREATER_THAN_SIGN = 62;
+/** - */
+export declare const HYPHEN_MINUS = 45;
+/** \x1F */
+export declare const INFORMATION_SEPARATOR_ONE = 31;
+/** E */
+export declare const LATIN_CAPITAL_LETTER_E = 69;
+/** e */
+export declare const LATIN_SMALL_LETTER_E = 101;
+/** { */
+export declare const LEFT_CURLY_BRACKET = 123;
+/** ( */
+export declare const LEFT_PARENTHESIS = 40;
+/** [ */
+export declare const LEFT_SQUARE_BRACKET = 91;
+/** < */
+export declare const LESS_THAN_SIGN = 60;
+/** \n */
+export declare const LINE_FEED = 10;
+/** \v */
+export declare const LINE_TABULATION = 11;
+/** _ */
+export declare const LOW_LINE = 95;
+/** \x10FFFF */
+export declare const MAXIMUM_ALLOWED_CODEPOINT = 1114111;
+/** \x00 */
+export declare const NULL = 0;
+/** # */
+export declare const NUMBER_SIGN = 35;
+/** % */
+export declare const PERCENTAGE_SIGN = 37;
+/** + */
+export declare const PLUS_SIGN = 43;
+/** " */
+export declare const QUOTATION_MARK = 34;
+/** � */
+export declare const REPLACEMENT_CHARACTER = 65533;
+/** \ */
+export declare const REVERSE_SOLIDUS = 92;
+/** } */
+export declare const RIGHT_CURLY_BRACKET = 125;
+/** ) */
+export declare const RIGHT_PARENTHESIS = 41;
+/** ] */
+export declare const RIGHT_SQUARE_BRACKET = 93;
+/** ; */
+export declare const SEMICOLON = 59;
+/** \u0E */
+export declare const SHIFT_OUT = 14;
+/** / */
+export declare const SOLIDUS = 47;
+/** \u20 */
+export declare const SPACE = 32;
+/** u */
+export declare const LATIN_SMALL_LETTER_U = 117;
+/** U */
+export declare const LATIN_CAPITAL_LETTER_U = 85;
+/** r */
+export declare const LATIN_SMALL_LETTER_R = 114;
+/** R */
+export declare const LATIN_CAPITAL_LETTER_R = 82;
+/** l */
+export declare const LATIN_SMALL_LETTER_L = 108;
+/** L */
+export declare const LATIN_CAPITAL_LETTER_L = 76;
+/** ? */
+export declare const QUESTION_MARK = 63;
+/** 0 */
+export declare const DIGIT_ZERO = 48;
+/** F */
+export declare const LATIN_CAPITAL_LETTER_F = 70;
diff --git a/node_modules/@csstools/css-tokenizer/dist/code-points/ranges.d.ts b/node_modules/@csstools/css-tokenizer/dist/code-points/ranges.d.ts
new file mode 100644
index 00000000..2fe67d8c
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/code-points/ranges.d.ts
@@ -0,0 +1,13 @@
+export declare function isDigitCodePoint(search: number): boolean;
+export declare function isUppercaseLetterCodePoint(search: number): boolean;
+export declare function isLowercaseLetterCodePoint(search: number): boolean;
+export declare function isHexDigitCodePoint(search: number): boolean;
+export declare function isLetterCodePoint(search: number): boolean;
+export declare function isNonASCIICodePoint(search: number): boolean;
+export declare function isIdentStartCodePoint(search: number): boolean;
+export declare function isIdentCodePoint(search: number): boolean;
+export declare function isNonASCII_IdentCodePoint(search: number): boolean;
+export declare function isNonPrintableCodePoint(search: number): boolean;
+export declare function isNewLine(search: number): boolean;
+export declare function isWhitespace(search: number): boolean;
+export declare function isSurrogate(search: number): boolean;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/bad-url.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/bad-url.d.ts
new file mode 100644
index 00000000..4b18d0e8
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/bad-url.d.ts
@@ -0,0 +1,3 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+export declare function consumeBadURL(ctx: Context, reader: CodePointReader): void;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/comment.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/comment.d.ts
new file mode 100644
index 00000000..d4ba2211
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/comment.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenComment } from '../interfaces/token';
+export declare function consumeComment(ctx: Context, reader: CodePointReader): TokenComment;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/escaped-code-point.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/escaped-code-point.d.ts
new file mode 100644
index 00000000..a6f8dc2e
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/escaped-code-point.d.ts
@@ -0,0 +1,3 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+export declare function consumeEscapedCodePoint(ctx: Context, reader: CodePointReader): number;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/hash-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/hash-token.d.ts
new file mode 100644
index 00000000..ac061a84
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/hash-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenDelim, TokenHash } from '../interfaces/token';
+export declare function consumeHashToken(ctx: Context, reader: CodePointReader): TokenDelim | TokenHash;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/ident-like-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/ident-like-token.d.ts
new file mode 100644
index 00000000..6be73762
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/ident-like-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenBadURL, TokenFunction, TokenIdent, TokenURL } from '../interfaces/token';
+export declare function consumeIdentLikeToken(ctx: Context, reader: CodePointReader): TokenIdent | TokenFunction | TokenURL | TokenBadURL;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/ident-sequence.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/ident-sequence.d.ts
new file mode 100644
index 00000000..992520e2
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/ident-sequence.d.ts
@@ -0,0 +1,3 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+export declare function consumeIdentSequence(ctx: Context, reader: CodePointReader): Array<number>;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/number.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/number.d.ts
new file mode 100644
index 00000000..18f1704f
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/number.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { NumberType } from '../interfaces/token';
+export declare function consumeNumber(ctx: Context, reader: CodePointReader): NumberType;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/numeric-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/numeric-token.d.ts
new file mode 100644
index 00000000..1217bb0a
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/numeric-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenDimension, TokenNumber, TokenPercentage } from '../interfaces/token';
+export declare function consumeNumericToken(ctx: Context, reader: CodePointReader): TokenPercentage | TokenNumber | TokenDimension;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/string-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/string-token.d.ts
new file mode 100644
index 00000000..31f6448f
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/string-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenBadString, TokenString } from '../interfaces/token';
+export declare function consumeStringToken(ctx: Context, reader: CodePointReader): TokenBadString | TokenString;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/unicode-range-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/unicode-range-token.d.ts
new file mode 100644
index 00000000..526bcfe1
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/unicode-range-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenUnicodeRange } from '../interfaces/token';
+export declare function consumeUnicodeRangeToken(ctx: Context, reader: CodePointReader): TokenUnicodeRange;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/url-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/url-token.d.ts
new file mode 100644
index 00000000..9140be70
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/url-token.d.ts
@@ -0,0 +1,4 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { Context } from '../interfaces/context';
+import { TokenBadURL, TokenURL } from '../interfaces/token';
+export declare function consumeUrlToken(ctx: Context, reader: CodePointReader): TokenURL | TokenBadURL;
diff --git a/node_modules/@csstools/css-tokenizer/dist/consume/whitespace-token.d.ts b/node_modules/@csstools/css-tokenizer/dist/consume/whitespace-token.d.ts
new file mode 100644
index 00000000..4584dc9a
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/consume/whitespace-token.d.ts
@@ -0,0 +1,3 @@
+import { CodePointReader } from '../interfaces/code-point-reader';
+import { TokenWhitespace } from '../interfaces/token';
+export declare function consumeWhiteSpace(reader: CodePointReader): TokenWhitespace;
diff --git a/node_modules/@csstools/css-tokenizer/dist/index.cjs b/node_modules/@csstools/css-tokenizer/dist/index.cjs
new file mode 100644
index 00000000..915afc28
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/index.cjs
@@ -0,0 +1 @@
+"use strict";class ParseError extends Error{sourceStart;sourceEnd;parserState;constructor(e,o,n,r){super(e),this.name="ParseError",this.sourceStart=o,this.sourceEnd=n,this.parserState=r}}class Reader{cursor=0;source="";codePointSource=[];representationIndices=[-1];length=0;representationStart=0;representationEnd=-1;constructor(e){this.source=e;{let o=-1,n="";for(n of e)o+=n.length,this.codePointSource.push(n.codePointAt(0)),this.representationIndices.push(o)}this.length=this.codePointSource.length}advanceCodePoint(e=1){this.cursor=this.cursor+e,this.representationEnd=this.representationIndices[this.cursor]}readCodePoint(e=1){const o=this.codePointSource[this.cursor];return void 0!==o&&(this.cursor=this.cursor+e,this.representationEnd=this.representationIndices[this.cursor],o)}unreadCodePoint(e=1){this.cursor=this.cursor-e,this.representationEnd=this.representationIndices[this.cursor]}resetRepresentation(){this.representationStart=this.representationIndices[this.cursor]+1,this.representationEnd=-1}}var e,o,n;exports.TokenType=void 0,(e=exports.TokenType||(exports.TokenType={})).Comment="comment",e.AtKeyword="at-keyword-token",e.BadString="bad-string-token",e.BadURL="bad-url-token",e.CDC="CDC-token",e.CDO="CDO-token",e.Colon="colon-token",e.Comma="comma-token",e.Delim="delim-token",e.Dimension="dimension-token",e.EOF="EOF-token",e.Function="function-token",e.Hash="hash-token",e.Ident="ident-token",e.Number="number-token",e.Percentage="percentage-token",e.Semicolon="semicolon-token",e.String="string-token",e.URL="url-token",e.Whitespace="whitespace-token",e.OpenParen="(-token",e.CloseParen=")-token",e.OpenSquare="[-token",e.CloseSquare="]-token",e.OpenCurly="{-token",e.CloseCurly="}-token",e.UnicodeRange="unicode-range-token",exports.NumberType=void 0,(o=exports.NumberType||(exports.NumberType={})).Integer="integer",o.Number="number",function(e){e.Unrestricted="unrestricted",e.ID="id"}(n||(n={}));const r=Object.values(exports.TokenType);const t=39,i=42,s=8,c=13,a=9,u=58,d=44,p=64,P=127,S=33,C=12,T=46,l=62,k=45,f=31,m=69,h=101,E=123,v=40,x=91,y=60,g=10,I=11,O=95,U=1114111,w=0,D=35,R=37,A=43,L=34,N=65533,b=92,q=125,W=41,F=93,H=59,V=14,B=47,z=32,K=117,M=85,$=114,J=82,_=108,j=76,Q=63,G=48,X=70;function checkIfFourCodePointsWouldStartCDO(e){return e.codePointSource[e.cursor]===y&&e.codePointSource[e.cursor+1]===S&&e.codePointSource[e.cursor+2]===k&&e.codePointSource[e.cursor+3]===k}function isDigitCodePoint(e){return e>=48&&e<=57}function isUppercaseLetterCodePoint(e){return e>=65&&e<=90}function isLowercaseLetterCodePoint(e){return e>=97&&e<=122}function isHexDigitCodePoint(e){return isDigitCodePoint(e)||e>=97&&e<=102||e>=65&&e<=70}function isLetterCodePoint(e){return isLowercaseLetterCodePoint(e)||isUppercaseLetterCodePoint(e)}function isIdentStartCodePoint(e){return isLetterCodePoint(e)||isNonASCII_IdentCodePoint(e)||e===O}function isIdentCodePoint(e){return isIdentStartCodePoint(e)||isDigitCodePoint(e)||e===k}function isNonASCII_IdentCodePoint(e){return 183===e||8204===e||8205===e||8255===e||8256===e||8204===e||(192<=e&&e<=214||216<=e&&e<=246||248<=e&&e<=893||895<=e&&e<=8191||8304<=e&&e<=8591||11264<=e&&e<=12271||12289<=e&&e<=55295||63744<=e&&e<=64975||65008<=e&&e<=65533||e>=65536)}function isNewLine(e){return 10===e||13===e||12===e}function isWhitespace(e){return 32===e||10===e||9===e||13===e||12===e}function checkIfTwoCodePointsAreAValidEscape(e){return e.codePointSource[e.cursor]===b&&!isNewLine(e.codePointSource[e.cursor+1])}function checkIfThreeCodePointsWouldStartAnIdentSequence(e,o){return o.codePointSource[o.cursor]===k?o.codePointSource[o.cursor+1]===k||(!!isIdentStartCodePoint(o.codePointSource[o.cursor+1])||o.codePointSource[o.cursor+1]===b&&!isNewLine(o.codePointSource[o.cursor+2])):!!isIdentStartCodePoint(o.codePointSource[o.cursor])||checkIfTwoCodePointsAreAValidEscape(o)}function checkIfThreeCodePointsWouldStartANumber(e){return e.codePointSource[e.cursor]===A||e.codePointSource[e.cursor]===k?!!isDigitCodePoint(e.codePointSource[e.cursor+1])||e.codePointSource[e.cursor+1]===T&&isDigitCodePoint(e.codePointSource[e.cursor+2]):e.codePointSource[e.cursor]===T?isDigitCodePoint(e.codePointSource[e.cursor+1]):isDigitCodePoint(e.codePointSource[e.cursor])}function checkIfTwoCodePointsStartAComment(e){return e.codePointSource[e.cursor]===B&&e.codePointSource[e.cursor+1]===i}function checkIfThreeCodePointsWouldStartCDC(e){return e.codePointSource[e.cursor]===k&&e.codePointSource[e.cursor+1]===k&&e.codePointSource[e.cursor+2]===l}function consumeComment(e,o){for(o.advanceCodePoint(2);;){const n=o.readCodePoint();if(!1===n){e.onParseError(new ParseError("Unexpected EOF while consuming a comment.",o.representationStart,o.representationEnd,["4.3.2. Consume comments","Unexpected EOF"]));break}if(n===i&&(void 0!==o.codePointSource[o.cursor]&&o.codePointSource[o.cursor]===B)){o.advanceCodePoint();break}}return[exports.TokenType.Comment,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0]}function consumeEscapedCodePoint(e,o){const n=o.readCodePoint();if(!1===n)return e.onParseError(new ParseError("Unexpected EOF while consuming an escaped code point.",o.representationStart,o.representationEnd,["4.3.7. Consume an escaped code point","Unexpected EOF"])),N;if(isHexDigitCodePoint(n)){const e=[n];for(;void 0!==o.codePointSource[o.cursor]&&isHexDigitCodePoint(o.codePointSource[o.cursor])&&e.length<6;)e.push(o.codePointSource[o.cursor]),o.advanceCodePoint();isWhitespace(o.codePointSource[o.cursor])&&o.advanceCodePoint();const t=parseInt(String.fromCodePoint(...e),16);return 0===t?N:(r=t)>=55296&&r<=57343||t>U?N:t}var r;return n}function consumeIdentSequence(e,o){const n=[];for(;;)if(isIdentCodePoint(o.codePointSource[o.cursor]))n.push(o.codePointSource[o.cursor]),o.advanceCodePoint();else{if(!checkIfTwoCodePointsAreAValidEscape(o))return n;o.advanceCodePoint(),n.push(consumeEscapedCodePoint(e,o))}}function consumeHashToken(e,o){if(o.advanceCodePoint(),void 0!==o.codePointSource[o.cursor]&&(isIdentCodePoint(o.codePointSource[o.cursor])||checkIfTwoCodePointsAreAValidEscape(o))){let r=n.Unrestricted;checkIfThreeCodePointsWouldStartAnIdentSequence(0,o)&&(r=n.ID);const t=consumeIdentSequence(e,o);return[exports.TokenType.Hash,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...t),type:r}]}return[exports.TokenType.Delim,"#",o.representationStart,o.representationEnd,{value:"#"}]}function consumeNumber(e,o){let n=exports.NumberType.Integer;for(o.codePointSource[o.cursor]!==A&&o.codePointSource[o.cursor]!==k||o.advanceCodePoint();isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint();if(o.codePointSource[o.cursor]===T&&isDigitCodePoint(o.codePointSource[o.cursor+1]))for(o.advanceCodePoint(2),n=exports.NumberType.Number;isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint();if(o.codePointSource[o.cursor]===h||o.codePointSource[o.cursor]===m){if(isDigitCodePoint(o.codePointSource[o.cursor+1]))o.advanceCodePoint(2);else{if(o.codePointSource[o.cursor+1]!==k&&o.codePointSource[o.cursor+1]!==A||!isDigitCodePoint(o.codePointSource[o.cursor+2]))return n;o.advanceCodePoint(3)}for(n=exports.NumberType.Number;isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint()}return n}function consumeNumericToken(e,o){let n;{const e=o.codePointSource[o.cursor];e===k?n="-":e===A&&(n="+")}const r=consumeNumber(0,o),t=parseFloat(o.source.slice(o.representationStart,o.representationEnd+1))||0;if(checkIfThreeCodePointsWouldStartAnIdentSequence(0,o)){const i=consumeIdentSequence(e,o);return[exports.TokenType.Dimension,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:t,signCharacter:n,type:r,unit:String.fromCodePoint(...i)}]}return o.codePointSource[o.cursor]===R?(o.advanceCodePoint(),[exports.TokenType.Percentage,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:t,signCharacter:n}]):[exports.TokenType.Number,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:t,signCharacter:n,type:r}]}function consumeWhiteSpace(e){for(;isWhitespace(e.codePointSource[e.cursor]);)e.advanceCodePoint();return[exports.TokenType.Whitespace,e.source.slice(e.representationStart,e.representationEnd+1),e.representationStart,e.representationEnd,void 0]}function consumeStringToken(e,o){let n="";const r=o.readCodePoint();for(;;){const t=o.readCodePoint();if(!1===t)return e.onParseError(new ParseError("Unexpected EOF while consuming a string token.",o.representationStart,o.representationEnd,["4.3.5. Consume a string token","Unexpected EOF"])),[exports.TokenType.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}];if(isNewLine(t))return e.onParseError(new ParseError("Unexpected newline while consuming a string token.",o.representationStart,o.representationEnd,["4.3.5. Consume a string token","Unexpected newline"])),o.unreadCodePoint(),[exports.TokenType.BadString,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0];if(t===r)return[exports.TokenType.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}];if(t!==b)n+=String.fromCodePoint(t);else{if(void 0===o.codePointSource[o.cursor])continue;if(isNewLine(o.codePointSource[o.cursor])){o.advanceCodePoint();continue}n+=String.fromCodePoint(consumeEscapedCodePoint(e,o))}}}function checkIfCodePointsMatchURLIdent(e){return!(3!==e.length||e[0]!==K&&e[0]!==M||e[1]!==$&&e[1]!==J||e[2]!==_&&e[2]!==j)}function consumeBadURL(e,o){for(;;){if(void 0===o.codePointSource[o.cursor])return;if(o.codePointSource[o.cursor]===W)return void o.advanceCodePoint();checkIfTwoCodePointsAreAValidEscape(o)?(o.advanceCodePoint(),consumeEscapedCodePoint(e,o)):o.advanceCodePoint()}}function consumeUrlToken(e,o){for(;isWhitespace(o.codePointSource[o.cursor]);)o.advanceCodePoint();let n="";for(;;){if(void 0===o.codePointSource[o.cursor])return e.onParseError(new ParseError("Unexpected EOF while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Unexpected EOF"])),[exports.TokenType.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}];if(o.codePointSource[o.cursor]===W)return o.advanceCodePoint(),[exports.TokenType.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}];if(isWhitespace(o.codePointSource[o.cursor])){for(o.advanceCodePoint();isWhitespace(o.codePointSource[o.cursor]);)o.advanceCodePoint();return void 0===o.codePointSource[o.cursor]?(e.onParseError(new ParseError("Unexpected EOF while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Consume as much whitespace as possible","Unexpected EOF"])),[exports.TokenType.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}]):o.codePointSource[o.cursor]===W?(o.advanceCodePoint(),[exports.TokenType.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:n}]):(consumeBadURL(e,o),[exports.TokenType.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0])}if(o.codePointSource[o.cursor]===L||o.codePointSource[o.cursor]===t||o.codePointSource[o.cursor]===v||((r=o.codePointSource[o.cursor])===I||r===P||w<=r&&r<=s||V<=r&&r<=f))return consumeBadURL(e,o),e.onParseError(new ParseError("Unexpected character while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Unexpected U+0022 QUOTATION MARK (\"), U+0027 APOSTROPHE ('), U+0028 LEFT PARENTHESIS (() or non-printable code point"])),[exports.TokenType.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0];if(o.codePointSource[o.cursor]===b){if(checkIfTwoCodePointsAreAValidEscape(o)){o.advanceCodePoint(),n+=String.fromCodePoint(consumeEscapedCodePoint(e,o));continue}return consumeBadURL(e,o),e.onParseError(new ParseError("Invalid escape sequence while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"])),[exports.TokenType.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0]}n+=String.fromCodePoint(o.codePointSource[o.cursor]),o.advanceCodePoint()}var r}function consumeIdentLikeToken(e,o){const n=consumeIdentSequence(e,o);if(o.codePointSource[o.cursor]!==v)return[exports.TokenType.Ident,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...n)}];if(checkIfCodePointsMatchURLIdent(n)){o.advanceCodePoint();let r=0;for(;;){const e=isWhitespace(o.codePointSource[o.cursor]),i=isWhitespace(o.codePointSource[o.cursor+1]);if(e&&i){r+=1,o.advanceCodePoint(1);continue}const s=e?o.codePointSource[o.cursor+1]:o.codePointSource[o.cursor];if(s===L||s===t)return r>0&&o.unreadCodePoint(r),[exports.TokenType.Function,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...n)}];break}return consumeUrlToken(e,o)}return o.advanceCodePoint(),[exports.TokenType.Function,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...n)}]}function checkIfThreeCodePointsWouldStartAUnicodeRange(e){return!(e.codePointSource[e.cursor]!==K&&e.codePointSource[e.cursor]!==M||e.codePointSource[e.cursor+1]!==A||e.codePointSource[e.cursor+2]!==Q&&!isHexDigitCodePoint(e.codePointSource[e.cursor+2]))}function consumeUnicodeRangeToken(e,o){o.advanceCodePoint(2);const n=[],r=[];for(;void 0!==o.codePointSource[o.cursor]&&n.length<6&&isHexDigitCodePoint(o.codePointSource[o.cursor]);)n.push(o.codePointSource[o.cursor]),o.advanceCodePoint();for(;void 0!==o.codePointSource[o.cursor]&&n.length<6&&o.codePointSource[o.cursor]===Q;)0===r.length&&r.push(...n),n.push(G),r.push(X),o.advanceCodePoint();if(!r.length&&o.codePointSource[o.cursor]===k&&isHexDigitCodePoint(o.codePointSource[o.cursor+1]))for(o.advanceCodePoint();void 0!==o.codePointSource[o.cursor]&&r.length<6&&isHexDigitCodePoint(o.codePointSource[o.cursor]);)r.push(o.codePointSource[o.cursor]),o.advanceCodePoint();if(!r.length){const e=parseInt(String.fromCodePoint(...n),16);return[exports.TokenType.UnicodeRange,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{startOfRange:e,endOfRange:e}]}const t=parseInt(String.fromCodePoint(...n),16),i=parseInt(String.fromCodePoint(...r),16);return[exports.TokenType.UnicodeRange,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{startOfRange:t,endOfRange:i}]}function tokenizer(e,o){const n=e.css.valueOf(),r=e.unicodeRangesAllowed??!1,i=new Reader(n),s={onParseError:(null==o?void 0:o.onParseError)??(()=>{})};return{nextToken:function nextToken(){i.resetRepresentation();const e=i.codePointSource[i.cursor];if(void 0===e)return[exports.TokenType.EOF,"",-1,-1,void 0];if(e===B&&checkIfTwoCodePointsStartAComment(i))return consumeComment(s,i);if(r&&(e===K||e===M)&&checkIfThreeCodePointsWouldStartAUnicodeRange(i))return consumeUnicodeRangeToken(0,i);if(isIdentStartCodePoint(e))return consumeIdentLikeToken(s,i);if(isDigitCodePoint(e))return consumeNumericToken(s,i);switch(e){case d:return i.advanceCodePoint(),[exports.TokenType.Comma,",",i.representationStart,i.representationEnd,void 0];case u:return i.advanceCodePoint(),[exports.TokenType.Colon,":",i.representationStart,i.representationEnd,void 0];case H:return i.advanceCodePoint(),[exports.TokenType.Semicolon,";",i.representationStart,i.representationEnd,void 0];case v:return i.advanceCodePoint(),[exports.TokenType.OpenParen,"(",i.representationStart,i.representationEnd,void 0];case W:return i.advanceCodePoint(),[exports.TokenType.CloseParen,")",i.representationStart,i.representationEnd,void 0];case x:return i.advanceCodePoint(),[exports.TokenType.OpenSquare,"[",i.representationStart,i.representationEnd,void 0];case F:return i.advanceCodePoint(),[exports.TokenType.CloseSquare,"]",i.representationStart,i.representationEnd,void 0];case E:return i.advanceCodePoint(),[exports.TokenType.OpenCurly,"{",i.representationStart,i.representationEnd,void 0];case q:return i.advanceCodePoint(),[exports.TokenType.CloseCurly,"}",i.representationStart,i.representationEnd,void 0];case t:case L:return consumeStringToken(s,i);case D:return consumeHashToken(s,i);case A:case T:return checkIfThreeCodePointsWouldStartANumber(i)?consumeNumericToken(s,i):(i.advanceCodePoint(),[exports.TokenType.Delim,i.source[i.representationStart],i.representationStart,i.representationEnd,{value:i.source[i.representationStart]}]);case g:case c:case C:case a:case z:return consumeWhiteSpace(i);case k:return checkIfThreeCodePointsWouldStartANumber(i)?consumeNumericToken(s,i):checkIfThreeCodePointsWouldStartCDC(i)?(i.advanceCodePoint(3),[exports.TokenType.CDC,"--\x3e",i.representationStart,i.representationEnd,void 0]):checkIfThreeCodePointsWouldStartAnIdentSequence(0,i)?consumeIdentLikeToken(s,i):(i.advanceCodePoint(),[exports.TokenType.Delim,"-",i.representationStart,i.representationEnd,{value:"-"}]);case y:return checkIfFourCodePointsWouldStartCDO(i)?(i.advanceCodePoint(4),[exports.TokenType.CDO,"\x3c!--",i.representationStart,i.representationEnd,void 0]):(i.advanceCodePoint(),[exports.TokenType.Delim,"<",i.representationStart,i.representationEnd,{value:"<"}]);case p:if(i.advanceCodePoint(),checkIfThreeCodePointsWouldStartAnIdentSequence(0,i)){const e=consumeIdentSequence(s,i);return[exports.TokenType.AtKeyword,i.source.slice(i.representationStart,i.representationEnd+1),i.representationStart,i.representationEnd,{value:String.fromCodePoint(...e)}]}return[exports.TokenType.Delim,"@",i.representationStart,i.representationEnd,{value:"@"}];case b:return checkIfTwoCodePointsAreAValidEscape(i)?consumeIdentLikeToken(s,i):(i.advanceCodePoint(),s.onParseError(new ParseError('Invalid escape sequence after "\\"',i.representationStart,i.representationEnd,["4.3.1. Consume a token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"])),[exports.TokenType.Delim,"\\",i.representationStart,i.representationEnd,{value:"\\"}])}return i.advanceCodePoint(),[exports.TokenType.Delim,i.source[i.representationStart],i.representationStart,i.representationEnd,{value:i.source[i.representationStart]}]},endOfFile:function endOfFile(){return void 0===i.codePointSource[i.cursor]}}}exports.ParseError=ParseError,exports.Reader=Reader,exports.cloneTokens=function cloneTokens(e){return"undefined"!=typeof globalThis&&"structuredClone"in globalThis?structuredClone(e):JSON.parse(JSON.stringify(e))},exports.isToken=function isToken(e){return!!Array.isArray(e)&&(!(e.length<4)&&(!!r.includes(e[0])&&("string"==typeof e[1]&&("number"==typeof e[2]&&"number"==typeof e[3]))))},exports.mirrorVariant=function mirrorVariant(e){switch(e[0]){case exports.TokenType.OpenParen:return[exports.TokenType.CloseParen,")",-1,-1,void 0];case exports.TokenType.CloseParen:return[exports.TokenType.OpenParen,"(",-1,-1,void 0];case exports.TokenType.OpenCurly:return[exports.TokenType.CloseCurly,"}",-1,-1,void 0];case exports.TokenType.CloseCurly:return[exports.TokenType.OpenCurly,"{",-1,-1,void 0];case exports.TokenType.OpenSquare:return[exports.TokenType.CloseSquare,"]",-1,-1,void 0];case exports.TokenType.CloseSquare:return[exports.TokenType.OpenSquare,"[",-1,-1,void 0];default:return null}},exports.mirrorVariantType=function mirrorVariantType(e){switch(e){case exports.TokenType.OpenParen:return exports.TokenType.CloseParen;case exports.TokenType.CloseParen:return exports.TokenType.OpenParen;case exports.TokenType.OpenCurly:return exports.TokenType.CloseCurly;case exports.TokenType.CloseCurly:return exports.TokenType.OpenCurly;case exports.TokenType.OpenSquare:return exports.TokenType.CloseSquare;case exports.TokenType.CloseSquare:return exports.TokenType.OpenSquare;default:return null}},exports.mutateIdent=function mutateIdent(e,o){let n="";const r=[];{let e="";for(e of o)r.push(e.codePointAt(0))}let t=0;r[0]===k&&r[1]===k?(n="--",t=2):r[0]===k&&r[1]?(n="-",t=2,isIdentStartCodePoint(r[1])?n+=o[1]:n+=`\\${r[1].toString(16)} `):isIdentStartCodePoint(r[0])?(n=o[0],t=1):(n=`\\${r[0].toString(16)} `,t=1);for(let e=t;e<r.length;e++)isIdentCodePoint(r[e])?n+=o[e]:n+=`\\${r[e].toString(16)} `;e[1]=n,e[4].value=o},exports.stringify=function stringify(...e){let o="";for(let n=0;n<e.length;n++)o+=e[n][1];return o},exports.tokenize=function tokenize(e,o){const n=tokenizer(e,o),r=[];{for(;!n.endOfFile();){const e=n.nextToken();e&&r.push(e)}const e=n.nextToken();e&&r.push(e)}return r},exports.tokenizer=tokenizer;
diff --git a/node_modules/@csstools/css-tokenizer/dist/index.d.ts b/node_modules/@csstools/css-tokenizer/dist/index.d.ts
new file mode 100644
index 00000000..ce252e77
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/index.d.ts
@@ -0,0 +1,9 @@
+export type { CSSToken } from './interfaces/token';
+export { ParseError } from './interfaces/error';
+export { Reader } from './reader';
+export { TokenType, NumberType, mirrorVariantType, mirrorVariant, isToken } from './interfaces/token';
+export { stringify } from './stringify';
+export { tokenize, tokenizer } from './tokenizer';
+export { cloneTokens } from './util/clone-tokens';
+export type { TokenAtKeyword, TokenBadString, TokenBadURL, TokenCDC, TokenCDO, TokenColon, TokenComma, TokenComment, TokenDelim, TokenDimension, TokenEOF, TokenFunction, TokenHash, TokenIdent, TokenNumber, TokenPercentage, TokenSemicolon, TokenString, TokenURL, TokenWhitespace, TokenOpenParen, TokenCloseParen, TokenOpenSquare, TokenCloseSquare, TokenOpenCurly, TokenCloseCurly, } from './interfaces/token';
+export { mutateIdent, } from './util/mutations';
diff --git a/node_modules/@csstools/css-tokenizer/dist/index.mjs b/node_modules/@csstools/css-tokenizer/dist/index.mjs
new file mode 100644
index 00000000..a073b6bc
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/index.mjs
@@ -0,0 +1 @@
+class ParseError extends Error{sourceStart;sourceEnd;parserState;constructor(e,n,o,r){super(e),this.name="ParseError",this.sourceStart=n,this.sourceEnd=o,this.parserState=r}}class Reader{cursor=0;source="";codePointSource=[];representationIndices=[-1];length=0;representationStart=0;representationEnd=-1;constructor(e){this.source=e;{let n=-1,o="";for(o of e)n+=o.length,this.codePointSource.push(o.codePointAt(0)),this.representationIndices.push(n)}this.length=this.codePointSource.length}advanceCodePoint(e=1){this.cursor=this.cursor+e,this.representationEnd=this.representationIndices[this.cursor]}readCodePoint(e=1){const n=this.codePointSource[this.cursor];return void 0!==n&&(this.cursor=this.cursor+e,this.representationEnd=this.representationIndices[this.cursor],n)}unreadCodePoint(e=1){this.cursor=this.cursor-e,this.representationEnd=this.representationIndices[this.cursor]}resetRepresentation(){this.representationStart=this.representationIndices[this.cursor]+1,this.representationEnd=-1}}var e,n,o;function mirrorVariantType(n){switch(n){case e.OpenParen:return e.CloseParen;case e.CloseParen:return e.OpenParen;case e.OpenCurly:return e.CloseCurly;case e.CloseCurly:return e.OpenCurly;case e.OpenSquare:return e.CloseSquare;case e.CloseSquare:return e.OpenSquare;default:return null}}function mirrorVariant(n){switch(n[0]){case e.OpenParen:return[e.CloseParen,")",-1,-1,void 0];case e.CloseParen:return[e.OpenParen,"(",-1,-1,void 0];case e.OpenCurly:return[e.CloseCurly,"}",-1,-1,void 0];case e.CloseCurly:return[e.OpenCurly,"{",-1,-1,void 0];case e.OpenSquare:return[e.CloseSquare,"]",-1,-1,void 0];case e.CloseSquare:return[e.OpenSquare,"[",-1,-1,void 0];default:return null}}!function(e){e.Comment="comment",e.AtKeyword="at-keyword-token",e.BadString="bad-string-token",e.BadURL="bad-url-token",e.CDC="CDC-token",e.CDO="CDO-token",e.Colon="colon-token",e.Comma="comma-token",e.Delim="delim-token",e.Dimension="dimension-token",e.EOF="EOF-token",e.Function="function-token",e.Hash="hash-token",e.Ident="ident-token",e.Number="number-token",e.Percentage="percentage-token",e.Semicolon="semicolon-token",e.String="string-token",e.URL="url-token",e.Whitespace="whitespace-token",e.OpenParen="(-token",e.CloseParen=")-token",e.OpenSquare="[-token",e.CloseSquare="]-token",e.OpenCurly="{-token",e.CloseCurly="}-token",e.UnicodeRange="unicode-range-token"}(e||(e={})),function(e){e.Integer="integer",e.Number="number"}(n||(n={})),function(e){e.Unrestricted="unrestricted",e.ID="id"}(o||(o={}));const r=Object.values(e);function isToken(e){return!!Array.isArray(e)&&(!(e.length<4)&&(!!r.includes(e[0])&&("string"==typeof e[1]&&("number"==typeof e[2]&&"number"==typeof e[3]))))}function stringify(...e){let n="";for(let o=0;o<e.length;o++)n+=e[o][1];return n}const t=39,i=42,c=8,s=13,a=9,u=58,d=44,P=64,p=127,S=33,C=12,l=46,f=62,h=45,E=31,m=69,v=101,g=123,k=40,I=91,T=60,O=10,U=11,w=95,D=1114111,A=0,R=35,L=37,x=43,y=34,q=65533,W=92,N=125,b=41,F=93,H=59,V=14,B=47,z=32,K=117,M=85,$=114,J=82,_=108,j=76,Q=63,G=48,X=70;function checkIfFourCodePointsWouldStartCDO(e){return e.codePointSource[e.cursor]===T&&e.codePointSource[e.cursor+1]===S&&e.codePointSource[e.cursor+2]===h&&e.codePointSource[e.cursor+3]===h}function isDigitCodePoint(e){return e>=48&&e<=57}function isUppercaseLetterCodePoint(e){return e>=65&&e<=90}function isLowercaseLetterCodePoint(e){return e>=97&&e<=122}function isHexDigitCodePoint(e){return isDigitCodePoint(e)||e>=97&&e<=102||e>=65&&e<=70}function isLetterCodePoint(e){return isLowercaseLetterCodePoint(e)||isUppercaseLetterCodePoint(e)}function isIdentStartCodePoint(e){return isLetterCodePoint(e)||isNonASCII_IdentCodePoint(e)||e===w}function isIdentCodePoint(e){return isIdentStartCodePoint(e)||isDigitCodePoint(e)||e===h}function isNonASCII_IdentCodePoint(e){return 183===e||8204===e||8205===e||8255===e||8256===e||8204===e||(192<=e&&e<=214||216<=e&&e<=246||248<=e&&e<=893||895<=e&&e<=8191||8304<=e&&e<=8591||11264<=e&&e<=12271||12289<=e&&e<=55295||63744<=e&&e<=64975||65008<=e&&e<=65533||e>=65536)}function isNewLine(e){return 10===e||13===e||12===e}function isWhitespace(e){return 32===e||10===e||9===e||13===e||12===e}function checkIfTwoCodePointsAreAValidEscape(e){return e.codePointSource[e.cursor]===W&&!isNewLine(e.codePointSource[e.cursor+1])}function checkIfThreeCodePointsWouldStartAnIdentSequence(e,n){return n.codePointSource[n.cursor]===h?n.codePointSource[n.cursor+1]===h||(!!isIdentStartCodePoint(n.codePointSource[n.cursor+1])||n.codePointSource[n.cursor+1]===W&&!isNewLine(n.codePointSource[n.cursor+2])):!!isIdentStartCodePoint(n.codePointSource[n.cursor])||checkIfTwoCodePointsAreAValidEscape(n)}function checkIfThreeCodePointsWouldStartANumber(e){return e.codePointSource[e.cursor]===x||e.codePointSource[e.cursor]===h?!!isDigitCodePoint(e.codePointSource[e.cursor+1])||e.codePointSource[e.cursor+1]===l&&isDigitCodePoint(e.codePointSource[e.cursor+2]):e.codePointSource[e.cursor]===l?isDigitCodePoint(e.codePointSource[e.cursor+1]):isDigitCodePoint(e.codePointSource[e.cursor])}function checkIfTwoCodePointsStartAComment(e){return e.codePointSource[e.cursor]===B&&e.codePointSource[e.cursor+1]===i}function checkIfThreeCodePointsWouldStartCDC(e){return e.codePointSource[e.cursor]===h&&e.codePointSource[e.cursor+1]===h&&e.codePointSource[e.cursor+2]===f}function consumeComment(n,o){for(o.advanceCodePoint(2);;){const e=o.readCodePoint();if(!1===e){n.onParseError(new ParseError("Unexpected EOF while consuming a comment.",o.representationStart,o.representationEnd,["4.3.2. Consume comments","Unexpected EOF"]));break}if(e===i&&(void 0!==o.codePointSource[o.cursor]&&o.codePointSource[o.cursor]===B)){o.advanceCodePoint();break}}return[e.Comment,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0]}function consumeEscapedCodePoint(e,n){const o=n.readCodePoint();if(!1===o)return e.onParseError(new ParseError("Unexpected EOF while consuming an escaped code point.",n.representationStart,n.representationEnd,["4.3.7. Consume an escaped code point","Unexpected EOF"])),q;if(isHexDigitCodePoint(o)){const e=[o];for(;void 0!==n.codePointSource[n.cursor]&&isHexDigitCodePoint(n.codePointSource[n.cursor])&&e.length<6;)e.push(n.codePointSource[n.cursor]),n.advanceCodePoint();isWhitespace(n.codePointSource[n.cursor])&&n.advanceCodePoint();const t=parseInt(String.fromCodePoint(...e),16);return 0===t?q:(r=t)>=55296&&r<=57343||t>D?q:t}var r;return o}function consumeIdentSequence(e,n){const o=[];for(;;)if(isIdentCodePoint(n.codePointSource[n.cursor]))o.push(n.codePointSource[n.cursor]),n.advanceCodePoint();else{if(!checkIfTwoCodePointsAreAValidEscape(n))return o;n.advanceCodePoint(),o.push(consumeEscapedCodePoint(e,n))}}function consumeHashToken(n,r){if(r.advanceCodePoint(),void 0!==r.codePointSource[r.cursor]&&(isIdentCodePoint(r.codePointSource[r.cursor])||checkIfTwoCodePointsAreAValidEscape(r))){let t=o.Unrestricted;checkIfThreeCodePointsWouldStartAnIdentSequence(0,r)&&(t=o.ID);const i=consumeIdentSequence(n,r);return[e.Hash,r.source.slice(r.representationStart,r.representationEnd+1),r.representationStart,r.representationEnd,{value:String.fromCodePoint(...i),type:t}]}return[e.Delim,"#",r.representationStart,r.representationEnd,{value:"#"}]}function consumeNumber(e,o){let r=n.Integer;for(o.codePointSource[o.cursor]!==x&&o.codePointSource[o.cursor]!==h||o.advanceCodePoint();isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint();if(o.codePointSource[o.cursor]===l&&isDigitCodePoint(o.codePointSource[o.cursor+1]))for(o.advanceCodePoint(2),r=n.Number;isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint();if(o.codePointSource[o.cursor]===v||o.codePointSource[o.cursor]===m){if(isDigitCodePoint(o.codePointSource[o.cursor+1]))o.advanceCodePoint(2);else{if(o.codePointSource[o.cursor+1]!==h&&o.codePointSource[o.cursor+1]!==x||!isDigitCodePoint(o.codePointSource[o.cursor+2]))return r;o.advanceCodePoint(3)}for(r=n.Number;isDigitCodePoint(o.codePointSource[o.cursor]);)o.advanceCodePoint()}return r}function consumeNumericToken(n,o){let r;{const e=o.codePointSource[o.cursor];e===h?r="-":e===x&&(r="+")}const t=consumeNumber(0,o),i=parseFloat(o.source.slice(o.representationStart,o.representationEnd+1))||0;if(checkIfThreeCodePointsWouldStartAnIdentSequence(0,o)){const c=consumeIdentSequence(n,o);return[e.Dimension,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:i,signCharacter:r,type:t,unit:String.fromCodePoint(...c)}]}return o.codePointSource[o.cursor]===L?(o.advanceCodePoint(),[e.Percentage,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:i,signCharacter:r}]):[e.Number,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:i,signCharacter:r,type:t}]}function consumeWhiteSpace(n){for(;isWhitespace(n.codePointSource[n.cursor]);)n.advanceCodePoint();return[e.Whitespace,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,void 0]}function consumeStringToken(n,o){let r="";const t=o.readCodePoint();for(;;){const i=o.readCodePoint();if(!1===i)return n.onParseError(new ParseError("Unexpected EOF while consuming a string token.",o.representationStart,o.representationEnd,["4.3.5. Consume a string token","Unexpected EOF"])),[e.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}];if(isNewLine(i))return n.onParseError(new ParseError("Unexpected newline while consuming a string token.",o.representationStart,o.representationEnd,["4.3.5. Consume a string token","Unexpected newline"])),o.unreadCodePoint(),[e.BadString,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0];if(i===t)return[e.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}];if(i!==W)r+=String.fromCodePoint(i);else{if(void 0===o.codePointSource[o.cursor])continue;if(isNewLine(o.codePointSource[o.cursor])){o.advanceCodePoint();continue}r+=String.fromCodePoint(consumeEscapedCodePoint(n,o))}}}function checkIfCodePointsMatchURLIdent(e){return!(3!==e.length||e[0]!==K&&e[0]!==M||e[1]!==$&&e[1]!==J||e[2]!==_&&e[2]!==j)}function consumeBadURL(e,n){for(;;){if(void 0===n.codePointSource[n.cursor])return;if(n.codePointSource[n.cursor]===b)return void n.advanceCodePoint();checkIfTwoCodePointsAreAValidEscape(n)?(n.advanceCodePoint(),consumeEscapedCodePoint(e,n)):n.advanceCodePoint()}}function consumeUrlToken(n,o){for(;isWhitespace(o.codePointSource[o.cursor]);)o.advanceCodePoint();let r="";for(;;){if(void 0===o.codePointSource[o.cursor])return n.onParseError(new ParseError("Unexpected EOF while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Unexpected EOF"])),[e.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}];if(o.codePointSource[o.cursor]===b)return o.advanceCodePoint(),[e.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}];if(isWhitespace(o.codePointSource[o.cursor])){for(o.advanceCodePoint();isWhitespace(o.codePointSource[o.cursor]);)o.advanceCodePoint();return void 0===o.codePointSource[o.cursor]?(n.onParseError(new ParseError("Unexpected EOF while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Consume as much whitespace as possible","Unexpected EOF"])),[e.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}]):o.codePointSource[o.cursor]===b?(o.advanceCodePoint(),[e.URL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:r}]):(consumeBadURL(n,o),[e.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0])}if(o.codePointSource[o.cursor]===y||o.codePointSource[o.cursor]===t||o.codePointSource[o.cursor]===k||((i=o.codePointSource[o.cursor])===U||i===p||A<=i&&i<=c||V<=i&&i<=E))return consumeBadURL(n,o),n.onParseError(new ParseError("Unexpected character while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","Unexpected U+0022 QUOTATION MARK (\"), U+0027 APOSTROPHE ('), U+0028 LEFT PARENTHESIS (() or non-printable code point"])),[e.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0];if(o.codePointSource[o.cursor]===W){if(checkIfTwoCodePointsAreAValidEscape(o)){o.advanceCodePoint(),r+=String.fromCodePoint(consumeEscapedCodePoint(n,o));continue}return consumeBadURL(n,o),n.onParseError(new ParseError("Invalid escape sequence while consuming a url token.",o.representationStart,o.representationEnd,["4.3.6. Consume a url token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"])),[e.BadURL,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0]}r+=String.fromCodePoint(o.codePointSource[o.cursor]),o.advanceCodePoint()}var i}function consumeIdentLikeToken(n,o){const r=consumeIdentSequence(n,o);if(o.codePointSource[o.cursor]!==k)return[e.Ident,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...r)}];if(checkIfCodePointsMatchURLIdent(r)){o.advanceCodePoint();let i=0;for(;;){const n=isWhitespace(o.codePointSource[o.cursor]),c=isWhitespace(o.codePointSource[o.cursor+1]);if(n&&c){i+=1,o.advanceCodePoint(1);continue}const s=n?o.codePointSource[o.cursor+1]:o.codePointSource[o.cursor];if(s===y||s===t)return i>0&&o.unreadCodePoint(i),[e.Function,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...r)}];break}return consumeUrlToken(n,o)}return o.advanceCodePoint(),[e.Function,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:String.fromCodePoint(...r)}]}function checkIfThreeCodePointsWouldStartAUnicodeRange(e){return!(e.codePointSource[e.cursor]!==K&&e.codePointSource[e.cursor]!==M||e.codePointSource[e.cursor+1]!==x||e.codePointSource[e.cursor+2]!==Q&&!isHexDigitCodePoint(e.codePointSource[e.cursor+2]))}function consumeUnicodeRangeToken(n,o){o.advanceCodePoint(2);const r=[],t=[];for(;void 0!==o.codePointSource[o.cursor]&&r.length<6&&isHexDigitCodePoint(o.codePointSource[o.cursor]);)r.push(o.codePointSource[o.cursor]),o.advanceCodePoint();for(;void 0!==o.codePointSource[o.cursor]&&r.length<6&&o.codePointSource[o.cursor]===Q;)0===t.length&&t.push(...r),r.push(G),t.push(X),o.advanceCodePoint();if(!t.length&&o.codePointSource[o.cursor]===h&&isHexDigitCodePoint(o.codePointSource[o.cursor+1]))for(o.advanceCodePoint();void 0!==o.codePointSource[o.cursor]&&t.length<6&&isHexDigitCodePoint(o.codePointSource[o.cursor]);)t.push(o.codePointSource[o.cursor]),o.advanceCodePoint();if(!t.length){const n=parseInt(String.fromCodePoint(...r),16);return[e.UnicodeRange,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{startOfRange:n,endOfRange:n}]}const i=parseInt(String.fromCodePoint(...r),16),c=parseInt(String.fromCodePoint(...t),16);return[e.UnicodeRange,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{startOfRange:i,endOfRange:c}]}function tokenize(e,n){const o=tokenizer(e,n),r=[];{for(;!o.endOfFile();){const e=o.nextToken();e&&r.push(e)}const e=o.nextToken();e&&r.push(e)}return r}function tokenizer(n,o){const r=n.css.valueOf(),i=n.unicodeRangesAllowed??!1,c=new Reader(r),p={onParseError:(null==o?void 0:o.onParseError)??(()=>{})};return{nextToken:function nextToken(){c.resetRepresentation();const n=c.codePointSource[c.cursor];if(void 0===n)return[e.EOF,"",-1,-1,void 0];if(n===B&&checkIfTwoCodePointsStartAComment(c))return consumeComment(p,c);if(i&&(n===K||n===M)&&checkIfThreeCodePointsWouldStartAUnicodeRange(c))return consumeUnicodeRangeToken(0,c);if(isIdentStartCodePoint(n))return consumeIdentLikeToken(p,c);if(isDigitCodePoint(n))return consumeNumericToken(p,c);switch(n){case d:return c.advanceCodePoint(),[e.Comma,",",c.representationStart,c.representationEnd,void 0];case u:return c.advanceCodePoint(),[e.Colon,":",c.representationStart,c.representationEnd,void 0];case H:return c.advanceCodePoint(),[e.Semicolon,";",c.representationStart,c.representationEnd,void 0];case k:return c.advanceCodePoint(),[e.OpenParen,"(",c.representationStart,c.representationEnd,void 0];case b:return c.advanceCodePoint(),[e.CloseParen,")",c.representationStart,c.representationEnd,void 0];case I:return c.advanceCodePoint(),[e.OpenSquare,"[",c.representationStart,c.representationEnd,void 0];case F:return c.advanceCodePoint(),[e.CloseSquare,"]",c.representationStart,c.representationEnd,void 0];case g:return c.advanceCodePoint(),[e.OpenCurly,"{",c.representationStart,c.representationEnd,void 0];case N:return c.advanceCodePoint(),[e.CloseCurly,"}",c.representationStart,c.representationEnd,void 0];case t:case y:return consumeStringToken(p,c);case R:return consumeHashToken(p,c);case x:case l:return checkIfThreeCodePointsWouldStartANumber(c)?consumeNumericToken(p,c):(c.advanceCodePoint(),[e.Delim,c.source[c.representationStart],c.representationStart,c.representationEnd,{value:c.source[c.representationStart]}]);case O:case s:case C:case a:case z:return consumeWhiteSpace(c);case h:return checkIfThreeCodePointsWouldStartANumber(c)?consumeNumericToken(p,c):checkIfThreeCodePointsWouldStartCDC(c)?(c.advanceCodePoint(3),[e.CDC,"--\x3e",c.representationStart,c.representationEnd,void 0]):checkIfThreeCodePointsWouldStartAnIdentSequence(0,c)?consumeIdentLikeToken(p,c):(c.advanceCodePoint(),[e.Delim,"-",c.representationStart,c.representationEnd,{value:"-"}]);case T:return checkIfFourCodePointsWouldStartCDO(c)?(c.advanceCodePoint(4),[e.CDO,"\x3c!--",c.representationStart,c.representationEnd,void 0]):(c.advanceCodePoint(),[e.Delim,"<",c.representationStart,c.representationEnd,{value:"<"}]);case P:if(c.advanceCodePoint(),checkIfThreeCodePointsWouldStartAnIdentSequence(0,c)){const n=consumeIdentSequence(p,c);return[e.AtKeyword,c.source.slice(c.representationStart,c.representationEnd+1),c.representationStart,c.representationEnd,{value:String.fromCodePoint(...n)}]}return[e.Delim,"@",c.representationStart,c.representationEnd,{value:"@"}];case W:return checkIfTwoCodePointsAreAValidEscape(c)?consumeIdentLikeToken(p,c):(c.advanceCodePoint(),p.onParseError(new ParseError('Invalid escape sequence after "\\"',c.representationStart,c.representationEnd,["4.3.1. Consume a token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"])),[e.Delim,"\\",c.representationStart,c.representationEnd,{value:"\\"}])}return c.advanceCodePoint(),[e.Delim,c.source[c.representationStart],c.representationStart,c.representationEnd,{value:c.source[c.representationStart]}]},endOfFile:function endOfFile(){return void 0===c.codePointSource[c.cursor]}}}function cloneTokens(e){return"undefined"!=typeof globalThis&&"structuredClone"in globalThis?structuredClone(e):JSON.parse(JSON.stringify(e))}function mutateIdent(e,n){let o="";const r=[];{let e="";for(e of n)r.push(e.codePointAt(0))}let t=0;r[0]===h&&r[1]===h?(o="--",t=2):r[0]===h&&r[1]?(o="-",t=2,isIdentStartCodePoint(r[1])?o+=n[1]:o+=`\\${r[1].toString(16)} `):isIdentStartCodePoint(r[0])?(o=n[0],t=1):(o=`\\${r[0].toString(16)} `,t=1);for(let e=t;e<r.length;e++)isIdentCodePoint(r[e])?o+=n[e]:o+=`\\${r[e].toString(16)} `;e[1]=o,e[4].value=n}export{n as NumberType,ParseError,Reader,e as TokenType,cloneTokens,isToken,mirrorVariant,mirrorVariantType,mutateIdent,stringify,tokenize,tokenizer};
diff --git a/node_modules/@csstools/css-tokenizer/dist/interfaces/code-point-reader.d.ts b/node_modules/@csstools/css-tokenizer/dist/interfaces/code-point-reader.d.ts
new file mode 100644
index 00000000..a178ed8f
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/interfaces/code-point-reader.d.ts
@@ -0,0 +1,12 @@
+export type CodePointReader = {
+ representationStart: number;
+ representationEnd: number;
+ cursor: number;
+ codePointSource: Array<number>;
+ representationIndices: Array<number>;
+ source: string;
+ advanceCodePoint(n?: number): void;
+ readCodePoint(n?: number): number | false;
+ unreadCodePoint(n?: number): void;
+ resetRepresentation(): void;
+};
diff --git a/node_modules/@csstools/css-tokenizer/dist/interfaces/context.d.ts b/node_modules/@csstools/css-tokenizer/dist/interfaces/context.d.ts
new file mode 100644
index 00000000..339bfe4e
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/interfaces/context.d.ts
@@ -0,0 +1,4 @@
+import { ParseError } from './error';
+export type Context = {
+ onParseError: (error: ParseError) => void;
+};
diff --git a/node_modules/@csstools/css-tokenizer/dist/interfaces/error.d.ts b/node_modules/@csstools/css-tokenizer/dist/interfaces/error.d.ts
new file mode 100644
index 00000000..dc47e1d6
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/interfaces/error.d.ts
@@ -0,0 +1,9 @@
+export declare class ParseError extends Error {
+ /** The index of the start character of the current token. */
+ sourceStart: number;
+ /** The index of the end character of the current token. */
+ sourceEnd: number;
+ /** The parser steps that preceded the error. */
+ parserState: Array<string>;
+ constructor(message: string, sourceStart: number, sourceEnd: number, parserState: Array<string>);
+}
diff --git a/node_modules/@csstools/css-tokenizer/dist/interfaces/token.d.ts b/node_modules/@csstools/css-tokenizer/dist/interfaces/token.d.ts
new file mode 100644
index 00000000..c4f2f4e3
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/interfaces/token.d.ts
@@ -0,0 +1,137 @@
+export declare enum TokenType {
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#comment-diagram */
+ Comment = "comment",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-at-keyword-token */
+ AtKeyword = "at-keyword-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-bad-string-token */
+ BadString = "bad-string-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-bad-url-token */
+ BadURL = "bad-url-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-cdc-token */
+ CDC = "CDC-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-cdo-token */
+ CDO = "CDO-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-colon-token */
+ Colon = "colon-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-comma-token */
+ Comma = "comma-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-delim-token */
+ Delim = "delim-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-dimension-token */
+ Dimension = "dimension-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-eof-token */
+ EOF = "EOF-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-function-token */
+ Function = "function-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-hash-token */
+ Hash = "hash-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-ident-token */
+ Ident = "ident-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-percentage-token */
+ Number = "number-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-percentage-token */
+ Percentage = "percentage-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-semicolon-token */
+ Semicolon = "semicolon-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-string-token */
+ String = "string-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-url-token */
+ URL = "url-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#typedef-whitespace-token */
+ Whitespace = "whitespace-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-open-paren */
+ OpenParen = "(-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-close-paren */
+ CloseParen = ")-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-open-square */
+ OpenSquare = "[-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-close-square */
+ CloseSquare = "]-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-open-curly */
+ OpenCurly = "{-token",
+ /** https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/#tokendef-close-curly */
+ CloseCurly = "}-token",
+ /** https://drafts.csswg.org/css-syntax/#typedef-unicode-range-token */
+ UnicodeRange = "unicode-range-token"
+}
+export declare enum NumberType {
+ Integer = "integer",
+ Number = "number"
+}
+export declare enum HashType {
+ Unrestricted = "unrestricted",
+ ID = "id"
+}
+export type TokenAtKeyword = Token<TokenType.AtKeyword, {
+ value: string;
+}>;
+export type TokenBadString = Token<TokenType.BadString, undefined>;
+export type TokenBadURL = Token<TokenType.BadURL, undefined>;
+export type TokenCDC = Token<TokenType.CDC, undefined>;
+export type TokenCDO = Token<TokenType.CDO, undefined>;
+export type TokenColon = Token<TokenType.Colon, undefined>;
+export type TokenComma = Token<TokenType.Comma, undefined>;
+export type TokenComment = Token<TokenType.Comment, undefined>;
+export type TokenDelim = Token<TokenType.Delim, {
+ value: string;
+}>;
+export type TokenDimension = Token<TokenType.Dimension, {
+ value: number;
+ signCharacter?: '+' | '-';
+ unit: string;
+ type: NumberType;
+}>;
+export type TokenEOF = Token<TokenType.EOF, undefined>;
+export type TokenFunction = Token<TokenType.Function, {
+ value: string;
+}>;
+export type TokenHash = Token<TokenType.Hash, {
+ value: string;
+ type: HashType;
+}>;
+export type TokenIdent = Token<TokenType.Ident, {
+ value: string;
+}>;
+export type TokenNumber = Token<TokenType.Number, {
+ value: number;
+ signCharacter?: '+' | '-';
+ type: NumberType;
+}>;
+export type TokenPercentage = Token<TokenType.Percentage, {
+ value: number;
+ signCharacter?: '+' | '-';
+}>;
+export type TokenSemicolon = Token<TokenType.Semicolon, undefined>;
+export type TokenString = Token<TokenType.String, {
+ value: string;
+}>;
+export type TokenURL = Token<TokenType.URL, {
+ value: string;
+}>;
+export type TokenWhitespace = Token<TokenType.Whitespace, undefined>;
+export type TokenOpenParen = Token<TokenType.OpenParen, undefined>;
+export type TokenCloseParen = Token<TokenType.CloseParen, undefined>;
+export type TokenOpenSquare = Token<TokenType.OpenSquare, undefined>;
+export type TokenCloseSquare = Token<TokenType.CloseSquare, undefined>;
+export type TokenOpenCurly = Token<TokenType.OpenCurly, undefined>;
+export type TokenCloseCurly = Token<TokenType.CloseCurly, undefined>;
+export type TokenUnicodeRange = Token<TokenType.UnicodeRange, {
+ startOfRange: number;
+ endOfRange: number;
+}>;
+export type CSSToken = TokenAtKeyword | TokenBadString | TokenBadURL | TokenCDC | TokenCDO | TokenColon | TokenComma | TokenComment | TokenDelim | TokenDimension | TokenEOF | TokenFunction | TokenHash | TokenIdent | TokenNumber | TokenPercentage | TokenSemicolon | TokenString | TokenURL | TokenWhitespace | TokenOpenParen | TokenCloseParen | TokenOpenSquare | TokenCloseSquare | TokenOpenCurly | TokenCloseCurly | TokenUnicodeRange;
+export type Token<T extends TokenType, U> = [
+ /** The type of token */
+ T,
+ /** The token representation */
+ string,
+ /** Start position of representation */
+ number,
+ /** End position of representation */
+ number,
+ /** Extra data */
+ U
+];
+export declare function mirrorVariantType(type: TokenType): TokenType | null;
+export declare function mirrorVariant(token: CSSToken): CSSToken | null;
+export declare function isToken(x: any): x is CSSToken;
diff --git a/node_modules/@csstools/css-tokenizer/dist/reader.d.ts b/node_modules/@csstools/css-tokenizer/dist/reader.d.ts
new file mode 100644
index 00000000..fc798c58
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/reader.d.ts
@@ -0,0 +1,15 @@
+import { CodePointReader } from './interfaces/code-point-reader';
+export declare class Reader implements CodePointReader {
+ cursor: number;
+ source: string;
+ codePointSource: Array<number>;
+ representationIndices: Array<number>;
+ length: number;
+ representationStart: number;
+ representationEnd: number;
+ constructor(source: string);
+ advanceCodePoint(n?: number): void;
+ readCodePoint(n?: number): number | false;
+ unreadCodePoint(n?: number): void;
+ resetRepresentation(): void;
+}
diff --git a/node_modules/@csstools/css-tokenizer/dist/stringify.d.ts b/node_modules/@csstools/css-tokenizer/dist/stringify.d.ts
new file mode 100644
index 00000000..574d2043
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/stringify.d.ts
@@ -0,0 +1,2 @@
+import type { CSSToken } from './interfaces/token';
+export declare function stringify(...tokens: Array<CSSToken>): string;
diff --git a/node_modules/@csstools/css-tokenizer/dist/tokenizer.d.ts b/node_modules/@csstools/css-tokenizer/dist/tokenizer.d.ts
new file mode 100644
index 00000000..318a16bb
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/tokenizer.d.ts
@@ -0,0 +1,21 @@
+import { CSSToken } from './interfaces/token';
+import { ParseError } from './interfaces/error';
+interface Stringer {
+ valueOf(): string;
+}
+export declare function tokenize(input: {
+ css: Stringer;
+ unicodeRangesAllowed?: boolean;
+}, options?: {
+ onParseError?: (error: ParseError) => void;
+}): Array<CSSToken>;
+export declare function tokenizer(input: {
+ css: Stringer;
+ unicodeRangesAllowed?: boolean;
+}, options?: {
+ onParseError?: (error: ParseError) => void;
+}): {
+ nextToken: () => CSSToken | undefined;
+ endOfFile: () => boolean;
+};
+export {};
diff --git a/node_modules/@csstools/css-tokenizer/dist/util/clone-tokens.d.ts b/node_modules/@csstools/css-tokenizer/dist/util/clone-tokens.d.ts
new file mode 100644
index 00000000..1db05d03
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/util/clone-tokens.d.ts
@@ -0,0 +1,2 @@
+import { CSSToken } from '../interfaces/token';
+export declare function cloneTokens(tokens: Array<CSSToken>): Array<CSSToken>;
diff --git a/node_modules/@csstools/css-tokenizer/dist/util/mutations.d.ts b/node_modules/@csstools/css-tokenizer/dist/util/mutations.d.ts
new file mode 100644
index 00000000..37f23cd2
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/dist/util/mutations.d.ts
@@ -0,0 +1,2 @@
+import { TokenIdent } from '../interfaces/token';
+export declare function mutateIdent(ident: TokenIdent, newValue: string): void;
diff --git a/node_modules/@csstools/css-tokenizer/package.json b/node_modules/@csstools/css-tokenizer/package.json
new file mode 100644
index 00000000..4fcbeb61
--- /dev/null
+++ b/node_modules/@csstools/css-tokenizer/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "@csstools/css-tokenizer",
+ "description": "Tokenize CSS",
+ "version": "2.2.1",
+ "contributors": [
+ {
+ "name": "Antonio Laguna",
+ "email": "antonio@laguna.es",
+ "url": "https://antonio.laguna.es"
+ },
+ {
+ "name": "Romain Menke",
+ "email": "romainmenke@gmail.com"
+ }
+ ],
+ "license": "MIT",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs",
+ "default": "./dist/index.mjs"
+ }
+ },
+ "files": [
+ "CHANGELOG.md",
+ "LICENSE.md",
+ "README.md",
+ "dist"
+ ],
+ "devDependencies": {
+ "@rmenke/css-tokenizer-tests": "^1.1.1",
+ "postcss-parser-tests": "^8.8.0"
+ },
+ "scripts": {
+ "benchmark": "node ./test/benchmark.mjs",
+ "build": "rollup -c ../../rollup/default.mjs",
+ "lint": "node ../../.github/bin/format-package-json.mjs",
+ "prepublishOnly": "npm run build && npm run test",
+ "stryker": "stryker run --logLevel error",
+ "test": "node ./test/test.mjs && node ./test/_import.mjs && node ./test/_require.cjs"
+ },
+ "homepage": "https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer#readme",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/csstools/postcss-plugins.git",
+ "directory": "packages/css-tokenizer"
+ },
+ "bugs": "https://github.com/csstools/postcss-plugins/issues",
+ "keywords": [
+ "css",
+ "tokenizer"
+ ],
+ "volta": {
+ "extends": "../../package.json"
+ }
+}