diff --git a/apps/builder/package.json b/apps/builder/package.json index f1999160..be552418 100644 --- a/apps/builder/package.json +++ b/apps/builder/package.json @@ -30,18 +30,18 @@ "@creit.tech/stellar-wallets-kit": "^1.9.5", "@hookform/resolvers": "^4.1.3", "@icons-pack/react-simple-icons": "^12.9.0", - "@openzeppelin/adapter-evm": "^2.0.2", + "@openzeppelin/adapter-evm": "^2.3.0", "@openzeppelin/adapter-midnight": "^2.0.1", "@openzeppelin/adapter-polkadot": "^2.0.2", "@openzeppelin/adapter-solana": "^2.0.0", "@openzeppelin/adapter-stellar": "^2.0.2", - "@openzeppelin/ui-components": "^3.0.1", - "@openzeppelin/ui-react": "^3.0.0", - "@openzeppelin/ui-renderer": "^3.0.0", + "@openzeppelin/ui-components": "^3.8.0", + "@openzeppelin/ui-react": "^3.3.0", + "@openzeppelin/ui-renderer": "^3.4.0", "@openzeppelin/ui-storage": "^1.2.2", "@openzeppelin/ui-styles": "^1.1.0", - "@openzeppelin/ui-types": "^3.1.1", - "@openzeppelin/ui-utils": "^3.0.1", + "@openzeppelin/ui-types": "^3.3.0", + "@openzeppelin/ui-utils": "^3.3.0", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", diff --git a/apps/builder/src/App.tsx b/apps/builder/src/App.tsx index cccce9b9..7eedd3a7 100644 --- a/apps/builder/src/App.tsx +++ b/apps/builder/src/App.tsx @@ -1,8 +1,8 @@ -import { useCallback, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import { Footer, NetworkErrorNotificationProvider, Toaster } from '@openzeppelin/ui-components'; import { AnalyticsProvider, RuntimeProvider, WalletStateProvider } from '@openzeppelin/ui-react'; -import type { NativeConfigLoader } from '@openzeppelin/ui-types'; +import type { CreateRuntimeOptions, NativeConfigLoader } from '@openzeppelin/ui-types'; import { Header } from './components/Common/Header'; import { NetworkErrorHandler } from './components/Common/NetworkErrorHandler'; @@ -11,8 +11,9 @@ import { UIBuilder } from './components/UIBuilder'; import { useUIBuilderState } from './components/UIBuilder/hooks'; import { AliasLabelBridge } from './contexts/AliasLabelBridge'; import { ContractUIStorageProvider } from './contexts/ContractUIStorageProvider'; +import { NameResolverBridge } from './contexts/NameResolverBridge'; import { StorageOperationsProvider } from './contexts/StorageOperationsContext'; -import { getNetworkById, getRuntime } from './core/ecosystemManager'; +import { getNetworkById, getRuntime, RUNTIME_CREATION_OPTIONS } from './core/ecosystemManager'; // Use Vite's import.meta.glob to find all potential kit config files. // Expecting them to be .ts files as per convention. @@ -87,22 +88,32 @@ function App() { } }, []); + const runtimeCreationOptions = useMemo((): CreateRuntimeOptions => RUNTIME_CREATION_OPTIONS, []); + + const resolveRuntime = useCallback( + (networkConfig: Parameters[0]) => + getRuntime(networkConfig, runtimeCreationOptions), + [runtimeCreationOptions] + ); + return ( - + - - - {/* Global network error handler - always mounted to handle error toasts */} - - + + + + {/* Global network error handler - always mounted to handle error toasts */} + + + diff --git a/apps/builder/src/components/AddressBook/AddressBookDialog.tsx b/apps/builder/src/components/AddressBook/AddressBookDialog.tsx index 17712833..7c7e527b 100644 --- a/apps/builder/src/components/AddressBook/AddressBookDialog.tsx +++ b/apps/builder/src/components/AddressBook/AddressBookDialog.tsx @@ -131,6 +131,7 @@ export function AddressBookDialog({ open, onOpenChange }: AddressBookDialogProps currentNetworkId={activeNetworkConfig?.id} filterNetworkIds={filterNetworkIds} onFilterNetworkIdsChange={setFilterNetworkIds} + enableNameResolution /> diff --git a/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractFormFields.tsx b/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractFormFields.tsx index b232bc98..f0799af5 100644 --- a/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractFormFields.tsx +++ b/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractFormFields.tsx @@ -4,6 +4,7 @@ import { Control } from 'react-hook-form'; import { DynamicFormField } from '@openzeppelin/ui-renderer'; import type { FormFieldType, FormValues } from '@openzeppelin/ui-types'; +import { BlockchainAddressFieldWithRichPreview } from '@/components/fields/BlockchainAddressFieldWithRichPreview'; import type { BuilderRuntime } from '@/core/runtimeAdapter'; interface ContractFormFieldsProps { @@ -26,15 +27,31 @@ export function ContractFormFields({
{/* Form Fields */}
- {contractDefinitionInputs.map((field) => ( - - ))} + {contractDefinitionInputs.map((field) => + field.type === 'blockchain-address' ? ( + + ) : ( + + ) + )}
{/* Enhanced Loading Indicator */} diff --git a/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractSuccessStatus.tsx b/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractSuccessStatus.tsx index 8d1f4a34..5fca2ece 100644 --- a/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractSuccessStatus.tsx +++ b/apps/builder/src/components/UIBuilder/StepContractDefinition/components/ContractSuccessStatus.tsx @@ -171,6 +171,7 @@ export function ContractSuccessStatus({ {proxyInfo?.isProxy && !ignoreProxy && ( )} - + {fieldType === 'blockchain-address' ? ( + + ) : ( + + )} - diff --git a/apps/builder/src/components/UIBuilder/StepFormCustomization/components/UiKitSettings.tsx b/apps/builder/src/components/UIBuilder/StepFormCustomization/components/UiKitSettings.tsx index f13f3f4e..1481c003 100644 --- a/apps/builder/src/components/UIBuilder/StepFormCustomization/components/UiKitSettings.tsx +++ b/apps/builder/src/components/UIBuilder/StepFormCustomization/components/UiKitSettings.tsx @@ -14,6 +14,7 @@ import { } from '@openzeppelin/ui-types'; import { logger } from '@openzeppelin/ui-utils'; +import { BlockchainAddressFieldWithRichPreview } from '@/components/fields/BlockchainAddressFieldWithRichPreview'; import type { BuilderRuntime } from '@/core/runtimeAdapter'; import { useBuilderAnalytics } from '../../../../hooks/useBuilderAnalytics'; @@ -115,12 +116,26 @@ export function UiKitSettings({ runtime, onUpdateConfig, currentConfig }: UiKitS
{selectedKit.configFields.map((field) => (
- + {field.type === 'blockchain-address' ? ( + + ) : ( + + )}
))}
diff --git a/apps/builder/src/components/fields/BlockchainAddressFieldWithRichPreview.tsx b/apps/builder/src/components/fields/BlockchainAddressFieldWithRichPreview.tsx new file mode 100644 index 00000000..0254e752 --- /dev/null +++ b/apps/builder/src/components/fields/BlockchainAddressFieldWithRichPreview.tsx @@ -0,0 +1,57 @@ +import type { FieldValues } from 'react-hook-form'; +import { useWatch } from 'react-hook-form'; + +import { + AddressFieldWithResolvedPreview, + type AddressFieldProps, +} from '@openzeppelin/ui-components'; +import { ResolvedAddressFieldPreviewWithNameResolution } from '@openzeppelin/ui-renderer'; +import type { AddressingCapability, NetworkConfig } from '@openzeppelin/ui-types'; + +type BlockchainAddressFieldWithRichPreviewProps = + AddressFieldProps & { + /** Wallet-global network id (builder surfaces always use the active runtime). */ + networkId?: string; + /** + * When set, reverse preview resolves against this network's runtime instead of + * the wallet-global active network. Unused today — builder has no per-field + * network selector; reserved for future dialogs with their own network dropdown. + */ + network?: NetworkConfig; + addressing?: AddressingCapability; + }; + +/** + * Pattern A (wallet-runtime): AddressFieldWithResolvedPreview + renderer bridge for + * async reverse ENS lookup. Parent watches the field and passes previewAddress. + */ +export function BlockchainAddressFieldWithRichPreview({ + control, + name, + networkId, + network, + addressing, + ...addressFieldProps +}: BlockchainAddressFieldWithRichPreviewProps): React.ReactElement { + const previewAddress = useWatch({ control, name }) as string | undefined; + const previewNetworkId = network?.id ?? networkId; + + return ( + + {...addressFieldProps} + control={control} + name={name} + addressing={addressing} + previewAddress={previewAddress} + previewNetworkId={previewNetworkId} + preview={ + + } + /> + ); +} diff --git a/apps/builder/src/components/warnings/ProxyStatusIndicator.tsx b/apps/builder/src/components/warnings/ProxyStatusIndicator.tsx index 2ac6efe8..4eeac4b5 100644 --- a/apps/builder/src/components/warnings/ProxyStatusIndicator.tsx +++ b/apps/builder/src/components/warnings/ProxyStatusIndicator.tsx @@ -2,12 +2,15 @@ import { ArrowRight, Network, RotateCcw } from 'lucide-react'; import React from 'react'; import { AddressDisplay, Button } from '@openzeppelin/ui-components'; +import { AddressNameResolutionProvider } from '@openzeppelin/ui-renderer'; import type { ProxyInfo } from '@openzeppelin/ui-types'; import { cn } from '@openzeppelin/ui-utils'; export interface ProxyStatusIndicatorProps { /** Chain-agnostic proxy information */ proxyInfo: ProxyInfo; + /** Network ID for reverse ENS scope gating on address displays */ + networkId?: string; /** Pre-generated explorer URL for the proxy address (optional) */ proxyExplorerUrl?: string; /** Pre-generated explorer URL for the implementation address (optional) */ @@ -26,6 +29,7 @@ export interface ProxyStatusIndicatorProps { */ export const ProxyStatusIndicator: React.FC = ({ proxyInfo, + networkId, proxyExplorerUrl, implementationExplorerUrl, adminExplorerUrl, @@ -66,34 +70,49 @@ export const ProxyStatusIndicator: React.FC = ({
Proxy: - + + +
Implementation: - + networkId={networkId} + > + +
{hasAdmin && (
Admin: - + networkId={networkId} + > + +
)} diff --git a/apps/builder/src/contexts/NameResolverBridge.tsx b/apps/builder/src/contexts/NameResolverBridge.tsx new file mode 100644 index 00000000..9a200f97 --- /dev/null +++ b/apps/builder/src/contexts/NameResolverBridge.tsx @@ -0,0 +1,30 @@ +/** + * NameResolverBridge + * + * Projects the active runtime's name-resolution capability into NameResolverProvider + * so every AddressField / DynamicFormField(blockchain-address) in the subtree can + * resolve ENS names inline. On runtimes without the capability the resolver is empty + * and fields behave as before (hex-only validation). + * + * Mirrors TransactionForm + the basic-react-app NameResolverBridge pattern: pass + * activeNetworkId / activeNetworkName so coinType chain-scope gating works. + */ +import type { ReactNode } from 'react'; + +import { NameResolverProvider } from '@openzeppelin/ui-components'; +import { useRuntimeNameResolver, useWalletState } from '@openzeppelin/ui-react'; + +export function NameResolverBridge({ children }: { children: ReactNode }) { + const resolver = useRuntimeNameResolver(); + const { activeNetworkId, activeNetworkConfig } = useWalletState(); + + return ( + + {children} + + ); +} diff --git a/apps/builder/src/core/__tests__/ecosystemManager.test.ts b/apps/builder/src/core/__tests__/ecosystemManager.test.ts index ae750fec..03c79885 100644 --- a/apps/builder/src/core/__tests__/ecosystemManager.test.ts +++ b/apps/builder/src/core/__tests__/ecosystemManager.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; import type { ComposerEcosystemRuntime, PolkadotNetworkConfig } from '@openzeppelin/ui-types'; -import { getRuntime } from '../ecosystemManager'; +import { getRuntime, RUNTIME_CREATION_OPTIONS } from '../ecosystemManager'; const { mockMoonbeamNetwork, mockCreateRuntime } = vi.hoisted(() => ({ mockMoonbeamNetwork: { @@ -135,7 +135,11 @@ describe('ecosystemManager getRuntime', () => { it('invokes adapter createRuntime for the composer profile', async () => { const runtime = await getRuntime(networkConfig); - expect(mockCreateRuntime).toHaveBeenCalledWith('composer', networkConfig); + expect(mockCreateRuntime).toHaveBeenCalledWith( + 'composer', + networkConfig, + RUNTIME_CREATION_OPTIONS + ); expect(runtime.networkConfig).toBe(networkConfig); expect(runtime.networkCatalog.getNetworks()).toEqual([networkConfig]); expect(runtime.wallet.supportsWalletConnection()).toBe(true); diff --git a/apps/builder/src/core/ecosystemManager.ts b/apps/builder/src/core/ecosystemManager.ts index bb27b8f1..c8b5d9e7 100644 --- a/apps/builder/src/core/ecosystemManager.ts +++ b/apps/builder/src/core/ecosystemManager.ts @@ -10,6 +10,7 @@ import { ecosystemMetadata as stellarMetadata } from '@openzeppelin/adapter-stel import type { AdapterConfig, ComposerEcosystemRuntime, + CreateRuntimeOptions, Ecosystem, EcosystemExport, EcosystemMetadata, @@ -218,9 +219,15 @@ export async function getAdapterConfig(ecosystem: Ecosystem): Promise { +export async function getRuntime( + networkConfig: NetworkConfig, + options: CreateRuntimeOptions = RUNTIME_CREATION_OPTIONS +): Promise { const logSystem = 'EcosystemManager(getRuntime)'; logger.info( logSystem, @@ -239,7 +249,7 @@ export async function getRuntime(networkConfig: NetworkConfig): Promise { + it('pins ui-types ^3.3.0, viem ^2.35.0, adapter-evm ^2.3.0 and ships .npmrc + vite interop', async () => { + const networks = await getNetworksByEcosystem('evm'); + const networkConfig = networks.find((n) => n.id === 'ethereum-mainnet') ?? networks[0]; + expect(networkConfig).toBeDefined(); + + const exportSystem = new AppExportSystem(); + const formConfig = createMinimalFormConfig('transfer', 'evm'); + const contractSchema = createMinimalContractSchema('transfer', 'evm'); + + const result = await exportSystem.exportApp( + formConfig, + contractSchema, + networkConfig, + 'transfer', + { projectName: 'ens-export-verify', env: 'production' } + ); + + const files = await extractFilesFromZip(result.data); + const packageJson = JSON.parse(files['package.json']); + const deps = packageJson.dependencies as Record; + + expect(deps['@openzeppelin/ui-types']).toBe('^3.3.0'); + expect(deps['viem']).toBe('^2.35.0'); + expect(deps['@openzeppelin/adapter-evm']).toBe('^2.3.0'); + expect(deps['@openzeppelin/ui-components']).toBe('^3.8.1'); + expect(deps['@openzeppelin/ui-renderer']).toBe('^3.4.0'); + expect(deps['@openzeppelin/ui-react']).toBe('^3.3.0'); + + expect(files['.npmrc']).toBeDefined(); + expect(files['.npmrc']).toContain('public-hoist-pattern[]=eventemitter3'); + expect(files['.npmrc']).toContain('public-hoist-pattern[]=debug'); + expect(files['.npmrc']).toContain('public-hoist-pattern[]=@wagmi/connectors'); + + expect(files['vite.config.ts']).toContain('eventemitter3'); + expect(files['vite.config.ts']).not.toContain("'debug'"); + + const mainTsx = files['src/main.tsx']; + expect(mainTsx).toContain('enableMainnetL1MissFallback: true'); + expect(mainTsx).toContain('NameResolverBridge'); + expect(mainTsx).toContain('NameResolverProvider'); + expect(mainTsx).toContain('useRuntimeNameResolver'); + + // Materialize for install/boot verification (written under tmp for the follow-up shell step) + const outDir = path.join(tmpdir(), `ui-builder-ens-export-${Date.now()}`); + mkdirSync(outDir, { recursive: true }); + for (const [filePath, content] of Object.entries(files)) { + const abs = path.join(outDir, filePath); + mkdirSync(path.dirname(abs), { recursive: true }); + writeFileSync(abs, content, 'utf8'); + } + writeFileSync(path.join(tmpdir(), 'ui-builder-ens-export-last-dir.txt'), outDir, 'utf8'); + + // Keep the artifact for the shell install step; do not rmSync here. + expect(outDir).toBeTruthy(); + }, 120_000); +}); diff --git a/apps/builder/src/export/__tests__/PackageManager.test.ts b/apps/builder/src/export/__tests__/PackageManager.test.ts index f8fbfba2..6fed5b93 100644 --- a/apps/builder/src/export/__tests__/PackageManager.test.ts +++ b/apps/builder/src/export/__tests__/PackageManager.test.ts @@ -624,10 +624,19 @@ describe('PackageManager', () => { ); const result = JSON.parse(updated); - // External dependencies should remain unchanged + // External dependencies should remain unchanged (except known floors like viem) expect(result.dependencies['react']).toBe('^19.0.0'); expect(result.dependencies['react-datepicker']).toBe('^4.14.0'); - expect(result.dependencies['viem']).toBeTruthy(); // Should exist but version unchanged + // Mock adapter lists viem ^2.0.0; PackageManager elevates to ENS floor ^2.35.0 + expect(result.dependencies['viem']).toBe('^2.35.0'); + // Mocked versions.ts pins ui-types at 0.2.0 → caret applied for non-local envs + if (env === 'local') { + expect(result.dependencies['@openzeppelin/ui-types']).toMatch( + /^file:.*\/packages\/types$/ + ); + } else { + expect(result.dependencies['@openzeppelin/ui-types']).toBe('^0.2.0'); + } } }); diff --git a/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap b/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap index e4c85ef9..8b098997 100644 --- a/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap +++ b/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap @@ -341,18 +341,18 @@ export default function GeneratedForm({ adapter, isWalletConnected }: GeneratedF exports[`Export Snapshot Tests > evm Export Snapshots > should match snapshot for package.json structure > package-json-evm 1`] = ` { "dependencies": { - "@openzeppelin/adapter-evm": "^2.1.0", - "@openzeppelin/ui-components": "^3.0.1", - "@openzeppelin/ui-react": "^3.0.0", - "@openzeppelin/ui-renderer": "^3.0.0", - "@openzeppelin/ui-types": "^3.1.1", - "@openzeppelin/ui-utils": "^3.0.1", + "@openzeppelin/adapter-evm": "^2.3.0", + "@openzeppelin/ui-components": "^3.8.1", + "@openzeppelin/ui-react": "^3.3.0", + "@openzeppelin/ui-renderer": "^3.4.0", + "@openzeppelin/ui-types": "^3.3.0", + "@openzeppelin/ui-utils": "^3.3.0", "@tanstack/react-query": "^5.0.0", "@wagmi/core": "^2.20.3", "react": "^19.2.1", "react-dom": "^19.2.1", "react-hook-form": "^7.60.0", - "viem": "^2.28.0", + "viem": "^2.35.0", "wagmi": "^2.15.0", }, "devDependencies": { @@ -708,18 +708,18 @@ export default function GeneratedForm({ adapter, isWalletConnected }: GeneratedF exports[`Export Snapshot Tests > polkadot Export Snapshots > should match snapshot for package.json structure > package-json-polkadot 1`] = ` { "dependencies": { - "@openzeppelin/adapter-polkadot": "^2.1.0", - "@openzeppelin/ui-components": "^3.0.1", - "@openzeppelin/ui-react": "^3.0.0", - "@openzeppelin/ui-renderer": "^3.0.0", - "@openzeppelin/ui-types": "^3.1.1", - "@openzeppelin/ui-utils": "^3.0.1", + "@openzeppelin/adapter-polkadot": "^2.2.0", + "@openzeppelin/ui-components": "^3.8.1", + "@openzeppelin/ui-react": "^3.3.0", + "@openzeppelin/ui-renderer": "^3.4.0", + "@openzeppelin/ui-types": "^3.3.0", + "@openzeppelin/ui-utils": "^3.3.0", "@tanstack/react-query": "^5.0.0", "@wagmi/core": "^2.20.3", "react": "^19.2.1", "react-dom": "^19.2.1", "react-hook-form": "^7.60.0", - "viem": "^2.28.0", + "viem": "^2.35.0", "wagmi": "^2.15.0", }, "devDependencies": { diff --git a/apps/builder/src/export/__tests__/dependencyFloors.test.ts b/apps/builder/src/export/__tests__/dependencyFloors.test.ts new file mode 100644 index 00000000..3ce92d88 --- /dev/null +++ b/apps/builder/src/export/__tests__/dependencyFloors.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from 'vitest'; + +import { applyDependencyFloor, EXTERNAL_DEPENDENCY_FLOORS } from '../dependencyFloors'; + +describe('dependencyFloors', () => { + it('exposes a viem ENS floor', () => { + expect(EXTERNAL_DEPENDENCY_FLOORS.viem).toBe('^2.35.0'); + }); + + it('elevates viem below the floor', () => { + expect(applyDependencyFloor('viem', '^2.28.0')).toBe('^2.35.0'); + expect(applyDependencyFloor('viem', '^2.0.0')).toBe('^2.35.0'); + }); + + it('keeps viem at or above the floor', () => { + expect(applyDependencyFloor('viem', '^2.35.0')).toBe('^2.35.0'); + expect(applyDependencyFloor('viem', '^2.47.10')).toBe('^2.47.10'); + }); + + it('passes through packages without a floor', () => { + expect(applyDependencyFloor('wagmi', '^2.15.0')).toBe('^2.15.0'); + }); +}); diff --git a/apps/builder/src/export/codeTemplates/main.template.tsx b/apps/builder/src/export/codeTemplates/main.template.tsx index 989841b8..c1c8cfc9 100644 --- a/apps/builder/src/export/codeTemplates/main.template.tsx +++ b/apps/builder/src/export/codeTemplates/main.template.tsx @@ -11,9 +11,23 @@ import { ecosystemDefinition, NetworkConfigPlaceholder } from '@@adapter-package import React from 'react'; import ReactDOM from 'react-dom/client'; -import { NetworkErrorNotificationProvider, Toaster } from '@openzeppelin/ui-components'; -import { RuntimeProvider, WalletStateProvider } from '@openzeppelin/ui-react'; -import type { EcosystemRuntime, NativeConfigLoader, NetworkConfig } from '@openzeppelin/ui-types'; +import { + NameResolverProvider, + NetworkErrorNotificationProvider, + Toaster, +} from '@openzeppelin/ui-components'; +import { + RuntimeProvider, + useRuntimeNameResolver, + useWalletState, + WalletStateProvider, +} from '@openzeppelin/ui-react'; +import type { + CreateRuntimeOptions, + EcosystemRuntime, + NativeConfigLoader, + NetworkConfig, +} from '@openzeppelin/ui-types'; import { appConfigService, logger } from '@openzeppelin/ui-utils'; // @ts-expect-error - this is a template file, so we don't have to worry about this import @@ -31,6 +45,10 @@ import './styles.css'; // The specific NetworkConfig for this exported form. const exportedNetworkConfig = NetworkConfigPlaceholder; +const runtimeCreationOptions: CreateRuntimeOptions = { + nameResolution: { enableMainnetL1MissFallback: true }, +}; + /*------------TEMPLATE COMMENT START------------*/ /** * `ecosystemDefinition` comes from the selected adapter package. @@ -47,7 +65,8 @@ const resolveRuntime = async (nc: NetworkConfig): Promise => { const runtime = ecosystemDefinition.createRuntime( 'composer', - nc as typeof exportedNetworkConfig + nc as typeof exportedNetworkConfig, + runtimeCreationOptions ); /*@@ADAPTER_BOOTSTRAP_CODE_INJECTION_POINT@@*/ return runtime; @@ -99,6 +118,22 @@ const loadAppConfigModule: NativeConfigLoader = async (relativePath: string) => } }; +/* eslint-disable-next-line react-refresh/only-export-components */ +function NameResolverBridge({ children }: { children: React.ReactNode }) { + const resolver = useRuntimeNameResolver(); + const { activeNetworkId, activeNetworkConfig } = useWalletState(); + + return ( + + {children} + + ); +} + async function startApp() { // Initialize AppConfigService, attempting to load from app.config.json first, // then potentially from Vite env vars if the exported app is built with Vite and sets them. @@ -117,7 +152,9 @@ async function startApp() { getNetworkConfigById={getNetworkConfigById} loadConfigModule={loadAppConfigModule} > - + + + diff --git a/apps/builder/src/export/dependencyFloors.ts b/apps/builder/src/export/dependencyFloors.ts new file mode 100644 index 00000000..69622797 --- /dev/null +++ b/apps/builder/src/export/dependencyFloors.ts @@ -0,0 +1,47 @@ +/** + * Minimum version floors for external packages that adapter export configs may + * under-pin relative to the published adapter peerDependencies. + * + * Example: adapter-evm@2.3.0 peers require viem ^2.35.0 (ENS v2), but its + * AdapterConfig still advertises viem ^2.28.0 for exported apps. PackageManager + * elevates any listed dependency to at least these floors. + */ +export const EXTERNAL_DEPENDENCY_FLOORS: Readonly> = { + viem: '^2.35.0', +}; + +/** + * Returns the higher of `requested` and the known floor for `packageName`. + * Only handles simple caret (^x.y.z) / exact semver strings; other ranges pass through. + */ +export function applyDependencyFloor(packageName: string, requested: string): string { + const floor = EXTERNAL_DEPENDENCY_FLOORS[packageName]; + if (!floor) { + return requested; + } + + const requestedMin = parseCaretOrExact(requested); + const floorMin = parseCaretOrExact(floor); + if (!requestedMin || !floorMin) { + return requested; + } + + return compareSemver(requestedMin, floorMin) >= 0 ? requested : floor; +} + +function parseCaretOrExact(range: string): [number, number, number] | null { + const match = range.trim().match(/^\^?(\d+)\.(\d+)\.(\d+)(?:-[\w.-]+)?$/); + if (!match) { + return null; + } + return [Number(match[1]), Number(match[2]), Number(match[3])]; +} + +function compareSemver(a: [number, number, number], b: [number, number, number]): number { + for (let i = 0; i < 3; i++) { + if (a[i] !== b[i]) { + return a[i] - b[i]; + } + } + return 0; +} diff --git a/apps/builder/src/export/generators/ViteConfigGenerator.ts b/apps/builder/src/export/generators/ViteConfigGenerator.ts index b462ca6a..bf5e4f83 100644 --- a/apps/builder/src/export/generators/ViteConfigGenerator.ts +++ b/apps/builder/src/export/generators/ViteConfigGenerator.ts @@ -12,6 +12,11 @@ export interface ViteConfigGeneratorOptions { adapterConfig?: AdapterConfig; } +/** Ecosystems whose exported apps ship wagmi / WalletConnect wallet stacks. */ +export function ecosystemUsesWalletInterop(ecosystem: Ecosystem): boolean { + return ecosystem === 'evm' || ecosystem === 'polkadot'; +} + /** * Generates a vite.config.ts file tailored to the exported application's ecosystem * @@ -19,11 +24,13 @@ export interface ViteConfigGeneratorOptions { * @returns The complete vite.config.ts file content as a string */ export function generateViteConfig(options: ViteConfigGeneratorOptions): string { - const { adapterConfig } = options; + const { ecosystem, adapterConfig } = options; const viteConfig = adapterConfig?.viteConfig; + const usesWalletInterop = ecosystemUsesWalletInterop(ecosystem); // Build imports section const imports = [ + "import { createRequire } from 'node:module';", "import path from 'path';", "import tailwindcss from '@tailwindcss/vite';", "import react from '@vitejs/plugin-react';", @@ -36,6 +43,26 @@ export function generateViteConfig(options: ViteConfigGeneratorOptions): string // Build config initialization const configInit: string[] = []; + if (usesWalletInterop) { + configInit.push( + ' const require = createRequire(import.meta.url);', + ' // eventemitter3@5 ESM wrapper default-imports CJS; alias + pre-bundle for Vite interop.', + ' // `debug` is intentionally NOT aliased or listed in optimizeDeps — see role-manager pattern.', + ' let eventemitter3CjsEntry: string | undefined;', + ' try {', + " eventemitter3CjsEntry = require.resolve('eventemitter3');", + ' } catch {', + ' try {', + " eventemitter3CjsEntry = createRequire(require.resolve('@wagmi/core/package.json')).resolve(", + " 'eventemitter3'", + ' );', + ' } catch {', + ' eventemitter3CjsEntry = undefined;', + ' }', + ' }', + '' + ); + } if (viteConfig?.configInit) { configInit.push( ' // Import adapter Vite configuration', @@ -55,16 +82,18 @@ export function generateViteConfig(options: ViteConfigGeneratorOptions): string // Build resolve.dedupe config const dedupeConfig = viteConfig?.dedupe ? ` ${viteConfig.dedupe}` : ''; - // Build optimizeDeps config - const optimizeDepsInclude = viteConfig?.optimizeDeps?.include - ? ` ${viteConfig.optimizeDeps.include}` + const eventemitter3Alias = usesWalletInterop + ? ' ...(eventemitter3CjsEntry ? { eventemitter3: eventemitter3CjsEntry } : {}),' : ''; + + const optimizeDepsInclude = buildOptimizeDepsInclude( + usesWalletInterop, + viteConfig?.optimizeDeps?.include + ); const optimizeDepsExclude = viteConfig?.optimizeDeps?.exclude ? ` ${viteConfig.optimizeDeps.exclude}` : ''; - const hasOptimizeDeps = optimizeDepsInclude || optimizeDepsExclude; - return `${imports.join('\n')} // https://vitejs.dev/config/ @@ -79,6 +108,7 @@ ${plugins.join('\n')} // Node.js polyfills for browser compatibility buffer: 'buffer/', events: 'events/', +${eventemitter3Alias} }, ${dedupeConfig} }, @@ -89,9 +119,7 @@ ${dedupeConfig} // can throw "ReferenceError: global is not defined" during runtime without this alias. // Mapping \`global\` to \`globalThis\` provides a safe browser shim for exported apps. global: 'globalThis', - },${ - hasOptimizeDeps - ? ` + }, optimizeDeps: { esbuildOptions: { define: { @@ -100,9 +128,7 @@ ${dedupeConfig} }, ${optimizeDepsInclude} ${optimizeDepsExclude} - },` - : '' - } + }, build: { outDir: 'dist', sourcemap: true, @@ -117,3 +143,43 @@ ${optimizeDepsExclude} }); `; } + +/** + * Builds an `include: [...]` block. Wallet ecosystems (evm/polkadot) pre-bundle + * eventemitter3 only; other transitive wallet deps rely on .npmrc hoist patterns. + */ +function buildOptimizeDepsInclude(usesWalletInterop: boolean, adapterInclude?: string): string { + const walletInterop = usesWalletInterop ? ["'eventemitter3'"] : []; + + if (!adapterInclude) { + if (walletInterop.length === 0) { + return ''; + } + return ` include: [${walletInterop.join(', ')}],`; + } + + const raw = adapterInclude.trim(); + // Expected shape: `include: [ ... ]` (possibly multiline) + if (raw.startsWith('include:')) { + const listStart = raw.indexOf('['); + const listEnd = raw.lastIndexOf(']'); + if (listStart >= 0 && listEnd > listStart) { + const inner = raw.slice(listStart + 1, listEnd).trim(); + if (!inner) { + if (walletInterop.length === 0) { + return ` ${raw},`; + } + return ` include: [${walletInterop.join(', ')}],`; + } + if (walletInterop.length === 0) { + return ` ${raw},`; + } + return ` include: [\n ${walletInterop.join(',\n ')},\n ${inner}\n ],`; + } + } + + if (walletInterop.length === 0) { + return ` ${raw}`; + } + return ` include: [${walletInterop.join(', ')}],\n ${raw}`; +} diff --git a/apps/builder/src/export/generators/__tests__/ViteConfigGenerator.test.ts b/apps/builder/src/export/generators/__tests__/ViteConfigGenerator.test.ts new file mode 100644 index 00000000..f1ee8d66 --- /dev/null +++ b/apps/builder/src/export/generators/__tests__/ViteConfigGenerator.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, it } from 'vitest'; + +import { ecosystemUsesWalletInterop, generateViteConfig } from '../ViteConfigGenerator'; + +describe('ViteConfigGenerator', () => { + describe('ecosystemUsesWalletInterop', () => { + it.each([ + ['evm', true], + ['polkadot', true], + ['stellar', false], + ['solana', false], + ['midnight', false], + ] as const)('returns %s → %s', (ecosystem, expected) => { + expect(ecosystemUsesWalletInterop(ecosystem)).toBe(expected); + }); + }); + + describe('generateViteConfig', () => { + it('includes eventemitter3 alias and optimizeDeps for evm exports', () => { + const config = generateViteConfig({ ecosystem: 'evm' }); + + expect(config).toContain('eventemitter3CjsEntry'); + expect(config).toContain("include: ['eventemitter3']"); + expect(config).not.toContain("'debug'"); + }); + + it('omits wallet interop for stellar exports', () => { + const config = generateViteConfig({ ecosystem: 'stellar' }); + + expect(config).not.toContain('eventemitter3CjsEntry'); + expect(config).not.toContain("'eventemitter3'"); + expect(config).not.toContain("'debug'"); + }); + }); +}); diff --git a/apps/builder/src/export/templates/typescript-react-vite/.npmrc b/apps/builder/src/export/templates/typescript-react-vite/.npmrc new file mode 100644 index 00000000..d5c0fc84 --- /dev/null +++ b/apps/builder/src/export/templates/typescript-react-vite/.npmrc @@ -0,0 +1,10 @@ +# Standalone-export equivalent of monorepo shamefullyHoist (role-manager / ui-builder). +# Hoists wallet transitive deps so Vite can resolve them from the app root under pnpm. +# eventemitter3 is also aliased + pre-bundled in vite.config.ts for wallet ecosystems. +# `debug` is hoisted only — do not alias or add to optimizeDeps.include (browser field). +public-hoist-pattern[]=@wagmi/connectors +public-hoist-pattern[]=@walletconnect/* +public-hoist-pattern[]=@metamask/* +public-hoist-pattern[]=@stellar/freighter-api +public-hoist-pattern[]=eventemitter3 +public-hoist-pattern[]=debug diff --git a/apps/builder/src/export/templates/typescript-react-vite/package.json b/apps/builder/src/export/templates/typescript-react-vite/package.json index f73f00eb..f1e433e1 100644 --- a/apps/builder/src/export/templates/typescript-react-vite/package.json +++ b/apps/builder/src/export/templates/typescript-react-vite/package.json @@ -12,9 +12,11 @@ "check-deps": "npm outdated" }, "dependencies": { - "@openzeppelin/ui-components": "^3.0.1", - "@openzeppelin/ui-renderer": "^3.0.0", - "@openzeppelin/ui-utils": "^3.0.1", + "@openzeppelin/ui-components": "^3.8.0", + "@openzeppelin/ui-react": "^3.3.0", + "@openzeppelin/ui-renderer": "^3.4.0", + "@openzeppelin/ui-types": "^3.3.0", + "@openzeppelin/ui-utils": "^3.3.0", "react": "^19.2.1", "react-dom": "^19.2.1", "react-hook-form": "^7.60.0" diff --git a/apps/builder/src/export/templates/typescript-react-vite/vite.config.ts b/apps/builder/src/export/templates/typescript-react-vite/vite.config.ts index bc117fe7..6c81623e 100644 --- a/apps/builder/src/export/templates/typescript-react-vite/vite.config.ts +++ b/apps/builder/src/export/templates/typescript-react-vite/vite.config.ts @@ -1,14 +1,39 @@ +import { createRequire } from 'node:module'; import path from 'path'; import tailwindcss from '@tailwindcss/vite'; import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; +// eventemitter3@5 ships an ESM wrapper that default-imports its CJS build. Vite +// can serve that without interop, so wallet deps fail with +// "does not provide an export named 'default'". Alias to the CJS entry + +// pre-bundle so Vite synthesizes a proper default export. +// +// `debug` is intentionally NOT aliased or pre-bundled: forcing its resolved entry +// bypasses the package browser field (role-manager / ui-builder builder pattern). +// Transitive wallet deps are hoisted via export .npmrc public-hoist-pattern. +const require = createRequire(import.meta.url); +function resolveEventEmitter3CjsEntry(): string | undefined { + try { + return require.resolve('eventemitter3'); + } catch { + try { + const viaWagmiCore = createRequire(require.resolve('@wagmi/core/package.json')); + return viaWagmiCore.resolve('eventemitter3'); + } catch { + return undefined; + } + } +} +const eventemitter3CjsEntry = resolveEventEmitter3CjsEntry(); + // https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ plugins: [react(), tailwindcss()], resolve: { alias: { '@': path.resolve(__dirname, './src'), + ...(eventemitter3CjsEntry ? { eventemitter3: eventemitter3CjsEntry } : {}), }, }, define: { @@ -19,6 +44,14 @@ export default defineConfig(({ mode }) => ({ // Mapping `global` to `globalThis` provides a safe browser shim for exported apps. global: 'globalThis', }, + optimizeDeps: { + esbuildOptions: { + define: { + global: 'globalThis', + }, + }, + include: ['eventemitter3'], + }, build: { outDir: 'dist', sourcemap: true, diff --git a/apps/builder/src/export/versions.ts b/apps/builder/src/export/versions.ts index f43040b5..c919ef3e 100644 --- a/apps/builder/src/export/versions.ts +++ b/apps/builder/src/export/versions.ts @@ -6,16 +6,16 @@ */ export const packageVersions = { - '@openzeppelin/adapter-evm': '2.1.0', - '@openzeppelin/adapter-midnight': '2.0.1', - '@openzeppelin/adapter-polkadot': '2.1.0', - '@openzeppelin/adapter-solana': '2.0.0', - '@openzeppelin/adapter-stellar': '2.0.2', - '@openzeppelin/ui-react': '3.0.0', - '@openzeppelin/ui-renderer': '3.0.0', - '@openzeppelin/ui-storage': '1.2.2', - '@openzeppelin/ui-types': '3.1.1', - '@openzeppelin/ui-components': '3.0.1', - '@openzeppelin/ui-utils': '3.0.1', + '@openzeppelin/adapter-evm': '2.3.0', + '@openzeppelin/adapter-midnight': '2.2.0', + '@openzeppelin/adapter-polkadot': '2.2.0', + '@openzeppelin/adapter-solana': '2.2.0', + '@openzeppelin/adapter-stellar': '2.2.0', + '@openzeppelin/ui-react': '3.3.0', + '@openzeppelin/ui-renderer': '3.4.0', + '@openzeppelin/ui-storage': '1.2.3', + '@openzeppelin/ui-types': '3.3.0', + '@openzeppelin/ui-components': '3.8.1', + '@openzeppelin/ui-utils': '3.3.0', '@openzeppelin/ui-styles': '1.1.0', }; diff --git a/apps/builder/vite.config.ts b/apps/builder/vite.config.ts index d755a81f..d102029a 100644 --- a/apps/builder/vite.config.ts +++ b/apps/builder/vite.config.ts @@ -39,6 +39,26 @@ logger.warn = (msg, options) => { // https://vitejs.dev/config/ const require = createRequire(import.meta.url); const bufferPolyfillPath = require.resolve('buffer/'); +// eventemitter3@5 ships an ESM wrapper that default-imports its own CJS build. +// Vite can serve that wrapper without CJS interop, so wallet deps fail with +// "does not provide an export named 'default'". Alias to the CJS entry and force +// pre-bundling so Vite synthesizes a proper default export. +// +// Other wallet transitive deps (cross-fetch, eventemitter2, debug, …) are left +// un-aliased: shamefullyHoist (pnpm-workspace.yaml) hoists them to the app root +// so Vite's optimizeDeps can resolve and pre-bundle them with CJS interop. +// Aliasing debug bypasses its browser field and breaks in the browser. + +function resolveWalletTransitiveEntry(specifier: string): string { + try { + return require.resolve(specifier); + } catch { + const viaWagmiCore = createRequire(require.resolve('@wagmi/core/package.json')); + return viaWagmiCore.resolve(specifier); + } +} + +const eventemitter3CjsEntry = resolveWalletTransitiveEntry('eventemitter3'); const adapters = createOpenZeppelinAdapterIntegration({ ecosystems: supportedAdapterEcosystems, pluginFactories: { @@ -64,6 +84,7 @@ export default adapters.vite({ // Node built-ins polyfills for browser using absolute paths buffer: bufferPolyfillPath, 'buffer/': bufferPolyfillPath, + eventemitter3: eventemitter3CjsEntry, }, }, define: { @@ -155,6 +176,8 @@ export default adapters.vite({ '@wagmi/core', '@wagmi/connectors', '@rainbow-me/rainbowkit', + // WalletConnect / wagmi transitive — see eventemitter3CjsEntry note above + 'eventemitter3', // Wallet libraries - Solana '@solana/web3.js', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 377fec0a..5ca3afb5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,9 +24,11 @@ overrides: '@midnight-ntwrk/midnight-js-network-id': 2.0.2 '@midnight-ntwrk/midnight-js-types': 2.0.2 '@midnight-ntwrk/midnight-js-utils': 2.0.2 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 - '@openzeppelin/ui-components': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 + '@openzeppelin/ui-components': 3.8.0 + '@openzeppelin/ui-react': 3.3.0 + '@openzeppelin/ui-renderer': 3.4.0 react-hook-form: 7.79.0 axios@<1.16.0: ^1.16.0 hono@<4.12.21: ^4.12.21 @@ -63,7 +65,7 @@ importers: version: 19.8.1 '@commitlint/cz-commitlint': specifier: ^19.8.1 - version: 19.8.1(@types/node@24.10.13)(commitizen@4.3.1(@types/node@24.10.13)(typescript@5.9.3))(inquirer@8.2.5)(typescript@5.9.3) + version: 19.8.1(@types/node@24.10.13)(commitizen@4.3.1(@types/node@24.10.13)(typescript@5.9.3))(inquirer@9.3.8(@types/node@24.10.13))(typescript@5.9.3) '@ianvs/prettier-plugin-sort-imports': specifier: 4.5.1 version: 4.5.1(prettier@3.6.2) @@ -149,41 +151,41 @@ importers: specifier: ^12.9.0 version: 12.9.0(react@19.2.4) '@openzeppelin/adapter-evm': - specifier: '>=2.0.2-0 <3.0.0' - version: 2.0.2(a6ab15e4a742d38f5e2a58de34e72101) + specifier: '>=2.3.0-0 <3.0.0' + version: 2.3.0(33b342e7d24287fe40d61510db829b82) '@openzeppelin/adapter-midnight': specifier: '>=2.0.1-0 <3.0.0' - version: 2.0.1(@openzeppelin/ui-components@3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6) + version: 2.2.0(@openzeppelin/ui-components@3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6) '@openzeppelin/adapter-polkadot': specifier: '>=2.0.2-0 <3.0.0' - version: 2.0.2(6d4188a31e1186f28ad6eca5fe60189c) + version: 2.2.0(7761f2158f5701068ebd56e42f393b5c) '@openzeppelin/adapter-solana': specifier: '>=2.0.0-0 <3.0.0' - version: 2.0.0(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6) + version: 2.2.0(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6) '@openzeppelin/adapter-stellar': specifier: '>=2.0.2-0 <3.0.0' - version: 2.0.2(2b0327c1100eab91763e0bb8d76ede81) + version: 2.2.0(385dc6efa47ed168af8a1efab97d4ad9) '@openzeppelin/ui-components': - specifier: 3.0.1 - version: 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + specifier: 3.8.0 + version: 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) '@openzeppelin/ui-react': - specifier: ^3.0.0 - version: 3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + specifier: 3.3.0 + version: 3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) '@openzeppelin/ui-renderer': - specifier: ^3.0.0 - version: 3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-hook-form@7.79.0(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + specifier: 3.4.0 + version: 3.4.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-hook-form@7.79.0(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) '@openzeppelin/ui-storage': specifier: ^1.2.2 - version: 1.2.2(@types/react@19.2.14)(react@19.2.4) + version: 1.2.3(@types/react@19.2.14)(react@19.2.4) '@openzeppelin/ui-styles': specifier: ^1.1.0 version: 1.1.0 '@openzeppelin/ui-types': - specifier: 3.1.1 - version: 3.1.1 + specifier: 3.3.0 + version: 3.3.0 '@openzeppelin/ui-utils': - specifier: 3.0.1 - version: 3.0.1 + specifier: 3.3.0 + version: 3.3.0 '@radix-ui/react-accordion': specifier: ^1.2.12 version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -319,7 +321,7 @@ importers: version: 4.0.0 '@openzeppelin/adapters-vite': specifier: '>=2.0.0-0 <3.0.0' - version: 2.0.0(50a78304bd0aaaea7ad0048eef4b8023) + version: 2.0.0(ec9008ef75b2fbec59022e7a21bdfa9c) '@tailwindcss/vite': specifier: ^4.2.2 version: 4.2.2(vite@7.3.2(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.47.1)(yaml@2.9.0)) @@ -1152,6 +1154,19 @@ packages: peerDependencies: react: ^16.13 || ^17 || ^18 || ^19 + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': 24.10.13 + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + '@isaacs/cliui@9.0.0': resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} engines: {node: '>=18'} @@ -1525,56 +1540,56 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@openzeppelin/adapter-evm@2.0.2': - resolution: {integrity: sha512-/hpolOfuUMVV6/QEz600bMCoeju9jK7XFwCkaQgpKJIXVfkNz1aFhYgcnzrocL6D2A3OJV17733Ponuc7HoVKA==} + '@openzeppelin/adapter-evm@2.3.0': + resolution: {integrity: sha512-672Hfiod7DdOJxA/VvqUiNslPyEU61JdOt8EMaJIdf8uDvua0YIN5zgnNdqxYOTZpODAOdq/Y1+MJlcN3aix6w==} peerDependencies: - '@openzeppelin/ui-components': 3.0.1 - '@openzeppelin/ui-react': ^2.0.1 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0 + '@openzeppelin/ui-react': 3.3.0 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@rainbow-me/rainbowkit': ^2.2.8 '@tanstack/react-query': ^5.74.7 react: ^19.0.0 react-dom: ^19.0.0 react-hook-form: 7.79.0 - viem: ^2.28.0 + viem: ^2.35.0 wagmi: ^2.15.0 - '@openzeppelin/adapter-midnight@2.0.1': - resolution: {integrity: sha512-xylUaiERxyk/VWPr6ooYO9FfFcFVZ6IW68vpigciNlDTX4fiSC3rO52+psBUeDN4oh8rfkwx6HROn6oAxMBj5g==} + '@openzeppelin/adapter-midnight@2.2.0': + resolution: {integrity: sha512-o9+MZ5wr9BceUkNlEPf8AFJ39Oh0HVUiRsNr/+jgtRbVvDUdEXyOs3SfjZv65dJO9wWbQyop2a25TcYAFdU/wA==} peerDependencies: - '@openzeppelin/ui-components': 3.0.1 - '@openzeppelin/ui-react': ^2.0.1 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0 + '@openzeppelin/ui-react': 3.3.0 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 react: ^19.0.0 react-dom: ^19.0.0 - '@openzeppelin/adapter-polkadot@2.0.2': - resolution: {integrity: sha512-2Km4Q9FD4hIS1YJIAsFhQsXYAL1BpUPFTgnSIvyUFTAZjv6nLbCsXMm9ITAHYZvDrnaEPijVrg0kapkBGZwsww==} + '@openzeppelin/adapter-polkadot@2.2.0': + resolution: {integrity: sha512-8QiGrJpDALO4izSALCprWP1+DK2LiDShn8l06eVEu19QbrPlSiJfq0iGEY3uz57a1I29yM+4MLLaK+fIYJu1mw==} peerDependencies: - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@rainbow-me/rainbowkit': ^2.2.8 '@tanstack/react-query': ^5.74.7 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - viem: ^2.28.0 + viem: ^2.35.0 wagmi: ^2.15.0 - '@openzeppelin/adapter-solana@2.0.0': - resolution: {integrity: sha512-xu3oGpqy3SW94YXYK74jhBuRKHF+A5eu9P3r0kaWI19Ln9Pjg038Zzc0mEh7jzZkvyvtCSb62GqBVbh8wJeH5A==} + '@openzeppelin/adapter-solana@2.2.0': + resolution: {integrity: sha512-XEku05mhpXdbwKBDXxV2bsgiXyGqZpWXRvAaWG6oHDmGYf+vE4nL0ZYYN7KEp6PqypKvhzKvD0cXYds53NEM1Q==} peerDependencies: - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 react: ^19.0.0 - '@openzeppelin/adapter-stellar@2.0.2': - resolution: {integrity: sha512-3Sq4mP7Cvlvs4dHCbNNOIVDTxWZjWqt0nlzxcMIo2IJS8EuMZuf/1jo3TtSOuIpdH0Pzw0fZbZ4gMKZjzKdqIQ==} + '@openzeppelin/adapter-stellar@2.2.0': + resolution: {integrity: sha512-hoKp7Mp0rgVG1zlc8NTgS1U0i33IuHGVDTicJhwnZwo1M6Y4fHQ4D1Gpo4M9+7M/OterrDbIrRQ0rFMIeSQzaw==} peerDependencies: - '@openzeppelin/ui-components': 3.0.1 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 react: ^19.0.0 react-dom: ^19.0.0 react-hook-form: 7.79.0 @@ -1608,8 +1623,8 @@ packages: resolution: {integrity: sha512-G3Zhg0imaT9Ej1cE9Cq5d4uQvW+DinD2GvRuiPWo3+O9KI8ivBnGJkjEGgK9Ja3/QsUNIfx8Gk5Mdw2sPXjVWA==} engines: {node: '>=22.14.0', npm: use pnpm, pnpm: '>=9', yarn: use pnpm} - '@openzeppelin/ui-components@3.0.1': - resolution: {integrity: sha512-J1oPHW9lmRjp/ECqAOcpoYDBqF9w+le45ekbDRMd0KbwHXXd7twES/swsQkU62zL7TWW1KekmmwWn4Gx5QKEBg==} + '@openzeppelin/ui-components@3.8.0': + resolution: {integrity: sha512-KF/421x0F9DxnI2qKCOojTOIuc4PS7Tm/d1bpspVnxeUNykUk5Mo4OHSutjfMNZjZEc7ZxAdDeoD+B2ZhhYMaQ==} peerDependencies: react: ^19.0.0 react-dom: ^19.0.0 @@ -1619,22 +1634,22 @@ packages: engines: {node: '>=20.19.0'} hasBin: true - '@openzeppelin/ui-react@3.0.0': - resolution: {integrity: sha512-Hd2xupBEaIiWlc1wpViNuVfYBO3XCqNwynq/qppk2RGgrD5mCRNGIMpbrNElVyrp4V4jHcjtiPXfOn8Bz8juZg==} + '@openzeppelin/ui-react@3.3.0': + resolution: {integrity: sha512-nDMIJeWkvnd18l+9DjHNypDw1MYdr4Ey1JYOhpzR66kJDwk3V2ZHoIjwA6/IXHpZ2nvlG21P5+XShM0uZT+SAA==} peerDependencies: '@tanstack/react-query': ^5.0.0 react: ^19.0.0 react-dom: ^19.0.0 - '@openzeppelin/ui-renderer@3.0.0': - resolution: {integrity: sha512-JwRI1fKkCrArHK070t+1RcvCbAi4daJxruNV5Og2t6/8FMcUzsuO/TNSupP1gxg9Eb82PFvH+02w8v8CXvo9UA==} + '@openzeppelin/ui-renderer@3.4.0': + resolution: {integrity: sha512-8BuQQ1lpNHJZ/chYISA+jOVlXQ2103MQuJd5N2HjO9ocv1B4IWfI3SMDfiLWCwKX60xOKIXAQRNLbSsJ9dh6DQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 react-hook-form: 7.79.0 - '@openzeppelin/ui-storage@1.2.2': - resolution: {integrity: sha512-ZceuO4q6fva1boHQYJ7EnN+PuPFD7MFWDzEOgpGCIxEVQCwq2WdZRJKd18pOEtz0Cfn0izNxrym/bwuhtSxRMQ==} + '@openzeppelin/ui-storage@1.2.3': + resolution: {integrity: sha512-NJKONzad7PfYh5McyG+unIAoTPqRDH6x3NJ/BkGVZBTWKJL0HMrBzPy2XLbuZsbkIYRDfOS7zUdeI+iAhH09Iw==} peerDependencies: react: ^19.0.0 @@ -1645,11 +1660,11 @@ packages: resolution: {integrity: sha512-RGsMf4SARvzHJr0VesNss8JVgRGvqEINcK/e2XFXJb6QvkmaPzOoJylJGrMn5IevI0JWsyAXzhSrGRLmlBKpbg==} engines: {node: '>=20.19.0'} - '@openzeppelin/ui-types@3.1.1': - resolution: {integrity: sha512-0vcFoW4E1eLGZZJ5O89Og8HBaSOND34qIUmMDYQ2XftDBVCgVetzRTDTRFA+MsNrcD/fa2L1e6GnuI1kIzTTrA==} + '@openzeppelin/ui-types@3.3.0': + resolution: {integrity: sha512-O2CVNs4oc4EJFOzZkye6OJNlhSWHpqrrlVhzh7cVU+uye+cVvwEXoLbtJ8cti0JoNb6RKTKH+DPvfRg5r5R+Aw==} - '@openzeppelin/ui-utils@3.0.1': - resolution: {integrity: sha512-Uo8TVLKDiwvy3WoJbKpC/Ev0bsGAhWMf/tSg2eOPzDPNwn8lDOK1hjH07n25dDaBcWBd/CA9Y/AgIyZ2XGrrvA==} + '@openzeppelin/ui-utils@3.3.0': + resolution: {integrity: sha512-/8L1//tl+R1pCLsOASoxdUXgThMvu7aPpXcuexDF0Pfp7byJk3ZWZtLD79llkoYhkgKMKieISXUE3FKILiUlpA==} '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} @@ -3291,10 +3306,12 @@ packages: '@stellar/stellar-base@13.1.0': resolution: {integrity: sha512-90EArG+eCCEzDGj3OJNoCtwpWDwxjv+rs/RNPhvg4bulpjN/CSRj+Ys/SalRcfM4/WRC5/qAfjzmJBAuquWhkA==} engines: {node: '>=18.0.0'} + deprecated: This package is now rolled into @stellar/stellar-sdk. Please use @stellar/stellar-sdk to continue receiving updates and support. '@stellar/stellar-base@14.1.0': resolution: {integrity: sha512-A8kFli6QGy22SRF45IjgPAJfUNGjnI+R7g4DF5NZYVsD1kGf7B4ITyc4OPclLV9tqNI4/lXxafGEw0JEUbHixw==} engines: {node: '>=20.0.0'} + deprecated: This package is now rolled into @stellar/stellar-sdk. Please use @stellar/stellar-sdk to continue receiving updates and support. '@stellar/stellar-sdk@13.3.0': resolution: {integrity: sha512-8+GHcZLp+mdin8gSjcgfb/Lb6sSMYRX6Nf/0LcSJxvjLQR0XHpjGzOiRbYb2jSXo51EnA6kAV5j+4Pzh5OUKUg==} @@ -4792,6 +4809,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -4853,6 +4873,10 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -5090,9 +5114,6 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - date-fns@4.4.0: resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} @@ -5854,7 +5875,7 @@ packages: git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} engines: {node: '>=16'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. + deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true glob-parent@5.1.2: @@ -6078,6 +6099,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} @@ -6135,6 +6160,10 @@ packages: resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} + inquirer@9.3.8: + resolution: {integrity: sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==} + engines: {node: '>=18'} + int64-buffer@1.1.0: resolution: {integrity: sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw==} @@ -7092,6 +7121,10 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -7932,6 +7965,10 @@ packages: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -9115,6 +9152,10 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zen-observable-ts@1.1.0: resolution: {integrity: sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==} @@ -9313,8 +9354,8 @@ snapshots: '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -9323,7 +9364,7 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -9332,7 +9373,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -9457,9 +9498,9 @@ snapshots: '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 '@babel/traverse@7.28.6': dependencies: @@ -9623,14 +9664,14 @@ snapshots: ajv: 8.18.0 optional: true - '@commitlint/cz-commitlint@19.8.1(@types/node@24.10.13)(commitizen@4.3.1(@types/node@24.10.13)(typescript@5.9.3))(inquirer@8.2.5)(typescript@5.9.3)': + '@commitlint/cz-commitlint@19.8.1(@types/node@24.10.13)(commitizen@4.3.1(@types/node@24.10.13)(typescript@5.9.3))(inquirer@9.3.8(@types/node@24.10.13))(typescript@5.9.3)': dependencies: '@commitlint/ensure': 19.8.1 '@commitlint/load': 19.8.1(@types/node@24.10.13)(typescript@5.9.3) '@commitlint/types': 19.8.1 chalk: 5.6.2 commitizen: 4.3.1(@types/node@24.10.13)(typescript@5.9.3) - inquirer: 8.2.5 + inquirer: 9.3.8(@types/node@24.10.13) lodash.isplainobject: 4.0.6 word-wrap: 1.2.5 transitivePeerDependencies: @@ -9830,7 +9871,7 @@ snapshots: '@creit.tech/xbull-wallet-connect@0.4.0': dependencies: - rxjs: 7.8.1 + rxjs: 7.8.2 tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 @@ -10147,6 +10188,15 @@ snapshots: dependencies: react: 19.2.4 + '@inquirer/external-editor@1.0.3(@types/node@24.10.13)': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 24.10.13 + + '@inquirer/figures@1.0.15': {} + '@isaacs/cliui@9.0.0': {} '@isaacs/ttlcache@1.4.1': {} @@ -10781,13 +10831,13 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@openzeppelin/adapter-evm@2.0.2(a6ab15e4a742d38f5e2a58de34e72101)': + '@openzeppelin/adapter-evm@2.3.0(33b342e7d24287fe40d61510db829b82)': dependencies: '@openzeppelin/relayer-sdk': 1.9.0 - '@openzeppelin/ui-components': 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-react': 3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-react': 3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@rainbow-me/rainbowkit': 2.2.10(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@react-native-async-storage/async-storage@1.24.0(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)))(@tanstack/query-core@5.96.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) '@tanstack/react-query': 5.96.2(react@19.2.4) '@wagmi/connectors': 5.7.13(@react-native-async-storage/async-storage@1.24.0(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.2)(@types/react@19.2.14)(react@19.2.4)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) @@ -10832,7 +10882,7 @@ snapshots: - utf-8-validate - zod - '@openzeppelin/adapter-midnight@2.0.1(@openzeppelin/ui-components@3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6)': + '@openzeppelin/adapter-midnight@2.2.0(@openzeppelin/ui-components@3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6)': dependencies: '@midnight-ntwrk/compact-runtime': 0.9.0 '@midnight-ntwrk/dapp-connector-api': 3.0.0(rxjs@7.8.2) @@ -10848,10 +10898,10 @@ snapshots: '@midnight-ntwrk/midnight-js-utils': 2.0.2 '@midnight-ntwrk/wallet-sdk-address-format': 2.0.0(@midnight-ntwrk/zswap@4.0.0) '@midnight-ntwrk/zswap': 4.0.0 - '@openzeppelin/ui-components': 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-react': 3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-react': 3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@types/jszip': 3.4.1 jszip: 3.10.1 lodash-es: 4.18.1 @@ -10868,11 +10918,11 @@ snapshots: - subscriptions-transport-ws - utf-8-validate - '@openzeppelin/adapter-polkadot@2.0.2(6d4188a31e1186f28ad6eca5fe60189c)': + '@openzeppelin/adapter-polkadot@2.2.0(7761f2158f5701068ebd56e42f393b5c)': dependencies: '@openzeppelin/relayer-sdk': 1.9.0 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@rainbow-me/rainbowkit': 2.2.10(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@react-native-async-storage/async-storage@1.24.0(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)))(@tanstack/query-core@5.96.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react@19.2.14)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) '@tanstack/react-query': 5.96.2(react@19.2.4) '@wagmi/connectors': 5.7.13(@react-native-async-storage/async-storage@1.24.0(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6)))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.96.2)(@types/react@19.2.14)(react@19.2.4)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)(viem@2.47.10(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) @@ -10916,10 +10966,10 @@ snapshots: - utf-8-validate - zod - '@openzeppelin/adapter-solana@2.0.0(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)': + '@openzeppelin/adapter-solana@2.2.0(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6)': dependencies: - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@project-serum/anchor': 0.26.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) '@solana/spl-token': 0.3.11(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@6.0.6) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6)) @@ -10937,13 +10987,13 @@ snapshots: - typescript - utf-8-validate - '@openzeppelin/adapter-stellar@2.0.2(2b0327c1100eab91763e0bb8d76ede81)': + '@openzeppelin/adapter-stellar@2.2.0(385dc6efa47ed168af8a1efab97d4ad9)': dependencies: '@creit.tech/stellar-wallets-kit': 1.9.5(4480ce4a757a0261748c63c6238f7fbd) '@openzeppelin/relayer-sdk': 1.9.0 - '@openzeppelin/ui-components': 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@stellar/stellar-sdk': 14.6.1 '@stellar/stellar-xdr-json': 23.0.1 '@web3icons/react': 4.1.17(react@19.2.4)(typescript@5.9.3) @@ -10992,15 +11042,15 @@ snapshots: - utf-8-validate - ws - '@openzeppelin/adapters-vite@2.0.0(50a78304bd0aaaea7ad0048eef4b8023)': + '@openzeppelin/adapters-vite@2.0.0(ec9008ef75b2fbec59022e7a21bdfa9c)': dependencies: vite: 7.3.2(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.47.1)(yaml@2.9.0) optionalDependencies: - '@openzeppelin/adapter-evm': 2.0.2(a6ab15e4a742d38f5e2a58de34e72101) - '@openzeppelin/adapter-midnight': 2.0.1(@openzeppelin/ui-components@3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6) - '@openzeppelin/adapter-polkadot': 2.0.2(6d4188a31e1186f28ad6eca5fe60189c) - '@openzeppelin/adapter-solana': 2.0.0(@openzeppelin/ui-types@3.1.1)(@openzeppelin/ui-utils@3.0.1)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6) - '@openzeppelin/adapter-stellar': 2.0.2(2b0327c1100eab91763e0bb8d76ede81) + '@openzeppelin/adapter-evm': 2.3.0(33b342e7d24287fe40d61510db829b82) + '@openzeppelin/adapter-midnight': 2.2.0(@openzeppelin/ui-components@3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-react@3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3))(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(@types/react@19.2.14)(bufferutil@4.1.0)(crossws@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(utf-8-validate@6.0.6) + '@openzeppelin/adapter-polkadot': 2.2.0(7761f2158f5701068ebd56e42f393b5c) + '@openzeppelin/adapter-solana': 2.2.0(@openzeppelin/ui-types@3.3.0)(@openzeppelin/ui-utils@3.3.0)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@6.0.6))(react@19.2.4)(typescript@5.9.3)(utf-8-validate@6.0.6) + '@openzeppelin/adapter-stellar': 2.2.0(385dc6efa47ed168af8a1efab97d4ad9) '@openzeppelin/docs-utils@0.1.6': dependencies: @@ -11021,10 +11071,10 @@ snapshots: - debug - supports-color - '@openzeppelin/ui-components@3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': + '@openzeppelin/ui-components@3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': dependencies: - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -11068,11 +11118,11 @@ snapshots: commander: 13.1.0 picocolors: 1.1.1 - '@openzeppelin/ui-react@3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': + '@openzeppelin/ui-react@3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': dependencies: - '@openzeppelin/ui-components': 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@tanstack/react-query': 5.96.2(react@19.2.4) lucide-react: 0.510.0(react@19.2.4) react: 19.2.4 @@ -11084,13 +11134,13 @@ snapshots: - tailwindcss - typescript - '@openzeppelin/ui-renderer@3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-hook-form@7.79.0(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': + '@openzeppelin/ui-renderer@3.4.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-hook-form@7.79.0(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3)': dependencies: '@hookform/resolvers': 4.1.3(react-hook-form@7.79.0(react@19.2.4)) - '@openzeppelin/ui-components': 3.0.1(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-react': 3.0.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-components': 3.8.0(@babel/runtime@7.29.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-react': 3.3.0(@babel/runtime@7.29.2)(@tanstack/react-query@5.96.2(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.2)(typescript@5.9.3) + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-label': 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@radix-ui/react-progress': 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -11110,10 +11160,10 @@ snapshots: - tailwindcss - typescript - '@openzeppelin/ui-storage@1.2.2(@types/react@19.2.14)(react@19.2.4)': + '@openzeppelin/ui-storage@1.2.3(@types/react@19.2.14)(react@19.2.4)': dependencies: - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 dexie: 4.4.2 dexie-react-hooks: 1.1.7(@types/react@19.2.14)(dexie@4.4.2)(react@19.2.4) react: 19.2.4 @@ -11124,11 +11174,11 @@ snapshots: '@openzeppelin/ui-tailwind-utils@0.1.1': {} - '@openzeppelin/ui-types@3.1.1': {} + '@openzeppelin/ui-types@3.3.0': {} - '@openzeppelin/ui-utils@3.0.1': + '@openzeppelin/ui-utils@3.3.0': dependencies: - '@openzeppelin/ui-types': 3.1.1 + '@openzeppelin/ui-types': 3.3.0 clsx: 2.1.1 tailwind-merge: 3.5.0 uuid: 14.0.0 @@ -15923,6 +15973,8 @@ snapshots: chardet@0.7.0: {} + chardet@2.2.0: {} + charenc@0.0.2: {} chokidar@3.6.0: @@ -16003,6 +16055,8 @@ snapshots: cli-width@3.0.0: {} + cli-width@4.1.0: {} + cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -16257,8 +16311,6 @@ snapshots: dependencies: '@babel/runtime': 7.29.2 - date-fns@4.1.0: {} - date-fns@4.4.0: {} dayjs@1.11.13: {} @@ -17397,6 +17449,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + idb-keyval@6.2.1: {} idb-keyval@6.2.2: {} @@ -17450,6 +17506,23 @@ snapshots: through: 2.3.8 wrap-ansi: 7.0.0 + inquirer@9.3.8(@types/node@24.10.13): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@24.10.13) + '@inquirer/figures': 1.0.15 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + transitivePeerDependencies: + - '@types/node' + int64-buffer@1.1.0: {} internal-slot@1.1.0: @@ -18533,6 +18606,8 @@ snapshots: mute-stream@0.0.8: {} + mute-stream@1.0.0: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -19120,7 +19195,7 @@ snapshots: dependencies: '@date-fns/tz': 1.4.1 '@tabby_ai/hijri-converter': 1.0.5 - date-fns: 4.1.0 + date-fns: 4.4.0 date-fns-jalali: 4.1.0-0 react: 19.2.4 @@ -19466,6 +19541,8 @@ snapshots: run-async@2.4.1: {} + run-async@3.0.0: {} + rxjs@7.8.1: dependencies: tslib: 2.8.1 @@ -20699,6 +20776,8 @@ snapshots: yocto-queue@1.2.2: {} + yoctocolors-cjs@2.1.3: {} + zen-observable-ts@1.1.0: dependencies: '@types/zen-observable': 0.8.3 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d32f311b..6676d57c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ # Workspace adapter folders under packages/adapter-* publish as @openzeppelin/adapter-*. +shamefullyHoist: true packages: # Include all packages in the packages directory - 'packages/*' @@ -33,9 +34,11 @@ overrides: '@midnight-ntwrk/midnight-js-network-id': 2.0.2 '@midnight-ntwrk/midnight-js-types': 2.0.2 '@midnight-ntwrk/midnight-js-utils': 2.0.2 - '@openzeppelin/ui-types': 3.1.1 - '@openzeppelin/ui-utils': 3.0.1 - '@openzeppelin/ui-components': 3.0.1 + '@openzeppelin/ui-types': 3.3.0 + '@openzeppelin/ui-utils': 3.3.0 + '@openzeppelin/ui-components': 3.8.0 + '@openzeppelin/ui-react': 3.3.0 + '@openzeppelin/ui-renderer': 3.4.0 react-hook-form: 7.79.0 # Security overrides — see PR adding these for full advisory list 'axios@<1.16.0': ^1.16.0