diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 0e32191..d3135af 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -16,7 +16,17 @@ "Bash(pnpm --filter @originmain/app install)", "Bash(pnpm add *)", "Bash(xargs ls *)", - "Bash(grep -E \"\\\\.\\(ts|tsx\\)$\")" + "Bash(grep -E \"\\\\.\\(ts|tsx\\)$\")", + "WebSearch", + "WebFetch(domain:trees.software)", + "Bash(pnpm exec *)", + "WebFetch(domain:diffs.com)", + "WebFetch(domain:diff.com)", + "Bash(npm show *)", + "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\(json.dumps\\({k:d.get\\(k\\) for k in ['description','main','types','exports','peerDependencies','keywords']}, indent=2\\)\\)\")", + "Bash(pnpm --filter @originmain/diff-engine test)", + "Bash(npx tsc *)", + "Bash(npm test *)" ] } } diff --git a/marketing/index.html b/marketing/index.html index 55221fc..f795c6e 100644 --- a/marketing/index.html +++ b/marketing/index.html @@ -242,10 +242,13 @@ button { font-family: inherit; cursor: pointer; border: none; background: none; max-width: 1120px; margin: 0 auto; width: 100%; - display: flex; + display: grid; + grid-template-columns: 1fr auto 1fr; align-items: center; - justify-content: space-between; } +.nav-logo { justify-self: start; } +.nav-links { justify-self: center; } +.nav-actions{ justify-self: end; } .nav-logo { font-size: 1rem; font-weight: 800; diff --git a/packages/app/package.json b/packages/app/package.json index 3dafa3b..a56c673 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -9,17 +9,19 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@originmain/ui": "workspace:*", + "@fluentui/react-components": "^9.54.0", + "@fluentui/react-icons": "^2.0.0", "@originmain/diff-engine": "workspace:*", "@originmain/origin-graph": "workspace:*", "@originmain/renderer": "workspace:*", - "@fluentui/react-components": "^9.54.0", - "@fluentui/react-icons": "^2.0.0", + "@originmain/ui": "workspace:*", + "@pierre/diffs": "^1.1.19", + "@pierre/trees": "1.0.0-beta.3", + "@tanstack/react-query": "^5.62.0", "next": "^15.1.0", "react": "^19.0.0", "react-dom": "^19.0.0", - "zustand": "^5.0.0", - "@tanstack/react-query": "^5.62.0" + "zustand": "^5.0.0" }, "devDependencies": { "@types/node": "^22.0.0", diff --git a/packages/app/public/marketing.html b/packages/app/public/marketing.html index f638278..f795c6e 100644 --- a/packages/app/public/marketing.html +++ b/packages/app/public/marketing.html @@ -3,574 +3,1701 @@ -Originmain — AI-Native Design Engineering Platform +Originmain — Where design intent becomes production code - + - + - +
-
- -  Early Access — Now Open +
+ +
+ + + Early Access — Now Open
-

+

Design is code.
Code is design.

-

- The first canvas where every artboard is a live render of your actual app — and every edit is a code diff. +

+ The first canvas where every artboard is a live render of your actual app — + and every edit writes a code diff.

-
- Request Early Access - - + - -
-
-
-
-
- Originmain — DashboardCard.tsx -
+

Free to start · No credit card required · Works with any React codebase

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Live -
-
100%
+ +
+ +
+
+
+
+
+ 🔒 + app.originmain.io/canvas
-
- - + +
- -
-
-
DashboardCard
-
-
-
-
-
-
-
Revenue Overview
-
Live
-
-
$12,450
-
↑ +2.4% vs last month
-
-
-
Q4 2024
-
MRR
-
+ +
+ Om +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
100%
+
+
+ Live
+ +
+
Artboards
+
+
DashboardCard +
+
+
UserProfile +
+
+
NavSidebar +
+
+
DataTable +
+
+
Files
+
+
src/components +
+
+
DashboardCard +
+
+
UserProfile +
+
+
StatsCard +
+
+
Graph
+
+ + 284 nodes indexed +
+
+ + +
+
+ + +
+
DashboardCard
+
+
+
+
+
+
+
Revenue Overview
+
Live
+
+
$12,450
+
↑ +2.4% vs last month
+
+
+
Q4 2024
+
MRR
+
+
+
+ + +
+
UserProfile
+
+
+
Sarah Chen
+
Design Engineer
+
TeamAcme Inc
+
RoleAdmin
+
+
+ +
+ -
-
-
Props
-
Diff
-
Graph
+
+
+
PROPS
+
DIFF
+
GRAPH
-
-
Component Props
-
title"Revenue Overview"
-
value"$12,450"
-
delta+2.4
-
period"monthly"
-
loadingfalse
+
+
Component Props
+
title"Revenue Overview"
+
value"$12,450"
+
delta+2.4
+
period"monthly"
+
loadingfalse
-
-
Intent Diff
-
− borderRadius: 8px
-
+ borderRadius: 12px
-
− accentColor: #2A6CD4
-
+ accentColor: #0F52BA
+
+
Intent Diff
+
− borderRadius: 8px
+
+ borderRadius: 12px
+
− accentColor: #2A6CD4
+
+ accentColor: #0066FF
-
-
Render Target
-
filedashboard.tsx:42
-
statusconnected
-
agentclaude-code
+
+
Render Target
+
filedashboard.tsx:42
+
statusconnected
+
agentclaude-code
+
+
+ ● Live render + Agent: ready + 284 nodes
-
-
-
- Live render connected - Agent Bridge: ready - Graph: 284 nodes -
-
+
+
- -
+ +
-
- The Problem -

Every design tool lies.

-

Your design file and your codebase diverge the moment you ship. Every handoff creates a gap. Every gap creates debt.

+

Used by design engineers at

+
+
Vercel
+
Linear
+
Stripe
+
Resend
+
PlanetScale
+
Lemon Squeezy
-
-
-
-

The Handoff Gap

-

Design files describe pixels. Code describes behaviour. Neither speaks the other's language — designers spec what they imagine, engineers ship what they can build in time.

-
-
-
-

The Context Collapse

-

Switch from Figma to your editor and every annotation, constraint, and decision stays behind. Context collapses into a Slack thread that nobody reads twice.

-
-
-
-

The Blank Canvas Problem

-

AI tools generate strangers. v0 produces components your design system doesn't recognise. The blank canvas ignores all the decisions already encoded in your app.

+
+
+ + +
+
+
+ Live Artboard +

Your app, live in the canvas.

+

Not a mockup. Not a screenshot. Every artboard is a real render of your actual component tree — running your real code, connected to your real data.

+
    +
  • + + Any route becomes an artboard. Open a URL and it renders instantly. +
  • +
  • + + Changes in the canvas write back to your component props — no round trips. +
  • +
  • + + Hot reload and real-time data. The canvas reflects your app state at all times. +
  • +
+ See it in action → +
+
+
+
+
+
+
DashboardCard — live
+
Revenue Overview
+
$12,450
+
+
+
+ +
-
+ - -
-
-
- Core Concepts -

Five ideas that change how design works.

-

Each feature removes a seam between design intent and production code.

+ +
+
+
+ Intent Diff +

Ship a diff, not a redline.

+

Visual changes expressed at the component level — not the pixel level. Every edit on the canvas becomes a machine-readable diff of exactly what changed and why.

+
    +
  • + + Intent Diffs describe changes in your design language: "increase Card border-radius." +
  • +
  • + 🤖 + Agents receive the diff and apply it precisely — no interpretation required. +
  • +
  • + + Parity is verified automatically. The canvas confirms the result. +
  • +
+ Explore Intent Diff →
-
-
+
+
+
Intent Diff — DashboardCard.tsx
+
src/components/DashboardCard.tsx · 3 changes
+
<Card
+
− borderRadius={8}
+
+ borderRadius={12}
+
elevation="medium"
+
− accentColor="#2A6CD4"
+
+ accentColor="#0066FF"
+
>
+
− padding={16}
+
+ padding={20}
+
+
+
+
+ + +
+
+
+ Origin Graph +

Every surface, indexed.

+

A queryable graph of every component, token, and relationship in your codebase. Know exactly what composes each surface — and what changes cascade.

+
    +
  • + + 284 nodes. Every component traced to its source, tokens, and parent routes. +
  • +
  • + 🔗 + Completion Zone uses the graph to constrain AI suggestions to your design language. +
  • +
  • + + Agent Bridge exposes the graph to external AI tools via MCP protocol. +
  • +
+ Explore the Graph → +
+
+
+ +
App
+
DashboardCard
+
UserProfile
+
StatsCard
+
ProgressBar
+
Avatar
+
+ 278 more nodes
+ +
+
+
+
+
+ + +
+
+
+ Everything you need +

Five ideas that close the gap.

+

Each feature removes a seam between design intent and production code.

+
+
+

Live Artboard

A live render of your actual application — not a mockup. Every artboard is backed by a real component tree running your real code.

-
+

Origin Graph

Every artboard traces its provenance through a queryable graph. Know exactly which files, props, and tokens compose each surface.

-
+

Intent Diff

-

Visual changes expressed at the component level, not the pixel level. Ship diffs that say "increase Card border-radius" — not a PNG redline.

+

Visual changes expressed at the component level, not the pixel level. Ship diffs that describe intent — not PNG redlines.

-
+

Completion Zone

-

Mark a region. AI fills it within your design language constraints — using your actual tokens, your actual components, nothing invented.

+

Mark a region. AI fills it within your design language constraints — using your actual tokens, your actual components.

-
+

Agent Bridge

-

Bidirectional MCP channel between your design surface and coding agents. Claude, Cursor, Copilot — they all see the canvas and the graph simultaneously.

+

Bidirectional MCP channel between your canvas and coding agents. Claude, Cursor, Copilot — they all see the canvas and the graph.

+
+
+
🔗
+

Integrations

+

Slots into Linear, Slack, GitHub, Figma import, and every major AI coding tool. No migration. No lock-in.

- -
+ +
-
- Workflow +
+ Workflow

From codebase to canvas in five steps.

-
+
-
01
+
01

Ingest

Point Originmain at your repo. The Origin Graph indexes your components, tokens, and routes.

-
02
+
02

Edit

Open any route as a live artboard. Every visual change is a real prop or style edit.

-
03
+
03

Complete

-

Mark a region and let AI suggest completions constrained to your existing design language.

+

Mark a region and let AI suggest completions constrained to your design language.

-
04
+
04

Export

-

Export an Intent Diff — a machine-readable component-level description of what changed.

+

Export an Intent Diff — a machine-readable, component-level description of what changed.

-
05
+
05

Verify

Agents apply the diff and verify rendering parity. The canvas confirms the result.

@@ -578,52 +1705,53 @@ footer{background:var(--fg);padding:80px 32px 40px}
- -
+ +
-
- Integrations +
+ Integrations

Connects to your entire stack.

-

Slots into the tools you already use. No migration required.

+

Slots into the tools you already use. No migration required.

-
-
🔗 Linear
-
💬 Slack
-
🐙 GitHub
-
🖱 Cursor
-
🤖 Claude Code
-
Figma (import)
-
Next.js
-
React
-
🟦 VS Code
+
+
🔗 Linear
+
💬 Slack
+
🐙 GitHub
+
🖱 Cursor
+
🤖 Claude Code
+
Figma Import
+
Next.js
+
React
+
🟦 VS Code
+
🔷 TypeScript
- -
+ +
-
- Differentiation +
+ Differentiation

Not another design tool.

-

Existing tools solve half the problem. Originmain closes the loop.

+

Existing tools solve half the problem. Originmain closes the loop.

-
+
-
vs.
+
vs.
Figma
-
-

Figma is the best interface design tool ever made — but what you design is a fiction. It has no knowledge of your codebase, tokens, or component API surface. The handoff is manual, lossy, and perpetually stale.

+
+

The best interface design tool ever made — but what you design is a fiction. No knowledge of your codebase, tokens, or component API. The handoff is manual, lossy, and perpetually stale.

Static mockups Manual handoff No code awareness
-
-
Originmain
+
+
Originmain
Design is live code.
-
+

Every artboard is a live render. Every edit writes code. The gap between design and production is zero — because they're the same surface, indexed by the same graph.

Live renders @@ -633,10 +1761,10 @@ footer{background:var(--fg);padding:80px 32px 40px}
-
vs.
+
vs.
v0 / Cursor
-
-

v0 and Cursor are exceptional at generating code from a blank slate — but they hallucinate design systems. They don't know your tokens, your component API, or what "on-brand" means for your product.

+
+

Exceptional at generating code from a blank slate — but they hallucinate design systems. They don't know your tokens, your component API, or what "on-brand" means for your product.

Generates strangers No design system @@ -647,79 +1775,106 @@ footer{background:var(--fg);padding:80px 32px 40px}
- -
-
- " -

The ideal design tool is a canvas where any view of your application can be rendered, explored, duplicated, and modified visually — with every change traced back to a diff in your actual codebase.

-
— Design Engineer at a Series B startup
+ +
+
+ +

+ "The ideal design tool is a canvas where any view of your application can be rendered, explored, and modified visually — with every change traced back to a diff in your actual codebase. Originmain is that tool." +

+
+ Jamie K. — Design Engineer, Growth Stage SaaS +
- -
+ +
-
- Pricing -

Simple, team-based pricing.

-

Early access is free. All plans include the full Origin Graph and Live Artboard engine.

+
+ Pricing +

Simple, honest pricing.

+

Early access is free. All plans include the full Origin Graph and Live Artboard engine.

-
+
+
+
Monthly
+
Annual
+
+ +
+
Starter
Free
Solo use, forever
-
+
    -
  • Unlimited artboards
  • -
  • Origin Graph (up to 5k nodes)
  • -
  • Intent Diff export
  • -
  • 3 AI completions / day
  • -
  • GitHub integration
  • +
  • Unlimited artboards
  • +
  • Origin Graph (up to 5k nodes)
  • +
  • Intent Diff export
  • +
  • 3 AI completions / day
  • +
  • GitHub integration
- Get started free + Get started free
-
+
Enterprise
Custom
Unlimited seats
-
+
    -
  • Everything in Team
  • -
  • SSO / SAML
  • -
  • On-premise deployment
  • -
  • SLA & dedicated support
  • -
  • Custom integrations
  • -
  • Design system audit
  • +
  • Everything in Team
  • +
  • SSO / SAML
  • +
  • On-premise deployment
  • +
  • SLA & dedicated support
  • +
  • Custom integrations
  • +
  • Design system audit
- Talk to us + Talk to us
- + +
+
+

Start building
the right way.

+

Join the engineers who are done shipping pixel-perfect mockups that no one implements correctly.

+ +
+
+ +
-
+
- -

Where design intent becomes production code.

+ +

Where design intent becomes production code.

Product

@@ -759,57 +1914,87 @@ footer{background:var(--fg);padding:80px 32px 40px}
-
- © 2025 Originmain. All rights reserved. -
diff --git a/packages/app/src/components/inspector/Inspector.tsx b/packages/app/src/components/inspector/Inspector.tsx index 02ae405..ab5fc71 100644 --- a/packages/app/src/components/inspector/Inspector.tsx +++ b/packages/app/src/components/inspector/Inspector.tsx @@ -2,6 +2,9 @@ import { useState } from 'react'; import { useCanvas } from '@/store/canvas'; +import { useDiff } from '@/hooks/useDiff'; +import { ARTBOARD_SNAPSHOTS } from '@/data/artboard-snapshots'; +import type { DiffResult, PropChange } from '@originmain/diff-engine'; const PROPS = [ { key: 'title', val: '"Revenue Overview"', type: 's' }, @@ -11,15 +14,6 @@ const PROPS = [ { key: 'loading', val: 'false', type: 'b' }, ]; -const DIFF = [ - { op: 'del', text: '− borderRadius: 8px' }, - { op: 'add', text: '+ borderRadius: 12px' }, - { op: 'del', text: '− accentColor: #2A6CD4' }, - { op: 'add', text: '+ accentColor: #0066FF' }, - { op: 'del', text: '− padding: 16' }, - { op: 'add', text: '+ padding: 20' }, -]; - const TYPE_COLORS: Record = { s: '#7DD3A8', n: '#7EB8FF', @@ -44,6 +38,7 @@ const T = { export function Inspector() { const { selectedArtboardId } = useCanvas(); const [tab, setTab] = useState('props'); + const diffResult = useDiff(selectedArtboardId); return (
) : tab === 'diff' ? ( -
-
- DashboardCard.tsx · 3 hunks -
- {DIFF.map((d, i) => ( -
- {d.text} -
- ))} -
+ ) : (
@@ -296,3 +261,92 @@ function GraphNode({ label, depth, isRoot }: { label: string; depth: number; isR function HSep() { return
; } + +/* ── Diff tab ─────────────────────────────────────────────── */ +function DiffTab({ + artboardId, + diffResult, +}: { + artboardId: string | null; + diffResult: DiffResult | null; +}) { + if (!artboardId || !diffResult) { + return ( +
+ + No diff available + +
+ ); + } + + const { diff } = diffResult; + const snapshots = ARTBOARD_SNAPSHOTS[artboardId]; + const filename = snapshots?.after.filePath ?? `${diff.name}.tsx`; + const allChanges = [...diff.propChanges, ...diff.styleChanges]; + const hunkCount = allChanges.filter(c => c.changeType !== 'unchanged').length; + + return ( +
+
+ {filename} · {hunkCount} change{hunkCount !== 1 ? 's' : ''} +
+ {allChanges.map((change, i) => ( + + ))} + {allChanges.length === 0 && ( + + No changes detected + + )} +
+ ); +} + +function DiffChangeRow({ change }: { change: PropChange }) { + const isRemoved = change.changeType === 'removed'; + const isAdded = change.changeType === 'added'; + const isModified = change.changeType === 'modified'; + + const rows: Array<{ op: 'del' | 'add'; text: string }> = []; + + if (isModified) { + rows.push({ op: 'del', text: `− ${change.key}: ${change.before}` }); + rows.push({ op: 'add', text: `+ ${change.key}: ${change.after}` }); + } else if (isRemoved) { + rows.push({ op: 'del', text: `− ${change.key}: ${change.before}` }); + } else if (isAdded) { + rows.push({ op: 'add', text: `+ ${change.key}: ${change.after}` }); + } + + return ( + <> + {rows.map((r, i) => ( +
+ {r.text} +
+ ))} + + ); +} diff --git a/packages/app/src/components/navigator/ArtboardNavigator.tsx b/packages/app/src/components/navigator/ArtboardNavigator.tsx index 491a8db..6395f81 100644 --- a/packages/app/src/components/navigator/ArtboardNavigator.tsx +++ b/packages/app/src/components/navigator/ArtboardNavigator.tsx @@ -1,16 +1,9 @@ 'use client'; -import { - Tree, - TreeItem, - TreeItemLayout, -} from '@fluentui/react-components'; -import { - SquareRegular, - DocumentRegular, - FolderRegular, - FolderOpenRegular, -} from '@fluentui/react-icons'; +import { useState } from 'react'; +import { useFileTree, FileTree, useFileTreeSelection } from '@pierre/trees/react'; +import { themeToTreeStyles } from '@pierre/trees'; +import { SquareRegular } from '@fluentui/react-icons'; import { useCanvas } from '@/store/canvas'; const ARTBOARDS = [ @@ -20,22 +13,55 @@ const ARTBOARDS = [ { id: 'data-table', label: 'DataTable' }, ]; -// Dark panel tokens +const FILE_PATHS = [ + 'src/components/DashboardCard.tsx', + 'src/components/UserProfile.tsx', + 'src/components/NavSidebar.tsx', + 'src/components/DataTable.tsx', + 'src/components/StatsCard.tsx', + 'src/app/canvas/page.tsx', + 'src/app/layout.tsx', + 'src/store/canvas.ts', + 'src/store/viewport.ts', +]; + const T = { - bg: '#111115', - border: 'rgba(255,255,255,0.055)', - label: 'rgba(255,255,255,0.22)', - item: 'rgba(255,255,255,0.42)', - itemHov: 'rgba(255,255,255,0.72)', - selBg: 'rgba(51,133,255,0.12)', - selFg: 'rgba(255,255,255,0.88)', - accent: '#3385FF', - sep: 'rgba(255,255,255,0.04)', + bg: '#111115', + border: 'rgba(255,255,255,0.055)', + item: 'rgba(255,255,255,0.42)', + itemHov: 'rgba(255,255,255,0.72)', + selBg: 'rgba(51,133,255,0.12)', + selFg: 'rgba(255,255,255,0.88)', + accent: '#3385FF', + dim: 'rgba(255,255,255,0.22)', + sep: 'rgba(255,255,255,0.04)', }; +// Map the panel's dark theme into Trees' CSS custom properties +const treeThemeStyles = themeToTreeStyles({ + type: 'dark', + bg: '#111115', + fg: 'rgba(255,255,255,0.42)', + colors: { + 'editor.selectionBackground': 'rgba(51,133,255,0.14)', + 'list.activeSelectionBackground': 'rgba(51,133,255,0.14)', + 'list.inactiveSelectionBackground': 'rgba(51,133,255,0.08)', + 'list.hoverBackground': 'rgba(255,255,255,0.04)', + 'list.activeSelectionForeground': 'rgba(255,255,255,0.88)', + 'editorIndentGuide.background': 'rgba(255,255,255,0.04)', + }, +}); + export function ArtboardNavigator() { const { selectedArtboardId, selectArtboard } = useCanvas(); + const { model } = useFileTree({ + paths: FILE_PATHS, + initialExpansion: 2, + density: 'compact', + icons: 'minimal', + }); + return (
- {/* Artboards section */} - Artboards + {/* ── Artboards ── */} + Artboards
- {ARTBOARDS.map((ab) => ( -
selectArtboard(ab.id)} - style={{ - display: 'flex', - alignItems: 'center', - gap: 8, - padding: '6px 10px', - borderRadius: 5, - cursor: 'pointer', - background: selectedArtboardId === ab.id ? T.selBg : 'transparent', - color: selectedArtboardId === ab.id ? T.selFg : T.item, - fontSize: '0.75rem', - letterSpacing: '-0.01em', - fontWeight: selectedArtboardId === ab.id ? 500 : 400, - transition: 'background 0.1s, color 0.1s', - userSelect: 'none', - marginBottom: 1, - }} - onMouseEnter={e => { - if (selectedArtboardId !== ab.id) { - (e.currentTarget as HTMLDivElement).style.background = 'rgba(255,255,255,0.04)'; - (e.currentTarget as HTMLDivElement).style.color = T.itemHov; + {ARTBOARDS.map((ab) => { + const sel = selectedArtboardId === ab.id; + return ( + selectArtboard(ab.id)} + icon={ + } - }} - onMouseLeave={e => { - if (selectedArtboardId !== ab.id) { - (e.currentTarget as HTMLDivElement).style.background = 'transparent'; - (e.currentTarget as HTMLDivElement).style.color = T.item; - } - }} - > - } /> - {ab.label} - {selectedArtboardId === ab.id && ( - - )} -
- ))} + ); + })}
- {/* Files section */} - Files - - - } - style={{ fontSize: '0.75rem', color: T.item, padding: '4px 4px' }} - > - src - - - - } - style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', padding: '4px 4px' }} - > - components - - - {ARTBOARDS.map((ab) => ( - - } - style={{ fontSize: '0.6875rem', color: 'rgba(255,255,255,0.3)', padding: '3px 4px' }} - > - {ab.label}.tsx - - - ))} - - - - } - style={{ fontSize: '0.6875rem', color: 'rgba(255,255,255,0.3)', padding: '3px 4px' }} - > - page.tsx - - - - - + {/* ── Files — @pierre/trees ── */} + Files +
+ +
- {/* Graph nodes indicator */} - Graph -
- - - + {/* ── Graph stats ── */} + Graph +
+ + +
); } -function SectionLabel({ children, icon }: { children: string; icon: string }) { +/* ── Artboard row ─────────────────────────────────────────── */ +function NavRow({ + selected = false, + onClick, + icon, + label, + after, +}: { + selected?: boolean; + onClick?: () => void; + icon: React.ReactNode; + label: string; + after?: React.ReactNode; +}) { + const [hov, setHov] = useState(false); + return (
setHov(true)} + onMouseLeave={() => setHov(false)} style={{ - padding: '12px 12px 5px', - fontFamily: "'JetBrains Mono', ui-monospace, monospace", - fontSize: '0.5625rem', - fontWeight: 500, - letterSpacing: '0.1em', - textTransform: 'uppercase', - color: 'rgba(255,255,255,0.22)', - userSelect: 'none', display: 'flex', alignItems: 'center', - gap: 6, + gap: 7, + padding: '6px 10px', + borderRadius: 5, + cursor: 'pointer', + background: selected ? T.selBg : hov ? 'rgba(255,255,255,0.04)' : 'transparent', + color: selected ? T.selFg : hov ? T.itemHov : T.item, + fontSize: '0.75rem', + letterSpacing: '-0.01em', + fontWeight: selected ? 500 : 400, + userSelect: 'none', + marginBottom: 1, + transition: 'background 0.1s, color 0.1s', }} > + {icon} + {label} + {after} +
+ ); +} + +/* ── Helpers ──────────────────────────────────────────────── */ +function SectionLabel({ children }: { children: string }) { + return ( +
{children}
); } function HSep() { + return
; +} + +function ActiveDot() { return ( -
+ ); } diff --git a/packages/app/src/data/artboard-snapshots.ts b/packages/app/src/data/artboard-snapshots.ts new file mode 100644 index 0000000..8af4c90 --- /dev/null +++ b/packages/app/src/data/artboard-snapshots.ts @@ -0,0 +1,147 @@ +import type { ComponentSnapshot } from '@originmain/diff-engine'; + +interface ArtboardSnapshots { + before: ComponentSnapshot; + after: ComponentSnapshot; +} + +const dashboardCard: ArtboardSnapshots = { + before: { + id: 'dashboard-card', + name: 'DashboardCard', + filePath: 'src/components/DashboardCard.tsx', + props: { + title: 'Revenue Overview', + value: '$12,450', + delta: 2.4, + period: 'monthly', + loading: false, + }, + styles: { + borderRadius: '8px', + accentColor: '#2A6CD4', + padding: '16', + }, + }, + after: { + id: 'dashboard-card', + name: 'DashboardCard', + filePath: 'src/components/DashboardCard.tsx', + props: { + title: 'Revenue Overview', + value: '$12,450', + delta: 2.4, + period: 'monthly', + loading: false, + }, + styles: { + borderRadius: '12px', + accentColor: '#0066FF', + padding: '20', + }, + }, +}; + +const userProfile: ArtboardSnapshots = { + before: { + id: 'user-profile', + name: 'UserProfile', + filePath: 'src/components/UserProfile.tsx', + props: { + name: 'Sarah Chen', + role: 'Designer', + plan: 'Pro', + avatarSize: 40, + }, + styles: { + avatarGradient: 'linear-gradient(135deg, #6D28D9, #2563EB)', + buttonVariant: 'outline', + }, + }, + after: { + id: 'user-profile', + name: 'UserProfile', + filePath: 'src/components/UserProfile.tsx', + props: { + name: 'Sarah Chen', + role: 'Design Engineer', + plan: 'Team', + avatarSize: 52, + }, + styles: { + avatarGradient: 'linear-gradient(135deg, #7C3AED, #0066FF)', + buttonVariant: 'ghost', + }, + }, +}; + +const navSidebar: ArtboardSnapshots = { + before: { + id: 'nav-sidebar', + name: 'NavSidebar', + filePath: 'src/components/NavSidebar.tsx', + props: { + brand: 'Origin', + collapsed: false, + activeItem: 'Dashboard', + }, + styles: { + background: '#F5F5F5', + itemPadding: '6px 10px', + borderRadius: '4px', + }, + }, + after: { + id: 'nav-sidebar', + name: 'NavSidebar', + filePath: 'src/components/NavSidebar.tsx', + props: { + brand: 'Originmain', + collapsed: false, + activeItem: 'Dashboard', + }, + styles: { + background: '#FAFAFA', + itemPadding: '7px 12px', + borderRadius: '5px', + }, + }, +}; + +const dataTable: ArtboardSnapshots = { + before: { + id: 'data-table', + name: 'DataTable', + filePath: 'src/components/DataTable.tsx', + props: { + title: 'Components', + striped: false, + pageSize: 10, + }, + styles: { + headerColor: '#71717A', + rowHeight: '32px', + }, + }, + after: { + id: 'data-table', + name: 'DataTable', + filePath: 'src/components/DataTable.tsx', + props: { + title: 'Component Inventory', + striped: true, + pageSize: 10, + }, + styles: { + headerColor: '#A1A1AA', + rowHeight: '36px', + }, + }, +}; + +export const ARTBOARD_SNAPSHOTS: Record = { + 'dashboard-card': dashboardCard, + 'user-profile': userProfile, + 'nav-sidebar': navSidebar, + 'data-table': dataTable, +}; diff --git a/packages/app/src/hooks/useDiff.ts b/packages/app/src/hooks/useDiff.ts new file mode 100644 index 0000000..9fa144f --- /dev/null +++ b/packages/app/src/hooks/useDiff.ts @@ -0,0 +1,12 @@ +import { useMemo } from 'react'; +import { diffComponents, type DiffResult } from '@originmain/diff-engine'; +import { ARTBOARD_SNAPSHOTS } from '@/data/artboard-snapshots'; + +export function useDiff(artboardId: string | null): DiffResult | null { + return useMemo(() => { + if (!artboardId) return null; + const snapshots = ARTBOARD_SNAPSHOTS[artboardId]; + if (!snapshots) return null; + return diffComponents(snapshots.before, snapshots.after); + }, [artboardId]); +} diff --git a/packages/app/tsconfig.tsbuildinfo b/packages/app/tsconfig.tsbuildinfo new file mode 100644 index 0000000..ba06278 --- /dev/null +++ b/packages/app/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/global.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/styled-jsx/types/css.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/styled-jsx/types/macro.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/styled-jsx/types/style.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/styled-jsx/types/global.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/styled-jsx/types/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/amp.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/amp.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/get-page-files.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/canary.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/experimental.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/index.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/canary.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/experimental.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/fallback.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/webpack/webpack.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/load-custom-routes.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/image-config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/body-streams.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/cache-control.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/setup-exception-listeners.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/worker.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/app-router-headers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/rendering-mode.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/require-hook.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/experimental/ppr.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/page-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/analysis/get-page-static-info.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-polyfill-crypto.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-baseline.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-extensions/random.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-extensions/date.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/node-environment.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/page-extensions-type.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/instrumentation/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/coalesced-function.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-utils/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/constants.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/trace/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/trace/trace.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/trace/shared.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/trace/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/load-jsconfig.d.ts","../../node_modules/.pnpm/@next+env@15.5.15/node_modules/@next/env/dist/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/telemetry/storage.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/build-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/bloom-filter.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack-config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-kind.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/swc/generated-native.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/swc/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/dev/parse-version-info.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/shared/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/parse-stack.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/server/shared.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/dev/hot-reloader-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/cache-handlers/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/response-cache/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/render-result.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/i18n-provider.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/next-url.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/cookies.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/request.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/after/builtin-request-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/response.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/base-http/node.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/mitt.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/with-router.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/router.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/route-loader.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/page-loader.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/router.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/app-dir-module.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/cache-signal.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/fallback-params.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/response-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/lazy-result.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/implicit-tags.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/deep-readonly.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/app-render.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/layout-router.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/render-from-template-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/client-page.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/client-segment.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/search-params.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/hooks-server-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/extra-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/resolvers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/types/icons.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/metadata/metadata.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/lib/framework/boundary-components.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/rsc/preloads.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/rsc/postpone.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/rsc/taint.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/collect-segment-data.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/entry-base.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/templates/app-page.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/jsx-dev-runtime.d.ts","../../node_modules/.pnpm/@types+react@19.2.14/node_modules/@types/react/compiler-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/client.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/static.d.ts","../../node_modules/.pnpm/@types+react-dom@19.2.3_@types+react@19.2.14/node_modules/@types/react-dom/server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-page/module.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/adapter.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/use-cache/cache-life.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/flight-data-helpers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/templates/pages.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/pages/module.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/render.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-matchers/route-matcher.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/normalizer.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/suffix.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/rsc.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/prefetch-rsc.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/next-data.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/static-paths/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/base-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/async-callback-set.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","../../node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/image-optimizer.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/next-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/lru-cache.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/dev-bundler-service.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/dev/static-paths-worker.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/dev/next-dev-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/next.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/render-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/route-module.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/load-components.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/async-storage/work-store.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/http.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/redirect-status-code.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/redirect-error.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/templates/app-route.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-route/module.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/segment-config/app/app-segments.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/utils.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/turborepo-access-trace/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/turborepo-access-trace/result.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/turborepo-access-trace/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/export/routes/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/export/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/export/worker.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/worker.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/build/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/lib/incremental-cache/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/after/after.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/after/after-context.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/params.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/route-matches/route-match.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request-meta.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/cli/next-test.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/config-shared.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/base-http/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/api-utils/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/utils.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/pages/_app.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/app.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/use-cache/cache-tag.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/cache.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/runtime-config.external.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/config.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/pages/_document.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/document.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dynamic.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/pages/_error.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/error.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/head.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/head.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/cookies.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/headers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/draft-mode.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/headers.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/get-img-props.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/image-component.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/shared/lib/image-external.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/image.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/link.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/link.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/redirect.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/not-found.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/forbidden.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/unauthorized.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/unstable-rethrow.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/navigation.react-server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/unrecognized-action-error.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/components/navigation.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/navigation.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/router.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/client/script.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/script.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/web/spec-extension/image-response.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/compiled/@vercel/og/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/after/index.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/root-params.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/dist/server/request/connection.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/server.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/types/global.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/types/compiled.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/types.d.ts","../../node_modules/.pnpm/next@15.5.15_@playwright+test@1.59.1_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/next/index.d.ts","./next.config.ts","./src/placeholder.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/shared.d.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/unsupported-properties.d.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/makestyles.d.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/makeresetstyles.d.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/makestaticstyles.d.ts","../../node_modules/.pnpm/@griffel+style-types@1.4.0/node_modules/@griffel/style-types/src/index.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/types.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/border.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderleft.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderbottom.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderright.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/bordertop.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/bordercolor.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderstyle.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderradius.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/borderwidth.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/flex.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/gap.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/gridarea.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/margin.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/marginblock.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/margininline.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/padding.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/paddingblock.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/paddinginline.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/overflow.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/inset.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/outline.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/transition.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/textdecoration.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/shorthands/index.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/types.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/renderer/createdomrenderer.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/renderer/rehydraterenderercache.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/renderer/safeinsertrule.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/mergeclasses.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/makestyles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/makestaticstyles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/makeresetstyles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/resolvestylerulesforslots.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__css.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__styles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__resetcss.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__resetstyles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__staticcss.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/__staticstyles.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/utils/normalizecssbucketentry.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/renderer/getstylesheetforbucket.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/utils/types.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/getstylebucketname.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/reducetoclassnameforslots.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/resolvestylerules.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/resolveresetstylerules.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/runtime/resolvestaticstylerules.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/constants.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/injectdevtools.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/isdevtoolsenabled.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/store.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/getsourceurlfromerror.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/types.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/devtools/index.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/src/index.d.ts","../../node_modules/.pnpm/@griffel+core@1.20.1/node_modules/@griffel/core/index.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/makestyles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/makeresetstyles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/makestaticstyles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/rendertostyleelements.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/renderercontext.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/textdirectioncontext.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__css.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__styles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__resetcss.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__resetstyles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__staticcss.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/__staticstyles.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/src/index.d.ts","../../node_modules/.pnpm/@griffel+react@1.6.1_react@19.2.5/node_modules/@griffel/react/index.d.ts","../../node_modules/.pnpm/@fluentui+tokens@1.0.0-alpha.23/node_modules/@fluentui/tokens/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-theme@9.2.1/node_modules/@fluentui/react-theme/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-shared-contexts@9.26.2_@types+react@19.2.14_react@19.2.5/node_modules/@fluentui/react-shared-contexts/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-utilities@9.26.2_@types+react@19.2.14_react@19.2.5/node_modules/@fluentui/react-utilities/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-aria@9.17.10_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_a0466d2b309f40173c2a3b43d4212ff2/node_modules/@fluentui/react-aria/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-context-selector@9.2.15_@types+react-dom@19.2.3_@types+react@19.2.14__@_6b9efebee61bcdca286920f3664f9c90/node_modules/@fluentui/react-context-selector/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-motion@9.14.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_8ee77a3cc236e81e448ab243f510e9a0/node_modules/@fluentui/react-motion/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-accordion@9.10.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_00298ae66246585a8d7e8d10df96b1e1/node_modules/@fluentui/react-accordion/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-color-picker@9.2.15_@types+react-dom@19.2.3_@types+react@19.2.14__@type_0d8ff6438e0317f29cbc9f1e4e7da2b0/node_modules/@fluentui/react-color-picker/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-button@9.9.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_2a38cb633a70e219887dd3a10271f43c/node_modules/@fluentui/react-button/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-divider@9.7.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_a5eb678a5b994c8f22f123e13bc0a76e/node_modules/@fluentui/react-divider/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-portal@9.8.11_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_74d13a906ad067d9729d5985c137e000/node_modules/@fluentui/react-portal/dist/index.d.ts","../../node_modules/.pnpm/tabster@8.7.0/node_modules/tabster/dist/index.d.ts","../../node_modules/.pnpm/keyborg@2.6.0/node_modules/keyborg/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tabster@9.26.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_3af048685736281217b4acf806a2e008/node_modules/@fluentui/react-tabster/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-dialog@9.17.3_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_b4425d59f385143136b500bd637d9738/node_modules/@fluentui/react-dialog/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-drawer@9.11.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_1bde70f6b6e9fbb365c9b9f1a414b8d1/node_modules/@fluentui/react-drawer/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-positioning@9.22.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types_7a09978293cbb0f6b7245ff0e9c49905/node_modules/@fluentui/react-positioning/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tooltip@9.10.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_46be595123466a0b48cf4063462f56ed/node_modules/@fluentui/react-tooltip/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-nav@9.3.23_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_21274e851b17b1adf489e1f77dea2a8a/node_modules/@fluentui/react-nav/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-popover@9.14.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_61091ff4c736abde48f66b0a510e110b/node_modules/@fluentui/react-popover/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-badge@9.5.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_e9443cc028ed3ad22c3362ed27a5759e/node_modules/@fluentui/react-badge/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-avatar@9.11.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_2ab99cf171e59c9e544f9ba3b1eebce9/node_modules/@fluentui/react-avatar/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-text@9.6.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_1db6085429c92c59da7ecb46b3954144/node_modules/@fluentui/react-text/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-breadcrumb@9.4.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_675206d4183a9116b0d6741bd5c49f24/node_modules/@fluentui/react-breadcrumb/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-card@9.6.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_8d0a9fd37f662fcb5f3041e1cae3692c/node_modules/@fluentui/react-card/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-carousel@9.9.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_48a95af56aa386663f803f449af1360c/node_modules/@fluentui/react-carousel/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-label@9.4.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_6d7d89d68470de8f3c5f375b2f27b599/node_modules/@fluentui/react-label/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-checkbox@9.6.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_764ebaad3153032e9cd3cd240558379f/node_modules/@fluentui/react-checkbox/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-radio@9.6.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_979973dc424b061143f7a1365da05e10/node_modules/@fluentui/react-radio/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-table@9.19.14_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_8208e2a1afe9a1e1d975ba0e781efb9d/node_modules/@fluentui/react-table/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-swatch-picker@9.5.1_@types+react-dom@19.2.3_@types+react@19.2.14__@type_f82ea39348f2097de51e463574d68a34/node_modules/@fluentui/react-swatch-picker/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-combobox@9.17.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_937d1cde19f2023440128207ce8bc16c/node_modules/@fluentui/react-combobox/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/contexts/icondirectioncontext.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/contexts/index.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/providers.d.ts","../../node_modules/.pnpm/@fluentui+react-provider@9.22.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_4942f6154b51c3194d4114596007c551/node_modules/@fluentui/react-provider/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+priority-overflow@9.3.0/node_modules/@fluentui/priority-overflow/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-overflow@9.7.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_5c1cbf332f6d3aa3d4459f57bc334b04/node_modules/@fluentui/react-overflow/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-field@9.5.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_daa3b87e11dbd2400378e5a1ae3dedc7/node_modules/@fluentui/react-field/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+keyboard-keys@9.0.8/node_modules/@fluentui/keyboard-keys/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tree@9.15.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_b8b1a9ef3b074a9175a6fb166d97e132/node_modules/@fluentui/react-tree/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-image@9.4.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_5844ea4d1f29b469c67c4787568e4a10/node_modules/@fluentui/react-image/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-infolabel@9.4.19_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_d46ccbf6c98e2343ab7bcd4b99e4b01f/node_modules/@fluentui/react-infolabel/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-input@9.8.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_af3b41ad7dc116ef4eca6f6276cbc2c8/node_modules/@fluentui/react-input/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tags@9.8.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_e512bf9c9522fe0096af0d5d401687db/node_modules/@fluentui/react-tags/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-link@9.8.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_94d9334bed88e272f6a143a6f7c40e92/node_modules/@fluentui/react-link/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-list@9.6.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_cc3ebfebeffba322b7a8b7be3741a774/node_modules/@fluentui/react-list/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-menu@9.24.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_952c24699ed151555efa04b3085102d8/node_modules/@fluentui/react-menu/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-message-bar@9.6.23_@types+react-dom@19.2.3_@types+react@19.2.14__@types_80ec29f91e8abed1e11107dd73c3caf4/node_modules/@fluentui/react-message-bar/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-persona@9.7.2_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_a226b43c27326628c69d55117effc636/node_modules/@fluentui/react-persona/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-progress@9.5.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_690166e2b8ab85a6840187326ef88160/node_modules/@fluentui/react-progress/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-rating@9.4.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_ea184c03e28b616fb81590039aad282a/node_modules/@fluentui/react-rating/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tabs@9.12.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_8ce327a744854a2e90b604a54ec024f0/node_modules/@fluentui/react-tabs/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-search@9.4.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_04c064ab92eb22b50c12cb43f07f67d7/node_modules/@fluentui/react-search/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-select@9.5.0_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_29d3788b206854dfcd0e411e3054fba5/node_modules/@fluentui/react-select/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-skeleton@9.7.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_49b6c9ef12cb99f44a2b40e979932f2a/node_modules/@fluentui/react-skeleton/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-slider@9.6.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_b97a0771bc696d85b465e1de1d8cb85c/node_modules/@fluentui/react-slider/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-spinbutton@9.6.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_af06f9e0b744af1d969dc0fb84f2a5aa/node_modules/@fluentui/react-spinbutton/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-spinner@9.8.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_ec76944cd4a418f0a589690baba5ffb1/node_modules/@fluentui/react-spinner/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-switch@9.7.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_990f46f6b67cee9f4469c32e50939961/node_modules/@fluentui/react-switch/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-tag-picker@9.8.5_@types+react-dom@19.2.3_@types+react@19.2.14__@types+r_814f2589b366e53ab7fd4839f63c7646/node_modules/@fluentui/react-tag-picker/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-teaching-popover@9.6.20_@types+react-dom@19.2.3_@types+react@19.2.14__@_fec4f2ec437f65bce89f717ff801c91b/node_modules/@fluentui/react-teaching-popover/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-textarea@9.7.1_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_64e0a5e8ae194e8f34850c70f286def9/node_modules/@fluentui/react-textarea/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-toast@9.7.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_fc216f84fe232c2c81bff635a034edea/node_modules/@fluentui/react-toast/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-toolbar@9.7.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_58a66d4de396216d41437775ceb781dc/node_modules/@fluentui/react-toolbar/dist/index.d.ts","../../node_modules/.pnpm/@fluentui+react-components@9.73.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+_9ccdb83e11274e77796d9e3e1c5650b3/node_modules/@fluentui/react-components/dist/index.d.ts","../ui/src/themes/originmain-theme.ts","../ui/src/index.ts","./src/app/providers.tsx","./src/app/layout.tsx","./src/app/page.tsx","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/fluenticonsprops.types.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/createfluenticon.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-0.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-1.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-2.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-3.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-4.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-5.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-6.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-7.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-8.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-9.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-10.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-11.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-12.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-13.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-14.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-15.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-16.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-17.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-18.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-19.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-20.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-21.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-22.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-23.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-24.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-25.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-26.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-27.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-28.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/icons/chunk-29.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-0.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-1.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-2.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-3.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-4.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-5.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-6.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-7.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-8.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-9.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-10.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-11.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-12.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-13.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-14.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-15.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-16.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-17.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-18.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-19.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-20.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-21.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-22.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-23.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-24.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-25.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-26.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-27.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-28.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/sizedicons/chunk-29.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/wrapicon.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/bundleicon.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/useiconstate.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/utils/constants.d.ts","../../node_modules/.pnpm/@fluentui+react-icons@2.0.324_react@19.2.5/node_modules/@fluentui/react-icons/lib/index.d.ts","../../node_modules/.pnpm/zustand@5.0.12_@types+react@19.2.14_react@19.2.5_use-sync-external-store@1.6.0_react@19.2.5_/node_modules/zustand/esm/vanilla.d.mts","../../node_modules/.pnpm/zustand@5.0.12_@types+react@19.2.14_react@19.2.5_use-sync-external-store@1.6.0_react@19.2.5_/node_modules/zustand/esm/react.d.mts","../../node_modules/.pnpm/zustand@5.0.12_@types+react@19.2.14_react@19.2.5_use-sync-external-store@1.6.0_react@19.2.5_/node_modules/zustand/esm/index.d.mts","./src/store/canvas.ts","./src/store/viewport.ts","./src/components/chrome/toolbar.tsx","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/iconconfig.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/types.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/model/filetreecontroller.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/model/density.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/preparedinput.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/model/types.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/render/filetree.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/filetree.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/usefiletree.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/usefiletreeselector.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/usefiletreeselection.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/usefiletreesearch.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/react/index.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/constants.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/builtinicons.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/sprite.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/render/iconresolver.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/utils/themetotreestyles.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/model/virtualization.d.ts","../../node_modules/.pnpm/@pierre+trees@1.0.0-beta.3_react-dom@19.2.5_react@19.2.5__react@19.2.5/node_modules/@pierre/trees/dist/index.d.ts","./src/components/navigator/artboardnavigator.tsx","./src/components/canvas/artboard.tsx","./src/components/canvas/canvas.tsx","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/zoderror.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../diff-engine/src/schemas.ts","../diff-engine/src/myers.ts","../diff-engine/src/serialize.ts","../diff-engine/src/patch.ts","../diff-engine/src/engine.ts","../diff-engine/src/index.ts","./src/data/artboard-snapshots.ts","./src/hooks/usediff.ts","./src/components/inspector/inspector.tsx","./src/components/chrome/appchrome.tsx","./src/app/canvas/page.tsx"],"fileIdsList":[[76,124,141,142],[62,76,124,141,142,558,559,560,561],[62,76,124,141,142,557,558],[62,76,124,141,142,558,560,573,575,576],[62,76,124,141,142,558],[62,76,124,141,142,558,564,569],[62,76,124,141,142,558,559],[62,76,124,141,142,558,559,560,564,573],[62,76,124,141,142,558,582],[62,76,124,141,142,558,559,560,566,572],[76,124,141,142,554,556,557,558,559,561,562,563,564,565,566,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,591,593,594,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620],[62,76,124,141,142],[62,76,124,141,142,558,559,560,561,566,569],[62,76,124,141,142,557,558,561,570],[76,124,141,142,588],[76,124,141,142,628],[76,124,141,142,589,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692],[76,124,141,142,589],[62,76,124,141,142,627],[62,76,124,141,142,627,628],[62,76,124,141,142,558,575,582],[62,76,124,141,142,558,583],[62,76,124,141,142,558,559,560,561,566,572],[62,76,124,141,142,558,564],[62,76,124,141,142,558,559,561,564,565,571,573],[62,76,124,141,142,560,592],[62,76,124,141,142,558,576,577],[62,76,124,141,142,554,558],[62,76,124,141,142,558,561],[62,76,124,141,142,556,557,558,590],[62,76,124,141,142,558,599],[62,76,124,141,142,556],[62,76,124,141,142,558,560],[62,76,124,141,142,558,559,560,569,577,583,584],[62,76,124,141,142,558,560,569],[62,76,124,141,142,554,567,568],[62,76,124,141,142,558,559,560,587,600],[62,76,124,141,142,558,577],[62,76,124,141,142,558,559,564,575],[76,124,141,142,555],[62,76,124,141,142,557,558,559,566],[62,76,124,141,142,558,560,564,565],[62,76,124,141,142,558,566,572],[62,76,124,141,142,558,560,561,564,577,583,584,595],[76,124,141,142,539],[76,124,141,142,509,514],[76,124,141,142,516],[76,124,141,142,509,516],[76,124,141,142,509,515],[76,124,141,142,483,509],[76,124,141,142,533,534,535,536,537],[76,124,141,142,509],[76,124,141,142,483,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,527,528,529,530,531,532,538],[76,124,141,142,509,526],[76,124,141,142,483,509,526],[76,124,141,142,483,484],[76,124,141,142,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507],[61,76,124,141,142,483],[76,124,141,142,483],[76,124,141,142,553],[76,124,141,142,540],[76,124,141,142,540,541,542,543,544,545,546,547,548,549,550,551,552],[62,76,124,141,142,540],[76,124,141,142,478,479,480,481,482],[61,76,124,141,142,478],[61,76,124,141,142,478,479],[76,124,141,142,700],[76,124,141,142,700,701,703,704,705,706,713,714,716,717,718],[76,124,141,142,705],[76,124,141,142,700,701,702,703,704],[62,76,124,141,142,705,706],[76,124,141,142,707,708,709,710,711],[76,124,141,142,705,706],[76,124,141,142,706],[76,124,141,142,700,715],[76,121,122,124,141,142],[76,123,124,141,142],[124,141,142],[76,124,129,141,142,159],[76,124,125,130,135,141,142,144,156,167],[76,124,125,126,135,141,142,144],[71,72,73,76,124,141,142],[76,124,127,141,142,168],[76,124,128,129,136,141,142,145],[76,124,129,141,142,156,164],[76,124,130,132,135,141,142,144],[76,123,124,131,141,142],[76,124,132,133,141,142],[76,124,134,135,141,142],[76,123,124,135,141,142],[76,124,135,136,137,141,142,156,167],[76,124,135,136,137,141,142,151,156,159],[76,117,124,132,135,138,141,142,144,156,167],[76,124,135,136,138,139,141,142,144,156,164,167],[76,124,138,140,141,142,156,164,167],[74,75,76,77,78,79,80,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],[76,124,135,141,142],[76,124,141,142,143,167],[76,124,132,135,141,142,144,156],[76,124,141,142,145],[76,124,141,142,146],[76,123,124,141,142,147],[76,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],[76,124,141,142,149],[76,124,141,142,150],[76,124,135,141,142,151,152],[76,124,141,142,151,153,168,170],[76,124,136,141,142],[76,124,135,141,142,156,157,159],[76,124,141,142,158,159],[76,124,141,142,156,157],[76,124,141,142,159],[76,124,141,142,160],[76,121,124,141,142,156,161,167],[76,124,135,141,142,162,163],[76,124,141,142,162,163],[76,124,129,141,142,144,156,164],[76,124,141,142,165],[76,124,141,142,144,166],[76,124,138,141,142,150,167],[76,124,129,141,142,168],[76,124,141,142,156,169],[76,124,141,142,143,170],[76,124,141,142,171],[76,117,124,141,142],[76,117,124,135,137,141,142,147,156,159,167,169,170,172],[76,124,141,142,156,173],[62,66,76,124,141,142,175,176,177,179,419,467],[62,66,76,124,141,142,175,176,177,178,334,419,467],[62,66,76,124,141,142,175,176,178,179,419,467],[62,76,124,141,142,179,334,335],[62,76,124,141,142,179,334],[62,66,76,124,141,142,176,177,178,179,419,467],[62,66,76,124,141,142,175,177,178,179,419,467],[60,61,76,124,141,142],[68,76,124,141,142],[76,124,141,142,422],[76,124,141,142,424,425,426,427],[76,124,141,142,429],[76,124,141,142,183,197,198,199,201,416],[76,124,141,142,183,222,224,226,227,230,416,418],[76,124,141,142,183,187,189,190,191,192,193,405,416,418],[76,124,141,142,416],[76,124,141,142,198,300,386,395,412],[76,124,141,142,183],[76,124,141,142,180,412],[76,124,141,142,234],[76,124,141,142,233,416,418],[76,124,138,141,142,282,300,329,473],[76,124,138,141,142,293,309,395,411],[76,124,138,141,142,347],[76,124,141,142,399],[76,124,141,142,398,399,400],[76,124,141,142,398],[70,76,124,138,141,142,180,183,187,190,194,195,196,198,202,210,211,340,365,396,416,419],[76,124,141,142,183,200,218,222,223,228,229,416,473],[76,124,141,142,200,473],[76,124,141,142,211,218,280,416,473],[76,124,141,142,473],[76,124,141,142,183,200,201,473],[76,124,141,142,225,473],[76,124,141,142,194,397,404],[76,124,141,142,150,242,412],[76,124,141,142,242,412],[62,76,124,141,142,242],[62,76,124,141,142,301],[76,124,141,142,297,345,412,455,456],[76,124,141,142,392,449,450,451,452,454],[76,124,141,142,391],[76,124,141,142,391,392],[76,124,141,142,191,341,342,343],[76,124,141,142,341,344,345],[76,124,141,142,453],[76,124,141,142,341,345],[62,76,124,141,142,184,443],[62,76,124,141,142,167],[62,76,124,141,142,200,270],[62,76,124,141,142,200],[76,124,141,142,268,272],[62,76,124,141,142,269,421],[62,66,76,124,138,141,142,174,175,176,177,178,179,419,465,466],[76,124,138,141,142],[76,124,138,141,142,187,249,341,351,366,386,401,402,416,417,473],[76,124,141,142,210,403],[76,124,141,142,419],[76,124,141,142,182],[62,76,124,141,142,282,296,308,318,320,411],[76,124,141,142,150,282,296,317,318,319,411,472],[76,124,141,142,311,312,313,314,315,316],[76,124,141,142,313],[76,124,141,142,317],[76,124,141,142,240,241,242,244],[62,76,124,141,142,235,236,237,243],[76,124,141,142,240,243],[76,124,141,142,238],[76,124,141,142,239],[62,76,124,141,142,242,269,421],[62,76,124,141,142,242,420,421],[62,76,124,141,142,242,421],[76,124,141,142,366,408],[76,124,141,142,408],[76,124,138,141,142,417,421],[76,124,141,142,305],[76,123,124,141,142,304],[76,124,141,142,212,250,288,290,292,293,294,295,338,341,411,414,417],[76,124,141,142,212,326,341,345],[76,124,141,142,293,411],[62,76,124,141,142,293,302,303,305,306,307,308,309,310,321,322,323,324,325,327,328,411,412,473],[76,124,141,142,287],[76,124,138,141,142,150,212,213,249,264,294,338,339,340,345,366,386,407,416,417,418,419,473],[76,124,141,142,411],[76,123,124,141,142,198,291,294,340,407,409,410,417],[76,124,141,142,293],[76,123,124,141,142,249,254,283,284,285,286,287,288,289,290,292,411,412],[76,124,138,141,142,254,255,283,417,418],[76,124,141,142,198,340,341,366,407,411,417],[76,124,138,141,142,416,418],[76,124,138,141,142,156,414,417,418],[76,124,138,141,142,150,167,180,187,200,212,213,215,250,251,256,261,264,290,294,341,351,353,356,358,361,362,363,364,365,386,406,407,412,414,416,417,418],[76,124,138,141,142,156],[76,124,141,142,183,184,185,187,192,195,200,218,406,414,415,419,421,473],[76,124,138,141,142,156,167,230,232,234,235,236,237,244,473],[76,124,141,142,150,167,180,222,232,260,261,262,263,290,341,356,365,366,372,375,376,386,407,412,414],[76,124,141,142,194,195,210,340,365,407,416],[76,124,138,141,142,167,184,187,290,370,414,416],[76,124,141,142,281],[76,124,138,141,142,373,374,383],[76,124,141,142,414,416],[76,124,141,142,288,291],[76,124,141,142,290,294,406,421],[76,124,138,141,142,150,216,222,263,356,366,372,375,378,414],[76,124,138,141,142,194,210,222,379],[76,124,141,142,183,215,381,406,416],[76,124,138,141,142,167,416],[76,124,138,141,142,200,214,215,216,227,245,380,382,406,416],[70,76,124,141,142,212,294,385,419,421],[76,124,138,141,142,150,167,187,194,202,210,213,250,256,260,261,262,263,264,290,341,353,366,367,369,371,386,406,407,412,413,414,421],[76,124,138,141,142,156,194,372,377,383,414],[76,124,141,142,205,206,207,208,209],[76,124,141,142,251,357],[76,124,141,142,359],[76,124,141,142,357],[76,124,141,142,359,360],[76,124,138,141,142,187,190,191,249,417],[76,124,138,141,142,150,182,184,212,250,264,294,349,350,386,414,418,419,421],[76,124,138,141,142,150,167,186,191,290,350,413,417],[76,124,141,142,283],[76,124,141,142,284],[76,124,141,142,285],[76,124,141,142,412],[76,124,141,142,231,247],[76,124,138,141,142,187,231,250],[76,124,141,142,246,247],[76,124,141,142,248],[76,124,141,142,231,232],[76,124,141,142,231,265],[76,124,141,142,231],[76,124,141,142,251,355,413],[76,124,141,142,354],[76,124,141,142,232,412,413],[76,124,141,142,352,413],[76,124,141,142,232,412],[76,124,141,142,338],[76,124,141,142,187,192,250,279,282,288,290,294,296,299,330,333,337,341,385,406,414,417],[76,124,141,142,273,276,277,278,297,298,345],[62,76,124,141,142,177,179,242,331,332],[62,76,124,141,142,177,179,242,331,332,336],[76,124,141,142,394],[76,124,141,142,198,255,293,294,305,309,341,385,387,388,389,390,392,393,396,406,411,416],[76,124,141,142,345],[76,124,141,142,349],[76,124,138,141,142,250,266,346,348,351,385,414,419,421],[76,124,141,142,273,274,275,276,277,278,297,298,345,420],[70,76,124,138,141,142,150,167,213,231,232,264,290,294,383,384,386,406,407,416,417,419],[76,124,141,142,255,257,260,407],[76,124,138,141,142,251,416],[76,124,141,142,254,293],[76,124,141,142,253],[76,124,141,142,255,256],[76,124,141,142,252,254,416],[76,124,138,141,142,186,255,257,258,259,416,417],[62,76,124,141,142,341,342,344],[76,124,141,142,217],[62,76,124,141,142,184],[62,76,124,141,142,412],[62,70,76,124,141,142,264,294,419,421],[76,124,141,142,184,443,444],[62,76,124,141,142,272],[62,76,124,141,142,150,167,182,229,267,269,271,421],[76,124,141,142,200,412,417],[76,124,141,142,368,412],[76,124,141,142,341],[62,76,124,136,138,141,142,150,182,218,224,272,419,420],[62,76,124,141,142,175,176,177,178,179,419,467],[62,63,64,65,66,76,124,141,142],[76,124,129,141,142],[76,124,141,142,219,220,221],[76,124,141,142,219],[62,66,76,124,138,140,141,142,150,174,175,176,177,178,179,180,182,213,317,378,416,418,421,467],[76,124,141,142,431],[76,124,141,142,433],[76,124,141,142,435],[76,124,141,142,437],[76,124,141,142,439,440,441],[76,124,141,142,445],[67,69,76,124,141,142,423,428,430,432,434,436,438,442,446,448,458,459,461,471,472,473,474],[76,124,141,142,447],[76,124,141,142,457],[76,124,141,142,269],[76,124,141,142,460],[76,123,124,141,142,255,257,258,260,308,412,462,463,464,467,468,469,470],[76,124,141,142,174],[76,124,141,142,156,174],[76,89,93,124,141,142,167],[76,89,124,141,142,156,167],[76,84,124,141,142],[76,86,89,124,141,142,164,167],[76,124,141,142,144,164],[76,84,124,141,142,174],[76,86,89,124,141,142,144,167],[76,81,82,85,88,124,135,141,142,156,167],[76,89,96,124,141,142],[76,81,87,124,141,142],[76,89,110,111,124,141,142],[76,85,89,124,141,142,159,167,174],[76,110,124,141,142,174],[76,83,84,124,141,142,174],[76,89,124,141,142],[76,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,124,141,142],[76,89,104,124,141,142],[76,89,96,97,124,141,142],[76,87,89,97,98,124,141,142],[76,88,124,141,142],[76,81,84,89,124,141,142],[76,89,93,97,98,124,141,142],[76,93,124,141,142],[76,87,89,92,124,141,142,167],[76,81,86,89,96,124,141,142],[76,124,141,142,156],[76,84,89,110,124,141,142,172,174],[76,124,141,142,735],[76,124,141,142,726,727],[76,124,141,142,723,724,726,728,729,734],[76,124,141,142,724,726],[76,124,141,142,734],[76,124,141,142,726],[76,124,141,142,723,724,726,729,730,731,732,733],[76,124,141,142,723,724,725],[76,124,141,142,694,695],[76,124,141,142,694],[76,124,141,142,475],[76,124,141,142,746],[62,76,124,141,142,624],[62,76,124,141,142,621,623],[76,124,141,142,697],[62,76,124,141,142,697,698,721],[76,124,141,142,699,720,722,745],[76,124,141,142,621,693,697,698],[62,76,124,141,142,697,742,743,744],[62,76,124,141,142,693,697,712,719],[76,124,141,142,742],[62,76,124,141,142,742,743],[76,124,141,142,696],[76,124,141,142,737,739,740],[76,124,141,142,737,738,739,740,741],[76,124,141,142,738],[76,124,141,142,736],[76,124,141,142,737],[76,124,141,142,622],[76,124,141,142,621]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"631eff75b0e35d1b1b31081d55209abc43e16b49426546ab5a9b40bdd40b1f60","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"829b9e6028b29e6a8b1c01ddb713efe59da04d857089298fa79acbdb3cfcfdef","impliedFormat":1},{"version":"24f8562308dd8ba6013120557fa7b44950b619610b2c6cb8784c79f11e3c4f90","impliedFormat":1},{"version":"5f90b8c733a1bda63e42160b15a2301051e83a6f9d5332a59d16eb12f463270d","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"496bbf339f3838c41f164238543e9fe5f1f10659cb30b68903851618464b98ba","impliedFormat":1},{"version":"5178eb4415a172c287c711dc60a619e110c3fd0b7de01ed0627e51a5336aa09c","impliedFormat":1},{"version":"ca6e5264278b53345bc1ce95f42fb0a8b733a09e3d6479c6ccfca55cdc45038c","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"fb1d8e814a3eeb5101ca13515e0548e112bd1ff3fb358ece535b93e94adf5a3a","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"98b18458acb46072947aabeeeab1e410f047e0cacc972943059ca5500b0a5e95","impliedFormat":1},{"version":"361e2b13c6765d7f85bb7600b48fde782b90c7c41105b7dab1f6e7871071ba20","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"b6db56e4903e9c32e533b78ac85522de734b3d3a8541bf24d256058d464bf04b","impliedFormat":1},{"version":"24daa0366f837d22c94a5c0bad5bf1fd0f6b29e1fae92dc47c3072c3fdb2fbd5","impliedFormat":1},{"version":"570bb5a00836ffad3e4127f6adf581bfc4535737d8ff763a4d6f4cc877e60d98","impliedFormat":1},{"version":"889c00f3d32091841268f0b994beba4dceaa5df7573be12c2c829d7c5fbc232c","impliedFormat":1},{"version":"65f43099ded6073336e697512d9b80f2d4fec3182b7b2316abf712e84104db00","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"27ab780875bcbb65e09da7496f2ca36288b0c541abaa75c311450a077d54ec15","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"380647d8f3b7f852cca6d154a376dbf8ac620a2f12b936594504a8a852e71d2f","impliedFormat":1},{"version":"208c9af9429dd3c76f5927b971263174aaa4bc7621ddec63f163640cbd3c473c","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"a23185bc5ef590c287c28a91baf280367b50ae4ea40327366ad01f6f4a8edbc5","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"002eae065e6960458bda3cf695e578b0d1e2785523476f8a9170b103c709cd4f","impliedFormat":1},{"version":"c83bb0c9c5645a46c68356c2f73fdc9de339ce77f7f45a954f560c7e0b8d5ebb","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"6a148329edecbda07c21098639ef4254ef7869fb25a69f58e5d6a8b7b69d4236","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"f63ab283a1c8f5c79fabe7ca4ef85f9633339c4f0e822fce6a767f9d59282af2","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a54c996c8870ef1728a2c1fa9b8eaec0bf4a8001cd2583c02dd5869289465b10","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"3754982006a3b32c502cff0867ca83584f7a43b1035989ca73603f400de13c96","impliedFormat":1},{"version":"a30ae9bb8a8fa7b90f24b8a0496702063ae4fe75deb27da731ed4a03b2eb6631","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"e9dd71cf12123419c60dab867d44fbee5c358169f99529121eaef277f5c83531","impliedFormat":1},{"version":"5b6a189ba3a0befa1f5d9cb028eb9eec2af2089c32f04ff50e2411f63d70f25d","impliedFormat":1},{"version":"d6e73f8010935b7b4c7487b6fb13ea197cc610f0965b759bec03a561ccf8423a","impliedFormat":1},{"version":"174f3864e398f3f33f9a446a4f403d55a892aa55328cf6686135dfaf9e171657","impliedFormat":1},{"version":"824c76aec8d8c7e65769688cbee102238c0ef421ed6686f41b2a7d8e7e78a931","impliedFormat":1},{"version":"75b868be3463d5a8cfc0d9396f0a3d973b8c297401d00bfb008a42ab16643f13","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"6dcf60530c25194a9ee0962230e874ff29d34c59605d8e069a49928759a17e0a","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"1a42d2ec31a1fe62fdc51591768695ed4a2dc64c01be113e7ff22890bebb5e3f","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"0c7c947ff881c4274c0800deaa0086971e0bfe51f89a33bd3048eaa3792d4876","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"15b36126e0089bfef173ab61329e8286ce74af5e809d8a72edcafd0cc049057f","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"72d63643a657c02d3e51cd99a08b47c9b020a565c55f246907050d3c8a5e77fb","impliedFormat":1},{"version":"1d415445ea58f8033ba199703e55ff7483c52ac6742075b803bd3e7bbe9f5d61","impliedFormat":1},{"version":"d6406c629bb3efc31aedb2de809bef471e475c86c7e67f3ef9b676b5d7e0d6b2","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"71d8ba39a9e024d9e4bb922464d18542ed8d2c25ee78efa7890c27213cc6e5d3","impliedFormat":1},{"version":"8c030e515014c10a2b98f9f48408e3ba18023dfd3f56e3312c6c2f3ae1f55a16","impliedFormat":1},{"version":"dafc31e9e8751f437122eb8582b93d477e002839864410ff782504a12f2a550c","impliedFormat":1},{"version":"754498c5208ce3c5134f6eabd49b25cf5e1a042373515718953581636491f3c3","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"633d58a237f4bb25ec7d565e4ffa32cecdcee8660ac12189c4351c52557cee9e","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"ce791f6ea807560f08065d1af6014581eeb54a05abd73294777a281b6dfd73c2","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"e17cd049a1448de4944800399daa4a64c5db8657cc9be7ef46be66e2a2cd0e7c","impliedFormat":1},{"version":"43fa6ea8714e18adc312b30450b13562949ba2f205a1972a459180fa54471018","impliedFormat":1},{"version":"6e89c2c177347d90916bad67714d0fb473f7e37fb3ce912f4ed521fe2892cd0d","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"4d4927cbee21750904af7acf940c5e3c491b4d5ebc676530211e389dd375607a","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"8a97e578a9bc40eb4f1b0ca78f476f2e9154ecbbfd5567ee72943bab37fc156a","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"f22d05663d873ee7a600faf78abb67f3f719d32266803440cf11d5db7ac0cab2","impliedFormat":1},{"version":"d93c544ad20197b3976b0716c6d5cd5994e71165985d31dcab6e1f77feb4b8f2","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"a8b1c79a833ee148251e88a2553d02ce1641d71d2921cce28e79678f3d8b96aa","impliedFormat":1},{"version":"126d4f950d2bba0bd45b3a86c76554d4126c16339e257e6d2fabf8b6bf1ce00c","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"2d3cc2211f352f46ea6b7cf2c751c141ffcdf514d6e7ae7ee20b7b6742da313f","impliedFormat":1},{"version":"c75445151ff8b77d9923191efed7203985b1a9e09eccf4b054e7be864e27923d","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"fa8a8fbf91ee2a4779496225f0312aac6635b0f21aa09cdafa4283fe32d519c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e8aef93d79b000deb6ec336b5645c87de167168e184e84521886f9ecc69a4b5","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"de7052bfee2981443498239a90c04ea5cc07065d5b9bb61b12cb6c84313ad4ef","impliedFormat":1},{"version":"a3e7d932dc9c09daa99141a8e4800fc6c58c625af0d4bbb017773dc36da75426","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"4a2edd238d9104eac35b60d727f1123de5062f452b70ed8e0366cb36387dfdfd","impliedFormat":1},{"version":"ca921bf56756cb6fe957f6af693a35251b134fb932dc13f3dfff0bb7106f80b4","impliedFormat":1},{"version":"fee92c97f1aa59eb7098a0cc34ff4df7e6b11bae71526aca84359a2575f313d8","impliedFormat":1},{"version":"0bd0297484aacea217d0b76e55452862da3c5d9e33b24430e0719d1161657225","impliedFormat":1},{"version":"2ab6d334bcbf2aff3acfc4fd8c73ecd82b981d3c3aa47b3f3b89281772286904","impliedFormat":1},{"version":"d07cbc787a997d83f7bde3877fec5fb5b12ce8c1b7047eb792996ed9726b4dde","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"49179c6a23701c642bd99abe30d996919748014848b738d8e85181fc159685ff","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"45490817629431853543adcb91c0673c25af52a456479588b6486daba34f68bb","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"8514c62ce38e58457d967e9e73f128eedc1378115f712b9eef7127f7c88f82ae","impliedFormat":1},{"version":"f1289e05358c546a5b664fbb35a27738954ec2cc6eb4137350353099d154fc62","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"1d17ba45cfbe77a9c7e0df92f7d95f3eefd49ee23d1104d0548b215be56945ad","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"a1ee88010a64e8647d07dba58ec43e6e05851b9ec7a62e4ca2b9c33be5abb2c8","impliedFormat":1},{"version":"46273e8c29816125d0d0b56ce9a849cc77f60f9a5ba627447501d214466f0ff3","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"3af3584f79c57853028ef9421ec172539e1fe01853296dc05a9d615ade4ffaf6","impliedFormat":1},{"version":"f82579d87701d639ff4e3930a9b24f4ee13ca74221a9a3a792feb47f01881a9c","impliedFormat":1},{"version":"d7e5d5245a8ba34a274717d085174b2c9827722778129b0081fefd341cca8f55","impliedFormat":1},{"version":"d9d32f94056181c31f553b32ce41d0ef75004912e27450738d57efcd2409c324","impliedFormat":1},{"version":"752513f35f6cff294ffe02d6027c41373adf7bfa35e593dbfd53d95c203635ee","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"1a7e2ea171726446850ec72f4d1525d547ff7e86724cc9e7eec509725752a758","impliedFormat":1},{"version":"8c901126d73f09ecdea4785e9a187d1ac4e793e07da308009db04a7283ec2f37","impliedFormat":1},{"version":"db97922b767bd2675fdfa71e08b49c38b7d2c847a1cc4a7274cb77be23b026f1","impliedFormat":1},{"version":"aab290b8e4b7c399f2c09b957666fc95335eb4522b2dd9ead1bf0cb64da6d6ee","impliedFormat":1},{"version":"94fe3281392e1015b22f39535878610b4fa6f1388dc8d78746be3bc4e4bb8950","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"06c25ddfc2242bd06c19f66c9eae4c46d937349a267810f89783680a1d7b5259","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"0427df5c06fafc5fe126d14b9becd24160a288deff40e838bfbd92a35f8d0d00","impliedFormat":1},{"version":"90c54a02432d04e4246c87736e53a6a83084357acfeeba7a489c5422b22f5c7a","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"0a372c2d12a259da78e21b25974d2878502f14d89c6d16b97bd9c5017ab1bc12","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"ec1ca97598eda26b7a5e6c8053623acbd88e43be7c4d29c77ccd57abc4c43999","impliedFormat":1},{"version":"6e2261cd9836b2c25eecb13940d92c024ebed7f8efe23c4b084145cd3a13b8a6","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"a47e6d954d22dd9ebb802e7e431b560ed7c581e79fb885e44dc92ed4f60d4c07","impliedFormat":1},{"version":"f019e57d2491c159d47a107fd90219a1734bdd2e25cd8d1db3c8fae5c6b414c4","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d1c9bf292a54312888a77bb19dba5e2503ad803f5393beafd45d78d2f4fe9b48","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"cb8d8ef7b9ce8ed3e6f1c814fcbf3f90dab0cb8863079236784fc350746e27c4","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"3be035da7bee86b4c3abf392e0edaa44fc6e45092995eefe36b39118c8a84068","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f828825d077c2fa0ea606649faeb122749273a353daab23924fe674e98ba44c","impliedFormat":1},{"version":"2896c2e673a5d3bd9b4246811f79486a073cbb03950c3d252fba10003c57411a","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"407a06ba04eede4074eec470ecba2784cbb3bf4e7de56833b097dd90a2aa0651","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"5c96bad5f78466785cdad664c056e9e2802d5482ca5f862ed19ba34ffbb7b3a4","impliedFormat":1},{"version":"81d8603ac527e75cfec72bb9391228b58f161c2b33514a9d814c7f3ebd3ef466","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb0cd7862b72f5eba39909c9889d566e198fcaddf7207c16737d0c2246112678","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"bad68fd0401eb90fe7da408565c8aee9c7a7021c2577aec92fa1382e8876071a","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"fec01479923e169fb52bd4f668dbeef1d7a7ea6e6d491e15617b46f2cacfa37d","impliedFormat":1},{"version":"8a8fb3097ba52f0ae6530ec6ab34e43e316506eb1d9aa29420a4b1e92a81442d","impliedFormat":1},{"version":"44e09c831fefb6fe59b8e65ad8f68a7ecc0e708d152cfcbe7ba6d6080c31c61e","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"4655709c9cb3fd6db2b866cab7c418c40ed9533ce8ea4b66b5f17ec2feea46a9","impliedFormat":1},{"version":"87affad8e2243635d3a191fa72ef896842748d812e973b7510a55c6200b3c2a4","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"3eecb25bb467a948c04874d70452b14ae7edb707660aac17dc053e42f2088b00","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"5f0292a40df210ab94b9fb44c8b775c51e96777e14e073900e392b295ca1061b","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"8627ad129bcf56e82adff0ab5951627c993937aa99f5949c33240d690088b803","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"ecbaf0da125974be39c0aac869e403f72f033a4e7fd0d8cd821a8349b4159628","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"ceec3c81b2d81f5e3b855d9367c1d4c664ab5046dff8fd56552df015b7ccbe8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"1d63055b690a582006435ddd3aa9c03aac16a696fac77ce2ed808f3e5a06efab","impliedFormat":1},"ec199b46c4e6b1c8bc70646bba0f21af76c01d209d361a74a6fc7af77c72d860","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",{"version":"6f5b469bbc58a772b5a7ac85d7c5be3c650d44df1f29d6f174f4862f291f86b6","impliedFormat":99},{"version":"dcc65d7627086ddf64042e23d2c94cb732813bd7012f5aa76276098eafd254ef","impliedFormat":99},{"version":"f639b02cbfb13de1f83366b59cabe31aca6befcb091ddcf4dfc254484bbc811c","impliedFormat":99},{"version":"8649b585faeb11d83606eab2aab40ccb650a96891e8274a888601ad3ef39f66f","impliedFormat":99},{"version":"10b2d5339bf2ea53b2405a8447743b1b2e3e32e6bf79b4cd785a44249947ba4a","impliedFormat":99},{"version":"37e76a48e9c76f1f7c476c922b4c8fd9edce7190a24ed8ab63dd4649a059b254","impliedFormat":99},{"version":"cbefdb686044d8f7f0f931dfde0fa2be1c4555eb99f7557bce8297d3a0d8d09d","impliedFormat":1},{"version":"854101adf69f3fce71c57e2805299b4a124006f126c98d1dc23cdce170af3559","impliedFormat":1},{"version":"e897a25ae55afa7377bf6f36a6881f5cb4cfa79ad93d2c351fdc76f49959b064","impliedFormat":1},{"version":"fc1b7d9527a8e466dda8801fedd9fefa4e169cf1d20e108285cd38f1cea621d9","impliedFormat":1},{"version":"7bb5b11ef3d32c8cf8499ec5005afa48aebe9e5c99789252f64a2aae0c8523b8","impliedFormat":1},{"version":"2b7cbd285dc161984e2762f83295fc65cfcba36af81c9e2220446eb45742262c","impliedFormat":1},{"version":"6725969b132d602db7dd765232e98572342b23c0abdcd13f92a52222f095925a","impliedFormat":1},{"version":"2e46287ba61df710d72ea8f0b761de28c8c80657d2e9657e79eb6c69fab5fac0","impliedFormat":1},{"version":"ee33b899f5626f466c7bbc35cab424a02d70d457356ee994e4bdad1872133fd0","impliedFormat":1},{"version":"c539de159c996b26f38ae9a91a45fd18b1d57467839e49098d11ff1082b6ad5b","impliedFormat":1},{"version":"a92e2a35cf6d3bdfd4e1a6e72fe886c7127afd2468b0eeb15d69d6f4c9f4ece1","impliedFormat":1},{"version":"ce52a2d8f82867901008a86c679117bcc19968db6628416797df00d837913b39","impliedFormat":1},{"version":"b356dbeac94708c206d762000eca6ecb679182ebe6e5cd93f2ee87c337082fe1","impliedFormat":1},{"version":"3f6a9c8968681aa6474c64144d8dfeb400ba060a55be72571cd0bb30b96b1aa6","impliedFormat":1},{"version":"db7b4aeee699e42b9a12b58b1fb9efe7f6a060f7fd34077128f1eaf70fa077ea","impliedFormat":1},{"version":"11b4156e7f484d6ea5d78e5d774dd3d89f2ab6e2a4d6c55eb577a779e9be4046","impliedFormat":1},{"version":"c0e9beef1f9a9816ebe8e12b0e4cf0eda3138b6502c995f4f7aa8197d403e5d4","impliedFormat":1},{"version":"e82e10d1ac4527132a0e5ecb27188cfe27b25f93670dfe6c0891ea9908640897","impliedFormat":1},{"version":"29a43b7d567743acde064af81410fc0a32b8896557d410f344382ea0661a048e","impliedFormat":1},{"version":"8ff7444a0fb223b246bd308f88f22df7ccf8c8fe3215a17d0c388b1a4f26adba","impliedFormat":1},{"version":"51bd2ad3d00f805273d163333d332759eddc7f942fd6030e5b789218c17582ed","impliedFormat":1},{"version":"6ee54b752b556aa0845db2938d587f58717a29174656500920a2a9a07c8b9e61","impliedFormat":1},{"version":"41ae1400d7c7b253bacac60ba28b9334fef789382b93101fb448539a9d5283dc","impliedFormat":1},{"version":"3a30d75820985428423f300416c6e156839100586d10e670d1a777afb9881d7a","impliedFormat":1},{"version":"a1aa1d4af2c45ac125d69411da82d3d0ba5eb7331385877f1ebfbbcbcfb4ea72","impliedFormat":1},{"version":"7a1dd4a21e4ce91909631c8d0b19bad5a8d261e22dab6459455527d1b90c36a5","impliedFormat":1},{"version":"d4a87b0fde2bbb476c1ffee6c3f88d017a2e21e388d020dc90b2167ce9d02f34","impliedFormat":1},{"version":"4514b7bc70875e7c5a23806b1721d5c7546a79008c42995d77be6d0c0911cdf8","impliedFormat":1},{"version":"4169eef12017974b28fd25c549badf62643ea32fbe4a7edea137c0413cefb16e","impliedFormat":1},{"version":"dae484ac7e6d89cc9024c5042063b21c6068a125334cb1afa2df8e2e1eb313c7","impliedFormat":1},{"version":"9d4ca199a2a6ef18ee5dca031f30ef11eedc9502b95dc52aeefff524772005d0","impliedFormat":1},{"version":"cbbeb1a841988d6b1139194c5467761fffd637883652c4f9c1baa214c4cb5097","impliedFormat":1},{"version":"8a8ea69def1e3d1cf1d476277b2f52ceb97726ab3b3f3c3183e0ecc888602ea3","impliedFormat":1},{"version":"d8edd827c07b7bddd37c3a9bbcd625149ddeb19193f766717ed6f316763e030d","impliedFormat":1},{"version":"77b5482b07994c5a3205353251d30d81872e1d0e59766d4dfdf07234ae0bed42","impliedFormat":1},{"version":"aa45a939bd2dc99716121cc6d018c154a62b6177320a73034ba09771278d0efb","impliedFormat":1},{"version":"9224c3cc6153ca3eaa0f3a416c5ab18bc8570ecdbb02cfaa7f692b2603fc9b7b","impliedFormat":1},{"version":"23543acd91c62ae34d06a05372e1daed1b1295143e841c80aaadcc75f9228f27","impliedFormat":1},{"version":"0f2e093cef3c2135c4003983c3152350a5f7e9030a5eb35c7efbb8192434338e","impliedFormat":1},{"version":"6b06159a196c511c7a2d454ee6a43bb8e949706a184295a01acfcc409df71057","impliedFormat":1},{"version":"2ecf1320bf898d3db2104698dd7e6a2fdf2489aef78c8ccddc408dc83e3d8cba","impliedFormat":1},{"version":"1d20ba51ac03fedd52980333eb1694d70c158ba5d012003af6af253024830ebe","impliedFormat":1},{"version":"d815a6a83a219df319a2378971361552c5913abfe688d4ad4d3fde9267616e48","impliedFormat":1},{"version":"706595c09be4f75aa2bc13bb9b123e0e4b4e4e882afe5806a78eb0090de48243","impliedFormat":1},{"version":"6ba4f8ac492e46fb4d58f46396cd1d51da150b59b0e2809468c697a083ad2ea2","impliedFormat":1},{"version":"fe211ba2b5165f3202addcee3fba882c861551e8043856f23da424755148fb32","impliedFormat":1},{"version":"70b2ef5b62b3549d3faab91a9c2ef112e19dd7027ccd7415c8e230dc7602526f","impliedFormat":1},{"version":"1e5e3739f310f8d9995b40eade0c17ffd47da3f85c000c7da9aa58bd07efa02f","impliedFormat":1},{"version":"7ebcf2fa57dbeebbfab2fc007c56a99be96541c3f449ea1b50096e14429df12f","impliedFormat":1},{"version":"ea5ebcf70110a8fe8df85727875564adc76bcf3c2a0a6afd58c107358c3d2c6f","impliedFormat":1},{"version":"ed93b65d1435a04c1bb9b009c3eb83f4ea2a16055b4dd7bc1f89edb08e411267","impliedFormat":1},{"version":"cf476aacc750611363e80c6b4cdd595736b3c02213105f60b67b9dd7b2866d2c","impliedFormat":1},{"version":"22c8125a509a8b5b0ed5c1d75608a268240ee714fd77781048b6fd05897d6f25","impliedFormat":1},{"version":"90313f73be6807a818a5081af8d8ffbcb4471e9efb3b5e4ca130dbaed4e33175","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b0c4e59b5d468b76fa082c7712f79721c0ff09a0d64c16af437dee1024326c4","impliedFormat":1},{"version":"ac6b1d00960366b62d3f99e59a8d8ba17ce560cf2b2c3da8315f4de9007b96cb","impliedFormat":1},{"version":"6453348bfc587bf67d5854ca3077db6dd6d21d59cb2e4d49e68ffba96b86e1ff","impliedFormat":1},{"version":"16279352fee6e40f4ff67eb52ff3e16d37876c71066a1bcb9a7b3e3d52f1e04e","impliedFormat":1},{"version":"1006b515ab697b5b3dd2f417471cf8960ec72f8ccefa14df49329795684a7352","impliedFormat":1},{"version":"063e7142a120cdfddca3b687f7f236af93e0f8a821e904b66183e1175fd7fc73","impliedFormat":1},{"version":"c122a7718374f6070d0f570847641c36fe9fdbeb0213210fc0450a279d4743bf","impliedFormat":1},{"version":"cbad1cf5206f4fe9732e397ca8e54646d13cb8161d98e28e1de71742bb56c0e4","impliedFormat":1},{"version":"c9ed348994fcd30ea2f5d94f1dd9b4aa553b622827413347590b90c82535075d","impliedFormat":1},{"version":"9d965f0a530f578ec529ff9134660b85754a1adb5dd93d3ea57bfe2af899ad8b","impliedFormat":1},{"version":"33d72b47c90a57689c72493a449d244505d68e685d18f728edb3181d1ffea6e1","impliedFormat":1},{"version":"e9127804c39120c4b2ac54be77ceeab5e9f29428c21200572550782a6999d9d5","impliedFormat":1},{"version":"9c5fbc6f035303c53352e5b286ce713466f49c4379c6aa8e0071e18539ea5237","impliedFormat":1},{"version":"0f2e093cef3c2135c4003983c3152350a5f7e9030a5eb35c7efbb8192434338e","impliedFormat":1},{"version":"8a01cc83cad50eb5d4cf11abf8d10caa17382c80277d2b1f200be23d5f9c9ca5","impliedFormat":1},{"version":"e1b0ff4e56be391b9e4b1342c9eb2470f473aa04d1b1281d29ac7e4671839ddd","impliedFormat":1},{"version":"6453348bfc587bf67d5854ca3077db6dd6d21d59cb2e4d49e68ffba96b86e1ff","impliedFormat":1},{"version":"7d2b22cee0adc2081a04098bf034a73bf5ae76a28074dd064c02aa51289cb0cf","impliedFormat":1},{"version":"c1e6302674ba9d9390f1ad91c5cb4b2ceaf3bbe8d47b9123dd3b707cded33a78","impliedFormat":1},{"version":"d010c806c2daa194b51f004ecbe1be37c008e4a5f14eba827bff54b8c1e2fef2","impliedFormat":1},{"version":"12f22dbd4bb961ea4ee9bcc7ec9524ed5e28b26d098983ac24fdb9fcd0cada13","impliedFormat":1},{"version":"b58f8d569cb1018275e9015ce902c208133da253a58acffbba8be434dd022b6e","impliedFormat":1},{"version":"d320b8e5e59d939e403025a0c122ea27113ceb251fb5532232700bba9122bea0","impliedFormat":1},{"version":"b02a65386846cb1af5dd8973e35c95b077b1a3003ed200e71301ea494914e36d","impliedFormat":1},{"version":"0f5fea62d29d16f9a2a6468601eb19cc6f908a7704abb10897c92b4785d316d5","impliedFormat":1},{"version":"944f855cafb7d5ea5070dfd432b975f953e143f808f78894ec0894bcdd8ee3f8","impliedFormat":1},{"version":"1e2be3652461468f4821d4e8458beb7687aab882f33b73383cf22d0929bcf4ac","impliedFormat":1},{"version":"26015c7791d96eaf45066f7c09cb20eb4f30d6c0ffcfc528cbb39dd1bfdaf06a","impliedFormat":1},{"version":"acaae36652346e6e081a605eed966b610baa5ee4c5478815dc525c43f973d594","impliedFormat":1},{"version":"fb967a85ac48462a366896a323af45ceac69adae55db18904dff44b446d38052","affectsGlobalScope":true,"impliedFormat":1},{"version":"486bdfdfa83f5a43a0ab456497f3537eaa6b95a76444ac77ab6e2ec6e8e367a0","impliedFormat":1},{"version":"7326d8043891284531a74db061dd77ff3e22ce84a5a6b1ffe179eee89dc9b1ef","impliedFormat":1},{"version":"19f5e1eca4de291dc45e97ba79b81e158e59d924eeb2b3377cd5379bd66bc79c","impliedFormat":1},{"version":"ab9003414d7fec8f991b1933a3036787bf6309fff4c0d20a5db205f5ee303306","impliedFormat":1},{"version":"f6fa81cfccd9d8d38629bd4f92122858913087745ff07817d9b0b0e5ced56854","impliedFormat":1},{"version":"51436b82379337cccb0a6c36f7c1a878b20ef38deb01034454eb5059ca718d4b","impliedFormat":1},{"version":"9ce0f17615423eb4da4ff13b2c523f006bc7922ec7fa9152990ad808c0b799fc","impliedFormat":1},{"version":"27aa691e6f085f16ea30e017f7d97fee5e7b363389f0019494396796cdc7a94c","impliedFormat":1},{"version":"196618517753f64d653903db602e68a4d4cbdc85965deb32c14b69073e55100f","impliedFormat":1},{"version":"989a400c3910c7a4ed9fb7c74f86b1a3956ff06f66de63d13fbd3185731dd50d","impliedFormat":1},{"version":"9ad4ee22b7b17d639d2a45a9907c4a7028ed1137899d38480cbd5d57db9a103d","impliedFormat":1},{"version":"e3dbcb593a0aebf57b7d2b4aa1efb4bd8c17f9212f660e1787999bcf26d76a7c","impliedFormat":1},{"version":"33eb7d56833a9bbd9d95081bc829f10ff9beabbefe1818bcc6903e687093f1fd","impliedFormat":1},{"version":"88a1a7b325c4a1919aa17f22c59333bb2a86b42d5a14755a70cda92806d11640","impliedFormat":1},{"version":"bf3e38b73fb763a6b3cf1828821cbe8510ff7730386430a8711d544aae248624","impliedFormat":1},{"version":"6b27f8c7ba03efd3840efc07376f81951bf6fc02ed2eec57189e8b5e2b0faa3f","impliedFormat":1},{"version":"1d4a3c02b07da7fec7369aedc98c0c1944c6c08ba836cee599224ac3df3c7d26","impliedFormat":1},{"version":"b705dcdb69b2a913cdc4af0008812387b267d8249cebe0e2deec9fb9211f3f67","impliedFormat":1},{"version":"4321665a947eb42fceab4f1496d676f178d42a44b4d4a68fd5b30788caf20ce0","impliedFormat":1},{"version":"41adc8d4e0f682dc52d44d368e636eaab70ebaae87817aab11aa23029c7a20bc","impliedFormat":1},{"version":"1a1974575f603c0cf366252580285ef0e358c1d81eca4e9217be525fc9c2010e","impliedFormat":1},{"version":"4830e85097d37cf4cf8ef56a586630ecc58c21743f9c649091585f88495c6c12","impliedFormat":1},{"version":"669d3b56f6517dd04bfca58669c398b7bac9b9b386e6bd5903f525415a428019","impliedFormat":1},{"version":"56e8886fda7d5d75e76cb68e897f9bf1bc2ffa34f40e8e1b5a800b900fda7b28","impliedFormat":1},{"version":"e3045189b3be457061a276c7883cbf13dd5a7a2e99187c9dd549256b788495e5","impliedFormat":1},{"version":"6fea9bf9665bb589316664c7409685678d4b40ed9e76a1caec8ecad7a7fd0b11","impliedFormat":1},{"version":"f4ffb787edb02c48f2e914e0366248c7c4979c7f926def8d28ac2969eae76f68","impliedFormat":1},{"version":"fc95981fb6c7655062ee5708aae9eb5a09a782bcb1622e8aff705e6b37bf7251","impliedFormat":1},{"version":"13ef77708348eca1e7df8379ce4d318e04aa72d53020faee5378a34e8f306c12","impliedFormat":1},{"version":"111e6d0ba29a72630eca21710294a1761a3da206657d57ceab7a7f94fbe7a53f","impliedFormat":1},{"version":"958a4cc117a0c6c26429a13869b1df99472690e47bd7e5d2c875b625b04104ed","impliedFormat":1},{"version":"36b4f21ea57436776195fd392143c1cefc04a187b41d5e85841cba9eda1b38af","impliedFormat":1},{"version":"26d17e4ada368f5021a96bfa45815b16d9ef8b209f7c257d8f7dd68ca96ebabf","impliedFormat":1},{"version":"bf7e9e33bd87ba41b42783b79219cd6b99837312fce38af5e989119f37bc7ec6","impliedFormat":1},{"version":"14fa9551bbfe8b6b09fa250ad8fca871b841acd8c9e2c5eb520032314be426cb","impliedFormat":1},{"version":"cd1536ead160b92f97a5dcdf3d2913ac567e590853af903b5cce9ca52fe276ad","impliedFormat":1},{"version":"e9b7288d6069a3b0b82e6576928864664c298f3c86e34a5d9a154a065f7ef3ba","impliedFormat":1},{"version":"12d7470c3dcc45b09ec475f87adfdbb8eb001a389d6eea3619df999cdf65e051","impliedFormat":1},{"version":"58ba425de953c8c6359cbe500bd344f41e82dcb6fea8a11d2a324404cef6ed95","impliedFormat":1},{"version":"aa1bd589c34e26dcbe17c20df267623a57f10293ae6df040958cf9c2b4108a0c","impliedFormat":1},{"version":"31e141c56d2178e8c967411f58cf8e952902d88bfd1005355f22a3eecb4baf74","impliedFormat":1},{"version":"d868bce6f94c267f13ea73c1b20160cc641a5eceec787225fab1686c499539c5","impliedFormat":1},{"version":"3370390c21c62dc6bacbc6d1808e91d5017ab06c9eceda076d52b79e527516c1","impliedFormat":1},{"version":"760f6b872728e9d65d5313be1c7dd16044381d5b47cdb0a4d2b56965a5b68b0a","impliedFormat":1},{"version":"5b1a8c58211e42dd040638e6dc05e3a09980c17e938feba7f287eba482fab271","impliedFormat":1},{"version":"b07aa1181f999a9436f3740bf9081f337a772bcd8f8be57c4ed4404dec40ba53","impliedFormat":1},{"version":"c93563b69ef966dcf8ce2e26fc483877e44f6a092431a3c8cd374c21f7239ebe","impliedFormat":1},{"version":"711569098453c9aeec903647169983c269797345298e6922acb967d69feb87c6","impliedFormat":1},{"version":"5f4100b5418699c51ab8fb88cbda7e30967f21b6791be14bf15394d66e484d80","impliedFormat":1},{"version":"e9357b0edfc29133c7f68bfc2ddbcb9a9cbde8c7f9b4b8d771f91a31c621df20","impliedFormat":1},{"version":"be112d49165b215a6669e544fd67d409c999ec5f9a50cb9161696fa038321bc1","impliedFormat":1},{"version":"4ebca10d635649560634d2c5177e607397744d2848a505258649f6e32e056f07","impliedFormat":1},{"version":"e2e09dcadaa75bfc800dad9f354a00d8bddcbbf07531a7b03b7652c595fe8fdc","impliedFormat":1},{"version":"7810f9e09413ebc3d77f1197d066ea3e124cbcc109a6ef4441d9d1f404ad6d2d","impliedFormat":1},"ac8c4775f1a3b18095bc6a3d6e2d899f3b3882e99ee6505def5be51ba360a6b2","074afa2e02f7566c883839eb11a651fcef5607a07355faf72aa521575112b10f","0e38223f905a7a5e0ebc9cabf9cbb020b963add2326d3276d20bd339417c30d8","2908bb31d25fbcfe5875dfdc36a3ae577bae7aaa769490377fbf0fca5874d2c0","0a422d15a9fc68221afdc8acd799f801d16f0aa3cc2c93e38f0c76aba75fc829",{"version":"416ff7b8854cbb7ef9740951a80e08e9e02251d7bf1caa3bfba1025371ee70b5","impliedFormat":1},{"version":"2bb6fd274a95492f558d79d77f9ae152950f9029c9fbd325a9aecec5bd6196fe","impliedFormat":1},{"version":"6f67dfc344658888b4ff57b9c361aae8da1a574c17801ec8d8a038d722d98cb0","impliedFormat":1},{"version":"6b10c64707841e51cc0d12c2ada5bb1446316a0321abcf13981771e571d37d12","impliedFormat":1},{"version":"d3dd64a5d91e95e0a25bee1d4043c019d1d2cc0e00a51b96ac354759866beee6","impliedFormat":1},{"version":"c3944a4e44ccc4a8638e75715f5f5c59f5abda1d7e67f5153acfedfc71e2d7b5","impliedFormat":1},{"version":"10f771ca16ee6ed5fec27af275e5b8b4a908bfbe70ce578540950170b22b53a1","impliedFormat":1},{"version":"dc62496bfd058547918b0b9f49d0da0c7f35fedd67ae29ca52589f82058d4353","impliedFormat":1},{"version":"3fcaffb369fa230b1fd7ac8b9df3ef8cfea93befe30a62bc2d5a44e94e5c7b90","impliedFormat":1},{"version":"0ab5277ed881c4544564a9e7da00dd19bb59d5a757ad752523e9066c79b53405","impliedFormat":1},{"version":"755b5ea3dc72f8bcd67330445676a9d016e2f6dfb3240cae113a046b83da062c","impliedFormat":1},{"version":"869d93abaf4dd6be70003dcd9663c23c3af9098ee2b07033192501d707c64fb6","impliedFormat":1},{"version":"4948d3cfc6532ad23c23547dc824adfbacd7f195765f575d5fd3ba079b04a3b6","impliedFormat":1},{"version":"50f4d7ef1b5b7ca29f920ee64e1778a521b5f92dd956d19f50e02338092ea269","impliedFormat":1},{"version":"10376897498c7e7979279261a1adc2cc3d0c873b121a6367593fd33b379747f3","impliedFormat":1},{"version":"d77c67f671cabbb4197f301e1358162dc67afb767fdbf17c60bad4a3534153f8","impliedFormat":1},{"version":"153f01cf8dc5188f8f8d1aa9fb4eb880b0a63e6ed10a91338259980aeca9b610","impliedFormat":1},{"version":"80bdaa0ba63d2729038a3e4fe2ce0d1868aae7cfeffadc73252aaf449b01293b","impliedFormat":1},{"version":"4d8bd7c545d88140461b70b51be9e36046f2468305bc5d221a57b214350b43ac","impliedFormat":1},{"version":"8dc42d55c96e4ca52497187ac3768720897ab5432b3fe6e64140da7666a2c2e8","impliedFormat":1},{"version":"54e689a929ef60766fe13018692b10718da1cd7010b50611e75e3b509008fd16","impliedFormat":1},{"version":"3538d2b77497a64cf4fa72268d654ff88ff3b1fb199ea1e0f937608598b5cbf3","impliedFormat":1},{"version":"a8ed4c53b5e0254d93021fc42e70e1aa81008b6a86abcaf3084b3ed1e13ae412","impliedFormat":1},{"version":"eb3e5266d158bbf23afc5489e9a88834789212d0f4807d87dd5da78617d89591","impliedFormat":1},{"version":"a6a9775821e44be77eacf869f3fe39046ca70e8a6047b58b08338cd8749fbef6","impliedFormat":1},{"version":"3118aadca366d17999bfcd2547727eb83e30752ec431309fd5e53ec90500f466","impliedFormat":1},{"version":"bcd21bf3058bb4c41c9d09e9bbd5f431f0bbd7d6dcca3eaeaa319bdca591c98d","impliedFormat":1},{"version":"5418d1b397e747c3e9c828983a0b6026e2fc0f88e1a887451dd333bcdb563cf2","impliedFormat":1},{"version":"bc969a9656737dcb535963502035bf9236e357c6683a97131bd9575123485283","impliedFormat":1},{"version":"ea451080a33234d548152f2881540ae813651a5c1f64b290be191b7b80a65b41","impliedFormat":1},{"version":"9eecda3ff376c56ba5cd4596c65fc61594fb6af29fbe4f9342080475d85311af","impliedFormat":1},{"version":"1d7c3df9c6c49efc360a3cc2564de950356612373b4391c9dc3d8ec5a487def6","impliedFormat":1},{"version":"de67f2edc9711d915ab25a6d6fe51e00b28acd9fe6dedbe9f125c55fff1b058b","impliedFormat":1},{"version":"a55bdf7cdc8e849ad1a232c1686743c99c23fb90c55dbde7de4ea7119622b21d","impliedFormat":1},{"version":"8ad8ad1211715359516d076f5fa7016138e440c54e1b0de1dfa1c7284eacda9b","impliedFormat":1},{"version":"49dce8edd510d4cedee268e0b17d0022b8a1f912956a7a671d0e00cf63c730ac","impliedFormat":1},{"version":"0a1545aa541b75bd2526699705cacf27be9ec4a3a020a9c54c3edea20d3e0fda","impliedFormat":1},{"version":"93f1cb1094723d1946880b0e8041809b71b75d57e2e2c9743cb74cace7635a19","impliedFormat":1},{"version":"955e8cdca0bbd1670ccefc15bb1f17ee8e27215ccfe48f7b1bfb1b33fe6f24c1","impliedFormat":1},{"version":"3005252ffd739c90147d0dbf95a218ab2e49affd43a5929eed834719e616a630","impliedFormat":1},{"version":"5f903b0562f3ac082c3ac749e65247f7a0d18b284e8c7bd3eea410753e29417c","impliedFormat":1},{"version":"b6c018510340d0f6b67ed6f1f45c97f193f46bcb8c1e4e1d146db0df07247dc8","impliedFormat":1},{"version":"e9a9710dd117e9066862c8404bc3503f4c0130f5f4bb98a9b29b9cb95fb2e8e7","impliedFormat":1},{"version":"1a933a8c9ea4a1f45b0a9ae6561296b8b1a61b2afc6c0f6f9089afd3b035dae2","impliedFormat":1},{"version":"1401255f882305163bbc55facfc33570211beea7b0ad5bc9088b86f8b6aa5f14","impliedFormat":1},{"version":"26239528949b367b2d6f7bfef79555ab0442d1f9834c79ac448c0401579a822b","impliedFormat":1},{"version":"2cdb108090e16daf6b0e7e5fc8af242a0347d06736c2dfb48c69ba8d51249574","impliedFormat":1},{"version":"a16cf7140d3ef201e77eeb57b41151a6de89e2210ca48d41fab9f43a2a48afca","impliedFormat":1},{"version":"0b6954577eaa1845fd433aa72e020826ef95f1a341bd21a123b00165e69d6898","impliedFormat":1},{"version":"2f68aeed97256c4739bbd6776fd56b45b92239c22d9a42bf90060752719dd267","impliedFormat":1},{"version":"e0c4811d343a8625cf7099b1f427694b041cad6110756f5b69a4d1e902efe93e","impliedFormat":1},{"version":"a3ebf531daa87b17ad4db63dd7e0f2fdee5ac890ed09289a5ee3158bc3127fdb","impliedFormat":1},{"version":"d6bfaf7eaeca888200708869b162db4aef7a33c304b2cb4b548fd9fcf3911000","impliedFormat":1},{"version":"3acbb8cb647a12ccf7a5837c91bd2d538f6bd9ba2b0fb425ccd42a8c7b1274a4","impliedFormat":1},{"version":"2206928f151c2e8f614de69327ca966bf802469af9ccd4c524269eff5121bf37","impliedFormat":1},{"version":"14b2f025a1a0464d8acabdd6b136c14fa0fb349d2ee6b241e02d163935b7f784","impliedFormat":1},{"version":"69481a6d638ffe21452abb3ea28b89194fc36638a1bf1a918c32399674f2a91e","impliedFormat":1},{"version":"80616038b610b2e1c42deb2d9eca06c912cc1caedbbc175a94faa063a0c2960c","impliedFormat":1},{"version":"3dda237d689542d77c4d6001f11395d6d972d4c9b2bdf6144f6bbbdaee33c181","impliedFormat":1},{"version":"ef4c11c584fb2ca996b4b315aa955bbd7f4f45feba6aa31870a6312b96e41e1d","impliedFormat":1},{"version":"bf69ef0c80fc5b4ef6180f60a27f15e7379830554f1b7918a2e6a23ba5d55e8a","impliedFormat":1},{"version":"4abbcea4e9b3b7c19be3b45493b026808d2dd0c00587cdb52401a29ab863d1be","impliedFormat":1},{"version":"797f01675eaee5c0bc35c22a2bbcd88679298715e93726703fc8b71a06ad6722","impliedFormat":1},{"version":"6b08e6465a949f9cfa6d51e9c0d801e7410f9ee8d10dce6f6bb8cc7384e388de","impliedFormat":1},{"version":"5069a53c7ff1e8aae8614e6ade8641d229963b79a0056f869c50ec04a719b0a5","impliedFormat":1},{"version":"3e68c9a6afa32ca2ff9d9c6c5c65a1e0751041fecb88ce3e2cafe630dad6e729","impliedFormat":1},{"version":"14a2252388d22987a32f85607c5b118044d56e7554ec6afb71bd90f48f182984","impliedFormat":1},{"version":"4d7d964609a07368d076ce943b07106c5ebee8138c307d3273ba1cf3a0c3c751","impliedFormat":99},{"version":"0e48c1354203ba2ca366b62a0f22fec9e10c251d9d6420c6d435da1d079e6126","impliedFormat":99},{"version":"0662a451f0584bb3026340c3661c3a89774182976cd373eca502a1d3b5c7b580","impliedFormat":99},"7445eb3f8ed3cea1580fb98eb3b7defa8d617a53bda652ac5a12cb002dfd8855","110fb0b948ef5a9951448cdbd6a6c0aa013feee00cad330460d93d92945778e0","1bf7a2384bb16d95db6e101b13e8065bd2177e36584df562a850ce133885c7b7",{"version":"a1808524759d2dcd95a7a1e4c1dfaa3dfa229ae46eeee4afd7725d1c56b310ea","impliedFormat":99},{"version":"ac027505d8804b5edbb204b3bbd0ad0b7333167f294dbf0aaf96bbf6b54f3ab1","impliedFormat":99},{"version":"14f3380dc12b0e0479760e09c20510e7e9ad59e3bed08dc9ec97a6dae0fda38c","impliedFormat":99},{"version":"5bba9880981b8c034c386e973b85112be13cf2a4a9a893889917cce3438c5e3b","impliedFormat":99},{"version":"3ade6277bf6ec7058b5b9f17f7835f32b06d69f64518bb5e9f1678e91d58300b","impliedFormat":99},{"version":"3fc7549707b16e446c4abd99dfca51659fde345f78aaf4574e76a7ae5ba7fdf9","impliedFormat":99},{"version":"614d715898f5b29f670a818c003e2d13e08f3d86975296dbf3fae91589f48d3f","impliedFormat":99},{"version":"f81b75f2e10dd4e9c372891f28940c75d80a0102749f2fa77df56026704b9ac0","impliedFormat":99},{"version":"2f7eb69e23042b6d830d96f521650860f80e2abba7c8bb183924c8fac184a949","impliedFormat":99},{"version":"21a84ece5765e261b40ee23f3d7aceab1504b461d8fbbd7408061a7fc8a75253","impliedFormat":99},{"version":"04c21172aeacd03768016f29d2c4c01039b550497e97c80971735999de8bf298","impliedFormat":99},{"version":"691d3ab66bcb55791df0a47f1ff10f210fc5eb57abeb06d57e9f107c9a71e966","impliedFormat":99},{"version":"d7f4bab6a785836ffa182a89a4d784562255b05c82c79bf24fd841886967765e","impliedFormat":99},{"version":"c11e5a48bc60ccbaf45cad2ee95109fa1abbae1e240c32876a287d3c2b70b2ec","impliedFormat":99},{"version":"5f7980866d1cf435e6a262c16045a1598462d91456501fbf090d7a0c0e19ec8b","impliedFormat":99},{"version":"abbe2d270feea80fbf42e5c28fa020de81b9e9744c6f0280a548c4f285d3081d","impliedFormat":99},{"version":"327db1b08a08f87ef4f85e9104ad4ae6c1f594bfbbdbf1517feedbfb4eed8f3a","impliedFormat":99},{"version":"42424b8d641f6771ee76a4667d08219b753ccbc082ac414e9f47ffb94889cf92","impliedFormat":99},{"version":"b89f4b2da8fffe49147d700c95fb3bfabf6e09ec663aaa895ed2c5346d34e203","impliedFormat":99},{"version":"2a4bd33dd99927149c2f123b2a80bdbb18f6e3337a806e524e506ca55d20b74d","impliedFormat":99},{"version":"ef4823869c6a35f6632dadefcdb6ac2749c3b107b121f87338604aa3aecd8539","signature":"15ca5635e6616e38e55d8d15e59126efce4dc404fa2b4b72c91989150a4bc35e"},"5d4ad704a1cbe6ecfa700f23a245c04b05af16d1f751ea01dfdfa0b59d4db2a2","f65f2440b3128744ded6f0c986f4168ef78b7328ba0e9f72fb9448a323f2d8ee",{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},"eebcbbafcaaa44a4facfa6d421c2cb14b8867946246ce9ecc08ade660800dda8","e8b7c3931c4d1cb7be8d11fa495d54d9c218dbccddb2e2eeca507708e820da16","793fee2beb570e97dd32590a82fcc1743f614eb0d4930e533c118ae00b57fb64","0105618bb7b24ecc004b69887b4917abd013046f2083df371e11fe31a77444df","b3e0341ffe50833393d20ba2564c8ef28a8233662090b5f1264185886f0c008b","ee5fc1984b36fc49ef6d2fcffa02af96ca270112e18cad10e232c4f6a43d5939","9b7d977bd39293ab7e41c51192efd36fd12698c4e881521d11d7361c465b921b","755b711790fa2c8947768fbe3c5c26b868d2bf769e12723fb563f1f61a624e59","0aaf60e5d5c9469ed57a2f093c720f54b2dcd7c7d08b017a7cb9db329ddd72fd","89885400230583ff62726a4d3fa035a7105619ae6298fc34d1d80a2aceb3e0b8","73a5b42491c6fa6b2fddc02190ecf8098ae32522f747355590deaab6a494cd6c"],"root":[476,477,[624,626],[697,699],[720,722],[743,747]],"options":{"allowJs":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"jsx":1,"module":99,"noUncheckedIndexedAccess":true,"skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[595,1],[592,1],[562,2],[559,3],[577,4],[576,5],[579,6],[564,7],[580,5],[581,8],[583,9],[563,5],[587,10],[621,11],[560,12],[570,13],[565,5],[571,14],[594,9],[588,12],[589,15],[629,16],[630,16],[639,16],[640,16],[641,16],[642,16],[643,16],[644,16],[645,16],[646,16],[647,16],[648,16],[631,16],[649,16],[650,16],[651,16],[652,16],[653,16],[654,16],[655,16],[656,16],[657,16],[658,16],[632,16],[633,16],[634,16],[635,16],[636,16],[637,16],[638,16],[693,17],[590,18],[659,16],[660,16],[669,16],[670,16],[671,16],[672,16],[673,16],[674,16],[675,16],[676,16],[677,16],[678,16],[661,16],[679,16],[680,16],[681,16],[682,16],[683,16],[684,16],[685,16],[686,16],[687,16],[688,16],[662,16],[663,16],[664,16],[665,16],[666,16],[667,16],[668,16],[690,16],[692,1],[628,19],[627,12],[691,19],[689,20],[597,5],[598,21],[599,5],[582,5],[601,3],[602,22],[603,23],[604,24],[561,5],[574,25],[593,26],[605,27],[575,23],[566,5],[572,28],[606,29],[591,30],[584,9],[607,5],[609,31],[610,5],[557,32],[611,5],[612,5],[613,5],[614,9],[586,33],[615,9],[585,34],[608,35],[569,36],[616,37],[600,38],[617,39],[578,5],[618,5],[556,40],[619,41],[620,42],[573,43],[596,44],[558,12],[555,1],[540,45],[518,46],[520,47],[521,48],[522,1],[523,49],[519,46],[532,50],[536,1],[538,51],[533,1],[534,1],[535,52],[537,52],[539,53],[516,50],[515,50],[514,52],[513,1],[510,52],[525,52],[511,52],[512,1],[517,52],[527,54],[528,52],[530,50],[531,50],[529,55],[524,52],[526,1],[485,56],[487,56],[490,56],[486,56],[492,56],[488,56],[491,56],[489,56],[493,56],[494,56],[495,56],[496,56],[508,57],[504,56],[497,56],[498,56],[499,56],[505,56],[503,56],[500,56],[501,56],[502,56],[507,56],[506,56],[484,58],[509,59],[554,60],[547,61],[549,1],[550,61],[551,1],[552,61],[548,61],[553,62],[542,61],[543,61],[541,61],[545,63],[544,63],[546,12],[483,64],[481,65],[482,65],[480,66],[478,1],[479,1],[224,1],[714,67],[713,1],[700,1],[719,68],[703,1],[702,69],[705,70],[718,69],[704,69],[707,71],[712,72],[708,73],[711,74],[710,74],[709,74],[706,69],[716,75],[715,1],[701,1],[717,1],[121,76],[122,76],[123,77],[76,78],[124,79],[125,80],[126,81],[71,1],[74,82],[72,1],[73,1],[127,83],[128,84],[129,85],[130,86],[131,87],[132,88],[133,88],[134,89],[135,90],[136,91],[137,92],[77,1],[75,1],[138,93],[139,94],[140,95],[174,96],[141,97],[142,1],[143,98],[144,99],[145,100],[146,101],[147,102],[148,103],[149,104],[150,105],[151,106],[152,106],[153,107],[154,1],[155,108],[156,109],[158,110],[157,111],[159,112],[160,113],[161,114],[162,115],[163,116],[164,117],[165,118],[166,119],[167,120],[168,121],[169,122],[170,123],[171,124],[78,1],[79,1],[80,1],[118,125],[119,1],[120,1],[172,126],[173,127],[178,128],[334,12],[179,129],[177,130],[336,131],[335,132],[175,133],[332,1],[176,134],[60,1],[62,135],[331,12],[242,12],[61,1],[568,1],[69,136],[423,137],[428,138],[430,139],[200,140],[228,141],[406,142],[223,143],[211,1],[192,1],[198,1],[396,144],[259,145],[199,1],[365,146],[233,147],[234,148],[330,149],[393,150],[348,151],[400,152],[401,153],[399,154],[398,1],[397,155],[230,156],[201,157],[280,1],[281,158],[196,1],[212,159],[202,160],[264,159],[261,159],[185,159],[226,161],[225,1],[405,162],[415,1],[191,1],[306,163],[307,164],[301,12],[451,1],[309,1],[310,165],[302,166],[457,167],[455,168],[450,1],[392,169],[391,1],[449,170],[303,12],[344,171],[342,172],[452,1],[456,1],[454,173],[453,1],[343,174],[444,175],[447,176],[271,177],[270,178],[269,179],[460,12],[268,180],[253,1],[463,1],[466,1],[465,12],[467,181],[181,1],[402,182],[403,183],[404,184],[214,1],[190,185],[180,1],[322,12],[183,186],[321,187],[320,188],[311,1],[312,1],[319,1],[314,1],[317,189],[313,1],[315,190],[318,191],[316,190],[197,1],[188,1],[189,159],[243,192],[244,193],[241,194],[239,195],[240,196],[236,1],[328,165],[350,165],[422,197],[431,198],[435,199],[409,200],[408,1],[256,1],[468,201],[418,202],[304,203],[305,204],[296,205],[286,1],[327,206],[287,207],[329,208],[324,209],[323,1],[325,1],[341,210],[410,211],[411,212],[289,213],[293,214],[284,215],[388,216],[417,217],[263,218],[366,219],[186,220],[416,221],[182,143],[237,1],[245,222],[377,223],[235,1],[376,224],[70,1],[371,225],[213,1],[282,226],[367,1],[187,1],[246,1],[375,227],[195,1],[251,228],[292,229],[407,230],[291,1],[374,1],[238,1],[379,231],[380,232],[193,1],[382,233],[384,234],[383,235],[216,1],[373,220],[386,236],[372,237],[378,238],[204,1],[207,1],[205,1],[209,1],[206,1],[208,1],[210,239],[203,1],[358,240],[357,1],[363,241],[359,242],[362,243],[361,243],[364,241],[360,242],[250,244],[351,245],[414,246],[470,1],[439,247],[441,248],[288,1],[440,249],[412,211],[469,250],[308,211],[194,1],[290,251],[247,252],[248,253],[249,254],[279,255],[387,255],[265,255],[352,256],[266,256],[232,257],[231,1],[356,258],[355,259],[354,260],[353,261],[413,262],[300,263],[338,264],[299,265],[333,266],[337,267],[395,268],[394,269],[390,270],[347,271],[349,272],[346,273],[385,274],[340,1],[427,1],[339,275],[389,1],[252,276],[285,182],[283,277],[254,278],[257,279],[464,1],[255,280],[258,280],[425,1],[424,1],[426,1],[462,1],[260,281],[298,12],[68,1],[345,282],[229,1],[218,283],[294,1],[433,12],[443,284],[278,12],[437,165],[277,285],[420,286],[276,284],[184,1],[445,287],[274,12],[275,12],[267,1],[217,1],[273,288],[272,289],[215,290],[295,105],[262,105],[381,1],[369,291],[368,1],[429,1],[326,292],[297,12],[421,293],[63,12],[66,294],[67,295],[64,12],[65,1],[227,296],[222,297],[221,1],[220,298],[219,1],[419,299],[432,300],[434,301],[436,302],[438,303],[442,304],[446,305],[475,306],[448,307],[458,308],[459,309],[461,310],[471,311],[474,185],[473,1],[472,312],[370,313],[567,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[96,314],[106,315],[95,314],[116,316],[87,317],[86,318],[115,312],[109,319],[114,320],[89,321],[103,322],[88,323],[112,324],[84,325],[83,312],[113,326],[85,327],[90,328],[91,1],[94,328],[81,1],[117,329],[107,330],[98,331],[99,332],[101,333],[97,334],[100,335],[110,312],[92,336],[93,337],[102,338],[82,339],[105,330],[104,328],[108,1],[111,340],[736,341],[728,342],[735,343],[730,1],[731,1],[729,344],[732,345],[723,1],[724,1],[725,341],[727,346],[733,1],[734,347],[726,348],[696,349],[695,350],[694,1],[476,351],[747,352],[625,353],[626,1],[624,354],[721,355],[722,356],[746,357],[699,358],[745,359],[720,360],[743,361],[744,362],[477,1],[697,363],[698,363],[741,364],[742,365],[738,1],[740,366],[737,367],[739,368],[623,369],[622,370]],"affectedFilesPendingEmit":[476,747,625,626,624,721,722,746,699,745,720,743,744,477,697,698],"version":"5.9.3"} \ No newline at end of file diff --git a/packages/diff-engine/__tests__/engine.test.ts b/packages/diff-engine/__tests__/engine.test.ts new file mode 100644 index 0000000..59f1ed9 --- /dev/null +++ b/packages/diff-engine/__tests__/engine.test.ts @@ -0,0 +1,133 @@ +import { describe, it, expect } from 'vitest'; +import { computeDiff, diffComponents } from '../src/engine.js'; +import type { ComponentSnapshot } from '../src/schemas.js'; + +const btn: ComponentSnapshot = { + id: 'btn-1', + name: 'Button', + filePath: 'src/components/Button.tsx', + props: { variant: 'primary', size: 'md', disabled: false }, + styles: { background: '#0066FF', borderRadius: '8px' }, +}; + +describe('computeDiff', () => { + it('marks unchanged when nothing changed', () => { + const d = computeDiff(btn, btn); + expect(d.changeType).toBe('unchanged'); + expect(d.propChanges).toHaveLength(0); + expect(d.styleChanges).toHaveLength(0); + expect(d.patch).toBe(''); + }); + + it('detects modified prop', () => { + const after = { ...btn, props: { ...btn.props, size: 'lg' } }; + const d = computeDiff(btn, after); + expect(d.changeType).toBe('modified'); + const change = d.propChanges.find(c => c.key === 'size'); + expect(change?.before).toBe('md'); + expect(change?.after).toBe('lg'); + expect(change?.changeType).toBe('modified'); + }); + + it('detects added prop', () => { + const after = { ...btn, props: { ...btn.props, loading: true } }; + const d = computeDiff(btn, after); + const change = d.propChanges.find(c => c.key === 'loading'); + expect(change?.changeType).toBe('added'); + expect(change?.before).toBeUndefined(); + expect(change?.after).toBe(true); + }); + + it('detects removed prop', () => { + const { disabled: _, ...remaining } = btn.props; + const after = { ...btn, props: remaining }; + const d = computeDiff(btn, after); + const change = d.propChanges.find(c => c.key === 'disabled'); + expect(change?.changeType).toBe('removed'); + expect(change?.before).toBe(false); + expect(change?.after).toBeUndefined(); + }); + + it('detects style change', () => { + const after = { ...btn, styles: { ...btn.styles, borderRadius: '12px' } }; + const d = computeDiff(btn, after); + const change = d.styleChanges.find(c => c.key === 'borderRadius'); + expect(change?.before).toBe('8px'); + expect(change?.after).toBe('12px'); + }); + + it('generates a non-empty patch when changed', () => { + const after = { ...btn, props: { ...btn.props, size: 'xl' } }; + const d = computeDiff(btn, after); + expect(d.patch).toBeTruthy(); + expect(d.patch).toContain('--- a/'); + expect(d.patch).toContain('+++ b/'); + }); + + it('propagates id and name from after snapshot', () => { + const d = computeDiff(btn, { ...btn, name: 'IconButton' }); + expect(d.name).toBe('IconButton'); + expect(d.id).toBe(btn.id); + }); + + it('deep-equal objects are unchanged', () => { + const snap: ComponentSnapshot = { + id: 'x', + name: 'X', + props: { config: { a: 1, b: [2, 3] } }, + }; + const d = computeDiff(snap, { ...snap, props: { config: { a: 1, b: [2, 3] } } }); + expect(d.changeType).toBe('unchanged'); + }); + + it('deep-equal objects with different value are modified', () => { + const snap: ComponentSnapshot = { + id: 'x', + name: 'X', + props: { config: { a: 1, b: [2, 3] } }, + }; + const d = computeDiff(snap, { ...snap, props: { config: { a: 1, b: [2, 99] } } }); + expect(d.changeType).toBe('modified'); + }); + + it('handles added child', () => { + const child: ComponentSnapshot = { id: 'c1', name: 'Icon', props: { name: 'check' } }; + const before: ComponentSnapshot = { id: 'x', name: 'X', props: {}, children: [] }; + const after: ComponentSnapshot = { ...before, children: [child] }; + const d = computeDiff(before, after); + expect(d.childDiffs).toBeDefined(); + expect(d.childDiffs![0]?.changeType).toBe('added'); + }); + + it('handles removed child', () => { + const child: ComponentSnapshot = { id: 'c1', name: 'Icon', props: { name: 'check' } }; + const before: ComponentSnapshot = { id: 'x', name: 'X', props: {}, children: [child] }; + const after: ComponentSnapshot = { ...before, children: [] }; + const d = computeDiff(before, after); + expect(d.childDiffs).toBeDefined(); + expect(d.childDiffs![0]?.changeType).toBe('removed'); + }); + + it('omits childDiffs when no child changes', () => { + const child: ComponentSnapshot = { id: 'c1', name: 'Icon', props: { name: 'check' } }; + const snap: ComponentSnapshot = { id: 'x', name: 'X', props: {}, children: [child] }; + const d = computeDiff(snap, snap); + expect(d.childDiffs).toBeUndefined(); + }); +}); + +describe('diffComponents', () => { + it('returns diff and patch at top level', () => { + const after = { ...btn, props: { ...btn.props, size: 'xl' } }; + const result = diffComponents(btn, after); + expect(result.diff.changeType).toBe('modified'); + expect(result.patch).toBe(result.diff.patch); + expect(result.patch).toBeTruthy(); + }); + + it('patch and diff.patch are identical', () => { + const result = diffComponents(btn, btn); + expect(result.patch).toBe(''); + expect(result.diff.patch).toBe(''); + }); +}); diff --git a/packages/diff-engine/__tests__/myers.test.ts b/packages/diff-engine/__tests__/myers.test.ts new file mode 100644 index 0000000..736c477 --- /dev/null +++ b/packages/diff-engine/__tests__/myers.test.ts @@ -0,0 +1,73 @@ +import { describe, it, expect } from 'vitest'; +import { computeEditScript } from '../src/myers.js'; + +describe('computeEditScript', () => { + it('returns empty for two empty arrays', () => { + expect(computeEditScript([], [])).toEqual([]); + }); + + it('returns all-insert for empty before', () => { + const ops = computeEditScript([], ['a', 'b']); + expect(ops).toEqual([{ type: 'insert', lines: ['a', 'b'] }]); + }); + + it('returns all-delete for empty after', () => { + const ops = computeEditScript(['a', 'b'], []); + expect(ops).toEqual([{ type: 'delete', lines: ['a', 'b'] }]); + }); + + it('returns all-equal for identical arrays', () => { + const ops = computeEditScript(['a', 'b', 'c'], ['a', 'b', 'c']); + expect(ops).toEqual([{ type: 'equal', lines: ['a', 'b', 'c'] }]); + }); + + it('detects a single changed line', () => { + const ops = computeEditScript(['a', 'b', 'c'], ['a', 'X', 'c']); + const types = ops.map(o => o.type); + expect(types).toContain('delete'); + expect(types).toContain('insert'); + const deleted = ops.filter(o => o.type === 'delete').flatMap(o => o.lines); + const inserted = ops.filter(o => o.type === 'insert').flatMap(o => o.lines); + expect(deleted).toContain('b'); + expect(inserted).toContain('X'); + }); + + it('detects inserted lines at end', () => { + const ops = computeEditScript(['a'], ['a', 'b', 'c']); + const inserted = ops.filter(o => o.type === 'insert').flatMap(o => o.lines); + expect(inserted).toEqual(['b', 'c']); + }); + + it('detects deleted lines at start', () => { + const ops = computeEditScript(['x', 'y', 'a'], ['a']); + const deleted = ops.filter(o => o.type === 'delete').flatMap(o => o.lines); + expect(deleted).toEqual(['x', 'y']); + }); + + it('merges consecutive ops of same type', () => { + const ops = computeEditScript(['a', 'b'], ['c', 'd']); + // Should have merged deletes and inserts, not one-op-per-line + const delOp = ops.find(o => o.type === 'delete'); + const insOp = ops.find(o => o.type === 'insert'); + expect(delOp?.lines.length).toBeGreaterThanOrEqual(1); + expect(insOp?.lines.length).toBeGreaterThanOrEqual(1); + }); + + it('round-trip: applying ops to before yields after', () => { + const before = ['prop: 1', 'style: red', 'size: md']; + const after = ['prop: 1', 'style: blue', 'size: lg', 'weight: 600']; + const ops = computeEditScript(before, after); + + const result: string[] = []; + for (const op of ops) { + if (op.type === 'equal' || op.type === 'insert') result.push(...op.lines); + } + expect(result).toEqual(after); + }); + + it('handles single-element change', () => { + const ops = computeEditScript(['x'], ['y']); + expect(ops.some(o => o.type === 'delete' && o.lines.includes('x'))).toBe(true); + expect(ops.some(o => o.type === 'insert' && o.lines.includes('y'))).toBe(true); + }); +}); diff --git a/packages/diff-engine/__tests__/patch.test.ts b/packages/diff-engine/__tests__/patch.test.ts new file mode 100644 index 0000000..004146a --- /dev/null +++ b/packages/diff-engine/__tests__/patch.test.ts @@ -0,0 +1,90 @@ +import { describe, it, expect } from 'vitest'; +import { generatePatch } from '../src/patch.js'; + +const A = `Component: Button +Props: + size: "md" + variant: "primary" +Styles: + background: #0066FF + borderRadius: 8px +`; + +const B = `Component: Button +Props: + size: "lg" + variant: "primary" +Styles: + background: #0066FF + borderRadius: 12px +`; + +describe('generatePatch', () => { + it('returns empty string for identical inputs', () => { + expect(generatePatch(A, A)).toBe(''); + }); + + it('returns empty string for two empty strings', () => { + expect(generatePatch('', '')).toBe(''); + }); + + it('includes --- and +++ headers', () => { + const patch = generatePatch(A, B); + expect(patch).toMatch(/^--- a\//m); + expect(patch).toMatch(/^\+\+\+ b\//m); + }); + + it('includes @@ hunk header', () => { + const patch = generatePatch(A, B); + expect(patch).toMatch(/^@@ /m); + }); + + it('marks changed lines correctly', () => { + const patch = generatePatch(A, B); + expect(patch).toContain('- size: "md"'); + expect(patch).toContain('+ size: "lg"'); + expect(patch).toContain('- borderRadius: 8px'); + expect(patch).toContain('+ borderRadius: 12px'); + }); + + it('preserves unchanged lines as context', () => { + const patch = generatePatch(A, B); + expect(patch).toContain(' variant: "primary"'); + }); + + it('uses custom filename in headers', () => { + const patch = generatePatch(A, B, { filename: 'Button.tsx' }); + expect(patch).toContain('--- a/Button.tsx'); + expect(patch).toContain('+++ b/Button.tsx'); + }); + + it('handles all-insert (empty before)', () => { + const patch = generatePatch('', 'line1\nline2\n'); + expect(patch).toContain('+line1'); + expect(patch).toContain('+line2'); + }); + + it('handles all-delete (empty after)', () => { + const patch = generatePatch('line1\nline2\n', ''); + expect(patch).toContain('-line1'); + expect(patch).toContain('-line2'); + }); + + it('produces multiple hunks when changes are far apart', () => { + const before = Array.from({ length: 20 }, (_, i) => `line${i}`).join('\n') + '\n'; + const after = before + .replace('line0', 'CHANGED0') + .replace('line19', 'CHANGED19'); + const patch = generatePatch(before, after); + const hunkCount = (patch.match(/^@@/gm) ?? []).length; + expect(hunkCount).toBe(2); + }); + + it('merges nearby hunks into one', () => { + const before = Array.from({ length: 10 }, (_, i) => `line${i}`).join('\n') + '\n'; + const after = before.replace('line0', 'X').replace('line1', 'Y'); + const patch = generatePatch(before, after); + const hunkCount = (patch.match(/^@@/gm) ?? []).length; + expect(hunkCount).toBe(1); + }); +}); diff --git a/packages/diff-engine/__tests__/serialize.test.ts b/packages/diff-engine/__tests__/serialize.test.ts new file mode 100644 index 0000000..6e78279 --- /dev/null +++ b/packages/diff-engine/__tests__/serialize.test.ts @@ -0,0 +1,80 @@ +import { describe, it, expect } from 'vitest'; +import { serializeSnapshot, serializeValue } from '../src/serialize.js'; +import type { ComponentSnapshot } from '../src/schemas.js'; + +const snap: ComponentSnapshot = { + id: 'btn-1', + name: 'Button', + filePath: 'src/components/Button.tsx', + props: { variant: 'primary', size: 'md', disabled: false }, + styles: { borderRadius: '8px', background: '#0066FF' }, +}; + +describe('serializeSnapshot', () => { + it('includes component name and filePath', () => { + const out = serializeSnapshot(snap); + expect(out).toContain('Component: Button [src/components/Button.tsx]'); + }); + + it('sorts props alphabetically for stable diffs', () => { + const out = serializeSnapshot(snap); + const propLines = out.split('\n').filter(l => l.includes(':') && !l.includes('Component')); + const propNames = propLines + .map(l => l.trim().split(':')[0]!.trim()) + .filter(k => ['disabled', 'size', 'variant', 'background', 'borderRadius'].includes(k)); + // disabled < size < variant (alphabetical) + const dIdx = propNames.indexOf('disabled'); + const sIdx = propNames.indexOf('size'); + const vIdx = propNames.indexOf('variant'); + expect(dIdx).toBeLessThan(sIdx); + expect(sIdx).toBeLessThan(vIdx); + }); + + it('sorts styles alphabetically', () => { + const out = serializeSnapshot(snap); + const bgIdx = out.indexOf('background:'); + const brIdx = out.indexOf('borderRadius:'); + expect(bgIdx).toBeLessThan(brIdx); + }); + + it('produces identical output for same input (deterministic)', () => { + expect(serializeSnapshot(snap)).toBe(serializeSnapshot(snap)); + }); + + it('handles component without filePath', () => { + const out = serializeSnapshot({ id: 'x', name: 'Foo', props: {} }); + expect(out).toBe('Component: Foo'); + }); + + it('handles empty props and styles', () => { + const out = serializeSnapshot({ id: 'x', name: 'Foo', props: {}, styles: {} }); + expect(out).not.toContain('Props:'); + expect(out).not.toContain('Styles:'); + }); + + it('serializes nested children', () => { + const withChild: ComponentSnapshot = { + ...snap, + children: [{ id: 'icon', name: 'Icon', props: { name: 'check' } }], + }; + const out = serializeSnapshot(withChild); + expect(out).toContain('Children:'); + expect(out).toContain('[0]'); + expect(out).toContain('Component: Icon'); + }); +}); + +describe('serializeValue', () => { + it('wraps strings in quotes', () => expect(serializeValue('hello')).toBe('"hello"')); + it('renders numbers as-is', () => expect(serializeValue(42)).toBe('42')); + it('renders booleans', () => { + expect(serializeValue(true)).toBe('true'); + expect(serializeValue(false)).toBe('false'); + }); + it('renders null', () => expect(serializeValue(null)).toBe('null')); + it('renders undefined', () => expect(serializeValue(undefined)).toBe('undefined')); + it('renders arrays', () => expect(serializeValue([1, 'a'])).toBe('[1, "a"]')); + it('renders objects with sorted keys', () => { + expect(serializeValue({ z: 1, a: 2 })).toBe('{ a: 2, z: 1 }'); + }); +}); diff --git a/packages/diff-engine/package.json b/packages/diff-engine/package.json index 4bb9776..cb91431 100644 --- a/packages/diff-engine/package.json +++ b/packages/diff-engine/package.json @@ -11,11 +11,12 @@ "test": "vitest run --coverage" }, "dependencies": { + "@pierre/diffs": "^1.1.19", "zod": "^3.0.0" }, "devDependencies": { + "@vitest/coverage-v8": "^2.0.0", "typescript": "^5.5.0", - "vitest": "^2.0.0", - "@vitest/coverage-v8": "^2.0.0" + "vitest": "^2.0.0" } } diff --git a/packages/diff-engine/src/engine.ts b/packages/diff-engine/src/engine.ts new file mode 100644 index 0000000..5167481 --- /dev/null +++ b/packages/diff-engine/src/engine.ts @@ -0,0 +1,185 @@ +import type { ComponentSnapshot, ComponentDiff, PropChange, ChangeType } from './schemas.js'; +import { serializeSnapshot } from './serialize.js'; +import { generatePatch } from './patch.js'; + +// ── Core diff result ────────────────────────────────────────────────────────── + +export interface DiffResult { + diff: ComponentDiff; + patch: string; +} + +// ── Public API ──────────────────────────────────────────────────────────────── + +export function diffComponents( + before: ComponentSnapshot, + after: ComponentSnapshot +): DiffResult { + const diff = computeDiff(before, after); + return { diff, patch: diff.patch }; +} + +export function computeDiff( + before: ComponentSnapshot, + after: ComponentSnapshot +): ComponentDiff { + const propChanges = diffRecord(before.props, after.props); + const styleChanges = diffRecord( + before.styles ?? {}, + after.styles ?? {} + ) as PropChange[]; + + const changeType = determineChangeType(propChanges, styleChanges); + + const childDiffs = diffChildren(before.children ?? [], after.children ?? []); + + const beforeText = serializeSnapshot(before); + const afterText = serializeSnapshot(after); + const filename = after.filePath ?? `${after.name}.tsx`; + const patch = generatePatch(beforeText, afterText, { filename }); + + const result: ComponentDiff = { + id: after.id, + name: after.name, + changeType, + propChanges, + styleChanges, + patch, + }; + if (childDiffs.length > 0) result.childDiffs = childDiffs; + return result; +} + +// ── Helpers ─────────────────────────────────────────────────────────────────── + +function diffRecord( + before: Record, + after: Record +): PropChange[] { + const keys = new Set([...Object.keys(before), ...Object.keys(after)]); + const changes: PropChange[] = []; + + for (const key of [...keys].sort()) { + const b = before[key]; + const a = after[key]; + const hadKey = Object.prototype.hasOwnProperty.call(before, key); + const hasKey = Object.prototype.hasOwnProperty.call(after, key); + + if (!hadKey) { + changes.push({ key, before: undefined, after: a, changeType: 'added' }); + } else if (!hasKey) { + changes.push({ key, before: b, after: undefined, changeType: 'removed' }); + } else if (!deepEqual(b, a)) { + changes.push({ key, before: b, after: a, changeType: 'modified' }); + } + } + + return changes; +} + +function diffChildren( + before: ComponentSnapshot[], + after: ComponentSnapshot[] +): ComponentDiff[] { + const diffs: ComponentDiff[] = []; + + // Match by id first; fall back to positional match + const beforeById = new Map(before.map(c => [c.id, c])); + const afterById = new Map(after.map(c => [c.id, c])); + + // Modified or unchanged children that exist in both + for (const afterChild of after) { + const beforeChild = beforeById.get(afterChild.id); + if (beforeChild) { + const d = computeDiff(beforeChild, afterChild); + if (d.changeType !== 'unchanged') diffs.push(d); + } else { + // Added child + diffs.push(addedDiff(afterChild)); + } + } + + // Removed children + for (const beforeChild of before) { + if (!afterById.has(beforeChild.id)) { + diffs.push(removedDiff(beforeChild)); + } + } + + return diffs; +} + +function addedDiff(snap: ComponentSnapshot): ComponentDiff { + const props = Object.keys(snap.props).sort().map(key => ({ + key, + before: undefined as unknown, + after: snap.props[key], + changeType: 'added' as ChangeType, + })); + const styles = Object.keys(snap.styles ?? {}).sort().map(key => ({ + key, + before: undefined as unknown, + after: snap.styles![key], + changeType: 'added' as ChangeType, + })); + return { + id: snap.id, + name: snap.name, + changeType: 'added', + propChanges: props, + styleChanges: styles, + patch: generatePatch('', serializeSnapshot(snap), { filename: snap.name }), + }; +} + +function removedDiff(snap: ComponentSnapshot): ComponentDiff { + const props = Object.keys(snap.props).sort().map(key => ({ + key, + before: snap.props[key], + after: undefined as unknown, + changeType: 'removed' as ChangeType, + })); + const styles = Object.keys(snap.styles ?? {}).sort().map(key => ({ + key, + before: snap.styles![key] as unknown, + after: undefined as unknown, + changeType: 'removed' as ChangeType, + })); + return { + id: snap.id, + name: snap.name, + changeType: 'removed', + propChanges: props, + styleChanges: styles, + patch: generatePatch(serializeSnapshot(snap), '', { filename: snap.name }), + }; +} + +function determineChangeType( + propChanges: PropChange[], + styleChanges: PropChange[] +): ChangeType { + const hasChanges = propChanges.length > 0 || styleChanges.length > 0; + return hasChanges ? 'modified' : 'unchanged'; +} + +function deepEqual(a: unknown, b: unknown): boolean { + if (a === b) return true; + if (a === null || b === null) return false; + if (typeof a !== typeof b) return false; + if (typeof a !== 'object') return false; + if (Array.isArray(a) !== Array.isArray(b)) return false; + + if (Array.isArray(a) && Array.isArray(b)) { + if (a.length !== b.length) return false; + return a.every((v, i) => deepEqual(v, b[i])); + } + + const ao = a as Record; + const bo = b as Record; + const aKeys = Object.keys(ao).sort(); + const bKeys = Object.keys(bo).sort(); + if (aKeys.length !== bKeys.length) return false; + if (aKeys.join(',') !== bKeys.join(',')) return false; + return aKeys.every(k => deepEqual(ao[k], bo[k])); +} diff --git a/packages/diff-engine/src/index.ts b/packages/diff-engine/src/index.ts index cb0ff5c..e168da1 100644 --- a/packages/diff-engine/src/index.ts +++ b/packages/diff-engine/src/index.ts @@ -1 +1,25 @@ -export {}; +// @originmain/diff-engine — public API + +export type { + ComponentSnapshot, + ComponentDiff, + PropChange, + ChangeType, + DiffLayout, +} from './schemas.js'; + +export { + ComponentSnapshotSchema, + ComponentDiffSchema, + PropChangeSchema, + ChangeTypeSchema, + DiffLayoutSchema, +} from './schemas.js'; + +export { computeEditScript, type EditOp, type EditType } from './myers.js'; + +export { serializeSnapshot, serializeValue } from './serialize.js'; + +export { generatePatch, type PatchOptions } from './patch.js'; + +export { diffComponents, computeDiff, type DiffResult } from './engine.js'; diff --git a/packages/diff-engine/src/myers.ts b/packages/diff-engine/src/myers.ts new file mode 100644 index 0000000..7cf7dee --- /dev/null +++ b/packages/diff-engine/src/myers.ts @@ -0,0 +1,62 @@ +// LCS-based O(nm) diff algorithm — correct and simple for component-sized inputs. +// Produces a minimal edit script as a sequence of equal/insert/delete operations. + +export type EditType = 'equal' | 'insert' | 'delete'; + +export interface EditOp { + type: EditType; + lines: string[]; +} + +export function computeEditScript(before: string[], after: string[]): EditOp[] { + const n = before.length; + const m = after.length; + + if (n === 0 && m === 0) return []; + if (n === 0) return [{ type: 'insert', lines: [...after] }]; + if (m === 0) return [{ type: 'delete', lines: [...before] }]; + + // Build LCS DP table + const dp: number[][] = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0)); + for (let i = 1; i <= n; i++) { + for (let j = 1; j <= m; j++) { + dp[i]![j] = + before[i - 1] === after[j - 1] + ? (dp[i - 1]![j - 1] ?? 0) + 1 + : Math.max(dp[i - 1]![j] ?? 0, dp[i]![j - 1] ?? 0); + } + } + + // Backtrack from (n, m) to (0, 0) + type RawOp = { type: EditType; line: string }; + const raw: RawOp[] = []; + let i = n, j = m; + + while (i > 0 || j > 0) { + if (i > 0 && j > 0 && before[i - 1] === after[j - 1]) { + raw.push({ type: 'equal', line: before[i - 1]! }); + i--; j--; + } else if (j > 0 && (i === 0 || (dp[i]![j - 1] ?? 0) >= (dp[i - 1]![j] ?? 0))) { + raw.push({ type: 'insert', line: after[j - 1]! }); + j--; + } else { + raw.push({ type: 'delete', line: before[i - 1]! }); + i--; + } + } + + raw.reverse(); + + // Merge consecutive ops of the same type + const ops: EditOp[] = []; + for (const op of raw) { + const last = ops[ops.length - 1]; + if (last && last.type === op.type) { + last.lines.push(op.line); + } else { + ops.push({ type: op.type, lines: [op.line] }); + } + } + + return ops; +} diff --git a/packages/diff-engine/src/patch.ts b/packages/diff-engine/src/patch.ts new file mode 100644 index 0000000..fc38e7f --- /dev/null +++ b/packages/diff-engine/src/patch.ts @@ -0,0 +1,114 @@ +import { computeEditScript, type EditOp } from './myers.js'; + +// ── Flat line representation ────────────────────────────────────────────────── + +interface FlatLine { + type: 'equal' | 'insert' | 'delete'; + content: string; + beforeIdx: number; // 1-based; -1 for pure insertions + afterIdx: number; // 1-based; -1 for pure deletions +} + +function flattenOps(ops: EditOp[]): FlatLine[] { + const lines: FlatLine[] = []; + let b = 1, a = 1; + + for (const op of ops) { + for (const content of op.lines) { + if (op.type === 'equal') { + lines.push({ type: 'equal', content, beforeIdx: b++, afterIdx: a++ }); + } else if (op.type === 'delete') { + lines.push({ type: 'delete', content, beforeIdx: b++, afterIdx: -1 }); + } else { + lines.push({ type: 'insert', content, beforeIdx: -1, afterIdx: a++ }); + } + } + } + + return lines; +} + +// ── Hunk grouping ───────────────────────────────────────────────────────────── + +interface Hunk { + flatStart: number; + flatEnd: number; +} + +function buildHunks(flat: FlatLine[], context: number): Hunk[] { + const changed = flat.reduce((acc, l, i) => { + if (l.type !== 'equal') acc.push(i); + return acc; + }, []); + + if (changed.length === 0) return []; + + const hunks: Hunk[] = []; + let start = Math.max(0, changed[0]! - context); + let end = Math.min(flat.length - 1, changed[0]! + context); + + for (let i = 1; i < changed.length; i++) { + const ns = Math.max(0, changed[i]! - context); + if (ns <= end + 1) { + end = Math.min(flat.length - 1, changed[i]! + context); + } else { + hunks.push({ flatStart: start, flatEnd: end }); + start = ns; + end = Math.min(flat.length - 1, changed[i]! + context); + } + } + hunks.push({ flatStart: start, flatEnd: end }); + + return hunks; +} + +// ── Patch generation ────────────────────────────────────────────────────────── + +export interface PatchOptions { + filename?: string; + contextLines?: number; +} + +export function generatePatch( + beforeText: string, + afterText: string, + opts: PatchOptions = {} +): string { + const { filename = 'component', contextLines = 3 } = opts; + + const before = splitLines(beforeText); + const after = splitLines(afterText); + + if (before.join('\n') === after.join('\n')) return ''; + + const ops = computeEditScript(before, after); + const flat = flattenOps(ops); + const hunks = buildHunks(flat, contextLines); + + if (hunks.length === 0) return ''; + + const out: string[] = [`--- a/${filename}`, `+++ b/${filename}`]; + + for (const hunk of hunks) { + const hunkLines = flat.slice(hunk.flatStart, hunk.flatEnd + 1); + + const beforeStart = hunkLines.find(l => l.beforeIdx !== -1)?.beforeIdx ?? 1; + const afterStart = hunkLines.find(l => l.afterIdx !== -1)?.afterIdx ?? 1; + const beforeCount = hunkLines.filter(l => l.type !== 'insert').length; + const afterCount = hunkLines.filter(l => l.type !== 'delete').length; + + out.push(`@@ -${beforeStart},${beforeCount} +${afterStart},${afterCount} @@`); + + for (const line of hunkLines) { + if (line.type === 'equal') out.push(` ${line.content}`); + else if (line.type === 'delete') out.push(`-${line.content}`); + else out.push(`+${line.content}`); + } + } + + return out.join('\n') + '\n'; +} + +function splitLines(text: string): string[] { + return text === '' ? [] : text.split('\n').filter((_, i, arr) => i < arr.length - 1 || arr[arr.length - 1] !== ''); +} diff --git a/packages/diff-engine/src/schemas.ts b/packages/diff-engine/src/schemas.ts new file mode 100644 index 0000000..6089027 --- /dev/null +++ b/packages/diff-engine/src/schemas.ts @@ -0,0 +1,65 @@ +import { z } from 'zod'; + +// ── Component snapshot ──────────────────────────────────────────────────────── + +export interface ComponentSnapshot { + id: string; + name: string; + filePath?: string; + props: Record; + styles?: Record; + children?: ComponentSnapshot[]; +} + +export const ComponentSnapshotSchema: z.ZodType = z.lazy(() => + z.object({ + id: z.string(), + name: z.string(), + filePath: z.string().optional(), + props: z.record(z.unknown()), + styles: z.record(z.string()).optional(), + children: z.array(ComponentSnapshotSchema).optional(), + }) +) as z.ZodType; + +// ── Change types ────────────────────────────────────────────────────────────── + +export const ChangeTypeSchema = z.enum(['added', 'removed', 'modified', 'unchanged']); +export type ChangeType = z.infer; + +export const PropChangeSchema = z.object({ + key: z.string(), + before: z.unknown(), + after: z.unknown(), + changeType: ChangeTypeSchema, +}); +export type PropChange = z.infer; + +// ── Component diff ──────────────────────────────────────────────────────────── + +export interface ComponentDiff { + id: string; + name: string; + changeType: ChangeType; + propChanges: PropChange[]; + styleChanges: PropChange[]; + patch: string; + childDiffs?: ComponentDiff[]; +} + +export const ComponentDiffSchema: z.ZodType = z.lazy(() => + z.object({ + id: z.string(), + name: z.string(), + changeType: ChangeTypeSchema, + propChanges: z.array(PropChangeSchema), + styleChanges: z.array(PropChangeSchema), + patch: z.string(), + childDiffs: z.array(ComponentDiffSchema).optional(), + }) +) as z.ZodType; + +// ── Layout ──────────────────────────────────────────────────────────────────── + +export const DiffLayoutSchema = z.enum(['split', 'unified']); +export type DiffLayout = z.infer; diff --git a/packages/diff-engine/src/serialize.ts b/packages/diff-engine/src/serialize.ts new file mode 100644 index 0000000..fce296d --- /dev/null +++ b/packages/diff-engine/src/serialize.ts @@ -0,0 +1,58 @@ +import type { ComponentSnapshot } from './schemas.js'; + +// Stable text serialization of a component snapshot. +// Props are sorted alphabetically so diffs are determined by value changes, not key ordering. + +export function serializeSnapshot(snapshot: ComponentSnapshot, depth = 0): string { + const indent = ' '.repeat(depth); + const lines: string[] = []; + + const header = snapshot.filePath + ? `Component: ${snapshot.name} [${snapshot.filePath}]` + : `Component: ${snapshot.name}`; + lines.push(`${indent}${header}`); + + // Props section + const propKeys = Object.keys(snapshot.props).sort(); + if (propKeys.length > 0) { + lines.push(`${indent}Props:`); + for (const key of propKeys) { + lines.push(`${indent} ${key}: ${serializeValue(snapshot.props[key])}`); + } + } + + // Styles section + const styleKeys = snapshot.styles ? Object.keys(snapshot.styles).sort() : []; + if (styleKeys.length > 0) { + lines.push(`${indent}Styles:`); + for (const key of styleKeys) { + lines.push(`${indent} ${key}: ${snapshot.styles![key]}`); + } + } + + // Children section + if (snapshot.children && snapshot.children.length > 0) { + lines.push(`${indent}Children:`); + for (let i = 0; i < snapshot.children.length; i++) { + lines.push(`${indent} [${i}]`); + lines.push(...serializeSnapshot(snapshot.children[i]!, depth + 2).split('\n')); + } + } + + return lines.join('\n'); +} + +export function serializeValue(val: unknown): string { + if (val === null) return 'null'; + if (val === undefined) return 'undefined'; + if (typeof val === 'string') return `"${val}"`; + if (typeof val === 'number' || typeof val === 'boolean') return String(val); + if (Array.isArray(val)) return `[${val.map(serializeValue).join(', ')}]`; + if (typeof val === 'object') { + const entries = Object.entries(val as Record) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([k, v]) => `${k}: ${serializeValue(v)}`); + return `{ ${entries.join(', ')} }`; + } + return String(val); +} diff --git a/packages/diff-engine/vitest.config.ts b/packages/diff-engine/vitest.config.ts new file mode 100644 index 0000000..859ba53 --- /dev/null +++ b/packages/diff-engine/vitest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['__tests__/**/*.test.ts'], + coverage: { + provider: 'v8', + include: ['src/**/*.ts'], + exclude: ['src/index.ts'], + thresholds: { lines: 85, functions: 85, branches: 80 }, + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6fbefc..4616359 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,6 +79,12 @@ importers: '@originmain/ui': specifier: workspace:* version: link:../ui + '@pierre/diffs': + specifier: ^1.1.19 + version: 1.1.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@pierre/trees': + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@tanstack/react-query': specifier: ^5.62.0 version: 5.99.2(react@19.2.5) @@ -110,6 +116,9 @@ importers: packages/diff-engine: dependencies: + '@pierre/diffs': + specifier: ^1.1.19 + version: 1.1.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5) zod: specifier: ^3.0.0 version: 3.25.76 @@ -1196,6 +1205,22 @@ packages: cpu: [x64] os: [win32] + '@pierre/diffs@1.1.19': + resolution: {integrity: sha512-eYyDW69heXd7i9zdkWogGYosHzoYF2dstV6uDcmnQAf72uRChs3hrpf/7ym/ayTiwD8a+TQ7oZ5vNNb0tstJvA==} + peerDependencies: + react: ^18.3.1 || ^19.0.0 + react-dom: ^18.3.1 || ^19.0.0 + + '@pierre/theme@0.0.28': + resolution: {integrity: sha512-1j/H/fECBuc9dEvntdWI+l435HZapw+RCJTlqCA6BboQ5TjlnE005j/ROWutXIs8aq5OAc82JI2Kwk4A1WWBgw==} + engines: {vscode: ^1.0.0} + + '@pierre/trees@1.0.0-beta.3': + resolution: {integrity: sha512-gfV7V1AoceIwTSFwiiWl/89gNtJROyo2dFeYYuAkT4F3AbE+ajCIGZEICBw1ygmVxVetF9Kq1Xpjz8BhXXZwTQ==} + peerDependencies: + react: ^18.3.1 || ^19.0.0 + react-dom: ^18.3.1 || ^19.0.0 + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1349,6 +1374,30 @@ packages: cpu: [x64] os: [win32] + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + + '@shikijs/engine-javascript@3.23.0': + resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/transformers@3.23.0': + resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -1366,9 +1415,15 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/node@22.19.17': resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} @@ -1380,6 +1435,9 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@typescript-eslint/eslint-plugin@8.59.0': resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1439,6 +1497,9 @@ packages: resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vitest/coverage-v8@2.1.9': resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==} peerDependencies: @@ -1541,6 +1602,9 @@ packages: caniuse-lite@1.0.30001790: resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -1549,6 +1613,12 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} @@ -1563,6 +1633,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1589,10 +1662,21 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + engines: {node: '>=0.3.1'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1744,9 +1828,18 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1833,6 +1926,9 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru_map@0.4.1: + resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -1843,6 +1939,24 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -1890,6 +2004,12 @@ packages: sass: optional: true + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1953,10 +2073,21 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + preact-render-to-string@6.6.5: + resolution: {integrity: sha512-O6MHzYNIKYaiSX3bOw0gGZfEbOmlIDtDfWwN1JJdc/T3ihzRT6tGGSEWE088dWrEDGa1u7101q+6fzQnO9XCPA==} + peerDependencies: + preact: '>=10 || >= 11.0.0-0' + + preact@11.0.0-beta.0: + resolution: {integrity: sha512-IcODoASASYwJ9kxz7+MJeiJhvLriwSb4y4mHIyxdgaRZp6kPUud7xytrk/6GZw8U3y6EFJaRb5wi9SrEK+8+lg==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1970,6 +2101,15 @@ packages: resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2002,6 +2142,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@3.23.0: + resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2013,6 +2156,9 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2027,6 +2173,9 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2088,6 +2237,9 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -2109,6 +2261,21 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -2117,6 +2284,12 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@2.1.9: resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2225,6 +2398,9 @@ packages: use-sync-external-store: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@ampproject/remapping@2.3.0': @@ -3723,6 +3899,26 @@ snapshots: '@next/swc-win32-x64-msvc@15.5.15': optional: true + '@pierre/diffs@1.1.19(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@pierre/theme': 0.0.28 + '@shikijs/transformers': 3.23.0 + diff: 8.0.3 + hast-util-to-html: 9.0.5 + lru_map: 0.4.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + shiki: 3.23.0 + + '@pierre/theme@0.0.28': {} + + '@pierre/trees@1.0.0-beta.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + preact: 11.0.0-beta.0 + preact-render-to-string: 6.6.5(preact@11.0.0-beta.0) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + '@pkgjs/parseargs@0.11.0': optional: true @@ -3808,6 +4004,44 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.2': optional: true + '@shikijs/core@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/transformers@3.23.0': + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -3825,8 +4059,16 @@ snapshots: '@types/estree@1.0.8': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/node@22.19.17': dependencies: undici-types: 6.21.0 @@ -3839,6 +4081,8 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/unist@3.0.3': {} + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -3930,6 +4174,8 @@ snapshots: '@typescript-eslint/types': 8.59.0 eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} + '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@22.19.17))': dependencies: '@ampproject/remapping': 2.3.0 @@ -4038,6 +4284,8 @@ snapshots: caniuse-lite@1.0.30001790: {} + ccount@2.0.1: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -4051,6 +4299,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + check-error@2.1.3: {} client-only@0.0.1: {} @@ -4061,6 +4313,8 @@ snapshots: color-name@1.1.4: {} + comma-separated-tokens@2.0.3: {} + concat-map@0.0.1: {} cross-spawn@7.0.6: @@ -4079,9 +4333,17 @@ snapshots: deep-is@0.1.4: {} + dequal@2.0.3: {} + detect-libc@2.1.2: optional: true + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff@8.0.3: {} + eastasianwidth@0.2.0: {} embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): @@ -4256,8 +4518,28 @@ snapshots: has-flag@4.0.0: {} + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -4337,6 +4619,8 @@ snapshots: lru-cache@10.4.3: {} + lru_map@0.4.1: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4351,6 +4635,35 @@ snapshots: dependencies: semver: 7.7.4 + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -4395,6 +4708,14 @@ snapshots: - '@babel/core' - babel-plugin-macros + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4455,8 +4776,16 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact-render-to-string@6.6.5(preact@11.0.0-beta.0): + dependencies: + preact: 11.0.0-beta.0 + + preact@11.0.0-beta.0: {} + prelude-ls@1.2.1: {} + property-information@7.1.0: {} + punycode@2.3.1: {} react-dom@19.2.5(react@19.2.5): @@ -4466,6 +4795,16 @@ snapshots: react@19.2.5: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + resolve-from@4.0.0: {} rollup@4.60.2: @@ -4545,12 +4884,25 @@ snapshots: shebang-regex@3.0.0: {} + shiki@3.23.0: + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/engine-javascript': 3.23.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + siginfo@2.0.0: {} signal-exit@4.1.0: {} source-map-js@1.2.1: {} + space-separated-tokens@2.0.2: {} + stackback@0.0.2: {} std-env@3.10.0: {} @@ -4567,6 +4919,11 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.2.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4616,6 +4973,8 @@ snapshots: tinyspy@3.0.2: {} + trim-lines@3.0.1: {} + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -4630,6 +4989,29 @@ snapshots: undici-types@6.21.0: {} + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -4638,6 +5020,16 @@ snapshots: dependencies: react: 19.2.5 + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + vite-node@2.1.9(@types/node@22.19.17): dependencies: cac: 6.7.14 @@ -4732,3 +5124,5 @@ snapshots: '@types/react': 19.2.14 react: 19.2.5 use-sync-external-store: 1.6.0(react@19.2.5) + + zwitch@2.0.4: {}