From 68d8de99825058fc49e0bfe739a16cc46ca501fa Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Mon, 12 Oct 2026 11:01:42 +1100 Subject: [PATCH 1/2] Implement a web component for the error state so it's uniform Prompt: Create a storybook for my component that covers each case the simple providing a message, then a detailed where the user can pass in a slot with more detail and passing in a link. Follow the existing storybooks for the other components. Co-authored-by: GPT-5.6 Luna --- .../AccessControlModal.styles.css | 11 +++ .../error-state/ErrorState.stories.ts | 64 ++++++++++++++++ .../error-state/ErrorState.styles.css | 73 +++++++++++++++++++ src/components/error-state/ErrorState.ts | 38 ++++++++++ src/components/error-state/index.ts | 1 + src/styles/theme.css | 4 + src/types/custom-elements.d.ts | 2 + test/components/error-state.test.ts | 23 ++++++ 8 files changed, 216 insertions(+) create mode 100644 src/components/error-state/ErrorState.stories.ts create mode 100644 src/components/error-state/ErrorState.styles.css create mode 100644 src/components/error-state/ErrorState.ts create mode 100644 src/components/error-state/index.ts create mode 100644 test/components/error-state.test.ts diff --git a/src/components/access-control-modal/AccessControlModal.styles.css b/src/components/access-control-modal/AccessControlModal.styles.css index 94fa1b66c..481d4679e 100644 --- a/src/components/access-control-modal/AccessControlModal.styles.css +++ b/src/components/access-control-modal/AccessControlModal.styles.css @@ -376,4 +376,15 @@ min-width: 132px; } } + + @media (max-width: 380px) { + .access-control-footer-actions { + gap: 8px; + + > solid-ui-button { + min-width: 0; + flex: 1 1 0; + } + } + } } \ No newline at end of file diff --git a/src/components/error-state/ErrorState.stories.ts b/src/components/error-state/ErrorState.stories.ts new file mode 100644 index 000000000..e58b86a68 --- /dev/null +++ b/src/components/error-state/ErrorState.stories.ts @@ -0,0 +1,64 @@ +import { html, nothing } from 'lit' + +import './ErrorState' + +const args = { + title: 'Something went wrong', + message: 'We could not load this content. Please try again.', + details: '', + linkText: '', + linkHref: '' +} as const + +const meta = { + title: 'Basic UI/Error State', + args, + argTypes: { + title: { control: 'text' }, + message: { control: 'text' }, + details: { control: 'text' }, + linkText: { control: 'text' }, + linkHref: { control: 'text' } + }, + render ({ title, message, details, linkText, linkHref }: typeof args) { + return html` + + ${details ? html`

${details}

` : nothing} + ${linkText && linkHref + ? html` + { window.location.href = linkHref }} + > + ${linkText} + + ` + : nothing} +
+ ` + } +} as const + +export const Primary = {} + +export const Detailed = { + args: { + title: 'Some people could not be added', + message: 'Your existing sharing settings were not changed. Review these WebIDs, then try saving again.', + details: 'The profile could not be found or is not publicly readable.' + } +} + +export const WithRecoveryLink = { + args: { + title: 'This page is unavailable', + message: 'The requested resource could not be loaded.', + linkText: 'Open help', + linkHref: 'https://solidproject.org/' + } +} + +export default meta diff --git a/src/components/error-state/ErrorState.styles.css b/src/components/error-state/ErrorState.styles.css new file mode 100644 index 000000000..e1ce95e61 --- /dev/null +++ b/src/components/error-state/ErrorState.styles.css @@ -0,0 +1,73 @@ +:host { + display: block; + color: var(--solid-ui-color-gray-800, #334155); +} + +section { + box-sizing: border-box; + position: relative; + width: 100%; + display: flex; + align-items: flex-start; + gap: 12px; + padding: 16px 18px; + border: 1px solid var(--solid-ui-color-pink-200, #f0d8dc); + border-radius: 10px; + background: var(--solid-ui-color-pink-50, #fff7f8); + box-shadow: 0 1px 2px rgb(15 23 42 / 8%); +} + +.close-button { + --solid-ui-font-size-2xl: var(--solid-ui-font-size-md, 1rem); + + position: absolute; + top: 10px; + right: 10px; +} + +.icon { + display: grid; + flex: 0 0 28px; + height: 28px; + place-items: center; + border-radius: 7px; + color: var(--solid-ui-color-red-500, #fb2c36); + background: var(--solid-ui-color-pink-100, #ffe7eb); +} + +icon-lucide-triangle-alert { + width: 16px; + height: 16px; +} + +.content { + min-width: 0; + flex: 1; + padding-right: 28px; +} + +h2 { + margin: 1px 0 4px; + color: var(--solid-ui-color-red-700, #b00020); + font-size: var(--solid-ui-font-size-lg, 1.125rem); + font-weight: 600; + line-height: 1.3; +} + +p { + margin: 0 0 8px; + color: var(--solid-ui-color-gray-600, #64748b); + font-size: var(--solid-ui-font-size-sm, 0.875rem); + line-height: 1.5; +} + +slot:not(:empty) { + display: block; + margin-top: 8px; +} + +::slotted(*) { + color: var(--solid-ui-error-state-slot-color, var(--solid-ui-color-gray-600, #64748b)); + font-size: var(--solid-ui-error-state-slot-font-size, var(--solid-ui-font-size-xs, 0.75rem)); + line-height: 1.5; +} diff --git a/src/components/error-state/ErrorState.ts b/src/components/error-state/ErrorState.ts new file mode 100644 index 000000000..043affe47 --- /dev/null +++ b/src/components/error-state/ErrorState.ts @@ -0,0 +1,38 @@ +import { customElement, WebComponent } from '@/lib/components' +import { html, nothing } from 'lit' +import { property } from 'lit/decorators.js' + +import '@/components/button' +import '~icons/lucide/triangle-alert' +import '~icons/lucide/x' + +import styles from './ErrorState.styles.css' + +@customElement('solid-ui-error-state') +export default class ErrorState extends WebComponent { + static styles = styles + + @property({ type: String }) + accessor title = '' + + @property({ type: String }) + accessor message = '' + + render () { + return html` +
+ + + +
+ +
+
+ ${this.title ? html`

${this.title}

` : nothing} + ${this.message ? html`

${this.message}

` : nothing} + +
+
+ ` + } +} diff --git a/src/components/error-state/index.ts b/src/components/error-state/index.ts new file mode 100644 index 000000000..d32ed35ab --- /dev/null +++ b/src/components/error-state/index.ts @@ -0,0 +1 @@ +export { default } from './ErrorState' diff --git a/src/styles/theme.css b/src/styles/theme.css index f6a312edc..45e213b60 100644 --- a/src/styles/theme.css +++ b/src/styles/theme.css @@ -12,6 +12,9 @@ --solid-ui-color-tertiary: #083575; --solid-ui-color-white: #ffffff; --solid-ui-color-error: #b00020; + --solid-ui-color-pink-50: #fff7f8; + --solid-ui-color-pink-100: #ffe7eb; + --solid-ui-color-pink-200: #f0d8dc; --solid-ui-color-gray-100: #f3f4f6; --solid-ui-color-gray-200: #cbd5e1; @@ -36,6 +39,7 @@ --solid-ui-color-violet-50: #F5F3FF; --solid-ui-color-red-500: #fb2c36; + --solid-ui-color-red-700: #b00020; --solid-ui-color-body-grey: #666; diff --git a/src/types/custom-elements.d.ts b/src/types/custom-elements.d.ts index 71915f251..fde924599 100644 --- a/src/types/custom-elements.d.ts +++ b/src/types/custom-elements.d.ts @@ -10,6 +10,7 @@ import type DialogFooter from '../components/dialog-footer/DialogFooter' import type DialogHeader from '../components/dialog-header/DialogHeader' import type DialogProvider from '../components/dialog-provider/DialogProvider' import type DialogsRoot from '../components/dialogs-root/DialogsRoot' +import type ErrorState from '../components/error-state/ErrorState' import type Guard from '../components/guard/Guard' import type Input from '../components/input/Input' import type LoginButton from '../components/login-button/LoginButton' @@ -41,6 +42,7 @@ declare global { 'solid-ui-dialog-header': DialogHeader 'solid-ui-dialog-provider': DialogProvider 'solid-ui-dialogs-root': DialogsRoot + 'solid-ui-error-state': ErrorState 'solid-ui-guard': Guard 'solid-ui-input': Input 'solid-ui-login-button': LoginButton diff --git a/test/components/error-state.test.ts b/test/components/error-state.test.ts new file mode 100644 index 000000000..a5528f6fe --- /dev/null +++ b/test/components/error-state.test.ts @@ -0,0 +1,23 @@ +// @vitest-environment jsdom + +import { describe, expect, it } from 'vitest' +import '../../src/components/error-state' + +describe('solid-ui-error-state', () => { + it('renders its title, message, close button, and slotted errors', async () => { + const element = document.createElement('solid-ui-error-state') + element.setAttribute('title', 'Changes could not be synced') + element.setAttribute('message', 'Try again when your connection is restored.') + element.innerHTML = '' + document.body.append(element) + + await (element as unknown as { updateComplete: Promise }).updateComplete + + expect(element.shadowRoot?.textContent).toContain('Changes could not be synced') + expect(element.shadowRoot?.textContent).toContain('Try again when your connection is restored.') + const closeButton = element.shadowRoot?.querySelector('solid-ui-button.close-button') + expect(closeButton?.getAttribute('variant')).toBe('ghost') + expect(closeButton?.getAttribute('aria-label')).toBe('Close') + expect(element.querySelector('li')?.textContent).toBe('Network request failed') + }) +}) From c05cf780c38750d8ceb5fcf2d6997ad5b0dc318a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 13 Oct 2026 00:29:25 +0000 Subject: [PATCH 2/2] chore: update solidos dependencies (dev: solid-logic@6.0.1-1 pane-registry@5.0.2-0) (latest: rdflib@2.4.1) --- package-lock.json | 130 +++++++++++++++++++++++----------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/package-lock.json b/package-lock.json index e254bc1f5..81fc14e76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5411,17 +5411,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.1.tgz", - "integrity": "sha512-nNlBf6HuotqMgZvSkWD5hNdemiBIxQ2NmrlgfcUIeZRs+BbakjscCQRq/Hb74EFVnFiSWWdL12JruqwBy3ERDw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.2.tgz", + "integrity": "sha512-K72/pvT7qpm8q3k8G5u93NCSN1RcLxX5h7Gw0bQpbMXviBHeY6Nx1WEwmk9wP+eKTSQ8ecxvcgt/ZX/rB938xQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.71.1", - "@typescript-eslint/type-utils": "8.71.1", - "@typescript-eslint/utils": "8.71.1", - "@typescript-eslint/visitor-keys": "8.71.1", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/type-utils": "8.71.2", + "@typescript-eslint/utils": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -5434,7 +5434,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.71.1", + "@typescript-eslint/parser": "^8.71.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -5450,16 +5450,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.1.tgz", - "integrity": "sha512-oM/5sAqz/l1v/zYK1qTOPrn2+JIrBGC1V6uNYucRO5gh6eT9vWJ/RhPbGE59byvZEUQ4VP6XkLBaS5Jti5jpvw==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.2.tgz", + "integrity": "sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.71.1", - "@typescript-eslint/types": "8.71.1", - "@typescript-eslint/typescript-estree": "8.71.1", - "@typescript-eslint/visitor-keys": "8.71.1", + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3" }, "engines": { @@ -5475,14 +5475,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.1.tgz", - "integrity": "sha512-Oijc9RUsohHjncg6iGi7gCtjnEjYt9FWv9u6ygK8uKcHK5eLjLAkqERQ9BaytbpceOFdk6kifPCS/zAZE+A99g==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.2.tgz", + "integrity": "sha512-Pd68GsLVh5ZXlcEccFPdhSOvtHZ/2WU0XsA8zmXOS3F158lVlcTLhfQ6qvtL1RzbMie0Kp8xtbVwAg4nejKPHw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.71.1", - "@typescript-eslint/types": "^8.71.1", + "@typescript-eslint/tsconfig-utils": "^8.71.2", + "@typescript-eslint/types": "^8.71.2", "debug": "^4.4.3" }, "engines": { @@ -5497,14 +5497,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.1.tgz", - "integrity": "sha512-1YUDZXdTnXLlob03SFHBipdyMBsDVm7zoSz0ytTJ39dk5J1TgsTK03VlR/dLXG/RLLUrPcYbD4rp23BmHxHP0w==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.2.tgz", + "integrity": "sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.71.1", - "@typescript-eslint/visitor-keys": "8.71.1" + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5515,9 +5515,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.1.tgz", - "integrity": "sha512-oTvkml5SxXhgg+WWKhod5qWQICDXtOB+/Hi9VdPKFAANJ2b7YOgMffgvzXuqog7R6A/JtrzRf128dsxummyWhg==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.2.tgz", + "integrity": "sha512-jz49TAWokm/7yWD9/o837nYax9DyALxIPOImdImvVzo6canBCZYzin8zJyqNR5k1j9K1DE0bVvr0XYB+99uAdg==", "dev": true, "license": "MIT", "engines": { @@ -5532,15 +5532,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.1.tgz", - "integrity": "sha512-kH3t3jZCYv2PZSBEWPKTariLrCaoF1CLoPitYFBJOhAGEwWnSRAtGEifrfrpBa4K9JlwWNZotgA5w3/wLSk/FQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.2.tgz", + "integrity": "sha512-cC8UaalCViJkb3rH/xLIvidEwoFRtMZMUqDjjJMGEKaTFwYRHYBcoczlEGHuvkHEO8svRDrgZ0yQgOArFmwang==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.71.1", - "@typescript-eslint/typescript-estree": "8.71.1", - "@typescript-eslint/utils": "8.71.1", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -5557,9 +5557,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.1.tgz", - "integrity": "sha512-ybYnPTUwg3VQQOFEiBPLs8Jxl1ry2vXdn1kVKguomBbvxpetdu3MKTNDqFNUrlG8ylP9MpZosmXMFYlGQHk1oQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.2.tgz", + "integrity": "sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw==", "dev": true, "license": "MIT", "engines": { @@ -5571,16 +5571,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.1.tgz", - "integrity": "sha512-pSKSEK1JJpHs6KiKVtABCE4iJK5d7FLFzDXQNBQ2oRY7LEd3UwOt3TZemTgu9syTIf56dJWlTn/pdmrO9oKUXQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.2.tgz", + "integrity": "sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.71.1", - "@typescript-eslint/tsconfig-utils": "8.71.1", - "@typescript-eslint/types": "8.71.1", - "@typescript-eslint/visitor-keys": "8.71.1", + "@typescript-eslint/project-service": "8.71.2", + "@typescript-eslint/tsconfig-utils": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/visitor-keys": "8.71.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -5612,16 +5612,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.1.tgz", - "integrity": "sha512-CBjT6gfAz3DW2j9Q4moFnqt208Aq+506sVGXfpRcyAeqn0EpayL0mjdWoCO2t3RC7GewNrFxdeehuEaPg6DMzQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.2.tgz", + "integrity": "sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.71.1", - "@typescript-eslint/types": "8.71.1", - "@typescript-eslint/typescript-estree": "8.71.1" + "@typescript-eslint/scope-manager": "8.71.2", + "@typescript-eslint/types": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5636,13 +5636,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.1.tgz", - "integrity": "sha512-0GxiUGqMU0qXJt58cBsiG3DP8lUmBaFo2vChtUX+CT7PnR3v/VGLLrzVP4K9r1lNiZXjHYefMBbPunplr09v6w==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.2.tgz", + "integrity": "sha512-zozlN0UA32bSG2zkKAgQyRYSbEISVoyU6vvkKYo2aSny74D8Jh4e+POkJ6Lk0dlezZi5x7TtD+88Xb06IB8nhg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.71.1", + "@typescript-eslint/types": "8.71.2", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -11956,9 +11956,9 @@ } }, "node_modules/postcss": { - "version": "8.5.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", - "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "version": "8.5.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz", + "integrity": "sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==", "funding": [ { "type": "opencollective", @@ -11975,7 +11975,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.19", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" }, @@ -13572,16 +13572,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.71.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.1.tgz", - "integrity": "sha512-oiNVPC3/NbV1FpaHU07l8O6ynqG9v4PAiW2WvTrAmZdR0f2HI/gE668ElMLCK7Xbsu5k2fK5C4fXNiq05j7/nQ==", + "version": "8.71.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.2.tgz", + "integrity": "sha512-Rz4effbMy2g9wnvOJZG6SbVavX313Lap1vNEbk1RUochzickvzP8P4HB+bkNg5e50eVz1hQGjh9K1omI1xB4Bw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.71.1", - "@typescript-eslint/parser": "8.71.1", - "@typescript-eslint/typescript-estree": "8.71.1", - "@typescript-eslint/utils": "8.71.1" + "@typescript-eslint/eslint-plugin": "8.71.2", + "@typescript-eslint/parser": "8.71.2", + "@typescript-eslint/typescript-estree": "8.71.2", + "@typescript-eslint/utils": "8.71.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0"