From e7b5ac027106aa932543a9d1fc0477ef9dcd2cc0 Mon Sep 17 00:00:00 2001 From: Jeff Date: Mon, 17 Jun 2024 12:06:29 -0600 Subject: [PATCH] Add Stylelint config package --- .changeset/calm-bobcats-laugh.md | 8 + jsconfig.json | 10 + package.json | 1 + packages/stylelint-config/CHANGELOG.md | 47 ++ packages/stylelint-config/LICENSE.txt | 15 + packages/stylelint-config/README.md | 38 ++ .../__tests__/config.test.mjs | 79 +++ .../stylelint-config/__tests__/invalid.css | 20 + packages/stylelint-config/__tests__/valid.css | 10 + packages/stylelint-config/conf/stylistic.js | 169 +++++ packages/stylelint-config/index.js | 172 ++++++ packages/stylelint-config/package.json | 39 ++ pnpm-lock.yaml | 582 +++++++++++++++++- 13 files changed, 1170 insertions(+), 20 deletions(-) create mode 100644 .changeset/calm-bobcats-laugh.md create mode 100644 jsconfig.json create mode 100644 packages/stylelint-config/CHANGELOG.md create mode 100644 packages/stylelint-config/LICENSE.txt create mode 100644 packages/stylelint-config/README.md create mode 100644 packages/stylelint-config/__tests__/config.test.mjs create mode 100644 packages/stylelint-config/__tests__/invalid.css create mode 100644 packages/stylelint-config/__tests__/valid.css create mode 100644 packages/stylelint-config/conf/stylistic.js create mode 100644 packages/stylelint-config/index.js create mode 100644 packages/stylelint-config/package.json diff --git a/.changeset/calm-bobcats-laugh.md b/.changeset/calm-bobcats-laugh.md new file mode 100644 index 0000000..4c0e178 --- /dev/null +++ b/.changeset/calm-bobcats-laugh.md @@ -0,0 +1,8 @@ +--- +'@zazen/stylelint-config': major +--- + +Update minimum required versions + +- `node@18` +- `stylelint@16` diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..10e8d10 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "module": "esnext", + "target": "esnext", + }, + "include": ["**/*.js", "**/*.mjs"], + "exclude": ["node_modules"], +} diff --git a/package.json b/package.json index 8d1ba88..38b4b7d 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "prettier": "@zazen/prettier-config", "devDependencies": { "@changesets/cli": "2.27.1", + "@types/node": "20.14.2", "@zazen/eslint-config": "workspace:*", "@zazen/prettier-config": "workspace:*", "eslint": "8.56.0", diff --git a/packages/stylelint-config/CHANGELOG.md b/packages/stylelint-config/CHANGELOG.md new file mode 100644 index 0000000..4434265 --- /dev/null +++ b/packages/stylelint-config/CHANGELOG.md @@ -0,0 +1,47 @@ +# Change Log + +## 3.0.0 — 2022-05-07 + +#### 💣 Breaking + +- Upgrade `recommended` config to latest [`f637c27`](https://github.com/stormwarning/zazen-stylelint-config/commit/f637c27343f5664298d4223d5435f77d94d74e10) +- Upgrade `recess-order` config to latest [#175](https://github.com/stormwarning/zazen-stylelint-config/pull/175) + + The minimum supported version of Stylelint is now >=14; the peerDependencies of this config have been updated to match. + +## 2.0.0 — 2021-03-02 + +#### ♻️ Changed + +- Bumps extended configs to their latest version [#146](https://github.com/stormwarning/zazen-stylelint-config/pull/146) + + `stylelint-config-recommended` 2.1.0 → 3.0.0 + `stylelint-order` 2.0.0 → 4.1.0 + + Also updates the CI and release workflow and config + +## 1.0.0 — 2018-12-19 + +#### 💣 Breaking + +- Adds some new rules — including new optional rules for Sass — and removes a few. Partials are renamed to match [Stylelint's categories](https://stylelint.io/VISION/) and `stylelint-config-recommended` is used as a baseline. + +#### 🎁 Added + +- Update linting rules ([#3](https://github.com/stormwarning/zazen-stylelint-config/issues/3)) + +## 0.2.0 — 2018-09-07 + +#### 🎁 Added + +- `except` and `ignore` options for `comment-empty-line-before` rule \([#2](https://github.com/stormwarning/zazen-stylelint-config/pull/2)) + +### 0.1.1 — 2018-04-11 + +#### 🐛 Fixed + +- Include `stylelint-config-recess-order` module in dependencies \[[`5c32443`](https://github.com/stormwarning/zazen-stylelint-config/commit/5c3244318e0e5d9a05197784c6eb642d02f13066)] + +## 0.1.0 — 2018-04-11 + +### 🎉 Initial release diff --git a/packages/stylelint-config/LICENSE.txt b/packages/stylelint-config/LICENSE.txt new file mode 100644 index 0000000..4a6f46f --- /dev/null +++ b/packages/stylelint-config/LICENSE.txt @@ -0,0 +1,15 @@ +ISC License + +Copyright Jeff Nelson + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/packages/stylelint-config/README.md b/packages/stylelint-config/README.md new file mode 100644 index 0000000..c84a5c8 --- /dev/null +++ b/packages/stylelint-config/README.md @@ -0,0 +1,38 @@ +# zazen-stylelint-config + +[![npm version][npm-img]][npm-url] +[![npm downloads][npm-dls]][npm-url] + +[Stylelint][] configuration for [zazen][]-generated projects. + +## Usage + +Install the conventions by running: + +```sh +npm install --save-dev stylelint @zazen/stylelint-config +``` + +Then add the extends to your `stylelint.config.js`: + +```js +/** @type {import('stylelint').Config} */ +export default { + extends: ['@zazen/stylelint-config'], + rules: { /* … */ } +} +``` + +[npm-url]: https://www.npmjs.com/package/@zazen/stylelint-config + +[npm-img]: https://img.shields.io/npm/v/@zazen/stylelint-config.svg?style=flat-square + +[npm-dls]: https://img.shields.io/npm/dt/@zazen/stylelint-config.svg?style=flat-square + +[issues-url]: https://github.com/stormwarning/zazen-stylelint-config/issues + +[issues-img]: https://img.shields.io/github/issues/stormwarning/zazen-stylelint-config.svg?style=flat-square + +[stylelint]: https://stylelint.io + +[zazen]: https://github.com/stormwarning/zazen diff --git a/packages/stylelint-config/__tests__/config.test.mjs b/packages/stylelint-config/__tests__/config.test.mjs new file mode 100644 index 0000000..0964e7a --- /dev/null +++ b/packages/stylelint-config/__tests__/config.test.mjs @@ -0,0 +1,79 @@ +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { describe, it } from 'node:test' + +import stylelint from 'stylelint' + +import stylistic from '../conf/stylistic.js' +import config from '../index.js' + +const VALID_CSS = readFileSync('./__tests__/valid.css', 'utf8') +const INVALID_CSS = readFileSync('./__tests__/invalid.css', 'utf8') +const RULE_WARNINGS = [ + 'color-function-notation', + 'alpha-value-notation', + 'number-max-precision', + 'no-descending-specificity', + 'rule-empty-line-before', + 'color-named', + 'plugin/use-logical-properties-and-values', + 'order/properties-order', + 'length-zero-no-unit', + 'order/order', + 'selector-type-no-unknown', + 'declaration-property-value-no-unknown', +] + +describe('valid css', async () => { + let result = await stylelint.lint({ + code: VALID_CSS, + config, + }) + + it('has no errors', () => { + assert.equal(result.errored, false) + }) + + it('flags no warnings', () => { + assert.equal(result.results[0].warnings.length, 0) + }) +}) + +describe('invalid css', async () => { + let result = await stylelint.lint({ + code: INVALID_CSS, + config, + }) + let rules = new Set( + result.results[0].warnings.map((warning) => warning.rule), + ) + + it('includes errors', () => { + assert.equal(result.errored, true) + }) + + it('flags correct warnings', () => { + for (let rule of RULE_WARNINGS) { + assert.ok(rules.has(rule)) + } + }) +}) + +describe('deprecated rules are excluded', () => { + let ruleNames = [ + ...Object.keys(config.rules), + ...Object.keys(stylistic.rules), + ] + + it('is not empty', () => { + assert.ok(ruleNames.length > 0) + }) + + for (let ruleName of ruleNames) { + it(`${ruleName}`, async () => { + let rule = await stylelint.rules[ruleName] + + if (rule?.meta) assert.ok(!rule.meta.deprecated) + }) + } +}) diff --git a/packages/stylelint-config/__tests__/invalid.css b/packages/stylelint-config/__tests__/invalid.css new file mode 100644 index 0000000..d420736 --- /dev/null +++ b/packages/stylelint-config/__tests__/invalid.css @@ -0,0 +1,20 @@ +@import URL('//example.com/x.css'); + +.selector-1 { + & .selector-2 { + & .selector-3 { + & .selector-4 { + color: rgba(0, 0, 0, 0.08215); + } + } + } +} +.selector-2 { + color: red; + margin-top: 0px; + --custom-property: 0; +} + +madeup { + margin: #fff; +} diff --git a/packages/stylelint-config/__tests__/valid.css b/packages/stylelint-config/__tests__/valid.css new file mode 100644 index 0000000..3e590a9 --- /dev/null +++ b/packages/stylelint-config/__tests__/valid.css @@ -0,0 +1,10 @@ +@import url('x.css'); + +.selector-1, +.selector-2, +.selector-3[type='text'] { + box-sizing: border-box; + display: block; + color: #333; + background: linear-gradient(#fff, rgb(0 0 0 / 80%)); +} diff --git a/packages/stylelint-config/conf/stylistic.js b/packages/stylelint-config/conf/stylistic.js new file mode 100644 index 0000000..ece4258 --- /dev/null +++ b/packages/stylelint-config/conf/stylistic.js @@ -0,0 +1,169 @@ +/** @type {import('stylelint').Config} */ +export default { + /** + * @see https://github.com/stylelint-stylistic/stylelint-stylistic + * @see https://github.com/hudochenkov/stylelint-order + */ + plugins: ['@stylistic/stylelint-plugin', 'stylelint-order'], + + /** + * @see https://github.com/stormwarning/stylelint-config-recess-order + */ + extends: ['stylelint-config-recess-order'], + + rules: { + /** + * @see https://stylelint.io/user-guide/rules/alpha-value-notation + */ + 'alpha-value-notation': 'percentage', + + /** + * Keep at-rules consistently spaced-out for better legibility. + * @see https://stylelint.io/user-guide/rules/at-rule-empty-line-before + */ + 'at-rule-empty-line-before': [ + 'always', + { + except: ['blockless-after-same-name-blockless', 'first-nested'], + ignore: ['after-comment'], + }, + ], + + /** + * Use modern color function syntax. + * @see https://stylelint.io/user-guide/rules/color-function-notation + */ + 'color-function-notation': 'modern', + + /** + * Use short hex values where possible. + * @see https://stylelint.io/user-guide/rules/color-hex-length + */ + 'color-hex-length': 'short', + + /** + * Ensure names in font-family lists are quoted consistently. + * @see https://stylelint.io/user-guide/rules/font-family-name-quotes + */ + 'font-family-name-quotes': 'always-where-recommended', + + /** + * Will probably be migrated to @stylistic at some point. + * @see https://stylelint.io/user-guide/rules/function-name-case + */ + 'function-name-case': 'lower', + + /** + * Ensure URLs are quoted consistently. + * @see https://stylelint.io/user-guide/rules/function-url-quotes + */ + 'function-url-quotes': 'always', + + /** + * @see https://stylelint.io/user-guide/rules/hue-degree-notation + */ + 'hue-degree-notation': 'angle', + + /** + * Avoid redundant units on zero values. + * @see https://stylelint.io/user-guide/rules/length-zero-no-unit + */ + 'length-zero-no-unit': [true, { ignore: ['custom-properties'] }], + + /** + * @see https://stylelint.io/user-guide/rules/lightness-notation + */ + 'lightness-notation': 'percentage', + + /** + * Keep style rules consistently spaced-out for better legibility. + * @see https://stylelint.io/user-guide/rules/rule-empty-line-before + */ + 'rule-empty-line-before': [ + 'always', + { + except: ['after-single-line-comment', 'first-nested'], + ignore: ['after-comment'], + }, + ], + + /** + * Ensure attribute selectors are quoted consistently. + * @see https://stylelint.io/user-guide/rules/selector-attribute-quotes + */ + 'selector-attribute-quotes': 'always', + + /** + * Enforce accurate pseudo-element syntax. + * @see https://stylelint.io/user-guide/rules/selector-pseudo-element-colon-notation + */ + 'selector-pseudo-element-colon-notation': 'double', + + /** + * Will probably be migrated to @stylistic at some point. + * @see https://stylelint.io/user-guide/rules/selector-type-case + */ + 'selector-type-case': 'lower', + + /** + * Will probably be migrated to @stylistic at some point. + * @see https://stylelint.io/user-guide/rules/value-keyword-case + */ + 'value-keyword-case': 'lower', + + /** + * Recommended in `@stylistic/stylelint-config`. + * @see https://github.com/stylelint-stylistic/stylelint-config/blob/main/.stylelintrc.json + */ + '@stylistic/at-rule-name-case': 'lower', + '@stylistic/color-hex-case': 'lower', + '@stylistic/media-feature-name-case': 'lower', + '@stylistic/no-extra-semicolons': true, + '@stylistic/number-leading-zero': 'always', + '@stylistic/number-no-trailing-zeros': true, + '@stylistic/property-case': 'lower', + '@stylistic/selector-pseudo-class-case': 'lower', + '@stylistic/selector-pseudo-element-case': 'lower', + '@stylistic/unit-case': 'lower', + + /** + * Maintain a consistent order of the contents of declaration blocks. + * @see https://github.com/hudochenkov/stylelint-order/blob/master/rules/order/README.md + */ + 'order/order': [ + 'dollar-variables', + 'custom-properties', + { + type: 'at-rule', + name: 'extend', + }, + { + type: 'at-rule', + name: 'include', + hasBlock: false, + }, + 'declarations', + 'rules', + { + type: 'rule', + selector: /^&:[\w-]+$/, + }, + { + type: 'rule', + selector: /^&::[\w-]+$/, + }, + { + type: 'at-rule', + hasBlock: true, + }, + ], + + /** + * Ensure other property order settings don't conflict with the + * `recess-order` config. Turning this rule off explicitly in case it + * is enabled in an extended config. + * @see https://github.com/hudochenkov/stylelint-order/blob/master/rules/properties-alphabetical-order/README.md + */ + 'order/properties-alphabetical-order': null, + }, +} diff --git a/packages/stylelint-config/index.js b/packages/stylelint-config/index.js new file mode 100644 index 0000000..188a35f --- /dev/null +++ b/packages/stylelint-config/index.js @@ -0,0 +1,172 @@ +const KEBAB_CASE_REGEX = /([a-z][\da-z]*(-[\da-z]+)*)/ + +/** @type {import('stylelint').Config} */ +export default { + ignoreFiles: ['node_modules', '**/dist/**/*.css'], + + /** + * @see https://github.com/RJWadley/stylelint-no-unsupported-browser-features + * @see https://github.com/yuschick/stylelint-plugin-logical-css + */ + plugins: [ + 'stylelint-no-unsupported-browser-features', + 'stylelint-plugin-logical-css', + ], + + /** + * @see https://github.com/stylelint/stylelint-config-recommended + */ + extends: ['stylelint-config-recommended', './conf/stylistic.js'], + + rules: { + /** + * Avoid vendor prefixes in at-rules. Autoprefixer should handle + * prefixing where necessary. + * @see https://stylelint.io/user-guide/rules/at-rule-no-vendor-prefix + */ + 'at-rule-no-vendor-prefix': true, + + /** + * Ensure `font-display` and `font-style` are included in @font-face + * definitions. + * @see https://stylelint.io/user-guide/rules/at-rule-property-required-list + */ + 'at-rule-property-required-list': { + 'font-face': ['font-display', 'font-family', 'font-style'], + }, + + /** + * Avoid use of named colours. + * @see https://stylelint.io/user-guide/rules/color-named + */ + 'color-named': 'never', + + /** + * Ensure a concise list of properties. + * @see https://stylelint.io/user-guide/rules/declaration-block-no-redundant-longhand-properties + */ + 'declaration-block-no-redundant-longhand-properties': [ + true, + { ignoreShorthands: ['grid-template'] }, + ], + + /** + * Avoid use of `!important`. + * @see https://stylelint.io/user-guide/rules/declaration-no-important + */ + 'declaration-no-important': true, + + /** + * Avoid incorrect property value types. + * @see https://stylelint.io/user-guide/rules/declaration-property-value-no-unknown + */ + 'declaration-property-value-no-unknown': true, + + /** + * @see https://stylelint.io/user-guide/rules/function-url-no-scheme-relative + */ + 'function-url-no-scheme-relative': true, + + /** + * Use kebab-case for keyframe animation names. + * @see https://stylelint.io/user-guide/rules/keyframes-name-pattern + */ + 'keyframes-name-pattern': [ + KEBAB_CASE_REGEX, + { message: (n) => `Expected animation "${n}" to be kebab-case` }, + ], + + /** + * Avoid nesting too deeply as it can be harder to follow and lead to + * specificity issues. + * @see https://stylelint.io/user-guide/rules/max-nesting-depth + */ + 'max-nesting-depth': [ + 3, + { ignore: ['blockless-at-rules', 'pseudo-classes'] }, + ], + + /** + * Avoid vendor prefixes in media queries. Autoprefixer should handle + * prefixing where necessary. + * @see https://stylelint.io/user-guide/rules/media-feature-name-no-vendor-prefix + */ + 'media-feature-name-no-vendor-prefix': true, + + /** + * Source order matters in CSS. Keep stylesheets legible by having + * higher-specificity selectors follow lower. + * @see https://stylelint.io/user-guide/rules/no-descending-specificity + */ + 'no-descending-specificity': [ + true, + { ignore: ['selectors-within-list'] }, + ], + + /** + * Avoid using greater precision than browsers care about. + * @see https://stylelint.io/user-guide/rules/number-max-precision + */ + 'number-max-precision': 4, + + /** + * Use kebab-case for class and id names. + * @see https://stylelint.io/user-guide/rules/selector-class-pattern + * @see https://stylelint.io/user-guide/rules/selector-id-pattern + */ + 'selector-class-pattern': [ + KEBAB_CASE_REGEX, + { message: (s) => `Expected class "${s}" to be kebab-case.` }, + ], + 'selector-id-pattern': [ + KEBAB_CASE_REGEX, + { message: (s) => `Expected id "${s}" to be kebab-case.` }, + ], + + /** + * Maintain a sensible level of selector complexity. + * @see https://stylelint.io/user-guide/rules/selector-max-attribute + * @see https://stylelint.io/user-guide/rules/selector-max-class + * @see https://stylelint.io/user-guide/rules/selector-max-compound-selectors + * @see https://stylelint.io/user-guide/rules/selector-max-universal + */ + 'selector-max-attribute': 8, + 'selector-max-class': 8, + 'selector-max-compound-selectors': 8, + 'selector-max-universal': 1, + + /** + * Avoid vendor prefixes in selectors. Autoprefixer should handle + * prefixing where necessary. + * @see https://stylelint.io/user-guide/rules/selector-no-vendor-prefix + */ + 'selector-no-vendor-prefix': [ + true, + { ignoreSelectors: ['::-webkit-input-placeholder'] }, + ], + + /** + * Avoid redundant values in shorthand properties. + * @see https://stylelint.io/user-guide/rules/shorthand-property-no-redundant-values + */ + 'shorthand-property-no-redundant-values': true, + + /** + * @see https://stylelint.io/user-guide/rules/value-no-vendor-prefix + */ + 'value-no-vendor-prefix': [ + true, + { ignoreValues: ['grab', 'grabbing'] }, + ], + + /** + * Encourage the use of logical properties and values. + * @see https://github.com/yuschick/stylelint-plugin-logical-css + */ + 'plugin/use-logical-properties-and-values': [ + true, + { severity: 'warning' }, + ], + 'plugin/use-logical-units': [true, { severity: 'warning' }], + }, +} diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json new file mode 100644 index 0000000..91f5b7b --- /dev/null +++ b/packages/stylelint-config/package.json @@ -0,0 +1,39 @@ +{ + "name": "@zazen/stylelint-config", + "version": "3.0.0", + "description": "Lint CSS, free of weariness and confusion", + "keywords": [ + "stylelint-config" + ], + "homepage": "https://github.com/stormwarning/zazen-stylelint-config", + "repository": { + "type": "git", + "url": "git+https://github.com/stormwarning/zazen.git", + "directory": "packages/stylelint-config" + }, + "license": "ISC", + "author": "Jeff (https://tidaltheory.io)", + "sideEffects": false, + "type": "module", + "exports": "./index.js", + "scripts": { + "test": "node --test" + }, + "dependencies": { + "@stylistic/stylelint-plugin": "2.1.2", + "stylelint-config-recess-order": "5.0.1", + "stylelint-config-recommended": "14.0.0", + "stylelint-no-unsupported-browser-features": "8.0.1", + "stylelint-order": "6.0.4", + "stylelint-plugin-logical-css": "1.2.1" + }, + "devDependencies": { + "stylelint": "16.6.1" + }, + "peerDependencies": { + "stylelint": ">=16" + }, + "engines": { + "node": ">=18" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 611fcce..3cd87c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@changesets/cli': specifier: 2.27.1 version: 2.27.1 + '@types/node': + specifier: 20.14.2 + version: 20.14.2 '@zazen/eslint-config': specifier: workspace:* version: link:packages/eslint-config @@ -34,10 +37,10 @@ importers: version: 5.3.3 vite: specifier: 5.0.12 - version: 5.0.12 + version: 5.0.12(@types/node@20.14.2) vitest: specifier: 1.2.1 - version: 1.2.1 + version: 1.2.1(@types/node@20.14.2) packages/changesets-changelog: dependencies: @@ -162,6 +165,31 @@ importers: specifier: 2.4.10 version: 2.4.10(prettier@3.2.4) + packages/stylelint-config: + dependencies: + '@stylistic/stylelint-plugin': + specifier: 2.1.2 + version: 2.1.2(stylelint@16.6.1) + stylelint-config-recess-order: + specifier: 5.0.1 + version: 5.0.1(stylelint@16.6.1) + stylelint-config-recommended: + specifier: 14.0.0 + version: 14.0.0(stylelint@16.6.1) + stylelint-no-unsupported-browser-features: + specifier: 8.0.1 + version: 8.0.1(stylelint@16.6.1) + stylelint-order: + specifier: 6.0.4 + version: 6.0.4(stylelint@16.6.1) + stylelint-plugin-logical-css: + specifier: 1.2.1 + version: 1.2.1(stylelint@16.6.1) + devDependencies: + stylelint: + specifier: 16.6.1 + version: 16.6.1(typescript@5.3.3) + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -386,6 +414,39 @@ packages: prettier: 2.8.8 dev: true + /@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1): + resolution: {integrity: sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.3.1 + dependencies: + '@csstools/css-tokenizer': 2.3.1 + + /@csstools/css-tokenizer@2.3.1: + resolution: {integrity: sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==} + engines: {node: ^14 || ^16 || >=18} + + /@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3)(@csstools/css-tokenizer@2.3.1): + resolution: {integrity: sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.6.3 + '@csstools/css-tokenizer': ^2.3.1 + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + + /@csstools/selector-specificity@3.1.1(postcss-selector-parser@6.1.0): + resolution: {integrity: sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.1.0 + + /@dual-bundle/import-meta-resolve@4.1.0: + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -827,6 +888,22 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true + /@stylistic/stylelint-plugin@2.1.2(stylelint@16.6.1): + resolution: {integrity: sha512-JsSqu0Y3vsX+PBl+DwULxC0cIv9C1yIcq1MXkx7pBOGtTqU26a75I8MPYMiEYvrsXgsKLi65xVgy1iLVSZquJA==} + engines: {node: ^18.12 || >=20.9} + peerDependencies: + stylelint: ^16.0.2 + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3)(@csstools/css-tokenizer@2.3.1) + is-plain-object: 5.0.0 + postcss-selector-parser: 6.1.0 + postcss-value-parser: 4.2.0 + style-search: 0.1.0 + stylelint: 16.6.1(typescript@5.3.3) + dev: false + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true @@ -839,6 +916,10 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: false + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: false + /@types/minimist@1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true @@ -851,6 +932,12 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true + /@types/node@20.14.2: + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1166,6 +1253,14 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1185,7 +1280,6 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -1232,6 +1326,11 @@ packages: call-bind: 1.0.5 is-array-buffer: 3.0.2 + /array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + dev: false + /array-find-index@1.0.2: resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} engines: {node: '>=0.10.0'} @@ -1304,6 +1403,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: false + /arrify@3.0.0: resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} engines: {node: '>=12'} @@ -1313,6 +1417,10 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + /ava@5.3.1: resolution: {integrity: sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==} engines: {node: '>=14.19 <15 || >=16.15 <17 || >=18'} @@ -1377,6 +1485,9 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -1411,6 +1522,12 @@ packages: dependencies: fill-range: 7.0.1 + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + /breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} dependencies: @@ -1648,6 +1765,9 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -1698,6 +1818,25 @@ packages: browserslist: 4.22.2 dev: false + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig@9.0.0(typescript@5.3.3): + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + typescript: 5.3.3 + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -1714,6 +1853,29 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /css-functions-list@3.2.2: + resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} + engines: {node: '>=12 || >=16'} + + /css-tokenize@1.0.1: + resolution: {integrity: sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==} + dependencies: + inherits: 2.0.4 + readable-stream: 1.1.14 + dev: false + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true @@ -1860,11 +2022,36 @@ packages: dependencies: esutils: 2.0.3 + /doiuse@6.0.2: + resolution: {integrity: sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001578 + css-tokenize: 1.0.1 + duplexify: 4.1.3 + ldjson-stream: 1.2.1 + multimatch: 5.0.0 + postcss: 8.4.33 + source-map: 0.7.4 + yargs: 17.7.2 + dev: false + /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: false + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: false + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -1889,6 +2076,12 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -1897,6 +2090,10 @@ packages: strip-ansi: 6.0.1 dev: true + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -2480,6 +2677,10 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -2499,12 +2700,24 @@ packages: dependencies: flat-cache: 3.2.0 + /file-entry-cache@9.0.0: + resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} + engines: {node: '>=18'} + dependencies: + flat-cache: 5.0.0 + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2542,9 +2755,19 @@ packages: keyv: 4.5.4 rimraf: 3.0.2 + /flat-cache@5.0.0: + resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} + engines: {node: '>=18'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -2670,6 +2893,20 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + /globals@13.23.0: resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} @@ -2695,7 +2932,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -2709,6 +2946,9 @@ packages: merge2: 1.4.1 slash: 4.0.0 + /globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -2769,6 +3009,10 @@ packages: /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true @@ -2799,6 +3043,10 @@ packages: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2832,6 +3080,9 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -2956,7 +3207,6 @@ packages: /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - dev: true /is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -3018,6 +3268,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -3066,6 +3320,9 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -3094,13 +3351,22 @@ packages: /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - dev: true /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} dev: true + /known-css-properties@0.31.0: + resolution: {integrity: sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==} + + /ldjson-stream@1.2.1: + resolution: {integrity: sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==} + dependencies: + split2: 0.2.1 + through2: 0.6.5 + dev: false + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3196,6 +3462,9 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -3261,6 +3530,9 @@ packages: escape-string-regexp: 5.0.0 dev: true + /mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + /md5-hex@3.0.1: resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} engines: {node: '>=8'} @@ -3268,6 +3540,9 @@ packages: blueimp-md5: 2.19.0 dev: true + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + /mem@9.0.2: resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} engines: {node: '>=12.20'} @@ -3276,6 +3551,10 @@ packages: mimic-fn: 4.0.0 dev: true + /meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + /meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -3307,6 +3586,13 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -3370,11 +3656,21 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + dev: false + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3411,7 +3707,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} @@ -3648,6 +3943,9 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -3698,6 +3996,35 @@ packages: engines: {node: '>=4'} dev: false + /postcss-resolve-nested-selector@0.1.1: + resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + + /postcss-safe-parser@7.0.0(postcss@8.4.38): + resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.38 + + /postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-sorting@8.0.2(postcss@8.4.38): + resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} + peerDependencies: + postcss: ^8.4.20 + dependencies: + postcss: 8.4.38 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} @@ -3705,7 +4032,14 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} @@ -3814,6 +4148,33 @@ packages: strip-bom: 3.0.0 dev: true + /readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + + /readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3857,6 +4218,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true @@ -3880,7 +4245,6 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -3960,6 +4324,10 @@ packages: has-symbols: 1.0.3 isarray: 2.0.5 + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -4064,6 +4432,14 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4113,7 +4489,15 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false /spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -4140,6 +4524,12 @@ packages: /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /split2@0.2.1: + resolution: {integrity: sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==} + dependencies: + through2: 0.6.5 + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -4159,6 +4549,10 @@ packages: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: true + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: false + /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -4218,6 +4612,16 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 + /string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4229,7 +4633,6 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -4255,6 +4658,106 @@ packages: acorn: 8.11.2 dev: true + /style-search@0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + dev: false + + /stylelint-config-recess-order@5.0.1(stylelint@16.6.1): + resolution: {integrity: sha512-rKbGkoa3h0rINrGln9TFVowvSCLgPJC5O0EuPiqlqWcJMb1lImEtXktcjFCVz+hwtSUiHD3ijJc3vP9muFOgJg==} + peerDependencies: + stylelint: '>=16' + dependencies: + stylelint: 16.6.1(typescript@5.3.3) + stylelint-order: 6.0.4(stylelint@16.6.1) + dev: false + + /stylelint-config-recommended@14.0.0(stylelint@16.6.1): + resolution: {integrity: sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.0 + dependencies: + stylelint: 16.6.1(typescript@5.3.3) + dev: false + + /stylelint-no-unsupported-browser-features@8.0.1(stylelint@16.6.1): + resolution: {integrity: sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.2 + dependencies: + doiuse: 6.0.2 + postcss: 8.4.33 + stylelint: 16.6.1(typescript@5.3.3) + dev: false + + /stylelint-order@6.0.4(stylelint@16.6.1): + resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + dependencies: + postcss: 8.4.38 + postcss-sorting: 8.0.2(postcss@8.4.38) + stylelint: 16.6.1(typescript@5.3.3) + dev: false + + /stylelint-plugin-logical-css@1.2.1(stylelint@16.6.1): + resolution: {integrity: sha512-56r1xGVZ/ExZT5SFJ7AhyZVUjOvRTCbLLl68PFTN1R55KU0SQEe22YyE53570cxeTf9plpvqckHAQBiUU714YQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + stylelint: 16.6.1(typescript@5.3.3) + dev: false + + /stylelint@16.6.1(typescript@5.3.3): + resolution: {integrity: sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==} + engines: {node: '>=18.12.0'} + hasBin: true + dependencies: + '@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1) + '@csstools/css-tokenizer': 2.3.1 + '@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3)(@csstools/css-tokenizer@2.3.1) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.0) + '@dual-bundle/import-meta-resolve': 4.1.0 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0(typescript@5.3.3) + css-functions-list: 3.2.2 + css-tree: 2.3.1 + debug: 4.3.4 + fast-glob: 3.3.2 + fastest-levenshtein: 1.0.16 + file-entry-cache: 9.0.0 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.31.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.38 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 7.0.0(postcss@8.4.38) + postcss-selector-parser: 6.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 7.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.2 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + /supertap@3.0.1: resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4277,10 +4780,20 @@ packages: dependencies: has-flag: 4.0.0 + /supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + /synckit@0.9.0: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4289,6 +4802,16 @@ packages: tslib: 2.6.2 dev: false + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.16.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + /temp-dir@3.0.0: resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} engines: {node: '>=14.16'} @@ -4302,6 +4825,13 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + /through2@0.6.5: + resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + dependencies: + readable-stream: 1.0.34 + xtend: 4.0.2 + dev: false + /time-zone@1.0.0: resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} engines: {node: '>=4'} @@ -4490,6 +5020,10 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -4515,13 +5049,16 @@ packages: resolution: {integrity: sha512-dsBD6GbytSMj9YDb3jVzSRENwFh50oUORnWBeSHfo0Lnwv2KMm/J4npyGy1P9rivUPsUGLjTA53XqAFqpe0nww==} dev: true + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - /vite-node@1.2.1: + /vite-node@1.2.1(@types/node@20.14.2): resolution: {integrity: sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4530,7 +5067,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.0.12 + vite: 5.0.12(@types/node@20.14.2) transitivePeerDependencies: - '@types/node' - less @@ -4542,7 +5079,7 @@ packages: - terser dev: true - /vite@5.0.12: + /vite@5.0.12(@types/node@20.14.2): resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4570,6 +5107,7 @@ packages: terser: optional: true dependencies: + '@types/node': 20.14.2 esbuild: 0.19.12 postcss: 8.4.33 rollup: 4.9.5 @@ -4577,7 +5115,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.2.1: + /vitest@1.2.1(@types/node@20.14.2): resolution: {integrity: sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -4602,6 +5140,7 @@ packages: jsdom: optional: true dependencies: + '@types/node': 20.14.2 '@vitest/expect': 1.2.1 '@vitest/runner': 1.2.1 '@vitest/snapshot': 1.2.1 @@ -4620,8 +5159,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.0.12 - vite-node: 1.2.1 + vite: 5.0.12(@types/node@20.14.2) + vite-node: 1.2.1(@types/node@20.14.2) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -4691,7 +5230,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -4744,7 +5282,11 @@ packages: dependencies: imurmurhash: 0.1.4 signal-exit: 4.1.0 - dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}