Frontend: Tune lightbox theme for face markers, retire ESLint-Prettier glue #4966

- Refactor `meta.css` face-marker palette to consume theme tokens (Path A):
  default rect → `on-surface`; named-marker stroke → `primary`; draft →
  `accent`; hover → `primary-darken-1`; handle → `primary-darken-1` fill +
  `primary` stroke; Confirm pill → `primary-darken-2`; Cancel pill →
  `highlight-lighten-1`; Remove pill → `remove`; Back button → `surface`.
- Retune the `lightbox` theme block to support the rebind: `primary
  #F2F3F3 → #9E8FC9` (muted purple), `accent #2D2E2E → #BDAFE4` (lavender),
  `surface #151515 → #181818`, `surface-bright → #1c1c1c`, `button →
  #242424`, `highlight #424041 → #3c3c3c`, `remove → #cd4645`. Effectively
  reverts the `surface-variant ↔ on-surface-variant` swap and re-introduces
  an explicit `.v-tooltip.v-theme--lightbox` override in `lightbox.css`.
- Bump `variations.darken` to 2 so `--v-theme-primary-darken-2` resolves.
- Swap the in-template button order in `markers.vue` to Cancel-left /
  Confirm-right for both the pending-add and remove-confirm popovers.
- Add inline comments to the `default.add` and updated `lightbox`
  entries so each color's purpose stays documented at the source.
- Drop `eslint-plugin-prettier` (its `prettier/prettier` rule was already
  `"off"`, making the plugin inert). Replace `plugin:prettier/recommended`
  with a direct `eslint-config-prettier` extend; keep ESLint's own
  `indent` / `quotes` / `brace-style` rules as the JS formatter.
- Tell ESLint to ignore `*.{css,scss,sass}` so Prettier owns CSS
  unambiguously; wire `npm run fmt-css` / `npm run lint-css` Prettier
  passes into `npm run fmt` / `npm run lint` so `make fmt-js` and
  `make lint-js` cover stylesheets too.
- Drop `eslint-plugin-prettier` from the dev-container global install
  list and the `frontend/tests/README.md` dependency table; regenerate
  `NOTICE` files.
This commit is contained in:
Michael Mayer 2026-05-19 09:56:09 +00:00
parent f928844a40
commit 7ba4dc1bf6
11 changed files with 62 additions and 152 deletions

1
NOTICE
View file

@ -9644,7 +9644,6 @@ eslint-formatter-pretty MIT Sindre Sorhus sindresorhus@gmail
eslint-plugin-html ISC n/a
eslint-plugin-import MIT Ben Mosher <me@benmosher.com>
eslint-plugin-node MIT Toru Nagashima
eslint-plugin-prettier MIT Teddy Katz
eslint-plugin-vue MIT Toru Nagashima (https://github.com/mysticatea)
eslint-plugin-vuetify MIT Kael Watts-Deuchar <kaelwd@gmail.com>
eslint-webpack-plugin MIT Ricardo Gobbo de Souza <ricardogobbosouza@yahoo.com.br>

View file

@ -47,7 +47,7 @@ install-npm:
install-testcafe:
npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier testcafe@latest
install-eslint:
npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier eslint globals @eslint/eslintrc @eslint/js eslint-config-prettier eslint-formatter-pretty eslint-plugin-html eslint-plugin-import eslint-plugin-node eslint-plugin-prettier eslint-plugin-promise eslint-plugin-vue eslint-webpack-plugin vue-eslint-parser prettier
npm install -g --ignore-scripts --no-fund --no-audit --no-update-notifier eslint globals @eslint/eslintrc @eslint/js eslint-config-prettier eslint-formatter-pretty eslint-plugin-html eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-vue eslint-webpack-plugin vue-eslint-parser prettier
upgrade:
$(info Securely upgrading NPM dependencies...)
$(DOCKER_NPM) 'npx -y npm@latest update --save --package-lock --ignore-scripts --no-fund --no-audit --no-update-notifier && npx -y npm@latest install --ignore-scripts --no-audit --no-fund --no-update-notifier'

View file

@ -34,7 +34,6 @@ eslint-formatter-pretty MIT Sindre Sorhus sindresorhus@gmail
eslint-plugin-html ISC n/a
eslint-plugin-import MIT Ben Mosher <me@benmosher.com>
eslint-plugin-node MIT Toru Nagashima
eslint-plugin-prettier MIT Teddy Katz
eslint-plugin-vue MIT Toru Nagashima (https://github.com/mysticatea)
eslint-plugin-vuetify MIT Kael Watts-Deuchar <kaelwd@gmail.com>
eslint-webpack-plugin MIT Ricardo Gobbo de Souza <ricardogobbosouza@yahoo.com.br>

View file

@ -22,6 +22,12 @@ export default defineConfig([
"tests/acceptance/screenshots/",
"tests/upload-files/",
"**/*.html",
// CSS/SCSS/SASS are owned by Prettier (see `frontend/.prettierrc.json` overrides).
// Ignored here to avoid the "no matching configuration" warning and any
// accidental formatter jitter from a future ESLint CSS plugin.
"**/*.css",
"**/*.scss",
"**/*.sass",
"**/.idea",
"**/.codex",
"**/.env",
@ -35,7 +41,7 @@ export default defineConfig([
]),
...pluginVue.configs["flat/recommended"],
{
extends: compat.extends("eslint:recommended", "plugin:prettier/recommended", "plugin:vuetify/base"),
extends: compat.extends("eslint:recommended", "eslint-config-prettier", "plugin:vuetify/base"),
languageOptions: {
globals: {
...globals.browser,
@ -47,30 +53,6 @@ export default defineConfig([
ecmaVersion: "latest",
sourceType: "module",
},
settings: {
"prettier/prettier": {
// Settings for how to process Vue SFC Blocks
SFCBlocks: {
template: false,
script: false,
style: false,
},
// Use prettierrc for prettier options or not (default: `true`)
usePrettierrc: true,
// Set the options for `prettier.getFileInfo`.
// @see https://prettier.io/docs/en/api.html#prettiergetfileinfofilepath-options
fileInfoOptions: {
// Path to ignore file (default: `'.prettierignore'`)
// Notice that the ignore file is only used for this plugin
ignorePath: ".testignore",
// Process the files in `node_modules` or not (default: `false`)
withNodeModules: false,
},
},
},
rules: {
// Match what Prettier was producing: 2-space indent (4 for CSS lives in .prettierrc), switch
// cases nested one level, method-chain continuations indented one level.
@ -127,12 +109,10 @@ export default defineConfig([
multiline: "ignore",
},
],
// Prettier reflow is off — it collapses intentional newlines (multi-line method chains,
// predicate lists) that help readability. Quote style and indent are enforced by the
// ESLint rules above instead. Run `prettier --write <file>` manually for full reflow.
// The plugin:prettier/recommended extends above still applies eslint-config-prettier,
// which disables ESLint stylistic rules that would conflict with Prettier-formatted code.
"prettier/prettier": "off",
// Note: Prettier is no longer invoked by ESLint. The `eslint-config-prettier` extends
// above still disables ESLint stylistic rules that would conflict with hand-run Prettier
// formatting on CSS/SCSS/SASS. Run `prettier --write src/**/*.{css,scss,sass}` (or use
// the `fmt-css` / `lint-css` npm scripts) to format stylesheets.
},
},
]);

View file

@ -14,11 +14,13 @@
"postbuild": "node scripts/precompress.js",
"debug": "webpack --stats-error-details",
"dep-list": "npx npm-check-updates",
"fmt": "eslint --cache --fix src/ *.js eslint.config.mjs",
"fmt": "eslint --cache --fix src/ *.js eslint.config.mjs && npm run fmt-css",
"fmt-css": "prettier --write \"src/**/*.{css,scss,sass}\"",
"fmt-npm": "prettier --write package.json",
"gettext-compile": "cross-env GETTEXT_MERGE=1 vue-gettext-compile --config gettext.config.js",
"gettext-extract": "cross-env GETTEXT_MERGE=0 vue-gettext-extract --config gettext.config.js",
"lint": "eslint --cache src/ *.js",
"lint": "eslint --cache src/ *.js && npm run lint-css",
"lint-css": "prettier --check \"src/**/*.{css,scss,sass}\"",
"test": "cross-env TZ=UTC BUILD_ENV=development NODE_ENV=development BABEL_ENV=test vitest run",
"test-watch": "cross-env TZ=UTC BUILD_ENV=development NODE_ENV=development BABEL_ENV=test vitest --watch",
"test-coverage": "cross-env TZ=UTC BUILD_ENV=development NODE_ENV=development BABEL_ENV=test vitest run --coverage",
@ -70,7 +72,6 @@
"eslint-plugin-html": "^8.1.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-vue": "^10.9.1",
"eslint-plugin-vuetify": "^2.7.2",
"eslint-webpack-plugin": "^5.0.3",

View file

@ -51,6 +51,11 @@
</g>
</svg>
<div v-if="pending && bounds && !interaction" class="p-meta-face-markers__confirm" :style="confirmStyle" @pointerdown.stop @pointerup.stop>
<button type="button" class="p-meta-face-markers__btn p-meta-face-markers__btn--cancel" :title="$gettext('Cancel')" @click.stop="onCancelPending">
<svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
<path fill="currentColor" d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path>
</svg>
</button>
<button
type="button"
class="p-meta-face-markers__btn p-meta-face-markers__btn--confirm"
@ -63,13 +68,13 @@
<path fill="currentColor" d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"></path>
</svg>
</button>
<button type="button" class="p-meta-face-markers__btn p-meta-face-markers__btn--cancel" :title="$gettext('Cancel')" @click.stop="onCancelPending">
</div>
<div v-if="removingMarker && bounds" class="p-meta-face-markers__remove-confirm" :style="removeConfirmStyle" @pointerdown.stop @pointerup.stop>
<button type="button" class="p-meta-face-markers__btn p-meta-face-markers__btn--cancel" :title="$gettext('Cancel')" @click.stop="onCancelRemove">
<svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
<path fill="currentColor" d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path>
</svg>
</button>
</div>
<div v-if="removingMarker && bounds" class="p-meta-face-markers__remove-confirm" :style="removeConfirmStyle" @pointerdown.stop @pointerup.stop>
<button
type="button"
class="p-meta-face-markers__btn p-meta-face-markers__btn--remove"
@ -82,11 +87,6 @@
<path fill="currentColor" d="M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z"></path>
</svg>
</button>
<button type="button" class="p-meta-face-markers__btn p-meta-face-markers__btn--cancel" :title="$gettext('Cancel')" @click.stop="onCancelRemove">
<svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
<path fill="currentColor" d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path>
</svg>
</button>
</div>
<button
type="button"

View file

@ -1,4 +1,4 @@
/* Media Viewer Styles */
/* Lightbox Styles */
.p-lightbox {
position: fixed;
@ -67,7 +67,14 @@
z-index: 1;
}
/* Sidebar Info */
/* Lightbox Tooltips */
.v-tooltip.v-theme--lightbox > .v-overlay__content {
background: rgba(var(--v-theme-surface), var(--v-medium-emphasis-opacity));
color: rgb(var(--v-theme-on-surface));
}
/* Lightbox Sidebar */
.p-lightbox__container > .p-lightbox__sidebar {
position: relative;

View file

@ -39,7 +39,7 @@
}
.p-meta-face-markers__rect {
fill: rgba(var(--v-theme-on-surface), 0.06);
fill: rgba(var(--v-theme-on-surface), 0.05);
stroke: rgba(var(--v-theme-on-surface), 0.9);
stroke-width: 2px;
vector-effect: non-scaling-stroke;
@ -47,15 +47,16 @@
}
.p-meta-face-markers__rect--named {
stroke: rgba(167, 139, 250, 0.98);
stroke: rgba(var(--v-theme-primary), 0.98); /* rgba(167, 139, 250, 0.98);*/
cursor: default;
}
.p-meta-face-markers__rect--draft {
stroke: rgba(196, 167, 255, 1);
stroke: rgba(var(--v-theme-accent), 1);
stroke-dasharray: 6 4;
fill: rgba(167, 139, 250, 0.14);
fill: rgba(var(--v-theme-accent), 0.1);
pointer-events: none;
z-index: 3;
}
/* Visual emphasis on a marker that the user has clicked for removal
@ -70,15 +71,15 @@
/* Hover highlight driven by sidebar People-row hover. Listed after --named
so it overrides the named-marker stroke color too. */
.p-meta-face-markers__rect--hovered {
stroke: rgba(196, 167, 255, 1);
stroke: rgba(var(--v-theme-primary-darken-1), 1);
stroke-width: 4px;
fill: rgba(167, 139, 250, 0);
filter: drop-shadow(0 0 4px rgba(196, 167, 255, 0.7));
fill: none;
filter: drop-shadow(0 0 4px rgba(var(--v-theme-primary-darken-1), 0.5));
}
.p-meta-face-markers__handle {
fill: rgba(167, 139, 250, 1);
stroke: rgba(70, 40, 140, 0.95);
fill: rgba(var(--v-theme-primary-darken-1), 1); /* rgba(167, 139, 250, 1); */
stroke: rgba(var(--v-theme-primary), 0.95); /* rgba(70, 40, 140, 0.95); */
stroke-width: 1.5px;
vector-effect: non-scaling-stroke;
pointer-events: none;
@ -99,7 +100,7 @@
.p-meta-face-markers__confirm,
.p-meta-face-markers__remove-confirm {
display: flex;
gap: 8px;
gap: 10px;
pointer-events: auto;
z-index: 3;
}
@ -123,11 +124,11 @@
}
.p-meta-face-markers__btn--confirm {
background: rgba(126, 87, 230, 0.95);
background: rgba(var(--v-theme-primary-darken-2), 0.95);
}
.p-meta-face-markers__btn--cancel {
background: rgba(var(--v-theme-button), 0.95);
background: rgba(var(--v-theme-highlight-lighten-1), 0.95);
}
.p-meta-face-markers__btn--remove {
@ -139,7 +140,7 @@
.p-meta-face-markers__btn--back {
position: absolute;
top: 12px;
background: rgba(20, 20, 20, 0.7);
background: rgba(var(--v-theme-surface), 0.7);
backdrop-filter: blur(4px);
pointer-events: auto;
z-index: 4;
@ -154,7 +155,7 @@
}
.p-meta-face-markers__btn--back:hover {
background: rgba(40, 40, 40, 0.85);
background: rgba(var(--v-theme-surface), 0.85);
}
.p-meta-face-markers__btn.is-disabled,

View file

@ -6,7 +6,7 @@ import { style, colors, variables } from "ui";
export const variations = {
colors: ["primary", "highlight", "secondary", "surface", "surface-variant", "table", "navigation", "add", "remove"],
lighten: 2,
darken: 1,
darken: 2,
};
/* User Interface Themes */
@ -41,8 +41,8 @@ let themes = {
"success": "#4db6ac", // Successful-outcome notification color (saved toast, completed-job indicator).
"warning": "#bc9714", // Caution / recoverable-concern notification color (warning banners, paused indicators).
"favorite": "#FFD600", // Favorite-star color.
"add": "#00897B",
"remove": "#aa504f", // Destructive "remove from collection" action color (distinct from `error`, which is a fault state).
"add": "#00897B", // User-initiated "add to collection" action color (paired with `remove`; distinct from `download` and `success`).
"remove": "#d35150", // Destructive "remove from collection" action color (distinct from `error`, which is a fault state).
"restore": "#00d48a", // Restore-from-trash / undo-remove action color.
"album": "#ed9e00", // Album identity color (album icons, chips, thumbnail accents).
"on-album": "#ffffff", // Text/icon color on album-tinted backgrounds.
@ -73,27 +73,27 @@ let themes = {
colors: {
"background": "#0c0d0d", // Page canvas; near-black so the photo dominates. Also painted onto `navigation` rows.
"on-background": "#ffffff", // Text and icon color readable against `background`.
"surface": "#151515", // Default container surface (sidebar, dropdown menus, dialog v-card); one step above `background`.
"surface": "#181818", // Default container surface (sidebar, dropdown menus, dialog v-card); one step above `background`.
"on-surface": "#f9fafb", // Body text and icon color on `surface`, `surface-bright`, `surface-light`, and `card`.
"surface-bright": "#171717", // Lifted variant of `surface`; raised tiles, hover backgrounds (matches `card` currently).
"surface-variant": "#1c1c1c", // Inverse pair of `surface-variant`; also painted as the tooltip background.
"on-surface-variant": "#bdbdbd", // Light-gray tone used by Vuetify defaults for active dropdown rows, focus rings, etc.
"surface-bright": "#1c1c1c", // Lifted variant of `surface`; raised tiles, hover backgrounds.
"surface-variant": "#A19D9F", // Mid-grey foreground consumed by Vuetify defaults for active dropdown rows, focus rings, and `color="surface-variant"` props.
"on-surface-variant": "#1c1c1c", // Text/icon color that contrasts with `surface-variant` when used as a background.
"card": "#171717", // Dedicated card-container background; raised dialog v-cards inherit this via the VCard default.
"selected": "#3d3f40", // Active list-item background; one step above `highlight` for a distinct, neutral gray.
"selected": "#3d3f40", // Active list-item background; neutral grey one step above `highlight`.
"table": "#242424", // VDataTable row and header background.
"button": "#232425", // Secondary button color (e.g. dialog "Cancel"); the neutral companion to `highlight`.
"highlight": "#424041", // Primary button color (Save / Confirm); softened from #3d3f40 on May 13 to keep the action calm.
"button": "#242424", // Secondary button color (e.g. dialog "Cancel"); the neutral companion to `highlight`.
"highlight": "#3c3c3c", // Primary button color (Save / Confirm); muted dark grey to keep the action calm.
"switch": "#101112", // VSwitch track background when off.
"primary": "#F2F3F3", // Brand/identity accent; desaturated near-white to keep the lightbox grayscale (focus rings).
"primary": "#9E8FC9", // Brand/identity accent and base color for face-marker `__rect--named` / `__handle` strokes; muted purple chosen to match the lightbox aesthetic.
"secondary": "#191919", // Background for secondary panels (tab strips, expansion-panel headers, nav drawer sections).
"secondary-light": "#1e1e1e", // Lifted variant of `secondary`; backs `.meta-chip` and the chip-selector chips.
"accent": "#2D2E2E", // Small-decoration tint for hover/focus subtleties; not a primary action color.
"accent": "#BDAFE4", // Light-lavender accent; consumed by face-marker `__rect--draft` (drag-to-create state).
"error": "#e57373", // Error state for banners, validation errors, and error toasts.
"info": "#9E7BEA", // Informational notification color; the only purple kept inside the lightbox tree (info toasts).
"info": "#9E7BEA", // Informational notification color (info toasts); purple matches the `primary` family.
"success": "#8763d5", // Successful-outcome notification color (matches the `info` purple cast).
"warning": "#ecc434", // Caution / recoverable-concern notification color.
"favorite": "#FFD600", // Favorite-star color.
"remove": "#da4e4c", // Destructive "remove from collection" action color (distinct from `error`, which is a fault state).
"remove": "#cd4645", // Destructive "remove from collection" action color (also consumed by face-marker `__rect--removing` and the Remove pill; distinct from `error`, a fault state).
"restore": "#00d48a", // Restore-from-trash / undo-remove action color.
"album": "#ed9e00", // Album identity color (album icons, chips, thumbnail accents).
"on-album": "#ffffff", // Text/icon color on album-tinted backgrounds.

View file

@ -76,7 +76,6 @@ Current frontend tool versions are defined in `frontend/package.json` unless sta
| `eslint-config-prettier` | `^10.1.8` |
| `eslint-plugin-import` | `^2.32.0` |
| `eslint-plugin-node` | `^11.1.0` |
| `eslint-plugin-prettier` | `^5.5.5` |
| `eslint-plugin-vue` | `^10.7.0` |
| `eslint-plugin-vuetify` | `^2.5.3` |
| `eslint-webpack-plugin` | `^5.0.2` |

76
package-lock.json generated
View file

@ -48,7 +48,6 @@
"eslint-plugin-html": "^8.1.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-vue": "^10.9.1",
"eslint-plugin-vuetify": "^2.7.2",
"eslint-webpack-plugin": "^5.0.3",
@ -6293,18 +6292,6 @@
"node": ">=14"
}
},
"node_modules/@pkgr/core": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
"integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/pkgr"
}
},
"node_modules/@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
@ -10219,36 +10206,6 @@
"eslint": ">=5.16.0"
}
},
"node_modules/eslint-plugin-prettier": {
"version": "5.5.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz",
"integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==",
"license": "MIT",
"dependencies": {
"prettier-linter-helpers": "^1.0.1",
"synckit": "^0.11.12"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint-plugin-prettier"
},
"peerDependencies": {
"@types/eslint": ">=8.0.0",
"eslint": ">=8.0.0",
"eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
"prettier": ">=3.0.0"
},
"peerDependenciesMeta": {
"@types/eslint": {
"optional": true
},
"eslint-config-prettier": {
"optional": true
}
}
},
"node_modules/eslint-plugin-vue": {
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.9.1.tgz",
@ -10534,12 +10491,6 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
"node_modules/fast-diff": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"license": "Apache-2.0"
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@ -15496,18 +15447,6 @@
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-linter-helpers": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
"integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
"license": "MIT",
"dependencies": {
"fast-diff": "^1.1.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/pretty-bytes": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
@ -16867,21 +16806,6 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"license": "MIT"
},
"node_modules/synckit": {
"version": "0.11.12",
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
"integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"license": "MIT",
"dependencies": {
"@pkgr/core": "^0.2.9"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/synckit"
}
},
"node_modules/tapable": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",