From ab67365a565dc9859c6bff8e48edd6827a584584 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Fri, 3 Jul 2026 12:15:07 +1000 Subject: [PATCH 1/4] make an add as friend web component --- .../ButtonAddFriend.stories.ts | 76 ++++++++ .../ButtonAddFriend.styles.css | 19 ++ .../button-add-friend/ButtonAddFriend.ts | 182 ++++++++++++++++++ src/components/button-add-friend/helpers.ts | 48 +++++ src/components/button-add-friend/index.ts | 4 + 5 files changed, 329 insertions(+) create mode 100644 src/components/button-add-friend/ButtonAddFriend.stories.ts create mode 100644 src/components/button-add-friend/ButtonAddFriend.styles.css create mode 100644 src/components/button-add-friend/ButtonAddFriend.ts create mode 100644 src/components/button-add-friend/helpers.ts create mode 100644 src/components/button-add-friend/index.ts diff --git a/src/components/button-add-friend/ButtonAddFriend.stories.ts b/src/components/button-add-friend/ButtonAddFriend.stories.ts new file mode 100644 index 000000000..612a6a9e9 --- /dev/null +++ b/src/components/button-add-friend/ButtonAddFriend.stories.ts @@ -0,0 +1,76 @@ +import { html } from 'lit' +import { sym } from 'rdflib' +import { DataBrowserContext } from 'pane-registry' +import { defineAuthStoryRender, USER_OPTIONS } from '@/storybook' + +import './ButtonAddFriend' + +type StoryArgs = { + user: typeof USER_OPTIONS.control + subjectUri: string + friendExists: boolean +} + +const meta = { + title: 'ButtonAddFriend', + args: { + user: 'Guest', + subjectUri: 'https://example.com/profile/card#me', + friendExists: false, + }, + argTypes: { + user: USER_OPTIONS.control, + subjectUri: { control: 'text' }, + friendExists: { control: 'boolean' }, + }, +} as const + +function createMockContext(friendExists: boolean): DataBrowserContext { + const store = { + fetcher: { + load: async () => undefined, + }, + updater: { + update: async () => undefined, + }, + whether: () => (friendExists ? 1 : 0), + } + + return { + dom: document, + environment: { layout: 'desktop' }, + session: { store }, + } as unknown as DataBrowserContext +} + +const render = defineAuthStoryRender(({ subjectUri, friendExists }) => { + const context = createMockContext(friendExists) + const subject = sym(subjectUri) + + return html` +
+ +
+ ` +}) + +export default meta + +export const Guest = { + render, +} + +export const LoggedIn = { + render, + args: { + user: 'Alice', + }, +} + +export const FriendExists = { + render, + args: { + user: 'Alice', + friendExists: true, + }, +} diff --git a/src/components/button-add-friend/ButtonAddFriend.styles.css b/src/components/button-add-friend/ButtonAddFriend.styles.css new file mode 100644 index 000000000..096d38273 --- /dev/null +++ b/src/components/button-add-friend/ButtonAddFriend.styles.css @@ -0,0 +1,19 @@ +.button-add-friend__status { + display: inline-flex; + align-items: center; + gap: 8px; + margin-top: 12px; + padding: 8px 12px; + border: 1px solid var(--red-300, #f5c2c7); + border-radius: 8px; + background: #fee; + color: var(--red-700, #b42318); +} + +.button-add-friend__status span { + line-height: 1.2; +} + +.button-add-friend__status solid-ui-button { + flex: 0 0 auto; +} diff --git a/src/components/button-add-friend/ButtonAddFriend.ts b/src/components/button-add-friend/ButtonAddFriend.ts new file mode 100644 index 000000000..01c6fd1e2 --- /dev/null +++ b/src/components/button-add-friend/ButtonAddFriend.ts @@ -0,0 +1,182 @@ +import { customElement, WebComponent } from '@/lib/components' +import { consume } from '@lit/context' +import { html, nothing } from 'lit' +import { property } from 'lit/decorators.js' +import '@/components/button' +import '~icons/lucide/x' +import '~icons/lucide/user-round-plus' +import styles from './ButtonAddFriend.styles.css' +import * as debug from '../../lib/debug' +import { authContext, AuthContext, DEFAULT_AUTH_CONTEXT } from '@/lib/auth' +import { DataBrowserContext } from 'pane-registry' +import { LiveStore, NamedNode, st, sym } from 'rdflib' +import ns from '../../lib/ns' +import { ensureStandardMutationPrefixes } from './helpers' + +const addMeToYourFriendsButtonText = 'Add as Friend' +const logInAddMeToYourFriendsButtonText = 'Log in to add as friend' +const friendExistsMessage = 'This friend is already in your list' +const friendNotAddedMessage = 'Error adding friend, friend not added' +const userNotLoggedInErrorMessage = 'Please log in first' + +@customElement('solid-ui-button-add-friend') +export default class ButtonAddFriend extends WebComponent { + static styles = styles + + @consume({ context: authContext, subscribe: true }) + private accessor auth: AuthContext = DEFAULT_AUTH_CONTEXT + + @property({ type: Boolean }) + accessor disabled: boolean | undefined = undefined + + @property({ attribute: false }) + accessor subject: NamedNode | undefined = undefined + + @property({ attribute: false }) + accessor context: DataBrowserContext | undefined = undefined + + @property({ attribute: false }) + accessor buttonLabel = addMeToYourFriendsButtonText + + @property({ attribute: false }) + accessor statusMessage = '' + + private checkIfAnyUserLoggedIn(me: NamedNode | null): me is NamedNode { + return Boolean(me) + } + + private currentUser (): NamedNode | null { + return this.auth.account ? sym(this.auth.account.webId) : null + } + + protected firstUpdated () { + void this.refreshButton() + } + + protected updated (changedProperties: Map) { + super.updated(changedProperties) + + if (changedProperties.has('subject') || changedProperties.has('context') || changedProperties.has('auth')) { + void this.refreshButton() + } + } + + private async refreshButton() { + if (!this.subject || !this.context) { + this.buttonLabel = logInAddMeToYourFriendsButtonText + this.disabled = true + this.statusMessage = '' + return + } + + const me = this.currentUser() + const store = this.context.session.store as unknown as LiveStore + + if (!this.checkIfAnyUserLoggedIn(me)) { + this.buttonLabel = logInAddMeToYourFriendsButtonText + this.disabled = true + this.statusMessage = '' + return + } + + const friendExists = await this.checkIfThingExists(store, me, this.subject, ns.foaf('knows')) + if (friendExists) { + this.buttonLabel = friendExistsMessage + this.disabled = true + this.statusMessage = '' + return + } + + this.buttonLabel = addMeToYourFriendsButtonText + this.disabled = false + this.statusMessage = '' + } + + private async saveNewThing( + subject: NamedNode, + context: DataBrowserContext, + predicate: NamedNode + ): Promise { + const me = this.currentUser() + const store = context.session.store as unknown as LiveStore + + if (this.checkIfAnyUserLoggedIn(me)) { + if (!(await this.checkIfThingExists(store, me, subject, predicate))) { + await store.fetcher.load(me) + const updater = store.updater + if (!updater) { + throw new Error('Store updater is unavailable') + } + const toBeInserted = [st(me, predicate, subject, me.doc())] + try { + ensureStandardMutationPrefixes(store) + await updater.update([], toBeInserted) + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error) + const message = errorMessage.includes('Unauthenticated') ? userNotLoggedInErrorMessage : errorMessage + throw new Error(message) + } + } else { + throw new Error(friendExistsMessage) + } + } else { + throw new Error(userNotLoggedInErrorMessage) + } + } + + private async checkIfThingExists( + store: LiveStore, + me: NamedNode, + subject: NamedNode, + predicate: NamedNode + ): Promise { + await store.fetcher.load(me) + return store.whether(me, predicate, subject, me.doc()) !== 0 + } + + render () { + return html` + + + ${this.buttonLabel} + + ${this.statusMessage + ? html` +
+ ${this.statusMessage} + + Close + + +
+ ` + : nothing} + ` + } + + private async onClick (event: Event) { + event.preventDefault() + + if (!this.subject || !this.context) { + this.disabled = true + return + } + + try { + await this.saveNewThing(this.subject, this.context, ns.foaf('knows')) + await this.refreshButton() + } catch (error) { + this.disabled = true + this.statusMessage = error instanceof Error ? error.message : friendNotAddedMessage + debug.error(error) + } + } + + private clearStatusMessage () { + this.statusMessage = '' + } +} diff --git a/src/components/button-add-friend/helpers.ts b/src/components/button-add-friend/helpers.ts new file mode 100644 index 000000000..4b0e491b7 --- /dev/null +++ b/src/components/button-add-friend/helpers.ts @@ -0,0 +1,48 @@ +import { LiveStore } from 'rdflib' + +type PrefixCapable = { + setPrefixForURI?: (prefix: string, uri: string) => void + namespaces?: Record + store?: PrefixCapable +} + +const STANDARD_MUTATION_PREFIXES: Record = { + rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + vcard: 'http://www.w3.org/2006/vcard/ns#', + foaf: 'http://xmlns.com/foaf/0.1/', + solid: 'http://www.w3.org/ns/solid/terms#', + schema: 'http://schema.org/', + org: 'http://www.w3.org/ns/org#', + owl: 'http://www.w3.org/2002/07/owl#', + dc: 'http://purl.org/dc/elements/1.1/' +} + +function registerStorePrefix(target: PrefixCapable | undefined, prefix: string, uri: string): void { + if (!target) return + if (typeof target.setPrefixForURI === 'function') { + target.setPrefixForURI(prefix, uri) + return + } + if (!target.namespaces) { + target.namespaces = {} + } + target.namespaces[prefix] = uri +} + +function getStoreUpdater(store: LiveStore): PrefixCapable | undefined { + return store.updater as PrefixCapable | undefined +} + +export function ensureStandardMutationPrefixes(store: LiveStore | undefined): void { + if (!store) return + + const updater = getStoreUpdater(store) + const nestedStore = (updater as { store?: PrefixCapable } | undefined)?.store + const targets: Array = [store as PrefixCapable, updater, nestedStore] + + Object.entries(STANDARD_MUTATION_PREFIXES).forEach(([prefix, uri]) => { + targets.forEach((target) => { + registerStorePrefix(target, prefix, uri) + }) + }) +} diff --git a/src/components/button-add-friend/index.ts b/src/components/button-add-friend/index.ts new file mode 100644 index 000000000..0da7ad476 --- /dev/null +++ b/src/components/button-add-friend/index.ts @@ -0,0 +1,4 @@ +import ButtonAddFriend from './ButtonAddFriend' + +export { ButtonAddFriend } +export default ButtonAddFriend From a1ba01770934df3f74bda50137ce0eecae5758b8 Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Fri, 3 Jul 2026 14:08:11 +1000 Subject: [PATCH 2/4] Add stories Prompt: Create stories for ButtonAddFriend for guest, loggedin and FriendExists follow the stories in the Component directory Co-authored-by: GPT-5.4 Mini --- src/components/button-add-friend/ButtonAddFriend.stories.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/button-add-friend/ButtonAddFriend.stories.ts b/src/components/button-add-friend/ButtonAddFriend.stories.ts index 612a6a9e9..33ebd302a 100644 --- a/src/components/button-add-friend/ButtonAddFriend.stories.ts +++ b/src/components/button-add-friend/ButtonAddFriend.stories.ts @@ -48,9 +48,7 @@ const render = defineAuthStoryRender(({ subjectUri, friendExists }) = const subject = sym(subjectUri) return html` -
- -
+ ` }) From e03c36683c5618a7930a2410fe70c4eb08c2133e Mon Sep 17 00:00:00 2001 From: Sharon Stratsianis Date: Wed, 8 Jul 2026 06:06:20 +1000 Subject: [PATCH 3/4] implement PR suggestions --- .../ButtonAddFriend.stories.ts | 44 ++++++++++++++----- .../ButtonAddFriend.styles.css | 4 -- .../button-add-friend/ButtonAddFriend.ts | 30 ++++++++----- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/components/button-add-friend/ButtonAddFriend.stories.ts b/src/components/button-add-friend/ButtonAddFriend.stories.ts index 33ebd302a..9e6b8c3ea 100644 --- a/src/components/button-add-friend/ButtonAddFriend.stories.ts +++ b/src/components/button-add-friend/ButtonAddFriend.stories.ts @@ -1,5 +1,4 @@ import { html } from 'lit' -import { sym } from 'rdflib' import { DataBrowserContext } from 'pane-registry' import { defineAuthStoryRender, USER_OPTIONS } from '@/storybook' @@ -7,31 +6,39 @@ import './ButtonAddFriend' type StoryArgs = { user: typeof USER_OPTIONS.control - subjectUri: string + subject: string friendExists: boolean + simulateError: boolean } const meta = { title: 'ButtonAddFriend', args: { user: 'Guest', - subjectUri: 'https://example.com/profile/card#me', + subject: 'https://example.com/profile/card#me', friendExists: false, + simulateError: false, }, argTypes: { user: USER_OPTIONS.control, - subjectUri: { control: 'text' }, + subject: { control: 'text' }, friendExists: { control: 'boolean' }, + simulateError: { control: 'boolean' }, }, } as const -function createMockContext(friendExists: boolean): DataBrowserContext { +function createMockContext (friendExists: boolean, simulateError: boolean): DataBrowserContext { const store = { fetcher: { load: async () => undefined, }, updater: { - update: async () => undefined, + update: async () => { + if (simulateError) { + throw new Error('Error adding friend, friend not added') + } + return undefined + }, }, whether: () => (friendExists ? 1 : 0), } @@ -43,12 +50,11 @@ function createMockContext(friendExists: boolean): DataBrowserContext { } as unknown as DataBrowserContext } -const render = defineAuthStoryRender(({ subjectUri, friendExists }) => { - const context = createMockContext(friendExists) - const subject = sym(subjectUri) +const render = defineAuthStoryRender(({ subject, friendExists, simulateError }) => { + const context = createMockContext(friendExists, simulateError) return html` - + ` }) @@ -72,3 +78,21 @@ export const FriendExists = { friendExists: true, }, } + +export const ErrorStatus = { + render, + args: { + user: 'Alice', + simulateError: true, + }, + play: async ({ canvasElement }) => { + await Promise.resolve() + + const button = canvasElement.querySelector('solid-ui-button-add-friend') as HTMLElement & { shadowRoot?: ShadowRoot | null } | null + const innerButton = button?.shadowRoot?.querySelector('solid-ui-button') as HTMLElement & { shadowRoot?: ShadowRoot | null } | null + const nativeButton = innerButton?.shadowRoot?.querySelector('button') as HTMLButtonElement | null + + nativeButton?.click() + await Promise.resolve() + } +} diff --git a/src/components/button-add-friend/ButtonAddFriend.styles.css b/src/components/button-add-friend/ButtonAddFriend.styles.css index 096d38273..7038fc4c0 100644 --- a/src/components/button-add-friend/ButtonAddFriend.styles.css +++ b/src/components/button-add-friend/ButtonAddFriend.styles.css @@ -13,7 +13,3 @@ .button-add-friend__status span { line-height: 1.2; } - -.button-add-friend__status solid-ui-button { - flex: 0 0 auto; -} diff --git a/src/components/button-add-friend/ButtonAddFriend.ts b/src/components/button-add-friend/ButtonAddFriend.ts index 01c6fd1e2..68ee87ba8 100644 --- a/src/components/button-add-friend/ButtonAddFriend.ts +++ b/src/components/button-add-friend/ButtonAddFriend.ts @@ -1,7 +1,7 @@ import { customElement, WebComponent } from '@/lib/components' import { consume } from '@lit/context' import { html, nothing } from 'lit' -import { property } from 'lit/decorators.js' +import { property, state } from 'lit/decorators.js' import '@/components/button' import '~icons/lucide/x' import '~icons/lucide/user-round-plus' @@ -29,17 +29,17 @@ export default class ButtonAddFriend extends WebComponent { @property({ type: Boolean }) accessor disabled: boolean | undefined = undefined - @property({ attribute: false }) - accessor subject: NamedNode | undefined = undefined + @property({ type: String, reflect: true }) + accessor subject = '' @property({ attribute: false }) accessor context: DataBrowserContext | undefined = undefined - @property({ attribute: false }) - accessor buttonLabel = addMeToYourFriendsButtonText + @state() + private accessor buttonLabel = addMeToYourFriendsButtonText - @property({ attribute: false }) - accessor statusMessage = '' + @state() + private accessor statusMessage = '' private checkIfAnyUserLoggedIn(me: NamedNode | null): me is NamedNode { return Boolean(me) @@ -62,7 +62,9 @@ export default class ButtonAddFriend extends WebComponent { } private async refreshButton() { - if (!this.subject || !this.context) { + const subject = this.getSubjectNode() + + if (!subject || !this.context) { this.buttonLabel = logInAddMeToYourFriendsButtonText this.disabled = true this.statusMessage = '' @@ -79,7 +81,7 @@ export default class ButtonAddFriend extends WebComponent { return } - const friendExists = await this.checkIfThingExists(store, me, this.subject, ns.foaf('knows')) + const friendExists = await this.checkIfThingExists(store, me, subject, ns.foaf('knows')) if (friendExists) { this.buttonLabel = friendExistsMessage this.disabled = true @@ -161,13 +163,15 @@ export default class ButtonAddFriend extends WebComponent { private async onClick (event: Event) { event.preventDefault() - if (!this.subject || !this.context) { + const subject = this.getSubjectNode() + + if (!subject || !this.context) { this.disabled = true return } try { - await this.saveNewThing(this.subject, this.context, ns.foaf('knows')) + await this.saveNewThing(subject, this.context, ns.foaf('knows')) await this.refreshButton() } catch (error) { this.disabled = true @@ -179,4 +183,8 @@ export default class ButtonAddFriend extends WebComponent { private clearStatusMessage () { this.statusMessage = '' } + + private getSubjectNode (): NamedNode | undefined { + return this.subject ? sym(this.subject) : undefined + } } From c2cb7003f218759cdaeecbbef18aa7cea2fed596 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 7 Jul 2026 20:07:52 +0000 Subject: [PATCH 4/4] chore: update solidos dependencies (dev: solid-logic@4.0.8-1 pane-registry@3.1.2-2) (latest: rdflib@2.4.0) --- package-lock.json | 328 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 167 insertions(+), 163 deletions(-) diff --git a/package-lock.json b/package-lock.json index a821bce43..1eef86ff2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "escape-html": "^1.0.3", "lit": "^3.3.3", "mime-types": "^3.0.2", - "pane-registry": "3.1.2-1", + "pane-registry": "3.1.2-2", "rdflib": "2.4.0", "solid-logic": "4.0.8-1", "solid-namespace": "^0.5.4", @@ -3017,9 +3017,9 @@ "license": "MIT" }, "node_modules/@iconify/utils": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.3.tgz", - "integrity": "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.4.tgz", + "integrity": "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==", "dev": true, "license": "MIT", "dependencies": { @@ -5099,17 +5099,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz", - "integrity": "sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", + "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/type-utils": "8.62.1", - "@typescript-eslint/utils": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/type-utils": "8.63.0", + "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -5122,7 +5122,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.62.1", + "@typescript-eslint/parser": "^8.63.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -5138,16 +5138,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.1.tgz", - "integrity": "sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", + "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3" }, "engines": { @@ -5163,14 +5163,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.1.tgz", - "integrity": "sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", + "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.62.1", - "@typescript-eslint/types": "^8.62.1", + "@typescript-eslint/tsconfig-utils": "^8.63.0", + "@typescript-eslint/types": "^8.63.0", "debug": "^4.4.3" }, "engines": { @@ -5185,14 +5185,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz", - "integrity": "sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", + "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1" + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5203,9 +5203,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz", - "integrity": "sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", + "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", "dev": true, "license": "MIT", "engines": { @@ -5220,15 +5220,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz", - "integrity": "sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", + "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/utils": "8.62.1", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/utils": "8.63.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -5245,9 +5245,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.1.tgz", - "integrity": "sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", + "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", "dev": true, "license": "MIT", "engines": { @@ -5259,16 +5259,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz", - "integrity": "sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", + "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.62.1", - "@typescript-eslint/tsconfig-utils": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/project-service": "8.63.0", + "@typescript-eslint/tsconfig-utils": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -5300,16 +5300,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.1.tgz", - "integrity": "sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", + "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1" + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5324,13 +5324,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz", - "integrity": "sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", + "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/types": "8.63.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -5698,14 +5698,14 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz", - "integrity": "sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.10.tgz", + "integrity": "sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.1.9", + "@vitest/utils": "4.1.10", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", @@ -5719,8 +5719,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.1.9", - "vitest": "4.1.9" + "@vitest/browser": "4.1.10", + "vitest": "4.1.10" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -5784,13 +5784,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", - "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", + "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.9", + "@vitest/spy": "4.1.10", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -5811,9 +5811,9 @@ } }, "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", - "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", "dev": true, "license": "MIT", "funding": { @@ -5821,9 +5821,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", - "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", + "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5834,13 +5834,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", - "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", + "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.9", + "@vitest/utils": "4.1.10", "pathe": "^2.0.3" }, "funding": { @@ -5848,14 +5848,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", - "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", + "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.9", - "@vitest/utils": "4.1.9", + "@vitest/pretty-format": "4.1.10", + "@vitest/utils": "4.1.10", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -5877,13 +5877,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", - "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", + "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.9", + "@vitest/pretty-format": "4.1.10", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -6384,9 +6384,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.41", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.41.tgz", - "integrity": "sha512-WwS7MHhqGHHlaVsqRZnhvCEMS0owDX+SxRlve7JkuH7My1Ara3ZriTmCQupPfYjxMZ8I/tgxtJYr2t7taHaH4A==", + "version": "2.10.42", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", + "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6447,9 +6447,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", - "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", + "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", "dev": true, "funding": [ { @@ -6467,10 +6467,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.38", - "caniuse-lite": "^1.0.30001799", - "electron-to-chromium": "^1.5.376", - "node-releases": "^2.0.48", + "baseline-browser-mapping": "^2.10.42", + "caniuse-lite": "^1.0.30001800", + "electron-to-chromium": "^1.5.387", + "node-releases": "^2.0.50", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -6581,9 +6581,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001800", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz", - "integrity": "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==", + "version": "1.0.30001803", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", + "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", "dev": true, "funding": [ { @@ -7280,9 +7280,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.385", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.385.tgz", - "integrity": "sha512-78sa/M08MNAYHQfjoWMvOlKQqZ0ElhSm/L5HNUc96VZ3b+KvDVnngFm8sYQy0XrhTRgAhggHr5abA7yTvRdo4Q==", + "version": "1.5.388", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.388.tgz", + "integrity": "sha512-Pl/aJaqOOxYxda3vcx1IKSJimwYXHDkEnGn0F+kG2EE68dDtx2uCinaS+Vih8Z91B9t8CSAbiF/HKyWcnXjhzw==", "dev": true, "license": "ISC" }, @@ -7294,9 +7294,9 @@ "license": "MIT" }, "node_modules/enhanced-resolve": { - "version": "5.24.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.1.tgz", - "integrity": "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.2.tgz", + "integrity": "sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -11023,9 +11023,9 @@ "license": "MIT" }, "node_modules/n3": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/n3/-/n3-2.1.0.tgz", - "integrity": "sha512-+05H/h40wRyROglcVGrNZAwBu0Nc87luKhiTV95aGBGX1YyITtpwftHwyhT5YoZr4soXJWrzxqC1CHPdGqV63g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/n3/-/n3-2.1.1.tgz", + "integrity": "sha512-kqg8ers6Lc+uAmHeS+ycd3b8mC4x8wr8V8Fi6+w7l4hX6b0KZ5bT05Tf49qM2mujwaqZT3+08zcgtXgfxivbVQ==", "license": "MIT", "dependencies": { "buffer": "^6.0.3", @@ -11776,10 +11776,14 @@ } }, "node_modules/pane-registry": { - "version": "3.1.2-1", - "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.1.2-1.tgz", - "integrity": "sha512-aibuyF8pAgHDnmywsMEKUddIcqC0oPF8fNx2TP7zRpRW9aYk2iv06td+br8wenbmu2V/l6Y6aJmCkckHWN/GpA==", - "license": "MIT" + "version": "3.1.2-2", + "resolved": "https://registry.npmjs.org/pane-registry/-/pane-registry-3.1.2-2.tgz", + "integrity": "sha512-w+pCan1Umj+pLm5/uNlBMLw0YOKbKhHn5Qh62oqlKlbFrSHj4H3gNOXcKnI47liQFPQYepw5UPssP3aPdiowvA==", + "license": "MIT", + "dependencies": { + "rdflib": "2.4.0", + "solid-logic": "4.0.8-1" + } }, "node_modules/parent-module": { "version": "1.0.1", @@ -13030,9 +13034,9 @@ "license": "MIT" }, "node_modules/solidos-toolkit": { - "version": "0.0.0-dev.c10f4a56fdff825429b4c22b82be09e14afd8fe8", - "resolved": "https://registry.npmjs.org/solidos-toolkit/-/solidos-toolkit-0.0.0-dev.c10f4a56fdff825429b4c22b82be09e14afd8fe8.tgz", - "integrity": "sha512-NrU4Lv9xNWj272N+CH9Iakm3WjpwWOyCVErK4X8tYe51EGaJtxZxezSn8RjqMUhe+aYNg8zM2IB+6YoKWV6Iew==", + "version": "0.0.0-dev.c12653a8e6e099052a4fade85552d2c77e1ab5c9", + "resolved": "https://registry.npmjs.org/solidos-toolkit/-/solidos-toolkit-0.0.0-dev.c12653a8e6e099052a4fade85552d2c77e1ab5c9.tgz", + "integrity": "sha512-6JhnR/coSwd5zomAU9uEVFZo84mmYiYYDtpHaxZX6NtoW3StD+/9c22LMyTuNBMF+pb5V4PO7lle7zbEBI6S/w==", "dev": true, "dependencies": { "@babel/core": "^7.29.0", @@ -13583,22 +13587,22 @@ } }, "node_modules/tldts": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.6.tgz", - "integrity": "sha512-rbP0Gyx8b3Ae9yO//CU2wbSnQNoQ66m1nJdSbSHmnwKwzkkz/u8mERYU8T2rmlmy+bJvRNn84yNCW8gYqox44Q==", + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.7.tgz", + "integrity": "sha512-56L0/9HELHSsG1bFCzay8UoLxzRL7kpFf7Wl5q/kSYwiSJGACvro61xnKzPNM+SadxllzdtXsKDSXE7HPeqIAw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.6" + "tldts-core": "^7.4.7" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.6.tgz", - "integrity": "sha512-TkQNGJIhlEphpHCjKodMTSe23egUZr/g+flI2qkLgiJ/maAzSgXypSLRTNH3nCmqgayEmtcJBiLcfODSAr1xoA==", + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.7.tgz", + "integrity": "sha512-rNlAI8fKn/JckBMUSbNL/ES2kmDiurWaE49l+ikwEc9A6lFR7gMx9AhgQMQKBK4H5w4pKLH64JzZfB99uRsGNQ==", "dev": true, "license": "MIT" }, @@ -13626,9 +13630,9 @@ } }, "node_modules/tough-cookie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13832,17 +13836,17 @@ } }, "node_modules/typedoc": { - "version": "0.28.19", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", - "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", + "version": "0.28.20", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.20.tgz", + "integrity": "sha512-uSKqkh8Cr48vllnEy+jdaAgOeR6Y+QCBW7usgUsKj7gJEfR7stw9U/fE49LBnj2tPRKPY0c0EBJSWe9Appmplg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@gerrit0/mini-shiki": "^3.23.0", "lunr": "^2.3.9", - "markdown-it": "^14.1.1", + "markdown-it": "^14.3.0", "minimatch": "^10.2.5", - "yaml": "^2.8.3" + "yaml": "^2.9.0" }, "bin": { "typedoc": "bin/typedoc" @@ -13870,16 +13874,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.1.tgz", - "integrity": "sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz", + "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.62.1", - "@typescript-eslint/parser": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/utils": "8.62.1" + "@typescript-eslint/eslint-plugin": "8.63.0", + "@typescript-eslint/parser": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/utils": "8.63.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -14377,19 +14381,19 @@ } }, "node_modules/vitest": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", - "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", + "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.9", - "@vitest/mocker": "4.1.9", - "@vitest/pretty-format": "4.1.9", - "@vitest/runner": "4.1.9", - "@vitest/snapshot": "4.1.9", - "@vitest/spy": "4.1.9", - "@vitest/utils": "4.1.9", + "@vitest/expect": "4.1.10", + "@vitest/mocker": "4.1.10", + "@vitest/pretty-format": "4.1.10", + "@vitest/runner": "4.1.10", + "@vitest/snapshot": "4.1.10", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -14417,12 +14421,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.9", - "@vitest/browser-preview": "4.1.9", - "@vitest/browser-webdriverio": "4.1.9", - "@vitest/coverage-istanbul": "4.1.9", - "@vitest/coverage-v8": "4.1.9", - "@vitest/ui": "4.1.9", + "@vitest/browser-playwright": "4.1.10", + "@vitest/browser-preview": "4.1.10", + "@vitest/browser-webdriverio": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", + "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "4.1.10", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -14467,16 +14471,16 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", - "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", + "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.9", - "@vitest/utils": "4.1.9", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -14485,9 +14489,9 @@ } }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", - "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 6a42842a2..106fd1088 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "escape-html": "^1.0.3", "lit": "^3.3.3", "mime-types": "^3.0.2", - "pane-registry": "3.1.2-1", + "pane-registry": "3.1.2-2", "rdflib": "2.4.0", "solid-logic": "4.0.8-1", "solid-namespace": "^0.5.4",