From 4c1fdd053407e658b120600daefe9da54413dc1d Mon Sep 17 00:00:00 2001 From: dmicheneau <47741512+dmicheneau@users.noreply.github.com> Date: Wed, 8 Apr 2026 09:20:22 +0200 Subject: [PATCH 1/3] feat: replace flowchart with unified Mermaid diagram (Phase 0-5) --- AGENTS.md | 6 +- team-lead-workflow/README.md | 131 +- team-lead-workflow/WORKFLOW_DRAFT.md | 429 ++ team-lead-workflow/bundle.html | 3329 ++++++++- team-lead-workflow/package-lock.json | 9661 ++++++++++++++++++++++++++ team-lead-workflow/package.json | 5 +- team-lead-workflow/src/App.tsx | 2659 ++++--- team-lead-workflow/vite.config.ts | 6 +- 8 files changed, 15041 insertions(+), 1185 deletions(-) create mode 100644 team-lead-workflow/WORKFLOW_DRAFT.md create mode 100644 team-lead-workflow/package-lock.json diff --git a/AGENTS.md b/AGENTS.md index d0188b8..4cf09c8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -94,11 +94,13 @@ When making changes to the site content or UI: 1. Edit `team-lead-workflow/src/App.tsx` 2. Rebuild the bundle — run from `team-lead-workflow/`: ```bash - bash /Users/mickael/.opencode/skills/ComposioHQ_awesome-claude-skills/artifacts-builder/scripts/bundle-artifact.sh + npm run bundle ``` 3. Commit both `src/App.tsx` and `bundle.html` 4. Push — GitHub Actions deploys automatically +> See `team-lead-workflow/README.md` for full development details. + > **Important:** Always commit `bundle.html` along with the source changes. The Pages deployment uses the committed bundle, not a CI build. ### i18n @@ -107,7 +109,7 @@ All user-facing text is translated via a `translations` object in `App.tsx`. To - Find the `translations` constant in `App.tsx` - Update both `en` and `fr` keys -- For the flowchart specifically, update `getFlowchartData(lang)` which returns `{ svgLabels, details }` for the SVG labels and detail panel content +- For the flowchart specifically, update `getFlowchartData(lang)` which returns `{ svgLabels, details, brainstormSvgLabels, brainstormDetails }` for the SVG labels and detail panel content ### GitHub Pages setup (one-time) diff --git a/team-lead-workflow/README.md b/team-lead-workflow/README.md index 7dbf7eb..5d23555 100644 --- a/team-lead-workflow/README.md +++ b/team-lead-workflow/README.md @@ -1,73 +1,84 @@ -# React + TypeScript + Vite +# team-lead-workflow -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +Single-page React app documenting the [opencode-team-lead](https://github.com/azrod/opencode-team-lead) plugin's workflow and philosophy. Deployed to GitHub Pages. -Currently, two official plugins are available: +## Structure -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) +``` +team-lead-workflow/ +├── src/ +│ └── App.tsx # All application code — two views, FR/EN i18n +├── bundle.html # Pre-built self-contained bundle — what GitHub Pages serves +├── dist/ # Vite build output (not deployed directly) +├── index.html # Vite dev server entry point +├── vite.config.ts +└── package.json +``` + +## Views + +The app has two views navigable via a CTA button: + +| View | Description | +|------|-------------| +| Intro screen | Presents Orion: concept, philosophy, available agents, typical use cases | +| Flowchart | Interactive SVG diagram of the 5-phase workflow with a detail panel | -## React Compiler +Both views support FR/EN language toggle (default: EN). -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). +## Local development -## Expanding the ESLint configuration +```bash +npm install +npm run dev # Vite dev server at http://localhost:5173 +npm run build # TypeScript check + Vite build to dist/ +npm run preview # Preview the dist/ build locally +``` + +## Updating content -If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: +All user-facing text lives in `src/App.tsx`. Always update both `en` and `fr` entries. -```js -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... +### Translations - // Remove tseslint.configs.recommended and replace with this - tseslint.configs.recommendedTypeChecked, - // Alternatively, use this for stricter rules - tseslint.configs.strictTypeChecked, - // Optionally, add this for stylistic rules - tseslint.configs.stylisticTypeChecked, +Find the `translations` object near the top of `App.tsx`. Add or update keys in both language branches: - // Other configs... - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +```ts +const translations: Record = { + en: { /* ... */ }, + fr: { /* ... */ }, +}; ``` -You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: - -```js -// eslint.config.js -import reactX from 'eslint-plugin-react-x' -import reactDom from 'eslint-plugin-react-dom' - -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - // Other configs... - // Enable lint rules for React - reactX.configs['recommended-typescript'], - // Enable lint rules for React DOM - reactDom.configs.recommended, - ], - languageOptions: { - parserOptions: { - project: ['./tsconfig.node.json', './tsconfig.app.json'], - tsconfigRootDir: import.meta.dirname, - }, - // other options... - }, - }, -]) +### Flowchart data + +The flowchart content is returned by `getFlowchartData(lang)`. It contains two parts: + +| Key | What it controls | +|-----|-----------------| +| `svgLabels` | Text labels rendered inside the SVG diagram nodes and arrows | +| `details` | Content shown in the right-panel when a node is clicked | +| `brainstormSvgLabels` | Labels for the brainstorm sub-flowchart | +| `brainstormDetails` | Detail panel content for the brainstorm flowchart | + +Update both the `"fr"` branch and the `"en"` branch (returned as the default). + +## Deployment + +GitHub Pages is deployed automatically by `.github/workflows/pages.yml` on every push to `main` that modifies `bundle.html`. + +The workflow does not run a build — it copies `bundle.html` directly to the served `_site/index.html`. **You must commit `bundle.html` along with any source changes.** + +## bundle.html + +`bundle.html` is a self-contained single HTML file: all JavaScript and CSS from the Vite build are inlined directly into ` - +}`;function n0e({code:e}){return(0,$.jsx)(`pre`,{style:{background:`#0f172a`,color:`#e2e8f0`,borderRadius:8,padding:`18px 20px`,fontSize:13,lineHeight:1.65,fontFamily:`ui-monospace, 'Cascadia Code', monospace`,overflowX:`auto`,margin:0},children:e.split(` +`).map((e,t)=>{let n=e.replace(/("(?:[^"\\]|\\.)*")(\s*:)/g,`$1$2`).replace(/:\s*("(?:[^"\\]|\\.)*")/g,`: $1`).replace(/:\s*(true|false|null)/g,`: $1`).replace(/:\s*(-?\d+(?:\.\d+)?)/g,`: $1`).split(/(|<\/k>||<\/s>||<\/b>||<\/n>)/),r=``,i=[];return n.forEach((e,t)=>{if(e===``){r=`k`;return}if(e===``){r=``;return}if(e===``){r=`s`;return}if(e===``){r=``;return}if(e===``){r=`b`;return}if(e===``){r=``;return}if(e===``){r=`n`;return}if(e===``){r=``;return}if(!e)return;let n=r===`k`?`#93c5fd`:r===`s`?`#86efac`:r===`b`||r===`n`?`#fcd34d`:`#e2e8f0`;i.push((0,$.jsx)(`span`,{style:{color:n},children:e},t))}),(0,$.jsx)(`div`,{children:i},t)})})}function r0e({fields:e,t}){return(0,$.jsx)(`div`,{style:{overflowX:`auto`},children:(0,$.jsxs)(`table`,{style:{width:`100%`,borderCollapse:`collapse`,fontSize:13,fontFamily:`system-ui, sans-serif`},children:[(0,$.jsx)(`thead`,{children:(0,$.jsx)(`tr`,{style:{borderBottom:`2px solid #e2e8f0`},children:[t.col_field,t.col_type,t.col_default,t.col_description].map(e=>(0,$.jsx)(`th`,{style:{textAlign:`left`,padding:`8px 12px`,fontSize:11,fontWeight:700,textTransform:`uppercase`,letterSpacing:`0.08em`,color:`#94a3b8`},children:e},e))})}),(0,$.jsx)(`tbody`,{children:e.map((e,t)=>(0,$.jsxs)(`tr`,{style:{borderBottom:`1px solid #f1f5f9`,background:t%2==0?`white`:`#fafafa`},children:[(0,$.jsx)(`td`,{style:{padding:`9px 12px`},children:(0,$.jsx)(`code`,{style:{background:`#f1f5f9`,color:`#0f172a`,padding:`2px 7px`,borderRadius:4,fontSize:12,fontFamily:`ui-monospace, monospace`},children:e.field})}),(0,$.jsx)(`td`,{style:{padding:`9px 12px`,color:`#7c3aed`,fontFamily:`ui-monospace, monospace`,fontSize:12},children:e.type}),(0,$.jsx)(`td`,{style:{padding:`9px 12px`,color:`#64748b`,fontFamily:`ui-monospace, monospace`,fontSize:12},children:e.default}),(0,$.jsx)(`td`,{style:{padding:`9px 12px`,color:`#374151`,lineHeight:1.5},children:e.description})]},t))})]})})}function i0e({agent:e,t}){let[n,r]=(0,S.useState)(!1),i={error:`#dc2626`,warning:`#d97706`,info:`#0369a1`,success:`#16a34a`},a={error:`#fef2f2`,warning:`#fffbeb`,info:`#eff6ff`,success:`#f0fdf4`},o=i[e.color]??`#64748b`,s=a[e.color]??`#f8fafc`;return(0,$.jsxs)(`div`,{style:{border:`1px solid #e2e8f0`,borderRadius:10,overflow:`hidden`,marginBottom:10},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`12px 16px`,background:`white`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12},children:[(0,$.jsx)(`code`,{style:{fontSize:14,fontWeight:700,color:`#0f172a`,fontFamily:`ui-monospace, monospace`,background:`#f1f5f9`,padding:`2px 8px`,borderRadius:4},children:e.name}),(0,$.jsx)(`span`,{style:{fontSize:10,fontWeight:700,letterSpacing:`0.1em`,color:o,background:s,border:`1px solid ${o}30`,padding:`2px 7px`,borderRadius:3},children:e.color.toUpperCase()})]}),(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:20},children:[(0,$.jsx)(`div`,{style:{display:`flex`,gap:14},children:[{label:t.col_temp,value:e.temperature},{label:t.col_variant,value:e.variant},{label:t.col_mode,value:e.mode}].map(e=>(0,$.jsxs)(`div`,{style:{textAlign:`center`},children:[(0,$.jsx)(`div`,{style:{fontSize:10,color:`#94a3b8`,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.06em`},children:e.label}),(0,$.jsx)(`div`,{style:{fontSize:12,color:`#0f172a`,fontWeight:700,fontFamily:`ui-monospace, monospace`},children:e.value})]},e.label))}),(0,$.jsx)(`button`,{onClick:()=>r(e=>!e),style:{background:`#f8fafc`,border:`1px solid #e2e8f0`,borderRadius:5,padding:`4px 10px`,cursor:`pointer`,fontSize:12,color:`#64748b`,fontWeight:600,fontFamily:`system-ui, sans-serif`},children:n?t.config_defaults_collapse:t.config_defaults_expand})]})]}),n&&(0,$.jsxs)(`div`,{style:{background:`#f8fafc`,borderTop:`1px solid #e2e8f0`,padding:`12px 16px`},children:[(0,$.jsx)(`div`,{style:{fontSize:11,fontWeight:700,textTransform:`uppercase`,letterSpacing:`0.08em`,color:`#94a3b8`,marginBottom:8},children:t.col_permissions}),(0,$.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:4},children:e.permissions.map((e,t)=>{let n=e.toLowerCase().includes(`deny`)||e.toLowerCase().includes(`tout le reste`);return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[(0,$.jsx)(`span`,{style:{width:6,height:6,borderRadius:`50%`,flexShrink:0,background:n?`#dc262640`:`#16a34a40`,border:`1.5px solid ${n?`#dc2626`:`#16a34a`}`}}),(0,$.jsx)(`span`,{style:{fontSize:12,color:n?`#991b1b`:`#374151`,fontFamily:`ui-monospace, monospace`},children:e})]},t)})})]})]})}function a0e({onBack:e,onWorkflow:t,lang:n,setLang:r}){let i=Z9[n];return(0,$.jsxs)(`div`,{style:{height:`100vh`,width:`100vw`,overflowY:`auto`,fontFamily:`system-ui, 'Segoe UI', sans-serif`,background:`#f8f9fa`,animation:`fadeIn 0.25s ease-out`},children:[(0,$.jsxs)(`div`,{style:{background:`white`,borderBottom:`1px solid #e2e8f0`,padding:`10px 24px`,position:`sticky`,top:0,zIndex:10,display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12},children:[(0,$.jsx)(`button`,{onClick:e,style:{background:`none`,border:`none`,cursor:`pointer`,fontSize:12,color:`#64748b`,fontWeight:600,padding:`4px 8px`,borderRadius:5,fontFamily:`system-ui, sans-serif`},onMouseEnter:e=>{e.currentTarget.style.background=`#f1f5f9`},onMouseLeave:e=>{e.currentTarget.style.background=`none`},children:i.back_to_intro}),(0,$.jsx)(`div`,{style:{width:1,height:16,background:`#e2e8f0`}}),(0,$.jsx)(`button`,{onClick:t,style:{background:`none`,border:`none`,cursor:`pointer`,fontSize:12,color:`#64748b`,fontWeight:600,padding:`4px 8px`,borderRadius:5,fontFamily:`system-ui, sans-serif`},onMouseEnter:e=>{e.currentTarget.style.background=`#f1f5f9`},onMouseLeave:e=>{e.currentTarget.style.background=`none`},children:i.nav_workflow}),(0,$.jsx)(`div`,{style:{width:1,height:16,background:`#e2e8f0`}}),(0,$.jsxs)(`span`,{style:{fontSize:14,fontWeight:700,color:`#0f172a`},children:[`team-lead — `,i.config_title]}),(0,$.jsx)(`span`,{style:{fontSize:12,color:`#94a3b8`},children:i.config_subtitle})]}),(0,$.jsx)(Q9,{lang:n,setLang:r})]}),(0,$.jsxs)(`div`,{style:{maxWidth:860,margin:`0 auto`,padding:`36px 48px 72px`},children:[(0,$.jsxs)(`section`,{style:{marginBottom:40},children:[(0,$.jsx)($9,{children:i.config_intro_heading}),(0,$.jsx)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`18px 22px`},children:(0,$.jsx)(`p`,{style:{margin:0,fontSize:14,color:`#374151`,lineHeight:1.7},children:i.config_intro_body.split(`prompt`).map((e,t,n)=>t(0,$.jsx)(i0e,{agent:e,t:i},e.name))]}),(0,$.jsxs)(`section`,{style:{marginBottom:40},children:[(0,$.jsx)($9,{children:i.config_example_heading}),(0,$.jsx)(`div`,{style:{borderRadius:10,overflow:`hidden`,border:`1px solid #1e293b`},children:(0,$.jsx)(n0e,{code:t0e})}),(0,$.jsxs)(`div`,{style:{marginTop:10,background:`#f0fdf4`,border:`1px solid #bbf7d0`,borderRadius:7,padding:`10px 14px`,display:`flex`,gap:10,alignItems:`flex-start`},children:[(0,$.jsx)(`span`,{style:{fontSize:14,flexShrink:0,marginTop:1},children:`✓`}),(0,$.jsx)(`span`,{style:{fontSize:13,color:`#166534`,lineHeight:1.6},children:i.config_example_note})]})]}),(0,$.jsxs)(`section`,{style:{marginBottom:40},children:[(0,$.jsx)($9,{children:i.config_limits_heading}),(0,$.jsx)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`16px 20px`},children:i.config_limits.map((e,t)=>(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:10,marginBottom:ts(e=>Math.min(2,Math.round((e+.1)*10)/10)),d=()=>s(e=>Math.max(.5,Math.round((e-.1)*10)/10)),f=()=>s(1),p=(e,t)=>{a(e);let n=l.current;if(n){let e=t*o-n.clientHeight/2;n.scrollTo({top:Math.max(0,e),behavior:`smooth`})}},m=Z9[n];return e===`intro`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`style`,{children:q9}),(0,$.jsx)($1e,{onEnter:()=>t(`flowchart`),onConfig:()=>t(`config`),lang:n,setLang:r})]}):e===`config`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`style`,{children:q9}),(0,$.jsx)(a0e,{onBack:()=>t(`intro`),onWorkflow:()=>t(`flowchart`),lang:n,setLang:r})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`style`,{children:q9}),(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,height:`100vh`,width:`100vw`,background:`#f8f9fa`,fontFamily:`system-ui, 'Segoe UI', sans-serif`,overflow:`hidden`,animation:`fadeIn 0.25s ease-out`},children:[(0,$.jsxs)(`div`,{style:{background:`white`,borderBottom:`1px solid #e2e8f0`,padding:`10px 20px`,flexShrink:0,display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12},children:[(0,$.jsx)(`button`,{onClick:()=>t(`intro`),style:{background:`none`,border:`none`,cursor:`pointer`,fontSize:12,color:`#64748b`,fontWeight:600,display:`flex`,alignItems:`center`,gap:4,padding:`4px 8px`,borderRadius:5,fontFamily:`system-ui, sans-serif`},onMouseEnter:e=>{e.currentTarget.style.background=`#f1f5f9`},onMouseLeave:e=>{e.currentTarget.style.background=`none`},children:m.back_to_intro}),(0,$.jsx)(`div`,{style:{width:1,height:16,background:`#e2e8f0`}}),(0,$.jsx)(`button`,{onClick:()=>t(`config`),style:{background:`none`,border:`none`,cursor:`pointer`,fontSize:12,color:`#64748b`,fontWeight:600,padding:`4px 8px`,borderRadius:5,fontFamily:`system-ui, sans-serif`},onMouseEnter:e=>{e.currentTarget.style.background=`#f1f5f9`},onMouseLeave:e=>{e.currentTarget.style.background=`none`},children:m.nav_config})]}),(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:16},children:[(0,$.jsx)(Q9,{lang:n,setLang:r}),(0,$.jsx)(`span`,{style:{fontSize:11,color:`#cbd5e1`,fontStyle:`italic`},children:m.click_node_hint})]})]}),(0,$.jsxs)(`div`,{style:{flex:1,display:`flex`,overflow:`hidden`},children:[(0,$.jsxs)(`div`,{id:`flowchart-container`,ref:l,style:{width:`62%`,minWidth:320,background:`#f8f9fa`,borderRight:`1px solid #e2e8f0`,overflowY:`auto`,overflowX:`hidden`,display:`flex`,flexDirection:`column`,alignItems:`center`,position:`relative`},children:[(0,$.jsxs)(`div`,{style:{position:`sticky`,top:10,zIndex:10,alignSelf:`flex-start`,marginLeft:10,display:`flex`,alignItems:`center`,gap:4,background:`white`,border:`1px solid #e2e8f0`,borderRadius:8,padding:`4px 8px`,boxShadow:`0 1px 4px rgba(0,0,0,0.08)`},children:[(0,$.jsx)(`button`,{onClick:d,style:{background:`#f1f5f9`,border:`none`,borderRadius:5,width:26,height:26,cursor:`pointer`,fontSize:14,color:`#475569`,fontWeight:700,display:`flex`,alignItems:`center`,justifyContent:`center`},children:`−`}),(0,$.jsxs)(`span`,{style:{fontSize:12,color:`#64748b`,fontWeight:600,minWidth:36,textAlign:`center`,fontFamily:`system-ui, sans-serif`},children:[Math.round(o*100),`%`]}),(0,$.jsx)(`button`,{onClick:u,style:{background:`#f1f5f9`,border:`none`,borderRadius:5,width:26,height:26,cursor:`pointer`,fontSize:14,color:`#475569`,fontWeight:700,display:`flex`,alignItems:`center`,justifyContent:`center`},children:`+`}),(0,$.jsx)(`button`,{onClick:f,style:{background:`#f1f5f9`,border:`none`,borderRadius:5,width:26,height:26,cursor:`pointer`,fontSize:13,color:`#475569`,display:`flex`,alignItems:`center`,justifyContent:`center`},children:`↺`})]}),(0,$.jsx)(`div`,{style:{transformOrigin:`top center`,transform:`scale(${o})`,width:`100%`},children:(0,$.jsx)(Y1e,{lang:n,onNodeClick:e=>p(e,0),selectedNode:i})})]}),(0,$.jsx)(`div`,{style:{flex:`0 0 38%`,background:`white`,overflowY:`auto`},children:(0,$.jsx)(Q1e,{nodeId:i,lang:n})})]})]})]})}(0,C.createRoot)(document.getElementById(`root`)).render((0,$.jsx)(S.StrictMode,{children:(0,$.jsx)(o0e,{})})); +
diff --git a/team-lead-workflow/package-lock.json b/team-lead-workflow/package-lock.json new file mode 100644 index 0000000..750fba5 --- /dev/null +++ b/team-lead-workflow/package-lock.json @@ -0,0 +1,9661 @@ +{ + "name": "team-lead-workflow", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "team-lead-workflow", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "embla-carousel-react": "^8.6.0", + "lucide-react": "^1.7.0", + "mermaid": "^11.14.0", + "next-themes": "^0.4.6", + "react": "^19.2.4", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.4", + "react-hook-form": "^7.72.0", + "react-resizable-panels": "^4.8.0", + "sonner": "^2.0.7", + "tailwind-merge": "^3.5.0", + "vaul": "^1.1.2", + "zod": "^4.3.6" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@parcel/config-default": "^2.16.4", + "@types/node": "^24.12.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "autoprefixer": "^10.4.27", + "eslint": "^9.39.4", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "html-inline": "^1.2.0", + "parcel": "^2.16.4", + "parcel-resolver-tspaths": "^0.0.9", + "postcss": "^8.5.8", + "tailwindcss": "3.4.1", + "tailwindcss-animate": "^1.0.7", + "typescript": "~5.9.3", + "typescript-eslint": "^8.57.0", + "vite": "^8.0.1", + "vite-plugin-singlefile": "^2.3.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "license": "MIT" + }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz", + "integrity": "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "12.0.0", + "@chevrotain/types": "12.0.0" + } + }, + "node_modules/@chevrotain/gast": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz", + "integrity": "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "12.0.0" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz", + "integrity": "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz", + "integrity": "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz", + "integrity": "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==", + "license": "Apache-2.0" + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "license": "MIT" + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.2", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz", + "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "mlly": "^1.8.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lezer/common": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@lezer/lr": { + "version": "1.4.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "2.8.5", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz", + "integrity": "sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz", + "integrity": "sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz", + "integrity": "sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz", + "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz", + "integrity": "sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mermaid-js/parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz", + "integrity": "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==", + "license": "MIT", + "dependencies": { + "langium": "^4.0.0" + } + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/lr": "^1.0.0", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", + "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.122.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/bundler-default": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/graph": "3.6.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/fs": "2.16.4", + "@parcel/logger": "2.16.4", + "@parcel/utils": "2.16.4", + "lmdb": "2.8.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/bundler-default": "2.16.4", + "@parcel/compressor-raw": "2.16.4", + "@parcel/namer-default": "2.16.4", + "@parcel/optimizer-css": "2.16.4", + "@parcel/optimizer-html": "2.16.4", + "@parcel/optimizer-image": "2.16.4", + "@parcel/optimizer-svg": "2.16.4", + "@parcel/optimizer-swc": "2.16.4", + "@parcel/packager-css": "2.16.4", + "@parcel/packager-html": "2.16.4", + "@parcel/packager-js": "2.16.4", + "@parcel/packager-raw": "2.16.4", + "@parcel/packager-svg": "2.16.4", + "@parcel/packager-wasm": "2.16.4", + "@parcel/reporter-dev-server": "2.16.4", + "@parcel/resolver-default": "2.16.4", + "@parcel/runtime-browser-hmr": "2.16.4", + "@parcel/runtime-js": "2.16.4", + "@parcel/runtime-rsc": "2.16.4", + "@parcel/runtime-service-worker": "2.16.4", + "@parcel/transformer-babel": "2.16.4", + "@parcel/transformer-css": "2.16.4", + "@parcel/transformer-html": "2.16.4", + "@parcel/transformer-image": "2.16.4", + "@parcel/transformer-js": "2.16.4", + "@parcel/transformer-json": "2.16.4", + "@parcel/transformer-node": "2.16.4", + "@parcel/transformer-postcss": "2.16.4", + "@parcel/transformer-posthtml": "2.16.4", + "@parcel/transformer-raw": "2.16.4", + "@parcel/transformer-react-refresh-wrap": "2.16.4", + "@parcel/transformer-svg": "2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/core": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.1", + "@parcel/cache": "2.16.4", + "@parcel/diagnostic": "2.16.4", + "@parcel/events": "2.16.4", + "@parcel/feature-flags": "2.16.4", + "@parcel/fs": "2.16.4", + "@parcel/graph": "3.6.4", + "@parcel/logger": "2.16.4", + "@parcel/package-manager": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/profiler": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4", + "@parcel/workers": "2.16.4", + "base-x": "^3.0.11", + "browserslist": "^4.24.5", + "clone": "^2.1.2", + "dotenv": "^16.5.0", + "dotenv-expand": "^11.0.7", + "json5": "^2.2.3", + "msgpackr": "^1.11.2", + "nullthrows": "^1.1.1", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/error-overlay": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/feature-flags": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/feature-flags": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/types-internal": "2.16.4", + "@parcel/utils": "2.16.4", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/graph": { + "version": "3.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/feature-flags": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/events": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.1", + "@parcel/diagnostic": "2.16.4", + "@parcel/fs": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "browserslist": "^4.24.5", + "lightningcss": "^1.30.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-html": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4", + "@parcel/workers": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/optimizer-svg": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-swc": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "@swc/core": "^1.11.24", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/fs": "2.16.4", + "@parcel/logger": "2.16.4", + "@parcel/node-resolver-core": "3.7.4", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4", + "@parcel/workers": "2.16.4", + "@swc/core": "^1.11.24", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "lightningcss": "^1.30.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4", + "globals": "^13.24.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js/node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-wasm": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">=16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/types": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/profiler": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/events": "2.16.4", + "@parcel/types-internal": "2.16.4", + "chrome-trace-event": "^1.0.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/types": "2.16.4", + "@parcel/utils": "2.16.4", + "chalk": "^4.1.2", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/codeframe": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-tracer": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4", + "chrome-trace-event": "^1.0.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/node-resolver-core": "3.7.4", + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-rsc": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/rust-darwin-arm64": "2.16.4", + "@parcel/rust-darwin-x64": "2.16.4", + "@parcel/rust-linux-arm-gnueabihf": "2.16.4", + "@parcel/rust-linux-arm64-gnu": "2.16.4", + "@parcel/rust-linux-arm64-musl": "2.16.4", + "@parcel/rust-linux-x64-gnu": "2.16.4", + "@parcel/rust-linux-x64-musl": "2.16.4", + "@parcel/rust-win32-x64-msvc": "2.16.4" + }, + "peerDependencies": { + "napi-wasm": "^1.1.2" + }, + "peerDependenciesMeta": { + "napi-wasm": { + "optional": true + } + } + }, + "node_modules/@parcel/rust-darwin-arm64": { + "version": "2.16.4", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-darwin-x64": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-darwin-x64/-/rust-darwin-x64-2.16.4.tgz", + "integrity": "sha512-8aNKNyPIx3EthYpmVJevIdHmFsOApXAEYGi3HU69jTxLgSIfyEHDdGE9lEsMvhSrd/SSo4/euAtiV+pqK04wnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm-gnueabihf": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm-gnueabihf/-/rust-linux-arm-gnueabihf-2.16.4.tgz", + "integrity": "sha512-QrvqiSHaWRLc0JBHgUHVvDthfWSkA6AFN+ikV1UGENv4j2r/QgvuwJiG0VHrsL6pH5dRqj0vvngHzEgguke9DA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm64-gnu": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm64-gnu/-/rust-linux-arm64-gnu-2.16.4.tgz", + "integrity": "sha512-f3gBWQHLHRUajNZi3SMmDQiEx54RoRbXtZYQNuBQy7+NolfFcgb1ik3QhkT7xovuTF/LBmaqP3UFy0PxvR/iwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-arm64-musl": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-arm64-musl/-/rust-linux-arm64-musl-2.16.4.tgz", + "integrity": "sha512-cwml18RNKsBwHyZnrZg4jpecXkWjaY/mCArocWUxkFXjjB97L56QWQM9W86f2/Y3HcFcnIGJwx1SDDKJrV6OIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-x64-gnu": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-x64-gnu/-/rust-linux-x64-gnu-2.16.4.tgz", + "integrity": "sha512-0xIjQaN8hiG0F9R8coPYidHslDIrbfOS/qFy5GJNbGA3S49h61wZRBMQqa7JFW4+2T8R0J9j0SKHhLXpbLXrIg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-linux-x64-musl": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-linux-x64-musl/-/rust-linux-x64-musl-2.16.4.tgz", + "integrity": "sha512-fYn21GIecHK9RoZPKwT9NOwxwl3Gy3RYPR6zvsUi0+hpFo19Ph9EzFXN3lT8Pi5KiwQMCU4rsLb5HoWOBM1FeA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust-win32-x64-msvc": { + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/@parcel/rust-win32-x64-msvc/-/rust-win32-x64-msvc-2.16.4.tgz", + "integrity": "sha512-TcpWC3I1mJpfP2++018lgvM7UX0P8IrzNxceBTHUKEIDMwmAYrUKAQFiaU0j1Ldqk6yP8SPZD3cvphumsYpJOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "browserslist": "^4.24.5", + "json5": "^2.2.3", + "nullthrows": "^1.1.1", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "browserslist": "^4.24.5", + "lightningcss": "^1.30.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4", + "@parcel/workers": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.16.4", + "@parcel/workers": "2.16.4", + "@swc/helpers": "^0.5.0", + "browserslist": "^4.24.5", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.14.1", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "json5": "^2.2.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-node": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/utils": "2.16.4", + "clone": "^2.1.2", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^7.7.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/error-overlay": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/utils": "2.16.4", + "react-refresh": "^0.16.0" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/plugin": "2.16.4", + "@parcel/rust": "2.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.16.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/types-internal": "2.16.4", + "@parcel/workers": "2.16.4" + } + }, + "node_modules/@parcel/types-internal": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/feature-flags": "2.16.4", + "@parcel/source-map": "^2.1.1", + "utility-types": "^3.11.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/codeframe": "2.16.4", + "@parcel/diagnostic": "2.16.4", + "@parcel/logger": "2.16.4", + "@parcel/markdown-ansi": "2.16.4", + "@parcel/rust": "2.16.4", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/workers": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.16.4", + "@parcel/logger": "2.16.4", + "@parcel/profiler": "2.16.4", + "@parcel/types-internal": "2.16.4", + "@parcel/utils": "2.16.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.16.4" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "2.2.16", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menubar": { + "version": "1.1.16", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.14", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.10", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-toggle": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.12", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", + "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", + "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", + "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", + "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", + "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", + "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", + "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "peer": true + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.15.21", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.25" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.21", + "@swc/core-darwin-x64": "1.15.21", + "@swc/core-linux-arm-gnueabihf": "1.15.21", + "@swc/core-linux-arm64-gnu": "1.15.21", + "@swc/core-linux-arm64-musl": "1.15.21", + "@swc/core-linux-ppc64-gnu": "1.15.21", + "@swc/core-linux-s390x-gnu": "1.15.21", + "@swc/core-linux-x64-gnu": "1.15.21", + "@swc/core-linux-x64-musl": "1.15.21", + "@swc/core-win32-arm64-msvc": "1.15.21", + "@swc/core-win32-ia32-msvc": "1.15.21", + "@swc/core-win32-x64-msvc": "1.15.21" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.21", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.21.tgz", + "integrity": "sha512-//fOVntgowz9+V90lVsNCtyyrtbHp3jWH6Rch7MXHXbcvbLmbCTmssl5DeedUWLLGiAAW1wksBdqdGYOTjaNLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.21.tgz", + "integrity": "sha512-meNI4Sh6h9h8DvIfEc0l5URabYMSuNvyisLmG6vnoYAS43s8ON3NJR8sDHvdP7NJTrLe0q/x2XCn6yL/BeHcZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.21.tgz", + "integrity": "sha512-QrXlNQnHeXqU2EzLlnsPoWEh8/GtNJLvfMiPsDhk+ht6Xv8+vhvZ5YZ/BokNWSIZiWPKLAqR0M7T92YF5tmD3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.21.tgz", + "integrity": "sha512-8/yGCMO333ultDaMQivE5CjO6oXDPeeg1IV4sphojPkb0Pv0i6zvcRIkgp60xDB+UxLr6VgHgt+BBgqS959E9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.21.tgz", + "integrity": "sha512-ucW0HzPx0s1dgRvcvuLSPSA/2Kk/VYTv9st8qe1Kc22Gu0Q0rH9+6TcBTmMuNIp0Xs4BPr1uBttmbO1wEGI49Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.21.tgz", + "integrity": "sha512-ulTnOGc5I7YRObE/9NreAhQg94QkiR5qNhhcUZ1iFAYjzg/JGAi1ch+s/Ixe61pMIr8bfVrF0NOaB0f8wjaAfA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.21.tgz", + "integrity": "sha512-D0RokxtM+cPvSqJIKR6uja4hbD+scI9ezo95mBhfSyLUs9wnPPl26sLp1ZPR/EXRdYm3F3S6RUtVi+8QXhT24Q==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.21.tgz", + "integrity": "sha512-nER8u7VeRfmU6fMDzl1NQAbbB/G7O2avmvCOwIul1uGkZ2/acbPH+DCL9h5+0yd/coNcxMBTL6NGepIew+7C2w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.21.tgz", + "integrity": "sha512-+/AgNBnjYugUA8C0Do4YzymgvnGbztv7j8HKSQLvR/DQgZPoXQ2B3PqB2mTtGh/X5DhlJWiqnunN35JUgWcAeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.21.tgz", + "integrity": "sha512-IkSZj8PX/N4HcaFhMQtzmkV8YSnuNoJ0E6OvMwFiOfejPhiKXvl7CdDsn1f4/emYEIDO3fpgZW9DTaCRMDxaDA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.21", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.21.tgz", + "integrity": "sha512-zUyWso7OOENB6e1N1hNuNn8vbvLsTdKQ5WKLgt/JcBNfJhKy/6jmBmqI3GXk/MyvQKd5SLvP7A0F36p7TeDqvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.20", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.26", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/type-utils": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.58.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.0", + "@typescript-eslint/types": "^8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.58.0", + "@typescript-eslint/tsconfig-utils": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.5", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.7" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.13", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001784", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chevrotain": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz", + "integrity": "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "12.0.0", + "@chevrotain/gast": "12.0.0", + "@chevrotain/regexp-to-ast": "12.0.0", + "@chevrotain/types": "12.0.0", + "@chevrotain/utils": "12.0.0" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/chevrotain-allstar": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.1.tgz", + "integrity": "sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^12.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "12.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssauron": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "X.X.X" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.2.tgz", + "integrity": "sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer2": { + "version": "0.0.2", + "dev": true, + "license": "BSD", + "dependencies": { + "readable-stream": "~1.1.9" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.331", + "dev": true, + "license": "ISC" + }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "dev": true, + "license": "ISC" + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/html-inline": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "~1.1.0", + "through2": "~0.6.3", + "trumpet": "~1.7.0" + }, + "bin": { + "html-inline": "bin/cmd.js" + } + }, + "node_modules/html-select": { + "version": "2.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "cssauron": "^1.1.0", + "duplexer2": "~0.0.2", + "inherits": "^2.0.1", + "minimist": "~0.0.8", + "readable-stream": "^1.0.27-1", + "split": "~0.3.0", + "stream-splicer": "^1.2.0", + "through2": "^1.0.0" + }, + "bin": { + "html-select": "bin/cmd.js" + } + }, + "node_modules/html-select/node_modules/minimist": { + "version": "0.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/html-select/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/html-select/node_modules/through2": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.1.13-1 <1.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/html-tokenize": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "minimist": "~0.0.8", + "readable-stream": "~1.0.27-1", + "through2": "~0.4.1" + }, + "bin": { + "html-tokenize": "bin/cmd.js" + } + }, + "node_modules/html-tokenize/node_modules/minimist": { + "version": "0.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/html-tokenize/node_modules/through2": { + "version": "0.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "node_modules/html-tokenize/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "1.21.7", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/katex": { + "version": "0.16.45", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz", + "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/langium": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.2.tgz", + "integrity": "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==", + "license": "MIT", + "dependencies": { + "@chevrotain/regexp-to-ast": "~12.0.0", + "chevrotain": "~12.0.0", + "chevrotain-allstar": "~0.4.1", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.1.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lmdb": { + "version": "2.8.5", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.9.5", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.1.1", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.8.5", + "@lmdb/lmdb-darwin-x64": "2.8.5", + "@lmdb/lmdb-linux-arm": "2.8.5", + "@lmdb/lmdb-linux-arm64": "2.8.5", + "@lmdb/lmdb-linux-x64": "2.8.5", + "@lmdb/lmdb-win32-x64": "2.8.5" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "6.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.7.0", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz", + "integrity": "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.1", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.1.0", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.1", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.19", + "dompurify": "^3.3.1", + "katex": "^0.16.25", + "khroma": "^2.1.0", + "lodash-es": "^4.17.23", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.9", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/msgpackr-extract/node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/next-themes": { + "version": "0.4.6", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.37", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/parcel": { + "version": "2.16.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/config-default": "2.16.4", + "@parcel/core": "2.16.4", + "@parcel/diagnostic": "2.16.4", + "@parcel/events": "2.16.4", + "@parcel/feature-flags": "2.16.4", + "@parcel/fs": "2.16.4", + "@parcel/logger": "2.16.4", + "@parcel/package-manager": "2.16.4", + "@parcel/reporter-cli": "2.16.4", + "@parcel/reporter-dev-server": "2.16.4", + "@parcel/reporter-tracer": "2.16.4", + "@parcel/utils": "2.16.4", + "chalk": "^4.1.2", + "commander": "^12.1.0", + "get-port": "^4.2.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parcel-resolver-tspaths": { + "version": "0.0.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0", + "parcel": ">= 2.0.0" + }, + "peerDependencies": { + "parcel": ">= 2.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-hook-form": { + "version": "7.72.0", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-refresh": { + "version": "0.16.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable-panels": { + "version": "4.8.0", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-wrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^1.1.13-1" + } + }, + "node_modules/readable-wrap/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "license": "Unlicense" + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.122.0", + "@rolldown/pluginutils": "1.0.0-rc.12" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", + "@rolldown/binding-darwin-x64": "1.0.0-rc.12", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.12", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sonner": { + "version": "2.0.7", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stream-splicer": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "indexof": "0.0.1", + "inherits": "^2.0.1", + "isarray": "~0.0.1", + "readable-stream": "^1.1.13-1", + "readable-wrap": "^1.0.0", + "through2": "^1.0.0" + } + }, + "node_modules/stream-splicer/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/stream-splicer/node_modules/through2": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.1.13-1 <1.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trumpet": { + "version": "1.7.2", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer2": "~0.0.2", + "html-select": "^2.3.5", + "html-tokenize": "^1.1.1", + "inherits": "^2.0.0", + "readable-stream": "^1.0.27-1", + "through2": "^1.0.0" + } + }, + "node_modules/trumpet/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/trumpet/node_modules/through2": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.1.13-1 <1.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.58.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vaul": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/vite": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.12", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-singlefile": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-2.3.2.tgz", + "integrity": "sha512-b8SxCi/gG7K298oJDcKOuZeU6gf6wIcCJAaEqUmmZXdjfuONlkyNyWZC3tEbN6QockRCNUd3it9eGTtpHGoYmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">18.0.0" + }, + "peerDependencies": { + "rollup": "^4.59.0", + "vite": "^5.4.11 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.3", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/team-lead-workflow/package.json b/team-lead-workflow/package.json index c9b27be..b4a5844 100644 --- a/team-lead-workflow/package.json +++ b/team-lead-workflow/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "vite", "build": "tsc -b && vite build", + "bundle": "tsc -b && vite build && cp dist/index.html bundle.html", "lint": "eslint .", "preview": "vite preview" }, @@ -43,6 +44,7 @@ "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "lucide-react": "^1.7.0", + "mermaid": "^11.14.0", "next-themes": "^0.4.6", "react": "^19.2.4", "react-day-picker": "^9.14.0", @@ -74,6 +76,7 @@ "tailwindcss-animate": "^1.0.7", "typescript": "~5.9.3", "typescript-eslint": "^8.57.0", - "vite": "^8.0.1" + "vite": "^8.0.1", + "vite-plugin-singlefile": "^2.3.2" } } diff --git a/team-lead-workflow/src/App.tsx b/team-lead-workflow/src/App.tsx index 5af8bbf..1575410 100644 --- a/team-lead-workflow/src/App.tsx +++ b/team-lead-workflow/src/App.tsx @@ -1,4 +1,5 @@ -import React, { useState, useRef } from "react"; +import React, { useState, useRef, useEffect } from "react"; +import mermaid from "mermaid"; // ─── CSS animation injected once ───────────────────────────────────────────── const STYLE_TAG = ` @@ -71,11 +72,44 @@ interface BrainstormSvgLabels { bs_arrow_rename: string; } +interface UnifiedSvgLabels { + uf_start: string; + uf_scan: string; + uf_scan_sub: string; + uf_briefs_found: string; + uf_no_brief: string; + uf_brief_status: string; + uf_ask_continue: string; + uf_ask_revise: string; + uf_load_brief: string; + uf_multi_found: string; + uf_brief_end: string; + uf_brief_end_sub: string; + uf_phase0_label: string; + uf_placeholder_label: string; + // expand/collapse brainstorm sub-steps + uf_step1_label: string; + uf_step2_label: string; + uf_step3_label: string; + uf_expand_hint: string; + uf_collapse_hint: string; + // arrow labels + uf_arrow_none: string; + uf_arrow_one: string; + uf_arrow_multiple: string; + uf_arrow_draft: string; + uf_arrow_done: string; + uf_arrow_continue: string; + uf_arrow_fresh: string; + uf_arrow_revise: string; + uf_arrow_new_project: string; + uf_arrow_phase3: string; +} + interface FlowchartData { svgLabels: { start: string; scratchpad_sub: string; - memory_sub: string; ambigu: string; question_label: string; question_sub: string; @@ -91,14 +125,19 @@ interface FlowchartData { arrow_non: string; arrow_gap_majeur: string; arrow_gap_mineur: string; - mem_read_here: string; + scratchpad_rw_label: string; annot_delegate: string; annot_agents: string; - annot_memory: string; + agents_label: string; + annot_plan: string; + annot_harness: string; + harness_arrow: string; + harness_node_label: string; }; details: Record; brainstormSvgLabels: BrainstormSvgLabels; brainstormDetails: Record; + unifiedSvgLabels: UnifiedSvgLabels; } function getFlowchartData(lang: "en" | "fr"): FlowchartData { @@ -107,7 +146,6 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { svgLabels: { start: "Requête utilisateur", scratchpad_sub: "Plan courant · Contexte", - memory_sub: "Apprentissages persistants", ambigu: "Ambigu ?", question_label: "Question util.", question_sub: "outil: question", @@ -123,10 +161,14 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { arrow_non: "NON", arrow_gap_majeur: "Gap majeur", arrow_gap_mineur: "Gap mineur", - mem_read_here: "lu ici", + scratchpad_rw_label: "← lire/écrire", annot_delegate: "↳ MAJ scratchpad après chaque retour d'agent", annot_agents: "✎ après retour d'agent", - annot_memory: "↳ Écrire memory.md si nouveaux apprentissages", + agents_label: "Sous-agents", + annot_plan: "✎ scratchpad | planning si ambigu", + annot_harness: "suggérer à l'utilisateur — jamais sans confirmation", + harness_arrow: "pattern récurrent ?", + harness_node_label: "Harness ? (optionnel)", }, details: { start: { @@ -142,8 +184,9 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#2563eb", nodeType: "PHASE PRINCIPALE", sections: [ - { heading: "Lecture mémoire", items: [".opencode/scratchpad.md — plan de travail courant", ".opencode/memory.md — apprentissages projet persistants"] }, - { heading: "Appels lifecycle (obligatoires)", items: ["`project_state()` — vue complète des exec-plans, specs et briefs", "`check_artifacts()` — scan de cohérence inter-artefacts"] }, + { heading: "Lecture mémoire", items: [".opencode/scratchpad.md — plan de travail courant"] }, + { heading: "Appels lifecycle (obligatoires au démarrage)", items: ["`project_state()` — vue complète des exec-plans, specs et briefs", "`check_artifacts()` — scan de cohérence inter-artefacts"] }, + { heading: "Appels lifecycle (tout au long du workflow)", items: ["`mark_block_done()` — après chaque livraison validée", "`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED", "`register_spec()` — quand une nouvelle spec doit exister sur disque"] }, { heading: "Objectif", items: ["Parser la requête (explicite vs implicite)", "Identifier si ambigu avant de planifier", "Vérifier si un scope était en cours (scratchpad)"] }, ], }, @@ -158,39 +201,16 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { "Écrasé à chaque nouvelle mission", ]}, { heading: "Quand lire", items: ["Au démarrage — lire l'état de la mission si elle existe"] }, - { heading: "Quand écrire (5 moments)", items: [ + { heading: "Quand écrire (6 moments)", items: [ "Démarrage — objectif + plan + décisions initiales", "Avant délégation — sous-tâches, fichiers modifiés, contexte de reprise", "Après retour d'agent — résultats clés synthétisés", "Après review — statut des tâches + verdict", + "Après chaque décision — noter ce qui a été décidé et pourquoi", "Fin de mission — capture finale avant rapport utilisateur", ]}, ], }, - memory: { - title: "📄 memory.md", - color: "#22c55e", - nodeType: "MÉMOIRE PERSISTANTE", - sections: [ - { heading: "Rôle", items: [ - "Base de connaissances projet inter-sessions", - "Injecté dans chaque appel LLM automatiquement", - "Append-only — ne jamais écraser, nettoyer les entrées obsolètes", - ]}, - { heading: "Quand lire", items: ["Injecté automatiquement — pas d'action requise"] }, - { heading: "Quand écrire", items: [ - "Commandes build/test découvertes dans le projet", - "Décisions d'architecture importantes retenues", - "Conventions et patterns récurrents du codebase", - "Préférences utilisateur observées", - "Technos/contraintes spécifiques au projet", - ]}, - { heading: "Ce qui N'y appartient PAS", items: [ - "État des tâches courantes → scratchpad", - "Infos temporaires ou mission-spécifiques", - ]}, - ], - }, ambigu: { title: "Ambigu ?", color: "#64748b", @@ -214,6 +234,8 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { nodeType: "PHASE PRINCIPALE", sections: [ { heading: "Actions", items: ["Créer/MAJ todolist → todowrite", "Écrire plan + contexte dans scratchpad", "Identifier les agents nécessaires", "Déterminer parallèle vs séquentiel"] }, + { heading: "Exec-plans", items: ["Invoquer l'agent `planning` si : requête ambiguë + multi-sessions + AGENTS.md ne clarifie pas", "Plan simple → inline dans le scratchpad", "Exec-plan → fichier dans docs/exec-plans/.md", "Quand un exec-plan existe : scratchpad pointe vers lui — `See exec-plan: docs/exec-plans/.md`"] }, + { heading: "Lifecycle", items: ["`register_spec()` — quand une nouvelle spec doit exister sur disque"] }, { heading: "Règle", items: ["Un seul scope à la fois — finir avant de passer au suivant", "Parquer les scopes secondaires dans le scratchpad"] }, ], }, @@ -261,11 +283,11 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { ], }, agents: { - title: "Agents", + title: "Sous-agents", color: "#6d28d9", nodeType: "DÉLÉGATION", sections: [ - { heading: "Types", items: ["`explore` — recherche, lecture de fichiers, architecture", "`general` — écriture, édition, bash, implémentation", "Custom persona — `backend-engineer`, `api-architect`…"] }, + { heading: "Types", items: ["`explore` (natif OpenCode) — lecture seule : recherche, glob, lecture", "`general` (natif OpenCode) — accès complet : lecture, écriture, bash", "Custom persona — `backend-engineer`, `api-architect`…"] }, { heading: "Contexte handoff", items: ["Chaque agent repart de zéro — être explicite", "Inclure fichiers modifiés, décisions, interfaces", "Parallèle = plusieurs task calls dans le même message"] }, ], }, @@ -301,6 +323,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { sections: [ { heading: "Règle absolue", items: ["TOUJOURS via review-manager — jamais de reviewer direct", "Obligatoire pour tout changement code, config, infra, sécurité"] }, { heading: "Fournir au review-manager", items: ["Fichiers modifiés + résumé des changements", "Exigences originales de l'utilisateur", "Trade-offs et décisions effectuées", "Ce qui était explicitement hors scope"] }, + { heading: "Lifecycle", items: ["`mark_block_done()` — après chaque livraison validée", "`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED"] }, ], }, review_manager: { @@ -321,7 +344,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { ], }, changes_loop: { - title: "↩ Fix + re-review", + title: "↩ Fix + re-review (max 2)", color: "#b45309", nodeType: "BOUCLE", sections: [ @@ -342,7 +365,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { nodeType: "PHASE PRINCIPALE", sections: [ { heading: "Auto-évaluation", items: ["Répond à la vraie demande (pas l'interprétée) ?", "Pas de contradiction entre résultats d'agents ?", "Rien de manquant dans la livraison ?"] }, - { heading: "MAJ mémoire", items: ["Écrire apprentissages dans .opencode/memory.md", "Nettoyer le scratchpad (tâches terminées)"] }, + { heading: "MAJ mémoire", items: ["Nettoyer le scratchpad (tâches terminées)"] }, ], }, autoeval: { @@ -377,6 +400,442 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { { heading: "Livraison", items: ["Résumé concis des changements effectués", "Problèmes éventuels signalés honnêtement", "Prochaines étapes proposées si pertinent"] }, ], }, + harness_suggest: { + title: "Harness ? (optionnel)", + color: "#166534", + nodeType: "POST-LIVRAISON (OPTIONNEL)", + sections: [ + { heading: "Quand suggérer", items: ["Un pattern a été expliqué plusieurs fois à différents agents", "Une décision architecturale est régulièrement violée", "Une convention n'est pas encore enforced par lint ou CI"] }, + { heading: "Règles", items: ["Jamais sans confirmation explicite de l'utilisateur", "Jamais au démarrage de mission — uniquement post-livraison", "Jamais sur le chemin critique — toujours en suggestion finale", "Proposer, ne jamais lancer automatiquement"] }, + ], + }, + uf_start: { + title: "Démarrage de session", + color: "#1e293b", + nodeType: "POINT D'ENTRÉE", + sections: [ + { heading: "Première action", items: ["Toujours scanner `docs/briefs/` avant toute autre chose — sans exception"] }, + ], + }, + uf_scan: { + title: "Scanne docs/briefs/", + color: "#6d28d9", + nodeType: "ACTION OBLIGATOIRE", + sections: [ + { heading: "Règle", items: ["Chercher les briefs existants dans `docs/briefs/` quelle que soit la quantité de contexte fournie par l'utilisateur", "C'est obligatoire — il n'y a pas d'exception"] }, + ], + }, + uf_briefs_found: { + title: "Brief(s) trouvé(s) ?", + color: "#64748b", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["AUCUN → passer directement à la Phase 1, sans question", "UN SEUL → vérifier le statut (draft / done / autre)", "PLUSIEURS → lister tous les briefs, demander lequel ou nouveau projet"] }, + ], + }, + uf_brief_status: { + title: "Statut : draft ?", + color: "#64748b", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["OUI (draft) → demander : continuer l'édition ou repartir de zéro ?", "NON (done/autre) → demander : réviser ce brief ou démarrer un nouveau projet ?"] }, + ], + }, + uf_ask_continue: { + title: "Continuer ou repartir ?", + color: "#7c3aed", + nodeType: "QUESTION UTILISATEUR", + sections: [ + { heading: "Options", items: ["CONTINUER → charger le brief, sauter directement à l'Étape 3 (mode révision)", "REPARTIR → flux Étape 1 normal"] }, + ], + }, + uf_ask_revise: { + title: "Réviser ou nouveau projet ?", + color: "#7c3aed", + nodeType: "QUESTION UTILISATEUR", + sections: [ + { heading: "Options", items: ["RÉVISER → charger le brief, sauter directement à l'Étape 3 (mode révision)", "NOUVEAU PROJET → flux Étape 1 normal"] }, + ], + }, + uf_load_brief: { + title: "Charger le brief", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Ce qui se passe", items: ["Lit le brief existant pour le mode révision", "Saute directement à l'Étape 3 — ignorer les Étapes 1 et 2"] }, + { heading: "Chemin rapide", items: ["Si le message d'ouverture de l'utilisateur fournit suffisamment de contexte → proposer de rédiger immédiatement (Étape 3 directe)"] }, + ], + }, + uf_no_brief: { + title: "Pas de brief → Phase 1", + color: "#475569", + nodeType: "TRANSITION", + sections: [ + { heading: "Règle", items: ["Pas de question posée — passer directement à la Phase 1 (Understand + Plan)", "C'est aussi le chemin quand l'utilisateur choisit 'repartir de zéro' ou 'nouveau projet'"] }, + ], + }, + uf_multi_found: { + title: "Plusieurs briefs trouvés", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Ce qui se passe", items: ["Lister tous les briefs avec chemin + statut + nom du projet", "Demander : lequel traiter ? (ou nouveau projet ?)", "Une fois choisi, suit la même logique que 'un seul brief trouvé'"] }, + ], + }, + uf_brief_end: { + title: "Brief écrit", + color: "#6d28d9", + nodeType: "SORTIE PHASE 0", + sections: [ + { heading: "Sortie", items: ["Brief sauvegardé dans `docs/briefs/{project-name}.md`"] }, + { heading: "Passation", items: ["Dire : 'Confier à Planning pour le décomposer en exec-plan, ou à Orion si la portée est déjà assez claire'", "C'est une suggestion verbale — PAS une délégation automatique"] }, + ], + }, + // ── Phases du flowchart unifié ── + phase0_brief_check: { + title: "Phase 0 — BRAINSTORM (optionnel)", + color: "#7c3aed", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Entrée", items: ["Scanner `docs/briefs/` — toujours, sans exception", "Aucun brief → Phase 1 directement", "Brief draft → demander : continuer ou repartir ?", "Plusieurs briefs → lister + choisir"] }, + { heading: "Fast path", items: ["Si scope déjà clair dans le message → flèche pointillée directe vers Phase 1", "Suggestion verbale uniquement — jamais de délégation automatique"] }, + ], + }, + phase0_run_brainstorm: { + title: "Lancer agent brainstorm", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Agent brainstorm", items: ["Étape 1 — Découverte : faire émerger le problème", "Étape 2 — Approfondissement : scope, critères, contraintes, risques", "Étape 3 — Rédaction + Validation : brief complet, porte qualité"] }, + ], + }, + phase0_produce_brief: { + title: "Produire le brief", + color: "#7c3aed", + nodeType: "SORTIE PHASE 0", + sections: [ + { heading: "Sortie", items: ["Brief écrit dans `docs/briefs/{project-name}.md`"] }, + { heading: "Passation", items: ["Suggestion verbale : confier à Planning ou à Orion si scope assez clair"] }, + ], + }, + phase1_read_sp: { + title: "Phase 1 — PLAN", + color: "#1d4ed8", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Ordre strict (9 étapes)", items: [ + "1. Lire `.opencode/scratchpad.md`", + "2. Appeler `project_state()`", + "3. Appeler `check_artifacts()`", + "4. Clarifier l'intention (ambigu ? bug ?)", + "5. Identifier le nombre de scopes", + "6. Choisir le type de plan (inline ou exec-plan)", + "7. Appeler `todowrite`", + "8. Écrire/mettre à jour le scratchpad", + "9. `compress` avant d'entrer en Phase 2", + ]}, + ], + }, + phase1_project_state: { + title: "project_state() + check_artifacts()", + color: "#1d4ed8", + nodeType: "LIFECYCLE TOOLS", + sections: [ + { heading: "Obligatoires au démarrage", items: ["`project_state()` — état complet des exec-plans, specs et briefs", "`check_artifacts()` — scan de cohérence inter-artefacts"] }, + ], + }, + phase1_clarify: { + title: "Clarifier intention → scope → type plan", + color: "#1d4ed8", + nodeType: "ACTION", + sections: [ + { heading: "Décisions", items: ["Ambigu ? → question via outil `question`", "Plusieurs scopes ? → proposer un ordre, attendre accord", "Plan simple → inline dans scratchpad", "Tâche complexe → invoquer agent `planning` → exec-plan"] }, + ], + }, + phase1_todowrite: { + title: "todowrite + écrire scratchpad", + color: "#1d4ed8", + nodeType: "ACTION", + sections: [ + { heading: "Actions", items: ["Créer/MAJ liste de tâches visible", "Écrire objectif, plan, décisions, questions ouvertes dans scratchpad"] }, + ], + }, + phase1_compress: { + title: "compress stale context", + color: "#1d4ed8", + nodeType: "GESTION DU CONTEXTE", + sections: [ + { heading: "Outils DCP", items: ["`distill` — résumer les outputs longs", "`prune` — élaguer les outputs exploratoires déjà distillés", "`compress` — nettoyer le contexte avant Phase 2"] }, + ], + }, + phase2_bug: { + title: "Phase 2 — DELEGATE", + color: "#15803d", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Sélection agent (hiérarchie stricte)", items: ["1. Agents user-defined (fichiers .md dans agent/)", "2. Agents plugin nommés (bug-finder, review-manager…)", "3. `explore` — read-only, plus rapide", "4. `general` + persona — fallback uniquement"] }, + { heading: "Cycle", items: ["MAJ scratchpad avant délégation", "Déléguer via `task`", "Succès → MAJ scratchpad, distill, mark_block_done", "Échec → diagnostiquer puis retry ≤2, sinon escalade"] }, + ], + }, + phase2_bug_finder: { + title: "bug-finder", + color: "#dc2626", + nodeType: "AGENT SPÉCIALISÉ", + sections: [ + { heading: "Rôle", items: ["Forcer l'analyse root-cause AVANT tout fix"] }, + { heading: "Verdicts", items: ["HIGH → fix via `general`", "MEDIUM → fix + signaler incertitude", "UNCERTAINTY_EXPOSED → stop, escalade user"] }, + ], + }, + phase2_select_agent: { + title: "Sélectionner agent (hiérarchie)", + color: "#15803d", + nodeType: "ACTION", + sections: [ + { heading: "Règle", items: ["Agents user-defined > plugin nommés > explore > general+persona", "Si `explore` ou `general` suffisent → ne pas inventer une persona"] }, + ], + }, + phase2_handoff: { + title: "Context handoff A→B", + color: "#15803d", + nodeType: "ACTION", + sections: [ + { heading: "Prompt auto-suffisant", items: ["Inclure chemins de fichiers, contraintes, output attendu", "Agents séquentiels : extraire l'essentiel de A, donner à B ce qui a changé/décidé/découvert", "Parallèle = plusieurs `task` calls dans le même message"] }, + ], + }, + phase2_success: { + title: "Succès agent ?", + color: "#15803d", + nodeType: "DÉCISION", + sections: [ + { heading: "En cas d'échec", items: ["Prompt peu clair → reformuler", "Overflow contexte → décomposer", "Info manquante → enrichir (explore d'abord)", "Mauvaise persona → changer", "Blocage fondamental → escalade"] }, + { heading: "Règle", items: ["Max 2 retries (tous types confondus) → escalade utilisateur"] }, + ], + }, + phase2_retry: { + title: "retry ≤2", + color: "#d97706", + nodeType: "BOUCLE", + sections: [ + { heading: "Process", items: ["Diagnostiquer la cause", "Reformuler / décomposer / enrichir / changer persona", "Toujours changer quelque chose entre deux tentatives"] }, + ], + }, + phase2_esc_user: { + title: "Escalade utilisateur", + color: "#991b1b", + nodeType: "ESCALADE", + sections: [ + { heading: "Règles", items: ["Décrire les 2 tentatives effectuées", "Expliquer le diagnostic de chaque échec", "Proposer options : reformuler, fournir contexte", "Ne jamais retenter une 3e fois sans instruction"] }, + ], + }, + phase3_delegate_rm: { + title: "Phase 3 — REVIEW", + color: "#b45309", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Règle absolue", items: ["TOUJOURS via review-manager — jamais de reviewer direct"] }, + { heading: "Fournir au review-manager", items: ["Fichiers modifiés + résumé des changements", "Exigences originales de l'utilisateur", "Trade-offs et décisions", "Ce qui est explicitement hors scope"] }, + { heading: "Fresh start vs Resume", items: ["Fresh (no task_id) pour les nouvelles reviews", "Resume (task_id) pour les corrections après CHANGES_REQUESTED"] }, + ], + }, + phase3_verdict: { + title: "Verdict ?", + color: "#b45309", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["APPROVED → Phase 4 (Synthesize)", "CHANGES_REQUESTED → re-déléguer fixes au producteur → re-review (max 2 rounds)", "BLOCKED → escalade immédiate, ne pas corriger sans input user"] }, + ], + }, + phase3_resume_fix: { + title: "Reprendre producteur → fix", + color: "#d97706", + nodeType: "BOUCLE", + sections: [ + { heading: "Process", items: ["Renvoyer les fixes précis à l'agent producteur (resume, task_id)", "Re-passer par review-manager", "Maximum 2 rounds au total"] }, + ], + }, + phase3_blocked_esc: { + title: "Escalade — BLOCKED", + color: "#991b1b", + nodeType: "ESCALADE", + sections: [ + { heading: "Règles strictes", items: ["Signaler le problème précis identifié par le reviewer", "Expliquer pourquoi c'est bloquant", "Proposer AUCUN fix dans le message d'escalade", "Attendre instruction explicite avant de continuer"] }, + ], + }, + phase4_self_eval: { + title: "Phase 4 — SYNTHESIZE", + color: "#4338ca", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Auto-évaluation (obligatoire avant rapport)", items: ["1. Répond à la vraie demande (pas l'interprétée) ?", "2. Les outputs multi-agents sont cohérents ?", "3. Quelque chose de nagging sur la correction ou les effets de bord ?"] }, + { heading: "Types de gap", items: ["Gap mineur → fix rapide puis rapport", "Gap majeur → retour vers Phase 2 (Delegate)", "Confusion scope → demander à l'utilisateur"] }, + ], + }, + phase4_gap: { + title: "Type gap ?", + color: "#4338ca", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["OK → rapport final", "Mineur → fix rapide → sp_capture", "Majeur → retour Phase 2 (loop dashed)", "Scope → demander à l'utilisateur"] }, + ], + }, + phase4_minor: { + title: "Gap mineur → fix rapide", + color: "#d97706", + nodeType: "ACTION", + sections: [ + { heading: "Traitement", items: ["Corriger le détail manquant directement", "Pas besoin de repasser par Review si trivial", "Inclure dans le rapport final"] }, + ], + }, + phase4_scope: { + title: "Scope confusion → demander user", + color: "#64748b", + nodeType: "ACTION", + sections: [ + { heading: "Traitement", items: ["Ne pas livrer une mauvaise réponse", "Poser la question précise avant de continuer"] }, + ], + }, + phase4_sp_capture: { + title: "Capture finale scratchpad", + color: "#4338ca", + nodeType: "ACTION", + sections: [ + { heading: "Avant le rapport", items: ["Marquer la mission comme complète dans le scratchpad", "Ne pas effacer (l'utilisateur peut revenir)", "`## Plan` — statuts finaux", "`## Decisions` — dernières décisions enregistrées"] }, + ], + }, + phase4_report: { + title: "Rapport (human-tone)", + color: "#4338ca", + nodeType: "LIVRAISON", + sections: [ + { heading: "Règles de communication", items: ["Mener avec le résultat, pas le processus", "Mettre en avant succès et échecs honnêtement", "Ne pas édulcorer les échecs d'agents", "Proposer des prochaines étapes concrètes si pertinent"] }, + ], + }, + phase5_pattern: { + title: "Phase 5 — MAINTENANCE", + color: "#475569", + nodeType: "PHASE PRINCIPALE", + sections: [ + { heading: "Deux chemins indépendants", items: ["Path A — Harness : encoder le pattern en artefact mécanique (lint, CI, AGENTS.md)", "Path B — Gardener : corriger docs obsolètes + détecter dérive de code"] }, + { heading: "Règles", items: ["Jamais sans confirmation explicite de l'utilisateur", "Jamais au démarrage de mission — uniquement post-livraison"] }, + ], + }, + phase5_harness: { + title: "Harness", + color: "#15803d", + nodeType: "AGENT SPÉCIALISÉ", + sections: [ + { heading: "Quand suggérer", items: ["Pattern expliqué plusieurs fois à des agents différents", "Décision architecturale régulièrement violée", "Convention pas encore enforced par lint ou CI"] }, + { heading: "Ce que produit Harness", items: ["Convention code → règle lint custom (ESLint, Ruff…)", "Contrainte build/déploiement → job CI", "Règle agent → entrée AGENTS.md", "Principe non mécanisable → entrée docs/guiding-principles.md"] }, + ], + }, + phase5_gardener: { + title: "Gardener", + color: "#475569", + nodeType: "AGENT SPÉCIALISÉ", + sections: [ + { heading: "Fonction 1 — Doc-Gardening", items: ["Détecte refs obsolètes, descriptions périmées, liens cassés", "Corrige le contenu, ouvre une PR par document"] }, + { heading: "Fonction 2 — Code-GC", items: ["Dérive ponctuelle → PR de refactoring ciblée", "Pattern récurrent → escalade vers Harness"] }, + ], + }, + phase5_recurring: { + title: "Pattern récurrent ?", + color: "#475569", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["OUI → escalade vers Harness (confirmation requise)", "NON → PR ciblée uniquement"] }, + ], + }, + phase5_esc_harness: { + title: "Escalader vers Harness", + color: "#15803d", + nodeType: "ACTION", + sections: [ + { heading: "Process", items: ["Gardener vérifie avec Orion / utilisateur avant d'invoquer Harness", "Harness procède directement une fois invoqué — il ne re-demande pas"] }, + ], + }, + phase_start: { + title: "Requête utilisateur", + color: "#1e293b", + nodeType: "POINT D'ENTRÉE", + sections: [ + { heading: "Point d'entrée", items: ["L'utilisateur soumet une demande", "Orion scanne les briefs existants avant toute autre action"] }, + ], + }, + phase_end: { + title: "Rapport à l'utilisateur", + color: "#1e293b", + nodeType: "LIVRAISON", + sections: [ + { heading: "Livraison", items: ["Résumé concis des changements effectués", "Problèmes éventuels signalés honnêtement", "Prochaines étapes proposées si pertinent"] }, + ], + }, + phase0: { + title: "Phase 0 — BRAINSTORM (optionnel)", + color: "#7c3aed", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Phase de découverte. Se déclenche quand la demande est vague ou quand un nouveau projet démarre.", "Produit un product brief dans docs/briefs/{project-name}.md.", "Optionnelle — si brief existant ou scope clair, chemin rapide vers Phase 1."] }], + }, + phase1: { + title: "Phase 1 — PLAN", + color: "#1d4ed8", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Séquence de planification en 9 étapes strictes.", "Lire scratchpad → outils lifecycle → clarifier → scope → type plan → todowrite → écrire scratchpad → compress."] }], + }, + phase2: { + title: "Phase 2 — DELEGATE", + color: "#15803d", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Sélectionner les agents (hiérarchie stricte), déléguer via task, gérer les échecs avec retry ≤2.", "Les bug reports vont toujours vers bug-finder en premier."] }], + }, + phase3: { + title: "Phase 3 — REVIEW", + color: "#b45309", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Toujours via review-manager (jamais de reviewers directs).", "APPROVED → Phase 4, CHANGES_REQUESTED → re-déléguer (max 2 rounds), BLOCKED → escalade."] }], + }, + phase4: { + title: "Phase 4 — SYNTHESIZE", + color: "#4338ca", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Auto-éval (3 questions) → traitement des gaps → capture finale scratchpad → rapport human-tone."] }], + }, + phase5: { + title: "Phase 5 — MAINTENANCE", + color: "#475569", + nodeType: "PHASE", + sections: [{ heading: "Rôle", items: ["Post-livraison, optionnel. Deux chemins : Harness (enforcement de patterns) et Gardener (détection de dérive docs/code)."] }], + }, + }, + unifiedSvgLabels: { + uf_start: "Démarrage de session", + uf_scan: "Scanne docs/briefs/", + uf_scan_sub: "(toujours — obligatoire)", + uf_briefs_found: "Brief(s) trouvé(s) ?", + uf_no_brief: "Pas de brief → Phase 1", + uf_brief_status: "Statut : draft ?", + uf_ask_continue: "Continuer ou repartir ?", + uf_ask_revise: "Réviser ou nouveau projet ?", + uf_load_brief: "Charger le brief", + uf_multi_found: "Plusieurs briefs → liste + choisir", + uf_brief_end: "Brief écrit", + uf_brief_end_sub: "suggérer Planning ou Orion", + uf_phase0_label: "Phase 0 — BRAINSTORM (optionnel)", + uf_placeholder_label: "Phase 1–5 (à venir)", + uf_step1_label: "Étape 1 — Découverte", + uf_step2_label: "Étape 2 — Rédaction du brief", + uf_step3_label: "Étape 3 — Alignement", + uf_expand_hint: "Voir les étapes", + uf_collapse_hint: "Masquer les étapes", + uf_arrow_none: "AUCUN", + uf_arrow_one: "UN SEUL", + uf_arrow_multiple: "PLUSIEURS", + uf_arrow_draft: "BROUILLON", + uf_arrow_done: "TERMINÉ", + uf_arrow_continue: "CONTINUER", + uf_arrow_fresh: "REPARTIR", + uf_arrow_revise: "RÉVISER", + uf_arrow_new_project: "NOUVEAU PROJET", + uf_arrow_phase3: "→ Étape 3", }, brainstormSvgLabels: { bs_start: "Démarrage session", @@ -386,12 +845,12 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { bs_status_check: "Statut = brouillon ?", bs_ask_continue: "Continuer ou nouveau ?", bs_load_brief: "Charger le brief", - bs_phase1: "Phase 1 — Découverte", + bs_phase1: "Étape 1 — Découverte", bs_problem_clear: "Problème clair ?", - bs_phase2: "Phase 2 — Approfondissement", + bs_phase2: "Étape 2 — Approfondissement", bs_adversarial: "Porte adversariale", bs_template_fillable: "Toutes sections remplissables ?", - bs_phase3: "Phase 3 — Rédaction + Validation", + bs_phase3: "Étape 3 — Rédaction + Validation", bs_quality_gate: "Porte qualité", bs_quality_passed: "Porte qualité passée ?", bs_file_exists: "Fichier existant ?", @@ -422,173 +881,200 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { }, brainstormDetails: { bs_start: { - title: "Session Start", + title: "Démarrage de session", color: "#0d9488", - nodeType: "ENTRY POINT", + nodeType: "POINT D'ENTRÉE", sections: [ - { heading: "What happens", items: ["Session is initiated with brainstorm agent", "Agent globs docs/briefs/**/*.md to check for existing briefs", "Routing decision made before any questions are asked"] }, + { heading: "Ce qui se passe", items: ["La session est initiée avec l'agent brainstorm", "L'agent scanne docs/briefs/ pour vérifier les briefs existants", "Décision de routage prise avant toute question"] }, ], }, bs_existing_check: { - title: "Existing briefs found?", + title: "Briefs existants ?", color: "#0d9488", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Branches", items: ["NO → Flow normal → Phase 1 (Discovery)", "ONE found → check status (draft / done)", "MULTIPLE found → list briefs, ask which one or new project"] }, + { heading: "Branches", items: ["AUCUN → Flux normal → Étape 1 (Découverte)", "UN SEUL → vérifier le statut (brouillon / terminé)", "PLUSIEURS → lister les briefs, demander lequel ou nouveau projet"] }, ], }, bs_single_found: { - title: "One brief found", + title: "Un brief trouvé", color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Single brief located at docs/briefs/", "Agent checks the status field in the brief frontmatter", "Routes to status decision"] }, + { heading: "Ce qui se passe", items: ["Un brief localisé dans docs/briefs/", "L'agent vérifie le champ statut dans le frontmatter du brief", "Routage vers la décision de statut"] }, ], }, bs_multi_found: { - title: "Multiple briefs found", + title: "Plusieurs briefs trouvés", color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Agent lists all found briefs to the user", "Asks: which one to resume, or start a new project?", "CHOOSE EXISTING → Load brief → Phase 3 (revision)", "NEW PROJECT → Flow normal → Phase 1"] }, + { heading: "Ce qui se passe", items: ["L'agent liste tous les briefs trouvés à l'utilisateur", "Demande : lequel reprendre, ou démarrer un nouveau projet ?", "CHOISIR EXISTANT → Charger brief → Étape 3 (révision)", "NOUVEAU PROJET → Flux normal → Étape 1"] }, ], }, bs_status_check: { - title: "Status = draft?", + title: "Statut = brouillon ?", color: "#0891b2", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Branches", items: ["YES (draft) → Ask: continue or fresh start?", "NO (done/other) → Inform user, ask new project name → Phase 1"] }, + { heading: "Branches", items: ["OUI (brouillon) → Demander : continuer ou repartir de zéro ?", "NON (terminé/autre) → Informer l'utilisateur, demander un nouveau nom de projet → Étape 1"] }, ], }, bs_ask_continue: { - title: "Continue or fresh start?", + title: "Continuer ou repartir de zéro ?", color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["User is shown the existing draft brief summary", "Asked: resume from where we left off, or start fresh?", "CONTINUE → Load brief → jump directly to Phase 3 (revision)", "FRESH → Ignore existing brief → Phase 1 (Discovery)"] }, + { heading: "Ce qui se passe", items: ["L'utilisateur voit le résumé du brief en brouillon existant", "Demandé : reprendre là où on s'est arrêtés, ou repartir de zéro ?", "CONTINUER → Charger brief → sauter directement à l'Étape 3 (révision)", "REPARTIR → Ignorer le brief existant → Étape 1 (Découverte)"] }, ], }, bs_load_brief: { - title: "Load brief", + title: "Charger le brief", color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Agent reads the existing brief file from docs/briefs/", "Provides full context to Phase 3 (revision mode)", "User can iterate on the existing content rather than restarting"] }, + { heading: "Ce qui se passe", items: ["L'agent lit le fichier brief existant dans docs/briefs/", "Fournit le contexte complet à l'Étape 3 (mode révision)", "L'utilisateur peut itérer sur le contenu existant plutôt que de repartir de zéro"] }, ], }, bs_phase1: { - title: "Phase 1 — Discovery", + title: "Étape 1 — Découverte", color: "#2563eb", - nodeType: "MAIN PHASE", + nodeType: "ÉTAPE PRINCIPALE", sections: [ - { heading: "Core question", items: ["\"What problem are you trying to solve, and who experiences it?\""] }, - { heading: "Rules", items: ["Max 2 questions at a time — never overwhelm", "Surface the problem, not the solution", "Do not accept vague answers — push for specifics", "Iterate until problem is stated clearly"] }, - { heading: "Exit criteria", items: ["Problem stated in 2–4 sentences", "Primary user named", "Problem is a problem, not a feature"] }, + { heading: "Question centrale", items: ["\"Quel problème essaies-tu de résoudre, et qui en souffre ?\""] }, + { heading: "Règles", items: ["Max 2 questions à la fois — ne jamais surcharger", "Faire émerger le problème, pas la solution", "Ne pas accepter les réponses vagues — pousser vers des précisions", "Itérer jusqu'à ce que le problème soit clairement formulé"] }, + { heading: "Critères de sortie", items: ["Problème formulé en 2–4 phrases", "Utilisateur principal nommé", "C'est bien un problème, pas une fonctionnalité"] }, ], }, bs_problem_clear: { - title: "Problem clear?", + title: "Problème clair ?", color: "#2563eb", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Exit criteria", items: ["YES → problem stated in 2–4 clear sentences AND primary user named → Phase 2", "NO → iterate — ask more targeted follow-up questions"] }, + { heading: "Critères de sortie", items: ["OUI → problème formulé en 2–4 phrases claires ET utilisateur principal nommé → Étape 2", "NON → itérer — poser des questions de suivi plus ciblées"] }, ], }, bs_phase2: { - title: "Phase 2 — Deep Dive", + title: "Étape 2 — Approfondissement", color: "#4f46e5", - nodeType: "MAIN PHASE", + nodeType: "ÉTAPE PRINCIPALE", sections: [ - { heading: "Topics to cover", items: ["Scope and boundaries — what is explicitly out of scope?", "Success criteria — how will you know it worked?", "Use cases — top 3–5 concrete scenarios", "Constraints — technical, time, team, budget", "Rejected ideas — what was considered and discarded?"] }, - { heading: "Socratic pressure", items: ["Challenge assumptions — \"Why is X the right approach?\"", "Ask about failure modes — \"What would make this fail?\"", "Probe edges — \"What happens when Y doesn't work?\""] }, + { heading: "Sujets à couvrir", items: ["Périmètre et frontières — qu'est-ce qui est explicitement hors périmètre ?", "Critères de succès — comment savoir que ça a marché ?", "Cas d'usage — top 3–5 scénarios concrets", "Contraintes — technique, temps, équipe, budget", "Idées rejetées — ce qui a été considéré et écarté ?"] }, + { heading: "Pression socratique", items: ["Challenger les hypothèses — \"Pourquoi X est la bonne approche ?\"", "Demander les modes d'échec — \"Qu'est-ce qui ferait échouer ça ?\"", "Sonder les cas limites — \"Que se passe-t-il si Y ne fonctionne pas ?\""] }, ], }, bs_adversarial: { - title: "Adversarial Gate", + title: "Porte adversariale", color: "#7c3aed", - nodeType: "GATE", + nodeType: "PORTE", sections: [ - { heading: "Two mandatory questions", items: ["\"What is the strongest case against building this?\"", "\"What would have to be true for this to fail in year 1?\""] }, - { heading: "Purpose", items: ["Forces the user to articulate real risks", "Prevents over-optimistic briefs that skip failure modes", "If user can't answer, the problem statement needs more work"] }, + { heading: "Deux questions obligatoires", items: ["\"Quel est l'argument le plus fort contre la construction de ça ?\"", "\"Que devrait-il être vrai pour que ça échoue en an 1 ?\""] }, + { heading: "But", items: ["Force l'utilisateur à articuler les vrais risques", "Empêche les briefs trop optimistes qui sautent les modes d'échec", "Si l'utilisateur ne peut pas répondre, le problème a besoin de plus de travail"] }, ], }, bs_template_fillable: { - title: "All template sections fillable?", + title: "Toutes les sections remplissables ?", color: "#7c3aed", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Branches", items: ["YES → proceed to Phase 3 (draft + validation)", "NO → iterate back in Phase 2 — identify which sections are still empty"] }, - { heading: "Template sections required", items: ["Problem statement", "Primary user", "Success criteria", "Top use cases", "Constraints", "Out of scope", "Risks / adversarial answers"] }, + { heading: "Branches", items: ["OUI → passer à l'Étape 3 (rédaction + validation)", "NON → itérer dans l'Étape 2 — identifier les sections encore vides"] }, + { heading: "Sections requises", items: ["Énoncé du problème", "Utilisateur principal", "Critères de succès", "Top cas d'usage", "Contraintes", "Hors périmètre", "Risques / réponses adversariales"] }, ], }, bs_phase3: { - title: "Phase 3 — Draft + Validation", + title: "Étape 3 — Rédaction + Validation", color: "#6d28d9", - nodeType: "MAIN PHASE", + nodeType: "ÉTAPE PRINCIPALE", sections: [ - { heading: "What happens", items: ["Agent generates the full brief inline from collected context", "User reviews the draft and provides feedback", "Agent iterates until user confirms the brief is ready", "Quality gate is run before writing to disk"] }, - { heading: "Output format", items: ["Markdown file at docs/briefs/{project-name}.md", "Structured sections: problem, users, success criteria, use cases, constraints, risks"] }, + { heading: "Ce qui se passe", items: ["L'agent génère le brief complet inline depuis le contexte collecté", "L'utilisateur révise le brouillon et donne son retour", "L'agent itère jusqu'à ce que l'utilisateur confirme que le brief est prêt", "La porte qualité est passée avant l'écriture sur disque"] }, + { heading: "Format de sortie", items: ["Fichier Markdown dans docs/briefs/{project-name}.md", "Sections structurées : problème, utilisateurs, critères de succès, cas d'usage, contraintes, risques"] }, ], }, - bs_quality_gate: { - title: "Quality Gate", + bs_quality_gate: { + title: "Porte qualité", color: "#6d28d9", - nodeType: "GATE", + nodeType: "PORTE", sections: [ - { heading: "Tier 1 — auto-fix silently", items: ["Minor formatting issues", "Incomplete sentences that can be inferred", "Missing punctuation or capitalization"] }, - { heading: "Tier 2 — ask user via question tool", items: ["Ambiguous success criteria", "Conflicting constraints", "Vague scope boundaries"] }, - { heading: "BLOCKED — escalate immediately", items: ["No problem statement at all", "No success criteria", "Empty scope — can't determine what to build"] }, + { heading: "Niveau 1 — correction silencieuse automatique", items: ["Problèmes de formatage mineurs", "Phrases incomplètes inférables", "Ponctuation ou majuscules manquantes"] }, + { heading: "Niveau 2 — demander à l'utilisateur via l'outil question", items: ["Critères de succès ambigus", "Contraintes conflictuelles", "Frontières de périmètre vagues"] }, + { heading: "BLOQUÉ — escalader immédiatement", items: ["Aucun énoncé de problème", "Aucun critère de succès", "Périmètre vide — impossible de déterminer ce qu'il faut construire"] }, ], }, bs_quality_passed: { - title: "Quality gate passed?", + title: "Porte qualité passée ?", color: "#6d28d9", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Branches", items: ["PASSED → proceed to file write check", "TIER 2 issues → ask user → resolve → re-run gate", "BLOCKED (no problem, no success criteria, empty scope) → STOP — escalate to user, do not write"] }, + { heading: "Branches", items: ["PASSÉ → passer à la vérification d'écriture de fichier", "Problèmes NIVEAU 2 → demander à l'utilisateur → résoudre → re-passer la porte", "BLOQUÉ (pas de problème, pas de critères de succès, périmètre vide) → STOP — escalader à l'utilisateur, ne pas écrire"] }, ], }, bs_file_exists: { - title: "File already exists?", + title: "Fichier existant ?", color: "#7c3aed", - nodeType: "DECISION", + nodeType: "DÉCISION", sections: [ - { heading: "Check", items: ["Agent checks if docs/briefs/{project-name}.md already exists on disk"] }, - { heading: "Branches", items: ["NO → write directly", "YES → ask user: overwrite, new version, or rename?"] }, + { heading: "Vérification", items: ["L'agent vérifie si docs/briefs/{project-name}.md existe déjà sur disque"] }, + { heading: "Branches", items: ["NON → écrire directement", "OUI → demander à l'utilisateur : écraser, nouvelle version, ou renommer ?"] }, ], }, bs_file_conflict: { - title: "Overwrite / new version / rename?", + title: "Écraser / nouvelle version / renommer ?", color: "#7c3aed", nodeType: "ACTION", sections: [ - { heading: "Options", items: ["OVERWRITE → replace existing file with new brief", "NEW VERSION → write as {name}-v2.md (or -v3, etc.)", "RENAME → write with a custom filename provided by the user"] }, + { heading: "Options", items: ["ÉCRASER → remplacer le fichier existant par le nouveau brief", "NOUVELLE VERSION → écrire comme {name}-v2.md (ou -v3, etc.)", "RENOMMER → écrire avec un nom de fichier personnalisé fourni par l'utilisateur"] }, ], }, bs_write: { - title: "Write file", + title: "Écrire le fichier", color: "#15803d", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Agent writes the validated brief to docs/briefs/{project-name}.md", "File is created or overwritten depending on the conflict resolution choice", "Brief is ready for Planning or Orion to consume"] }, + { heading: "Ce qui se passe", items: ["L'agent écrit le brief validé dans docs/briefs/{project-name}.md", "Le fichier est créé ou écrasé selon le choix de résolution de conflit", "Le brief est prêt à être consommé par Planning ou Orion"] }, ], }, bs_end: { - title: "Brief written", + title: "Brief écrit", color: "#1e293b", - nodeType: "DELIVERY", + nodeType: "LIVRAISON", sections: [ - { heading: "Handoff", items: ["Brief written to docs/briefs/{project-name}.md", "Hand to Planning agent for execution plan", "Or hand to Orion (team-lead) directly for implementation"] }, + { heading: "Passation", items: ["Brief écrit dans docs/briefs/{project-name}.md", "Confier à l'agent Planning pour le plan d'exécution", "Ou confier directement à Orion (team-lead) pour l'implémentation"] }, ], }, bs_esc_blocked: { - title: "Escalation — BLOCKED", + title: "Escalade — BLOQUÉ", color: "#991b1b", - nodeType: "ESCALATION", + nodeType: "ESCALADE", sections: [ - { heading: "When this triggers", items: ["No problem statement at all", "No success criteria defined", "Scope is empty — cannot determine what to build"] }, - { heading: "What happens", items: ["Agent stops immediately — does not write the brief", "Reports precisely what is missing to the user", "User must provide the missing information before continuing"] }, + { heading: "Quand ça se déclenche", items: ["Aucun énoncé de problème", "Aucun critère de succès défini", "Périmètre vide — impossible de déterminer ce qu'il faut construire"] }, + { heading: "Ce qui se passe", items: ["L'agent s'arrête immédiatement — n'écrit pas le brief", "Rapporte précisément ce qui manque à l'utilisateur", "L'utilisateur doit fournir les informations manquantes avant de continuer"] }, + ], + }, + uf_step1: { + title: "Étape 1 — Découverte", + color: "#2563eb", + nodeType: "SOUS-ÉTAPE BRAINSTORM", + sections: [ + { heading: "Rôle", items: ["L'agent pose des questions ciblées sur le projet", "Fait émerger le problème central et les utilisateurs concernés", "Max 2 questions à la fois — ne jamais surcharger"] }, + { heading: "Critères de sortie", items: ["Problème formulé en 2–4 phrases", "Utilisateur principal nommé", "C'est bien un problème, pas une fonctionnalité"] }, + ], + }, + uf_step2: { + title: "Étape 2 — Rédaction du brief", + color: "#4f46e5", + nodeType: "SOUS-ÉTAPE BRAINSTORM", + sections: [ + { heading: "Ce qui se passe", items: ["L'agent génère le brief complet depuis le contexte collecté", "L'utilisateur révise et donne son retour", "L'agent itère jusqu'à validation", "La porte qualité est passée avant l'écriture sur disque"] }, + { heading: "Sortie", items: ["Fichier Markdown dans docs/briefs/{project-name}.md"] }, + ], + }, + uf_step3: { + title: "Étape 3 — Alignement", + color: "#6d28d9", + nodeType: "SOUS-ÉTAPE BRAINSTORM", + sections: [ + { heading: "Ce qui se passe", items: ["Révision du brief avec l'utilisateur", "Itération jusqu'à confirmation", "Une fois validé : suggestion de passer à Planning ou Orion"] }, + { heading: "Modes", items: ["Chemin normal : Étape 1 → Étape 2 → Étape 3", "Chemin rapide : brief existant chargé → Étape 3 directement"] }, ], }, }, @@ -600,7 +1086,6 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { svgLabels: { start: "User request", scratchpad_sub: "Current plan · Context", - memory_sub: "Persistent learnings", ambigu: "Ambiguous?", question_label: "User question", question_sub: "tool: question", @@ -616,10 +1101,14 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { arrow_non: "NO", arrow_gap_majeur: "Major gap", arrow_gap_mineur: "Minor gap", - mem_read_here: "read here", + scratchpad_rw_label: "← read/write", annot_delegate: "↳ Update scratchpad after each agent return", annot_agents: "✎ after agent return", - annot_memory: "↳ Write memory.md if new learnings", + agents_label: "Sub-agents", + annot_plan: "✎ scratchpad | planning agent if ambiguous", + annot_harness: "suggest to user — never launch without confirmation", + harness_arrow: "recurring pattern?", + harness_node_label: "Harness? (optional)", }, details: { start: { @@ -635,8 +1124,9 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#2563eb", nodeType: "MAIN PHASE", sections: [ - { heading: "Memory read", items: [".opencode/scratchpad.md — current work plan", ".opencode/memory.md — persistent project learnings"] }, - { heading: "Lifecycle calls (mandatory)", items: ["`project_state()` — full view of exec-plans, specs, and briefs", "`check_artifacts()` — cross-artifact consistency scan"] }, + { heading: "Memory read", items: [".opencode/scratchpad.md — current work plan"] }, + { heading: "Lifecycle calls (mandatory at mission start)", items: ["`project_state()` — full view of exec-plans, specs, and briefs", "`check_artifacts()` — cross-artifact consistency scan"] }, + { heading: "Lifecycle calls (throughout the workflow)", items: ["`mark_block_done()` — after each validated delivery", "`complete_plan()` — when all blocks are done and final review is APPROVED", "`register_spec()` — when a new spec needs to exist on disk"] }, { heading: "Goal", items: ["Parse the request (explicit vs implicit)", "Identify ambiguity before planning", "Check if a scope was in progress (scratchpad)"] }, ], }, @@ -651,39 +1141,16 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { "Overwritten at each new mission", ]}, { heading: "When to read", items: ["On startup — read mission state if it exists"] }, - { heading: "When to write (5 moments)", items: [ + { heading: "When to write (6 moments)", items: [ "Startup — goal + plan + initial decisions", "Before delegation — sub-tasks, modified files, resume context", "After agent return — synthesized key results", "After review — task status + verdict", + "After each decision — record what was decided and why", "End of mission — final capture before user report", ]}, ], }, - memory: { - title: "📄 memory.md", - color: "#22c55e", - nodeType: "PERSISTENT MEMORY", - sections: [ - { heading: "Role", items: [ - "Cross-session project knowledge base", - "Injected into every LLM call automatically", - "Append-only — never overwrite, clean obsolete entries", - ]}, - { heading: "When to read", items: ["Injected automatically — no action required"] }, - { heading: "When to write", items: [ - "Build/test commands discovered in the project", - "Important architecture decisions retained", - "Recurring conventions and patterns in the codebase", - "Observed user preferences", - "Project-specific technologies/constraints", - ]}, - { heading: "What does NOT belong here", items: [ - "Current task state → scratchpad", - "Temporary or mission-specific info", - ]}, - ], - }, ambigu: { title: "Ambiguous?", color: "#64748b", @@ -707,6 +1174,8 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { nodeType: "MAIN PHASE", sections: [ { heading: "Actions", items: ["Create/update todo list → todowrite", "Write plan + context in scratchpad", "Identify required agents", "Determine parallel vs sequential"] }, + { heading: "Exec-plans", items: ["Invoke `planning` agent if: ambiguous request + multi-session + AGENTS.md doesn't clarify", "Simple plan → inline in scratchpad", "Exec-plan → file at docs/exec-plans/.md", "When an exec-plan exists: scratchpad points to it — `See exec-plan: docs/exec-plans/.md`"] }, + { heading: "Lifecycle", items: ["`register_spec()` — when a new spec needs to exist on disk"] }, { heading: "Rule", items: ["One scope at a time — finish before moving to the next", "Park secondary scopes in the scratchpad"] }, ], }, @@ -737,132 +1206,502 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { { heading: "Verdicts", items: ["HIGH → direct fix via `general` with the analysis", "MEDIUM → fix via `general` + report uncertainty to user", "UNCERTAINTY_EXPOSED → surface open questions to user before continuing"] }, ], }, - certitude: { - title: "Certainty?", - color: "#be123c", + certitude: { + title: "Certainty?", + color: "#be123c", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["HIGH / MEDIUM → join Agents flow with analysis in context", "UNCERTAINTY_EXPOSED → user escalation, wait for answer before any fix"] }, + ], + }, + escalade_uncertainty: { + title: "Escalation — UNCERTAINTY_EXPOSED", + color: "#991b1b", + nodeType: "ESCALATION", + sections: [ + { heading: "Message to user", items: ["Present identified hypotheses and their probabilities", "List the precise questions blocking the diagnosis", "Do not propose a fix in this state"] }, + ], + }, + agents: { + title: "Sub-agents", + color: "#6d28d9", + nodeType: "DELEGATION", + sections: [ + { heading: "Types", items: ["`explore` (native OpenCode) — read-only: search, glob, read", "`general` (native OpenCode) — full access: read, write, bash", "Custom persona — `backend-engineer`, `api-architect`…"] }, + { heading: "Context handoff", items: ["Each agent starts from scratch — be explicit", "Include modified files, decisions, interfaces", "Parallel = multiple task calls in the same message"] }, + ], + }, + agent_failure: { + title: "Agent failure?", + color: "#64748b", + nodeType: "DECISION", + sections: [ + { heading: "Diagnostics", items: ["Bad prompt → rephrase with more precision", "Insufficient context → send `explore` first, retry with findings", "Task too large → break into sub-tasks", "Tool error → check permissions and paths"] }, + { heading: "Rule", items: ["Max 2 retries — always change something between attempts", "If still failing after 2 attempts → user escalation"] }, + ], + }, + retry: { + title: "↩ Retry (max 2)", + color: "#b45309", + nodeType: "LOOP", + sections: [ + { heading: "Process", items: ["Diagnose the cause of failure", "Rephrase / decompose / enrich context", "Relaunch the agent with the new prompt"] }, + ], + }, + escalade_retry: { + title: "Escalation — 2 retries exceeded", + color: "#991b1b", + nodeType: "ESCALATION", + sections: [ + { heading: "Message to user", items: ["Describe what was attempted (2 attempts)", "Explain the diagnosis of each failure", "Propose options: rephrase the task, provide additional context", "Never retry a 3rd time without explicit instruction"] }, + ], + }, + review: { + title: "4. Review", + color: "#b45309", + nodeType: "MAIN PHASE", + sections: [ + { heading: "Absolute rule", items: ["ALWAYS via review-manager — never a direct reviewer", "Mandatory for any code, config, infra, security change"] }, + { heading: "Provide to review-manager", items: ["Modified files + summary of changes", "Original user requirements", "Trade-offs and decisions made", "What was explicitly out of scope"] }, + { heading: "Lifecycle", items: ["`mark_block_done()` — after each validated delivery", "`complete_plan()` — when all blocks are done and final review is APPROVED"] }, + ], + }, + review_manager: { + title: "review-manager", + color: "#92400e", + nodeType: "ORCHESTRATOR AGENT", + sections: [ + { heading: "Role", items: ["Review orchestrator — never a direct reviewer", "Spawns in parallel: code-reviewer, security-reviewer, requirements-reviewer", "Synthesizes verdicts and arbitrates disagreements"] }, + { heading: "Skip authorized only if", items: ["Docs-only change (no code modified)", "No possible security impact", "User explicitly requests speed"] }, + ], + }, + verdict: { + title: "Review verdict?", + color: "#b45309", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["APPROVED → Synthesize & Report", "CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)", "BLOCKED → immediate user escalation, do not fix without user input"] }, + ], + }, + changes_loop: { + title: "↩ Fix + re-review (max 2)", + color: "#b45309", + nodeType: "LOOP", + sections: [ + { heading: "Process", items: ["Send precise fixes back to the producer agent", "Re-run through review-manager", "Maximum 2 rounds total"] }, + ], + }, + escalade_blocked: { + title: "Escalation — BLOCKED", + color: "#991b1b", + nodeType: "ESCALATION", + sections: [ + { heading: "Strict rules", items: ["Report the precise problem identified by the reviewer", "Explain why it is blocking (not just a warning)", "Propose NO fix in the escalation message", "Wait for explicit instruction before continuing"] }, + ], + }, + synthesize: { + title: "5. Synthesize & Report", + color: "#15803d", + nodeType: "MAIN PHASE", + sections: [ + { heading: "Self-evaluation", items: ["Answers the real request (not the interpreted one)?", "No contradiction between agent results?", "Nothing missing in the deliverable?"] }, + { heading: "Memory update", items: ["Clean up scratchpad (completed tasks)"] }, + ], + }, + autoeval: { + title: "Self-eval OK?", + color: "#15803d", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["OK → final report to user", "Minor gap (missing detail) → quick fix then report", "Major gap (wrong approach) → back to Delegate"] }, + ], + }, + gap_majeur: { + title: "↩ Back to Delegate", + color: "#166534", + nodeType: "LOOP", + sections: [ + { heading: "Treatment", items: ["Treat the gap as a new task", "Resume from Delegate phase", "Update todo list and scratchpad before delegating"] }, + ], + }, + fix_rapide: { + title: "Quick fix", + color: "#166534", + nodeType: "ACTION", + sections: [ + { heading: "Treatment", items: ["Fix the missing detail directly", "No need to go through Review if the fix is trivial", "Include in the final report"] }, + ], + }, + end: { + title: "Report to user", + color: "#1e293b", + nodeType: "DELIVERY", + sections: [ + { heading: "Delivery", items: ["Concise summary of changes made", "Any issues reported honestly", "Suggested next steps if relevant"] }, + ], + }, + harness_suggest: { + title: "Harness? (optional)", + color: "#166534", + nodeType: "POST-DELIVERY (OPTIONAL)", + sections: [ + { heading: "When to suggest", items: ["A pattern has been explained multiple times to different agents", "An architectural decision keeps getting violated", "A convention is not yet enforced by lint or CI"] }, + { heading: "Rules", items: ["Never without explicit user confirmation", "Never at mission start — only post-delivery", "Never on the critical path — always a final suggestion", "Propose, never launch automatically"] }, + ], + }, + uf_start: { + title: "Session Start", + color: "#1e293b", + nodeType: "ENTRY POINT", + sections: [ + { heading: "First action", items: ["Always scan `docs/briefs/` before anything else — no exceptions"] }, + ], + }, + uf_scan: { + title: "Scan docs/briefs/", + color: "#6d28d9", + nodeType: "MANDATORY ACTION", + sections: [ + { heading: "Rule", items: ["Scan `docs/briefs/` regardless of how much context the user provided", "This is mandatory — there are no exceptions"] }, + ], + }, + uf_briefs_found: { + title: "Brief(s) found?", + color: "#64748b", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["NONE → proceed to Phase 1 directly, no question asked", "ONE → check status (draft / done / other)", "MULTIPLE → list all briefs, ask which one or new project"] }, + ], + }, + uf_brief_status: { + title: "Status: draft?", + color: "#64748b", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["YES (draft) → ask: continue editing or start fresh?", "NO (done/other) → ask: revise this brief or start a new project?"] }, + ], + }, + uf_ask_continue: { + title: "Continue or fresh?", + color: "#7c3aed", + nodeType: "USER QUESTION", + sections: [ + { heading: "Options", items: ["CONTINUE → load brief, jump directly to Step 3 (revision mode)", "FRESH → normal Step 1 flow"] }, + ], + }, + uf_ask_revise: { + title: "Revise or new project?", + color: "#7c3aed", + nodeType: "USER QUESTION", + sections: [ + { heading: "Options", items: ["REVISE → load brief, jump directly to Step 3 (revision mode)", "NEW PROJECT → normal Step 1 flow"] }, + ], + }, + uf_load_brief: { + title: "Load brief", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "What happens", items: ["Reads the existing brief for revision mode", "Jumps directly to Step 3 — skip Step 1 and Step 2"] }, + { heading: "Fast path", items: ["If the user's opening message already provides sufficient context → offer to draft immediately (Step 3 direct)"] }, + ], + }, + uf_no_brief: { + title: "No brief → Phase 1", + color: "#475569", + nodeType: "TRANSITION", + sections: [ + { heading: "Rule", items: ["No question asked — proceed directly to Phase 1 (Understand + Plan)", "Also the path when user chooses 'fresh start' or 'new project'"] }, + ], + }, + uf_multi_found: { + title: "Multiple briefs found", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "What happens", items: ["List all briefs with path + status + project name", "Ask: which one to work on? (or new project?)", "Once chosen, follows the same logic as 'one brief found'"] }, + ], + }, + uf_brief_end: { + title: "Brief written", + color: "#6d28d9", + nodeType: "PHASE 0 OUTPUT", + sections: [ + { heading: "Output", items: ["Brief saved to `docs/briefs/{project-name}.md`"] }, + { heading: "Hand-off", items: ["Says: 'Hand it to Planning to break into an exec-plan, or to Orion if scope is already clear enough'", "This is a verbal suggestion — NOT an automatic delegation"] }, + ], + }, + // ── Unified flowchart phases ── + phase0_brief_check: { + title: "Phase 0 — BRAINSTORM (optional)", + color: "#7c3aed", + nodeType: "MAIN PHASE", + sections: [ + { heading: "Entry", items: ["Scan `docs/briefs/` — always, no exceptions", "No brief → Phase 1 directly", "Draft brief → ask: continue or fresh start?", "Multiple briefs → list + choose"] }, + { heading: "Fast path", items: ["If scope is already clear in the message → dashed arrow directly to Phase 1", "Verbal suggestion only — never automatic delegation"] }, + ], + }, + phase0_run_brainstorm: { + title: "Run brainstorm agent", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Agent brainstorm", items: ["Step 1 — Discovery: surface the problem", "Step 2 — Deep Dive: scope, criteria, constraints, risks", "Step 3 — Draft + Validation: full brief, quality gate"] }, + ], + }, + phase0_produce_brief: { + title: "Produce brief", + color: "#7c3aed", + nodeType: "PHASE 0 OUTPUT", + sections: [ + { heading: "Output", items: ["Brief written to `docs/briefs/{project-name}.md`"] }, + { heading: "Hand-off", items: ["Verbal suggestion: hand to Planning or to Orion if scope is clear enough"] }, + ], + }, + phase1_read_sp: { + title: "Phase 1 — PLAN", + color: "#1d4ed8", + nodeType: "MAIN PHASE", + sections: [ + { heading: "Strict order (9 steps)", items: [ + "1. Read `.opencode/scratchpad.md`", + "2. Call `project_state()`", + "3. Call `check_artifacts()`", + "4. Clarify intent (ambiguous? bug?)", + "5. Identify number of scopes", + "6. Choose plan type (inline or exec-plan)", + "7. Call `todowrite`", + "8. Write/update scratchpad", + "9. `compress` before entering Phase 2", + ]}, + ], + }, + phase1_project_state: { + title: "project_state() + check_artifacts()", + color: "#1d4ed8", + nodeType: "LIFECYCLE TOOLS", + sections: [ + { heading: "Mandatory at mission start", items: ["`project_state()` — full view of exec-plans, specs, briefs", "`check_artifacts()` — cross-artifact consistency scan"] }, + ], + }, + phase1_clarify: { + title: "Clarify intent → scope → plan type", + color: "#1d4ed8", + nodeType: "ACTION", + sections: [ + { heading: "Decisions", items: ["Ambiguous? → ask via `question` tool", "Multiple scopes? → propose order, wait for agreement", "Simple plan → inline in scratchpad", "Complex task → invoke `planning` agent → exec-plan"] }, + ], + }, + phase1_todowrite: { + title: "todowrite + write scratchpad", + color: "#1d4ed8", + nodeType: "ACTION", + sections: [ + { heading: "Actions", items: ["Create/update visible task list", "Write goal, plan, decisions, open questions into scratchpad"] }, + ], + }, + phase1_compress: { + title: "compress stale context", + color: "#1d4ed8", + nodeType: "CONTEXT MANAGEMENT", + sections: [ + { heading: "DCP tools", items: ["`distill` — summarize long outputs", "`prune` — cut exploratory outputs already distilled", "`compress` — clean context before Phase 2"] }, + ], + }, + phase2_bug: { + title: "Phase 2 — DELEGATE", + color: "#15803d", + nodeType: "MAIN PHASE", + sections: [ + { heading: "Agent selection hierarchy", items: ["1. User-defined agents (files in agent/)", "2. Named plugin agents (bug-finder, review-manager…)", "3. `explore` — read-only, faster", "4. `general` + persona — fallback only"] }, + { heading: "Delegation cycle", items: ["Update scratchpad before delegating", "Delegate via `task`", "Success → update scratchpad, distill, mark_block_done", "Failure → diagnose then retry ≤2, else escalate"] }, + ], + }, + phase2_bug_finder: { + title: "bug-finder", + color: "#dc2626", + nodeType: "SPECIALIZED AGENT", + sections: [ + { heading: "Role", items: ["Force root-cause analysis BEFORE any fix"] }, + { heading: "Verdicts", items: ["HIGH → fix via `general`", "MEDIUM → fix + report uncertainty", "UNCERTAINTY_EXPOSED → stop, user escalation"] }, + ], + }, + phase2_select_agent: { + title: "Select agent (hierarchy)", + color: "#15803d", + nodeType: "ACTION", + sections: [ + { heading: "Rule", items: ["User-defined > plugin named > explore > general+persona", "If `explore` or `general` suffice → don't invent a persona"] }, + ], + }, + phase2_handoff: { + title: "Context handoff A→B", + color: "#15803d", + nodeType: "ACTION", + sections: [ + { heading: "Self-sufficient prompt", items: ["Include file paths, constraints, expected output", "Sequential agents: extract essentials from A, give B what changed/decided/discovered", "Parallel = multiple `task` calls in the same message"] }, + ], + }, + phase2_success: { + title: "Agent success?", + color: "#15803d", nodeType: "DECISION", sections: [ - { heading: "Branches", items: ["HIGH / MEDIUM → join Agents flow with analysis in context", "UNCERTAINTY_EXPOSED → user escalation, wait for answer before any fix"] }, + { heading: "On failure", items: ["Bad prompt → reformulate", "Context overflow → decompose", "Missing info → enrich (explore first)", "Wrong persona → change", "Fundamental block → escalate"] }, + { heading: "Rule", items: ["Max 2 retries (all types combined) → user escalation"] }, ], }, - escalade_uncertainty: { - title: "Escalation — UNCERTAINTY_EXPOSED", + phase2_retry: { + title: "retry ≤2", + color: "#d97706", + nodeType: "LOOP", + sections: [ + { heading: "Process", items: ["Diagnose the cause", "Reformulate / decompose / enrich / change persona", "Always change something between attempts"] }, + ], + }, + phase2_esc_user: { + title: "Escalate to user", color: "#991b1b", nodeType: "ESCALATION", sections: [ - { heading: "Message to user", items: ["Present identified hypotheses and their probabilities", "List the precise questions blocking the diagnosis", "Do not propose a fix in this state"] }, + { heading: "Rules", items: ["Describe the 2 attempts made", "Explain diagnosis of each failure", "Propose options: rephrase, provide context", "Never retry a 3rd time without instruction"] }, ], }, - agents: { - title: "Agents", - color: "#6d28d9", - nodeType: "DELEGATION", + phase3_delegate_rm: { + title: "Phase 3 — REVIEW", + color: "#b45309", + nodeType: "MAIN PHASE", sections: [ - { heading: "Types", items: ["`explore` — search, file reads, architecture", "`general` — writing, editing, bash, implementation", "Custom persona — `backend-engineer`, `api-architect`…"] }, - { heading: "Context handoff", items: ["Each agent starts from scratch — be explicit", "Include modified files, decisions, interfaces", "Parallel = multiple task calls in the same message"] }, + { heading: "Absolute rule", items: ["ALWAYS via review-manager — never a direct reviewer"] }, + { heading: "Provide to review-manager", items: ["Modified files + summary of changes", "Original user requirements", "Trade-offs and decisions made", "What was explicitly out of scope"] }, + { heading: "Fresh start vs Resume", items: ["Fresh (no task_id) for new reviews", "Resume (task_id) for corrections after CHANGES_REQUESTED"] }, ], }, - agent_failure: { - title: "Agent failure?", - color: "#64748b", + phase3_verdict: { + title: "Verdict?", + color: "#b45309", nodeType: "DECISION", sections: [ - { heading: "Diagnostics", items: ["Bad prompt → rephrase with more precision", "Insufficient context → send `explore` first, retry with findings", "Task too large → break into sub-tasks", "Tool error → check permissions and paths"] }, - { heading: "Rule", items: ["Max 2 retries — always change something between attempts", "If still failing after 2 attempts → user escalation"] }, + { heading: "Branches", items: ["APPROVED → Phase 4 (Synthesize)", "CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)", "BLOCKED → immediate escalation, do not fix without user input"] }, ], }, - retry: { - title: "↩ Retry (max 2)", - color: "#b45309", + phase3_resume_fix: { + title: "Resume producer → fix", + color: "#d97706", nodeType: "LOOP", sections: [ - { heading: "Process", items: ["Diagnose the cause of failure", "Rephrase / decompose / enrich context", "Relaunch the agent with the new prompt"] }, + { heading: "Process", items: ["Send precise fixes back to producer agent (resume, task_id)", "Re-run through review-manager", "Maximum 2 rounds total"] }, ], }, - escalade_retry: { - title: "Escalation — 2 retries exceeded", + phase3_blocked_esc: { + title: "Escalation — BLOCKED", color: "#991b1b", nodeType: "ESCALATION", sections: [ - { heading: "Message to user", items: ["Describe what was attempted (2 attempts)", "Explain the diagnosis of each failure", "Propose options: rephrase the task, provide additional context", "Never retry a 3rd time without explicit instruction"] }, + { heading: "Strict rules", items: ["Report the precise problem identified by the reviewer", "Explain why it is blocking", "Propose NO fix in the escalation message", "Wait for explicit instruction before continuing"] }, ], }, - review: { - title: "4. Review", - color: "#b45309", + phase4_self_eval: { + title: "Phase 4 — SYNTHESIZE", + color: "#4338ca", nodeType: "MAIN PHASE", sections: [ - { heading: "Absolute rule", items: ["ALWAYS via review-manager — never a direct reviewer", "Mandatory for any code, config, infra, security change"] }, - { heading: "Provide to review-manager", items: ["Modified files + summary of changes", "Original user requirements", "Trade-offs and decisions made", "What was explicitly out of scope"] }, + { heading: "Self-evaluation (mandatory before reporting)", items: ["1. Does the result fully answer the original request?", "2. Are multi-agent outputs coherent?", "3. Does anything nag about correctness or side effects?"] }, + { heading: "Gap types", items: ["Minor gap → quick fix then report", "Major gap → loop back to Phase 2 (Delegate)", "Scope confusion → ask user before delivering"] }, ], }, - review_manager: { - title: "review-manager", - color: "#92400e", - nodeType: "ORCHESTRATOR AGENT", + phase4_gap: { + title: "Gap type?", + color: "#4338ca", + nodeType: "DECISION", sections: [ - { heading: "Role", items: ["Review orchestrator — never a direct reviewer", "Spawns in parallel: code-reviewer, security-reviewer, requirements-reviewer", "Synthesizes verdicts and arbitrates disagreements"] }, - { heading: "Skip authorized only if", items: ["Docs-only change (no code modified)", "No possible security impact", "User explicitly requests speed"] }, + { heading: "Branches", items: ["OK → final report", "Minor → quick fix → sp_capture", "Major → back to Phase 2 (dashed loop)", "Scope → ask user"] }, ], }, - verdict: { - title: "Review verdict?", - color: "#b45309", - nodeType: "DECISION", + phase4_minor: { + title: "Minor gap → quick fix", + color: "#d97706", + nodeType: "ACTION", sections: [ - { heading: "Branches", items: ["APPROVED → Synthesize & Report", "CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)", "BLOCKED → immediate user escalation, do not fix without user input"] }, + { heading: "Treatment", items: ["Fix the missing detail directly", "No need to go through Review if trivial", "Include in the final report"] }, ], }, - changes_loop: { - title: "↩ Fix + re-review", - color: "#b45309", - nodeType: "LOOP", + phase4_scope: { + title: "Scope confusion → ask user", + color: "#64748b", + nodeType: "ACTION", sections: [ - { heading: "Process", items: ["Send precise fixes back to the producer agent", "Re-run through review-manager", "Maximum 2 rounds total"] }, + { heading: "Treatment", items: ["Do not deliver a wrong answer", "Ask the precise question before continuing"] }, ], }, - escalade_blocked: { - title: "Escalation — BLOCKED", - color: "#991b1b", - nodeType: "ESCALATION", + phase4_sp_capture: { + title: "Final scratchpad capture", + color: "#4338ca", + nodeType: "ACTION", sections: [ - { heading: "Strict rules", items: ["Report the precise problem identified by the reviewer", "Explain why it is blocking (not just a warning)", "Propose NO fix in the escalation message", "Wait for explicit instruction before continuing"] }, + { heading: "Before reporting", items: ["Mark mission as complete in the scratchpad", "Do not delete it (user might return)", "`## Plan` — all task statuses final", "`## Decisions` — any last decisions recorded"] }, ], }, - synthesize: { - title: "5. Synthesize & Report", - color: "#15803d", + phase4_report: { + title: "Report (human-tone)", + color: "#4338ca", + nodeType: "DELIVERY", + sections: [ + { heading: "Communication rules", items: ["Lead with the outcome, not the process", "Highlight what succeeded and what failed", "Be honest about issues — don't sugarcoat agent failures", "Propose concrete next steps if applicable"] }, + ], + }, + phase5_pattern: { + title: "Phase 5 — MAINTENANCE", + color: "#475569", nodeType: "MAIN PHASE", sections: [ - { heading: "Self-evaluation", items: ["Answers the real request (not the interpreted one)?", "No contradiction between agent results?", "Nothing missing in the deliverable?"] }, - { heading: "Memory update", items: ["Write learnings to .opencode/memory.md", "Clean up scratchpad (completed tasks)"] }, + { heading: "Two independent paths", items: ["Path A — Harness: encode pattern as mechanical artifact (lint, CI, AGENTS.md)", "Path B — Gardener: fix stale docs + detect code drift"] }, + { heading: "Rules", items: ["Never without explicit user confirmation", "Never at mission start — only post-delivery"] }, ], }, - autoeval: { - title: "Self-eval OK?", + phase5_harness: { + title: "Harness", color: "#15803d", - nodeType: "DECISION", + nodeType: "SPECIALIZED AGENT", sections: [ - { heading: "Branches", items: ["OK → final report to user", "Minor gap (missing detail) → quick fix then report", "Major gap (wrong approach) → back to Delegate"] }, + { heading: "When to suggest", items: ["A pattern explained multiple times to sub-agents", "An architectural decision that keeps getting violated", "A convention not yet enforced by lint or CI"] }, + { heading: "What harness produces", items: ["Code convention → custom lint rule (ESLint, Ruff…)", "Build/deploy constraint → CI job", "Agent rule → AGENTS.md entry", "Non-mechanizable principle → docs/guiding-principles.md entry"] }, ], }, - gap_majeur: { - title: "↩ Back to Delegate", - color: "#166534", - nodeType: "LOOP", + phase5_gardener: { + title: "Gardener", + color: "#475569", + nodeType: "SPECIALIZED AGENT", sections: [ - { heading: "Treatment", items: ["Treat the gap as a new task", "Resume from Delegate phase", "Update todo list and scratchpad before delegating"] }, + { heading: "Function 1 — Doc-Gardening", items: ["Detects stale references, outdated descriptions, broken links", "Fixes stale content, opens one PR per document"] }, + { heading: "Function 2 — Code-GC", items: ["One-time drift → targeted refactoring PR", "Recurring pattern → escalate to Harness"] }, ], }, - fix_rapide: { - title: "Quick fix", - color: "#166534", + phase5_recurring: { + title: "Recurring pattern?", + color: "#475569", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["YES → escalate to Harness (confirmation required)", "NO → targeted PR only"] }, + ], + }, + phase5_esc_harness: { + title: "Escalate to Harness", + color: "#15803d", nodeType: "ACTION", sections: [ - { heading: "Treatment", items: ["Fix the missing detail directly", "No need to go through Review if the fix is trivial", "Include in the final report"] }, + { heading: "Process", items: ["Gardener checks with Orion / user before triggering Harness", "Harness proceeds directly once invoked — does not re-ask"] }, ], }, - end: { + phase_start: { + title: "User request", + color: "#1e293b", + nodeType: "ENTRY POINT", + sections: [ + { heading: "Entry point", items: ["User submits a request", "Orion scans existing briefs first before any other action"] }, + ], + }, + phase_end: { title: "Report to user", color: "#1e293b", nodeType: "DELIVERY", @@ -870,6 +1709,42 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { { heading: "Delivery", items: ["Concise summary of changes made", "Any issues reported honestly", "Suggested next steps if relevant"] }, ], }, + phase0: { + title: "Phase 0 — BRAINSTORM (optional)", + color: "#7c3aed", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Discovery phase. Runs when the request is vague or a new project is starting.", "Produces a product brief at docs/briefs/{project-name}.md.", "Optional — if brief already exists or scope is clear, fast-path to Phase 1."] }], + }, + phase1: { + title: "Phase 1 — PLAN", + color: "#1d4ed8", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Strict 9-step planning sequence.", "Read scratchpad → lifecycle tools → clarify → scope → plan type → todowrite → write scratchpad → compress."] }], + }, + phase2: { + title: "Phase 2 — DELEGATE", + color: "#15803d", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Select agents (strict hierarchy), delegate via task, handle failures with retry ≤2.", "Bug reports always go to bug-finder first."] }], + }, + phase3: { + title: "Phase 3 — REVIEW", + color: "#b45309", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Always via review-manager (never direct reviewers).", "APPROVED → Phase 4, CHANGES_REQUESTED → re-delegate (max 2 rounds), BLOCKED → escalate."] }], + }, + phase4: { + title: "Phase 4 — SYNTHESIZE", + color: "#4338ca", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Self-eval (3 questions) → gap handling → final scratchpad capture → human-tone report."] }], + }, + phase5: { + title: "Phase 5 — MAINTENANCE", + color: "#475569", + nodeType: "PHASE", + sections: [{ heading: "Purpose", items: ["Post-delivery, optional. Two paths: Harness (pattern enforcement) and Gardener (doc/code drift detection)."] }], + }, }, brainstormSvgLabels: { bs_start: "Session Start", @@ -879,12 +1754,12 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { bs_status_check: "Status = draft?", bs_ask_continue: "Continue or fresh?", bs_load_brief: "Load brief", - bs_phase1: "Phase 1 — Discovery", + bs_phase1: "Step 1 — Discovery", bs_problem_clear: "Problem clear?", - bs_phase2: "Phase 2 — Deep Dive", + bs_phase2: "Step 2 — Deep Dive", bs_adversarial: "Adversarial Gate", bs_template_fillable: "All sections fillable?", - bs_phase3: "Phase 3 — Draft + Validate", + bs_phase3: "Step 3 — Draft + Validate", bs_quality_gate: "Quality Gate", bs_quality_passed: "Quality gate passed?", bs_file_exists: "File already exists?", @@ -919,7 +1794,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0d9488", nodeType: "ENTRY POINT", sections: [ - { heading: "What happens", items: ["Session is initiated with brainstorm agent", "Agent globs docs/briefs/**/*.md to check for existing briefs", "Routing decision made before any questions are asked"] }, + { heading: "What happens", items: ["Session is initiated with brainstorm agent", "Scans `docs/briefs/` for existing briefs", "Routing decision made before any questions are asked"] }, ], }, bs_existing_check: { @@ -927,7 +1802,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0d9488", nodeType: "DECISION", sections: [ - { heading: "Branches", items: ["NO → Flow normal → Phase 1 (Discovery)", "ONE found → check status (draft / done)", "MULTIPLE found → list briefs, ask which one or new project"] }, + { heading: "Branches", items: ["NO → Flow normal → Step 1 (Discovery)", "ONE found → check status (draft / done)", "MULTIPLE found → list briefs, ask which one or new project"] }, ], }, bs_single_found: { @@ -943,7 +1818,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Agent lists all found briefs to the user", "Asks: which one to resume, or start a new project?", "CHOOSE EXISTING → Load brief → Phase 3 (revision)", "NEW PROJECT → Flow normal → Phase 1"] }, + { heading: "What happens", items: ["Agent lists all found briefs to the user", "Asks: which one to resume, or start a new project?", "CHOOSE EXISTING → Load brief → Step 3 (revision)", "NEW PROJECT → Flow normal → Step 1"] }, ], }, bs_status_check: { @@ -951,7 +1826,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0891b2", nodeType: "DECISION", sections: [ - { heading: "Branches", items: ["YES (draft) → Ask: continue or fresh start?", "NO (done/other) → Inform user, ask new project name → Phase 1"] }, + { heading: "Branches", items: ["YES (draft) → Ask: continue or fresh start?", "NO (done/other) → Inform user, ask new project name → Step 1"] }, ], }, bs_ask_continue: { @@ -959,7 +1834,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["User is shown the existing draft brief summary", "Asked: resume from where we left off, or start fresh?", "CONTINUE → Load brief → jump directly to Phase 3 (revision)", "FRESH → Ignore existing brief → Phase 1 (Discovery)"] }, + { heading: "What happens", items: ["User is shown the existing draft brief summary", "Asked: resume from where we left off, or start fresh?", "CONTINUE → Load brief → jump directly to Step 3 (revision)", "FRESH → Ignore existing brief → Step 1 (Discovery)"] }, ], }, bs_load_brief: { @@ -967,13 +1842,13 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#0891b2", nodeType: "ACTION", sections: [ - { heading: "What happens", items: ["Agent reads the existing brief file from docs/briefs/", "Provides full context to Phase 3 (revision mode)", "User can iterate on the existing content rather than restarting"] }, + { heading: "What happens", items: ["Agent reads the existing brief file from docs/briefs/", "Provides full context to Step 3 (revision mode)", "User can iterate on the existing content rather than restarting"] }, ], }, bs_phase1: { - title: "Phase 1 — Discovery", + title: "Step 1 — Discovery", color: "#2563eb", - nodeType: "MAIN PHASE", + nodeType: "MAIN STEP", sections: [ { heading: "Core question", items: ["\"What problem are you trying to solve, and who experiences it?\""] }, { heading: "Rules", items: ["Max 2 questions at a time — never overwhelm", "Surface the problem, not the solution", "Do not accept vague answers — push for specifics", "Iterate until problem is stated clearly"] }, @@ -985,13 +1860,13 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#2563eb", nodeType: "DECISION", sections: [ - { heading: "Exit criteria", items: ["YES → problem stated in 2–4 clear sentences AND primary user named → Phase 2", "NO → iterate — ask more targeted follow-up questions"] }, + { heading: "Exit criteria", items: ["YES → problem stated in 2–4 clear sentences AND primary user named → Step 2", "NO → iterate — ask more targeted follow-up questions"] }, ], }, bs_phase2: { - title: "Phase 2 — Deep Dive", + title: "Step 2 — Deep Dive", color: "#4f46e5", - nodeType: "MAIN PHASE", + nodeType: "MAIN STEP", sections: [ { heading: "Topics to cover", items: ["Scope and boundaries — what is explicitly out of scope?", "Success criteria — how will you know it worked?", "Use cases — top 3–5 concrete scenarios", "Constraints — technical, time, team, budget", "Rejected ideas — what was considered and discarded?"] }, { heading: "Socratic pressure", items: ["Challenge assumptions — \"Why is X the right approach?\"", "Ask about failure modes — \"What would make this fail?\"", "Probe edges — \"What happens when Y doesn't work?\""] }, @@ -1011,14 +1886,14 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#7c3aed", nodeType: "DECISION", sections: [ - { heading: "Branches", items: ["YES → proceed to Phase 3 (draft + validation)", "NO → iterate back in Phase 2 — identify which sections are still empty"] }, + { heading: "Branches", items: ["YES → proceed to Step 3 (draft + validation)", "NO → iterate back in Step 2 — identify which sections are still empty"] }, { heading: "Template sections required", items: ["Problem statement", "Primary user", "Success criteria", "Top use cases", "Constraints", "Out of scope", "Risks / adversarial answers"] }, ], }, bs_phase3: { - title: "Phase 3 — Draft + Validation", + title: "Step 3 — Draft + Validation", color: "#6d28d9", - nodeType: "MAIN PHASE", + nodeType: "MAIN STEP", sections: [ { heading: "What happens", items: ["Agent generates the full brief inline from collected context", "User reviews the draft and provides feedback", "Agent iterates until user confirms the brief is ready", "Quality gate is run before writing to disk"] }, { heading: "Output format", items: ["Markdown file at docs/briefs/{project-name}.md", "Structured sections: problem, users, success criteria, use cases, constraints, risks"] }, @@ -1084,780 +1959,360 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { { heading: "What happens", items: ["Agent stops immediately — does not write the brief", "Reports precisely what is missing to the user", "User must provide the missing information before continuing"] }, ], }, + uf_step1: { + title: "Step 1 — Discovery", + color: "#2563eb", + nodeType: "BRAINSTORM SUB-STEP", + sections: [ + { heading: "Role", items: ["Agent asks targeted questions about the project", "Surfaces the core problem and the affected users", "Max 2 questions at a time — never overwhelm"] }, + { heading: "Exit criteria", items: ["Problem stated in 2–4 sentences", "Primary user named", "Problem is a problem, not a feature"] }, + ], + }, + uf_step2: { + title: "Step 2 — Brief draft", + color: "#4f46e5", + nodeType: "BRAINSTORM SUB-STEP", + sections: [ + { heading: "What happens", items: ["Agent generates the full brief inline from collected context", "User reviews and provides feedback", "Agent iterates until validated", "Quality gate is run before writing to disk"] }, + { heading: "Output", items: ["Markdown file at docs/briefs/{project-name}.md"] }, + ], + }, + uf_step3: { + title: "Step 3 — Alignment", + color: "#6d28d9", + nodeType: "BRAINSTORM SUB-STEP", + sections: [ + { heading: "What happens", items: ["Brief is reviewed with the user", "Iteration until confirmation", "Once validated: suggest handing off to Planning or Orion"] }, + { heading: "Modes", items: ["Normal path: Step 1 → Step 2 → Step 3", "Fast path: existing brief loaded → Step 3 directly"] }, + ], + }, + }, + unifiedSvgLabels: { + uf_start: "Session start", + uf_scan: "Scan docs/briefs/", + uf_scan_sub: "(always — mandatory)", + uf_briefs_found: "Brief(s) found?", + uf_no_brief: "No brief → Phase 1", + uf_brief_status: "Status: draft?", + uf_ask_continue: "Continue or fresh?", + uf_ask_revise: "Revise or new project?", + uf_load_brief: "Load brief", + uf_multi_found: "Multiple briefs → list + choose", + uf_brief_end: "Brief written", + uf_brief_end_sub: "suggest Planning or Orion", + uf_phase0_label: "Phase 0 — BRAINSTORM (optional)", + uf_placeholder_label: "Phase 1–5 (coming next)", + uf_step1_label: "Step 1 — Discovery", + uf_step2_label: "Step 2 — Brief draft", + uf_step3_label: "Step 3 — Alignment", + uf_expand_hint: "Show steps", + uf_collapse_hint: "Hide steps", + uf_arrow_none: "NONE", + uf_arrow_one: "ONE", + uf_arrow_multiple: "MULTIPLE", + uf_arrow_draft: "DRAFT", + uf_arrow_done: "DONE", + uf_arrow_continue: "CONTINUE", + uf_arrow_fresh: "FRESH", + uf_arrow_revise: "REVISE", + uf_arrow_new_project: "NEW PROJECT", + uf_arrow_phase3: "→ Step 3", }, }; } -// Y positions map for scroll-to (populated in FlowChart, read in App) -const NODE_Y_MAP: Record = {}; - -// Y positions map for Brainstorm flowchart scroll-to -const BRAINSTORM_NODE_Y_MAP: Record = {}; - -// ─── SVG Flowchart ──────────────────────────────────────────────────────────── - -const CX = 330; -const LX = 105; -const RX = 540; - -const W_PHASE = 220; -const H_PHASE = 58; -const W_ACTION = 190; -const H_ACTION = 44; -const W_SMALL = 170; -const H_SMALL = 40; -const W_PILL = 200; -const H_PILL = 44; -const W_MEM = 140; -const H_MEM = 44; -const DHW = 80; -const DHH = 35; - -function actionBox(cx: number, cy: number, w: number, h: number) { - return { x: cx - w / 2, y: cy - h / 2, w, h }; -} - -interface NodeProps { - id: string; - selected: string; - onSelect: (id: string, nodeY: number) => void; -} - -const SHADOW = "url(#shadow)"; - -function PhaseNode({ id, cx, cy, label, fill, selected: sel, onSelect }: NodeProps & { cx: number; cy: number; label: string; fill: string }) { - const b = { x: cx - W_PHASE / 2, y: cy - H_PHASE / 2, w: W_PHASE, h: H_PHASE }; - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer" filter={SHADOW}> - - {isSelected && } - {label} - - ); -} - -function DiamondNode({ id, cx, cy, label, stroke, selected: sel, onSelect }: NodeProps & { cx: number; cy: number; label: string; stroke: string }) { - const pts = `${cx},${cy - DHH} ${cx + DHW},${cy} ${cx},${cy + DHH} ${cx - DHW},${cy}`; - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer"> - - {label} - - ); -} - -function ActionNode({ id, cx, cy, label, sub, fill, stroke, textFill, selected: sel, onSelect, w = W_ACTION, h = H_ACTION }: NodeProps & { cx: number; cy: number; label: string; sub?: string; fill: string; stroke: string; textFill: string; w?: number; h?: number }) { - const b = actionBox(cx, cy, w, h); - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer"> - - {label} - {sub && {sub}} - - ); -} - -function EscaladeNode({ id, cx, cy, label, sub, selected: sel, onSelect, w = W_SMALL, h = H_SMALL }: NodeProps & { cx: number; cy: number; label: string; sub?: string; w?: number; h?: number }) { - const b = actionBox(cx, cy, w, h); - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer"> - - {label} - {sub && {sub}} - - ); -} - -function PillNode({ id, cx, cy, label, selected: sel, onSelect }: NodeProps & { cx: number; cy: number; label: string }) { - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer" filter={SHADOW}> - - {label} - - ); -} - -function MemFileNode({ id, cx, cy, label, sub, bgColor, borderColor, textColor, selected: sel, onSelect }: NodeProps & { cx: number; cy: number; label: string; sub: string; bgColor: string; borderColor: string; textColor: string }) { - const b = actionBox(cx, cy, W_MEM, H_MEM); - const isSelected = sel === id; - return ( - onSelect(id, cy)} cursor="pointer"> - - {label} - {sub} - - ); -} - -function ArrowLabel({ x, y, text, color = "#64748b", align = "middle" }: { x: number; y: number; text: string; color?: string; align?: string }) { - return ( - {text} - ); -} +// ─── MainFlowChart ───────────────────────────────────────────────────────────── +// Unified Phase 0→5 flowchart rendered with Mermaid.js -// Small annotation (italic, below a node) -function Annot({ x, y, text, color }: { x: number; y: number; text: string; color: string }) { - return ( - {text} - ); +interface MainFlowChartProps { + lang: "en" | "fr"; + onNodeClick: (id: string) => void; + selectedNode: string | null; } -function FlowChart({ selected, onSelect, lang }: { selected: string; onSelect: (id: string, nodeY: number) => void; lang: Lang }) { - const { svgLabels: L } = getFlowchartData(lang); - const svgWidth = 700; - const svgHeight = 1850; - const ns: NodeProps = { id: "", selected, onSelect }; - - const Y_UNDERSTAND = 130; - const Y_MEM_FILES = Y_UNDERSTAND + 78; - const OFFSET = 90; - - const Y = { - start: 40, - understand: Y_UNDERSTAND, - mem_files: Y_MEM_FILES, - ambigu: 240 + OFFSET, - question: 250 + OFFSET, // left branch — slightly below ambigu diamond centre - plan: 370 + OFFSET, - delegate: 470 + OFFSET, - bug_decision: 578 + OFFSET, - bug_finder: 570 + OFFSET, // right branch — aligned near bug_decision - certitude: 655 + OFFSET, - esc_uncertainty: 748 + OFFSET, - agents: 715 + OFFSET, - agent_failure: 830 + OFFSET, - retry: 830 + OFFSET, // left branch — same row as agent_failure diamond - esc_retry: 920 + OFFSET, - review: 990 + OFFSET, - review_manager: 1095 + OFFSET, - verdict: 1205 + OFFSET, - changes_loop: 1210 + OFFSET, // left branch — same row as verdict diamond - esc_blocked: 1210 + OFFSET, // right branch — same row as verdict diamond - synthesize: 1345 + OFFSET, - autoeval: 1445 + OFFSET, - gap_majeur: 1450 + OFFSET, // left branch — same row as autoeval diamond - fix_rapide: 1450 + OFFSET, // right branch — same row as autoeval diamond - end: 1595 + OFFSET, +function buildMainDiagram(lang: "en" | "fr"): string { + const isEn = lang === "en"; + const L = { + start: isEn ? "User request" : "Requête utilisateur", + p0_label: isEn ? "Phase 0 — BRAINSTORM optional" : "Phase 0 — BRAINSTORM optionnel", + p1_label: isEn ? "Phase 1 — PLAN" : "Phase 1 — PLAN", + p2_label: isEn ? "Phase 2 — DELEGATE" : "Phase 2 — DELEGATE", + p3_label: isEn ? "Phase 3 — REVIEW" : "Phase 3 — REVIEW", + p4_label: isEn ? "Phase 4 — SYNTHESIZE" : "Phase 4 — SYNTHESIZE", + p5_label: isEn ? "Phase 5 — MAINTENANCE" : "Phase 5 — MAINTENANCE", + brief_check: isEn ? "Brief exist?" : "Brief existe ?", + yes: isEn ? "YES" : "OUI", + no: isEn ? "NO" : "NON", + fast_path: isEn ? "fast path" : "chemin rapide", + run_brainstorm: isEn ? "Run brainstorm agent" : "Lancer agent brainstorm", + produce_brief: isEn ? "Produce brief" : "Produire le brief", + read_sp: isEn ? "Read scratchpad" : "Lire scratchpad", + project_state: "project_state + check_artifacts", + clarify: isEn ? "Clarify intent scope plan" : "Clarifier intention scope plan", + todowrite: isEn ? "todowrite + write scratchpad" : "todowrite + scratchpad", + compress: isEn ? "compress stale context" : "compress contexte obsolète", + bug_q: isEn ? "Bug report?" : "Bug report ?", + bug_finder: "bug-finder first", + select_agent: isEn ? "Select agent hierarchy" : "Sélectionner agent", + handoff: "Context handoff A to B", + success_q: isEn ? "Agent success?" : "Succès agent ?", + retry: isEn ? "retry max 2" : "retry max 2", + esc_user: isEn ? "Escalate to user" : "Escalade utilisateur", + delegate_rm: isEn ? "Delegate to review-manager" : "Déléguer review-manager", + verdict_q: isEn ? "Verdict?" : "Verdict ?", + approved: "APPROVED", + changes: "CHANGES_REQUESTED", + blocked: "BLOCKED", + resume_fix: isEn ? "Resume producer fix" : "Reprendre producteur fix", + self_eval: isEn ? "Self-eval 3 questions" : "Auto-eval 3 questions", + gap_q: isEn ? "Gap type?" : "Type gap ?", + minor_gap: isEn ? "minor gap quick fix" : "gap mineur fix rapide", + scope_conf: isEn ? "scope confusion ask user" : "confusion scope demander user", + major: isEn ? "major gap" : "gap majeur", + sp_capture: isEn ? "Final scratchpad capture" : "Capture finale scratchpad", + report_human: isEn ? "Report human-tone" : "Rapport human-tone", + pattern_q: isEn ? "Pattern type?" : "Type pattern ?", + harness: isEn ? "Harness lint CI AGENTS" : "Harness lint CI AGENTS", + gardener: isEn ? "Gardener stale docs code GC" : "Gardener docs obsolètes code GC", + recurring_q: isEn ? "Recurring pattern?" : "Pattern récurrent ?", + esc_harness: isEn ? "Escalate to Harness" : "Escalader vers Harness", + end: isEn ? "Report to user" : "Rapport à l'utilisateur", + enforcement: isEn ? "needs enforcement" : "enforcement requis", + docs_drift: isEn ? "docs / drift" : "docs / dérive", }; - // Populate the global Y map for scroll-to - Object.entries(Y).forEach(([k, v]) => { NODE_Y_MAP[k] = v; }); - NODE_Y_MAP["scratchpad"] = Y.mem_files; - NODE_Y_MAP["memory"] = Y.mem_files; - - // Memory file node X (adjusted for Fix 1) - const MEM_LX = 85; - const MEM_RX = 575; - - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* ── START ── */} - - - - - {/* ── UNDERSTAND ── */} - - - {/* ── MEMORY FILE NODES ── */} - - - - - {/* Bidirectional: scratchpad ↔ understand */} - {/* Compute midpoint of the curve for label placement */} - - {/* label on the curve, roughly at 40% of the path */} - {L.mem_read_here} - - {/* Bidirectional: memory.md ↔ understand */} - - {L.mem_read_here} - - {/* understand → ambigu */} - - - {/* ── AMBIGU ── */} - - - - - - - - - - - - - {/* ── PLAN ── */} - - - - - - {/* ── DELEGATE ── */} - - - - - - {/* ── BUG DECISION ── */} - - - - - - {/* ── BUG FINDER ── */} - - - - - {/* ── CERTITUDE ── */} - - - - - - - - - - - - - - {/* ── AGENTS ── */} - - - - - - {/* ── AGENT FAILURE ── */} - - - - - - {/* ── RETRY ── */} - - - - - - - - - - - - - {/* ── REVIEW ── */} - - - - - - {/* ── REVIEW MANAGER ── */} - - - - - {/* ── VERDICT ── */} - - - - - - - - - - - - - - - - - - {/* ── SYNTHESIZE ── */} - - - - - - - {/* ── AUTOEVAL ── */} - - - - - - - - - - - - - - - - - - - - {/* ── END ── */} - - - ); + return `flowchart TD + START(["${L.start}"]) + + subgraph P0["${L.p0_label}"] + P0_CHECK{"${L.brief_check}"} + P0_RUN["${L.run_brainstorm}"] + P0_BRIEF["${L.produce_brief}"] + end + + subgraph P1["${L.p1_label}"] + P1_READ["${L.read_sp}"] + P1_STATE["${L.project_state}"] + P1_INTENT["${L.clarify}"] + P1_TODO["${L.todowrite}"] + P1_COMPRESS[/"${L.compress}"/] + end + + subgraph P2["${L.p2_label}"] + P2_BUG{"${L.bug_q}"} + P2_BUGFINDER["${L.bug_finder}"] + P2_SELECT["${L.select_agent}"] + P2_HANDOFF["${L.handoff}"] + P2_SUCCESS{"${L.success_q}"} + P2_RETRY["${L.retry}"] + P2_ESC[/"${L.esc_user}"/] + end + + subgraph P3["${L.p3_label}"] + P3_RM["${L.delegate_rm}"] + P3_VERDICT{"${L.verdict_q}"} + P3_FIX["${L.resume_fix}"] + P3_BLOCKED[/"${L.blocked} escalate"/] + end + + subgraph P4["${L.p4_label}"] + P4_EVAL["${L.self_eval}"] + P4_GAP{"${L.gap_q}"} + P4_MINOR["${L.minor_gap}"] + P4_SCOPE["${L.scope_conf}"] + P4_SP["${L.sp_capture}"] + P4_REPORT["${L.report_human}"] + end + + subgraph P5["${L.p5_label}"] + P5_PAT{"${L.pattern_q}"} + P5_HARNESS["${L.harness}"] + P5_GARDENER["${L.gardener}"] + P5_RECUR{"${L.recurring_q}"} + P5_ESC_H["${L.esc_harness}"] + end + + END(["${L.end}"]) + + START --> P0_CHECK + P0_CHECK -- "${L.no}" --> P0_RUN + P0_RUN --> P0_BRIEF + P0_BRIEF --> P1_READ + P0_CHECK -- "${L.yes}" --> P1_READ + P0_CHECK -. "${L.fast_path}" .-> P2_SELECT + + P1_READ --> P1_STATE + P1_STATE --> P1_INTENT + P1_INTENT --> P1_TODO + P1_TODO --> P1_COMPRESS + P1_COMPRESS --> P2_BUG + + P2_BUG -- "${L.yes}" --> P2_BUGFINDER + P2_BUG -- "${L.no}" --> P2_SELECT + P2_BUGFINDER --> P2_SELECT + P2_SELECT --> P2_HANDOFF + P2_HANDOFF --> P2_SUCCESS + P2_SUCCESS -- "${L.yes}" --> P3_RM + P2_SUCCESS -- "${L.no}" --> P2_RETRY + P2_RETRY --> P2_SUCCESS + P2_RETRY -- "after 2 fails" --> P2_ESC + + P3_RM --> P3_VERDICT + P3_VERDICT -- "${L.approved}" --> P4_EVAL + P3_VERDICT -- "${L.changes}" --> P3_FIX + P3_FIX --> P3_RM + P3_VERDICT -- "${L.blocked}" --> P3_BLOCKED + + P4_EVAL --> P4_GAP + P4_GAP -- "minor" --> P4_MINOR + P4_GAP -- "${L.major}" --> P2_SELECT + P4_GAP -- "scope?" --> P4_SCOPE + P4_MINOR --> P4_SP + P4_SCOPE --> P4_SP + P4_SP --> P4_REPORT + P4_REPORT --> P5_PAT + + P5_PAT -- "${L.enforcement}" --> P5_HARNESS + P5_PAT -- "${L.docs_drift}" --> P5_GARDENER + P5_GARDENER --> P5_RECUR + P5_RECUR -- "${L.yes}" --> P5_ESC_H + P5_ESC_H --> P5_HARNESS + P5_RECUR -- "${L.no}" --> END + P5_HARNESS --> END + + classDef phase0 fill:#7c3aed,color:#fff,stroke:#6d28d9 + classDef phase1 fill:#1d4ed8,color:#fff,stroke:#1e40af + classDef phase2 fill:#15803d,color:#fff,stroke:#166534 + classDef phase3 fill:#b45309,color:#fff,stroke:#92400e + classDef phase4 fill:#4338ca,color:#fff,stroke:#3730a3 + classDef phase5 fill:#475569,color:#fff,stroke:#334155 + classDef escalade fill:#fff,color:#dc2626,stroke:#dc2626,stroke-width:2px + classDef terminal fill:#f0fdf4,color:#166534,stroke:#166534,stroke-width:2px + + class P0_CHECK,P0_RUN,P0_BRIEF phase0 + class P1_READ,P1_STATE,P1_INTENT,P1_TODO,P1_COMPRESS phase1 + class P2_BUG,P2_BUGFINDER,P2_SELECT,P2_HANDOFF,P2_SUCCESS,P2_RETRY phase2 + class P2_ESC escalade + class P3_RM,P3_VERDICT,P3_FIX phase3 + class P3_BLOCKED escalade + class P4_EVAL,P4_GAP,P4_MINOR,P4_SCOPE,P4_SP,P4_REPORT phase4 + class P5_PAT,P5_HARNESS,P5_GARDENER,P5_RECUR,P5_ESC_H phase5 + class START,END terminal`; } -// ─── Brainstorm Flowchart ───────────────────────────────────────────────────── - -const BS_CX = 330; // main center x -const BS_LX = 100; // left branch x -const BS_RX = 555; // right branch x - -function BrainstormFlowChart({ selected, onSelect, lang }: { selected: string; onSelect: (id: string, nodeY: number) => void; lang: Lang }) { - const { brainstormSvgLabels: L } = getFlowchartData(lang); - const svgWidth = 700; - const svgHeight = 1980; - const ns: NodeProps = { id: "", selected, onSelect }; - - // ── Y positions ── - const Y = { - bs_start: 50, - bs_existing_check: 145, - bs_single_found: 240, // right branch - bs_multi_found: 240, // far right — same row but shifted to RX+30 - bs_status_check: 340, // right branch (continuing from single_found) - bs_ask_continue: 440, // right branch - bs_load_brief: 540, // right + multi load - bs_phase1: 680, - bs_problem_clear: 790, - bs_phase2: 920, - bs_adversarial: 1040, - bs_template_fillable:1140, - bs_phase3: 1280, - bs_quality_gate: 1390, - bs_quality_passed: 1495, - bs_file_exists: 1610, - bs_file_conflict: 1710, - }; +// Node ID to detail panel ID mapping +const MERMAID_NODE_MAP: Record = { + START: "phase_start", + END: "phase_end", + P0_CHECK: "phase0_brief_check", + P0_RUN: "phase0_run_brainstorm", + P0_BRIEF: "phase0_produce_brief", + P1_READ: "phase1_read_sp", + P1_STATE: "phase1_project_state", + P1_INTENT: "phase1_clarify", + P1_TODO: "phase1_todowrite", + P1_COMPRESS: "phase1_compress", + P2_BUG: "phase2_bug", + P2_BUGFINDER: "phase2_bug_finder", + P2_SELECT: "phase2_select_agent", + P2_HANDOFF: "phase2_handoff", + P2_SUCCESS: "phase2_success", + P2_RETRY: "phase2_retry", + P2_ESC: "phase2_esc_user", + P3_RM: "phase3_delegate_rm", + P3_VERDICT: "phase3_verdict", + P3_FIX: "phase3_resume_fix", + P3_BLOCKED: "phase3_blocked_esc", + P4_EVAL: "phase4_self_eval", + P4_GAP: "phase4_gap", + P4_MINOR: "phase4_minor", + P4_SCOPE: "phase4_scope", + P4_SP: "phase4_sp_capture", + P4_REPORT: "phase4_report", + P5_PAT: "phase5_pattern", + P5_HARNESS: "phase5_harness", + P5_GARDENER: "phase5_gardener", + P5_RECUR: "phase5_recurring", + P5_ESC_H: "phase5_esc_harness", + P0: "phase0", + P1: "phase1", + P2: "phase2", + P3: "phase3", + P4: "phase4", + P5: "phase5", +}; - // The "write" nodes sit at Y_WRITE, end node at Y_END - const Y_WRITE = 1810; - const Y_END = 1910; +function MainFlowChart({ lang, onNodeClick }: MainFlowChartProps) { + const containerRef = useRef(null); - // Populate BRAINSTORM_NODE_Y_MAP - Object.entries(Y).forEach(([k, v]) => { BRAINSTORM_NODE_Y_MAP[k] = v; }); - BRAINSTORM_NODE_Y_MAP["bs_write_overwrite"] = Y_WRITE; - BRAINSTORM_NODE_Y_MAP["bs_write_version"] = Y_WRITE; - BRAINSTORM_NODE_Y_MAP["bs_write_rename"] = Y_WRITE; - BRAINSTORM_NODE_Y_MAP["bs_end"] = Y_END; - BRAINSTORM_NODE_Y_MAP["bs_esc_blocked"] = Y.bs_quality_passed; + useEffect(() => { + if (!containerRef.current) return; + + mermaid.initialize({ + startOnLoad: false, + theme: "base", + flowchart: { curve: "basis", htmlLabels: true, padding: 20 }, + themeVariables: { + primaryColor: "#1d4ed8", + primaryTextColor: "#ffffff", + primaryBorderColor: "#1e40af", + lineColor: "#64748b", + secondaryColor: "#f1f5f9", + tertiaryColor: "#e2e8f0", + fontFamily: "system-ui, -apple-system, sans-serif", + fontSize: "14px", + }, + }); + + const diagramDef = buildMainDiagram(lang); + const id = `main-flowchart-${Date.now()}`; + + mermaid.render(id, diagramDef).then(({ svg }) => { + if (!containerRef.current) return; + containerRef.current.innerHTML = svg; + + // Wire up click handlers on Mermaid nodes + const svgEl = containerRef.current.querySelector("svg"); + if (svgEl) { + svgEl.style.width = "100%"; + svgEl.style.maxWidth = "100%"; + svgEl.style.height = "auto"; + + // Mermaid renders nodes as with an id like "flowchart-P0_CHECK-N" + svgEl.querySelectorAll("g.node").forEach((el) => { + const rawId = el.id || ""; + // Extract node ID from Mermaid-generated IDs like "flowchart-P0_CHECK-0" + const match = rawId.match(/flowchart-([A-Z0-9_]+)-\d+/); + if (match) { + const nodeKey = match[1]; + const detailId = MERMAID_NODE_MAP[nodeKey]; + if (detailId) { + (el as HTMLElement).style.cursor = "pointer"; + el.addEventListener("click", () => onNodeClick(detailId)); + } + } + }); - // Widths - const W_P = W_PHASE; - const W_A = W_ACTION; - const W_S = W_SMALL; + // Also handle subgraph labels (phase headers) + svgEl.querySelectorAll("g.cluster").forEach((el) => { + const labelEl = el.querySelector(".cluster-label span, .nodeLabel"); + if (labelEl) { + (el as HTMLElement).style.cursor = "pointer"; + } + }); + } + }).catch((err) => { + console.error("Mermaid render error:", err); + if (containerRef.current) { + containerRef.current.innerHTML = `
Diagram render error. Check console.
`; + } + }); + }, [lang, onNodeClick]); return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* ── SESSION START ── */} - - - - - {/* ── EXISTING BRIEFS? ── */} - - - {/* NO branch from existing_check: goes straight down to Phase 1 */} - - - - - - {/* ── SINGLE FOUND ── */} - - - {/* single_found → status_check */} - - - {/* ── STATUS = DRAFT? ── */} - - - {/* status: YES (draft) → ask_continue (straight down) */} - - - - {/* status: NO → done/other: goes back left to Phase 1 path */} - - - - {/* ── ASK CONTINUE ── */} - - - {/* CONTINUE → load_brief */} - - - - {/* FRESH → Phase 1 (curved back to center) */} - - - - {/* ── LOAD BRIEF ── */} - - - {/* load_brief → phase3 (jump ahead, curved) */} - - - - {/* MULTIPLE branch from existing_check: goes to multi_found (left branch) */} - - - - {/* ── MULTI FOUND ── */} - - - {/* multi: CHOOSE EXISTING → load_brief (curved right + down) */} - - - - {/* multi: NEW PROJECT → Phase 1 */} - - - - {/* ── PHASE 1 — DISCOVERY ── */} - - - - - {/* ── PROBLEM CLEAR? ── */} - - - {/* NO → loop back to Phase 1 */} - - - - {/* YES → Phase 2 */} - - - - {/* ── PHASE 2 — DEEP DIVE ── */} - - - - - {/* ── ADVERSARIAL GATE ── */} - - - - - {/* ── ALL SECTIONS FILLABLE? ── */} - - - {/* NO → back to Phase 2 */} - - - - {/* YES → Phase 3 */} - - - - {/* ── PHASE 3 — DRAFT + VALIDATE ── */} - - - - - {/* ── QUALITY GATE ── */} - - - - - {/* ── QUALITY GATE PASSED? ── */} - - - {/* BLOCKED → escalade (right) */} - - - - - {/* TIER 2 → left branch (ask user → re-run gate) */} - - - - {/* PASSED → file_exists */} - - - - {/* ── FILE ALREADY EXISTS? ── */} - - - {/* NO → write directly */} - - - - {/* YES → file_conflict */} - - - - {/* ── FILE CONFLICT ── */} - - - {/* OVERWRITE → write */} - - - - {/* NEW VERSION → write */} - - - - {/* RENAME → write (right branch) */} - - - - {/* ── WRITE FILE (center — from NEW VERSION) ── */} - - - {/* Left write (OVERWRITE path): arrow from left */} - - - {/* Right write (RENAME path) */} - - - {/* All three write nodes → end */} - - - - - {/* ── END ── */} - - +
+
+
); } @@ -2033,10 +2488,11 @@ interface Translations { section_memory: string; scratchpad_label: string; scratchpad_items: string[]; - memory_label: string; - memory_items: string[]; section_agents: string; agents: AgentEntry[]; + section_review_cluster: string; + review_cluster_subtitle: string; + review_cluster_agents: AgentEntry[]; section_usecases: string; usecases: UseCaseEntry[]; // Config page @@ -2090,7 +2546,7 @@ const translations: Record = { { icon: "⊘", text: "Never touches code directly — every technical action is delegated to a sub-agent" }, { icon: "◈", text: "Plan, delegate, review, synthesize — in that order, always" }, { icon: "⟳", text: "Deliberate and methodical — temperature 0.3, variant max" }, - { icon: "✦", text: "Persistent memory via scratchpad + memory.md, survives context resets" }, + { icon: "✦", text: "Persistent working memory via scratchpad — survives context resets, overwritten at each new mission" }, { icon: "⬡", text: "Lifecycle tools enforce consistency at mission start — project_state() and check_artifacts() run before any planning" }, { icon: "◉", text: "Tone shaped by human-tone directives — direct, opinionated, concise. Disable with %%code%% in your config for raw behavior.", code: "soul: false" }, ], @@ -2100,14 +2556,7 @@ const translations: Record = { "Current mission state", "Overwritten at each new mission", "Survives context compaction", - "Read and written at 5 key moments in the workflow", - ], - memory_label: "Memory", - memory_items: [ - "Cross-session project knowledge", - "Injected into every LLM call automatically", - "Append-only — never overwritten", - "Build commands, conventions, architecture decisions", + "Read and written at 6 key moments in the workflow", ], section_agents: "Available Agents", agents: [ @@ -2118,20 +2567,6 @@ const translations: Record = { badgeBg: "#ede9fe", desc: "Discovery agent. Helps you articulate what to build before planning starts. Produces a structured product brief at docs/briefs/{project-name}.md.", }, - { - name: "explore", - badge: "READ-ONLY", - badgeColor: "#0369a1", - badgeBg: "#e0f2fe", - desc: "Search, glob, grep, file reads. No write or command access. Use for reconnaissance and codebase mapping.", - }, - { - name: "general", - badge: "FULL ACCESS", - badgeColor: "#166534", - badgeBg: "#dcfce7", - desc: "Read, edit, write, bash. All permissions. Use for any implementation, refactoring, or system command.", - }, { name: "review-manager", badge: "SUB-AGENT", @@ -2168,6 +2603,31 @@ const translations: Record = { desc: "Periodic hygiene agent. Fixes stale docs, detects code drift, escalates recurring patterns to harness. Run post-feature or on explicit request.", }, ], + section_review_cluster: "Review cluster", + review_cluster_subtitle: "Spawned in parallel by review-manager — never called directly", + review_cluster_agents: [ + { + name: "requirements-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Verifies the implementation matches the original requirements. Spawned by review-manager.", + }, + { + name: "code-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Evaluates correctness, logic, error handling, and maintainability. Spawned by review-manager.", + }, + { + name: "security-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Identifies vulnerabilities, misconfigurations, and data exposure risks. Spawned by review-manager.", + }, + ], section_usecases: "Typical Use Cases", usecases: [ { @@ -2235,8 +2695,8 @@ const translations: Record = { "distill: allow", "prune: allow", "compress: allow", - "read: allow (.opencode/scratchpad.md, .opencode/memory.md)", - "edit: allow (.opencode/scratchpad.md, .opencode/memory.md)", + "read: allow (.opencode/scratchpad.md)", + "edit: allow (.opencode/scratchpad.md)", "bash: allow (git status/diff/log/add/commit/push/tag only)", "Everything else: deny", ], @@ -2302,7 +2762,6 @@ const translations: Record = { config_limits_heading: "Fixed behaviors", config_limits: [ "Memory injection truncation: hardcoded at 50,000 characters", - "Memory file path: .opencode/memory.md (project root, not configurable)", "Scratchpad file path: .opencode/scratchpad.md (project root, not configurable)", ], col_field: "Field", @@ -2333,7 +2792,7 @@ const translations: Record = { { icon: "⊘", text: "Ne touche jamais au code directement — toute action technique est déléguée" }, { icon: "◈", text: "Planifie, délègue, review, synthétise — dans cet ordre, toujours" }, { icon: "⟳", text: "Délibéré et méthodique — temperature 0.3, variant max" }, - { icon: "✦", text: "Mémoire persistante via scratchpad + memory.md, survit aux resets de contexte" }, + { icon: "✦", text: "Mémoire de travail persistante via scratchpad — survit aux resets de contexte, écrasé à chaque nouvelle mission" }, { icon: "⬡", text: "Les outils lifecycle assurent la cohérence au démarrage — project_state() et check_artifacts() s'exécutent avant toute planification" }, { icon: "◉", text: "Ton façonné par les directives human-tone — direct, tranché, concis. Désactivable via %%code%% dans la config.", code: "soul: false" }, ], @@ -2343,14 +2802,7 @@ const translations: Record = { "État de la mission courante", "Écrasé à chaque nouvelle mission", "Survit à la compaction de contexte", - "Lu et écrit à 5 moments clés du workflow", - ], - memory_label: "Memory", - memory_items: [ - "Connaissances projet inter-sessions", - "Injecté dans chaque appel LLM automatiquement", - "Append-only — jamais écrasé", - "Commandes build, conventions, décisions archi", + "Lu et écrit à 6 moments clés du workflow", ], section_agents: "Les agents disponibles", agents: [ @@ -2361,20 +2813,6 @@ const translations: Record = { badgeBg: "#ede9fe", desc: "Agent de découverte. Vous aide à articuler ce que vous voulez construire avant la planification. Produit un product brief dans docs/briefs/{project-name}.md.", }, - { - name: "explore", - badge: "READ-ONLY", - badgeColor: "#0369a1", - badgeBg: "#e0f2fe", - desc: "Recherche, glob, grep, lecture de fichiers. Aucun droit d'écriture ni de commande. Usage : reconnaissance et cartographie du codebase.", - }, - { - name: "general", - badge: "FULL ACCESS", - badgeColor: "#166534", - badgeBg: "#dcfce7", - desc: "Lecture, édition, écriture, bash. Toutes les permissions. Usage : toute implémentation, refactoring, ou commande système.", - }, { name: "review-manager", badge: "SUB-AGENT", @@ -2411,6 +2849,31 @@ const translations: Record = { desc: "Agent de maintenance périodique. Corrige les docs obsolètes, détecte la dérive de code, remonte les patterns récurrents à harness. À lancer post-feature ou sur demande explicite.", }, ], + section_review_cluster: "Cluster de review", + review_cluster_subtitle: "Lancés en parallèle par review-manager — jamais appelés directement", + review_cluster_agents: [ + { + name: "requirements-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Vérifie que l'implémentation correspond aux exigences initiales. Lancé par review-manager.", + }, + { + name: "code-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Évalue la correction, la logique, la gestion d'erreurs et la maintenabilité. Lancé par review-manager.", + }, + { + name: "security-reviewer", + badge: "INTERNAL", + badgeColor: "#475569", + badgeBg: "#f1f5f9", + desc: "Identifie les vulnérabilités, mauvaises configurations et risques d'exposition. Lancé par review-manager.", + }, + ], section_usecases: "Cas d'usage typiques", usecases: [ { @@ -2478,8 +2941,8 @@ const translations: Record = { "distill: allow", "prune: allow", "compress: allow", - "read: allow (.opencode/scratchpad.md, .opencode/memory.md)", - "edit: allow (.opencode/scratchpad.md, .opencode/memory.md)", + "read: allow (.opencode/scratchpad.md)", + "edit: allow (.opencode/scratchpad.md)", "bash: allow (git status/diff/log/add/commit/push/tag uniquement)", "Tout le reste : deny", ], @@ -2545,7 +3008,6 @@ const translations: Record = { config_limits_heading: "Comportements figés", config_limits: [ "Troncature de l'injection mémoire : fixée à 50 000 caractères", - "Chemin du fichier mémoire : .opencode/memory.md (racine du projet, non configurable)", "Chemin du scratchpad : .opencode/scratchpad.md (racine du projet, non configurable)", ], col_field: "Champ", @@ -2749,36 +3211,18 @@ function IntroScreen({ onEnter, onConfig, lang, setLang }: { onEnter: () => void {/* 2. Memory */}
{t.section_memory} -
- -
-
- 📄 -
-
{t.scratchpad_label}
- scratchpad.md -
-
- {t.scratchpad_items.map((text, i) => )} -
- -
-
- 🧠 -
-
{t.memory_label}
- memory.md -
+
+
+ 📄 +
+
{t.scratchpad_label}
+ scratchpad.md
- {t.memory_items.map((text, i) => )}
- + {t.scratchpad_items.map((text, i) => )}
@@ -2811,6 +3255,43 @@ function IntroScreen({ onEnter, onConfig, lang, setLang }: { onEnter: () => void
+ {/* 3b. Review cluster */} +
+ {t.section_review_cluster} +

+ {t.review_cluster_subtitle} +

+
+
+ {t.review_cluster_agents.map(agent => ( +
+
+ {agent.name} + {agent.badge} +
+

+ {agent.desc} +

+
+ ))} +
+
+
+ {/* 4. Use cases */}
{t.section_usecases} @@ -3190,9 +3671,8 @@ function ConfigScreen({ onBack, onWorkflow, lang, setLang }: { onBack: () => voi export default function App() { const [view, setView] = useState<"intro" | "flowchart" | "config">("intro"); const [lang, setLang] = useState("en"); - const [selected, setSelected] = useState("understand"); + const [selected, setSelected] = useState("uf_start"); const [zoom, setZoom] = useState(1.0); - const [flowchartTab, setFlowchartTab] = useState<"orion" | "brainstorm">("orion"); const containerRef = useRef(null); const zoomIn = () => setZoom(z => Math.min(2.0, Math.round((z + 0.1) * 10) / 10)); @@ -3208,14 +3688,6 @@ export default function App() { } }; - const handleTabChange = (tab: "orion" | "brainstorm") => { - setFlowchartTab(tab); - setSelected(tab === "orion" ? "understand" : "bs_start"); - setZoom(1.0); - const container = containerRef.current; - if (container) container.scrollTo({ top: 0, behavior: "smooth" }); - }; - const t = translations[lang]; if (view === "intro") { @@ -3277,35 +3749,7 @@ export default function App() { > {t.nav_config} -
- {/* Flowchart tab switcher */} -
- {([ - { key: "orion" as const, label: t.tab_orion, activeColor: "#4f46e5", activeBg: "white" }, - { key: "brainstorm" as const, label: t.tab_brainstorm, activeColor: "#6d28d9", activeBg: "white" }, - ]).map(tab => ( - - ))} -
+
@@ -3321,7 +3765,7 @@ export default function App() { id="flowchart-container" ref={containerRef} style={{ - width: "45%", minWidth: 320, background: "#f8f9fa", + width: "62%", minWidth: 320, background: "#f8f9fa", borderRight: "1px solid #e2e8f0", overflowY: "auto", overflowX: "hidden", display: "flex", flexDirection: "column", alignItems: "center", @@ -3344,16 +3788,13 @@ export default function App() {
{/* SVG with zoom */} -
- {flowchartTab === "orion" - ? - : - } +
+ handleSelect(id, 0)} selectedNode={selected} />
{/* RIGHT — detail panel */} -
+
diff --git a/team-lead-workflow/vite.config.ts b/team-lead-workflow/vite.config.ts index cf45b55..980cc40 100644 --- a/team-lead-workflow/vite.config.ts +++ b/team-lead-workflow/vite.config.ts @@ -1,12 +1,16 @@ import path from "path"; import react from "@vitejs/plugin-react"; import { defineConfig } from "vite"; +import { viteSingleFile } from "vite-plugin-singlefile"; export default defineConfig({ - plugins: [react()], + plugins: [react(), viteSingleFile()], resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, + build: { + outDir: "dist", + }, }); From 8f25642a56f85b1163d815fc8649fcd00929b780 Mon Sep 17 00:00:00 2001 From: dmicheneau <47741512+dmicheneau@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:05:16 +0200 Subject: [PATCH 2/3] docs: expand Phase 0 brainstorm flowchart with full entry logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename brainstorm internal phases to Step 1/2/3 in WORKFLOW_DRAFT to avoid confusion with global Orion phases (Phase 1=PLAN, Phase 2=DELEGATE, etc.) - Replace simplistic Phase 0 (single Brief exist? node) with full entry logic: glob docs/briefs/, Briefs found? (0/1/N), Brief status? (draft/done), Continue or fresh start?, Revise or new project?, Load brief → Step 3, Step 1 direct/normal, Run brainstorm agent, Brief written → verbal suggestion - Add fast path dashed arrow from glob node to Phase 2 Select agent (bypass when scope is already clear) - Fix edge label visibility: inject CSS into SVG post-render to force dark background (#1e293b) and white text on all Mermaid edge labels - Add optional dashed arrow Phase 4 → Phase 5 (maintenance is post-delivery) - Rebuild bundle.html --- team-lead-workflow/WORKFLOW_DRAFT.md | 18 +- team-lead-workflow/bundle.html | 62 +++++-- team-lead-workflow/src/App.tsx | 255 +++++++++++++++++++++++++-- 3 files changed, 301 insertions(+), 34 deletions(-) diff --git a/team-lead-workflow/WORKFLOW_DRAFT.md b/team-lead-workflow/WORKFLOW_DRAFT.md index 75174fe..1889ecf 100644 --- a/team-lead-workflow/WORKFLOW_DRAFT.md +++ b/team-lead-workflow/WORKFLOW_DRAFT.md @@ -92,21 +92,21 @@ - Sortie : `docs/briefs/{project-name}.md` #### Logique d'entrée (toujours exécutée — glob obligatoire) -- **Aucun brief trouvé** → Phase 1 directement, sans question +- **Aucun brief trouvé** → Step 1 directement, sans question - **Un brief trouvé (status: draft)** → demande : "Continuer ce brief ou repartir de zéro ?" - - Continuer → charge le brief, saute directement en Phase 3 - - Repartir → Phase 1 normale + - Continuer → charge le brief, saute directement en Step 3 + - Repartir → Step 1 normale - **Un brief trouvé (status: done ou autre)** → demande : "Réviser ce brief ou nouveau projet ?" - - Réviser → charge le brief, saute directement en Phase 3 - - Nouveau projet → Phase 1 normale + - Réviser → charge le brief, saute directement en Step 3 + - Nouveau projet → Step 1 normale - **Plusieurs briefs trouvés** → liste les briefs (path + status + nom) + demande lequel choisir - Choisit un brief existant → même logique que "un brief trouvé" - - Nouveau projet → Phase 1 normale + - Nouveau projet → Step 1 normale -#### Fast path (Phase 1 → Phase 3 direct) +#### Fast path (Step 1 → Step 3 direct) - Si le message d'ouverture de l'utilisateur fournit déjà problème + scope suffisants : - l'agent propose de sauter directement en Phase 3 (draft immédiat) -- Si l'utilisateur dit explicitement vouloir sauter l'exploration → Phase 3 directement + l'agent propose de sauter directement en Step 3 (draft immédiat) +- Si l'utilisateur dit explicitement vouloir sauter l'exploration → Step 3 directement #### Fin du brainstorm - Après écriture du brief, l'agent dit : diff --git a/team-lead-workflow/bundle.html b/team-lead-workflow/bundle.html index 3c29c2d..092cdba 100644 --- a/team-lead-workflow/bundle.html +++ b/team-lead-workflow/bundle.html @@ -3214,13 +3214,21 @@ from { opacity: 0; } to { opacity: 1; } } -`;function K1e(e){return e===`fr`?{svgLabels:{start:`Requête utilisateur`,scratchpad_sub:`Plan courant · Contexte`,ambigu:`Ambigu ?`,question_label:`Question util.`,question_sub:`outil: question`,bug_decision:`Bug report ?`,certitude:`Certitude ?`,agent_failure:`Échec agent ?`,esc_uncertainty_label:`Escalade utilisateur`,esc_retry_label:`Escalade util.`,esc_retry_sub:`2 retries dépassés`,esc_blocked_label:`Escalade util.`,end:`Rapport à l'utilisateur`,arrow_oui:`OUI`,arrow_non:`NON`,arrow_gap_majeur:`Gap majeur`,arrow_gap_mineur:`Gap mineur`,scratchpad_rw_label:`← lire/écrire`,annot_delegate:`↳ MAJ scratchpad après chaque retour d'agent`,annot_agents:`✎ après retour d'agent`,agents_label:`Sous-agents`,annot_plan:`✎ scratchpad | planning si ambigu`,annot_harness:`suggérer à l'utilisateur — jamais sans confirmation`,harness_arrow:`pattern récurrent ?`,harness_node_label:`Harness ? (optionnel)`},details:{start:{title:`Requête utilisateur`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Point d'entrée`,items:[`L'utilisateur soumet une demande`,`Le team-lead analyse le type de requête avant d'agir`]}]},understand:{title:`1. Understand`,color:`#2563eb`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Lecture mémoire`,items:[`.opencode/scratchpad.md — plan de travail courant`]},{heading:`Appels lifecycle (obligatoires au démarrage)`,items:["`project_state()` — vue complète des exec-plans, specs et briefs","`check_artifacts()` — scan de cohérence inter-artefacts"]},{heading:`Appels lifecycle (tout au long du workflow)`,items:["`mark_block_done()` — après chaque livraison validée","`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED","`register_spec()` — quand une nouvelle spec doit exister sur disque"]},{heading:`Objectif`,items:[`Parser la requête (explicite vs implicite)`,`Identifier si ambigu avant de planifier`,`Vérifier si un scope était en cours (scratchpad)`]}]},scratchpad:{title:`📄 scratchpad.md`,color:`#0ea5e9`,nodeType:`MÉMOIRE DE TRAVAIL`,sections:[{heading:`Rôle`,items:[`Mémoire de travail mission courante`,`Survit à la compaction de contexte`,`Écrasé à chaque nouvelle mission`]},{heading:`Quand lire`,items:[`Au démarrage — lire l'état de la mission si elle existe`]},{heading:`Quand écrire (6 moments)`,items:[`Démarrage — objectif + plan + décisions initiales`,`Avant délégation — sous-tâches, fichiers modifiés, contexte de reprise`,`Après retour d'agent — résultats clés synthétisés`,`Après review — statut des tâches + verdict`,`Après chaque décision — noter ce qui a été décidé et pourquoi`,`Fin de mission — capture finale avant rapport utilisateur`]}]},ambigu:{title:`Ambigu ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Décision`,items:["OUI → poser des questions via outil `question` → attendre réponse → reprendre Understand",`NON → continuer vers Plan`]}]},question:{title:`Question utilisateur`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Outil`,items:["`question` — bloque jusqu'à réponse de l'utilisateur"]},{heading:`Règle`,items:[`Une fois la réponse reçue, reprendre depuis Understand pour intégrer les nouvelles informations`]}]},plan:{title:`2. Plan`,color:`#4f46e5`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Actions`,items:[`Créer/MAJ todolist → todowrite`,`Écrire plan + contexte dans scratchpad`,`Identifier les agents nécessaires`,`Déterminer parallèle vs séquentiel`]},{heading:`Exec-plans`,items:["Invoquer l'agent `planning` si : requête ambiguë + multi-sessions + AGENTS.md ne clarifie pas",`Plan simple → inline dans le scratchpad`,`Exec-plan → fichier dans docs/exec-plans/.md`,"Quand un exec-plan existe : scratchpad pointe vers lui — `See exec-plan: docs/exec-plans/.md`"]},{heading:`Lifecycle`,items:["`register_spec()` — quand une nouvelle spec doit exister sur disque"]},{heading:`Règle`,items:[`Un seul scope à la fois — finir avant de passer au suivant`,`Parquer les scopes secondaires dans le scratchpad`]}]},delegate:{title:`3. Delegate`,color:`#7c3aed`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Agents disponibles`,items:["`explore` — read-only, reconnaissance codebase","`general` — implémentation, écriture, commandes","Custom persona (`backend-engineer`, `react-specialist`…)"]},{heading:`Règles`,items:[`Tâches indépendantes → spawner en parallèle`,`Tâches dépendantes → séquentiel avec handoff de contexte`,`Après chaque retour → MAJ scratchpad + compress`]}]},bug_decision:{title:`Bug report ?`,color:`#be123c`,nodeType:`DÉCISION`,sections:[{heading:`Déclencher bug-finder si`,items:[`Comportement inattendu / régression / crash / sortie incorrecte`,`Quelque chose « a arrêté de fonctionner » sans cause évidente`,`Un fix a été appliqué mais le problème persiste ou s'est déplacé`]},{heading:`Ne PAS déclencher si`,items:[`Bug trivialement localisable (utilisateur pointe la ligne + typo évidente) ET fix isolé → flow normal`]}]},bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Rôle`,items:[`Forcer l'analyse root-cause AVANT tout fix`,`Empêche les workarounds et la divergence de code`]},{heading:`Verdicts`,items:["HIGH → fix direct via `general` avec l'analyse","MEDIUM → fix via `general` + signaler l'incertitude à l'utilisateur",`UNCERTAINTY_EXPOSED → remonter les questions ouvertes à l'utilisateur avant de continuer`]}]},certitude:{title:`Certitude ?`,color:`#be123c`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`HIGH / MEDIUM → rejoindre le flow Agents avec l'analyse en contexte`,`UNCERTAINTY_EXPOSED → escalade utilisateur, attendre réponse avant tout fix`]}]},escalade_uncertainty:{title:`Escalade — UNCERTAINTY_EXPOSED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Message à l'utilisateur`,items:[`Présenter les hypothèses identifiées et leurs probabilités`,`Lister les questions précises qui bloquent le diagnostic`,`Ne pas proposer de fix dans cet état`]}]},agents:{title:`Sous-agents`,color:`#6d28d9`,nodeType:`DÉLÉGATION`,sections:[{heading:`Types`,items:["`explore` (natif OpenCode) — lecture seule : recherche, glob, lecture","`general` (natif OpenCode) — accès complet : lecture, écriture, bash","Custom persona — `backend-engineer`, `api-architect`…"]},{heading:`Contexte handoff`,items:[`Chaque agent repart de zéro — être explicite`,`Inclure fichiers modifiés, décisions, interfaces`,`Parallèle = plusieurs task calls dans le même message`]}]},agent_failure:{title:`Échec agent ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Diagnostics`,items:[`Mauvais prompt → reformuler avec plus de précision`,"Contexte insuffisant → envoyer `explore` d'abord, retry avec findings",`Tâche trop grande → décomposer en sous-tâches`,`Erreur outil → vérifier permissions et chemins`]},{heading:`Règle`,items:[`Max 2 retries — toujours changer quelque chose entre les tentatives`,`Si toujours KO après 2 tentatives → escalade utilisateur`]}]},retry:{title:`↩ Retry (max 2)`,color:`#b45309`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Diagnostiquer la cause de l'échec`,`Reformuler / décomposer / enrichir le contexte`,`Relancer l'agent avec le nouveau prompt`]}]},escalade_retry:{title:`Escalade — 2 retries dépassés`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Message à l'utilisateur`,items:[`Décrire ce qui a été tenté (2 tentatives)`,`Expliquer le diagnostic de chaque échec`,`Proposer des options : reformuler la tâche, fournir du contexte supplémentaire`,`Ne jamais retenter une 3e fois sans instruction explicite`]}]},review:{title:`4. Review`,color:`#b45309`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Règle absolue`,items:[`TOUJOURS via review-manager — jamais de reviewer direct`,`Obligatoire pour tout changement code, config, infra, sécurité`]},{heading:`Fournir au review-manager`,items:[`Fichiers modifiés + résumé des changements`,`Exigences originales de l'utilisateur`,`Trade-offs et décisions effectuées`,`Ce qui était explicitement hors scope`]},{heading:`Lifecycle`,items:["`mark_block_done()` — après chaque livraison validée","`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED"]}]},review_manager:{title:`review-manager`,color:`#92400e`,nodeType:`AGENT ORCHESTRATEUR`,sections:[{heading:`Rôle`,items:[`Orchestrateur de review — jamais reviewer direct`,`Spawne en parallèle : code-reviewer, security-reviewer, requirements-reviewer`,`Synthétise les verdicts et arbitre les désaccords`]},{heading:`Skip autorisé uniquement si`,items:[`Changement docs-only (aucun code modifié)`,`Aucun impact sécurité possible`,`L'utilisateur demande explicitement la vitesse`]}]},verdict:{title:`Verdict review ?`,color:`#b45309`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`APPROVED → Synthesize & Report`,`CHANGES_REQUESTED → re-déléguer fixes au producteur → re-review (max 2 rounds)`,`BLOCKED → escalade immédiate à l'utilisateur, ne pas corriger sans input user`]}]},changes_loop:{title:`↩ Fix + re-review (max 2)`,color:`#b45309`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Renvoyer les fixes précis à l'agent producteur`,`Re-passer par le review-manager`,`Maximum 2 rounds au total`]}]},escalade_blocked:{title:`Escalade — BLOCKED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles strictes`,items:[`Signaler le problème précis identifié par le reviewer`,`Expliquer pourquoi c'est bloquant (pas juste un warning)`,`Ne proposer AUCUN fix dans le message d'escalade`,`Attendre une instruction explicite avant de continuer`]}]},synthesize:{title:`5. Synthesize & Report`,color:`#15803d`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Auto-évaluation`,items:[`Répond à la vraie demande (pas l'interprétée) ?`,`Pas de contradiction entre résultats d'agents ?`,`Rien de manquant dans la livraison ?`]},{heading:`MAJ mémoire`,items:[`Nettoyer le scratchpad (tâches terminées)`]}]},autoeval:{title:`Auto-éval OK ?`,color:`#15803d`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OK → rapport final à l'utilisateur`,`Gap mineur (détail manquant) → fix rapide puis rapport`,`Gap majeur (mauvaise approche) → retour Delegate`]}]},gap_majeur:{title:`↩ Retour Delegate`,color:`#166534`,nodeType:`BOUCLE`,sections:[{heading:`Traitement`,items:[`Traiter le gap comme une nouvelle tâche`,`Reprendre depuis la phase Delegate`,`MAJ todolist et scratchpad avant de déléguer`]}]},fix_rapide:{title:`Fix rapide`,color:`#166534`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Corriger le détail manquant directement`,`Pas besoin de repasser par Review si le fix est trivial`,`Inclure dans le rapport final`]}]},end:{title:`Rapport à l'utilisateur`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Livraison`,items:[`Résumé concis des changements effectués`,`Problèmes éventuels signalés honnêtement`,`Prochaines étapes proposées si pertinent`]}]},harness_suggest:{title:`Harness ? (optionnel)`,color:`#166534`,nodeType:`POST-LIVRAISON (OPTIONNEL)`,sections:[{heading:`Quand suggérer`,items:[`Un pattern a été expliqué plusieurs fois à différents agents`,`Une décision architecturale est régulièrement violée`,`Une convention n'est pas encore enforced par lint ou CI`]},{heading:`Règles`,items:[`Jamais sans confirmation explicite de l'utilisateur`,`Jamais au démarrage de mission — uniquement post-livraison`,`Jamais sur le chemin critique — toujours en suggestion finale`,`Proposer, ne jamais lancer automatiquement`]}]},uf_start:{title:`Démarrage de session`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Première action`,items:["Toujours scanner `docs/briefs/` avant toute autre chose — sans exception"]}]},uf_scan:{title:`Scanne docs/briefs/`,color:`#6d28d9`,nodeType:`ACTION OBLIGATOIRE`,sections:[{heading:`Règle`,items:["Chercher les briefs existants dans `docs/briefs/` quelle que soit la quantité de contexte fournie par l'utilisateur",`C'est obligatoire — il n'y a pas d'exception`]}]},uf_briefs_found:{title:`Brief(s) trouvé(s) ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`AUCUN → passer directement à la Phase 1, sans question`,`UN SEUL → vérifier le statut (draft / done / autre)`,`PLUSIEURS → lister tous les briefs, demander lequel ou nouveau projet`]}]},uf_brief_status:{title:`Statut : draft ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI (draft) → demander : continuer l'édition ou repartir de zéro ?`,`NON (done/autre) → demander : réviser ce brief ou démarrer un nouveau projet ?`]}]},uf_ask_continue:{title:`Continuer ou repartir ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Options`,items:[`CONTINUER → charger le brief, sauter directement à l'Étape 3 (mode révision)`,`REPARTIR → flux Étape 1 normal`]}]},uf_ask_revise:{title:`Réviser ou nouveau projet ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Options`,items:[`RÉVISER → charger le brief, sauter directement à l'Étape 3 (mode révision)`,`NOUVEAU PROJET → flux Étape 1 normal`]}]},uf_load_brief:{title:`Charger le brief`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Lit le brief existant pour le mode révision`,`Saute directement à l'Étape 3 — ignorer les Étapes 1 et 2`]},{heading:`Chemin rapide`,items:[`Si le message d'ouverture de l'utilisateur fournit suffisamment de contexte → proposer de rédiger immédiatement (Étape 3 directe)`]}]},uf_no_brief:{title:`Pas de brief → Phase 1`,color:`#475569`,nodeType:`TRANSITION`,sections:[{heading:`Règle`,items:[`Pas de question posée — passer directement à la Phase 1 (Understand + Plan)`,`C'est aussi le chemin quand l'utilisateur choisit 'repartir de zéro' ou 'nouveau projet'`]}]},uf_multi_found:{title:`Plusieurs briefs trouvés`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Lister tous les briefs avec chemin + statut + nom du projet`,`Demander : lequel traiter ? (ou nouveau projet ?)`,`Une fois choisi, suit la même logique que 'un seul brief trouvé'`]}]},uf_brief_end:{title:`Brief écrit`,color:`#6d28d9`,nodeType:`SORTIE PHASE 0`,sections:[{heading:`Sortie`,items:["Brief sauvegardé dans `docs/briefs/{project-name}.md`"]},{heading:`Passation`,items:[`Dire : 'Confier à Planning pour le décomposer en exec-plan, ou à Orion si la portée est déjà assez claire'`,`C'est une suggestion verbale — PAS une délégation automatique`]}]},phase0_brief_check:{title:`Phase 0 — BRAINSTORM (optionnel)`,color:`#7c3aed`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Entrée`,items:["Scanner `docs/briefs/` — toujours, sans exception",`Aucun brief → Phase 1 directement`,`Brief draft → demander : continuer ou repartir ?`,`Plusieurs briefs → lister + choisir`]},{heading:`Fast path`,items:[`Si scope déjà clair dans le message → flèche pointillée directe vers Phase 1`,`Suggestion verbale uniquement — jamais de délégation automatique`]}]},phase0_run_brainstorm:{title:`Lancer agent brainstorm`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Agent brainstorm`,items:[`Étape 1 — Découverte : faire émerger le problème`,`Étape 2 — Approfondissement : scope, critères, contraintes, risques`,`Étape 3 — Rédaction + Validation : brief complet, porte qualité`]}]},phase0_produce_brief:{title:`Produire le brief`,color:`#7c3aed`,nodeType:`SORTIE PHASE 0`,sections:[{heading:`Sortie`,items:["Brief écrit dans `docs/briefs/{project-name}.md`"]},{heading:`Passation`,items:[`Suggestion verbale : confier à Planning ou à Orion si scope assez clair`]}]},phase1_read_sp:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Ordre strict (9 étapes)`,items:["1. Lire `.opencode/scratchpad.md`","2. Appeler `project_state()`","3. Appeler `check_artifacts()`",`4. Clarifier l'intention (ambigu ? bug ?)`,`5. Identifier le nombre de scopes`,`6. Choisir le type de plan (inline ou exec-plan)`,"7. Appeler `todowrite`",`8. Écrire/mettre à jour le scratchpad`,"9. `compress` avant d'entrer en Phase 2"]}]},phase1_project_state:{title:`project_state() + check_artifacts()`,color:`#1d4ed8`,nodeType:`LIFECYCLE TOOLS`,sections:[{heading:`Obligatoires au démarrage`,items:["`project_state()` — état complet des exec-plans, specs et briefs","`check_artifacts()` — scan de cohérence inter-artefacts"]}]},phase1_clarify:{title:`Clarifier intention → scope → type plan`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Décisions`,items:["Ambigu ? → question via outil `question`",`Plusieurs scopes ? → proposer un ordre, attendre accord`,`Plan simple → inline dans scratchpad`,"Tâche complexe → invoquer agent `planning` → exec-plan"]}]},phase1_todowrite:{title:`todowrite + écrire scratchpad`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Actions`,items:[`Créer/MAJ liste de tâches visible`,`Écrire objectif, plan, décisions, questions ouvertes dans scratchpad`]}]},phase1_compress:{title:`compress stale context`,color:`#1d4ed8`,nodeType:`GESTION DU CONTEXTE`,sections:[{heading:`Outils DCP`,items:["`distill` — résumer les outputs longs","`prune` — élaguer les outputs exploratoires déjà distillés","`compress` — nettoyer le contexte avant Phase 2"]}]},phase2_bug:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Sélection agent (hiérarchie stricte)`,items:[`1. Agents user-defined (fichiers .md dans agent/)`,`2. Agents plugin nommés (bug-finder, review-manager…)`,"3. `explore` — read-only, plus rapide","4. `general` + persona — fallback uniquement"]},{heading:`Cycle`,items:[`MAJ scratchpad avant délégation`,"Déléguer via `task`",`Succès → MAJ scratchpad, distill, mark_block_done`,`Échec → diagnostiquer puis retry ≤2, sinon escalade`]}]},phase2_bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Rôle`,items:[`Forcer l'analyse root-cause AVANT tout fix`]},{heading:`Verdicts`,items:["HIGH → fix via `general`",`MEDIUM → fix + signaler incertitude`,`UNCERTAINTY_EXPOSED → stop, escalade user`]}]},phase2_select_agent:{title:`Sélectionner agent (hiérarchie)`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Règle`,items:[`Agents user-defined > plugin nommés > explore > general+persona`,"Si `explore` ou `general` suffisent → ne pas inventer une persona"]}]},phase2_handoff:{title:`Context handoff A→B`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Prompt auto-suffisant`,items:[`Inclure chemins de fichiers, contraintes, output attendu`,`Agents séquentiels : extraire l'essentiel de A, donner à B ce qui a changé/décidé/découvert`,"Parallèle = plusieurs `task` calls dans le même message"]}]},phase2_success:{title:`Succès agent ?`,color:`#15803d`,nodeType:`DÉCISION`,sections:[{heading:`En cas d'échec`,items:[`Prompt peu clair → reformuler`,`Overflow contexte → décomposer`,`Info manquante → enrichir (explore d'abord)`,`Mauvaise persona → changer`,`Blocage fondamental → escalade`]},{heading:`Règle`,items:[`Max 2 retries (tous types confondus) → escalade utilisateur`]}]},phase2_retry:{title:`retry ≤2`,color:`#d97706`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Diagnostiquer la cause`,`Reformuler / décomposer / enrichir / changer persona`,`Toujours changer quelque chose entre deux tentatives`]}]},phase2_esc_user:{title:`Escalade utilisateur`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles`,items:[`Décrire les 2 tentatives effectuées`,`Expliquer le diagnostic de chaque échec`,`Proposer options : reformuler, fournir contexte`,`Ne jamais retenter une 3e fois sans instruction`]}]},phase3_delegate_rm:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Règle absolue`,items:[`TOUJOURS via review-manager — jamais de reviewer direct`]},{heading:`Fournir au review-manager`,items:[`Fichiers modifiés + résumé des changements`,`Exigences originales de l'utilisateur`,`Trade-offs et décisions`,`Ce qui est explicitement hors scope`]},{heading:`Fresh start vs Resume`,items:[`Fresh (no task_id) pour les nouvelles reviews`,`Resume (task_id) pour les corrections après CHANGES_REQUESTED`]}]},phase3_verdict:{title:`Verdict ?`,color:`#b45309`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`APPROVED → Phase 4 (Synthesize)`,`CHANGES_REQUESTED → re-déléguer fixes au producteur → re-review (max 2 rounds)`,`BLOCKED → escalade immédiate, ne pas corriger sans input user`]}]},phase3_resume_fix:{title:`Reprendre producteur → fix`,color:`#d97706`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Renvoyer les fixes précis à l'agent producteur (resume, task_id)`,`Re-passer par review-manager`,`Maximum 2 rounds au total`]}]},phase3_blocked_esc:{title:`Escalade — BLOCKED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles strictes`,items:[`Signaler le problème précis identifié par le reviewer`,`Expliquer pourquoi c'est bloquant`,`Proposer AUCUN fix dans le message d'escalade`,`Attendre instruction explicite avant de continuer`]}]},phase4_self_eval:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Auto-évaluation (obligatoire avant rapport)`,items:[`1. Répond à la vraie demande (pas l'interprétée) ?`,`2. Les outputs multi-agents sont cohérents ?`,`3. Quelque chose de nagging sur la correction ou les effets de bord ?`]},{heading:`Types de gap`,items:[`Gap mineur → fix rapide puis rapport`,`Gap majeur → retour vers Phase 2 (Delegate)`,`Confusion scope → demander à l'utilisateur`]}]},phase4_gap:{title:`Type gap ?`,color:`#4338ca`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OK → rapport final`,`Mineur → fix rapide → sp_capture`,`Majeur → retour Phase 2 (loop dashed)`,`Scope → demander à l'utilisateur`]}]},phase4_minor:{title:`Gap mineur → fix rapide`,color:`#d97706`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Corriger le détail manquant directement`,`Pas besoin de repasser par Review si trivial`,`Inclure dans le rapport final`]}]},phase4_scope:{title:`Scope confusion → demander user`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Ne pas livrer une mauvaise réponse`,`Poser la question précise avant de continuer`]}]},phase4_sp_capture:{title:`Capture finale scratchpad`,color:`#4338ca`,nodeType:`ACTION`,sections:[{heading:`Avant le rapport`,items:[`Marquer la mission comme complète dans le scratchpad`,`Ne pas effacer (l'utilisateur peut revenir)`,"`## Plan` — statuts finaux","`## Decisions` — dernières décisions enregistrées"]}]},phase4_report:{title:`Rapport (human-tone)`,color:`#4338ca`,nodeType:`LIVRAISON`,sections:[{heading:`Règles de communication`,items:[`Mener avec le résultat, pas le processus`,`Mettre en avant succès et échecs honnêtement`,`Ne pas édulcorer les échecs d'agents`,`Proposer des prochaines étapes concrètes si pertinent`]}]},phase5_pattern:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Deux chemins indépendants`,items:[`Path A — Harness : encoder le pattern en artefact mécanique (lint, CI, AGENTS.md)`,`Path B — Gardener : corriger docs obsolètes + détecter dérive de code`]},{heading:`Règles`,items:[`Jamais sans confirmation explicite de l'utilisateur`,`Jamais au démarrage de mission — uniquement post-livraison`]}]},phase5_harness:{title:`Harness`,color:`#15803d`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Quand suggérer`,items:[`Pattern expliqué plusieurs fois à des agents différents`,`Décision architecturale régulièrement violée`,`Convention pas encore enforced par lint ou CI`]},{heading:`Ce que produit Harness`,items:[`Convention code → règle lint custom (ESLint, Ruff…)`,`Contrainte build/déploiement → job CI`,`Règle agent → entrée AGENTS.md`,`Principe non mécanisable → entrée docs/guiding-principles.md`]}]},phase5_gardener:{title:`Gardener`,color:`#475569`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Fonction 1 — Doc-Gardening`,items:[`Détecte refs obsolètes, descriptions périmées, liens cassés`,`Corrige le contenu, ouvre une PR par document`]},{heading:`Fonction 2 — Code-GC`,items:[`Dérive ponctuelle → PR de refactoring ciblée`,`Pattern récurrent → escalade vers Harness`]}]},phase5_recurring:{title:`Pattern récurrent ?`,color:`#475569`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI → escalade vers Harness (confirmation requise)`,`NON → PR ciblée uniquement`]}]},phase5_esc_harness:{title:`Escalader vers Harness`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Process`,items:[`Gardener vérifie avec Orion / utilisateur avant d'invoquer Harness`,`Harness procède directement une fois invoqué — il ne re-demande pas`]}]},phase_start:{title:`Requête utilisateur`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Point d'entrée`,items:[`L'utilisateur soumet une demande`,`Orion scanne les briefs existants avant toute autre action`]}]},phase_end:{title:`Rapport à l'utilisateur`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Livraison`,items:[`Résumé concis des changements effectués`,`Problèmes éventuels signalés honnêtement`,`Prochaines étapes proposées si pertinent`]}]},phase0:{title:`Phase 0 — BRAINSTORM (optionnel)`,color:`#7c3aed`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Phase de découverte. Se déclenche quand la demande est vague ou quand un nouveau projet démarre.`,`Produit un product brief dans docs/briefs/{project-name}.md.`,`Optionnelle — si brief existant ou scope clair, chemin rapide vers Phase 1.`]}]},phase1:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Séquence de planification en 9 étapes strictes.`,`Lire scratchpad → outils lifecycle → clarifier → scope → type plan → todowrite → écrire scratchpad → compress.`]}]},phase2:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Sélectionner les agents (hiérarchie stricte), déléguer via task, gérer les échecs avec retry ≤2.`,`Les bug reports vont toujours vers bug-finder en premier.`]}]},phase3:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Toujours via review-manager (jamais de reviewers directs).`,`APPROVED → Phase 4, CHANGES_REQUESTED → re-déléguer (max 2 rounds), BLOCKED → escalade.`]}]},phase4:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Auto-éval (3 questions) → traitement des gaps → capture finale scratchpad → rapport human-tone.`]}]},phase5:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Post-livraison, optionnel. Deux chemins : Harness (enforcement de patterns) et Gardener (détection de dérive docs/code).`]}]}},unifiedSvgLabels:{uf_start:`Démarrage de session`,uf_scan:`Scanne docs/briefs/`,uf_scan_sub:`(toujours — obligatoire)`,uf_briefs_found:`Brief(s) trouvé(s) ?`,uf_no_brief:`Pas de brief → Phase 1`,uf_brief_status:`Statut : draft ?`,uf_ask_continue:`Continuer ou repartir ?`,uf_ask_revise:`Réviser ou nouveau projet ?`,uf_load_brief:`Charger le brief`,uf_multi_found:`Plusieurs briefs → liste + choisir`,uf_brief_end:`Brief écrit`,uf_brief_end_sub:`suggérer Planning ou Orion`,uf_phase0_label:`Phase 0 — BRAINSTORM (optionnel)`,uf_placeholder_label:`Phase 1–5 (à venir)`,uf_step1_label:`Étape 1 — Découverte`,uf_step2_label:`Étape 2 — Rédaction du brief`,uf_step3_label:`Étape 3 — Alignement`,uf_expand_hint:`Voir les étapes`,uf_collapse_hint:`Masquer les étapes`,uf_arrow_none:`AUCUN`,uf_arrow_one:`UN SEUL`,uf_arrow_multiple:`PLUSIEURS`,uf_arrow_draft:`BROUILLON`,uf_arrow_done:`TERMINÉ`,uf_arrow_continue:`CONTINUER`,uf_arrow_fresh:`REPARTIR`,uf_arrow_revise:`RÉVISER`,uf_arrow_new_project:`NOUVEAU PROJET`,uf_arrow_phase3:`→ Étape 3`},brainstormSvgLabels:{bs_start:`Démarrage session`,bs_existing_check:`Briefs existants ?`,bs_single_found:`Un brief trouvé`,bs_multi_found:`Plusieurs trouvés`,bs_status_check:`Statut = brouillon ?`,bs_ask_continue:`Continuer ou nouveau ?`,bs_load_brief:`Charger le brief`,bs_phase1:`Étape 1 — Découverte`,bs_problem_clear:`Problème clair ?`,bs_phase2:`Étape 2 — Approfondissement`,bs_adversarial:`Porte adversariale`,bs_template_fillable:`Toutes sections remplissables ?`,bs_phase3:`Étape 3 — Rédaction + Validation`,bs_quality_gate:`Porte qualité`,bs_quality_passed:`Porte qualité passée ?`,bs_file_exists:`Fichier existant ?`,bs_file_conflict:`Écraser / v2 / renommer ?`,bs_write:`Écrire le brief`,bs_end:`Brief écrit. Passer à Planning ou Orion.`,bs_arrow_yes:`OUI`,bs_arrow_no:`NON`,bs_arrow_one:`UN SEUL`,bs_arrow_multiple:`PLUSIEURS`,bs_arrow_none:`AUCUN`,bs_arrow_draft:`BROUILLON`,bs_arrow_done:`TERMINÉ`,bs_arrow_continue:`CONTINUER`,bs_arrow_fresh:`NOUVEAU`,bs_arrow_choose:`CHOISIR EXISTANT`,bs_arrow_new:`NOUVEAU PROJET`,bs_arrow_all_fillable:`OUI`,bs_arrow_missing:`NON`,bs_arrow_passed:`PASSÉ`,bs_arrow_tier2:`NIVEAU 2`,bs_arrow_blocked:`BLOQUÉ`,bs_esc_blocked_label:`Escalade`,bs_esc_blocked_sub:`BLOQUÉ`,bs_arrow_overwrite:`ÉCRASER`,bs_arrow_version:`NOUVELLE VERSION`,bs_arrow_rename:`RENOMMER`},brainstormDetails:{bs_start:{title:`Démarrage de session`,color:`#0d9488`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Ce qui se passe`,items:[`La session est initiée avec l'agent brainstorm`,`L'agent scanne docs/briefs/ pour vérifier les briefs existants`,`Décision de routage prise avant toute question`]}]},bs_existing_check:{title:`Briefs existants ?`,color:`#0d9488`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`AUCUN → Flux normal → Étape 1 (Découverte)`,`UN SEUL → vérifier le statut (brouillon / terminé)`,`PLUSIEURS → lister les briefs, demander lequel ou nouveau projet`]}]},bs_single_found:{title:`Un brief trouvé`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Un brief localisé dans docs/briefs/`,`L'agent vérifie le champ statut dans le frontmatter du brief`,`Routage vers la décision de statut`]}]},bs_multi_found:{title:`Plusieurs briefs trouvés`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent liste tous les briefs trouvés à l'utilisateur`,`Demande : lequel reprendre, ou démarrer un nouveau projet ?`,`CHOISIR EXISTANT → Charger brief → Étape 3 (révision)`,`NOUVEAU PROJET → Flux normal → Étape 1`]}]},bs_status_check:{title:`Statut = brouillon ?`,color:`#0891b2`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI (brouillon) → Demander : continuer ou repartir de zéro ?`,`NON (terminé/autre) → Informer l'utilisateur, demander un nouveau nom de projet → Étape 1`]}]},bs_ask_continue:{title:`Continuer ou repartir de zéro ?`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'utilisateur voit le résumé du brief en brouillon existant`,`Demandé : reprendre là où on s'est arrêtés, ou repartir de zéro ?`,`CONTINUER → Charger brief → sauter directement à l'Étape 3 (révision)`,`REPARTIR → Ignorer le brief existant → Étape 1 (Découverte)`]}]},bs_load_brief:{title:`Charger le brief`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent lit le fichier brief existant dans docs/briefs/`,`Fournit le contexte complet à l'Étape 3 (mode révision)`,`L'utilisateur peut itérer sur le contenu existant plutôt que de repartir de zéro`]}]},bs_phase1:{title:`Étape 1 — Découverte`,color:`#2563eb`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Question centrale`,items:[`"Quel problème essaies-tu de résoudre, et qui en souffre ?"`]},{heading:`Règles`,items:[`Max 2 questions à la fois — ne jamais surcharger`,`Faire émerger le problème, pas la solution`,`Ne pas accepter les réponses vagues — pousser vers des précisions`,`Itérer jusqu'à ce que le problème soit clairement formulé`]},{heading:`Critères de sortie`,items:[`Problème formulé en 2–4 phrases`,`Utilisateur principal nommé`,`C'est bien un problème, pas une fonctionnalité`]}]},bs_problem_clear:{title:`Problème clair ?`,color:`#2563eb`,nodeType:`DÉCISION`,sections:[{heading:`Critères de sortie`,items:[`OUI → problème formulé en 2–4 phrases claires ET utilisateur principal nommé → Étape 2`,`NON → itérer — poser des questions de suivi plus ciblées`]}]},bs_phase2:{title:`Étape 2 — Approfondissement`,color:`#4f46e5`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Sujets à couvrir`,items:[`Périmètre et frontières — qu'est-ce qui est explicitement hors périmètre ?`,`Critères de succès — comment savoir que ça a marché ?`,`Cas d'usage — top 3–5 scénarios concrets`,`Contraintes — technique, temps, équipe, budget`,`Idées rejetées — ce qui a été considéré et écarté ?`]},{heading:`Pression socratique`,items:[`Challenger les hypothèses — "Pourquoi X est la bonne approche ?"`,`Demander les modes d'échec — "Qu'est-ce qui ferait échouer ça ?"`,`Sonder les cas limites — "Que se passe-t-il si Y ne fonctionne pas ?"`]}]},bs_adversarial:{title:`Porte adversariale`,color:`#7c3aed`,nodeType:`PORTE`,sections:[{heading:`Deux questions obligatoires`,items:[`"Quel est l'argument le plus fort contre la construction de ça ?"`,`"Que devrait-il être vrai pour que ça échoue en an 1 ?"`]},{heading:`But`,items:[`Force l'utilisateur à articuler les vrais risques`,`Empêche les briefs trop optimistes qui sautent les modes d'échec`,`Si l'utilisateur ne peut pas répondre, le problème a besoin de plus de travail`]}]},bs_template_fillable:{title:`Toutes les sections remplissables ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI → passer à l'Étape 3 (rédaction + validation)`,`NON → itérer dans l'Étape 2 — identifier les sections encore vides`]},{heading:`Sections requises`,items:[`Énoncé du problème`,`Utilisateur principal`,`Critères de succès`,`Top cas d'usage`,`Contraintes`,`Hors périmètre`,`Risques / réponses adversariales`]}]},bs_phase3:{title:`Étape 3 — Rédaction + Validation`,color:`#6d28d9`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Ce qui se passe`,items:[`L'agent génère le brief complet inline depuis le contexte collecté`,`L'utilisateur révise le brouillon et donne son retour`,`L'agent itère jusqu'à ce que l'utilisateur confirme que le brief est prêt`,`La porte qualité est passée avant l'écriture sur disque`]},{heading:`Format de sortie`,items:[`Fichier Markdown dans docs/briefs/{project-name}.md`,`Sections structurées : problème, utilisateurs, critères de succès, cas d'usage, contraintes, risques`]}]},bs_quality_gate:{title:`Porte qualité`,color:`#6d28d9`,nodeType:`PORTE`,sections:[{heading:`Niveau 1 — correction silencieuse automatique`,items:[`Problèmes de formatage mineurs`,`Phrases incomplètes inférables`,`Ponctuation ou majuscules manquantes`]},{heading:`Niveau 2 — demander à l'utilisateur via l'outil question`,items:[`Critères de succès ambigus`,`Contraintes conflictuelles`,`Frontières de périmètre vagues`]},{heading:`BLOQUÉ — escalader immédiatement`,items:[`Aucun énoncé de problème`,`Aucun critère de succès`,`Périmètre vide — impossible de déterminer ce qu'il faut construire`]}]},bs_quality_passed:{title:`Porte qualité passée ?`,color:`#6d28d9`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`PASSÉ → passer à la vérification d'écriture de fichier`,`Problèmes NIVEAU 2 → demander à l'utilisateur → résoudre → re-passer la porte`,`BLOQUÉ (pas de problème, pas de critères de succès, périmètre vide) → STOP — escalader à l'utilisateur, ne pas écrire`]}]},bs_file_exists:{title:`Fichier existant ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Vérification`,items:[`L'agent vérifie si docs/briefs/{project-name}.md existe déjà sur disque`]},{heading:`Branches`,items:[`NON → écrire directement`,`OUI → demander à l'utilisateur : écraser, nouvelle version, ou renommer ?`]}]},bs_file_conflict:{title:`Écraser / nouvelle version / renommer ?`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Options`,items:[`ÉCRASER → remplacer le fichier existant par le nouveau brief`,`NOUVELLE VERSION → écrire comme {name}-v2.md (ou -v3, etc.)`,`RENOMMER → écrire avec un nom de fichier personnalisé fourni par l'utilisateur`]}]},bs_write:{title:`Écrire le fichier`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent écrit le brief validé dans docs/briefs/{project-name}.md`,`Le fichier est créé ou écrasé selon le choix de résolution de conflit`,`Le brief est prêt à être consommé par Planning ou Orion`]}]},bs_end:{title:`Brief écrit`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Passation`,items:[`Brief écrit dans docs/briefs/{project-name}.md`,`Confier à l'agent Planning pour le plan d'exécution`,`Ou confier directement à Orion (team-lead) pour l'implémentation`]}]},bs_esc_blocked:{title:`Escalade — BLOQUÉ`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Quand ça se déclenche`,items:[`Aucun énoncé de problème`,`Aucun critère de succès défini`,`Périmètre vide — impossible de déterminer ce qu'il faut construire`]},{heading:`Ce qui se passe`,items:[`L'agent s'arrête immédiatement — n'écrit pas le brief`,`Rapporte précisément ce qui manque à l'utilisateur`,`L'utilisateur doit fournir les informations manquantes avant de continuer`]}]},uf_step1:{title:`Étape 1 — Découverte`,color:`#2563eb`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Rôle`,items:[`L'agent pose des questions ciblées sur le projet`,`Fait émerger le problème central et les utilisateurs concernés`,`Max 2 questions à la fois — ne jamais surcharger`]},{heading:`Critères de sortie`,items:[`Problème formulé en 2–4 phrases`,`Utilisateur principal nommé`,`C'est bien un problème, pas une fonctionnalité`]}]},uf_step2:{title:`Étape 2 — Rédaction du brief`,color:`#4f46e5`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Ce qui se passe`,items:[`L'agent génère le brief complet depuis le contexte collecté`,`L'utilisateur révise et donne son retour`,`L'agent itère jusqu'à validation`,`La porte qualité est passée avant l'écriture sur disque`]},{heading:`Sortie`,items:[`Fichier Markdown dans docs/briefs/{project-name}.md`]}]},uf_step3:{title:`Étape 3 — Alignement`,color:`#6d28d9`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Ce qui se passe`,items:[`Révision du brief avec l'utilisateur`,`Itération jusqu'à confirmation`,`Une fois validé : suggestion de passer à Planning ou Orion`]},{heading:`Modes`,items:[`Chemin normal : Étape 1 → Étape 2 → Étape 3`,`Chemin rapide : brief existant chargé → Étape 3 directement`]}]}}}:{svgLabels:{start:`User request`,scratchpad_sub:`Current plan · Context`,ambigu:`Ambiguous?`,question_label:`User question`,question_sub:`tool: question`,bug_decision:`Bug report?`,certitude:`Certainty?`,agent_failure:`Agent failure?`,esc_uncertainty_label:`User escalation`,esc_retry_label:`Escalation`,esc_retry_sub:`2 retries exceeded`,esc_blocked_label:`Escalation`,end:`Report to user`,arrow_oui:`YES`,arrow_non:`NO`,arrow_gap_majeur:`Major gap`,arrow_gap_mineur:`Minor gap`,scratchpad_rw_label:`← read/write`,annot_delegate:`↳ Update scratchpad after each agent return`,annot_agents:`✎ after agent return`,agents_label:`Sub-agents`,annot_plan:`✎ scratchpad | planning agent if ambiguous`,annot_harness:`suggest to user — never launch without confirmation`,harness_arrow:`recurring pattern?`,harness_node_label:`Harness? (optional)`},details:{start:{title:`User request`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`Entry point`,items:[`User submits a request`,`team-lead analyzes the request type before acting`]}]},understand:{title:`1. Understand`,color:`#2563eb`,nodeType:`MAIN PHASE`,sections:[{heading:`Memory read`,items:[`.opencode/scratchpad.md — current work plan`]},{heading:`Lifecycle calls (mandatory at mission start)`,items:["`project_state()` — full view of exec-plans, specs, and briefs","`check_artifacts()` — cross-artifact consistency scan"]},{heading:`Lifecycle calls (throughout the workflow)`,items:["`mark_block_done()` — after each validated delivery","`complete_plan()` — when all blocks are done and final review is APPROVED","`register_spec()` — when a new spec needs to exist on disk"]},{heading:`Goal`,items:[`Parse the request (explicit vs implicit)`,`Identify ambiguity before planning`,`Check if a scope was in progress (scratchpad)`]}]},scratchpad:{title:`📄 scratchpad.md`,color:`#0ea5e9`,nodeType:`WORKING MEMORY`,sections:[{heading:`Role`,items:[`Working memory for current mission`,`Survives context compaction`,`Overwritten at each new mission`]},{heading:`When to read`,items:[`On startup — read mission state if it exists`]},{heading:`When to write (6 moments)`,items:[`Startup — goal + plan + initial decisions`,`Before delegation — sub-tasks, modified files, resume context`,`After agent return — synthesized key results`,`After review — task status + verdict`,`After each decision — record what was decided and why`,`End of mission — final capture before user report`]}]},ambigu:{title:`Ambiguous?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Decision`,items:["YES → ask questions via `question` tool → wait for answer → resume Understand",`NO → continue to Plan`]}]},question:{title:`User question`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Tool`,items:["`question` — blocks until user responds"]},{heading:`Rule`,items:[`Once the answer is received, resume from Understand to integrate the new information`]}]},plan:{title:`2. Plan`,color:`#4f46e5`,nodeType:`MAIN PHASE`,sections:[{heading:`Actions`,items:[`Create/update todo list → todowrite`,`Write plan + context in scratchpad`,`Identify required agents`,`Determine parallel vs sequential`]},{heading:`Exec-plans`,items:["Invoke `planning` agent if: ambiguous request + multi-session + AGENTS.md doesn't clarify",`Simple plan → inline in scratchpad`,`Exec-plan → file at docs/exec-plans/.md`,"When an exec-plan exists: scratchpad points to it — `See exec-plan: docs/exec-plans/.md`"]},{heading:`Lifecycle`,items:["`register_spec()` — when a new spec needs to exist on disk"]},{heading:`Rule`,items:[`One scope at a time — finish before moving to the next`,`Park secondary scopes in the scratchpad`]}]},delegate:{title:`3. Delegate`,color:`#7c3aed`,nodeType:`MAIN PHASE`,sections:[{heading:`Available agents`,items:["`explore` — read-only, codebase reconnaissance","`general` — implementation, writing, commands","Custom persona (`backend-engineer`, `react-specialist`…)"]},{heading:`Rules`,items:[`Independent tasks → spawn in parallel`,`Dependent tasks → sequential with context handoff`,`After each return → update scratchpad + compress`]}]},bug_decision:{title:`Bug report?`,color:`#be123c`,nodeType:`DECISION`,sections:[{heading:`Trigger bug-finder if`,items:[`Unexpected behavior / regression / crash / incorrect output`,`Something 'stopped working' with no obvious cause`,`A fix was applied but the problem persists or moved`]},{heading:`Do NOT trigger if`,items:[`Bug trivially locatable (user points to line + obvious typo) AND isolated fix → normal flow`]}]},bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Role`,items:[`Force root-cause analysis BEFORE any fix`,`Prevents workarounds and code divergence`]},{heading:`Verdicts`,items:["HIGH → direct fix via `general` with the analysis","MEDIUM → fix via `general` + report uncertainty to user",`UNCERTAINTY_EXPOSED → surface open questions to user before continuing`]}]},certitude:{title:`Certainty?`,color:`#be123c`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`HIGH / MEDIUM → join Agents flow with analysis in context`,`UNCERTAINTY_EXPOSED → user escalation, wait for answer before any fix`]}]},escalade_uncertainty:{title:`Escalation — UNCERTAINTY_EXPOSED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Message to user`,items:[`Present identified hypotheses and their probabilities`,`List the precise questions blocking the diagnosis`,`Do not propose a fix in this state`]}]},agents:{title:`Sub-agents`,color:`#6d28d9`,nodeType:`DELEGATION`,sections:[{heading:`Types`,items:["`explore` (native OpenCode) — read-only: search, glob, read","`general` (native OpenCode) — full access: read, write, bash","Custom persona — `backend-engineer`, `api-architect`…"]},{heading:`Context handoff`,items:[`Each agent starts from scratch — be explicit`,`Include modified files, decisions, interfaces`,`Parallel = multiple task calls in the same message`]}]},agent_failure:{title:`Agent failure?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Diagnostics`,items:[`Bad prompt → rephrase with more precision`,"Insufficient context → send `explore` first, retry with findings",`Task too large → break into sub-tasks`,`Tool error → check permissions and paths`]},{heading:`Rule`,items:[`Max 2 retries — always change something between attempts`,`If still failing after 2 attempts → user escalation`]}]},retry:{title:`↩ Retry (max 2)`,color:`#b45309`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Diagnose the cause of failure`,`Rephrase / decompose / enrich context`,`Relaunch the agent with the new prompt`]}]},escalade_retry:{title:`Escalation — 2 retries exceeded`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Message to user`,items:[`Describe what was attempted (2 attempts)`,`Explain the diagnosis of each failure`,`Propose options: rephrase the task, provide additional context`,`Never retry a 3rd time without explicit instruction`]}]},review:{title:`4. Review`,color:`#b45309`,nodeType:`MAIN PHASE`,sections:[{heading:`Absolute rule`,items:[`ALWAYS via review-manager — never a direct reviewer`,`Mandatory for any code, config, infra, security change`]},{heading:`Provide to review-manager`,items:[`Modified files + summary of changes`,`Original user requirements`,`Trade-offs and decisions made`,`What was explicitly out of scope`]},{heading:`Lifecycle`,items:["`mark_block_done()` — after each validated delivery","`complete_plan()` — when all blocks are done and final review is APPROVED"]}]},review_manager:{title:`review-manager`,color:`#92400e`,nodeType:`ORCHESTRATOR AGENT`,sections:[{heading:`Role`,items:[`Review orchestrator — never a direct reviewer`,`Spawns in parallel: code-reviewer, security-reviewer, requirements-reviewer`,`Synthesizes verdicts and arbitrates disagreements`]},{heading:`Skip authorized only if`,items:[`Docs-only change (no code modified)`,`No possible security impact`,`User explicitly requests speed`]}]},verdict:{title:`Review verdict?`,color:`#b45309`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`APPROVED → Synthesize & Report`,`CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)`,`BLOCKED → immediate user escalation, do not fix without user input`]}]},changes_loop:{title:`↩ Fix + re-review (max 2)`,color:`#b45309`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Send precise fixes back to the producer agent`,`Re-run through review-manager`,`Maximum 2 rounds total`]}]},escalade_blocked:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Strict rules`,items:[`Report the precise problem identified by the reviewer`,`Explain why it is blocking (not just a warning)`,`Propose NO fix in the escalation message`,`Wait for explicit instruction before continuing`]}]},synthesize:{title:`5. Synthesize & Report`,color:`#15803d`,nodeType:`MAIN PHASE`,sections:[{heading:`Self-evaluation`,items:[`Answers the real request (not the interpreted one)?`,`No contradiction between agent results?`,`Nothing missing in the deliverable?`]},{heading:`Memory update`,items:[`Clean up scratchpad (completed tasks)`]}]},autoeval:{title:`Self-eval OK?`,color:`#15803d`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`OK → final report to user`,`Minor gap (missing detail) → quick fix then report`,`Major gap (wrong approach) → back to Delegate`]}]},gap_majeur:{title:`↩ Back to Delegate`,color:`#166534`,nodeType:`LOOP`,sections:[{heading:`Treatment`,items:[`Treat the gap as a new task`,`Resume from Delegate phase`,`Update todo list and scratchpad before delegating`]}]},fix_rapide:{title:`Quick fix`,color:`#166534`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Fix the missing detail directly`,`No need to go through Review if the fix is trivial`,`Include in the final report`]}]},end:{title:`Report to user`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Delivery`,items:[`Concise summary of changes made`,`Any issues reported honestly`,`Suggested next steps if relevant`]}]},harness_suggest:{title:`Harness? (optional)`,color:`#166534`,nodeType:`POST-DELIVERY (OPTIONAL)`,sections:[{heading:`When to suggest`,items:[`A pattern has been explained multiple times to different agents`,`An architectural decision keeps getting violated`,`A convention is not yet enforced by lint or CI`]},{heading:`Rules`,items:[`Never without explicit user confirmation`,`Never at mission start — only post-delivery`,`Never on the critical path — always a final suggestion`,`Propose, never launch automatically`]}]},uf_start:{title:`Session Start`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`First action`,items:["Always scan `docs/briefs/` before anything else — no exceptions"]}]},uf_scan:{title:`Scan docs/briefs/`,color:`#6d28d9`,nodeType:`MANDATORY ACTION`,sections:[{heading:`Rule`,items:["Scan `docs/briefs/` regardless of how much context the user provided",`This is mandatory — there are no exceptions`]}]},uf_briefs_found:{title:`Brief(s) found?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`NONE → proceed to Phase 1 directly, no question asked`,`ONE → check status (draft / done / other)`,`MULTIPLE → list all briefs, ask which one or new project`]}]},uf_brief_status:{title:`Status: draft?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES (draft) → ask: continue editing or start fresh?`,`NO (done/other) → ask: revise this brief or start a new project?`]}]},uf_ask_continue:{title:`Continue or fresh?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Options`,items:[`CONTINUE → load brief, jump directly to Step 3 (revision mode)`,`FRESH → normal Step 1 flow`]}]},uf_ask_revise:{title:`Revise or new project?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Options`,items:[`REVISE → load brief, jump directly to Step 3 (revision mode)`,`NEW PROJECT → normal Step 1 flow`]}]},uf_load_brief:{title:`Load brief`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Reads the existing brief for revision mode`,`Jumps directly to Step 3 — skip Step 1 and Step 2`]},{heading:`Fast path`,items:[`If the user's opening message already provides sufficient context → offer to draft immediately (Step 3 direct)`]}]},uf_no_brief:{title:`No brief → Phase 1`,color:`#475569`,nodeType:`TRANSITION`,sections:[{heading:`Rule`,items:[`No question asked — proceed directly to Phase 1 (Understand + Plan)`,`Also the path when user chooses 'fresh start' or 'new project'`]}]},uf_multi_found:{title:`Multiple briefs found`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`List all briefs with path + status + project name`,`Ask: which one to work on? (or new project?)`,`Once chosen, follows the same logic as 'one brief found'`]}]},uf_brief_end:{title:`Brief written`,color:`#6d28d9`,nodeType:`PHASE 0 OUTPUT`,sections:[{heading:`Output`,items:["Brief saved to `docs/briefs/{project-name}.md`"]},{heading:`Hand-off`,items:[`Says: 'Hand it to Planning to break into an exec-plan, or to Orion if scope is already clear enough'`,`This is a verbal suggestion — NOT an automatic delegation`]}]},phase0_brief_check:{title:`Phase 0 — BRAINSTORM (optional)`,color:`#7c3aed`,nodeType:`MAIN PHASE`,sections:[{heading:`Entry`,items:["Scan `docs/briefs/` — always, no exceptions",`No brief → Phase 1 directly`,`Draft brief → ask: continue or fresh start?`,`Multiple briefs → list + choose`]},{heading:`Fast path`,items:[`If scope is already clear in the message → dashed arrow directly to Phase 1`,`Verbal suggestion only — never automatic delegation`]}]},phase0_run_brainstorm:{title:`Run brainstorm agent`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Agent brainstorm`,items:[`Step 1 — Discovery: surface the problem`,`Step 2 — Deep Dive: scope, criteria, constraints, risks`,`Step 3 — Draft + Validation: full brief, quality gate`]}]},phase0_produce_brief:{title:`Produce brief`,color:`#7c3aed`,nodeType:`PHASE 0 OUTPUT`,sections:[{heading:`Output`,items:["Brief written to `docs/briefs/{project-name}.md`"]},{heading:`Hand-off`,items:[`Verbal suggestion: hand to Planning or to Orion if scope is clear enough`]}]},phase1_read_sp:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`MAIN PHASE`,sections:[{heading:`Strict order (9 steps)`,items:["1. Read `.opencode/scratchpad.md`","2. Call `project_state()`","3. Call `check_artifacts()`",`4. Clarify intent (ambiguous? bug?)`,`5. Identify number of scopes`,`6. Choose plan type (inline or exec-plan)`,"7. Call `todowrite`",`8. Write/update scratchpad`,"9. `compress` before entering Phase 2"]}]},phase1_project_state:{title:`project_state() + check_artifacts()`,color:`#1d4ed8`,nodeType:`LIFECYCLE TOOLS`,sections:[{heading:`Mandatory at mission start`,items:["`project_state()` — full view of exec-plans, specs, briefs","`check_artifacts()` — cross-artifact consistency scan"]}]},phase1_clarify:{title:`Clarify intent → scope → plan type`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Decisions`,items:["Ambiguous? → ask via `question` tool",`Multiple scopes? → propose order, wait for agreement`,`Simple plan → inline in scratchpad`,"Complex task → invoke `planning` agent → exec-plan"]}]},phase1_todowrite:{title:`todowrite + write scratchpad`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Actions`,items:[`Create/update visible task list`,`Write goal, plan, decisions, open questions into scratchpad`]}]},phase1_compress:{title:`compress stale context`,color:`#1d4ed8`,nodeType:`CONTEXT MANAGEMENT`,sections:[{heading:`DCP tools`,items:["`distill` — summarize long outputs","`prune` — cut exploratory outputs already distilled","`compress` — clean context before Phase 2"]}]},phase2_bug:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`MAIN PHASE`,sections:[{heading:`Agent selection hierarchy`,items:[`1. User-defined agents (files in agent/)`,`2. Named plugin agents (bug-finder, review-manager…)`,"3. `explore` — read-only, faster","4. `general` + persona — fallback only"]},{heading:`Delegation cycle`,items:[`Update scratchpad before delegating`,"Delegate via `task`",`Success → update scratchpad, distill, mark_block_done`,`Failure → diagnose then retry ≤2, else escalate`]}]},phase2_bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Role`,items:[`Force root-cause analysis BEFORE any fix`]},{heading:`Verdicts`,items:["HIGH → fix via `general`",`MEDIUM → fix + report uncertainty`,`UNCERTAINTY_EXPOSED → stop, user escalation`]}]},phase2_select_agent:{title:`Select agent (hierarchy)`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Rule`,items:[`User-defined > plugin named > explore > general+persona`,"If `explore` or `general` suffice → don't invent a persona"]}]},phase2_handoff:{title:`Context handoff A→B`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Self-sufficient prompt`,items:[`Include file paths, constraints, expected output`,`Sequential agents: extract essentials from A, give B what changed/decided/discovered`,"Parallel = multiple `task` calls in the same message"]}]},phase2_success:{title:`Agent success?`,color:`#15803d`,nodeType:`DECISION`,sections:[{heading:`On failure`,items:[`Bad prompt → reformulate`,`Context overflow → decompose`,`Missing info → enrich (explore first)`,`Wrong persona → change`,`Fundamental block → escalate`]},{heading:`Rule`,items:[`Max 2 retries (all types combined) → user escalation`]}]},phase2_retry:{title:`retry ≤2`,color:`#d97706`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Diagnose the cause`,`Reformulate / decompose / enrich / change persona`,`Always change something between attempts`]}]},phase2_esc_user:{title:`Escalate to user`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Rules`,items:[`Describe the 2 attempts made`,`Explain diagnosis of each failure`,`Propose options: rephrase, provide context`,`Never retry a 3rd time without instruction`]}]},phase3_delegate_rm:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`MAIN PHASE`,sections:[{heading:`Absolute rule`,items:[`ALWAYS via review-manager — never a direct reviewer`]},{heading:`Provide to review-manager`,items:[`Modified files + summary of changes`,`Original user requirements`,`Trade-offs and decisions made`,`What was explicitly out of scope`]},{heading:`Fresh start vs Resume`,items:[`Fresh (no task_id) for new reviews`,`Resume (task_id) for corrections after CHANGES_REQUESTED`]}]},phase3_verdict:{title:`Verdict?`,color:`#b45309`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`APPROVED → Phase 4 (Synthesize)`,`CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)`,`BLOCKED → immediate escalation, do not fix without user input`]}]},phase3_resume_fix:{title:`Resume producer → fix`,color:`#d97706`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Send precise fixes back to producer agent (resume, task_id)`,`Re-run through review-manager`,`Maximum 2 rounds total`]}]},phase3_blocked_esc:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Strict rules`,items:[`Report the precise problem identified by the reviewer`,`Explain why it is blocking`,`Propose NO fix in the escalation message`,`Wait for explicit instruction before continuing`]}]},phase4_self_eval:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`MAIN PHASE`,sections:[{heading:`Self-evaluation (mandatory before reporting)`,items:[`1. Does the result fully answer the original request?`,`2. Are multi-agent outputs coherent?`,`3. Does anything nag about correctness or side effects?`]},{heading:`Gap types`,items:[`Minor gap → quick fix then report`,`Major gap → loop back to Phase 2 (Delegate)`,`Scope confusion → ask user before delivering`]}]},phase4_gap:{title:`Gap type?`,color:`#4338ca`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`OK → final report`,`Minor → quick fix → sp_capture`,`Major → back to Phase 2 (dashed loop)`,`Scope → ask user`]}]},phase4_minor:{title:`Minor gap → quick fix`,color:`#d97706`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Fix the missing detail directly`,`No need to go through Review if trivial`,`Include in the final report`]}]},phase4_scope:{title:`Scope confusion → ask user`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Do not deliver a wrong answer`,`Ask the precise question before continuing`]}]},phase4_sp_capture:{title:`Final scratchpad capture`,color:`#4338ca`,nodeType:`ACTION`,sections:[{heading:`Before reporting`,items:[`Mark mission as complete in the scratchpad`,`Do not delete it (user might return)`,"`## Plan` — all task statuses final","`## Decisions` — any last decisions recorded"]}]},phase4_report:{title:`Report (human-tone)`,color:`#4338ca`,nodeType:`DELIVERY`,sections:[{heading:`Communication rules`,items:[`Lead with the outcome, not the process`,`Highlight what succeeded and what failed`,`Be honest about issues — don't sugarcoat agent failures`,`Propose concrete next steps if applicable`]}]},phase5_pattern:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`MAIN PHASE`,sections:[{heading:`Two independent paths`,items:[`Path A — Harness: encode pattern as mechanical artifact (lint, CI, AGENTS.md)`,`Path B — Gardener: fix stale docs + detect code drift`]},{heading:`Rules`,items:[`Never without explicit user confirmation`,`Never at mission start — only post-delivery`]}]},phase5_harness:{title:`Harness`,color:`#15803d`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`When to suggest`,items:[`A pattern explained multiple times to sub-agents`,`An architectural decision that keeps getting violated`,`A convention not yet enforced by lint or CI`]},{heading:`What harness produces`,items:[`Code convention → custom lint rule (ESLint, Ruff…)`,`Build/deploy constraint → CI job`,`Agent rule → AGENTS.md entry`,`Non-mechanizable principle → docs/guiding-principles.md entry`]}]},phase5_gardener:{title:`Gardener`,color:`#475569`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Function 1 — Doc-Gardening`,items:[`Detects stale references, outdated descriptions, broken links`,`Fixes stale content, opens one PR per document`]},{heading:`Function 2 — Code-GC`,items:[`One-time drift → targeted refactoring PR`,`Recurring pattern → escalate to Harness`]}]},phase5_recurring:{title:`Recurring pattern?`,color:`#475569`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES → escalate to Harness (confirmation required)`,`NO → targeted PR only`]}]},phase5_esc_harness:{title:`Escalate to Harness`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Process`,items:[`Gardener checks with Orion / user before triggering Harness`,`Harness proceeds directly once invoked — does not re-ask`]}]},phase_start:{title:`User request`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`Entry point`,items:[`User submits a request`,`Orion scans existing briefs first before any other action`]}]},phase_end:{title:`Report to user`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Delivery`,items:[`Concise summary of changes made`,`Any issues reported honestly`,`Suggested next steps if relevant`]}]},phase0:{title:`Phase 0 — BRAINSTORM (optional)`,color:`#7c3aed`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Discovery phase. Runs when the request is vague or a new project is starting.`,`Produces a product brief at docs/briefs/{project-name}.md.`,`Optional — if brief already exists or scope is clear, fast-path to Phase 1.`]}]},phase1:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Strict 9-step planning sequence.`,`Read scratchpad → lifecycle tools → clarify → scope → plan type → todowrite → write scratchpad → compress.`]}]},phase2:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Select agents (strict hierarchy), delegate via task, handle failures with retry ≤2.`,`Bug reports always go to bug-finder first.`]}]},phase3:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Always via review-manager (never direct reviewers).`,`APPROVED → Phase 4, CHANGES_REQUESTED → re-delegate (max 2 rounds), BLOCKED → escalate.`]}]},phase4:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Self-eval (3 questions) → gap handling → final scratchpad capture → human-tone report.`]}]},phase5:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Post-delivery, optional. Two paths: Harness (pattern enforcement) and Gardener (doc/code drift detection).`]}]}},brainstormSvgLabels:{bs_start:`Session Start`,bs_existing_check:`Existing briefs?`,bs_single_found:`One brief found`,bs_multi_found:`Multiple found`,bs_status_check:`Status = draft?`,bs_ask_continue:`Continue or fresh?`,bs_load_brief:`Load brief`,bs_phase1:`Step 1 — Discovery`,bs_problem_clear:`Problem clear?`,bs_phase2:`Step 2 — Deep Dive`,bs_adversarial:`Adversarial Gate`,bs_template_fillable:`All sections fillable?`,bs_phase3:`Step 3 — Draft + Validate`,bs_quality_gate:`Quality Gate`,bs_quality_passed:`Quality gate passed?`,bs_file_exists:`File already exists?`,bs_file_conflict:`Overwrite / version / rename?`,bs_write:`Write file`,bs_end:`Brief written. Hand to Planning or Orion.`,bs_arrow_yes:`YES`,bs_arrow_no:`NO`,bs_arrow_one:`ONE`,bs_arrow_multiple:`MULTIPLE`,bs_arrow_none:`NONE`,bs_arrow_draft:`DRAFT`,bs_arrow_done:`DONE`,bs_arrow_continue:`CONTINUE`,bs_arrow_fresh:`FRESH`,bs_arrow_choose:`CHOOSE EXISTING`,bs_arrow_new:`NEW PROJECT`,bs_arrow_all_fillable:`YES`,bs_arrow_missing:`NO`,bs_arrow_passed:`PASSED`,bs_arrow_tier2:`TIER 2`,bs_arrow_blocked:`BLOCKED`,bs_esc_blocked_label:`Escalation`,bs_esc_blocked_sub:`BLOCKED`,bs_arrow_overwrite:`OVERWRITE`,bs_arrow_version:`NEW VERSION`,bs_arrow_rename:`RENAME`},brainstormDetails:{bs_start:{title:`Session Start`,color:`#0d9488`,nodeType:`ENTRY POINT`,sections:[{heading:`What happens`,items:[`Session is initiated with brainstorm agent`,"Scans `docs/briefs/` for existing briefs",`Routing decision made before any questions are asked`]}]},bs_existing_check:{title:`Existing briefs found?`,color:`#0d9488`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`NO → Flow normal → Step 1 (Discovery)`,`ONE found → check status (draft / done)`,`MULTIPLE found → list briefs, ask which one or new project`]}]},bs_single_found:{title:`One brief found`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Single brief located at docs/briefs/`,`Agent checks the status field in the brief frontmatter`,`Routes to status decision`]}]},bs_multi_found:{title:`Multiple briefs found`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent lists all found briefs to the user`,`Asks: which one to resume, or start a new project?`,`CHOOSE EXISTING → Load brief → Step 3 (revision)`,`NEW PROJECT → Flow normal → Step 1`]}]},bs_status_check:{title:`Status = draft?`,color:`#0891b2`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES (draft) → Ask: continue or fresh start?`,`NO (done/other) → Inform user, ask new project name → Step 1`]}]},bs_ask_continue:{title:`Continue or fresh start?`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`User is shown the existing draft brief summary`,`Asked: resume from where we left off, or start fresh?`,`CONTINUE → Load brief → jump directly to Step 3 (revision)`,`FRESH → Ignore existing brief → Step 1 (Discovery)`]}]},bs_load_brief:{title:`Load brief`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent reads the existing brief file from docs/briefs/`,`Provides full context to Step 3 (revision mode)`,`User can iterate on the existing content rather than restarting`]}]},bs_phase1:{title:`Step 1 — Discovery`,color:`#2563eb`,nodeType:`MAIN STEP`,sections:[{heading:`Core question`,items:[`"What problem are you trying to solve, and who experiences it?"`]},{heading:`Rules`,items:[`Max 2 questions at a time — never overwhelm`,`Surface the problem, not the solution`,`Do not accept vague answers — push for specifics`,`Iterate until problem is stated clearly`]},{heading:`Exit criteria`,items:[`Problem stated in 2–4 sentences`,`Primary user named`,`Problem is a problem, not a feature`]}]},bs_problem_clear:{title:`Problem clear?`,color:`#2563eb`,nodeType:`DECISION`,sections:[{heading:`Exit criteria`,items:[`YES → problem stated in 2–4 clear sentences AND primary user named → Step 2`,`NO → iterate — ask more targeted follow-up questions`]}]},bs_phase2:{title:`Step 2 — Deep Dive`,color:`#4f46e5`,nodeType:`MAIN STEP`,sections:[{heading:`Topics to cover`,items:[`Scope and boundaries — what is explicitly out of scope?`,`Success criteria — how will you know it worked?`,`Use cases — top 3–5 concrete scenarios`,`Constraints — technical, time, team, budget`,`Rejected ideas — what was considered and discarded?`]},{heading:`Socratic pressure`,items:[`Challenge assumptions — "Why is X the right approach?"`,`Ask about failure modes — "What would make this fail?"`,`Probe edges — "What happens when Y doesn't work?"`]}]},bs_adversarial:{title:`Adversarial Gate`,color:`#7c3aed`,nodeType:`GATE`,sections:[{heading:`Two mandatory questions`,items:[`"What is the strongest case against building this?"`,`"What would have to be true for this to fail in year 1?"`]},{heading:`Purpose`,items:[`Forces the user to articulate real risks`,`Prevents over-optimistic briefs that skip failure modes`,`If user can't answer, the problem statement needs more work`]}]},bs_template_fillable:{title:`All template sections fillable?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES → proceed to Step 3 (draft + validation)`,`NO → iterate back in Step 2 — identify which sections are still empty`]},{heading:`Template sections required`,items:[`Problem statement`,`Primary user`,`Success criteria`,`Top use cases`,`Constraints`,`Out of scope`,`Risks / adversarial answers`]}]},bs_phase3:{title:`Step 3 — Draft + Validation`,color:`#6d28d9`,nodeType:`MAIN STEP`,sections:[{heading:`What happens`,items:[`Agent generates the full brief inline from collected context`,`User reviews the draft and provides feedback`,`Agent iterates until user confirms the brief is ready`,`Quality gate is run before writing to disk`]},{heading:`Output format`,items:[`Markdown file at docs/briefs/{project-name}.md`,`Structured sections: problem, users, success criteria, use cases, constraints, risks`]}]},bs_quality_gate:{title:`Quality Gate`,color:`#6d28d9`,nodeType:`GATE`,sections:[{heading:`Tier 1 — auto-fix silently`,items:[`Minor formatting issues`,`Incomplete sentences that can be inferred`,`Missing punctuation or capitalization`]},{heading:`Tier 2 — ask user via question tool`,items:[`Ambiguous success criteria`,`Conflicting constraints`,`Vague scope boundaries`]},{heading:`BLOCKED — escalate immediately`,items:[`No problem statement at all`,`No success criteria`,`Empty scope — can't determine what to build`]}]},bs_quality_passed:{title:`Quality gate passed?`,color:`#6d28d9`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`PASSED → proceed to file write check`,`TIER 2 issues → ask user → resolve → re-run gate`,`BLOCKED (no problem, no success criteria, empty scope) → STOP — escalate to user, do not write`]}]},bs_file_exists:{title:`File already exists?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Check`,items:[`Agent checks if docs/briefs/{project-name}.md already exists on disk`]},{heading:`Branches`,items:[`NO → write directly`,`YES → ask user: overwrite, new version, or rename?`]}]},bs_file_conflict:{title:`Overwrite / new version / rename?`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Options`,items:[`OVERWRITE → replace existing file with new brief`,`NEW VERSION → write as {name}-v2.md (or -v3, etc.)`,`RENAME → write with a custom filename provided by the user`]}]},bs_write:{title:`Write file`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent writes the validated brief to docs/briefs/{project-name}.md`,`File is created or overwritten depending on the conflict resolution choice`,`Brief is ready for Planning or Orion to consume`]}]},bs_end:{title:`Brief written`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Handoff`,items:[`Brief written to docs/briefs/{project-name}.md`,`Hand to Planning agent for execution plan`,`Or hand to Orion (team-lead) directly for implementation`]}]},bs_esc_blocked:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`When this triggers`,items:[`No problem statement at all`,`No success criteria defined`,`Scope is empty — cannot determine what to build`]},{heading:`What happens`,items:[`Agent stops immediately — does not write the brief`,`Reports precisely what is missing to the user`,`User must provide the missing information before continuing`]}]},uf_step1:{title:`Step 1 — Discovery`,color:`#2563eb`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`Role`,items:[`Agent asks targeted questions about the project`,`Surfaces the core problem and the affected users`,`Max 2 questions at a time — never overwhelm`]},{heading:`Exit criteria`,items:[`Problem stated in 2–4 sentences`,`Primary user named`,`Problem is a problem, not a feature`]}]},uf_step2:{title:`Step 2 — Brief draft`,color:`#4f46e5`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`What happens`,items:[`Agent generates the full brief inline from collected context`,`User reviews and provides feedback`,`Agent iterates until validated`,`Quality gate is run before writing to disk`]},{heading:`Output`,items:[`Markdown file at docs/briefs/{project-name}.md`]}]},uf_step3:{title:`Step 3 — Alignment`,color:`#6d28d9`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`What happens`,items:[`Brief is reviewed with the user`,`Iteration until confirmation`,`Once validated: suggest handing off to Planning or Orion`]},{heading:`Modes`,items:[`Normal path: Step 1 → Step 2 → Step 3`,`Fast path: existing brief loaded → Step 3 directly`]}]}},unifiedSvgLabels:{uf_start:`Session start`,uf_scan:`Scan docs/briefs/`,uf_scan_sub:`(always — mandatory)`,uf_briefs_found:`Brief(s) found?`,uf_no_brief:`No brief → Phase 1`,uf_brief_status:`Status: draft?`,uf_ask_continue:`Continue or fresh?`,uf_ask_revise:`Revise or new project?`,uf_load_brief:`Load brief`,uf_multi_found:`Multiple briefs → list + choose`,uf_brief_end:`Brief written`,uf_brief_end_sub:`suggest Planning or Orion`,uf_phase0_label:`Phase 0 — BRAINSTORM (optional)`,uf_placeholder_label:`Phase 1–5 (coming next)`,uf_step1_label:`Step 1 — Discovery`,uf_step2_label:`Step 2 — Brief draft`,uf_step3_label:`Step 3 — Alignment`,uf_expand_hint:`Show steps`,uf_collapse_hint:`Hide steps`,uf_arrow_none:`NONE`,uf_arrow_one:`ONE`,uf_arrow_multiple:`MULTIPLE`,uf_arrow_draft:`DRAFT`,uf_arrow_done:`DONE`,uf_arrow_continue:`CONTINUE`,uf_arrow_fresh:`FRESH`,uf_arrow_revise:`REVISE`,uf_arrow_new_project:`NEW PROJECT`,uf_arrow_phase3:`→ Step 3`}}}function q1e(e){let t=e===`en`,n={start:t?`User request`:`Requête utilisateur`,p0_label:t?`Phase 0 — BRAINSTORM optional`:`Phase 0 — BRAINSTORM optionnel`,p1_label:`Phase 1 — PLAN`,p2_label:`Phase 2 — DELEGATE`,p3_label:`Phase 3 — REVIEW`,p4_label:`Phase 4 — SYNTHESIZE`,p5_label:`Phase 5 — MAINTENANCE`,brief_check:t?`Brief exist?`:`Brief existe ?`,yes:t?`YES`:`OUI`,no:t?`NO`:`NON`,fast_path:t?`fast path`:`chemin rapide`,run_brainstorm:t?`Run brainstorm agent`:`Lancer agent brainstorm`,produce_brief:t?`Produce brief`:`Produire le brief`,read_sp:t?`Read scratchpad`:`Lire scratchpad`,project_state:`project_state + check_artifacts`,clarify:t?`Clarify intent scope plan`:`Clarifier intention scope plan`,todowrite:t?`todowrite + write scratchpad`:`todowrite + scratchpad`,compress:t?`compress stale context`:`compress contexte obsolète`,bug_q:t?`Bug report?`:`Bug report ?`,bug_finder:`bug-finder first`,select_agent:t?`Select agent hierarchy`:`Sélectionner agent`,handoff:`Context handoff A to B`,success_q:t?`Agent success?`:`Succès agent ?`,retry:`retry max 2`,esc_user:t?`Escalate to user`:`Escalade utilisateur`,delegate_rm:t?`Delegate to review-manager`:`Déléguer review-manager`,verdict_q:t?`Verdict?`:`Verdict ?`,approved:`APPROVED`,changes:`CHANGES_REQUESTED`,blocked:`BLOCKED`,resume_fix:t?`Resume producer fix`:`Reprendre producteur fix`,self_eval:t?`Self-eval 3 questions`:`Auto-eval 3 questions`,gap_q:t?`Gap type?`:`Type gap ?`,minor_gap:t?`minor gap quick fix`:`gap mineur fix rapide`,scope_conf:t?`scope confusion ask user`:`confusion scope demander user`,major:t?`major gap`:`gap majeur`,sp_capture:t?`Final scratchpad capture`:`Capture finale scratchpad`,report_human:t?`Report human-tone`:`Rapport human-tone`,pattern_q:t?`Pattern type?`:`Type pattern ?`,harness:`Harness lint CI AGENTS`,gardener:t?`Gardener stale docs code GC`:`Gardener docs obsolètes code GC`,recurring_q:t?`Recurring pattern?`:`Pattern récurrent ?`,esc_harness:t?`Escalate to Harness`:`Escalader vers Harness`,end:t?`Report to user`:`Rapport à l'utilisateur`,enforcement:t?`needs enforcement`:`enforcement requis`,docs_drift:t?`docs / drift`:`docs / dérive`};return`flowchart TD +`;function K1e(e){return e===`fr`?{svgLabels:{start:`Requête utilisateur`,scratchpad_sub:`Plan courant · Contexte`,ambigu:`Ambigu ?`,question_label:`Question util.`,question_sub:`outil: question`,bug_decision:`Bug report ?`,certitude:`Certitude ?`,agent_failure:`Échec agent ?`,esc_uncertainty_label:`Escalade utilisateur`,esc_retry_label:`Escalade util.`,esc_retry_sub:`2 retries dépassés`,esc_blocked_label:`Escalade util.`,end:`Rapport à l'utilisateur`,arrow_oui:`OUI`,arrow_non:`NON`,arrow_gap_majeur:`Gap majeur`,arrow_gap_mineur:`Gap mineur`,scratchpad_rw_label:`← lire/écrire`,annot_delegate:`↳ MAJ scratchpad après chaque retour d'agent`,annot_agents:`✎ après retour d'agent`,agents_label:`Sous-agents`,annot_plan:`✎ scratchpad | planning si ambigu`,annot_harness:`suggérer à l'utilisateur — jamais sans confirmation`,harness_arrow:`pattern récurrent ?`,harness_node_label:`Harness ? (optionnel)`},details:{start:{title:`Requête utilisateur`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Point d'entrée`,items:[`L'utilisateur soumet une demande`,`Le team-lead analyse le type de requête avant d'agir`]}]},understand:{title:`1. Understand`,color:`#2563eb`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Lecture mémoire`,items:[`.opencode/scratchpad.md — plan de travail courant`]},{heading:`Appels lifecycle (obligatoires au démarrage)`,items:["`project_state()` — vue complète des exec-plans, specs et briefs","`check_artifacts()` — scan de cohérence inter-artefacts"]},{heading:`Appels lifecycle (tout au long du workflow)`,items:["`mark_block_done()` — après chaque livraison validée","`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED","`register_spec()` — quand une nouvelle spec doit exister sur disque"]},{heading:`Objectif`,items:[`Parser la requête (explicite vs implicite)`,`Identifier si ambigu avant de planifier`,`Vérifier si un scope était en cours (scratchpad)`]}]},scratchpad:{title:`📄 scratchpad.md`,color:`#0ea5e9`,nodeType:`MÉMOIRE DE TRAVAIL`,sections:[{heading:`Rôle`,items:[`Mémoire de travail mission courante`,`Survit à la compaction de contexte`,`Écrasé à chaque nouvelle mission`]},{heading:`Quand lire`,items:[`Au démarrage — lire l'état de la mission si elle existe`]},{heading:`Quand écrire (6 moments)`,items:[`Démarrage — objectif + plan + décisions initiales`,`Avant délégation — sous-tâches, fichiers modifiés, contexte de reprise`,`Après retour d'agent — résultats clés synthétisés`,`Après review — statut des tâches + verdict`,`Après chaque décision — noter ce qui a été décidé et pourquoi`,`Fin de mission — capture finale avant rapport utilisateur`]}]},ambigu:{title:`Ambigu ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Décision`,items:["OUI → poser des questions via outil `question` → attendre réponse → reprendre Understand",`NON → continuer vers Plan`]}]},question:{title:`Question utilisateur`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Outil`,items:["`question` — bloque jusqu'à réponse de l'utilisateur"]},{heading:`Règle`,items:[`Une fois la réponse reçue, reprendre depuis Understand pour intégrer les nouvelles informations`]}]},plan:{title:`2. Plan`,color:`#4f46e5`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Actions`,items:[`Créer/MAJ todolist → todowrite`,`Écrire plan + contexte dans scratchpad`,`Identifier les agents nécessaires`,`Déterminer parallèle vs séquentiel`]},{heading:`Exec-plans`,items:["Invoquer l'agent `planning` si : requête ambiguë + multi-sessions + AGENTS.md ne clarifie pas",`Plan simple → inline dans le scratchpad`,`Exec-plan → fichier dans docs/exec-plans/.md`,"Quand un exec-plan existe : scratchpad pointe vers lui — `See exec-plan: docs/exec-plans/.md`"]},{heading:`Lifecycle`,items:["`register_spec()` — quand une nouvelle spec doit exister sur disque"]},{heading:`Règle`,items:[`Un seul scope à la fois — finir avant de passer au suivant`,`Parquer les scopes secondaires dans le scratchpad`]}]},delegate:{title:`3. Delegate`,color:`#7c3aed`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Agents disponibles`,items:["`explore` — read-only, reconnaissance codebase","`general` — implémentation, écriture, commandes","Custom persona (`backend-engineer`, `react-specialist`…)"]},{heading:`Règles`,items:[`Tâches indépendantes → spawner en parallèle`,`Tâches dépendantes → séquentiel avec handoff de contexte`,`Après chaque retour → MAJ scratchpad + compress`]}]},bug_decision:{title:`Bug report ?`,color:`#be123c`,nodeType:`DÉCISION`,sections:[{heading:`Déclencher bug-finder si`,items:[`Comportement inattendu / régression / crash / sortie incorrecte`,`Quelque chose « a arrêté de fonctionner » sans cause évidente`,`Un fix a été appliqué mais le problème persiste ou s'est déplacé`]},{heading:`Ne PAS déclencher si`,items:[`Bug trivialement localisable (utilisateur pointe la ligne + typo évidente) ET fix isolé → flow normal`]}]},bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Rôle`,items:[`Forcer l'analyse root-cause AVANT tout fix`,`Empêche les workarounds et la divergence de code`]},{heading:`Verdicts`,items:["HIGH → fix direct via `general` avec l'analyse","MEDIUM → fix via `general` + signaler l'incertitude à l'utilisateur",`UNCERTAINTY_EXPOSED → remonter les questions ouvertes à l'utilisateur avant de continuer`]}]},certitude:{title:`Certitude ?`,color:`#be123c`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`HIGH / MEDIUM → rejoindre le flow Agents avec l'analyse en contexte`,`UNCERTAINTY_EXPOSED → escalade utilisateur, attendre réponse avant tout fix`]}]},escalade_uncertainty:{title:`Escalade — UNCERTAINTY_EXPOSED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Message à l'utilisateur`,items:[`Présenter les hypothèses identifiées et leurs probabilités`,`Lister les questions précises qui bloquent le diagnostic`,`Ne pas proposer de fix dans cet état`]}]},agents:{title:`Sous-agents`,color:`#6d28d9`,nodeType:`DÉLÉGATION`,sections:[{heading:`Types`,items:["`explore` (natif OpenCode) — lecture seule : recherche, glob, lecture","`general` (natif OpenCode) — accès complet : lecture, écriture, bash","Custom persona — `backend-engineer`, `api-architect`…"]},{heading:`Contexte handoff`,items:[`Chaque agent repart de zéro — être explicite`,`Inclure fichiers modifiés, décisions, interfaces`,`Parallèle = plusieurs task calls dans le même message`]}]},agent_failure:{title:`Échec agent ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Diagnostics`,items:[`Mauvais prompt → reformuler avec plus de précision`,"Contexte insuffisant → envoyer `explore` d'abord, retry avec findings",`Tâche trop grande → décomposer en sous-tâches`,`Erreur outil → vérifier permissions et chemins`]},{heading:`Règle`,items:[`Max 2 retries — toujours changer quelque chose entre les tentatives`,`Si toujours KO après 2 tentatives → escalade utilisateur`]}]},retry:{title:`↩ Retry (max 2)`,color:`#b45309`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Diagnostiquer la cause de l'échec`,`Reformuler / décomposer / enrichir le contexte`,`Relancer l'agent avec le nouveau prompt`]}]},escalade_retry:{title:`Escalade — 2 retries dépassés`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Message à l'utilisateur`,items:[`Décrire ce qui a été tenté (2 tentatives)`,`Expliquer le diagnostic de chaque échec`,`Proposer des options : reformuler la tâche, fournir du contexte supplémentaire`,`Ne jamais retenter une 3e fois sans instruction explicite`]}]},review:{title:`4. Review`,color:`#b45309`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Règle absolue`,items:[`TOUJOURS via review-manager — jamais de reviewer direct`,`Obligatoire pour tout changement code, config, infra, sécurité`]},{heading:`Fournir au review-manager`,items:[`Fichiers modifiés + résumé des changements`,`Exigences originales de l'utilisateur`,`Trade-offs et décisions effectuées`,`Ce qui était explicitement hors scope`]},{heading:`Lifecycle`,items:["`mark_block_done()` — après chaque livraison validée","`complete_plan()` — quand tous les blocs sont terminés et la review APPROVED"]}]},review_manager:{title:`review-manager`,color:`#92400e`,nodeType:`AGENT ORCHESTRATEUR`,sections:[{heading:`Rôle`,items:[`Orchestrateur de review — jamais reviewer direct`,`Spawne en parallèle : code-reviewer, security-reviewer, requirements-reviewer`,`Synthétise les verdicts et arbitre les désaccords`]},{heading:`Skip autorisé uniquement si`,items:[`Changement docs-only (aucun code modifié)`,`Aucun impact sécurité possible`,`L'utilisateur demande explicitement la vitesse`]}]},verdict:{title:`Verdict review ?`,color:`#b45309`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`APPROVED → Synthesize & Report`,`CHANGES_REQUESTED → re-déléguer fixes au producteur → re-review (max 2 rounds)`,`BLOCKED → escalade immédiate à l'utilisateur, ne pas corriger sans input user`]}]},changes_loop:{title:`↩ Fix + re-review (max 2)`,color:`#b45309`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Renvoyer les fixes précis à l'agent producteur`,`Re-passer par le review-manager`,`Maximum 2 rounds au total`]}]},escalade_blocked:{title:`Escalade — BLOCKED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles strictes`,items:[`Signaler le problème précis identifié par le reviewer`,`Expliquer pourquoi c'est bloquant (pas juste un warning)`,`Ne proposer AUCUN fix dans le message d'escalade`,`Attendre une instruction explicite avant de continuer`]}]},synthesize:{title:`5. Synthesize & Report`,color:`#15803d`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Auto-évaluation`,items:[`Répond à la vraie demande (pas l'interprétée) ?`,`Pas de contradiction entre résultats d'agents ?`,`Rien de manquant dans la livraison ?`]},{heading:`MAJ mémoire`,items:[`Nettoyer le scratchpad (tâches terminées)`]}]},autoeval:{title:`Auto-éval OK ?`,color:`#15803d`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OK → rapport final à l'utilisateur`,`Gap mineur (détail manquant) → fix rapide puis rapport`,`Gap majeur (mauvaise approche) → retour Delegate`]}]},gap_majeur:{title:`↩ Retour Delegate`,color:`#166534`,nodeType:`BOUCLE`,sections:[{heading:`Traitement`,items:[`Traiter le gap comme une nouvelle tâche`,`Reprendre depuis la phase Delegate`,`MAJ todolist et scratchpad avant de déléguer`]}]},fix_rapide:{title:`Fix rapide`,color:`#166534`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Corriger le détail manquant directement`,`Pas besoin de repasser par Review si le fix est trivial`,`Inclure dans le rapport final`]}]},end:{title:`Rapport à l'utilisateur`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Livraison`,items:[`Résumé concis des changements effectués`,`Problèmes éventuels signalés honnêtement`,`Prochaines étapes proposées si pertinent`]}]},harness_suggest:{title:`Harness ? (optionnel)`,color:`#166534`,nodeType:`POST-LIVRAISON (OPTIONNEL)`,sections:[{heading:`Quand suggérer`,items:[`Un pattern a été expliqué plusieurs fois à différents agents`,`Une décision architecturale est régulièrement violée`,`Une convention n'est pas encore enforced par lint ou CI`]},{heading:`Règles`,items:[`Jamais sans confirmation explicite de l'utilisateur`,`Jamais au démarrage de mission — uniquement post-livraison`,`Jamais sur le chemin critique — toujours en suggestion finale`,`Proposer, ne jamais lancer automatiquement`]}]},uf_start:{title:`Démarrage de session`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Première action`,items:["Toujours scanner `docs/briefs/` avant toute autre chose — sans exception"]}]},uf_scan:{title:`Scanne docs/briefs/`,color:`#6d28d9`,nodeType:`ACTION OBLIGATOIRE`,sections:[{heading:`Règle`,items:["Chercher les briefs existants dans `docs/briefs/` quelle que soit la quantité de contexte fournie par l'utilisateur",`C'est obligatoire — il n'y a pas d'exception`]}]},uf_briefs_found:{title:`Brief(s) trouvé(s) ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`AUCUN → passer directement à la Phase 1, sans question`,`UN SEUL → vérifier le statut (draft / done / autre)`,`PLUSIEURS → lister tous les briefs, demander lequel ou nouveau projet`]}]},uf_brief_status:{title:`Statut : draft ?`,color:`#64748b`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI (draft) → demander : continuer l'édition ou repartir de zéro ?`,`NON (done/autre) → demander : réviser ce brief ou démarrer un nouveau projet ?`]}]},uf_ask_continue:{title:`Continuer ou repartir ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Options`,items:[`CONTINUER → charger le brief, sauter directement à l'Étape 3 (mode révision)`,`REPARTIR → flux Étape 1 normal`]}]},uf_ask_revise:{title:`Réviser ou nouveau projet ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Options`,items:[`RÉVISER → charger le brief, sauter directement à l'Étape 3 (mode révision)`,`NOUVEAU PROJET → flux Étape 1 normal`]}]},uf_load_brief:{title:`Charger le brief`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Lit le brief existant pour le mode révision`,`Saute directement à l'Étape 3 — ignorer les Étapes 1 et 2`]},{heading:`Chemin rapide`,items:[`Si le message d'ouverture de l'utilisateur fournit suffisamment de contexte → proposer de rédiger immédiatement (Étape 3 directe)`]}]},uf_no_brief:{title:`Pas de brief → Phase 1`,color:`#475569`,nodeType:`TRANSITION`,sections:[{heading:`Règle`,items:[`Pas de question posée — passer directement à la Phase 1 (Understand + Plan)`,`C'est aussi le chemin quand l'utilisateur choisit 'repartir de zéro' ou 'nouveau projet'`]}]},uf_multi_found:{title:`Plusieurs briefs trouvés`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Lister tous les briefs avec chemin + statut + nom du projet`,`Demander : lequel traiter ? (ou nouveau projet ?)`,`Une fois choisi, suit la même logique que 'un seul brief trouvé'`]}]},uf_brief_end:{title:`Brief écrit`,color:`#6d28d9`,nodeType:`SORTIE PHASE 0`,sections:[{heading:`Sortie`,items:["Brief sauvegardé dans `docs/briefs/{project-name}.md`"]},{heading:`Passation`,items:[`Dire : 'Confier à Planning pour le décomposer en exec-plan, ou à Orion si la portée est déjà assez claire'`,`C'est une suggestion verbale — PAS une délégation automatique`]}]},phase0_glob:{title:`glob docs/briefs/`,color:`#7c3aed`,nodeType:`ACTION OBLIGATOIRE`,sections:[{heading:`Règle`,items:[`Toujours la première étape — sans exception`,"Scanner `docs/briefs/` avant toute autre action",`Résultat : 0 brief, 1 brief, ou plusieurs briefs`]}]},phase0_count:{title:`Briefs trouvés ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`0 → Step 1 direct, sans question posée`,`1 → vérifier le statut (draft / done / autre)`,`N → lister tous les briefs + demander lequel choisir`]}]},phase0_none:{title:`Step 1 direct`,color:`#7c3aed`,nodeType:`TRANSITION`,sections:[{heading:`Règle`,items:[`Aucun brief trouvé → passer directement au brainstorm Step 1, sans poser de question`]}]},phase0_one:{title:`Statut du brief ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`draft → demander : continuer ce brief ou repartir de zéro ?`,`done/autre → demander : réviser ce brief ou démarrer un nouveau projet ?`]}]},phase0_draft_ask:{title:`Continuer ou repartir ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Contexte`,items:[`Brief status: draft trouvé (ou brief sélectionné dans une liste)`]},{heading:`Options`,items:[`CONTINUER → charger le brief, sauter directement en Step 3`,`REPARTIR → ignorer le brief existant → Step 1 normale`]}]},phase0_done_ask:{title:`Réviser ou nouveau projet ?`,color:`#7c3aed`,nodeType:`QUESTION UTILISATEUR`,sections:[{heading:`Contexte`,items:[`Brief status: done ou autre statut trouvé`]},{heading:`Options`,items:[`RÉVISER → charger le brief, sauter directement en Step 3`,`NOUVEAU PROJET → ignorer le brief existant → Step 1 normale`]}]},phase0_many:{title:`Lister briefs + choisir`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Lister tous les briefs avec : chemin + statut + nom du projet`,`Demander : lequel traiter ? (ou nouveau projet ?)`]},{heading:`Suite`,items:[`Choisit un brief existant → même logique que 'un seul brief trouvé'`,`Nouveau projet → Step 1 normale`]}]},phase0_load:{title:`Charger brief → Step 3`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:["Lire le fichier brief existant dans `docs/briefs/`",`Fournir le contexte complet à Step 3 (mode révision)`,`Sauter les Steps 1 et 2 — aller directement en Step 3`]}]},phase0_step1:{title:`Step 1 normale`,color:`#7c3aed`,nodeType:`TRANSITION`,sections:[{heading:`Chemin`,items:[`L'utilisateur a choisi : repartir de zéro / nouveau projet`,`Flux normal : Step 1 → Step 2 → Step 3`,`Ignorer le(s) brief(s) existant(s)`]}]},phase0_brief_check:{title:`Phase 0 — BRAINSTORM (optionnel)`,color:`#7c3aed`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Entrée`,items:["Scanner `docs/briefs/` — toujours, sans exception",`Aucun brief → Phase 1 directement`,`Brief draft → demander : continuer ou repartir ?`,`Plusieurs briefs → lister + choisir`]},{heading:`Fast path`,items:[`Si scope déjà clair dans le message → flèche pointillée directe vers Phase 1`,`Suggestion verbale uniquement — jamais de délégation automatique`]}]},phase0_run_brainstorm:{title:`Lancer agent brainstorm`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Agent brainstorm`,items:[`Étape 1 — Découverte : faire émerger le problème`,`Étape 2 — Approfondissement : scope, critères, contraintes, risques`,`Étape 3 — Rédaction + Validation : brief complet, porte qualité`]}]},phase0_produce_brief:{title:`Produire le brief`,color:`#7c3aed`,nodeType:`SORTIE PHASE 0`,sections:[{heading:`Sortie`,items:["Brief écrit dans `docs/briefs/{project-name}.md`"]},{heading:`Passation`,items:[`Suggestion verbale : confier à Planning ou à Orion si scope assez clair`]}]},phase1_read_sp:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Ordre strict (9 étapes)`,items:["1. Lire `.opencode/scratchpad.md`","2. Appeler `project_state()`","3. Appeler `check_artifacts()`",`4. Clarifier l'intention (ambigu ? bug ?)`,`5. Identifier le nombre de scopes`,`6. Choisir le type de plan (inline ou exec-plan)`,"7. Appeler `todowrite`",`8. Écrire/mettre à jour le scratchpad`,"9. `compress` avant d'entrer en Phase 2"]}]},phase1_project_state:{title:`project_state() + check_artifacts()`,color:`#1d4ed8`,nodeType:`LIFECYCLE TOOLS`,sections:[{heading:`Obligatoires au démarrage`,items:["`project_state()` — état complet des exec-plans, specs et briefs","`check_artifacts()` — scan de cohérence inter-artefacts"]}]},phase1_clarify:{title:`Clarifier intention → scope → type plan`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Décisions`,items:["Ambigu ? → question via outil `question`",`Plusieurs scopes ? → proposer un ordre, attendre accord`,`Plan simple → inline dans scratchpad`,"Tâche complexe → invoquer agent `planning` → exec-plan"]}]},phase1_todowrite:{title:`todowrite + écrire scratchpad`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Actions`,items:[`Créer/MAJ liste de tâches visible`,`Écrire objectif, plan, décisions, questions ouvertes dans scratchpad`]}]},phase1_compress:{title:`compress stale context`,color:`#1d4ed8`,nodeType:`GESTION DU CONTEXTE`,sections:[{heading:`Outils DCP`,items:["`distill` — résumer les outputs longs","`prune` — élaguer les outputs exploratoires déjà distillés","`compress` — nettoyer le contexte avant Phase 2"]}]},phase2_bug:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Sélection agent (hiérarchie stricte)`,items:[`1. Agents user-defined (fichiers .md dans agent/)`,`2. Agents plugin nommés (bug-finder, review-manager…)`,"3. `explore` — read-only, plus rapide","4. `general` + persona — fallback uniquement"]},{heading:`Cycle`,items:[`MAJ scratchpad avant délégation`,"Déléguer via `task`",`Succès → MAJ scratchpad, distill, mark_block_done`,`Échec → diagnostiquer puis retry ≤2, sinon escalade`]}]},phase2_bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Rôle`,items:[`Forcer l'analyse root-cause AVANT tout fix`]},{heading:`Verdicts`,items:["HIGH → fix via `general`",`MEDIUM → fix + signaler incertitude`,`UNCERTAINTY_EXPOSED → stop, escalade user`]}]},phase2_select_agent:{title:`Sélectionner agent (hiérarchie)`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Règle`,items:[`Agents user-defined > plugin nommés > explore > general+persona`,"Si `explore` ou `general` suffisent → ne pas inventer une persona"]}]},phase2_handoff:{title:`Context handoff A→B`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Prompt auto-suffisant`,items:[`Inclure chemins de fichiers, contraintes, output attendu`,`Agents séquentiels : extraire l'essentiel de A, donner à B ce qui a changé/décidé/découvert`,"Parallèle = plusieurs `task` calls dans le même message"]}]},phase2_success:{title:`Succès agent ?`,color:`#15803d`,nodeType:`DÉCISION`,sections:[{heading:`En cas d'échec`,items:[`Prompt peu clair → reformuler`,`Overflow contexte → décomposer`,`Info manquante → enrichir (explore d'abord)`,`Mauvaise persona → changer`,`Blocage fondamental → escalade`]},{heading:`Règle`,items:[`Max 2 retries (tous types confondus) → escalade utilisateur`]}]},phase2_retry:{title:`retry ≤2`,color:`#d97706`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Diagnostiquer la cause`,`Reformuler / décomposer / enrichir / changer persona`,`Toujours changer quelque chose entre deux tentatives`]}]},phase2_esc_user:{title:`Escalade utilisateur`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles`,items:[`Décrire les 2 tentatives effectuées`,`Expliquer le diagnostic de chaque échec`,`Proposer options : reformuler, fournir contexte`,`Ne jamais retenter une 3e fois sans instruction`]}]},phase3_delegate_rm:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Règle absolue`,items:[`TOUJOURS via review-manager — jamais de reviewer direct`]},{heading:`Fournir au review-manager`,items:[`Fichiers modifiés + résumé des changements`,`Exigences originales de l'utilisateur`,`Trade-offs et décisions`,`Ce qui est explicitement hors scope`]},{heading:`Fresh start vs Resume`,items:[`Fresh (no task_id) pour les nouvelles reviews`,`Resume (task_id) pour les corrections après CHANGES_REQUESTED`]}]},phase3_verdict:{title:`Verdict ?`,color:`#b45309`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`APPROVED → Phase 4 (Synthesize)`,`CHANGES_REQUESTED → re-déléguer fixes au producteur → re-review (max 2 rounds)`,`BLOCKED → escalade immédiate, ne pas corriger sans input user`]}]},phase3_resume_fix:{title:`Reprendre producteur → fix`,color:`#d97706`,nodeType:`BOUCLE`,sections:[{heading:`Process`,items:[`Renvoyer les fixes précis à l'agent producteur (resume, task_id)`,`Re-passer par review-manager`,`Maximum 2 rounds au total`]}]},phase3_blocked_esc:{title:`Escalade — BLOCKED`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Règles strictes`,items:[`Signaler le problème précis identifié par le reviewer`,`Expliquer pourquoi c'est bloquant`,`Proposer AUCUN fix dans le message d'escalade`,`Attendre instruction explicite avant de continuer`]}]},phase4_self_eval:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Auto-évaluation (obligatoire avant rapport)`,items:[`1. Répond à la vraie demande (pas l'interprétée) ?`,`2. Les outputs multi-agents sont cohérents ?`,`3. Quelque chose de nagging sur la correction ou les effets de bord ?`]},{heading:`Types de gap`,items:[`Gap mineur → fix rapide puis rapport`,`Gap majeur → retour vers Phase 2 (Delegate)`,`Confusion scope → demander à l'utilisateur`]}]},phase4_gap:{title:`Type gap ?`,color:`#4338ca`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OK → capture scratchpad → rapport final`,`Mineur → fix rapide → capture scratchpad → rapport`,`Majeur → retour Phase 2 (boucle pointillée)`,`Scope → demander à l'utilisateur avant de livrer`]}]},phase4_minor:{title:`Gap mineur → fix rapide`,color:`#d97706`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Corriger le détail manquant directement`,`Pas besoin de repasser par Review si trivial`,`Inclure dans le rapport final`]}]},phase4_scope:{title:`Scope confusion → demander user`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Traitement`,items:[`Ne pas livrer une mauvaise réponse`,`Poser la question précise avant de continuer`]}]},phase4_sp_capture:{title:`Capture finale scratchpad`,color:`#4338ca`,nodeType:`ACTION`,sections:[{heading:`Avant le rapport`,items:[`Marquer la mission comme complète dans le scratchpad`,`Ne pas effacer (l'utilisateur peut revenir)`,"`## Plan` — statuts finaux","`## Decisions` — dernières décisions enregistrées"]}]},phase4_report:{title:`Rapport (human-tone)`,color:`#4338ca`,nodeType:`LIVRAISON`,sections:[{heading:`Règles de communication`,items:[`Mener avec le résultat, pas le processus`,`Mettre en avant succès et échecs honnêtement`,`Ne pas édulcorer les échecs d'agents`,`Proposer des prochaines étapes concrètes si pertinent`]},{heading:`Post-livraison (optionnel)`,items:[`Si un pattern récurrent a émergé → suggérer Harness à l'utilisateur (jamais sans confirmation)`,`Si docs/dérive de code → suggérer Gardener à l'utilisateur`,`Ne jamais lancer Phase 5 automatiquement`]}]},phase5_pattern:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE PRINCIPALE`,sections:[{heading:`Deux chemins indépendants`,items:[`Path A — Harness : encoder le pattern en artefact mécanique (lint, CI, AGENTS.md)`,`Path B — Gardener : corriger docs obsolètes + détecter dérive de code`]},{heading:`Règles`,items:[`Jamais sans confirmation explicite de l'utilisateur`,`Jamais au démarrage de mission — uniquement post-livraison`]}]},phase5_harness:{title:`Harness`,color:`#15803d`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Quand suggérer`,items:[`Pattern expliqué plusieurs fois à des agents différents`,`Décision architecturale régulièrement violée`,`Convention pas encore enforced par lint ou CI`]},{heading:`Ce que produit Harness`,items:[`Convention code → règle lint custom (ESLint, Ruff…)`,`Contrainte build/déploiement → job CI`,`Règle agent → entrée AGENTS.md`,`Principe non mécanisable → entrée docs/guiding-principles.md`]}]},phase5_gardener:{title:`Gardener`,color:`#475569`,nodeType:`AGENT SPÉCIALISÉ`,sections:[{heading:`Fonction 1 — Doc-Gardening`,items:[`Détecte refs obsolètes, descriptions périmées, liens cassés`,`Corrige le contenu, ouvre une PR par document`]},{heading:`Fonction 2 — Code-GC`,items:[`Dérive ponctuelle → PR de refactoring ciblée`,`Pattern récurrent → escalade vers Harness`]}]},phase5_recurring:{title:`Pattern récurrent ?`,color:`#475569`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI → escalade vers Harness (confirmation requise)`,`NON → PR ciblée uniquement`]}]},phase5_esc_harness:{title:`Escalader vers Harness`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Process`,items:[`Gardener vérifie avec Orion / utilisateur avant d'invoquer Harness`,`Harness procède directement une fois invoqué — il ne re-demande pas`]}]},phase_start:{title:`Requête utilisateur`,color:`#1e293b`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Point d'entrée`,items:[`L'utilisateur soumet une demande`,`Orion scanne les briefs existants avant toute autre action`]}]},phase_end:{title:`Rapport à l'utilisateur`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Livraison`,items:[`Résumé concis des changements effectués`,`Problèmes éventuels signalés honnêtement`,`Prochaines étapes proposées si pertinent`]}]},phase0:{title:`Phase 0 — BRAINSTORM (optionnel)`,color:`#7c3aed`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Phase de découverte. Se déclenche quand la demande est vague ou quand un nouveau projet démarre.`,`Produit un product brief dans docs/briefs/{project-name}.md.`,`Optionnelle — si brief existant ou scope clair, chemin rapide vers Phase 1.`]}]},phase1:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Séquence de planification en 9 étapes strictes.`,`Lire scratchpad → outils lifecycle → clarifier → scope → type plan → todowrite → écrire scratchpad → compress.`]}]},phase2:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Sélectionner les agents (hiérarchie stricte), déléguer via task, gérer les échecs avec retry ≤2.`,`Les bug reports vont toujours vers bug-finder en premier.`]}]},phase3:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Toujours via review-manager (jamais de reviewers directs).`,`APPROVED → Phase 4, CHANGES_REQUESTED → re-déléguer (max 2 rounds), BLOCKED → escalade.`]}]},phase4:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Auto-éval (3 questions) → traitement des gaps → capture finale scratchpad → rapport human-tone.`]}]},phase5:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE`,sections:[{heading:`Rôle`,items:[`Post-livraison, optionnel. Deux chemins : Harness (enforcement de patterns) et Gardener (détection de dérive docs/code).`]}]}},unifiedSvgLabels:{uf_start:`Démarrage de session`,uf_scan:`Scanne docs/briefs/`,uf_scan_sub:`(toujours — obligatoire)`,uf_briefs_found:`Brief(s) trouvé(s) ?`,uf_no_brief:`Pas de brief → Phase 1`,uf_brief_status:`Statut : draft ?`,uf_ask_continue:`Continuer ou repartir ?`,uf_ask_revise:`Réviser ou nouveau projet ?`,uf_load_brief:`Charger le brief`,uf_multi_found:`Plusieurs briefs → liste + choisir`,uf_brief_end:`Brief écrit`,uf_brief_end_sub:`suggérer Planning ou Orion`,uf_phase0_label:`Phase 0 — BRAINSTORM (optionnel)`,uf_placeholder_label:`Phase 1–5 (à venir)`,uf_step1_label:`Étape 1 — Découverte`,uf_step2_label:`Étape 2 — Rédaction du brief`,uf_step3_label:`Étape 3 — Alignement`,uf_expand_hint:`Voir les étapes`,uf_collapse_hint:`Masquer les étapes`,uf_arrow_none:`AUCUN`,uf_arrow_one:`UN SEUL`,uf_arrow_multiple:`PLUSIEURS`,uf_arrow_draft:`BROUILLON`,uf_arrow_done:`TERMINÉ`,uf_arrow_continue:`CONTINUER`,uf_arrow_fresh:`REPARTIR`,uf_arrow_revise:`RÉVISER`,uf_arrow_new_project:`NOUVEAU PROJET`,uf_arrow_phase3:`→ Étape 3`},brainstormSvgLabels:{bs_start:`Démarrage session`,bs_existing_check:`Briefs existants ?`,bs_single_found:`Un brief trouvé`,bs_multi_found:`Plusieurs trouvés`,bs_status_check:`Statut = brouillon ?`,bs_ask_continue:`Continuer ou nouveau ?`,bs_load_brief:`Charger le brief`,bs_phase1:`Étape 1 — Découverte`,bs_problem_clear:`Problème clair ?`,bs_phase2:`Étape 2 — Approfondissement`,bs_adversarial:`Porte adversariale`,bs_template_fillable:`Toutes sections remplissables ?`,bs_phase3:`Étape 3 — Rédaction + Validation`,bs_quality_gate:`Porte qualité`,bs_quality_passed:`Porte qualité passée ?`,bs_file_exists:`Fichier existant ?`,bs_file_conflict:`Écraser / v2 / renommer ?`,bs_write:`Écrire le brief`,bs_end:`Brief écrit. Passer à Planning ou Orion.`,bs_arrow_yes:`OUI`,bs_arrow_no:`NON`,bs_arrow_one:`UN SEUL`,bs_arrow_multiple:`PLUSIEURS`,bs_arrow_none:`AUCUN`,bs_arrow_draft:`BROUILLON`,bs_arrow_done:`TERMINÉ`,bs_arrow_continue:`CONTINUER`,bs_arrow_fresh:`NOUVEAU`,bs_arrow_choose:`CHOISIR EXISTANT`,bs_arrow_new:`NOUVEAU PROJET`,bs_arrow_all_fillable:`OUI`,bs_arrow_missing:`NON`,bs_arrow_passed:`PASSÉ`,bs_arrow_tier2:`NIVEAU 2`,bs_arrow_blocked:`BLOQUÉ`,bs_esc_blocked_label:`Escalade`,bs_esc_blocked_sub:`BLOQUÉ`,bs_arrow_overwrite:`ÉCRASER`,bs_arrow_version:`NOUVELLE VERSION`,bs_arrow_rename:`RENOMMER`},brainstormDetails:{bs_start:{title:`Démarrage de session`,color:`#0d9488`,nodeType:`POINT D'ENTRÉE`,sections:[{heading:`Ce qui se passe`,items:[`La session est initiée avec l'agent brainstorm`,`L'agent scanne docs/briefs/ pour vérifier les briefs existants`,`Décision de routage prise avant toute question`]}]},bs_existing_check:{title:`Briefs existants ?`,color:`#0d9488`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`AUCUN → Flux normal → Étape 1 (Découverte)`,`UN SEUL → vérifier le statut (brouillon / terminé)`,`PLUSIEURS → lister les briefs, demander lequel ou nouveau projet`]}]},bs_single_found:{title:`Un brief trouvé`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`Un brief localisé dans docs/briefs/`,`L'agent vérifie le champ statut dans le frontmatter du brief`,`Routage vers la décision de statut`]}]},bs_multi_found:{title:`Plusieurs briefs trouvés`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent liste tous les briefs trouvés à l'utilisateur`,`Demande : lequel reprendre, ou démarrer un nouveau projet ?`,`CHOISIR EXISTANT → Charger brief → Étape 3 (révision)`,`NOUVEAU PROJET → Flux normal → Étape 1`]}]},bs_status_check:{title:`Statut = brouillon ?`,color:`#0891b2`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI (brouillon) → Demander : continuer ou repartir de zéro ?`,`NON (terminé/autre) → Informer l'utilisateur, demander un nouveau nom de projet → Étape 1`]}]},bs_ask_continue:{title:`Continuer ou repartir de zéro ?`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'utilisateur voit le résumé du brief en brouillon existant`,`Demandé : reprendre là où on s'est arrêtés, ou repartir de zéro ?`,`CONTINUER → Charger brief → sauter directement à l'Étape 3 (révision)`,`REPARTIR → Ignorer le brief existant → Étape 1 (Découverte)`]}]},bs_load_brief:{title:`Charger le brief`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent lit le fichier brief existant dans docs/briefs/`,`Fournit le contexte complet à l'Étape 3 (mode révision)`,`L'utilisateur peut itérer sur le contenu existant plutôt que de repartir de zéro`]}]},bs_phase1:{title:`Étape 1 — Découverte`,color:`#2563eb`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Question centrale`,items:[`"Quel problème essaies-tu de résoudre, et qui en souffre ?"`]},{heading:`Règles`,items:[`Max 2 questions à la fois — ne jamais surcharger`,`Faire émerger le problème, pas la solution`,`Ne pas accepter les réponses vagues — pousser vers des précisions`,`Itérer jusqu'à ce que le problème soit clairement formulé`]},{heading:`Critères de sortie`,items:[`Problème formulé en 2–4 phrases`,`Utilisateur principal nommé`,`C'est bien un problème, pas une fonctionnalité`]}]},bs_problem_clear:{title:`Problème clair ?`,color:`#2563eb`,nodeType:`DÉCISION`,sections:[{heading:`Critères de sortie`,items:[`OUI → problème formulé en 2–4 phrases claires ET utilisateur principal nommé → Étape 2`,`NON → itérer — poser des questions de suivi plus ciblées`]}]},bs_phase2:{title:`Étape 2 — Approfondissement`,color:`#4f46e5`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Sujets à couvrir`,items:[`Périmètre et frontières — qu'est-ce qui est explicitement hors périmètre ?`,`Critères de succès — comment savoir que ça a marché ?`,`Cas d'usage — top 3–5 scénarios concrets`,`Contraintes — technique, temps, équipe, budget`,`Idées rejetées — ce qui a été considéré et écarté ?`]},{heading:`Pression socratique`,items:[`Challenger les hypothèses — "Pourquoi X est la bonne approche ?"`,`Demander les modes d'échec — "Qu'est-ce qui ferait échouer ça ?"`,`Sonder les cas limites — "Que se passe-t-il si Y ne fonctionne pas ?"`]}]},bs_adversarial:{title:`Porte adversariale`,color:`#7c3aed`,nodeType:`PORTE`,sections:[{heading:`Deux questions obligatoires`,items:[`"Quel est l'argument le plus fort contre la construction de ça ?"`,`"Que devrait-il être vrai pour que ça échoue en an 1 ?"`]},{heading:`But`,items:[`Force l'utilisateur à articuler les vrais risques`,`Empêche les briefs trop optimistes qui sautent les modes d'échec`,`Si l'utilisateur ne peut pas répondre, le problème a besoin de plus de travail`]}]},bs_template_fillable:{title:`Toutes les sections remplissables ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`OUI → passer à l'Étape 3 (rédaction + validation)`,`NON → itérer dans l'Étape 2 — identifier les sections encore vides`]},{heading:`Sections requises`,items:[`Énoncé du problème`,`Utilisateur principal`,`Critères de succès`,`Top cas d'usage`,`Contraintes`,`Hors périmètre`,`Risques / réponses adversariales`]}]},bs_phase3:{title:`Étape 3 — Rédaction + Validation`,color:`#6d28d9`,nodeType:`ÉTAPE PRINCIPALE`,sections:[{heading:`Ce qui se passe`,items:[`L'agent génère le brief complet inline depuis le contexte collecté`,`L'utilisateur révise le brouillon et donne son retour`,`L'agent itère jusqu'à ce que l'utilisateur confirme que le brief est prêt`,`La porte qualité est passée avant l'écriture sur disque`]},{heading:`Format de sortie`,items:[`Fichier Markdown dans docs/briefs/{project-name}.md`,`Sections structurées : problème, utilisateurs, critères de succès, cas d'usage, contraintes, risques`]}]},bs_quality_gate:{title:`Porte qualité`,color:`#6d28d9`,nodeType:`PORTE`,sections:[{heading:`Niveau 1 — correction silencieuse automatique`,items:[`Problèmes de formatage mineurs`,`Phrases incomplètes inférables`,`Ponctuation ou majuscules manquantes`]},{heading:`Niveau 2 — demander à l'utilisateur via l'outil question`,items:[`Critères de succès ambigus`,`Contraintes conflictuelles`,`Frontières de périmètre vagues`]},{heading:`BLOQUÉ — escalader immédiatement`,items:[`Aucun énoncé de problème`,`Aucun critère de succès`,`Périmètre vide — impossible de déterminer ce qu'il faut construire`]}]},bs_quality_passed:{title:`Porte qualité passée ?`,color:`#6d28d9`,nodeType:`DÉCISION`,sections:[{heading:`Branches`,items:[`PASSÉ → passer à la vérification d'écriture de fichier`,`Problèmes NIVEAU 2 → demander à l'utilisateur → résoudre → re-passer la porte`,`BLOQUÉ (pas de problème, pas de critères de succès, périmètre vide) → STOP — escalader à l'utilisateur, ne pas écrire`]}]},bs_file_exists:{title:`Fichier existant ?`,color:`#7c3aed`,nodeType:`DÉCISION`,sections:[{heading:`Vérification`,items:[`L'agent vérifie si docs/briefs/{project-name}.md existe déjà sur disque`]},{heading:`Branches`,items:[`NON → écrire directement`,`OUI → demander à l'utilisateur : écraser, nouvelle version, ou renommer ?`]}]},bs_file_conflict:{title:`Écraser / nouvelle version / renommer ?`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Options`,items:[`ÉCRASER → remplacer le fichier existant par le nouveau brief`,`NOUVELLE VERSION → écrire comme {name}-v2.md (ou -v3, etc.)`,`RENOMMER → écrire avec un nom de fichier personnalisé fourni par l'utilisateur`]}]},bs_write:{title:`Écrire le fichier`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Ce qui se passe`,items:[`L'agent écrit le brief validé dans docs/briefs/{project-name}.md`,`Le fichier est créé ou écrasé selon le choix de résolution de conflit`,`Le brief est prêt à être consommé par Planning ou Orion`]}]},bs_end:{title:`Brief écrit`,color:`#1e293b`,nodeType:`LIVRAISON`,sections:[{heading:`Passation`,items:[`Brief écrit dans docs/briefs/{project-name}.md`,`Confier à l'agent Planning pour le plan d'exécution`,`Ou confier directement à Orion (team-lead) pour l'implémentation`]}]},bs_esc_blocked:{title:`Escalade — BLOQUÉ`,color:`#991b1b`,nodeType:`ESCALADE`,sections:[{heading:`Quand ça se déclenche`,items:[`Aucun énoncé de problème`,`Aucun critère de succès défini`,`Périmètre vide — impossible de déterminer ce qu'il faut construire`]},{heading:`Ce qui se passe`,items:[`L'agent s'arrête immédiatement — n'écrit pas le brief`,`Rapporte précisément ce qui manque à l'utilisateur`,`L'utilisateur doit fournir les informations manquantes avant de continuer`]}]},uf_step1:{title:`Étape 1 — Découverte`,color:`#2563eb`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Rôle`,items:[`L'agent pose des questions ciblées sur le projet`,`Fait émerger le problème central et les utilisateurs concernés`,`Max 2 questions à la fois — ne jamais surcharger`]},{heading:`Critères de sortie`,items:[`Problème formulé en 2–4 phrases`,`Utilisateur principal nommé`,`C'est bien un problème, pas une fonctionnalité`]}]},uf_step2:{title:`Étape 2 — Rédaction du brief`,color:`#4f46e5`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Ce qui se passe`,items:[`L'agent génère le brief complet depuis le contexte collecté`,`L'utilisateur révise et donne son retour`,`L'agent itère jusqu'à validation`,`La porte qualité est passée avant l'écriture sur disque`]},{heading:`Sortie`,items:[`Fichier Markdown dans docs/briefs/{project-name}.md`]}]},uf_step3:{title:`Étape 3 — Alignement`,color:`#6d28d9`,nodeType:`SOUS-ÉTAPE BRAINSTORM`,sections:[{heading:`Ce qui se passe`,items:[`Révision du brief avec l'utilisateur`,`Itération jusqu'à confirmation`,`Une fois validé : suggestion de passer à Planning ou Orion`]},{heading:`Modes`,items:[`Chemin normal : Étape 1 → Étape 2 → Étape 3`,`Chemin rapide : brief existant chargé → Étape 3 directement`]}]}}}:{svgLabels:{start:`User request`,scratchpad_sub:`Current plan · Context`,ambigu:`Ambiguous?`,question_label:`User question`,question_sub:`tool: question`,bug_decision:`Bug report?`,certitude:`Certainty?`,agent_failure:`Agent failure?`,esc_uncertainty_label:`User escalation`,esc_retry_label:`Escalation`,esc_retry_sub:`2 retries exceeded`,esc_blocked_label:`Escalation`,end:`Report to user`,arrow_oui:`YES`,arrow_non:`NO`,arrow_gap_majeur:`Major gap`,arrow_gap_mineur:`Minor gap`,scratchpad_rw_label:`← read/write`,annot_delegate:`↳ Update scratchpad after each agent return`,annot_agents:`✎ after agent return`,agents_label:`Sub-agents`,annot_plan:`✎ scratchpad | planning agent if ambiguous`,annot_harness:`suggest to user — never launch without confirmation`,harness_arrow:`recurring pattern?`,harness_node_label:`Harness? (optional)`},details:{start:{title:`User request`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`Entry point`,items:[`User submits a request`,`team-lead analyzes the request type before acting`]}]},understand:{title:`1. Understand`,color:`#2563eb`,nodeType:`MAIN PHASE`,sections:[{heading:`Memory read`,items:[`.opencode/scratchpad.md — current work plan`]},{heading:`Lifecycle calls (mandatory at mission start)`,items:["`project_state()` — full view of exec-plans, specs, and briefs","`check_artifacts()` — cross-artifact consistency scan"]},{heading:`Lifecycle calls (throughout the workflow)`,items:["`mark_block_done()` — after each validated delivery","`complete_plan()` — when all blocks are done and final review is APPROVED","`register_spec()` — when a new spec needs to exist on disk"]},{heading:`Goal`,items:[`Parse the request (explicit vs implicit)`,`Identify ambiguity before planning`,`Check if a scope was in progress (scratchpad)`]}]},scratchpad:{title:`📄 scratchpad.md`,color:`#0ea5e9`,nodeType:`WORKING MEMORY`,sections:[{heading:`Role`,items:[`Working memory for current mission`,`Survives context compaction`,`Overwritten at each new mission`]},{heading:`When to read`,items:[`On startup — read mission state if it exists`]},{heading:`When to write (6 moments)`,items:[`Startup — goal + plan + initial decisions`,`Before delegation — sub-tasks, modified files, resume context`,`After agent return — synthesized key results`,`After review — task status + verdict`,`After each decision — record what was decided and why`,`End of mission — final capture before user report`]}]},ambigu:{title:`Ambiguous?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Decision`,items:["YES → ask questions via `question` tool → wait for answer → resume Understand",`NO → continue to Plan`]}]},question:{title:`User question`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Tool`,items:["`question` — blocks until user responds"]},{heading:`Rule`,items:[`Once the answer is received, resume from Understand to integrate the new information`]}]},plan:{title:`2. Plan`,color:`#4f46e5`,nodeType:`MAIN PHASE`,sections:[{heading:`Actions`,items:[`Create/update todo list → todowrite`,`Write plan + context in scratchpad`,`Identify required agents`,`Determine parallel vs sequential`]},{heading:`Exec-plans`,items:["Invoke `planning` agent if: ambiguous request + multi-session + AGENTS.md doesn't clarify",`Simple plan → inline in scratchpad`,`Exec-plan → file at docs/exec-plans/.md`,"When an exec-plan exists: scratchpad points to it — `See exec-plan: docs/exec-plans/.md`"]},{heading:`Lifecycle`,items:["`register_spec()` — when a new spec needs to exist on disk"]},{heading:`Rule`,items:[`One scope at a time — finish before moving to the next`,`Park secondary scopes in the scratchpad`]}]},delegate:{title:`3. Delegate`,color:`#7c3aed`,nodeType:`MAIN PHASE`,sections:[{heading:`Available agents`,items:["`explore` — read-only, codebase reconnaissance","`general` — implementation, writing, commands","Custom persona (`backend-engineer`, `react-specialist`…)"]},{heading:`Rules`,items:[`Independent tasks → spawn in parallel`,`Dependent tasks → sequential with context handoff`,`After each return → update scratchpad + compress`]}]},bug_decision:{title:`Bug report?`,color:`#be123c`,nodeType:`DECISION`,sections:[{heading:`Trigger bug-finder if`,items:[`Unexpected behavior / regression / crash / incorrect output`,`Something 'stopped working' with no obvious cause`,`A fix was applied but the problem persists or moved`]},{heading:`Do NOT trigger if`,items:[`Bug trivially locatable (user points to line + obvious typo) AND isolated fix → normal flow`]}]},bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Role`,items:[`Force root-cause analysis BEFORE any fix`,`Prevents workarounds and code divergence`]},{heading:`Verdicts`,items:["HIGH → direct fix via `general` with the analysis","MEDIUM → fix via `general` + report uncertainty to user",`UNCERTAINTY_EXPOSED → surface open questions to user before continuing`]}]},certitude:{title:`Certainty?`,color:`#be123c`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`HIGH / MEDIUM → join Agents flow with analysis in context`,`UNCERTAINTY_EXPOSED → user escalation, wait for answer before any fix`]}]},escalade_uncertainty:{title:`Escalation — UNCERTAINTY_EXPOSED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Message to user`,items:[`Present identified hypotheses and their probabilities`,`List the precise questions blocking the diagnosis`,`Do not propose a fix in this state`]}]},agents:{title:`Sub-agents`,color:`#6d28d9`,nodeType:`DELEGATION`,sections:[{heading:`Types`,items:["`explore` (native OpenCode) — read-only: search, glob, read","`general` (native OpenCode) — full access: read, write, bash","Custom persona — `backend-engineer`, `api-architect`…"]},{heading:`Context handoff`,items:[`Each agent starts from scratch — be explicit`,`Include modified files, decisions, interfaces`,`Parallel = multiple task calls in the same message`]}]},agent_failure:{title:`Agent failure?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Diagnostics`,items:[`Bad prompt → rephrase with more precision`,"Insufficient context → send `explore` first, retry with findings",`Task too large → break into sub-tasks`,`Tool error → check permissions and paths`]},{heading:`Rule`,items:[`Max 2 retries — always change something between attempts`,`If still failing after 2 attempts → user escalation`]}]},retry:{title:`↩ Retry (max 2)`,color:`#b45309`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Diagnose the cause of failure`,`Rephrase / decompose / enrich context`,`Relaunch the agent with the new prompt`]}]},escalade_retry:{title:`Escalation — 2 retries exceeded`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Message to user`,items:[`Describe what was attempted (2 attempts)`,`Explain the diagnosis of each failure`,`Propose options: rephrase the task, provide additional context`,`Never retry a 3rd time without explicit instruction`]}]},review:{title:`4. Review`,color:`#b45309`,nodeType:`MAIN PHASE`,sections:[{heading:`Absolute rule`,items:[`ALWAYS via review-manager — never a direct reviewer`,`Mandatory for any code, config, infra, security change`]},{heading:`Provide to review-manager`,items:[`Modified files + summary of changes`,`Original user requirements`,`Trade-offs and decisions made`,`What was explicitly out of scope`]},{heading:`Lifecycle`,items:["`mark_block_done()` — after each validated delivery","`complete_plan()` — when all blocks are done and final review is APPROVED"]}]},review_manager:{title:`review-manager`,color:`#92400e`,nodeType:`ORCHESTRATOR AGENT`,sections:[{heading:`Role`,items:[`Review orchestrator — never a direct reviewer`,`Spawns in parallel: code-reviewer, security-reviewer, requirements-reviewer`,`Synthesizes verdicts and arbitrates disagreements`]},{heading:`Skip authorized only if`,items:[`Docs-only change (no code modified)`,`No possible security impact`,`User explicitly requests speed`]}]},verdict:{title:`Review verdict?`,color:`#b45309`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`APPROVED → Synthesize & Report`,`CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)`,`BLOCKED → immediate user escalation, do not fix without user input`]}]},changes_loop:{title:`↩ Fix + re-review (max 2)`,color:`#b45309`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Send precise fixes back to the producer agent`,`Re-run through review-manager`,`Maximum 2 rounds total`]}]},escalade_blocked:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Strict rules`,items:[`Report the precise problem identified by the reviewer`,`Explain why it is blocking (not just a warning)`,`Propose NO fix in the escalation message`,`Wait for explicit instruction before continuing`]}]},synthesize:{title:`5. Synthesize & Report`,color:`#15803d`,nodeType:`MAIN PHASE`,sections:[{heading:`Self-evaluation`,items:[`Answers the real request (not the interpreted one)?`,`No contradiction between agent results?`,`Nothing missing in the deliverable?`]},{heading:`Memory update`,items:[`Clean up scratchpad (completed tasks)`]}]},autoeval:{title:`Self-eval OK?`,color:`#15803d`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`OK → final report to user`,`Minor gap (missing detail) → quick fix then report`,`Major gap (wrong approach) → back to Delegate`]}]},gap_majeur:{title:`↩ Back to Delegate`,color:`#166534`,nodeType:`LOOP`,sections:[{heading:`Treatment`,items:[`Treat the gap as a new task`,`Resume from Delegate phase`,`Update todo list and scratchpad before delegating`]}]},fix_rapide:{title:`Quick fix`,color:`#166534`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Fix the missing detail directly`,`No need to go through Review if the fix is trivial`,`Include in the final report`]}]},end:{title:`Report to user`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Delivery`,items:[`Concise summary of changes made`,`Any issues reported honestly`,`Suggested next steps if relevant`]}]},harness_suggest:{title:`Harness? (optional)`,color:`#166534`,nodeType:`POST-DELIVERY (OPTIONAL)`,sections:[{heading:`When to suggest`,items:[`A pattern has been explained multiple times to different agents`,`An architectural decision keeps getting violated`,`A convention is not yet enforced by lint or CI`]},{heading:`Rules`,items:[`Never without explicit user confirmation`,`Never at mission start — only post-delivery`,`Never on the critical path — always a final suggestion`,`Propose, never launch automatically`]}]},uf_start:{title:`Session Start`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`First action`,items:["Always scan `docs/briefs/` before anything else — no exceptions"]}]},uf_scan:{title:`Scan docs/briefs/`,color:`#6d28d9`,nodeType:`MANDATORY ACTION`,sections:[{heading:`Rule`,items:["Scan `docs/briefs/` regardless of how much context the user provided",`This is mandatory — there are no exceptions`]}]},uf_briefs_found:{title:`Brief(s) found?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`NONE → proceed to Phase 1 directly, no question asked`,`ONE → check status (draft / done / other)`,`MULTIPLE → list all briefs, ask which one or new project`]}]},uf_brief_status:{title:`Status: draft?`,color:`#64748b`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES (draft) → ask: continue editing or start fresh?`,`NO (done/other) → ask: revise this brief or start a new project?`]}]},uf_ask_continue:{title:`Continue or fresh?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Options`,items:[`CONTINUE → load brief, jump directly to Step 3 (revision mode)`,`FRESH → normal Step 1 flow`]}]},uf_ask_revise:{title:`Revise or new project?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Options`,items:[`REVISE → load brief, jump directly to Step 3 (revision mode)`,`NEW PROJECT → normal Step 1 flow`]}]},uf_load_brief:{title:`Load brief`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Reads the existing brief for revision mode`,`Jumps directly to Step 3 — skip Step 1 and Step 2`]},{heading:`Fast path`,items:[`If the user's opening message already provides sufficient context → offer to draft immediately (Step 3 direct)`]}]},uf_no_brief:{title:`No brief → Phase 1`,color:`#475569`,nodeType:`TRANSITION`,sections:[{heading:`Rule`,items:[`No question asked — proceed directly to Phase 1 (Understand + Plan)`,`Also the path when user chooses 'fresh start' or 'new project'`]}]},uf_multi_found:{title:`Multiple briefs found`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`List all briefs with path + status + project name`,`Ask: which one to work on? (or new project?)`,`Once chosen, follows the same logic as 'one brief found'`]}]},uf_brief_end:{title:`Brief written`,color:`#6d28d9`,nodeType:`PHASE 0 OUTPUT`,sections:[{heading:`Output`,items:["Brief saved to `docs/briefs/{project-name}.md`"]},{heading:`Hand-off`,items:[`Says: 'Hand it to Planning to break into an exec-plan, or to Orion if scope is already clear enough'`,`This is a verbal suggestion — NOT an automatic delegation`]}]},phase0_glob:{title:`glob docs/briefs/`,color:`#7c3aed`,nodeType:`MANDATORY ACTION`,sections:[{heading:`Rule`,items:[`Always the first step — no exceptions`,"Scan `docs/briefs/` before any other action",`Result: 0 briefs, 1 brief, or multiple briefs`]}]},phase0_count:{title:`Briefs found?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`0 → Step 1 direct, no question asked`,`1 → check the status (draft / done / other)`,`N → list all briefs + ask which one to choose`]}]},phase0_none:{title:`Step 1 direct`,color:`#7c3aed`,nodeType:`TRANSITION`,sections:[{heading:`Rule`,items:[`No brief found → go directly to brainstorm Step 1, no question asked`]}]},phase0_one:{title:`Brief status?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`draft → ask: continue this brief or start fresh?`,`done/other → ask: revise this brief or start a new project?`]}]},phase0_draft_ask:{title:`Continue or fresh start?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Context`,items:[`Brief with status: draft found (or brief selected from a list)`]},{heading:`Options`,items:[`CONTINUE → load the brief, jump directly to Step 3`,`FRESH START → ignore existing brief → normal Step 1`]}]},phase0_done_ask:{title:`Revise or new project?`,color:`#7c3aed`,nodeType:`USER QUESTION`,sections:[{heading:`Context`,items:[`Brief with status: done or other found`]},{heading:`Options`,items:[`REVISE → load the brief, jump directly to Step 3`,`NEW PROJECT → ignore existing brief → normal Step 1`]}]},phase0_many:{title:`List briefs + choose`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`List all briefs with: path + status + project name`,`Ask: which one to work on? (or new project?)`]},{heading:`After choice`,items:[`Chooses an existing brief → same logic as 'one brief found'`,`New project → normal Step 1`]}]},phase0_load:{title:`Load brief → Step 3`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:["Read the existing brief file from `docs/briefs/`",`Provide full context to Step 3 (revision mode)`,`Skip Steps 1 and 2 — go directly to Step 3`]}]},phase0_step1:{title:`Normal Step 1`,color:`#7c3aed`,nodeType:`TRANSITION`,sections:[{heading:`Path`,items:[`User chose: fresh start / new project`,`Normal flow: Step 1 → Step 2 → Step 3`,`Ignore existing brief(s)`]}]},phase0_brief_check:{title:`Phase 0 — BRAINSTORM (optional)`,color:`#7c3aed`,nodeType:`MAIN PHASE`,sections:[{heading:`Entry`,items:["Scan `docs/briefs/` — always, no exceptions",`No brief → Phase 1 directly`,`Draft brief → ask: continue or fresh start?`,`Multiple briefs → list + choose`]},{heading:`Fast path`,items:[`If scope is already clear in the message → dashed arrow directly to Phase 1`,`Verbal suggestion only — never automatic delegation`]}]},phase0_run_brainstorm:{title:`Run brainstorm agent`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Agent brainstorm`,items:[`Step 1 — Discovery: surface the problem`,`Step 2 — Deep Dive: scope, criteria, constraints, risks`,`Step 3 — Draft + Validation: full brief, quality gate`]}]},phase0_produce_brief:{title:`Produce brief`,color:`#7c3aed`,nodeType:`PHASE 0 OUTPUT`,sections:[{heading:`Output`,items:["Brief written to `docs/briefs/{project-name}.md`"]},{heading:`Hand-off`,items:[`Verbal suggestion: hand to Planning or to Orion if scope is clear enough`]}]},phase1_read_sp:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`MAIN PHASE`,sections:[{heading:`Strict order (9 steps)`,items:["1. Read `.opencode/scratchpad.md`","2. Call `project_state()`","3. Call `check_artifacts()`",`4. Clarify intent (ambiguous? bug?)`,`5. Identify number of scopes`,`6. Choose plan type (inline or exec-plan)`,"7. Call `todowrite`",`8. Write/update scratchpad`,"9. `compress` before entering Phase 2"]}]},phase1_project_state:{title:`project_state() + check_artifacts()`,color:`#1d4ed8`,nodeType:`LIFECYCLE TOOLS`,sections:[{heading:`Mandatory at mission start`,items:["`project_state()` — full view of exec-plans, specs, briefs","`check_artifacts()` — cross-artifact consistency scan"]}]},phase1_clarify:{title:`Clarify intent → scope → plan type`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Decisions`,items:["Ambiguous? → ask via `question` tool",`Multiple scopes? → propose order, wait for agreement`,`Simple plan → inline in scratchpad`,"Complex task → invoke `planning` agent → exec-plan"]}]},phase1_todowrite:{title:`todowrite + write scratchpad`,color:`#1d4ed8`,nodeType:`ACTION`,sections:[{heading:`Actions`,items:[`Create/update visible task list`,`Write goal, plan, decisions, open questions into scratchpad`]}]},phase1_compress:{title:`compress stale context`,color:`#1d4ed8`,nodeType:`CONTEXT MANAGEMENT`,sections:[{heading:`DCP tools`,items:["`distill` — summarize long outputs","`prune` — cut exploratory outputs already distilled","`compress` — clean context before Phase 2"]}]},phase2_bug:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`MAIN PHASE`,sections:[{heading:`Agent selection hierarchy`,items:[`1. User-defined agents (files in agent/)`,`2. Named plugin agents (bug-finder, review-manager…)`,"3. `explore` — read-only, faster","4. `general` + persona — fallback only"]},{heading:`Delegation cycle`,items:[`Update scratchpad before delegating`,"Delegate via `task`",`Success → update scratchpad, distill, mark_block_done`,`Failure → diagnose then retry ≤2, else escalate`]}]},phase2_bug_finder:{title:`bug-finder`,color:`#dc2626`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Role`,items:[`Force root-cause analysis BEFORE any fix`]},{heading:`Verdicts`,items:["HIGH → fix via `general`",`MEDIUM → fix + report uncertainty`,`UNCERTAINTY_EXPOSED → stop, user escalation`]}]},phase2_select_agent:{title:`Select agent (hierarchy)`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Rule`,items:[`User-defined > plugin named > explore > general+persona`,"If `explore` or `general` suffice → don't invent a persona"]}]},phase2_handoff:{title:`Context handoff A→B`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Self-sufficient prompt`,items:[`Include file paths, constraints, expected output`,`Sequential agents: extract essentials from A, give B what changed/decided/discovered`,"Parallel = multiple `task` calls in the same message"]}]},phase2_success:{title:`Agent success?`,color:`#15803d`,nodeType:`DECISION`,sections:[{heading:`On failure`,items:[`Bad prompt → reformulate`,`Context overflow → decompose`,`Missing info → enrich (explore first)`,`Wrong persona → change`,`Fundamental block → escalate`]},{heading:`Rule`,items:[`Max 2 retries (all types combined) → user escalation`]}]},phase2_retry:{title:`retry ≤2`,color:`#d97706`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Diagnose the cause`,`Reformulate / decompose / enrich / change persona`,`Always change something between attempts`]}]},phase2_esc_user:{title:`Escalate to user`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Rules`,items:[`Describe the 2 attempts made`,`Explain diagnosis of each failure`,`Propose options: rephrase, provide context`,`Never retry a 3rd time without instruction`]}]},phase3_delegate_rm:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`MAIN PHASE`,sections:[{heading:`Absolute rule`,items:[`ALWAYS via review-manager — never a direct reviewer`]},{heading:`Provide to review-manager`,items:[`Modified files + summary of changes`,`Original user requirements`,`Trade-offs and decisions made`,`What was explicitly out of scope`]},{heading:`Fresh start vs Resume`,items:[`Fresh (no task_id) for new reviews`,`Resume (task_id) for corrections after CHANGES_REQUESTED`]}]},phase3_verdict:{title:`Verdict?`,color:`#b45309`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`APPROVED → Phase 4 (Synthesize)`,`CHANGES_REQUESTED → re-delegate fixes to producer → re-review (max 2 rounds)`,`BLOCKED → immediate escalation, do not fix without user input`]}]},phase3_resume_fix:{title:`Resume producer → fix`,color:`#d97706`,nodeType:`LOOP`,sections:[{heading:`Process`,items:[`Send precise fixes back to producer agent (resume, task_id)`,`Re-run through review-manager`,`Maximum 2 rounds total`]}]},phase3_blocked_esc:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`Strict rules`,items:[`Report the precise problem identified by the reviewer`,`Explain why it is blocking`,`Propose NO fix in the escalation message`,`Wait for explicit instruction before continuing`]}]},phase4_self_eval:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`MAIN PHASE`,sections:[{heading:`Self-evaluation (mandatory before reporting)`,items:[`1. Does the result fully answer the original request?`,`2. Are multi-agent outputs coherent?`,`3. Does anything nag about correctness or side effects?`]},{heading:`Gap types`,items:[`Minor gap → quick fix then report`,`Major gap → loop back to Phase 2 (Delegate)`,`Scope confusion → ask user before delivering`]}]},phase4_gap:{title:`Gap type?`,color:`#4338ca`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`OK → scratchpad capture → final report`,`Minor → quick fix → scratchpad capture → report`,`Major → loop back to Phase 2 (dashed arrow)`,`Scope → ask user before delivering a wrong answer`]}]},phase4_minor:{title:`Minor gap → quick fix`,color:`#d97706`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Fix the missing detail directly`,`No need to go through Review if trivial`,`Include in the final report`]}]},phase4_scope:{title:`Scope confusion → ask user`,color:`#64748b`,nodeType:`ACTION`,sections:[{heading:`Treatment`,items:[`Do not deliver a wrong answer`,`Ask the precise question before continuing`]}]},phase4_sp_capture:{title:`Final scratchpad capture`,color:`#4338ca`,nodeType:`ACTION`,sections:[{heading:`Before reporting`,items:[`Mark mission as complete in the scratchpad`,`Do not delete it (user might return)`,"`## Plan` — all task statuses final","`## Decisions` — any last decisions recorded"]}]},phase4_report:{title:`Report (human-tone)`,color:`#4338ca`,nodeType:`DELIVERY`,sections:[{heading:`Communication rules`,items:[`Lead with the outcome, not the process`,`Highlight what succeeded and what failed`,`Be honest about issues — don't sugarcoat agent failures`,`Propose concrete next steps if applicable`]},{heading:`Post-delivery (optional)`,items:[`If a recurring pattern emerged → suggest Harness to user (never without confirmation)`,`If docs/code drift detected → suggest Gardener to user`,`Never trigger Phase 5 automatically`]}]},phase5_pattern:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`MAIN PHASE`,sections:[{heading:`Two independent paths`,items:[`Path A — Harness: encode pattern as mechanical artifact (lint, CI, AGENTS.md)`,`Path B — Gardener: fix stale docs + detect code drift`]},{heading:`Rules`,items:[`Never without explicit user confirmation`,`Never at mission start — only post-delivery`]}]},phase5_harness:{title:`Harness`,color:`#15803d`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`When to suggest`,items:[`A pattern explained multiple times to sub-agents`,`An architectural decision that keeps getting violated`,`A convention not yet enforced by lint or CI`]},{heading:`What harness produces`,items:[`Code convention → custom lint rule (ESLint, Ruff…)`,`Build/deploy constraint → CI job`,`Agent rule → AGENTS.md entry`,`Non-mechanizable principle → docs/guiding-principles.md entry`]}]},phase5_gardener:{title:`Gardener`,color:`#475569`,nodeType:`SPECIALIZED AGENT`,sections:[{heading:`Function 1 — Doc-Gardening`,items:[`Detects stale references, outdated descriptions, broken links`,`Fixes stale content, opens one PR per document`]},{heading:`Function 2 — Code-GC`,items:[`One-time drift → targeted refactoring PR`,`Recurring pattern → escalate to Harness`]}]},phase5_recurring:{title:`Recurring pattern?`,color:`#475569`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES → escalate to Harness (confirmation required)`,`NO → targeted PR only`]}]},phase5_esc_harness:{title:`Escalate to Harness`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`Process`,items:[`Gardener checks with Orion / user before triggering Harness`,`Harness proceeds directly once invoked — does not re-ask`]}]},phase_start:{title:`User request`,color:`#1e293b`,nodeType:`ENTRY POINT`,sections:[{heading:`Entry point`,items:[`User submits a request`,`Orion scans existing briefs first before any other action`]}]},phase_end:{title:`Report to user`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Delivery`,items:[`Concise summary of changes made`,`Any issues reported honestly`,`Suggested next steps if relevant`]}]},phase0:{title:`Phase 0 — BRAINSTORM (optional)`,color:`#7c3aed`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Discovery phase. Runs when the request is vague or a new project is starting.`,`Produces a product brief at docs/briefs/{project-name}.md.`,`Optional — if brief already exists or scope is clear, fast-path to Phase 1.`]}]},phase1:{title:`Phase 1 — PLAN`,color:`#1d4ed8`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Strict 9-step planning sequence.`,`Read scratchpad → lifecycle tools → clarify → scope → plan type → todowrite → write scratchpad → compress.`]}]},phase2:{title:`Phase 2 — DELEGATE`,color:`#15803d`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Select agents (strict hierarchy), delegate via task, handle failures with retry ≤2.`,`Bug reports always go to bug-finder first.`]}]},phase3:{title:`Phase 3 — REVIEW`,color:`#b45309`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Always via review-manager (never direct reviewers).`,`APPROVED → Phase 4, CHANGES_REQUESTED → re-delegate (max 2 rounds), BLOCKED → escalate.`]}]},phase4:{title:`Phase 4 — SYNTHESIZE`,color:`#4338ca`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Self-eval (3 questions) → gap handling → final scratchpad capture → human-tone report.`]}]},phase5:{title:`Phase 5 — MAINTENANCE`,color:`#475569`,nodeType:`PHASE`,sections:[{heading:`Purpose`,items:[`Post-delivery, optional. Two paths: Harness (pattern enforcement) and Gardener (doc/code drift detection).`]}]}},brainstormSvgLabels:{bs_start:`Session Start`,bs_existing_check:`Existing briefs?`,bs_single_found:`One brief found`,bs_multi_found:`Multiple found`,bs_status_check:`Status = draft?`,bs_ask_continue:`Continue or fresh?`,bs_load_brief:`Load brief`,bs_phase1:`Step 1 — Discovery`,bs_problem_clear:`Problem clear?`,bs_phase2:`Step 2 — Deep Dive`,bs_adversarial:`Adversarial Gate`,bs_template_fillable:`All sections fillable?`,bs_phase3:`Step 3 — Draft + Validate`,bs_quality_gate:`Quality Gate`,bs_quality_passed:`Quality gate passed?`,bs_file_exists:`File already exists?`,bs_file_conflict:`Overwrite / version / rename?`,bs_write:`Write file`,bs_end:`Brief written. Hand to Planning or Orion.`,bs_arrow_yes:`YES`,bs_arrow_no:`NO`,bs_arrow_one:`ONE`,bs_arrow_multiple:`MULTIPLE`,bs_arrow_none:`NONE`,bs_arrow_draft:`DRAFT`,bs_arrow_done:`DONE`,bs_arrow_continue:`CONTINUE`,bs_arrow_fresh:`FRESH`,bs_arrow_choose:`CHOOSE EXISTING`,bs_arrow_new:`NEW PROJECT`,bs_arrow_all_fillable:`YES`,bs_arrow_missing:`NO`,bs_arrow_passed:`PASSED`,bs_arrow_tier2:`TIER 2`,bs_arrow_blocked:`BLOCKED`,bs_esc_blocked_label:`Escalation`,bs_esc_blocked_sub:`BLOCKED`,bs_arrow_overwrite:`OVERWRITE`,bs_arrow_version:`NEW VERSION`,bs_arrow_rename:`RENAME`},brainstormDetails:{bs_start:{title:`Session Start`,color:`#0d9488`,nodeType:`ENTRY POINT`,sections:[{heading:`What happens`,items:[`Session is initiated with brainstorm agent`,"Scans `docs/briefs/` for existing briefs",`Routing decision made before any questions are asked`]}]},bs_existing_check:{title:`Existing briefs found?`,color:`#0d9488`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`NO → Flow normal → Step 1 (Discovery)`,`ONE found → check status (draft / done)`,`MULTIPLE found → list briefs, ask which one or new project`]}]},bs_single_found:{title:`One brief found`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Single brief located at docs/briefs/`,`Agent checks the status field in the brief frontmatter`,`Routes to status decision`]}]},bs_multi_found:{title:`Multiple briefs found`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent lists all found briefs to the user`,`Asks: which one to resume, or start a new project?`,`CHOOSE EXISTING → Load brief → Step 3 (revision)`,`NEW PROJECT → Flow normal → Step 1`]}]},bs_status_check:{title:`Status = draft?`,color:`#0891b2`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES (draft) → Ask: continue or fresh start?`,`NO (done/other) → Inform user, ask new project name → Step 1`]}]},bs_ask_continue:{title:`Continue or fresh start?`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`User is shown the existing draft brief summary`,`Asked: resume from where we left off, or start fresh?`,`CONTINUE → Load brief → jump directly to Step 3 (revision)`,`FRESH → Ignore existing brief → Step 1 (Discovery)`]}]},bs_load_brief:{title:`Load brief`,color:`#0891b2`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent reads the existing brief file from docs/briefs/`,`Provides full context to Step 3 (revision mode)`,`User can iterate on the existing content rather than restarting`]}]},bs_phase1:{title:`Step 1 — Discovery`,color:`#2563eb`,nodeType:`MAIN STEP`,sections:[{heading:`Core question`,items:[`"What problem are you trying to solve, and who experiences it?"`]},{heading:`Rules`,items:[`Max 2 questions at a time — never overwhelm`,`Surface the problem, not the solution`,`Do not accept vague answers — push for specifics`,`Iterate until problem is stated clearly`]},{heading:`Exit criteria`,items:[`Problem stated in 2–4 sentences`,`Primary user named`,`Problem is a problem, not a feature`]}]},bs_problem_clear:{title:`Problem clear?`,color:`#2563eb`,nodeType:`DECISION`,sections:[{heading:`Exit criteria`,items:[`YES → problem stated in 2–4 clear sentences AND primary user named → Step 2`,`NO → iterate — ask more targeted follow-up questions`]}]},bs_phase2:{title:`Step 2 — Deep Dive`,color:`#4f46e5`,nodeType:`MAIN STEP`,sections:[{heading:`Topics to cover`,items:[`Scope and boundaries — what is explicitly out of scope?`,`Success criteria — how will you know it worked?`,`Use cases — top 3–5 concrete scenarios`,`Constraints — technical, time, team, budget`,`Rejected ideas — what was considered and discarded?`]},{heading:`Socratic pressure`,items:[`Challenge assumptions — "Why is X the right approach?"`,`Ask about failure modes — "What would make this fail?"`,`Probe edges — "What happens when Y doesn't work?"`]}]},bs_adversarial:{title:`Adversarial Gate`,color:`#7c3aed`,nodeType:`GATE`,sections:[{heading:`Two mandatory questions`,items:[`"What is the strongest case against building this?"`,`"What would have to be true for this to fail in year 1?"`]},{heading:`Purpose`,items:[`Forces the user to articulate real risks`,`Prevents over-optimistic briefs that skip failure modes`,`If user can't answer, the problem statement needs more work`]}]},bs_template_fillable:{title:`All template sections fillable?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`YES → proceed to Step 3 (draft + validation)`,`NO → iterate back in Step 2 — identify which sections are still empty`]},{heading:`Template sections required`,items:[`Problem statement`,`Primary user`,`Success criteria`,`Top use cases`,`Constraints`,`Out of scope`,`Risks / adversarial answers`]}]},bs_phase3:{title:`Step 3 — Draft + Validation`,color:`#6d28d9`,nodeType:`MAIN STEP`,sections:[{heading:`What happens`,items:[`Agent generates the full brief inline from collected context`,`User reviews the draft and provides feedback`,`Agent iterates until user confirms the brief is ready`,`Quality gate is run before writing to disk`]},{heading:`Output format`,items:[`Markdown file at docs/briefs/{project-name}.md`,`Structured sections: problem, users, success criteria, use cases, constraints, risks`]}]},bs_quality_gate:{title:`Quality Gate`,color:`#6d28d9`,nodeType:`GATE`,sections:[{heading:`Tier 1 — auto-fix silently`,items:[`Minor formatting issues`,`Incomplete sentences that can be inferred`,`Missing punctuation or capitalization`]},{heading:`Tier 2 — ask user via question tool`,items:[`Ambiguous success criteria`,`Conflicting constraints`,`Vague scope boundaries`]},{heading:`BLOCKED — escalate immediately`,items:[`No problem statement at all`,`No success criteria`,`Empty scope — can't determine what to build`]}]},bs_quality_passed:{title:`Quality gate passed?`,color:`#6d28d9`,nodeType:`DECISION`,sections:[{heading:`Branches`,items:[`PASSED → proceed to file write check`,`TIER 2 issues → ask user → resolve → re-run gate`,`BLOCKED (no problem, no success criteria, empty scope) → STOP — escalate to user, do not write`]}]},bs_file_exists:{title:`File already exists?`,color:`#7c3aed`,nodeType:`DECISION`,sections:[{heading:`Check`,items:[`Agent checks if docs/briefs/{project-name}.md already exists on disk`]},{heading:`Branches`,items:[`NO → write directly`,`YES → ask user: overwrite, new version, or rename?`]}]},bs_file_conflict:{title:`Overwrite / new version / rename?`,color:`#7c3aed`,nodeType:`ACTION`,sections:[{heading:`Options`,items:[`OVERWRITE → replace existing file with new brief`,`NEW VERSION → write as {name}-v2.md (or -v3, etc.)`,`RENAME → write with a custom filename provided by the user`]}]},bs_write:{title:`Write file`,color:`#15803d`,nodeType:`ACTION`,sections:[{heading:`What happens`,items:[`Agent writes the validated brief to docs/briefs/{project-name}.md`,`File is created or overwritten depending on the conflict resolution choice`,`Brief is ready for Planning or Orion to consume`]}]},bs_end:{title:`Brief written`,color:`#1e293b`,nodeType:`DELIVERY`,sections:[{heading:`Handoff`,items:[`Brief written to docs/briefs/{project-name}.md`,`Hand to Planning agent for execution plan`,`Or hand to Orion (team-lead) directly for implementation`]}]},bs_esc_blocked:{title:`Escalation — BLOCKED`,color:`#991b1b`,nodeType:`ESCALATION`,sections:[{heading:`When this triggers`,items:[`No problem statement at all`,`No success criteria defined`,`Scope is empty — cannot determine what to build`]},{heading:`What happens`,items:[`Agent stops immediately — does not write the brief`,`Reports precisely what is missing to the user`,`User must provide the missing information before continuing`]}]},uf_step1:{title:`Step 1 — Discovery`,color:`#2563eb`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`Role`,items:[`Agent asks targeted questions about the project`,`Surfaces the core problem and the affected users`,`Max 2 questions at a time — never overwhelm`]},{heading:`Exit criteria`,items:[`Problem stated in 2–4 sentences`,`Primary user named`,`Problem is a problem, not a feature`]}]},uf_step2:{title:`Step 2 — Brief draft`,color:`#4f46e5`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`What happens`,items:[`Agent generates the full brief inline from collected context`,`User reviews and provides feedback`,`Agent iterates until validated`,`Quality gate is run before writing to disk`]},{heading:`Output`,items:[`Markdown file at docs/briefs/{project-name}.md`]}]},uf_step3:{title:`Step 3 — Alignment`,color:`#6d28d9`,nodeType:`BRAINSTORM SUB-STEP`,sections:[{heading:`What happens`,items:[`Brief is reviewed with the user`,`Iteration until confirmation`,`Once validated: suggest handing off to Planning or Orion`]},{heading:`Modes`,items:[`Normal path: Step 1 → Step 2 → Step 3`,`Fast path: existing brief loaded → Step 3 directly`]}]}},unifiedSvgLabels:{uf_start:`Session start`,uf_scan:`Scan docs/briefs/`,uf_scan_sub:`(always — mandatory)`,uf_briefs_found:`Brief(s) found?`,uf_no_brief:`No brief → Phase 1`,uf_brief_status:`Status: draft?`,uf_ask_continue:`Continue or fresh?`,uf_ask_revise:`Revise or new project?`,uf_load_brief:`Load brief`,uf_multi_found:`Multiple briefs → list + choose`,uf_brief_end:`Brief written`,uf_brief_end_sub:`suggest Planning or Orion`,uf_phase0_label:`Phase 0 — BRAINSTORM (optional)`,uf_placeholder_label:`Phase 1–5 (coming next)`,uf_step1_label:`Step 1 — Discovery`,uf_step2_label:`Step 2 — Brief draft`,uf_step3_label:`Step 3 — Alignment`,uf_expand_hint:`Show steps`,uf_collapse_hint:`Hide steps`,uf_arrow_none:`NONE`,uf_arrow_one:`ONE`,uf_arrow_multiple:`MULTIPLE`,uf_arrow_draft:`DRAFT`,uf_arrow_done:`DONE`,uf_arrow_continue:`CONTINUE`,uf_arrow_fresh:`FRESH`,uf_arrow_revise:`REVISE`,uf_arrow_new_project:`NEW PROJECT`,uf_arrow_phase3:`→ Step 3`}}}function q1e(e){let t=e===`en`,n={start:t?`User request`:`Requête utilisateur`,p0_label:t?`Phase 0 — BRAINSTORM optional`:`Phase 0 — BRAINSTORM optionnel`,p1_label:`Phase 1 — PLAN`,p2_label:`Phase 2 — DELEGATE`,p3_label:`Phase 3 — REVIEW`,p4_label:`Phase 4 — SYNTHESIZE`,p5_label:`Phase 5 — MAINTENANCE`,p0_glob:`glob docs/briefs/`,p0_count:t?`Briefs found?`:`Briefs trouvés ?`,p0_none:`Step 1 direct`,p0_one:t?`Brief status?`:`Statut du brief ?`,p0_draft_ask:t?`Continue or fresh start?`:`Continuer ou repartir ?`,p0_done_ask:t?`Revise or new project?`:`Réviser ou nouveau projet ?`,p0_many:t?`List briefs + choose`:`Lister briefs + choisir`,p0_load:t?`Load brief → Step 3`:`Charger brief → Step 3`,p0_step1:t?`Step 1 normal`:`Step 1 normale`,p0_run:t?`Run brainstorm agent`:`Lancer agent brainstorm`,p0_brief:t?`Brief written → verbal suggestion`:`Brief écrit → suggestion verbale`,p0_arrow_0:`0`,p0_arrow_1:`1`,p0_arrow_n:`N`,p0_arrow_draft:`draft`,p0_arrow_done:t?`done/other`:`done/autre`,p0_arrow_continue:t?`Continue`:`Continuer`,p0_arrow_fresh:t?`Fresh start`:`Repartir`,p0_arrow_revise:t?`Revise`:`Réviser`,p0_arrow_new:t?`New project`:`Nouveau projet`,yes:t?`YES`:`OUI`,no:t?`NO`:`NON`,fast_path:t?`fast path`:`chemin rapide`,run_brainstorm:t?`Run brainstorm agent`:`Lancer agent brainstorm`,produce_brief:t?`Produce brief`:`Produire le brief`,read_sp:t?`Read scratchpad`:`Lire scratchpad`,project_state:`project_state + check_artifacts`,clarify:t?`Clarify intent scope plan`:`Clarifier intention scope plan`,todowrite:t?`todowrite + write scratchpad`:`todowrite + scratchpad`,compress:t?`compress stale context`:`compress contexte obsolète`,bug_q:t?`Bug report?`:`Bug report ?`,bug_finder:`bug-finder first`,select_agent:t?`Select agent hierarchy`:`Sélectionner agent`,handoff:`Context handoff A to B`,success_q:t?`Agent success?`:`Succès agent ?`,retry:`retry max 2`,esc_user:t?`Escalate to user`:`Escalade utilisateur`,delegate_rm:t?`Delegate to review-manager`:`Déléguer review-manager`,verdict_q:t?`Verdict?`:`Verdict ?`,approved:`APPROVED`,changes:`CHANGES_REQUESTED`,blocked:`BLOCKED`,resume_fix:t?`Resume producer fix`:`Reprendre producteur fix`,self_eval:t?`Self-eval 3 questions`:`Auto-eval 3 questions`,gap_q:t?`Gap type?`:`Type gap ?`,minor_gap:t?`minor gap quick fix`:`gap mineur fix rapide`,scope_conf:t?`scope confusion ask user`:`confusion scope demander user`,major:t?`major gap`:`gap majeur`,sp_capture:t?`Final scratchpad capture`:`Capture finale scratchpad`,report_human:t?`Report human-tone`:`Rapport human-tone`,pattern_q:t?`Pattern type?`:`Type pattern ?`,harness:`Harness lint CI AGENTS`,gardener:t?`Gardener stale docs code GC`:`Gardener docs obsolètes code GC`,recurring_q:t?`Recurring pattern?`:`Pattern récurrent ?`,esc_harness:t?`Escalate to Harness`:`Escalader vers Harness`,end:t?`Report to user`:`Rapport à l'utilisateur`,enforcement:t?`needs enforcement`:`enforcement requis`,docs_drift:t?`docs / drift`:`docs / dérive`,optional:t?`optional`:`optionnel`};return`flowchart TD START(["${n.start}"]) subgraph P0["${n.p0_label}"] - P0_CHECK{"${n.brief_check}"} - P0_RUN["${n.run_brainstorm}"] - P0_BRIEF["${n.produce_brief}"] + P0_GLOB["${n.p0_glob}"] + P0_COUNT{"${n.p0_count}"} + P0_NONE["${n.p0_none}"] + P0_ONE{"${n.p0_one}"} + P0_DRAFT_ASK["${n.p0_draft_ask}"] + P0_DONE_ASK["${n.p0_done_ask}"] + P0_MANY["${n.p0_many}"] + P0_LOAD["${n.p0_load}"] + P0_STEP1["${n.p0_step1}"] + P0_RUN["${n.p0_run}"] + P0_BRIEF["${n.p0_brief}"] end subgraph P1["${n.p1_label}"] @@ -3267,12 +3275,24 @@ END(["${n.end}"]) - START --> P0_CHECK - P0_CHECK -- "${n.no}" --> P0_RUN + START --> P0_GLOB + P0_GLOB --> P0_COUNT + P0_COUNT -- "${n.p0_arrow_0}" --> P0_NONE + P0_COUNT -- "${n.p0_arrow_1}" --> P0_ONE + P0_COUNT -- "${n.p0_arrow_n}" --> P0_MANY + P0_ONE -- "${n.p0_arrow_draft}" --> P0_DRAFT_ASK + P0_ONE -- "${n.p0_arrow_done}" --> P0_DONE_ASK + P0_DRAFT_ASK -- "${n.p0_arrow_continue}" --> P0_LOAD + P0_DRAFT_ASK -- "${n.p0_arrow_fresh}" --> P0_STEP1 + P0_DONE_ASK -- "${n.p0_arrow_revise}" --> P0_LOAD + P0_DONE_ASK -- "${n.p0_arrow_new}" --> P0_STEP1 + P0_MANY --> P0_DRAFT_ASK + P0_NONE --> P0_RUN + P0_STEP1 --> P0_RUN + P0_LOAD --> P0_RUN P0_RUN --> P0_BRIEF P0_BRIEF --> P1_READ - P0_CHECK -- "${n.yes}" --> P1_READ - P0_CHECK -. "${n.fast_path}" .-> P2_SELECT + P0_GLOB -. "${n.fast_path}" .-> P2_SELECT P1_READ --> P1_STATE P1_STATE --> P1_INTENT @@ -3297,13 +3317,15 @@ P3_VERDICT -- "${n.blocked}" --> P3_BLOCKED P4_EVAL --> P4_GAP + P4_GAP -- "OK" --> P4_SP P4_GAP -- "minor" --> P4_MINOR P4_GAP -- "${n.major}" --> P2_SELECT P4_GAP -- "scope?" --> P4_SCOPE P4_MINOR --> P4_SP P4_SCOPE --> P4_SP P4_SP --> P4_REPORT - P4_REPORT --> P5_PAT + P4_REPORT --> END + P4_REPORT -. "${n.optional}" .-> P5_PAT P5_PAT -- "${n.enforcement}" --> P5_HARNESS P5_PAT -- "${n.docs_drift}" --> P5_GARDENER @@ -3322,7 +3344,7 @@ classDef escalade fill:#fff,color:#dc2626,stroke:#dc2626,stroke-width:2px classDef terminal fill:#f0fdf4,color:#166534,stroke:#166534,stroke-width:2px - class P0_CHECK,P0_RUN,P0_BRIEF phase0 + class P0_GLOB,P0_COUNT,P0_NONE,P0_ONE,P0_DRAFT_ASK,P0_DONE_ASK,P0_MANY,P0_LOAD,P0_STEP1,P0_RUN,P0_BRIEF phase0 class P1_READ,P1_STATE,P1_INTENT,P1_TODO,P1_COMPRESS phase1 class P2_BUG,P2_BUGFINDER,P2_SELECT,P2_HANDOFF,P2_SUCCESS,P2_RETRY phase2 class P2_ESC escalade @@ -3330,7 +3352,25 @@ class P3_BLOCKED escalade class P4_EVAL,P4_GAP,P4_MINOR,P4_SCOPE,P4_SP,P4_REPORT phase4 class P5_PAT,P5_HARNESS,P5_GARDENER,P5_RECUR,P5_ESC_H phase5 - class START,END terminal`}var J1e={START:`phase_start`,END:`phase_end`,P0_CHECK:`phase0_brief_check`,P0_RUN:`phase0_run_brainstorm`,P0_BRIEF:`phase0_produce_brief`,P1_READ:`phase1_read_sp`,P1_STATE:`phase1_project_state`,P1_INTENT:`phase1_clarify`,P1_TODO:`phase1_todowrite`,P1_COMPRESS:`phase1_compress`,P2_BUG:`phase2_bug`,P2_BUGFINDER:`phase2_bug_finder`,P2_SELECT:`phase2_select_agent`,P2_HANDOFF:`phase2_handoff`,P2_SUCCESS:`phase2_success`,P2_RETRY:`phase2_retry`,P2_ESC:`phase2_esc_user`,P3_RM:`phase3_delegate_rm`,P3_VERDICT:`phase3_verdict`,P3_FIX:`phase3_resume_fix`,P3_BLOCKED:`phase3_blocked_esc`,P4_EVAL:`phase4_self_eval`,P4_GAP:`phase4_gap`,P4_MINOR:`phase4_minor`,P4_SCOPE:`phase4_scope`,P4_SP:`phase4_sp_capture`,P4_REPORT:`phase4_report`,P5_PAT:`phase5_pattern`,P5_HARNESS:`phase5_harness`,P5_GARDENER:`phase5_gardener`,P5_RECUR:`phase5_recurring`,P5_ESC_H:`phase5_esc_harness`,P0:`phase0`,P1:`phase1`,P2:`phase2`,P3:`phase3`,P4:`phase4`,P5:`phase5`};function Y1e({lang:e,onNodeClick:t}){let n=(0,S.useRef)(null);return(0,S.useEffect)(()=>{if(!n.current)return;W1e.initialize({startOnLoad:!1,theme:`base`,flowchart:{curve:`basis`,htmlLabels:!0,padding:20},themeVariables:{primaryColor:`#1d4ed8`,primaryTextColor:`#ffffff`,primaryBorderColor:`#1e40af`,lineColor:`#64748b`,secondaryColor:`#f1f5f9`,tertiaryColor:`#e2e8f0`,fontFamily:`system-ui, -apple-system, sans-serif`,fontSize:`14px`}});let r=q1e(e),i=`main-flowchart-${Date.now()}`;W1e.render(i,r).then(({svg:e})=>{if(!n.current)return;n.current.innerHTML=e;let r=n.current.querySelector(`svg`);r&&(r.style.width=`100%`,r.style.maxWidth=`100%`,r.style.height=`auto`,r.querySelectorAll(`g.node`).forEach(e=>{let n=(e.id||``).match(/flowchart-([A-Z0-9_]+)-\d+/);if(n){let r=J1e[n[1]];r&&(e.style.cursor=`pointer`,e.addEventListener(`click`,()=>t(r)))}}),r.querySelectorAll(`g.cluster`).forEach(e=>{e.querySelector(`.cluster-label span, .nodeLabel`)&&(e.style.cursor=`pointer`)}))}).catch(e=>{console.error(`Mermaid render error:`,e),n.current&&(n.current.innerHTML=`
Diagram render error. Check console.
`)})},[e,t]),(0,$.jsx)(`div`,{style:{width:`100%`,overflowX:`auto`,padding:`24px`},children:(0,$.jsx)(`div`,{ref:n,style:{minWidth:`800px`}})})}function J9({children:e}){return(0,$.jsx)($.Fragment,{children:e.split(/(`[^`]+`)/g).map((e,t)=>e.startsWith("`")&&e.endsWith("`")?(0,$.jsx)(`code`,{style:{background:`#1e293b`,color:`#e2e8f0`,padding:`2px 6px`,borderRadius:4,fontSize:13,fontFamily:`ui-monospace, monospace`},children:e.slice(1,-1)},t):(0,$.jsx)(`span`,{children:e},t))})}function Y9({color:e,label:t,rest:n}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:10,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{background:e+`20`,color:e,border:`1px solid ${e}40`,borderRadius:4,padding:`2px 8px`,fontSize:11,fontWeight:700,whiteSpace:`nowrap`,marginTop:3,flexShrink:0,fontFamily:`system-ui, sans-serif`},children:t}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.6,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:n.replace(/^[ →]+/,`→ `)})})]})}function X9({icon:e,color:t,text:n}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:10,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{color:t,fontWeight:700,fontSize:14,marginTop:2,flexShrink:0},children:e}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.6,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:n.replace(/^[ →]+/,``)})})]})}function X1e({item:e,nodeColor:t}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:12,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{marginTop:8,width:7,height:7,borderRadius:`50%`,background:t+`60`,border:`1.5px solid ${t}`,flexShrink:0}}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.7,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:e})})]})}function Z1e({item:e,nodeColor:t}){return e.startsWith(`HIGH →`)||e.startsWith(`HIGH /`)?(0,$.jsx)(Y9,{color:`#16a34a`,label:`HIGH`,rest:e.slice(4)}):e.startsWith(`MEDIUM`)?(0,$.jsx)(Y9,{color:`#d97706`,label:`MEDIUM`,rest:e.slice(6)}):e.startsWith(`UNCERTAINTY_EXPOSED`)?(0,$.jsx)(Y9,{color:`#dc2626`,label:`UNCERTAINTY`,rest:e.slice(19)}):e.startsWith(`APPROVED`)?(0,$.jsx)(Y9,{color:`#16a34a`,label:`APPROVED`,rest:e.slice(8)}):e.startsWith(`CHANGES_REQUESTED`)?(0,$.jsx)(Y9,{color:`#d97706`,label:`CHANGES`,rest:e.slice(17)}):e.startsWith(`BLOCKED`)?(0,$.jsx)(Y9,{color:`#dc2626`,label:`BLOCKED`,rest:e.slice(7)}):e.startsWith(`OUI`)?(0,$.jsx)(X9,{icon:`→`,color:`#22c55e`,text:e.slice(3)}):e.startsWith(`NON`)?(0,$.jsx)(X9,{icon:`→`,color:`#6b7280`,text:e.slice(3)}):e.startsWith(`YES`)?(0,$.jsx)(X9,{icon:`→`,color:`#22c55e`,text:e.slice(3)}):e.startsWith(`NO →`)||e.startsWith(`NO `)?(0,$.jsx)(X9,{icon:`→`,color:`#6b7280`,text:e.slice(2)}):e.startsWith(`OK →`)?(0,$.jsx)(X9,{icon:`→`,color:`#16a34a`,text:e.slice(2)}):(0,$.jsx)(X1e,{item:e,nodeColor:t})}function Q1e({nodeId:e,lang:t}){let{details:n,brainstormDetails:r}=K1e(t),i=e.startsWith(`bs_write_`)?`bs_write`:e,a=n[i]??r[i],o=t===`fr`?`Cliquer sur un nœud pour voir ses détails.`:`Click a node to see its details.`;if(!a)return(0,$.jsx)(`div`,{style:{padding:40,color:`#94a3b8`,fontSize:15,fontStyle:`italic`},children:o});let{title:s,color:l,nodeType:u,sections:d}=a;return(0,$.jsxs)(`div`,{style:{height:`100%`,display:`flex`,flexDirection:`column`},children:[(0,$.jsxs)(`div`,{style:{background:`linear-gradient(135deg, ${l}, ${l}cc)`,padding:`24px 28px`,flexShrink:0},children:[(0,$.jsx)(`div`,{style:{fontSize:11,opacity:.8,textTransform:`uppercase`,letterSpacing:`0.12em`,marginBottom:8,color:`white`,fontFamily:`system-ui, sans-serif`,fontWeight:600},children:u}),(0,$.jsx)(`div`,{style:{fontSize:26,fontWeight:700,lineHeight:1.2,color:`white`,fontFamily:`system-ui, sans-serif`},children:s})]}),(0,$.jsx)(`div`,{style:{flex:1,overflowY:`auto`,padding:`20px 24px`,animation:`slideIn 0.18s ease-out`},children:d.map((e,t)=>(0,$.jsxs)(`div`,{style:{background:`#f8fafc`,borderRadius:10,padding:`14px 18px`,marginBottom:14,border:`1px solid #e2e8f0`},children:[(0,$.jsx)(`div`,{style:{fontSize:11,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.1em`,color:`#94a3b8`,marginBottom:10,fontFamily:`system-ui, sans-serif`},children:e.heading}),e.items.map((e,t)=>(0,$.jsx)(Z1e,{item:e,nodeColor:l},t))]},t))},e)]})}var Z9={en:{plugin_label:`OpenCode Plugin`,hero_tagline:`A pure orchestrator. Plans the work, delegates everything to specialized sub-agents, reviews results, synthesizes and reports.`,pill_direct_access:`Direct code access`,pill_never:`never`,cta_workflow:`View workflow`,cta_workflow_full:`View full workflow`,back:`← Back`,click_node_hint:`Click a node →`,flowchart_subtitle:`Pure orchestrator · delegates everything · never touches code`,section_concept:`Concept & Philosophy`,concept_items:[{icon:`⊘`,text:`Never touches code directly — every technical action is delegated to a sub-agent`},{icon:`◈`,text:`Plan, delegate, review, synthesize — in that order, always`},{icon:`⟳`,text:`Deliberate and methodical — temperature 0.3, variant max`},{icon:`✦`,text:`Persistent working memory via scratchpad — survives context resets, overwritten at each new mission`},{icon:`⬡`,text:`Lifecycle tools enforce consistency at mission start — project_state() and check_artifacts() run before any planning`},{icon:`◉`,text:`Tone shaped by human-tone directives — direct, opinionated, concise. Disable with %%code%% in your config for raw behavior.`,code:`soul: false`}],section_memory:`Memory Management`,scratchpad_label:`Scratchpad`,scratchpad_items:[`Current mission state`,`Overwritten at each new mission`,`Survives context compaction`,`Read and written at 6 key moments in the workflow`],section_agents:`Available Agents`,agents:[{name:`brainstorm`,badge:`PHASE 0`,badgeColor:`#6d28d9`,badgeBg:`#ede9fe`,desc:`Discovery agent. Helps you articulate what to build before planning starts. Produces a structured product brief at docs/briefs/{project-name}.md.`},{name:`review-manager`,badge:`SUB-AGENT`,badgeColor:`#92400e`,badgeBg:`#fef3c7`,desc:`Review orchestrator. Spawns code-reviewer, security-reviewer and requirements-reviewer in parallel, then arbitrates verdicts.`},{name:`bug-finder`,badge:`DIAGNOSTIC`,badgeColor:`#991b1b`,badgeBg:`#fee2e2`,desc:`Structured bug investigation. Forces full root-cause analysis before any fix — prevents workarounds and code divergence.`},{name:`planning`,badge:`PLANNER`,badgeColor:`#0369a1`,badgeBg:`#e0f2fe`,desc:`Transforms complex or ambiguous requests into structured exec-plans written to docs/exec-plans/. Invoke before handing a large task to Orion.`},{name:`harness`,badge:`ENFORCER`,badgeColor:`#166534`,badgeBg:`#dcfce7`,desc:`Encodes recurring patterns as mechanical enforcement artifacts — ESLint rules, CI checks, AGENTS.md entries. Invoke when a pattern keeps being missed.`},{name:`gardener`,badge:`MAINTENANCE`,badgeColor:`#64748b`,badgeBg:`#f8fafc`,desc:`Periodic hygiene agent. Fixes stale docs, detects code drift, escalates recurring patterns to harness. Run post-feature or on explicit request.`}],section_review_cluster:`Review cluster`,review_cluster_subtitle:`Spawned in parallel by review-manager — never called directly`,review_cluster_agents:[{name:`requirements-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Verifies the implementation matches the original requirements. Spawned by review-manager.`},{name:`code-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Evaluates correctness, logic, error handling, and maintainability. Spawned by review-manager.`},{name:`security-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Identifies vulnerabilities, misconfigurations, and data exposure risks. Spawned by review-manager.`}],section_usecases:`Typical Use Cases`,usecases:[{label:`Implement a feature`,steps:[`explore maps the codebase`,`general implements`,`review-manager validates`],color:`#2563eb`},{label:`Fix a bug`,steps:[`bug-finder diagnoses the root-cause`,`general applies the fix`,`review-manager reviews`],color:`#dc2626`},{label:`Refactoring`,steps:[`explore maps dependencies`,`general refactors`,`review-manager approves`],color:`#7c3aed`},{label:`Security audit`,steps:[`review-manager spawns security-reviewer`,`vulnerability report`,`escalate if BLOCKED`],color:`#b45309`}],cta_config:`Configuration →`,back_to_intro:`← Back`,nav_config:`Configuration`,nav_workflow:`Workflow →`,config_title:`Configuration`,config_subtitle:`Per-agent overrides in opencode.json`,config_intro_heading:`How it works`,config_intro_body:`All agents can be configured per-agent in your opencode.json. The plugin applies its defaults first; your config overrides on top. The prompt field is always controlled by the plugin and cannot be overridden.`,config_merge_heading:`Merge strategy`,config_merge_body:`Top-level fields (temperature, variant, mode, color) are replaced by your value when present. Permission tool maps (bash, read, edit) are shallow-merged — your entries are additive, not a replacement.`,config_merge_note:`Example: adding npm run* to bash permissions extends the default git allowlist. Both sets of commands will be allowed.`,config_fields_heading:`Configurable fields — all agents`,config_fields_caption:`These fields apply to every agent registered by the plugin.`,config_fields:[{field:`temperature`,type:`number`,default:`varies`,description:`LLM sampling temperature. Lower = more deterministic.`},{field:`variant`,type:`string`,default:`"max"`,description:`Model variant: "max" for best quality, "fast" for speed.`},{field:`mode`,type:`string`,default:`varies`,description:`"all" = visible in agent list + usable as sub-agent. "subagent" = sub-agent only, invisible in main UI.`},{field:`color`,type:`string`,default:`varies`,description:`UI accent color: "error", "warning", "info", "success".`},{field:`description`,type:`string`,default:`hardcoded`,description:`Agent description shown in the UI.`},{field:`permission`,type:`object`,default:`varies`,description:`Tool access control map. Shallow-merged with plugin defaults for nested tools (bash, read, edit).`}],config_soul_heading:`team-lead only`,config_soul_fields:[{field:`soul`,type:`boolean`,default:`true`,description:`Append the human-tone personality directives to Orion's prompt. Set false for raw behavior.`}],config_defaults_heading:`Agent defaults`,config_defaults_expand:`Show details`,config_defaults_collapse:`Hide`,config_agent_defaults:[{name:`team-lead`,temperature:`0.3`,variant:`max`,mode:`all`,color:`error`,permissions:[`task: allow`,`todowrite: allow`,`todoread: allow`,`skill: allow`,`question: allow`,`distill: allow`,`prune: allow`,`compress: allow`,`read: allow (.opencode/scratchpad.md)`,`edit: allow (.opencode/scratchpad.md)`,`bash: allow (git status/diff/log/add/commit/push/tag only)`,`Everything else: deny`]},{name:`review-manager`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Everything else: deny`]},{name:`requirements-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Everything else: deny`]},{name:`code-reviewer`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Everything else: deny`]},{name:`security-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`error`,permissions:[`task: allow`,`Everything else: deny`]},{name:`bug-finder`,temperature:`0.2`,variant:`max`,mode:`all`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Everything else: deny`]},{name:`brainstorm`,temperature:`0.5`,variant:`max`,mode:`all`,color:`info`,permissions:[`task: allow`,`question: allow`,`webfetch: allow`,`read: allow (all project files)`,`write: allow (docs/briefs/** only)`,`Everything else: deny`]}],config_example_heading:`Example opencode.json`,config_example_note:`The bash permission above extends the default git allowlist — both sets of commands are allowed.`,config_limits_heading:`Fixed behaviors`,config_limits:[`Memory injection truncation: hardcoded at 50,000 characters`,`Scratchpad file path: .opencode/scratchpad.md (project root, not configurable)`],col_field:`Field`,col_type:`Type`,col_default:`Default`,col_description:`Description`,col_agent:`Agent`,col_temp:`Temp.`,col_variant:`Variant`,col_mode:`Mode`,col_color:`Color`,col_permissions:`Permissions`,tab_orion:`Orion workflow`,tab_brainstorm:`Brainstorm workflow`},fr:{plugin_label:`OpenCode Plugin`,hero_tagline:`Orchestrateur pur. Planifie le travail, délègue tout à des sous-agents spécialisés, review les résultats, synthétise et reporte.`,pill_direct_access:`Accès code direct`,pill_never:`jamais`,cta_workflow:`Voir le workflow`,cta_workflow_full:`Voir le workflow complet`,back:`← Retour`,click_node_hint:`Cliquer sur un nœud →`,flowchart_subtitle:`Orchestrateur pur · délègue tout · ne touche jamais au code`,section_concept:`Concept & philosophie`,concept_items:[{icon:`⊘`,text:`Ne touche jamais au code directement — toute action technique est déléguée`},{icon:`◈`,text:`Planifie, délègue, review, synthétise — dans cet ordre, toujours`},{icon:`⟳`,text:`Délibéré et méthodique — temperature 0.3, variant max`},{icon:`✦`,text:`Mémoire de travail persistante via scratchpad — survit aux resets de contexte, écrasé à chaque nouvelle mission`},{icon:`⬡`,text:`Les outils lifecycle assurent la cohérence au démarrage — project_state() et check_artifacts() s'exécutent avant toute planification`},{icon:`◉`,text:`Ton façonné par les directives human-tone — direct, tranché, concis. Désactivable via %%code%% dans la config.`,code:`soul: false`}],section_memory:`Gestion de la mémoire`,scratchpad_label:`Scratchpad`,scratchpad_items:[`État de la mission courante`,`Écrasé à chaque nouvelle mission`,`Survit à la compaction de contexte`,`Lu et écrit à 6 moments clés du workflow`],section_agents:`Les agents disponibles`,agents:[{name:`brainstorm`,badge:`PHASE 0`,badgeColor:`#6d28d9`,badgeBg:`#ede9fe`,desc:`Agent de découverte. Vous aide à articuler ce que vous voulez construire avant la planification. Produit un product brief dans docs/briefs/{project-name}.md.`},{name:`review-manager`,badge:`SUB-AGENT`,badgeColor:`#92400e`,badgeBg:`#fef3c7`,desc:`Orchestrateur de review. Spawne code-reviewer, security-reviewer et requirements-reviewer en parallèle, puis arbitre les verdicts.`},{name:`bug-finder`,badge:`DIAGNOSTIC`,badgeColor:`#991b1b`,badgeBg:`#fee2e2`,desc:`Investigation structurée de bugs. Force l'analyse root-cause complète avant tout fix — empêche les workarounds et la divergence.`},{name:`planning`,badge:`PLANIFICATEUR`,badgeColor:`#0369a1`,badgeBg:`#e0f2fe`,desc:`Transforme les demandes complexes ou ambiguës en exec-plans structurés dans docs/exec-plans/. À invoquer avant de confier une grande tâche à Orion.`},{name:`harness`,badge:`ENFORCEMENT`,badgeColor:`#166534`,badgeBg:`#dcfce7`,desc:`Encode les patterns récurrents en artefacts d'enforcement mécaniques — règles ESLint, jobs CI, entrées AGENTS.md. À invoquer quand un pattern est sans cesse oublié.`},{name:`gardener`,badge:`MAINTENANCE`,badgeColor:`#64748b`,badgeBg:`#f8fafc`,desc:`Agent de maintenance périodique. Corrige les docs obsolètes, détecte la dérive de code, remonte les patterns récurrents à harness. À lancer post-feature ou sur demande explicite.`}],section_review_cluster:`Cluster de review`,review_cluster_subtitle:`Lancés en parallèle par review-manager — jamais appelés directement`,review_cluster_agents:[{name:`requirements-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Vérifie que l'implémentation correspond aux exigences initiales. Lancé par review-manager.`},{name:`code-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Évalue la correction, la logique, la gestion d'erreurs et la maintenabilité. Lancé par review-manager.`},{name:`security-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Identifie les vulnérabilités, mauvaises configurations et risques d'exposition. Lancé par review-manager.`}],section_usecases:`Cas d'usage typiques`,usecases:[{label:`Implémenter une feature`,steps:[`explore cartographie le codebase`,`general implémente`,`review-manager valide`],color:`#2563eb`},{label:`Corriger un bug`,steps:[`bug-finder diagnostique la root-cause`,`general applique le fix`,`review-manager review`],color:`#dc2626`},{label:`Refactoring`,steps:[`explore mappe les dépendances`,`general refactorise`,`review-manager approuve`],color:`#7c3aed`},{label:`Audit de sécurité`,steps:[`review-manager spawne security-reviewer`,`rapport de vulnérabilités`,`escalade si BLOCKED`],color:`#b45309`}],cta_config:`Configuration →`,back_to_intro:`← Retour`,nav_config:`Configuration`,nav_workflow:`Workflow →`,config_title:`Configuration`,config_subtitle:`Surcharges par agent dans opencode.json`,config_intro_heading:`Fonctionnement`,config_intro_body:`Chaque agent peut être configuré individuellement dans votre opencode.json. Le plugin applique ses valeurs par défaut en premier ; votre config vient en surcharge par-dessus. Le champ prompt est toujours contrôlé par le plugin et ne peut pas être surchargé.`,config_merge_heading:`Stratégie de fusion`,config_merge_body:`Les champs de premier niveau (temperature, variant, mode, color) sont remplacés par votre valeur si elle est présente. Les maps d'outils dans permission (bash, read, edit) sont fusionnées superficiellement — vos entrées s'ajoutent aux défauts, elles ne les remplacent pas.`,config_merge_note:`Exemple : ajouter npm run* aux permissions bash étend la liste git par défaut. Les deux ensembles de commandes seront autorisés.`,config_fields_heading:`Champs configurables — tous les agents`,config_fields_caption:`Ces champs s'appliquent à chaque agent enregistré par le plugin.`,config_fields:[{field:`temperature`,type:`number`,default:`variable`,description:`Température d'échantillonnage LLM. Plus bas = plus déterministe.`},{field:`variant`,type:`string`,default:`"max"`,description:`Variante de modèle : "max" pour la meilleure qualité, "fast" pour la vitesse.`},{field:`mode`,type:`string`,default:`variable`,description:`"all" = visible dans la liste + utilisable en sous-agent. "subagent" = sous-agent uniquement, invisible dans l'UI.`},{field:`color`,type:`string`,default:`variable`,description:`Couleur d'accentuation UI : "error", "warning", "info", "success".`},{field:`description`,type:`string`,default:`intégrée`,description:`Description de l'agent affichée dans l'UI.`},{field:`permission`,type:`object`,default:`variable`,description:`Map de contrôle d'accès aux outils. Fusionnée superficiellement avec les défauts du plugin pour les outils imbriqués (bash, read, edit).`}],config_soul_heading:`team-lead uniquement`,config_soul_fields:[{field:`soul`,type:`boolean`,default:`true`,description:`Injecte les directives de personnalité human-tone dans le prompt d'Orion. Mettre false pour le comportement brut.`}],config_defaults_heading:`Défauts par agent`,config_defaults_expand:`Voir les détails`,config_defaults_collapse:`Masquer`,config_agent_defaults:[{name:`team-lead`,temperature:`0.3`,variant:`max`,mode:`all`,color:`error`,permissions:[`task: allow`,`todowrite: allow`,`todoread: allow`,`skill: allow`,`question: allow`,`distill: allow`,`prune: allow`,`compress: allow`,`read: allow (.opencode/scratchpad.md)`,`edit: allow (.opencode/scratchpad.md)`,`bash: allow (git status/diff/log/add/commit/push/tag uniquement)`,`Tout le reste : deny`]},{name:`review-manager`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Tout le reste : deny`]},{name:`requirements-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`code-reviewer`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`security-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`error`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`bug-finder`,temperature:`0.2`,variant:`max`,mode:`all`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Tout le reste : deny`]},{name:`brainstorm`,temperature:`0.5`,variant:`max`,mode:`all`,color:`info`,permissions:[`task: allow`,`question: allow`,`webfetch: allow`,`read: allow (tous les fichiers du projet)`,`write: allow (docs/briefs/** uniquement)`,`Tout le reste : deny`]}],config_example_heading:`Exemple opencode.json`,config_example_note:`La permission bash ci-dessus étend la liste git par défaut — les deux ensembles de commandes sont autorisés.`,config_limits_heading:`Comportements figés`,config_limits:[`Troncature de l'injection mémoire : fixée à 50 000 caractères`,`Chemin du scratchpad : .opencode/scratchpad.md (racine du projet, non configurable)`],col_field:`Champ`,col_type:`Type`,col_default:`Défaut`,col_description:`Description`,col_agent:`Agent`,col_temp:`Temp.`,col_variant:`Variante`,col_mode:`Mode`,col_color:`Couleur`,col_permissions:`Permissions`,tab_orion:`Workflow Orion`,tab_brainstorm:`Workflow Brainstorm`}};function Q9({lang:e,setLang:t,dark:n=!1}){let r={background:`none`,border:`none`,cursor:`pointer`,fontSize:12,fontWeight:700,letterSpacing:`0.08em`,fontFamily:`system-ui, sans-serif`,padding:`3px 7px`,borderRadius:4,transition:`background 0.12s`},i=n?`white`:`#0f172a`,a=n?`#64748b`:`#94a3b8`,o=n?`rgba(255,255,255,0.12)`:`#f1f5f9`;return(0,$.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:2},children:[`en`,`fr`].map((s,l)=>(0,$.jsxs)(S.Fragment,{children:[l>0&&(0,$.jsx)(`span`,{style:{color:n?`#334155`:`#e2e8f0`,fontSize:12},children:`|`}),(0,$.jsx)(`button`,{onClick:()=>t(s),style:{...r,color:e===s?i:a,background:e===s?o:`none`,textDecoration:e===s?`underline`:`none`,textUnderlineOffset:3},children:s.toUpperCase()})]},s))})}function $1e({onEnter:e,onConfig:t,lang:n,setLang:r}){let i=Z9[n];return(0,$.jsxs)(`div`,{style:{height:`100vh`,width:`100vw`,overflowY:`auto`,fontFamily:`system-ui, 'Segoe UI', sans-serif`,background:`#f8f9fa`,animation:`fadeIn 0.3s ease-out`},children:[(0,$.jsxs)(`div`,{style:{background:`#0f172a`,padding:`56px 48px 48px`,position:`relative`,overflow:`hidden`},children:[(0,$.jsx)(`div`,{style:{position:`absolute`,inset:0,backgroundImage:`radial-gradient(circle, rgba(255,255,255,0.03) 1px, transparent 1px)`,backgroundSize:`28px 28px`,pointerEvents:`none`}}),(0,$.jsx)(`div`,{style:{position:`absolute`,top:20,right:24},children:(0,$.jsx)(Q9,{lang:n,setLang:r,dark:!0})}),(0,$.jsxs)(`div`,{style:{position:`relative`,maxWidth:860,margin:`0 auto`},children:[(0,$.jsx)(`div`,{style:{display:`inline-block`,background:`rgba(99,102,241,0.2)`,color:`#a5b4fc`,border:`1px solid rgba(99,102,241,0.35)`,borderRadius:4,padding:`3px 10px`,fontSize:11,fontWeight:700,letterSpacing:`0.12em`,textTransform:`uppercase`,marginBottom:20},children:i.plugin_label}),(0,$.jsx)(`h1`,{style:{fontSize:44,fontWeight:800,color:`white`,margin:`0 0 12px`,lineHeight:1.1,letterSpacing:`-0.02em`},children:`team-lead`}),(0,$.jsx)(`p`,{style:{fontSize:18,color:`#94a3b8`,margin:`0 0 36px`,lineHeight:1.5,maxWidth:560},children:i.hero_tagline}),(0,$.jsx)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`,marginBottom:40},children:[{label:`Temperature`,value:`0.3`},{label:`Variant`,value:`max`},{label:i.pill_direct_access,value:i.pill_never}].map(e=>(0,$.jsxs)(`div`,{style:{background:`rgba(255,255,255,0.06)`,border:`1px solid rgba(255,255,255,0.1)`,borderRadius:6,padding:`6px 14px`,display:`flex`,gap:8,alignItems:`center`},children:[(0,$.jsx)(`span`,{style:{fontSize:11,color:`#64748b`,textTransform:`uppercase`,letterSpacing:`0.08em`,fontWeight:600},children:e.label}),(0,$.jsx)(`span`,{style:{fontSize:13,color:`#e2e8f0`,fontWeight:700},children:e.value})]},e.label))}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:12,alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsxs)(`button`,{onClick:e,style:{background:`#4f46e5`,color:`white`,border:`none`,borderRadius:8,padding:`13px 28px`,fontSize:15,fontWeight:700,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8,boxShadow:`0 4px 14px rgba(79,70,229,0.4)`,transition:`background 0.15s, transform 0.1s`},onMouseEnter:e=>{e.currentTarget.style.background=`#4338ca`},onMouseLeave:e=>{e.currentTarget.style.background=`#4f46e5`},children:[i.cta_workflow,(0,$.jsx)(`span`,{style:{fontSize:16},children:`→`})]}),(0,$.jsx)(`button`,{onClick:t,style:{background:`none`,color:`#94a3b8`,border:`1px solid rgba(255,255,255,0.15)`,borderRadius:8,padding:`12px 22px`,fontSize:14,fontWeight:600,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8,transition:`border-color 0.15s, color 0.15s`},onMouseEnter:e=>{e.currentTarget.style.borderColor=`rgba(255,255,255,0.35)`,e.currentTarget.style.color=`#e2e8f0`},onMouseLeave:e=>{e.currentTarget.style.borderColor=`rgba(255,255,255,0.15)`,e.currentTarget.style.color=`#94a3b8`},children:i.cta_config})]})]})]}),(0,$.jsxs)(`div`,{style:{maxWidth:860,margin:`0 auto`,padding:`40px 48px 60px`},children:[(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_concept}),(0,$.jsx)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`24px 28px`,display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:16},children:i.concept_items.map((e,t)=>{let n=e.code?e.text.split(`%%code%%`):null;return(0,$.jsxs)(`div`,{style:{display:`flex`,gap:14,alignItems:`flex-start`},children:[(0,$.jsx)(`span`,{style:{fontSize:18,color:`#6366f1`,flexShrink:0,marginTop:1},children:e.icon}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#374151`,lineHeight:1.6},children:n?(0,$.jsxs)($.Fragment,{children:[n[0],(0,$.jsx)(`code`,{style:{fontFamily:`monospace`,fontSize:12,background:`#f1f5f9`,border:`1px solid #e2e8f0`,borderRadius:4,padding:`1px 5px`,color:`#0f172a`},children:e.code}),n[1]]}):e.text})]},t)})})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_memory}),(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #bae6fd`,borderRadius:10,padding:`20px 22px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:12},children:[(0,$.jsx)(`span`,{style:{fontSize:16},children:`📄`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{style:{fontSize:14,fontWeight:700,color:`#0369a1`},children:i.scratchpad_label}),(0,$.jsx)(`code`,{style:{fontSize:11,color:`#64748b`,fontFamily:`ui-monospace, monospace`},children:`scratchpad.md`})]})]}),i.scratchpad_items.map((e,t)=>(0,$.jsx)(e0e,{text:e,color:`#0369a1`},t))]})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_agents}),(0,$.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:14},children:i.agents.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`18px 20px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:10},children:[(0,$.jsx)(`code`,{style:{fontSize:14,fontWeight:700,color:`#0f172a`,fontFamily:`ui-monospace, monospace`,background:`#f1f5f9`,padding:`2px 8px`,borderRadius:4},children:e.name}),(0,$.jsx)(`span`,{style:{fontSize:10,fontWeight:700,letterSpacing:`0.1em`,color:e.badgeColor,background:e.badgeBg,padding:`2px 7px`,borderRadius:3},children:e.badge})]}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#4b5563`,lineHeight:1.6,margin:0},children:e.desc})]},e.name))})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_review_cluster}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#64748b`,marginBottom:14,marginTop:-4},children:i.review_cluster_subtitle}),(0,$.jsx)(`div`,{style:{border:`1px dashed #cbd5e1`,borderRadius:10,padding:`16px 16px 2px`,background:`#f8fafc`},children:(0,$.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr 1fr`,gap:12},children:i.review_cluster_agents.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:8,padding:`14px 16px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,marginBottom:8,flexWrap:`wrap`},children:[(0,$.jsx)(`code`,{style:{fontSize:13,fontWeight:700,color:`#0f172a`,fontFamily:`ui-monospace, monospace`,background:`#f1f5f9`,padding:`2px 7px`,borderRadius:4},children:e.name}),(0,$.jsx)(`span`,{style:{fontSize:10,fontWeight:700,letterSpacing:`0.1em`,color:e.badgeColor,background:e.badgeBg,padding:`2px 7px`,borderRadius:3},children:e.badge})]}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#4b5563`,lineHeight:1.6,margin:0},children:e.desc})]},e.name))})})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_usecases}),(0,$.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:12},children:i.usecases.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`16px 20px`,display:`flex`,alignItems:`center`,gap:16},children:[(0,$.jsx)(`div`,{style:{width:4,borderRadius:2,alignSelf:`stretch`,background:e.color,flexShrink:0}}),(0,$.jsx)(`div`,{style:{minWidth:200,fontSize:14,fontWeight:600,color:`#0f172a`},children:e.label}),(0,$.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,flexWrap:`wrap`},children:e.steps.map((t,n)=>(0,$.jsxs)(`span`,{style:{display:`flex`,alignItems:`center`,gap:6},children:[(0,$.jsx)(`span`,{style:{fontSize:12,color:`#475569`,background:`#f8fafc`,border:`1px solid #e2e8f0`,borderRadius:5,padding:`3px 9px`},children:t}),n{e.currentTarget.style.background=`#1e293b`},onMouseLeave:e=>{e.currentTarget.style.background=`#0f172a`},children:[i.cta_workflow_full,(0,$.jsx)(`span`,{style:{fontSize:16},children:`→`})]}),(0,$.jsx)(`button`,{onClick:t,style:{background:`none`,color:`#64748b`,border:`1px solid #e2e8f0`,borderRadius:8,padding:`12px 24px`,fontSize:14,fontWeight:600,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8},onMouseEnter:e=>{e.currentTarget.style.background=`#f8fafc`,e.currentTarget.style.color=`#0f172a`},onMouseLeave:e=>{e.currentTarget.style.background=`none`,e.currentTarget.style.color=`#64748b`},children:i.cta_config})]})]})]})}function $9({children:e}){return(0,$.jsx)(`div`,{style:{fontSize:13,fontWeight:700,textTransform:`uppercase`,letterSpacing:`0.1em`,color:`#64748b`,marginBottom:14},children:e})}function e0e({text:e,color:t}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:9,marginBottom:7},children:[(0,$.jsx)(`span`,{style:{width:6,height:6,borderRadius:`50%`,background:t+`60`,border:`1.5px solid ${t}`,flexShrink:0,marginTop:6}}),(0,$.jsx)(`span`,{style:{fontSize:13,color:`#374151`,lineHeight:1.5},children:e})]})}var t0e=`{ + class START,END terminal`}var J1e={START:`phase_start`,END:`phase_end`,P0_GLOB:`phase0_glob`,P0_COUNT:`phase0_count`,P0_NONE:`phase0_none`,P0_ONE:`phase0_one`,P0_DRAFT_ASK:`phase0_draft_ask`,P0_DONE_ASK:`phase0_done_ask`,P0_MANY:`phase0_many`,P0_LOAD:`phase0_load`,P0_STEP1:`phase0_step1`,P0_RUN:`phase0_run_brainstorm`,P0_BRIEF:`phase0_produce_brief`,P1_READ:`phase1_read_sp`,P1_STATE:`phase1_project_state`,P1_INTENT:`phase1_clarify`,P1_TODO:`phase1_todowrite`,P1_COMPRESS:`phase1_compress`,P2_BUG:`phase2_bug`,P2_BUGFINDER:`phase2_bug_finder`,P2_SELECT:`phase2_select_agent`,P2_HANDOFF:`phase2_handoff`,P2_SUCCESS:`phase2_success`,P2_RETRY:`phase2_retry`,P2_ESC:`phase2_esc_user`,P3_RM:`phase3_delegate_rm`,P3_VERDICT:`phase3_verdict`,P3_FIX:`phase3_resume_fix`,P3_BLOCKED:`phase3_blocked_esc`,P4_EVAL:`phase4_self_eval`,P4_GAP:`phase4_gap`,P4_MINOR:`phase4_minor`,P4_SCOPE:`phase4_scope`,P4_SP:`phase4_sp_capture`,P4_REPORT:`phase4_report`,P5_PAT:`phase5_pattern`,P5_HARNESS:`phase5_harness`,P5_GARDENER:`phase5_gardener`,P5_RECUR:`phase5_recurring`,P5_ESC_H:`phase5_esc_harness`,P0:`phase0`,P1:`phase1`,P2:`phase2`,P3:`phase3`,P4:`phase4`,P5:`phase5`};function Y1e({lang:e,onNodeClick:t}){let n=(0,S.useRef)(null);return(0,S.useEffect)(()=>{if(!n.current)return;W1e.initialize({startOnLoad:!1,theme:`base`,flowchart:{curve:`basis`,htmlLabels:!0,padding:20},themeVariables:{primaryColor:`#1d4ed8`,primaryTextColor:`#ffffff`,primaryBorderColor:`#1e40af`,lineColor:`#475569`,secondaryColor:`#f1f5f9`,tertiaryColor:`#e2e8f0`,fontFamily:`system-ui, -apple-system, sans-serif`,fontSize:`14px`}});let r=q1e(e),i=`main-flowchart-${Date.now()}`;W1e.render(i,r).then(({svg:e})=>{if(!n.current)return;n.current.innerHTML=e;let r=n.current.querySelector(`svg`);if(r){r.style.width=`100%`,r.style.maxWidth=`100%`,r.style.height=`auto`;let e=document.createElementNS(`http://www.w3.org/2000/svg`,`style`);e.textContent=` + .edgeLabel { + background-color: #1e293b !important; + padding: 2px 6px; + border-radius: 4px; + } + .edgeLabel span, .edgeLabel p, .edgeLabel foreignObject div { + color: #ffffff !important; + font-weight: 600 !important; + font-size: 12px !important; + background-color: #1e293b !important; + padding: 1px 4px; + border-radius: 3px; + } + .edgeLabel rect { + fill: #1e293b !important; + stroke: #334155 !important; + } +`,r.insertBefore(e,r.firstChild),r.querySelectorAll(`g.node`).forEach(e=>{let n=(e.id||``).match(/flowchart-([A-Z0-9_]+)-\d+/);if(n){let r=J1e[n[1]];r&&(e.style.cursor=`pointer`,e.addEventListener(`click`,()=>t(r)))}}),r.querySelectorAll(`g.cluster`).forEach(e=>{e.querySelector(`.cluster-label span, .nodeLabel`)&&(e.style.cursor=`pointer`)})}}).catch(e=>{console.error(`Mermaid render error:`,e),n.current&&(n.current.innerHTML=`
Diagram render error. Check console.
`)})},[e,t]),(0,$.jsx)(`div`,{style:{width:`100%`,overflowX:`auto`,padding:`24px`},children:(0,$.jsx)(`div`,{ref:n,style:{minWidth:`800px`}})})}function J9({children:e}){return(0,$.jsx)($.Fragment,{children:e.split(/(`[^`]+`)/g).map((e,t)=>e.startsWith("`")&&e.endsWith("`")?(0,$.jsx)(`code`,{style:{background:`#1e293b`,color:`#e2e8f0`,padding:`2px 6px`,borderRadius:4,fontSize:13,fontFamily:`ui-monospace, monospace`},children:e.slice(1,-1)},t):(0,$.jsx)(`span`,{children:e},t))})}function Y9({color:e,label:t,rest:n}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:10,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{background:e+`20`,color:e,border:`1px solid ${e}40`,borderRadius:4,padding:`2px 8px`,fontSize:11,fontWeight:700,whiteSpace:`nowrap`,marginTop:3,flexShrink:0,fontFamily:`system-ui, sans-serif`},children:t}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.6,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:n.replace(/^[ →]+/,`→ `)})})]})}function X9({icon:e,color:t,text:n}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:10,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{color:t,fontWeight:700,fontSize:14,marginTop:2,flexShrink:0},children:e}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.6,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:n.replace(/^[ →]+/,``)})})]})}function X1e({item:e,nodeColor:t}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:12,marginBottom:8},children:[(0,$.jsx)(`span`,{style:{marginTop:8,width:7,height:7,borderRadius:`50%`,background:t+`60`,border:`1.5px solid ${t}`,flexShrink:0}}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#334155`,lineHeight:1.7,fontFamily:`system-ui, sans-serif`},children:(0,$.jsx)(J9,{children:e})})]})}function Z1e({item:e,nodeColor:t}){return e.startsWith(`HIGH →`)||e.startsWith(`HIGH /`)?(0,$.jsx)(Y9,{color:`#16a34a`,label:`HIGH`,rest:e.slice(4)}):e.startsWith(`MEDIUM`)?(0,$.jsx)(Y9,{color:`#d97706`,label:`MEDIUM`,rest:e.slice(6)}):e.startsWith(`UNCERTAINTY_EXPOSED`)?(0,$.jsx)(Y9,{color:`#dc2626`,label:`UNCERTAINTY`,rest:e.slice(19)}):e.startsWith(`APPROVED`)?(0,$.jsx)(Y9,{color:`#16a34a`,label:`APPROVED`,rest:e.slice(8)}):e.startsWith(`CHANGES_REQUESTED`)?(0,$.jsx)(Y9,{color:`#d97706`,label:`CHANGES`,rest:e.slice(17)}):e.startsWith(`BLOCKED`)?(0,$.jsx)(Y9,{color:`#dc2626`,label:`BLOCKED`,rest:e.slice(7)}):e.startsWith(`OUI`)?(0,$.jsx)(X9,{icon:`→`,color:`#22c55e`,text:e.slice(3)}):e.startsWith(`NON`)?(0,$.jsx)(X9,{icon:`→`,color:`#6b7280`,text:e.slice(3)}):e.startsWith(`YES`)?(0,$.jsx)(X9,{icon:`→`,color:`#22c55e`,text:e.slice(3)}):e.startsWith(`NO →`)||e.startsWith(`NO `)?(0,$.jsx)(X9,{icon:`→`,color:`#6b7280`,text:e.slice(2)}):e.startsWith(`OK →`)?(0,$.jsx)(X9,{icon:`→`,color:`#16a34a`,text:e.slice(2)}):(0,$.jsx)(X1e,{item:e,nodeColor:t})}function Q1e({nodeId:e,lang:t}){let{details:n,brainstormDetails:r}=K1e(t),i=e.startsWith(`bs_write_`)?`bs_write`:e,a=n[i]??r[i],o=t===`fr`?`Cliquer sur un nœud pour voir ses détails.`:`Click a node to see its details.`;if(!a)return(0,$.jsx)(`div`,{style:{padding:40,color:`#94a3b8`,fontSize:15,fontStyle:`italic`},children:o});let{title:s,color:l,nodeType:u,sections:d}=a;return(0,$.jsxs)(`div`,{style:{height:`100%`,display:`flex`,flexDirection:`column`},children:[(0,$.jsxs)(`div`,{style:{background:`linear-gradient(135deg, ${l}, ${l}cc)`,padding:`24px 28px`,flexShrink:0},children:[(0,$.jsx)(`div`,{style:{fontSize:11,opacity:.8,textTransform:`uppercase`,letterSpacing:`0.12em`,marginBottom:8,color:`white`,fontFamily:`system-ui, sans-serif`,fontWeight:600},children:u}),(0,$.jsx)(`div`,{style:{fontSize:26,fontWeight:700,lineHeight:1.2,color:`white`,fontFamily:`system-ui, sans-serif`},children:s})]}),(0,$.jsx)(`div`,{style:{flex:1,overflowY:`auto`,padding:`20px 24px`,animation:`slideIn 0.18s ease-out`},children:d.map((e,t)=>(0,$.jsxs)(`div`,{style:{background:`#f8fafc`,borderRadius:10,padding:`14px 18px`,marginBottom:14,border:`1px solid #e2e8f0`},children:[(0,$.jsx)(`div`,{style:{fontSize:11,fontWeight:600,textTransform:`uppercase`,letterSpacing:`0.1em`,color:`#94a3b8`,marginBottom:10,fontFamily:`system-ui, sans-serif`},children:e.heading}),e.items.map((e,t)=>(0,$.jsx)(Z1e,{item:e,nodeColor:l},t))]},t))},e)]})}var Z9={en:{plugin_label:`OpenCode Plugin`,hero_tagline:`A pure orchestrator. Plans the work, delegates everything to specialized sub-agents, reviews results, synthesizes and reports.`,pill_direct_access:`Direct code access`,pill_never:`never`,cta_workflow:`View workflow`,cta_workflow_full:`View full workflow`,back:`← Back`,click_node_hint:`Click a node →`,flowchart_subtitle:`Pure orchestrator · delegates everything · never touches code`,section_concept:`Concept & Philosophy`,concept_items:[{icon:`⊘`,text:`Never touches code directly — every technical action is delegated to a sub-agent`},{icon:`◈`,text:`Plan, delegate, review, synthesize — in that order, always`},{icon:`⟳`,text:`Deliberate and methodical — temperature 0.3, variant max`},{icon:`✦`,text:`Persistent working memory via scratchpad — survives context resets, overwritten at each new mission`},{icon:`⬡`,text:`Lifecycle tools enforce consistency at mission start — project_state() and check_artifacts() run before any planning`},{icon:`◉`,text:`Tone shaped by human-tone directives — direct, opinionated, concise. Disable with %%code%% in your config for raw behavior.`,code:`soul: false`}],section_memory:`Memory Management`,scratchpad_label:`Scratchpad`,scratchpad_items:[`Current mission state`,`Overwritten at each new mission`,`Survives context compaction`,`Read and written at 6 key moments in the workflow`],section_agents:`Available Agents`,agents:[{name:`brainstorm`,badge:`PHASE 0`,badgeColor:`#6d28d9`,badgeBg:`#ede9fe`,desc:`Discovery agent. Helps you articulate what to build before planning starts. Produces a structured product brief at docs/briefs/{project-name}.md.`},{name:`review-manager`,badge:`SUB-AGENT`,badgeColor:`#92400e`,badgeBg:`#fef3c7`,desc:`Review orchestrator. Spawns code-reviewer, security-reviewer and requirements-reviewer in parallel, then arbitrates verdicts.`},{name:`bug-finder`,badge:`DIAGNOSTIC`,badgeColor:`#991b1b`,badgeBg:`#fee2e2`,desc:`Structured bug investigation. Forces full root-cause analysis before any fix — prevents workarounds and code divergence.`},{name:`planning`,badge:`PLANNER`,badgeColor:`#0369a1`,badgeBg:`#e0f2fe`,desc:`Transforms complex or ambiguous requests into structured exec-plans written to docs/exec-plans/. Invoke before handing a large task to Orion.`},{name:`harness`,badge:`ENFORCER`,badgeColor:`#166534`,badgeBg:`#dcfce7`,desc:`Encodes recurring patterns as mechanical enforcement artifacts — ESLint rules, CI checks, AGENTS.md entries. Invoke when a pattern keeps being missed.`},{name:`gardener`,badge:`MAINTENANCE`,badgeColor:`#64748b`,badgeBg:`#f8fafc`,desc:`Periodic hygiene agent. Fixes stale docs, detects code drift, escalates recurring patterns to harness. Run post-feature or on explicit request.`}],section_review_cluster:`Review cluster`,review_cluster_subtitle:`Spawned in parallel by review-manager — never called directly`,review_cluster_agents:[{name:`requirements-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Verifies the implementation matches the original requirements. Spawned by review-manager.`},{name:`code-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Evaluates correctness, logic, error handling, and maintainability. Spawned by review-manager.`},{name:`security-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Identifies vulnerabilities, misconfigurations, and data exposure risks. Spawned by review-manager.`}],section_usecases:`Typical Use Cases`,usecases:[{label:`Implement a feature`,steps:[`explore maps the codebase`,`general implements`,`review-manager validates`],color:`#2563eb`},{label:`Fix a bug`,steps:[`bug-finder diagnoses the root-cause`,`general applies the fix`,`review-manager reviews`],color:`#dc2626`},{label:`Refactoring`,steps:[`explore maps dependencies`,`general refactors`,`review-manager approves`],color:`#7c3aed`},{label:`Security audit`,steps:[`review-manager spawns security-reviewer`,`vulnerability report`,`escalate if BLOCKED`],color:`#b45309`}],cta_config:`Configuration →`,back_to_intro:`← Back`,nav_config:`Configuration`,nav_workflow:`Workflow →`,config_title:`Configuration`,config_subtitle:`Per-agent overrides in opencode.json`,config_intro_heading:`How it works`,config_intro_body:`All agents can be configured per-agent in your opencode.json. The plugin applies its defaults first; your config overrides on top. The prompt field is always controlled by the plugin and cannot be overridden.`,config_merge_heading:`Merge strategy`,config_merge_body:`Top-level fields (temperature, variant, mode, color) are replaced by your value when present. Permission tool maps (bash, read, edit) are shallow-merged — your entries are additive, not a replacement.`,config_merge_note:`Example: adding npm run* to bash permissions extends the default git allowlist. Both sets of commands will be allowed.`,config_fields_heading:`Configurable fields — all agents`,config_fields_caption:`These fields apply to every agent registered by the plugin.`,config_fields:[{field:`temperature`,type:`number`,default:`varies`,description:`LLM sampling temperature. Lower = more deterministic.`},{field:`variant`,type:`string`,default:`"max"`,description:`Model variant: "max" for best quality, "fast" for speed.`},{field:`mode`,type:`string`,default:`varies`,description:`"all" = visible in agent list + usable as sub-agent. "subagent" = sub-agent only, invisible in main UI.`},{field:`color`,type:`string`,default:`varies`,description:`UI accent color: "error", "warning", "info", "success".`},{field:`description`,type:`string`,default:`hardcoded`,description:`Agent description shown in the UI.`},{field:`permission`,type:`object`,default:`varies`,description:`Tool access control map. Shallow-merged with plugin defaults for nested tools (bash, read, edit).`}],config_soul_heading:`team-lead only`,config_soul_fields:[{field:`soul`,type:`boolean`,default:`true`,description:`Append the human-tone personality directives to Orion's prompt. Set false for raw behavior.`}],config_defaults_heading:`Agent defaults`,config_defaults_expand:`Show details`,config_defaults_collapse:`Hide`,config_agent_defaults:[{name:`team-lead`,temperature:`0.3`,variant:`max`,mode:`all`,color:`error`,permissions:[`task: allow`,`todowrite: allow`,`todoread: allow`,`skill: allow`,`question: allow`,`distill: allow`,`prune: allow`,`compress: allow`,`read: allow (.opencode/scratchpad.md)`,`edit: allow (.opencode/scratchpad.md)`,`bash: allow (git status/diff/log/add/commit/push/tag only)`,`Everything else: deny`]},{name:`review-manager`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Everything else: deny`]},{name:`requirements-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Everything else: deny`]},{name:`code-reviewer`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Everything else: deny`]},{name:`security-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`error`,permissions:[`task: allow`,`Everything else: deny`]},{name:`bug-finder`,temperature:`0.2`,variant:`max`,mode:`all`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Everything else: deny`]},{name:`brainstorm`,temperature:`0.5`,variant:`max`,mode:`all`,color:`info`,permissions:[`task: allow`,`question: allow`,`webfetch: allow`,`read: allow (all project files)`,`write: allow (docs/briefs/** only)`,`Everything else: deny`]}],config_example_heading:`Example opencode.json`,config_example_note:`The bash permission above extends the default git allowlist — both sets of commands are allowed.`,config_limits_heading:`Fixed behaviors`,config_limits:[`Memory injection truncation: hardcoded at 50,000 characters`,`Scratchpad file path: .opencode/scratchpad.md (project root, not configurable)`],col_field:`Field`,col_type:`Type`,col_default:`Default`,col_description:`Description`,col_agent:`Agent`,col_temp:`Temp.`,col_variant:`Variant`,col_mode:`Mode`,col_color:`Color`,col_permissions:`Permissions`,tab_orion:`Orion workflow`,tab_brainstorm:`Brainstorm workflow`},fr:{plugin_label:`OpenCode Plugin`,hero_tagline:`Orchestrateur pur. Planifie le travail, délègue tout à des sous-agents spécialisés, review les résultats, synthétise et reporte.`,pill_direct_access:`Accès code direct`,pill_never:`jamais`,cta_workflow:`Voir le workflow`,cta_workflow_full:`Voir le workflow complet`,back:`← Retour`,click_node_hint:`Cliquer sur un nœud →`,flowchart_subtitle:`Orchestrateur pur · délègue tout · ne touche jamais au code`,section_concept:`Concept & philosophie`,concept_items:[{icon:`⊘`,text:`Ne touche jamais au code directement — toute action technique est déléguée`},{icon:`◈`,text:`Planifie, délègue, review, synthétise — dans cet ordre, toujours`},{icon:`⟳`,text:`Délibéré et méthodique — temperature 0.3, variant max`},{icon:`✦`,text:`Mémoire de travail persistante via scratchpad — survit aux resets de contexte, écrasé à chaque nouvelle mission`},{icon:`⬡`,text:`Les outils lifecycle assurent la cohérence au démarrage — project_state() et check_artifacts() s'exécutent avant toute planification`},{icon:`◉`,text:`Ton façonné par les directives human-tone — direct, tranché, concis. Désactivable via %%code%% dans la config.`,code:`soul: false`}],section_memory:`Gestion de la mémoire`,scratchpad_label:`Scratchpad`,scratchpad_items:[`État de la mission courante`,`Écrasé à chaque nouvelle mission`,`Survit à la compaction de contexte`,`Lu et écrit à 6 moments clés du workflow`],section_agents:`Les agents disponibles`,agents:[{name:`brainstorm`,badge:`PHASE 0`,badgeColor:`#6d28d9`,badgeBg:`#ede9fe`,desc:`Agent de découverte. Vous aide à articuler ce que vous voulez construire avant la planification. Produit un product brief dans docs/briefs/{project-name}.md.`},{name:`review-manager`,badge:`SUB-AGENT`,badgeColor:`#92400e`,badgeBg:`#fef3c7`,desc:`Orchestrateur de review. Spawne code-reviewer, security-reviewer et requirements-reviewer en parallèle, puis arbitre les verdicts.`},{name:`bug-finder`,badge:`DIAGNOSTIC`,badgeColor:`#991b1b`,badgeBg:`#fee2e2`,desc:`Investigation structurée de bugs. Force l'analyse root-cause complète avant tout fix — empêche les workarounds et la divergence.`},{name:`planning`,badge:`PLANIFICATEUR`,badgeColor:`#0369a1`,badgeBg:`#e0f2fe`,desc:`Transforme les demandes complexes ou ambiguës en exec-plans structurés dans docs/exec-plans/. À invoquer avant de confier une grande tâche à Orion.`},{name:`harness`,badge:`ENFORCEMENT`,badgeColor:`#166534`,badgeBg:`#dcfce7`,desc:`Encode les patterns récurrents en artefacts d'enforcement mécaniques — règles ESLint, jobs CI, entrées AGENTS.md. À invoquer quand un pattern est sans cesse oublié.`},{name:`gardener`,badge:`MAINTENANCE`,badgeColor:`#64748b`,badgeBg:`#f8fafc`,desc:`Agent de maintenance périodique. Corrige les docs obsolètes, détecte la dérive de code, remonte les patterns récurrents à harness. À lancer post-feature ou sur demande explicite.`}],section_review_cluster:`Cluster de review`,review_cluster_subtitle:`Lancés en parallèle par review-manager — jamais appelés directement`,review_cluster_agents:[{name:`requirements-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Vérifie que l'implémentation correspond aux exigences initiales. Lancé par review-manager.`},{name:`code-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Évalue la correction, la logique, la gestion d'erreurs et la maintenabilité. Lancé par review-manager.`},{name:`security-reviewer`,badge:`INTERNAL`,badgeColor:`#475569`,badgeBg:`#f1f5f9`,desc:`Identifie les vulnérabilités, mauvaises configurations et risques d'exposition. Lancé par review-manager.`}],section_usecases:`Cas d'usage typiques`,usecases:[{label:`Implémenter une feature`,steps:[`explore cartographie le codebase`,`general implémente`,`review-manager valide`],color:`#2563eb`},{label:`Corriger un bug`,steps:[`bug-finder diagnostique la root-cause`,`general applique le fix`,`review-manager review`],color:`#dc2626`},{label:`Refactoring`,steps:[`explore mappe les dépendances`,`general refactorise`,`review-manager approuve`],color:`#7c3aed`},{label:`Audit de sécurité`,steps:[`review-manager spawne security-reviewer`,`rapport de vulnérabilités`,`escalade si BLOCKED`],color:`#b45309`}],cta_config:`Configuration →`,back_to_intro:`← Retour`,nav_config:`Configuration`,nav_workflow:`Workflow →`,config_title:`Configuration`,config_subtitle:`Surcharges par agent dans opencode.json`,config_intro_heading:`Fonctionnement`,config_intro_body:`Chaque agent peut être configuré individuellement dans votre opencode.json. Le plugin applique ses valeurs par défaut en premier ; votre config vient en surcharge par-dessus. Le champ prompt est toujours contrôlé par le plugin et ne peut pas être surchargé.`,config_merge_heading:`Stratégie de fusion`,config_merge_body:`Les champs de premier niveau (temperature, variant, mode, color) sont remplacés par votre valeur si elle est présente. Les maps d'outils dans permission (bash, read, edit) sont fusionnées superficiellement — vos entrées s'ajoutent aux défauts, elles ne les remplacent pas.`,config_merge_note:`Exemple : ajouter npm run* aux permissions bash étend la liste git par défaut. Les deux ensembles de commandes seront autorisés.`,config_fields_heading:`Champs configurables — tous les agents`,config_fields_caption:`Ces champs s'appliquent à chaque agent enregistré par le plugin.`,config_fields:[{field:`temperature`,type:`number`,default:`variable`,description:`Température d'échantillonnage LLM. Plus bas = plus déterministe.`},{field:`variant`,type:`string`,default:`"max"`,description:`Variante de modèle : "max" pour la meilleure qualité, "fast" pour la vitesse.`},{field:`mode`,type:`string`,default:`variable`,description:`"all" = visible dans la liste + utilisable en sous-agent. "subagent" = sous-agent uniquement, invisible dans l'UI.`},{field:`color`,type:`string`,default:`variable`,description:`Couleur d'accentuation UI : "error", "warning", "info", "success".`},{field:`description`,type:`string`,default:`intégrée`,description:`Description de l'agent affichée dans l'UI.`},{field:`permission`,type:`object`,default:`variable`,description:`Map de contrôle d'accès aux outils. Fusionnée superficiellement avec les défauts du plugin pour les outils imbriqués (bash, read, edit).`}],config_soul_heading:`team-lead uniquement`,config_soul_fields:[{field:`soul`,type:`boolean`,default:`true`,description:`Injecte les directives de personnalité human-tone dans le prompt d'Orion. Mettre false pour le comportement brut.`}],config_defaults_heading:`Défauts par agent`,config_defaults_expand:`Voir les détails`,config_defaults_collapse:`Masquer`,config_agent_defaults:[{name:`team-lead`,temperature:`0.3`,variant:`max`,mode:`all`,color:`error`,permissions:[`task: allow`,`todowrite: allow`,`todoread: allow`,`skill: allow`,`question: allow`,`distill: allow`,`prune: allow`,`compress: allow`,`read: allow (.opencode/scratchpad.md)`,`edit: allow (.opencode/scratchpad.md)`,`bash: allow (git status/diff/log/add/commit/push/tag uniquement)`,`Tout le reste : deny`]},{name:`review-manager`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Tout le reste : deny`]},{name:`requirements-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`code-reviewer`,temperature:`0.2`,variant:`max`,mode:`subagent`,color:`info`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`security-reviewer`,temperature:`0.1`,variant:`max`,mode:`subagent`,color:`error`,permissions:[`task: allow`,`Tout le reste : deny`]},{name:`bug-finder`,temperature:`0.2`,variant:`max`,mode:`all`,color:`warning`,permissions:[`task: allow`,`question: allow`,`Tout le reste : deny`]},{name:`brainstorm`,temperature:`0.5`,variant:`max`,mode:`all`,color:`info`,permissions:[`task: allow`,`question: allow`,`webfetch: allow`,`read: allow (tous les fichiers du projet)`,`write: allow (docs/briefs/** uniquement)`,`Tout le reste : deny`]}],config_example_heading:`Exemple opencode.json`,config_example_note:`La permission bash ci-dessus étend la liste git par défaut — les deux ensembles de commandes sont autorisés.`,config_limits_heading:`Comportements figés`,config_limits:[`Troncature de l'injection mémoire : fixée à 50 000 caractères`,`Chemin du scratchpad : .opencode/scratchpad.md (racine du projet, non configurable)`],col_field:`Champ`,col_type:`Type`,col_default:`Défaut`,col_description:`Description`,col_agent:`Agent`,col_temp:`Temp.`,col_variant:`Variante`,col_mode:`Mode`,col_color:`Couleur`,col_permissions:`Permissions`,tab_orion:`Workflow Orion`,tab_brainstorm:`Workflow Brainstorm`}};function Q9({lang:e,setLang:t,dark:n=!1}){let r={background:`none`,border:`none`,cursor:`pointer`,fontSize:12,fontWeight:700,letterSpacing:`0.08em`,fontFamily:`system-ui, sans-serif`,padding:`3px 7px`,borderRadius:4,transition:`background 0.12s`},i=n?`white`:`#0f172a`,a=n?`#64748b`:`#94a3b8`,o=n?`rgba(255,255,255,0.12)`:`#f1f5f9`;return(0,$.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:2},children:[`en`,`fr`].map((s,l)=>(0,$.jsxs)(S.Fragment,{children:[l>0&&(0,$.jsx)(`span`,{style:{color:n?`#334155`:`#e2e8f0`,fontSize:12},children:`|`}),(0,$.jsx)(`button`,{onClick:()=>t(s),style:{...r,color:e===s?i:a,background:e===s?o:`none`,textDecoration:e===s?`underline`:`none`,textUnderlineOffset:3},children:s.toUpperCase()})]},s))})}function $1e({onEnter:e,onConfig:t,lang:n,setLang:r}){let i=Z9[n];return(0,$.jsxs)(`div`,{style:{height:`100vh`,width:`100vw`,overflowY:`auto`,fontFamily:`system-ui, 'Segoe UI', sans-serif`,background:`#f8f9fa`,animation:`fadeIn 0.3s ease-out`},children:[(0,$.jsxs)(`div`,{style:{background:`#0f172a`,padding:`56px 48px 48px`,position:`relative`,overflow:`hidden`},children:[(0,$.jsx)(`div`,{style:{position:`absolute`,inset:0,backgroundImage:`radial-gradient(circle, rgba(255,255,255,0.03) 1px, transparent 1px)`,backgroundSize:`28px 28px`,pointerEvents:`none`}}),(0,$.jsx)(`div`,{style:{position:`absolute`,top:20,right:24},children:(0,$.jsx)(Q9,{lang:n,setLang:r,dark:!0})}),(0,$.jsxs)(`div`,{style:{position:`relative`,maxWidth:860,margin:`0 auto`},children:[(0,$.jsx)(`div`,{style:{display:`inline-block`,background:`rgba(99,102,241,0.2)`,color:`#a5b4fc`,border:`1px solid rgba(99,102,241,0.35)`,borderRadius:4,padding:`3px 10px`,fontSize:11,fontWeight:700,letterSpacing:`0.12em`,textTransform:`uppercase`,marginBottom:20},children:i.plugin_label}),(0,$.jsx)(`h1`,{style:{fontSize:44,fontWeight:800,color:`white`,margin:`0 0 12px`,lineHeight:1.1,letterSpacing:`-0.02em`},children:`team-lead`}),(0,$.jsx)(`p`,{style:{fontSize:18,color:`#94a3b8`,margin:`0 0 36px`,lineHeight:1.5,maxWidth:560},children:i.hero_tagline}),(0,$.jsx)(`div`,{style:{display:`flex`,gap:12,flexWrap:`wrap`,marginBottom:40},children:[{label:`Temperature`,value:`0.3`},{label:`Variant`,value:`max`},{label:i.pill_direct_access,value:i.pill_never}].map(e=>(0,$.jsxs)(`div`,{style:{background:`rgba(255,255,255,0.06)`,border:`1px solid rgba(255,255,255,0.1)`,borderRadius:6,padding:`6px 14px`,display:`flex`,gap:8,alignItems:`center`},children:[(0,$.jsx)(`span`,{style:{fontSize:11,color:`#64748b`,textTransform:`uppercase`,letterSpacing:`0.08em`,fontWeight:600},children:e.label}),(0,$.jsx)(`span`,{style:{fontSize:13,color:`#e2e8f0`,fontWeight:700},children:e.value})]},e.label))}),(0,$.jsxs)(`div`,{style:{display:`flex`,gap:12,alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsxs)(`button`,{onClick:e,style:{background:`#4f46e5`,color:`white`,border:`none`,borderRadius:8,padding:`13px 28px`,fontSize:15,fontWeight:700,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8,boxShadow:`0 4px 14px rgba(79,70,229,0.4)`,transition:`background 0.15s, transform 0.1s`},onMouseEnter:e=>{e.currentTarget.style.background=`#4338ca`},onMouseLeave:e=>{e.currentTarget.style.background=`#4f46e5`},children:[i.cta_workflow,(0,$.jsx)(`span`,{style:{fontSize:16},children:`→`})]}),(0,$.jsx)(`button`,{onClick:t,style:{background:`none`,color:`#94a3b8`,border:`1px solid rgba(255,255,255,0.15)`,borderRadius:8,padding:`12px 22px`,fontSize:14,fontWeight:600,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8,transition:`border-color 0.15s, color 0.15s`},onMouseEnter:e=>{e.currentTarget.style.borderColor=`rgba(255,255,255,0.35)`,e.currentTarget.style.color=`#e2e8f0`},onMouseLeave:e=>{e.currentTarget.style.borderColor=`rgba(255,255,255,0.15)`,e.currentTarget.style.color=`#94a3b8`},children:i.cta_config})]})]})]}),(0,$.jsxs)(`div`,{style:{maxWidth:860,margin:`0 auto`,padding:`40px 48px 60px`},children:[(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_concept}),(0,$.jsx)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`24px 28px`,display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:16},children:i.concept_items.map((e,t)=>{let n=e.code?e.text.split(`%%code%%`):null;return(0,$.jsxs)(`div`,{style:{display:`flex`,gap:14,alignItems:`flex-start`},children:[(0,$.jsx)(`span`,{style:{fontSize:18,color:`#6366f1`,flexShrink:0,marginTop:1},children:e.icon}),(0,$.jsx)(`span`,{style:{fontSize:14,color:`#374151`,lineHeight:1.6},children:n?(0,$.jsxs)($.Fragment,{children:[n[0],(0,$.jsx)(`code`,{style:{fontFamily:`monospace`,fontSize:12,background:`#f1f5f9`,border:`1px solid #e2e8f0`,borderRadius:4,padding:`1px 5px`,color:`#0f172a`},children:e.code}),n[1]]}):e.text})]},t)})})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_memory}),(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #bae6fd`,borderRadius:10,padding:`20px 22px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:12},children:[(0,$.jsx)(`span`,{style:{fontSize:16},children:`📄`}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{style:{fontSize:14,fontWeight:700,color:`#0369a1`},children:i.scratchpad_label}),(0,$.jsx)(`code`,{style:{fontSize:11,color:`#64748b`,fontFamily:`ui-monospace, monospace`},children:`scratchpad.md`})]})]}),i.scratchpad_items.map((e,t)=>(0,$.jsx)(e0e,{text:e,color:`#0369a1`},t))]})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_agents}),(0,$.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr`,gap:14},children:i.agents.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`18px 20px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:10},children:[(0,$.jsx)(`code`,{style:{fontSize:14,fontWeight:700,color:`#0f172a`,fontFamily:`ui-monospace, monospace`,background:`#f1f5f9`,padding:`2px 8px`,borderRadius:4},children:e.name}),(0,$.jsx)(`span`,{style:{fontSize:10,fontWeight:700,letterSpacing:`0.1em`,color:e.badgeColor,background:e.badgeBg,padding:`2px 7px`,borderRadius:3},children:e.badge})]}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#4b5563`,lineHeight:1.6,margin:0},children:e.desc})]},e.name))})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_review_cluster}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#64748b`,marginBottom:14,marginTop:-4},children:i.review_cluster_subtitle}),(0,$.jsx)(`div`,{style:{border:`1px dashed #cbd5e1`,borderRadius:10,padding:`16px 16px 2px`,background:`#f8fafc`},children:(0,$.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`1fr 1fr 1fr`,gap:12},children:i.review_cluster_agents.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:8,padding:`14px 16px`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,marginBottom:8,flexWrap:`wrap`},children:[(0,$.jsx)(`code`,{style:{fontSize:13,fontWeight:700,color:`#0f172a`,fontFamily:`ui-monospace, monospace`,background:`#f1f5f9`,padding:`2px 7px`,borderRadius:4},children:e.name}),(0,$.jsx)(`span`,{style:{fontSize:10,fontWeight:700,letterSpacing:`0.1em`,color:e.badgeColor,background:e.badgeBg,padding:`2px 7px`,borderRadius:3},children:e.badge})]}),(0,$.jsx)(`p`,{style:{fontSize:13,color:`#4b5563`,lineHeight:1.6,margin:0},children:e.desc})]},e.name))})})]}),(0,$.jsxs)(`section`,{style:{marginBottom:48},children:[(0,$.jsx)($9,{children:i.section_usecases}),(0,$.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:12},children:i.usecases.map(e=>(0,$.jsxs)(`div`,{style:{background:`white`,border:`1px solid #e2e8f0`,borderRadius:10,padding:`16px 20px`,display:`flex`,alignItems:`center`,gap:16},children:[(0,$.jsx)(`div`,{style:{width:4,borderRadius:2,alignSelf:`stretch`,background:e.color,flexShrink:0}}),(0,$.jsx)(`div`,{style:{minWidth:200,fontSize:14,fontWeight:600,color:`#0f172a`},children:e.label}),(0,$.jsx)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,flexWrap:`wrap`},children:e.steps.map((t,n)=>(0,$.jsxs)(`span`,{style:{display:`flex`,alignItems:`center`,gap:6},children:[(0,$.jsx)(`span`,{style:{fontSize:12,color:`#475569`,background:`#f8fafc`,border:`1px solid #e2e8f0`,borderRadius:5,padding:`3px 9px`},children:t}),n{e.currentTarget.style.background=`#1e293b`},onMouseLeave:e=>{e.currentTarget.style.background=`#0f172a`},children:[i.cta_workflow_full,(0,$.jsx)(`span`,{style:{fontSize:16},children:`→`})]}),(0,$.jsx)(`button`,{onClick:t,style:{background:`none`,color:`#64748b`,border:`1px solid #e2e8f0`,borderRadius:8,padding:`12px 24px`,fontSize:14,fontWeight:600,cursor:`pointer`,letterSpacing:`-0.01em`,display:`inline-flex`,alignItems:`center`,gap:8},onMouseEnter:e=>{e.currentTarget.style.background=`#f8fafc`,e.currentTarget.style.color=`#0f172a`},onMouseLeave:e=>{e.currentTarget.style.background=`none`,e.currentTarget.style.color=`#64748b`},children:i.cta_config})]})]})]})}function $9({children:e}){return(0,$.jsx)(`div`,{style:{fontSize:13,fontWeight:700,textTransform:`uppercase`,letterSpacing:`0.1em`,color:`#64748b`,marginBottom:14},children:e})}function e0e({text:e,color:t}){return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:9,marginBottom:7},children:[(0,$.jsx)(`span`,{style:{width:6,height:6,borderRadius:`50%`,background:t+`60`,border:`1.5px solid ${t}`,flexShrink:0,marginTop:6}}),(0,$.jsx)(`span`,{style:{fontSize:13,color:`#374151`,lineHeight:1.5},children:e})]})}var t0e=`{ "agent": { "team-lead": { "temperature": 0.5, diff --git a/team-lead-workflow/src/App.tsx b/team-lead-workflow/src/App.tsx index 1575410..ee148ed 100644 --- a/team-lead-workflow/src/App.tsx +++ b/team-lead-workflow/src/App.tsx @@ -492,6 +492,81 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { ], }, // ── Phases du flowchart unifié ── + phase0_glob: { + title: "glob docs/briefs/", + color: "#7c3aed", + nodeType: "ACTION OBLIGATOIRE", + sections: [ + { heading: "Règle", items: ["Toujours la première étape — sans exception", "Scanner `docs/briefs/` avant toute autre action", "Résultat : 0 brief, 1 brief, ou plusieurs briefs"] }, + ], + }, + phase0_count: { + title: "Briefs trouvés ?", + color: "#7c3aed", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["0 → Step 1 direct, sans question posée", "1 → vérifier le statut (draft / done / autre)", "N → lister tous les briefs + demander lequel choisir"] }, + ], + }, + phase0_none: { + title: "Step 1 direct", + color: "#7c3aed", + nodeType: "TRANSITION", + sections: [ + { heading: "Règle", items: ["Aucun brief trouvé → passer directement au brainstorm Step 1, sans poser de question"] }, + ], + }, + phase0_one: { + title: "Statut du brief ?", + color: "#7c3aed", + nodeType: "DÉCISION", + sections: [ + { heading: "Branches", items: ["draft → demander : continuer ce brief ou repartir de zéro ?", "done/autre → demander : réviser ce brief ou démarrer un nouveau projet ?"] }, + ], + }, + phase0_draft_ask: { + title: "Continuer ou repartir ?", + color: "#7c3aed", + nodeType: "QUESTION UTILISATEUR", + sections: [ + { heading: "Contexte", items: ["Brief status: draft trouvé (ou brief sélectionné dans une liste)"] }, + { heading: "Options", items: ["CONTINUER → charger le brief, sauter directement en Step 3", "REPARTIR → ignorer le brief existant → Step 1 normale"] }, + ], + }, + phase0_done_ask: { + title: "Réviser ou nouveau projet ?", + color: "#7c3aed", + nodeType: "QUESTION UTILISATEUR", + sections: [ + { heading: "Contexte", items: ["Brief status: done ou autre statut trouvé"] }, + { heading: "Options", items: ["RÉVISER → charger le brief, sauter directement en Step 3", "NOUVEAU PROJET → ignorer le brief existant → Step 1 normale"] }, + ], + }, + phase0_many: { + title: "Lister briefs + choisir", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Ce qui se passe", items: ["Lister tous les briefs avec : chemin + statut + nom du projet", "Demander : lequel traiter ? (ou nouveau projet ?)"] }, + { heading: "Suite", items: ["Choisit un brief existant → même logique que 'un seul brief trouvé'", "Nouveau projet → Step 1 normale"] }, + ], + }, + phase0_load: { + title: "Charger brief → Step 3", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "Ce qui se passe", items: ["Lire le fichier brief existant dans `docs/briefs/`", "Fournir le contexte complet à Step 3 (mode révision)", "Sauter les Steps 1 et 2 — aller directement en Step 3"] }, + ], + }, + phase0_step1: { + title: "Step 1 normale", + color: "#7c3aed", + nodeType: "TRANSITION", + sections: [ + { heading: "Chemin", items: ["L'utilisateur a choisi : repartir de zéro / nouveau projet", "Flux normal : Step 1 → Step 2 → Step 3", "Ignorer le(s) brief(s) existant(s)"] }, + ], + }, phase0_brief_check: { title: "Phase 0 — BRAINSTORM (optionnel)", color: "#7c3aed", @@ -675,7 +750,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#4338ca", nodeType: "DÉCISION", sections: [ - { heading: "Branches", items: ["OK → rapport final", "Mineur → fix rapide → sp_capture", "Majeur → retour Phase 2 (loop dashed)", "Scope → demander à l'utilisateur"] }, + { heading: "Branches", items: ["OK → capture scratchpad → rapport final", "Mineur → fix rapide → capture scratchpad → rapport", "Majeur → retour Phase 2 (boucle pointillée)", "Scope → demander à l'utilisateur avant de livrer"] }, ], }, phase4_minor: { @@ -708,6 +783,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { nodeType: "LIVRAISON", sections: [ { heading: "Règles de communication", items: ["Mener avec le résultat, pas le processus", "Mettre en avant succès et échecs honnêtement", "Ne pas édulcorer les échecs d'agents", "Proposer des prochaines étapes concrètes si pertinent"] }, + { heading: "Post-livraison (optionnel)", items: ["Si un pattern récurrent a émergé → suggérer Harness à l'utilisateur (jamais sans confirmation)", "Si docs/dérive de code → suggérer Gardener à l'utilisateur", "Ne jamais lancer Phase 5 automatiquement"] }, ], }, phase5_pattern: { @@ -1432,6 +1508,81 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { ], }, // ── Unified flowchart phases ── + phase0_glob: { + title: "glob docs/briefs/", + color: "#7c3aed", + nodeType: "MANDATORY ACTION", + sections: [ + { heading: "Rule", items: ["Always the first step — no exceptions", "Scan `docs/briefs/` before any other action", "Result: 0 briefs, 1 brief, or multiple briefs"] }, + ], + }, + phase0_count: { + title: "Briefs found?", + color: "#7c3aed", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["0 → Step 1 direct, no question asked", "1 → check the status (draft / done / other)", "N → list all briefs + ask which one to choose"] }, + ], + }, + phase0_none: { + title: "Step 1 direct", + color: "#7c3aed", + nodeType: "TRANSITION", + sections: [ + { heading: "Rule", items: ["No brief found → go directly to brainstorm Step 1, no question asked"] }, + ], + }, + phase0_one: { + title: "Brief status?", + color: "#7c3aed", + nodeType: "DECISION", + sections: [ + { heading: "Branches", items: ["draft → ask: continue this brief or start fresh?", "done/other → ask: revise this brief or start a new project?"] }, + ], + }, + phase0_draft_ask: { + title: "Continue or fresh start?", + color: "#7c3aed", + nodeType: "USER QUESTION", + sections: [ + { heading: "Context", items: ["Brief with status: draft found (or brief selected from a list)"] }, + { heading: "Options", items: ["CONTINUE → load the brief, jump directly to Step 3", "FRESH START → ignore existing brief → normal Step 1"] }, + ], + }, + phase0_done_ask: { + title: "Revise or new project?", + color: "#7c3aed", + nodeType: "USER QUESTION", + sections: [ + { heading: "Context", items: ["Brief with status: done or other found"] }, + { heading: "Options", items: ["REVISE → load the brief, jump directly to Step 3", "NEW PROJECT → ignore existing brief → normal Step 1"] }, + ], + }, + phase0_many: { + title: "List briefs + choose", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "What happens", items: ["List all briefs with: path + status + project name", "Ask: which one to work on? (or new project?)"] }, + { heading: "After choice", items: ["Chooses an existing brief → same logic as 'one brief found'", "New project → normal Step 1"] }, + ], + }, + phase0_load: { + title: "Load brief → Step 3", + color: "#7c3aed", + nodeType: "ACTION", + sections: [ + { heading: "What happens", items: ["Read the existing brief file from `docs/briefs/`", "Provide full context to Step 3 (revision mode)", "Skip Steps 1 and 2 — go directly to Step 3"] }, + ], + }, + phase0_step1: { + title: "Normal Step 1", + color: "#7c3aed", + nodeType: "TRANSITION", + sections: [ + { heading: "Path", items: ["User chose: fresh start / new project", "Normal flow: Step 1 → Step 2 → Step 3", "Ignore existing brief(s)"] }, + ], + }, phase0_brief_check: { title: "Phase 0 — BRAINSTORM (optional)", color: "#7c3aed", @@ -1615,7 +1766,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { color: "#4338ca", nodeType: "DECISION", sections: [ - { heading: "Branches", items: ["OK → final report", "Minor → quick fix → sp_capture", "Major → back to Phase 2 (dashed loop)", "Scope → ask user"] }, + { heading: "Branches", items: ["OK → scratchpad capture → final report", "Minor → quick fix → scratchpad capture → report", "Major → loop back to Phase 2 (dashed arrow)", "Scope → ask user before delivering a wrong answer"] }, ], }, phase4_minor: { @@ -1648,6 +1799,7 @@ function getFlowchartData(lang: "en" | "fr"): FlowchartData { nodeType: "DELIVERY", sections: [ { heading: "Communication rules", items: ["Lead with the outcome, not the process", "Highlight what succeeded and what failed", "Be honest about issues — don't sugarcoat agent failures", "Propose concrete next steps if applicable"] }, + { heading: "Post-delivery (optional)", items: ["If a recurring pattern emerged → suggest Harness to user (never without confirmation)", "If docs/code drift detected → suggest Gardener to user", "Never trigger Phase 5 automatically"] }, ], }, phase5_pattern: { @@ -2040,7 +2192,28 @@ function buildMainDiagram(lang: "en" | "fr"): string { p3_label: isEn ? "Phase 3 — REVIEW" : "Phase 3 — REVIEW", p4_label: isEn ? "Phase 4 — SYNTHESIZE" : "Phase 4 — SYNTHESIZE", p5_label: isEn ? "Phase 5 — MAINTENANCE" : "Phase 5 — MAINTENANCE", - brief_check: isEn ? "Brief exist?" : "Brief existe ?", + // Phase 0 nodes + p0_glob: "glob docs/briefs/", + p0_count: isEn ? "Briefs found?" : "Briefs trouvés ?", + p0_none: isEn ? "Step 1 direct" : "Step 1 direct", + p0_one: isEn ? "Brief status?" : "Statut du brief ?", + p0_draft_ask: isEn ? "Continue or fresh start?" : "Continuer ou repartir ?", + p0_done_ask: isEn ? "Revise or new project?" : "Réviser ou nouveau projet ?", + p0_many: isEn ? "List briefs + choose" : "Lister briefs + choisir", + p0_load: isEn ? "Load brief → Step 3" : "Charger brief → Step 3", + p0_step1: isEn ? "Step 1 normal" : "Step 1 normale", + p0_run: isEn ? "Run brainstorm agent" : "Lancer agent brainstorm", + p0_brief: isEn ? "Brief written → verbal suggestion" : "Brief écrit → suggestion verbale", + // Phase 0 edge labels + p0_arrow_0: isEn ? "0" : "0", + p0_arrow_1: isEn ? "1" : "1", + p0_arrow_n: isEn ? "N" : "N", + p0_arrow_draft: isEn ? "draft" : "draft", + p0_arrow_done: isEn ? "done/other" : "done/autre", + p0_arrow_continue: isEn ? "Continue" : "Continuer", + p0_arrow_fresh: isEn ? "Fresh start" : "Repartir", + p0_arrow_revise: isEn ? "Revise" : "Réviser", + p0_arrow_new: isEn ? "New project" : "Nouveau projet", yes: isEn ? "YES" : "OUI", no: isEn ? "NO" : "NON", fast_path: isEn ? "fast path" : "chemin rapide", @@ -2079,15 +2252,24 @@ function buildMainDiagram(lang: "en" | "fr"): string { end: isEn ? "Report to user" : "Rapport à l'utilisateur", enforcement: isEn ? "needs enforcement" : "enforcement requis", docs_drift: isEn ? "docs / drift" : "docs / dérive", + optional: isEn ? "optional" : "optionnel", }; return `flowchart TD START(["${L.start}"]) subgraph P0["${L.p0_label}"] - P0_CHECK{"${L.brief_check}"} - P0_RUN["${L.run_brainstorm}"] - P0_BRIEF["${L.produce_brief}"] + P0_GLOB["${L.p0_glob}"] + P0_COUNT{"${L.p0_count}"} + P0_NONE["${L.p0_none}"] + P0_ONE{"${L.p0_one}"} + P0_DRAFT_ASK["${L.p0_draft_ask}"] + P0_DONE_ASK["${L.p0_done_ask}"] + P0_MANY["${L.p0_many}"] + P0_LOAD["${L.p0_load}"] + P0_STEP1["${L.p0_step1}"] + P0_RUN["${L.p0_run}"] + P0_BRIEF["${L.p0_brief}"] end subgraph P1["${L.p1_label}"] @@ -2134,12 +2316,24 @@ function buildMainDiagram(lang: "en" | "fr"): string { END(["${L.end}"]) - START --> P0_CHECK - P0_CHECK -- "${L.no}" --> P0_RUN + START --> P0_GLOB + P0_GLOB --> P0_COUNT + P0_COUNT -- "${L.p0_arrow_0}" --> P0_NONE + P0_COUNT -- "${L.p0_arrow_1}" --> P0_ONE + P0_COUNT -- "${L.p0_arrow_n}" --> P0_MANY + P0_ONE -- "${L.p0_arrow_draft}" --> P0_DRAFT_ASK + P0_ONE -- "${L.p0_arrow_done}" --> P0_DONE_ASK + P0_DRAFT_ASK -- "${L.p0_arrow_continue}" --> P0_LOAD + P0_DRAFT_ASK -- "${L.p0_arrow_fresh}" --> P0_STEP1 + P0_DONE_ASK -- "${L.p0_arrow_revise}" --> P0_LOAD + P0_DONE_ASK -- "${L.p0_arrow_new}" --> P0_STEP1 + P0_MANY --> P0_DRAFT_ASK + P0_NONE --> P0_RUN + P0_STEP1 --> P0_RUN + P0_LOAD --> P0_RUN P0_RUN --> P0_BRIEF P0_BRIEF --> P1_READ - P0_CHECK -- "${L.yes}" --> P1_READ - P0_CHECK -. "${L.fast_path}" .-> P2_SELECT + P0_GLOB -. "${L.fast_path}" .-> P2_SELECT P1_READ --> P1_STATE P1_STATE --> P1_INTENT @@ -2164,13 +2358,15 @@ function buildMainDiagram(lang: "en" | "fr"): string { P3_VERDICT -- "${L.blocked}" --> P3_BLOCKED P4_EVAL --> P4_GAP + P4_GAP -- "OK" --> P4_SP P4_GAP -- "minor" --> P4_MINOR P4_GAP -- "${L.major}" --> P2_SELECT P4_GAP -- "scope?" --> P4_SCOPE P4_MINOR --> P4_SP P4_SCOPE --> P4_SP P4_SP --> P4_REPORT - P4_REPORT --> P5_PAT + P4_REPORT --> END + P4_REPORT -. "${L.optional}" .-> P5_PAT P5_PAT -- "${L.enforcement}" --> P5_HARNESS P5_PAT -- "${L.docs_drift}" --> P5_GARDENER @@ -2189,7 +2385,7 @@ function buildMainDiagram(lang: "en" | "fr"): string { classDef escalade fill:#fff,color:#dc2626,stroke:#dc2626,stroke-width:2px classDef terminal fill:#f0fdf4,color:#166534,stroke:#166534,stroke-width:2px - class P0_CHECK,P0_RUN,P0_BRIEF phase0 + class P0_GLOB,P0_COUNT,P0_NONE,P0_ONE,P0_DRAFT_ASK,P0_DONE_ASK,P0_MANY,P0_LOAD,P0_STEP1,P0_RUN,P0_BRIEF phase0 class P1_READ,P1_STATE,P1_INTENT,P1_TODO,P1_COMPRESS phase1 class P2_BUG,P2_BUGFINDER,P2_SELECT,P2_HANDOFF,P2_SUCCESS,P2_RETRY phase2 class P2_ESC escalade @@ -2204,7 +2400,15 @@ function buildMainDiagram(lang: "en" | "fr"): string { const MERMAID_NODE_MAP: Record = { START: "phase_start", END: "phase_end", - P0_CHECK: "phase0_brief_check", + P0_GLOB: "phase0_glob", + P0_COUNT: "phase0_count", + P0_NONE: "phase0_none", + P0_ONE: "phase0_one", + P0_DRAFT_ASK: "phase0_draft_ask", + P0_DONE_ASK: "phase0_done_ask", + P0_MANY: "phase0_many", + P0_LOAD: "phase0_load", + P0_STEP1: "phase0_step1", P0_RUN: "phase0_run_brainstorm", P0_BRIEF: "phase0_produce_brief", P1_READ: "phase1_read_sp", @@ -2256,7 +2460,7 @@ function MainFlowChart({ lang, onNodeClick }: MainFlowChartProps) { primaryColor: "#1d4ed8", primaryTextColor: "#ffffff", primaryBorderColor: "#1e40af", - lineColor: "#64748b", + lineColor: "#475569", secondaryColor: "#f1f5f9", tertiaryColor: "#e2e8f0", fontFamily: "system-ui, -apple-system, sans-serif", @@ -2278,6 +2482,29 @@ function MainFlowChart({ lang, onNodeClick }: MainFlowChartProps) { svgEl.style.maxWidth = "100%"; svgEl.style.height = "auto"; + // Inject a - - -
- - diff --git a/orion-docs/components.json b/orion-docs/components.json deleted file mode 100644 index e2c49ef..0000000 --- a/orion-docs/components.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "default", - "rsc": false, - "tsx": true, - "tailwind": { - "config": "tailwind.config.js", - "css": "src/index.css", - "baseColor": "slate", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - } -} diff --git a/orion-docs/eslint.config.js b/orion-docs/eslint.config.js deleted file mode 100644 index 5e6b472..0000000 --- a/orion-docs/eslint.config.js +++ /dev/null @@ -1,23 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' -import tseslint from 'typescript-eslint' -import { defineConfig, globalIgnores } from 'eslint/config' - -export default defineConfig([ - globalIgnores(['dist']), - { - files: ['**/*.{ts,tsx}'], - extends: [ - js.configs.recommended, - tseslint.configs.recommended, - reactHooks.configs.flat.recommended, - reactRefresh.configs.vite, - ], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - }, -]) diff --git a/orion-docs/index.html b/orion-docs/index.html deleted file mode 100644 index 2d0f248..0000000 --- a/orion-docs/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - orion-docs - - -
- - - diff --git a/orion-docs/package.json b/orion-docs/package.json deleted file mode 100644 index 7f6b76d..0000000 --- a/orion-docs/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "orion-docs", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc -b && vite build && html-inline -i dist/index.html -b dist -o bundle.html", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@hookform/resolvers": "^5.2.2", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-aspect-ratio": "^1.1.8", - "@radix-ui/react-avatar": "^1.1.11", - "@radix-ui/react-checkbox": "^1.3.3", - "@radix-ui/react-collapsible": "^1.1.12", - "@radix-ui/react-context-menu": "^2.2.16", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-hover-card": "^1.1.15", - "@radix-ui/react-label": "^2.1.8", - "@radix-ui/react-menubar": "^1.1.16", - "@radix-ui/react-navigation-menu": "^1.2.14", - "@radix-ui/react-popover": "^1.1.15", - "@radix-ui/react-progress": "^1.1.8", - "@radix-ui/react-radio-group": "^1.3.8", - "@radix-ui/react-scroll-area": "^1.2.10", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-separator": "^1.1.8", - "@radix-ui/react-slider": "^1.3.6", - "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.13", - "@radix-ui/react-toast": "^1.2.15", - "@radix-ui/react-toggle": "^1.1.10", - "@radix-ui/react-toggle-group": "^1.1.11", - "@radix-ui/react-tooltip": "^1.2.8", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.1.1", - "date-fns": "^4.1.0", - "embla-carousel-react": "^8.6.0", - "lucide-react": "^1.7.0", - "next-themes": "^0.4.6", - "react": "^19.2.4", - "react-day-picker": "^9.14.0", - "react-dom": "^19.2.4", - "react-hook-form": "^7.72.0", - "react-resizable-panels": "^4.8.0", - "sonner": "^2.0.7", - "tailwind-merge": "^3.5.0", - "vaul": "^1.1.2", - "zod": "^4.3.6" - }, - "devDependencies": { - "@eslint/js": "^9.39.4", - "@parcel/config-default": "^2.16.4", - "@types/node": "^24.12.0", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^6.0.1", - "autoprefixer": "^10.4.27", - "eslint": "^9.39.4", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.5.2", - "globals": "^17.4.0", - "html-inline": "^1.2.0", - "parcel": "^2.16.4", - "parcel-resolver-tspaths": "^0.0.9", - "postcss": "^8.5.8", - "tailwindcss": "3.4.1", - "tailwindcss-animate": "^1.0.7", - "typescript": "~5.9.3", - "typescript-eslint": "^8.57.0", - "vite": "^8.0.1" - } -} diff --git a/orion-docs/pnpm-lock.yaml b/orion-docs/pnpm-lock.yaml deleted file mode 100644 index bd1711d..0000000 --- a/orion-docs/pnpm-lock.yaml +++ /dev/null @@ -1,5855 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@hookform/resolvers': - specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.72.0(react@19.2.4)) - '@radix-ui/react-accordion': - specifier: ^1.2.12 - version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-aspect-ratio': - specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-avatar': - specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-checkbox': - specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collapsible': - specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-context-menu': - specifier: ^2.2.16 - version: 2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-dialog': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-dropdown-menu': - specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-hover-card': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-label': - specifier: ^2.1.8 - version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-menubar': - specifier: ^1.1.16 - version: 1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-navigation-menu': - specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popover': - specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-progress': - specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-radio-group': - specifier: ^1.3.8 - version: 1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-scroll-area': - specifier: ^1.2.10 - version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-select': - specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-separator': - specifier: ^1.1.8 - version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slider': - specifier: ^1.3.6 - version: 1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': - specifier: ^1.2.4 - version: 1.2.4(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-switch': - specifier: ^1.2.6 - version: 1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-tabs': - specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toast': - specifier: ^1.2.15 - version: 1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle': - specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle-group': - specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-tooltip': - specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - cmdk: - specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - embla-carousel-react: - specifier: ^8.6.0 - version: 8.6.0(react@19.2.4) - lucide-react: - specifier: ^1.7.0 - version: 1.7.0(react@19.2.4) - next-themes: - specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: - specifier: ^19.2.4 - version: 19.2.4 - react-day-picker: - specifier: ^9.14.0 - version: 9.14.0(react@19.2.4) - react-dom: - specifier: ^19.2.4 - version: 19.2.4(react@19.2.4) - react-hook-form: - specifier: ^7.72.0 - version: 7.72.0(react@19.2.4) - react-resizable-panels: - specifier: ^4.8.0 - version: 4.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - sonner: - specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - tailwind-merge: - specifier: ^3.5.0 - version: 3.5.0 - vaul: - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - zod: - specifier: ^4.3.6 - version: 4.3.6 - devDependencies: - '@eslint/js': - specifier: ^9.39.4 - version: 9.39.4 - '@parcel/config-default': - specifier: ^2.16.4 - version: 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20) - '@types/node': - specifier: ^24.12.0 - version: 24.12.0 - '@types/react': - specifier: ^19.2.14 - version: 19.2.14 - '@types/react-dom': - specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react': - specifier: ^6.0.1 - version: 6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.0)(jiti@1.21.7)(yaml@2.8.3)) - autoprefixer: - specifier: ^10.4.27 - version: 10.4.27(postcss@8.5.8) - eslint: - specifier: ^9.39.4 - version: 9.39.4(jiti@1.21.7) - eslint-plugin-react-hooks: - specifier: ^7.0.1 - version: 7.0.1(eslint@9.39.4(jiti@1.21.7)) - eslint-plugin-react-refresh: - specifier: ^0.5.2 - version: 0.5.2(eslint@9.39.4(jiti@1.21.7)) - globals: - specifier: ^17.4.0 - version: 17.4.0 - html-inline: - specifier: ^1.2.0 - version: 1.2.0 - parcel: - specifier: ^2.16.4 - version: 2.16.4(@swc/helpers@0.5.20) - parcel-resolver-tspaths: - specifier: ^0.0.9 - version: 0.0.9(parcel@2.16.4(@swc/helpers@0.5.20)) - postcss: - specifier: ^8.5.8 - version: 8.5.8 - tailwindcss: - specifier: 3.4.1 - version: 3.4.1 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.1) - typescript: - specifier: ~5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: ^8.57.0 - version: 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - vite: - specifier: ^8.0.1 - version: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.0)(jiti@1.21.7)(yaml@2.8.3) - -packages: - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@date-fns/tz@1.4.1': - resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} - - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.2': - resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.5': - resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.4': - resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - - '@hookform/resolvers@5.2.2': - resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} - peerDependencies: - react-hook-form: ^7.55.0 - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@lezer/common@1.5.1': - resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==} - - '@lezer/lr@1.4.8': - resolution: {integrity: sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==} - - '@lmdb/lmdb-darwin-arm64@2.8.5': - resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} - cpu: [arm64] - os: [darwin] - - '@lmdb/lmdb-darwin-x64@2.8.5': - resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} - cpu: [x64] - os: [darwin] - - '@lmdb/lmdb-linux-arm64@2.8.5': - resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} - cpu: [arm64] - os: [linux] - - '@lmdb/lmdb-linux-arm@2.8.5': - resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} - cpu: [arm] - os: [linux] - - '@lmdb/lmdb-linux-x64@2.8.5': - resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} - cpu: [x64] - os: [linux] - - '@lmdb/lmdb-win32-x64@2.8.5': - resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} - cpu: [x64] - os: [win32] - - '@mischnic/json-sourcemap@0.1.1': - resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} - engines: {node: '>=12.0.0'} - - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} - cpu: [arm64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} - cpu: [x64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} - cpu: [arm64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} - cpu: [arm] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} - cpu: [x64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} - cpu: [x64] - os: [win32] - - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} - - '@parcel/bundler-default@2.16.4': - resolution: {integrity: sha512-Nb8peNvhfm1+660CLwssWh4weY+Mv6vEGS6GPKqzJmTMw50udi0eS1YuWFzvmhSiu1KsYcUD37mqQ1LuIDtWoA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/cache@2.16.4': - resolution: {integrity: sha512-+uCyeElSga2MBbmbXpIj/WVKH7TByCrKaxtHbelfKKIJpYMgEHVjO4cuc7GUfTrUAmRUS8ZGvnX7Etgq6/jQhw==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/codeframe@2.16.4': - resolution: {integrity: sha512-s64aMfOJoPrXhKH+Y98ahX0O8aXWvTR+uNlOaX4yFkpr4FFDnviLcGngDe/Yo4Qq2FJZ0P6dNswbJTUH9EGxkQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/compressor-raw@2.16.4': - resolution: {integrity: sha512-IK8IpNhw61B2HKgA1JhGhO9y+ZJFRZNTEmvhN1NdLdPqvgEXm2EunT+m6D9z7xeoeT6XnUKqM0eRckEdD0OXbA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/config-default@2.16.4': - resolution: {integrity: sha512-kBxuTY/5trEVnvXk92l7LVkYjNuz3SaqWymFhPjEnc8GY4ZVdcWrWdXWTB9hUhpmRYJctFCyGvM0nN05JTiM2g==} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/core@2.16.4': - resolution: {integrity: sha512-a0CgrW5A5kwuSu5J1RFRoMQaMs9yagvfH2jJMYVw56+/7NRI4KOtu612SG9Y1ERWfY55ZwzyFxtLWvD6LO+Anw==} - engines: {node: '>= 16.0.0'} - - '@parcel/diagnostic@2.16.4': - resolution: {integrity: sha512-YN5CfX7lFd6yRLxyZT4Sj3sR6t7nnve4TdXSIqapXzQwL7Bw+sj79D95wTq2rCm3mzk5SofGxFAXul2/nG6gcQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/error-overlay@2.16.4': - resolution: {integrity: sha512-e8KYKnMsfmQnqIhsUWBUZAXlDK30wkxsAGle1tZ0gOdoplaIdVq/WjGPatHLf6igLM76c3tRn2vw8jZFput0jw==} - engines: {node: '>= 16.0.0'} - - '@parcel/events@2.16.4': - resolution: {integrity: sha512-slWQkBRAA7o0cN0BLEd+yCckPmlVRVhBZn5Pn6ktm4EzEtrqoMzMeJOxxH8TXaRzrQDYnTcnYIHFgXWd4kkUfg==} - engines: {node: '>= 16.0.0'} - - '@parcel/feature-flags@2.16.4': - resolution: {integrity: sha512-nYdx53siKPLYikHHxfzgjzzgxdrjquK6DMnuSgOTyIdRG4VHdEN0+NqKijRLuVgiUFo/dtxc2h+amwqFENMw8w==} - engines: {node: '>= 16.0.0'} - - '@parcel/fs@2.16.4': - resolution: {integrity: sha512-maCMOiVn7oJYZlqlfxgLne8n6tSktIT1k0AeyBp4UGWCXyeJUJ+nL7QYShFpKNLtMLeF0cEtgwRAknWzbcDS1g==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/graph@3.6.4': - resolution: {integrity: sha512-Cj9yV+/k88kFhE+D+gz0YuNRpvNOCVDskO9pFqkcQhGbsGq6kg2XpZ9V7HlYraih31xf8Vb589bZOwjKIiHixQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/logger@2.16.4': - resolution: {integrity: sha512-QR8QLlKo7xAy9JBpPDAh0RvluaixqPCeyY7Fvo2K7hrU3r85vBNNi06pHiPbWoDmB4x1+QoFwMaGnJOHR+/fMA==} - engines: {node: '>= 16.0.0'} - - '@parcel/markdown-ansi@2.16.4': - resolution: {integrity: sha512-0+oQApAVF3wMcQ6d1ZfZ0JsRzaMUYj9e4U+naj6YEsFsFGOPp+pQYKXBf1bobQeeB7cPKPT3SUHxFqced722Hw==} - engines: {node: '>= 16.0.0'} - - '@parcel/namer-default@2.16.4': - resolution: {integrity: sha512-CE+0lFg881sJq575EXxj2lKUn81tsS5itpNUUErHxit195m3PExyAhoXM6ed/SXxwi+uv+T5FS/jjDLBNuUFDA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/node-resolver-core@3.7.4': - resolution: {integrity: sha512-b3VDG+um6IWW5CTod6M9hQsTX5mdIelKmam7mzxzgqg4j5hnycgTWqPMc9UxhYoUY/Q/PHfWepccNcKtvP5JiA==} - engines: {node: '>= 16.0.0'} - - '@parcel/optimizer-css@2.16.4': - resolution: {integrity: sha512-aqdXCtmvpcXYgJFGk2DtXF34wuM2TD1fZorKMrJdKB9sSkWVRs1tq6RAXQrbi0ZPDH9wfE/9An3YdkTex7RHuQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/optimizer-html@2.16.4': - resolution: {integrity: sha512-vg/R2uuSni+NYYUUV8m+5bz8p5zBv8wc/nNleoBnGuCDwn7uaUwTZ8Gt9CjZO8jjG0xCLILoc/TW+e2FF3pfgQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/optimizer-image@2.16.4': - resolution: {integrity: sha512-2RV54WnvMYr18lxSx7Zlx/DXpJwMzOiPxDnoFyvaUoYutvgHO6chtcgFgh1Bvw/PoI95vYzlTkZ8QfUOk5A0JA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/optimizer-svg@2.16.4': - resolution: {integrity: sha512-22+BqIffCrVErg8y2XwhasbTaFNn75OKXZ3KTDBIfOSAZKLUKs1iHfDXETzTRN7cVcS+Q36/6EHd7N/RA8i1fg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/optimizer-swc@2.16.4': - resolution: {integrity: sha512-+URqwnB6u1gqaLbG1O1DDApH+UVj4WCbK9No1fdxLBxQ9a84jyli25o1kK1hYB9Nb/JMyYNnEBfvYUW6RphOxw==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/package-manager@2.16.4': - resolution: {integrity: sha512-obWv9gZgdnkT3Kd+fBkKjhdNEY7zfOP5gVaox5i4nQstVCaVnDlMv5FwLEXwehL+WbwEcGyEGGxOHHkAFKk7Cg==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/packager-css@2.16.4': - resolution: {integrity: sha512-rWRtfiX+VVIOZvq64jpeNUKkvWAbnokfHQsk/js1s5jD4ViNQgPcNLiRaiIANjymqL6+dQqWvGUSW2a5FAZYfg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/packager-html@2.16.4': - resolution: {integrity: sha512-AWo5f6SSqBsg2uWOsX0gPX8hCx2iE6GYLg2Z4/cDy2mPlwDICN8/bxItEztSZFmObi+ti26eetBKRDxAUivyIQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/packager-js@2.16.4': - resolution: {integrity: sha512-L2o39f/fhta+hxto7w8OTUKdstY+te5BmHZREckbQm0KTBg93BG7jB0bfoxLSZF0d8uuAYIVXjzeHNqha+du1g==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/packager-raw@2.16.4': - resolution: {integrity: sha512-A9j60G9OmbTkEeE4WRMXCiErEprHLs9NkUlC4HXCxmSrPMOVaMaMva2LdejE3A9kujZqYtYfuc8+a+jN+Nro4w==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/packager-svg@2.16.4': - resolution: {integrity: sha512-LT9l7eInFrAZJ6w3mYzAUgDq3SIzYbbQyW46Dz26M9lJQbf6uCaATUTac3BEHegW0ikDuw4OOGHK41BVqeeusg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/packager-wasm@2.16.4': - resolution: {integrity: sha512-AY96Aqu/RpmaSZK2RGkIrZWjAperDw8DAlxLAiaP1D/RPVnikZtl5BmcUt/Wz3PrzG7/q9ZVqqKkWsLmhkjXZQ==} - engines: {node: '>=16.0.0', parcel: ^2.16.4} - - '@parcel/plugin@2.16.4': - resolution: {integrity: sha512-aN2VQoRGC1eB41ZCDbPR/Sp0yKOxe31oemzPx1nJzOuebK2Q6FxSrJ9Bjj9j/YCaLzDtPwelsuLOazzVpXJ6qg==} - engines: {node: '>= 16.0.0'} - - '@parcel/profiler@2.16.4': - resolution: {integrity: sha512-R3JhfcnoReTv2sVFHPR2xKZvs3d3IRrBl9sWmAftbIJFwT4rU70/W7IdwfaJVkD/6PzHq9mcgOh1WKL4KAxPdA==} - engines: {node: '>= 16.0.0'} - - '@parcel/reporter-cli@2.16.4': - resolution: {integrity: sha512-DQx9TwcTZrDv828+tcwEi//xyW7OHTGzGX1+UEVxPp0mSzuOmDn0zfER8qNIqGr1i4D/FXhb5UJQDhGHV8mOpQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/reporter-dev-server@2.16.4': - resolution: {integrity: sha512-YWvay25htQDifpDRJ0+yFh6xUxKnbfeJxYkPYyuXdxpEUhq4T0UWW0PbPCN/wFX7StgeUTXq5Poeo/+eys9m3w==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/reporter-tracer@2.16.4': - resolution: {integrity: sha512-JKnlXpPepak0/ZybmZn9JtyjJiDBWYrt7ZUlXQhQb0xzNcd/k+RqfwVkTKIwyFHsWtym0cwibkvsi2bWFzS7tw==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/resolver-default@2.16.4': - resolution: {integrity: sha512-wJe9XQS0hn/t32pntQpJbls3ZL8mGVVhK9L7s7BTmZT9ufnvP2nif1psJz/nbgnP9LF6mLSk43OdMJKpoStsjQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/runtime-browser-hmr@2.16.4': - resolution: {integrity: sha512-asx7p3NjUSfibI3bC7+8+jUIGHWVk2Zuq9SjJGCGDt+auT9A4uSGljnsk1BWWPqqZ0WILubq4czSAqm0+wt4cw==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/runtime-js@2.16.4': - resolution: {integrity: sha512-gUKmsjg+PULQBu2QbX0QKll9tXSqHPO8NrfxHwWb2lz5xDKDos1oV0I7BoMWbHhUHkoToXZrm654oGViujtVUA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/runtime-rsc@2.16.4': - resolution: {integrity: sha512-CHkotYE/cNiUjJmrc5FD9YhlFp1UF5wMNNJmoWaL40eBzsqcaV0sSn5V3bNapwewn3wrMYgdPgvOTHfaZaG73A==} - engines: {node: '>= 12.0.0', parcel: ^2.16.4} - - '@parcel/runtime-service-worker@2.16.4': - resolution: {integrity: sha512-FT0Q58bf5Re+dq5cL2XHbxqHHFZco6qtRijeVpT3TSPMRPlniMArypSytTeZzVNL7h/hxjWsNu7fRuC0yLB5hA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/rust-darwin-arm64@2.16.4': - resolution: {integrity: sha512-P3Se36H9EO1fOlwXqQNQ+RsVKTGn5ztRSUGbLcT8ba6oOMmU1w7J4R810GgsCbwCuF10TJNUMkuD3Q2Sz15Q3Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@parcel/rust-darwin-x64@2.16.4': - resolution: {integrity: sha512-8aNKNyPIx3EthYpmVJevIdHmFsOApXAEYGi3HU69jTxLgSIfyEHDdGE9lEsMvhSrd/SSo4/euAtiV+pqK04wnA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@parcel/rust-linux-arm-gnueabihf@2.16.4': - resolution: {integrity: sha512-QrvqiSHaWRLc0JBHgUHVvDthfWSkA6AFN+ikV1UGENv4j2r/QgvuwJiG0VHrsL6pH5dRqj0vvngHzEgguke9DA==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@parcel/rust-linux-arm64-gnu@2.16.4': - resolution: {integrity: sha512-f3gBWQHLHRUajNZi3SMmDQiEx54RoRbXtZYQNuBQy7+NolfFcgb1ik3QhkT7xovuTF/LBmaqP3UFy0PxvR/iwQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@parcel/rust-linux-arm64-musl@2.16.4': - resolution: {integrity: sha512-cwml18RNKsBwHyZnrZg4jpecXkWjaY/mCArocWUxkFXjjB97L56QWQM9W86f2/Y3HcFcnIGJwx1SDDKJrV6OIA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@parcel/rust-linux-x64-gnu@2.16.4': - resolution: {integrity: sha512-0xIjQaN8hiG0F9R8coPYidHslDIrbfOS/qFy5GJNbGA3S49h61wZRBMQqa7JFW4+2T8R0J9j0SKHhLXpbLXrIg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@parcel/rust-linux-x64-musl@2.16.4': - resolution: {integrity: sha512-fYn21GIecHK9RoZPKwT9NOwxwl3Gy3RYPR6zvsUi0+hpFo19Ph9EzFXN3lT8Pi5KiwQMCU4rsLb5HoWOBM1FeA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@parcel/rust-win32-x64-msvc@2.16.4': - resolution: {integrity: sha512-TcpWC3I1mJpfP2++018lgvM7UX0P8IrzNxceBTHUKEIDMwmAYrUKAQFiaU0j1Ldqk6yP8SPZD3cvphumsYpJOQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@parcel/rust@2.16.4': - resolution: {integrity: sha512-RBMKt9rCdv6jr4vXG6LmHtxzO5TuhQvXo1kSoSIF7fURRZ81D1jzBtLxwLmfxCPsofJNqWwdhy5vIvisX+TLlQ==} - engines: {node: '>= 16.0.0'} - peerDependencies: - napi-wasm: ^1.1.2 - peerDependenciesMeta: - napi-wasm: - optional: true - - '@parcel/source-map@2.1.1': - resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} - engines: {node: ^12.18.3 || >=14} - - '@parcel/transformer-babel@2.16.4': - resolution: {integrity: sha512-CMDUOQYX7+cmeyHxHSFnoPcwvXNL7rRFE+Q06uVFzsYYiVhbwGF/1J5Bx4cW3Froumqla4YTytTsEteJEybkdA==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-css@2.16.4': - resolution: {integrity: sha512-VG/+DbDci2HKe20GFRDs65ZQf5GUFfnmZAa1BhVl/MO+ijT3XC3eoVUy5cExRkq4VLcPY4ytL0g/1T2D6x7lBQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-html@2.16.4': - resolution: {integrity: sha512-w6JErYTeNS+KAzUAER18NHFIFFvxiLGd4Fht1UYcb/FDjJdLAMB/FljyEs0Rto/WAhZ2D0MuSL25HQh837R62g==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-image@2.16.4': - resolution: {integrity: sha512-ZzIn3KvvRqMfcect4Dy+57C9XoQXZhpVJKBdQWMp9wM1qJEgsVgGDcaSBYCs/UYSKMRMP6Wm20pKCt408RkQzg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/transformer-js@2.16.4': - resolution: {integrity: sha512-FD2fdO6URwAGBPidb3x1dDgLBt972mko0LelcSU05aC/pcKaV9mbCtINbPul1MlStzkxDelhuImcCYIyerheVQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@parcel/transformer-json@2.16.4': - resolution: {integrity: sha512-pB3ZNqgokdkBCJ+4G0BrPYcIkyM9K1HVk0GvjzcLEFDKsoAp8BGEM68FzagFM/nVq9anYTshIaoh349GK0M/bg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-node@2.16.4': - resolution: {integrity: sha512-7t43CPGfMJk1LqFokwxHSsRi+kKC2QvDXaMtqiMShmk50LCwn81WgzuFvNhMwf6lSiBihWupGwF3Fqksg+aisg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-postcss@2.16.4': - resolution: {integrity: sha512-jfmh9ho03H+qwz9S1b/a/oaOmgfMovtHKYDweIGMjKULKIee3AFRqo8RZIOuUMjDuqHWK8SqQmjery4syFV3Xw==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-posthtml@2.16.4': - resolution: {integrity: sha512-+GXsmGx1L25KQGQnwclgEuQe1t4QU+IoDkgN+Ikj+EnQCOWG4/ts2VpMBeqP5F18ZT4cCSRafj6317o/2lSGJg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-raw@2.16.4': - resolution: {integrity: sha512-7WDUPq+bW11G9jKxaQIVL+NPGolV99oq/GXhpjYip0SaGaLzRCW7gEk60cftuk0O7MsDaX5jcAJm3G/AX+LJKg==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-react-refresh-wrap@2.16.4': - resolution: {integrity: sha512-MiLNZrsGQJTANKKa4lzZyUbGj/en0Hms474mMdQkCBFg6GmjfmXwaMMgtTfPA3ZwSp2+3LeObCyca/f9B2gBZQ==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/transformer-svg@2.16.4': - resolution: {integrity: sha512-0dm4cQr/WpfQP6N0xjFtwdLTxcONDfoLgTOMk4eNUWydHipSgmLtvUk/nOc/FWkwztRScfAObtZXOiPOd3Oy9A==} - engines: {node: '>= 16.0.0', parcel: ^2.16.4} - - '@parcel/types-internal@2.16.4': - resolution: {integrity: sha512-PE6Qmt5cjzBxX+6MPLiF7r+twoC+V9Skt3zyuBQ+H1c0i9o07Bbz2NKX10nvlPukfmW6Fu/1RvTLkzBZR1bU6A==} - - '@parcel/types@2.16.4': - resolution: {integrity: sha512-ctx4mBskZHXeDVHg4OjMwx18jfYH9BzI/7yqbDQVGvd5lyA+/oVVzYdpele2J2i2sSaJ87cA8nb57GDQ8kHAqA==} - - '@parcel/utils@2.16.4': - resolution: {integrity: sha512-lkmxQHcHyOWZLbV8t+h2CGZIkPiBurLm/TS5wNT7+tq0qt9KbVwL7FP2K93TbXhLMGTmpI79Bf3qKniPM167Mw==} - engines: {node: '>= 16.0.0'} - - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} - engines: {node: '>= 10.0.0'} - - '@parcel/workers@2.16.4': - resolution: {integrity: sha512-dkBEWqnHXDZnRbTZouNt4uEGIslJT+V0c8OH1MPOfjISp1ucD6/u9ET8k9d/PxS9h1hL53og0SpBuuSEPLDl6A==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@parcel/core': ^2.16.4 - - '@radix-ui/number@1.1.1': - resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-accordion@1.2.12': - resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-aspect-ratio@1.1.8': - resolution: {integrity: sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-avatar@1.1.11': - resolution: {integrity: sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-checkbox@1.3.3': - resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collapsible@1.1.12': - resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context-menu@2.2.16': - resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.3': - resolution: {integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dialog@1.1.15': - resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-dropdown-menu@2.1.16': - resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-hover-card@1.1.15': - resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-label@2.1.8': - resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-menu@2.1.16': - resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-menubar@1.1.16': - resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-navigation-menu@1.2.14': - resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popover@1.1.15': - resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.4': - resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-progress@1.1.8': - resolution: {integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-radio-group@1.3.8': - resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-scroll-area@1.2.10': - resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-select@2.2.6': - resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-separator@1.1.8': - resolution: {integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slider@1.3.6': - resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-slot@1.2.4': - resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-switch@1.2.6': - resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-tabs@1.1.13': - resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toast@1.2.15': - resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toggle-group@1.1.11': - resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toggle@1.1.10': - resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-tooltip@1.2.8': - resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-is-hydrated@0.1.0': - resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-previous@1.1.1': - resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-visually-hidden@1.2.3': - resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@rolldown/binding-android-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.0-rc.12': - resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} - - '@rolldown/pluginutils@1.0.0-rc.7': - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} - - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - - '@swc/core-darwin-arm64@1.15.21': - resolution: {integrity: sha512-SA8SFg9dp0qKRH8goWsax6bptFE2EdmPf2YRAQW9WoHGf3XKM1bX0nd5UdwxmC5hXsBUZAYf7xSciCler6/oyA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.15.21': - resolution: {integrity: sha512-//fOVntgowz9+V90lVsNCtyyrtbHp3jWH6Rch7MXHXbcvbLmbCTmssl5DeedUWLLGiAAW1wksBdqdGYOTjaNLw==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.15.21': - resolution: {integrity: sha512-meNI4Sh6h9h8DvIfEc0l5URabYMSuNvyisLmG6vnoYAS43s8ON3NJR8sDHvdP7NJTrLe0q/x2XCn6yL/BeHcZg==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.15.21': - resolution: {integrity: sha512-QrXlNQnHeXqU2EzLlnsPoWEh8/GtNJLvfMiPsDhk+ht6Xv8+vhvZ5YZ/BokNWSIZiWPKLAqR0M7T92YF5tmD3g==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.15.21': - resolution: {integrity: sha512-8/yGCMO333ultDaMQivE5CjO6oXDPeeg1IV4sphojPkb0Pv0i6zvcRIkgp60xDB+UxLr6VgHgt+BBgqS959E9g==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-ppc64-gnu@1.15.21': - resolution: {integrity: sha512-ucW0HzPx0s1dgRvcvuLSPSA/2Kk/VYTv9st8qe1Kc22Gu0Q0rH9+6TcBTmMuNIp0Xs4BPr1uBttmbO1wEGI49Q==} - engines: {node: '>=10'} - cpu: [ppc64] - os: [linux] - - '@swc/core-linux-s390x-gnu@1.15.21': - resolution: {integrity: sha512-ulTnOGc5I7YRObE/9NreAhQg94QkiR5qNhhcUZ1iFAYjzg/JGAi1ch+s/Ixe61pMIr8bfVrF0NOaB0f8wjaAfA==} - engines: {node: '>=10'} - cpu: [s390x] - os: [linux] - - '@swc/core-linux-x64-gnu@1.15.21': - resolution: {integrity: sha512-D0RokxtM+cPvSqJIKR6uja4hbD+scI9ezo95mBhfSyLUs9wnPPl26sLp1ZPR/EXRdYm3F3S6RUtVi+8QXhT24Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.15.21': - resolution: {integrity: sha512-nER8u7VeRfmU6fMDzl1NQAbbB/G7O2avmvCOwIul1uGkZ2/acbPH+DCL9h5+0yd/coNcxMBTL6NGepIew+7C2w==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.15.21': - resolution: {integrity: sha512-+/AgNBnjYugUA8C0Do4YzymgvnGbztv7j8HKSQLvR/DQgZPoXQ2B3PqB2mTtGh/X5DhlJWiqnunN35JUgWcAeQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.15.21': - resolution: {integrity: sha512-IkSZj8PX/N4HcaFhMQtzmkV8YSnuNoJ0E6OvMwFiOfejPhiKXvl7CdDsn1f4/emYEIDO3fpgZW9DTaCRMDxaDA==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.15.21': - resolution: {integrity: sha512-zUyWso7OOENB6e1N1hNuNn8vbvLsTdKQ5WKLgt/JcBNfJhKy/6jmBmqI3GXk/MyvQKd5SLvP7A0F36p7TeDqvw==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.15.21': - resolution: {integrity: sha512-fkk7NJcBscrR3/F8jiqlMptRHP650NxqDnspBMrRe5d8xOoCy9MLL5kOBLFXjFLfMo3KQQHhk+/jUULOMlR1uQ==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/helpers@0.5.20': - resolution: {integrity: sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==} - - '@swc/types@0.1.26': - resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} - - '@tabby_ai/hijri-converter@1.0.5': - resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} - engines: {node: '>=16.0.0'} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@24.12.0': - resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} - - '@typescript-eslint/eslint-plugin@8.58.0': - resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.58.0 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/parser@8.58.0': - resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/project-service@8.58.0': - resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/scope-manager@8.58.0': - resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.58.0': - resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/type-utils@8.58.0': - resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/types@8.58.0': - resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.58.0': - resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/utils@8.58.0': - resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - '@typescript-eslint/visitor-keys@8.58.0': - resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vitejs/plugin-react@6.0.1': - resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 - babel-plugin-react-compiler: ^1.0.0 - vite: ^8.0.0 - peerDependenciesMeta: - '@rolldown/plugin-babel': - optional: true - babel-plugin-react-compiler: - optional: true - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} - - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - - base-x@3.0.11: - resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} - - baseline-browser-mapping@2.10.13: - resolution: {integrity: sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==} - engines: {node: '>=6.0.0'} - hasBin: true - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.28.2: - resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001784: - resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - cmdk@1.1.1: - resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssauron@1.4.0: - resolution: {integrity: sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - date-fns-jalali@4.1.0-0: - resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - duplexer2@0.0.2: - resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} - - electron-to-chromium@1.5.330: - resolution: {integrity: sha512-jFNydB5kFtYUobh4IkWUnXeyDbjf/r9gcUEXe1xcrcUxIGfTdzPXA+ld6zBRbwvgIGVzDll/LTIiDztEtckSnA==} - - embla-carousel-react@8.6.0: - resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-refresh@0.5.2: - resolution: {integrity: sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==} - peerDependencies: - eslint: ^9 || ^10 - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - eslint@9.39.4: - resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - - get-port@4.2.0: - resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} - engines: {node: '>=6'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@17.4.0: - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} - engines: {node: '>=18'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - - html-inline@1.2.0: - resolution: {integrity: sha512-7W6IV2bQVesdyJkrrZyu2Wk8jPQ1FyCa2y9xDURqHrCrI1HkJK85D1jzCuBTJhal6rQB+t3YBAqcDgSnohTzTw==} - hasBin: true - - html-select@2.3.24: - resolution: {integrity: sha512-kQ+YZoVQ8Aux6bUqMVc0iufcZOv03+xYZ4J5v2beT5wkNrW/e2roZ8pnU4LunVOVBGFkbodFKR0TvuMkTdyrJQ==} - hasBin: true - - html-tokenize@1.2.5: - resolution: {integrity: sha512-7sCme3w9Hiv/kfL6sO6ePTGAV5fY6P7WDZyOs0zfXXU8vsS1ps1CQfGe0J1yuAdcCnOJ9h66RLYX/e9Cife8yw==} - hasBin: true - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indexof@0.0.1: - resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} - engines: {node: '>= 12.0.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lmdb@2.8.5: - resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} - hasBin: true - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lucide-react@1.7.0: - resolution: {integrity: sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - minimatch@10.2.5: - resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} - engines: {node: 18 || 20 || >=22} - - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - minimist@0.0.10: - resolution: {integrity: sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==} - - minimist@1.1.3: - resolution: {integrity: sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - msgpackr-extract@3.0.3: - resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} - hasBin: true - - msgpackr@1.11.9: - resolution: {integrity: sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - next-themes@0.4.6: - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-gyp-build-optional-packages@5.1.1: - resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} - hasBin: true - - node-gyp-build-optional-packages@5.2.2: - resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} - hasBin: true - - node-releases@2.0.36: - resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-keys@0.4.0: - resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ordered-binary@1.6.1: - resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parcel-resolver-tspaths@0.0.9: - resolution: {integrity: sha512-U+iYUT5BewncKijBFJqLMsU78SfGBEzfVZ0T9O4hw5dCedTsOJdXOmlsqBw9ipdCA55GpQFuSnIe1Xv3sF53Vg==} - engines: {node: '>= 14.0.0', parcel: '>= 2.0.0'} - peerDependencies: - parcel: '>= 2.0.0' - - parcel@2.16.4: - resolution: {integrity: sha512-RQlrqs4ujYNJpTQi+dITqPKNhRWEqpjPd1YBcGp50Wy3FcJHpwu0/iRm7XWz2dKU/Bwp2qCcVYPIeEDYi2uOUw==} - engines: {node: '>= 16.0.0'} - hasBin: true - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - react-day-picker@9.14.0: - resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} - engines: {node: '>=18'} - peerDependencies: - react: '>=16.8.0' - - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} - peerDependencies: - react: ^19.2.4 - - react-hook-form@7.72.0: - resolution: {integrity: sha512-V4v6jubaf6JAurEaVnT9aUPKFbNtDgohj5CIgVGyPHvT9wRx5OZHVjz31GsxnPNI278XMu+ruFz+wGOscHaLKw==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-refresh@0.16.0: - resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==} - engines: {node: '>=0.10.0'} - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.2: - resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-resizable-panels@4.8.0: - resolution: {integrity: sha512-2uEABkewb3ky/ZgIlAUxWa1W/LjsK494fdV1QsXxst7CDRHCzo7h22tWWu3NNaBjmiuriOCt3CvhipnaYcpoIw==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - - readable-stream@1.1.14: - resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} - - readable-wrap@1.0.0: - resolution: {integrity: sha512-/8n0Mr10S+HGKFygQ42Z40JIXwafPH3A72pwmlNClThgsImV5LJJiCue5Je1asxwY082sYxq/+kTxH6nTn0w3g==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rolldown@1.0.0-rc.12: - resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - sonner@2.0.7: - resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - - stream-splicer@1.3.2: - resolution: {integrity: sha512-nmUMEbdm/sZYqe9dZs7mqJvTYpunsDbIWI5FiBCMc/hMVd6vwzy+ITmo7C3gcLYqrn+uQ1w+EJwooWvJ997JAA==} - - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} - - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@3.4.1: - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} - engines: {node: '>=14.0.0'} - hasBin: true - - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - through2@0.4.2: - resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} - - through2@0.6.5: - resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} - - through2@1.1.1: - resolution: {integrity: sha512-zEbpaeSMHxczpTzO1KkMHjBC1enTA68ojeaZGG4toqdASpb9t4xUZaYFBq2/9OHo5nTGFVSYd4c910OR+6wxbQ==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - trumpet@1.7.2: - resolution: {integrity: sha512-hqVDLz5yp+vhRGjAvbomuo4+pjzQIbXe9JE/HPm9s4iEuf2Ew5jzgwQf+2HLpqFXZpRD8VgKPOYM8wyKmqIklg==} - - ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typescript-eslint@8.58.0: - resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - vaul@1.1.2: - resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - - vite@8.0.3: - resolution: {integrity: sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.0 - esbuild: ^0.27.0 - jiti: '>=1.21.0' - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - '@vitejs/devtools': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - weak-lru-cache@1.2.2: - resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - xtend@2.1.2: - resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} - engines: {node: '>=0.4'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} - engines: {node: '>= 14.6'} - hasBin: true - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.29.2': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@date-fns/tz@1.4.1': {} - - '@emnapi/core@1.9.1': - dependencies: - '@emnapi/wasi-threads': 1.2.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.9.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))': - dependencies: - eslint: 9.39.4(jiti@1.21.7) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.2': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.5': - dependencies: - ajv: 6.14.0 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.4': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@floating-ui/core@1.7.5': - dependencies: - '@floating-ui/utils': 0.2.11 - - '@floating-ui/dom@1.7.6': - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 - - '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/dom': 1.7.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@floating-ui/utils@0.2.11': {} - - '@hookform/resolvers@5.2.2(react-hook-form@7.72.0(react@19.2.4))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.72.0(react@19.2.4) - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@lezer/common@1.5.1': {} - - '@lezer/lr@1.4.8': - dependencies: - '@lezer/common': 1.5.1 - - '@lmdb/lmdb-darwin-arm64@2.8.5': - optional: true - - '@lmdb/lmdb-darwin-x64@2.8.5': - optional: true - - '@lmdb/lmdb-linux-arm64@2.8.5': - optional: true - - '@lmdb/lmdb-linux-arm@2.8.5': - optional: true - - '@lmdb/lmdb-linux-x64@2.8.5': - optional: true - - '@lmdb/lmdb-win32-x64@2.8.5': - optional: true - - '@mischnic/json-sourcemap@0.1.1': - dependencies: - '@lezer/common': 1.5.1 - '@lezer/lr': 1.4.8 - json5: 2.2.3 - - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - optional: true - - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': - dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@oxc-project/types@0.122.0': {} - - '@parcel/bundler-default@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/graph': 3.6.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/cache@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/fs': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/logger': 2.16.4 - '@parcel/utils': 2.16.4 - lmdb: 2.8.5 - transitivePeerDependencies: - - napi-wasm - - '@parcel/codeframe@2.16.4': - dependencies: - chalk: 4.1.2 - - '@parcel/compressor-raw@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/config-default@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20)': - dependencies: - '@parcel/bundler-default': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/compressor-raw': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/namer-default': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/optimizer-css': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/optimizer-html': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/optimizer-image': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/optimizer-svg': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/optimizer-swc': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20) - '@parcel/packager-css': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/packager-html': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/packager-js': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/packager-raw': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/packager-svg': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/packager-wasm': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/reporter-dev-server': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/resolver-default': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/runtime-browser-hmr': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/runtime-js': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/runtime-rsc': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/runtime-service-worker': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-babel': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-css': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-html': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-image': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-js': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-json': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-node': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-postcss': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-posthtml': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-raw': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-react-refresh-wrap': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/transformer-svg': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@swc/helpers' - - napi-wasm - - '@parcel/core@2.16.4(@swc/helpers@0.5.20)': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/diagnostic': 2.16.4 - '@parcel/events': 2.16.4 - '@parcel/feature-flags': 2.16.4 - '@parcel/fs': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/graph': 3.6.4 - '@parcel/logger': 2.16.4 - '@parcel/package-manager': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20) - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/profiler': 2.16.4 - '@parcel/rust': 2.16.4 - '@parcel/source-map': 2.1.1 - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - base-x: 3.0.11 - browserslist: 4.28.2 - clone: 2.1.2 - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - json5: 2.2.3 - msgpackr: 1.11.9 - nullthrows: 1.1.1 - semver: 7.7.4 - transitivePeerDependencies: - - '@swc/helpers' - - napi-wasm - - '@parcel/diagnostic@2.16.4': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - nullthrows: 1.1.1 - - '@parcel/error-overlay@2.16.4': {} - - '@parcel/events@2.16.4': {} - - '@parcel/feature-flags@2.16.4': {} - - '@parcel/fs@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/feature-flags': 2.16.4 - '@parcel/rust': 2.16.4 - '@parcel/types-internal': 2.16.4 - '@parcel/utils': 2.16.4 - '@parcel/watcher': 2.5.6 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - napi-wasm - - '@parcel/graph@3.6.4': - dependencies: - '@parcel/feature-flags': 2.16.4 - nullthrows: 1.1.1 - - '@parcel/logger@2.16.4': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/events': 2.16.4 - - '@parcel/markdown-ansi@2.16.4': - dependencies: - chalk: 4.1.2 - - '@parcel/namer-default@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/node-resolver-core@3.7.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - '@parcel/diagnostic': 2.16.4 - '@parcel/fs': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - semver: 7.7.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/optimizer-css@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - browserslist: 4.28.2 - lightningcss: 1.32.0 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/optimizer-html@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/optimizer-image@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - napi-wasm - - '@parcel/optimizer-svg@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/optimizer-swc@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20)': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - '@swc/core': 1.15.21(@swc/helpers@0.5.20) - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - napi-wasm - - '@parcel/package-manager@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20)': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/diagnostic': 2.16.4 - '@parcel/fs': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/logger': 2.16.4 - '@parcel/node-resolver-core': 3.7.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@swc/core': 1.15.21(@swc/helpers@0.5.20) - semver: 7.7.4 - transitivePeerDependencies: - - '@swc/helpers' - - napi-wasm - - '@parcel/packager-css@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - lightningcss: 1.32.0 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/packager-html@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/packager-js@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/source-map': 2.1.1 - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - globals: 13.24.0 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/packager-raw@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/packager-svg@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/packager-wasm@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/plugin@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/profiler@2.16.4': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/events': 2.16.4 - '@parcel/types-internal': 2.16.4 - chrome-trace-event: 1.0.4 - - '@parcel/reporter-cli@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/types': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - chalk: 4.1.2 - term-size: 2.2.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/reporter-dev-server@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/codeframe': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/reporter-tracer@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - chrome-trace-event: 1.0.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/resolver-default@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/node-resolver-core': 3.7.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/runtime-browser-hmr@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/runtime-js@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/runtime-rsc@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/runtime-service-worker@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/rust-darwin-arm64@2.16.4': - optional: true - - '@parcel/rust-darwin-x64@2.16.4': - optional: true - - '@parcel/rust-linux-arm-gnueabihf@2.16.4': - optional: true - - '@parcel/rust-linux-arm64-gnu@2.16.4': - optional: true - - '@parcel/rust-linux-arm64-musl@2.16.4': - optional: true - - '@parcel/rust-linux-x64-gnu@2.16.4': - optional: true - - '@parcel/rust-linux-x64-musl@2.16.4': - optional: true - - '@parcel/rust-win32-x64-msvc@2.16.4': - optional: true - - '@parcel/rust@2.16.4': - optionalDependencies: - '@parcel/rust-darwin-arm64': 2.16.4 - '@parcel/rust-darwin-x64': 2.16.4 - '@parcel/rust-linux-arm-gnueabihf': 2.16.4 - '@parcel/rust-linux-arm64-gnu': 2.16.4 - '@parcel/rust-linux-arm64-musl': 2.16.4 - '@parcel/rust-linux-x64-gnu': 2.16.4 - '@parcel/rust-linux-x64-musl': 2.16.4 - '@parcel/rust-win32-x64-msvc': 2.16.4 - - '@parcel/source-map@2.1.1': - dependencies: - detect-libc: 1.0.3 - - '@parcel/transformer-babel@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - browserslist: 4.28.2 - json5: 2.2.3 - nullthrows: 1.1.1 - semver: 7.7.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-css@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - browserslist: 4.28.2 - lightningcss: 1.32.0 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-html@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-image@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - nullthrows: 1.1.1 - transitivePeerDependencies: - - napi-wasm - - '@parcel/transformer-js@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@swc/helpers': 0.5.20 - browserslist: 4.28.2 - nullthrows: 1.1.1 - regenerator-runtime: 0.14.1 - semver: 7.7.4 - transitivePeerDependencies: - - napi-wasm - - '@parcel/transformer-json@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - json5: 2.2.3 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-node@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-postcss@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - '@parcel/utils': 2.16.4 - clone: 2.1.2 - nullthrows: 1.1.1 - postcss-value-parser: 4.2.0 - semver: 7.7.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-posthtml@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-raw@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-react-refresh-wrap@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/error-overlay': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - react-refresh: 0.16.0 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/transformer-svg@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/plugin': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/rust': 2.16.4 - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/types-internal@2.16.4': - dependencies: - '@parcel/diagnostic': 2.16.4 - '@parcel/feature-flags': 2.16.4 - '@parcel/source-map': 2.1.1 - utility-types: 3.11.0 - - '@parcel/types@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/types-internal': 2.16.4 - '@parcel/workers': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - transitivePeerDependencies: - - '@parcel/core' - - napi-wasm - - '@parcel/utils@2.16.4': - dependencies: - '@parcel/codeframe': 2.16.4 - '@parcel/diagnostic': 2.16.4 - '@parcel/logger': 2.16.4 - '@parcel/markdown-ansi': 2.16.4 - '@parcel/rust': 2.16.4 - '@parcel/source-map': 2.1.1 - chalk: 4.1.2 - nullthrows: 1.1.1 - transitivePeerDependencies: - - napi-wasm - - '@parcel/watcher-android-arm64@2.5.6': - optional: true - - '@parcel/watcher-darwin-arm64@2.5.6': - optional: true - - '@parcel/watcher-darwin-x64@2.5.6': - optional: true - - '@parcel/watcher-freebsd-x64@2.5.6': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.5.6': - optional: true - - '@parcel/watcher-linux-arm-musl@2.5.6': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.5.6': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.5.6': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.5.6': - optional: true - - '@parcel/watcher-linux-x64-musl@2.5.6': - optional: true - - '@parcel/watcher-win32-arm64@2.5.6': - optional: true - - '@parcel/watcher-win32-ia32@2.5.6': - optional: true - - '@parcel/watcher-win32-x64@2.5.6': - optional: true - - '@parcel/watcher@2.5.6': - dependencies: - detect-libc: 2.1.2 - is-glob: 4.0.3 - node-addon-api: 7.1.1 - picomatch: 4.0.4 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 - - '@parcel/workers@2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))': - dependencies: - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/diagnostic': 2.16.4 - '@parcel/logger': 2.16.4 - '@parcel/profiler': 2.16.4 - '@parcel/types-internal': 2.16.4 - '@parcel/utils': 2.16.4 - nullthrows: 1.1.1 - transitivePeerDependencies: - - napi-wasm - - '@radix-ui/number@1.1.1': {} - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-aspect-ratio@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/rect': 1.1.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-context': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - aria-hidden: 1.2.6 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/rect@1.1.1': {} - - '@rolldown/binding-android-arm64@1.0.0-rc.12': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - optional: true - - '@rolldown/pluginutils@1.0.0-rc.12': {} - - '@rolldown/pluginutils@1.0.0-rc.7': {} - - '@standard-schema/utils@0.3.0': {} - - '@swc/core-darwin-arm64@1.15.21': - optional: true - - '@swc/core-darwin-x64@1.15.21': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.15.21': - optional: true - - '@swc/core-linux-arm64-gnu@1.15.21': - optional: true - - '@swc/core-linux-arm64-musl@1.15.21': - optional: true - - '@swc/core-linux-ppc64-gnu@1.15.21': - optional: true - - '@swc/core-linux-s390x-gnu@1.15.21': - optional: true - - '@swc/core-linux-x64-gnu@1.15.21': - optional: true - - '@swc/core-linux-x64-musl@1.15.21': - optional: true - - '@swc/core-win32-arm64-msvc@1.15.21': - optional: true - - '@swc/core-win32-ia32-msvc@1.15.21': - optional: true - - '@swc/core-win32-x64-msvc@1.15.21': - optional: true - - '@swc/core@1.15.21(@swc/helpers@0.5.20)': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.26 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.21 - '@swc/core-darwin-x64': 1.15.21 - '@swc/core-linux-arm-gnueabihf': 1.15.21 - '@swc/core-linux-arm64-gnu': 1.15.21 - '@swc/core-linux-arm64-musl': 1.15.21 - '@swc/core-linux-ppc64-gnu': 1.15.21 - '@swc/core-linux-s390x-gnu': 1.15.21 - '@swc/core-linux-x64-gnu': 1.15.21 - '@swc/core-linux-x64-musl': 1.15.21 - '@swc/core-win32-arm64-msvc': 1.15.21 - '@swc/core-win32-ia32-msvc': 1.15.21 - '@swc/core-win32-x64-msvc': 1.15.21 - '@swc/helpers': 0.5.20 - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.20': - dependencies: - tslib: 2.8.1 - - '@swc/types@0.1.26': - dependencies: - '@swc/counter': 0.1.3 - - '@tabby_ai/hijri-converter@1.0.5': {} - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/estree@1.0.8': {} - - '@types/json-schema@7.0.15': {} - - '@types/node@24.12.0': - dependencies: - undici-types: 7.16.0 - - '@types/react-dom@19.2.3(@types/react@19.2.14)': - dependencies: - '@types/react': 19.2.14 - - '@types/react@19.2.14': - dependencies: - csstype: 3.2.3 - - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.0 - eslint: 9.39.4(jiti@1.21.7) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) - '@typescript-eslint/types': 8.58.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - - '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.4(jiti@1.21.7) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.58.0': {} - - '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3) - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/visitor-keys': 8.58.0 - debug: 4.4.3 - minimatch: 10.2.5 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/types': 8.58.0 - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) - eslint: 9.39.4(jiti@1.21.7) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.58.0': - dependencies: - '@typescript-eslint/types': 8.58.0 - eslint-visitor-keys: 5.0.1 - - '@vitejs/plugin-react@6.0.1(vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.0)(jiti@1.21.7)(yaml@2.8.3))': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.0)(jiti@1.21.7)(yaml@2.8.3) - - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} - - ajv@6.14.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 - - arg@5.0.2: {} - - argparse@2.0.1: {} - - aria-hidden@1.2.6: - dependencies: - tslib: 2.8.1 - - autoprefixer@10.4.27(postcss@8.5.8): - dependencies: - browserslist: 4.28.2 - caniuse-lite: 1.0.30001784 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.8 - postcss-value-parser: 4.2.0 - - balanced-match@1.0.2: {} - - balanced-match@4.0.4: {} - - base-x@3.0.11: - dependencies: - safe-buffer: 5.2.1 - - baseline-browser-mapping@2.10.13: {} - - binary-extensions@2.3.0: {} - - brace-expansion@1.1.13: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@5.0.5: - dependencies: - balanced-match: 4.0.4 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.28.2: - dependencies: - baseline-browser-mapping: 2.10.13 - caniuse-lite: 1.0.30001784 - electron-to-chromium: 1.5.330 - node-releases: 2.0.36 - update-browserslist-db: 1.2.3(browserslist@4.28.2) - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001784: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chrome-trace-event@1.0.4: {} - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - clone@2.1.2: {} - - clsx@2.1.1: {} - - cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - commander@12.1.0: {} - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - core-util-is@1.0.3: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssauron@1.4.0: - dependencies: - through: 2.3.8 - - cssesc@3.0.0: {} - - csstype@3.2.3: {} - - date-fns-jalali@4.1.0-0: {} - - date-fns@4.1.0: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - deep-is@0.1.4: {} - - detect-libc@1.0.3: {} - - detect-libc@2.1.2: {} - - detect-node-es@1.1.0: {} - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.6.1: {} - - duplexer2@0.0.2: - dependencies: - readable-stream: 1.1.14 - - electron-to-chromium@1.5.330: {} - - embla-carousel-react@8.6.0(react@19.2.4): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.2.4 - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: {} - - escalade@3.2.0: {} - - escape-string-regexp@4.0.0: {} - - eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@1.21.7)): - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - eslint: 9.39.4(jiti@1.21.7) - hermes-parser: 0.25.1 - zod: 4.3.6 - zod-validation-error: 4.0.2(zod@4.3.6) - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-refresh@0.5.2(eslint@9.39.4(jiti@1.21.7)): - dependencies: - eslint: 9.39.4(jiti@1.21.7) - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint-visitor-keys@5.0.1: {} - - eslint@9.39.4(jiti@1.21.7): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.2 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.5 - '@eslint/js': 9.39.4 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 1.21.7 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 4.2.1 - - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - - flatted@3.4.2: {} - - fraction.js@5.3.4: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gensync@1.0.0-beta.2: {} - - get-nonce@1.0.1: {} - - get-port@4.2.0: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globals@14.0.0: {} - - globals@17.4.0: {} - - has-flag@4.0.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - - html-inline@1.2.0: - dependencies: - minimist: 1.1.3 - through2: 0.6.5 - trumpet: 1.7.2 - - html-select@2.3.24: - dependencies: - cssauron: 1.4.0 - duplexer2: 0.0.2 - inherits: 2.0.4 - minimist: 0.0.10 - readable-stream: 1.1.14 - split: 0.3.3 - stream-splicer: 1.3.2 - through2: 1.1.1 - - html-tokenize@1.2.5: - dependencies: - inherits: 2.0.4 - minimist: 0.0.10 - readable-stream: 1.0.34 - through2: 0.4.2 - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - indexof@0.0.1: {} - - inherits@2.0.4: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - isarray@0.0.1: {} - - isexe@2.0.0: {} - - jiti@1.21.7: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@2.2.3: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lightningcss-android-arm64@1.32.0: - optional: true - - lightningcss-darwin-arm64@1.32.0: - optional: true - - lightningcss-darwin-x64@1.32.0: - optional: true - - lightningcss-freebsd-x64@1.32.0: - optional: true - - lightningcss-linux-arm-gnueabihf@1.32.0: - optional: true - - lightningcss-linux-arm64-gnu@1.32.0: - optional: true - - lightningcss-linux-arm64-musl@1.32.0: - optional: true - - lightningcss-linux-x64-gnu@1.32.0: - optional: true - - lightningcss-linux-x64-musl@1.32.0: - optional: true - - lightningcss-win32-arm64-msvc@1.32.0: - optional: true - - lightningcss-win32-x64-msvc@1.32.0: - optional: true - - lightningcss@1.32.0: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 - - lilconfig@2.1.0: {} - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - lmdb@2.8.5: - dependencies: - msgpackr: 1.11.9 - node-addon-api: 6.1.0 - node-gyp-build-optional-packages: 5.1.1 - ordered-binary: 1.6.1 - weak-lru-cache: 1.2.2 - optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 2.8.5 - '@lmdb/lmdb-darwin-x64': 2.8.5 - '@lmdb/lmdb-linux-arm': 2.8.5 - '@lmdb/lmdb-linux-arm64': 2.8.5 - '@lmdb/lmdb-linux-x64': 2.8.5 - '@lmdb/lmdb-win32-x64': 2.8.5 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lucide-react@1.7.0(react@19.2.4): - dependencies: - react: 19.2.4 - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - - minimatch@10.2.5: - dependencies: - brace-expansion: 5.0.5 - - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.13 - - minimist@0.0.10: {} - - minimist@1.1.3: {} - - ms@2.1.3: {} - - msgpackr-extract@3.0.3: - dependencies: - node-gyp-build-optional-packages: 5.2.2 - optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 - optional: true - - msgpackr@1.11.9: - optionalDependencies: - msgpackr-extract: 3.0.3 - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.11: {} - - natural-compare@1.4.0: {} - - next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - node-addon-api@6.1.0: {} - - node-addon-api@7.1.1: {} - - node-gyp-build-optional-packages@5.1.1: - dependencies: - detect-libc: 2.1.2 - - node-gyp-build-optional-packages@5.2.2: - dependencies: - detect-libc: 2.1.2 - optional: true - - node-releases@2.0.36: {} - - normalize-path@3.0.0: {} - - nullthrows@1.1.1: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-keys@0.4.0: {} - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ordered-binary@1.6.1: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parcel-resolver-tspaths@0.0.9(parcel@2.16.4(@swc/helpers@0.5.20)): - dependencies: - parcel: 2.16.4(@swc/helpers@0.5.20) - - parcel@2.16.4(@swc/helpers@0.5.20): - dependencies: - '@parcel/config-default': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20) - '@parcel/core': 2.16.4(@swc/helpers@0.5.20) - '@parcel/diagnostic': 2.16.4 - '@parcel/events': 2.16.4 - '@parcel/feature-flags': 2.16.4 - '@parcel/fs': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/logger': 2.16.4 - '@parcel/package-manager': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20))(@swc/helpers@0.5.20) - '@parcel/reporter-cli': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/reporter-dev-server': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/reporter-tracer': 2.16.4(@parcel/core@2.16.4(@swc/helpers@0.5.20)) - '@parcel/utils': 2.16.4 - chalk: 4.1.2 - commander: 12.1.0 - get-port: 4.2.0 - transitivePeerDependencies: - - '@swc/helpers' - - napi-wasm - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - picocolors@1.1.1: {} - - picomatch@2.3.2: {} - - picomatch@4.0.4: {} - - pify@2.3.0: {} - - pirates@4.0.7: {} - - postcss-import@15.1.0(postcss@8.5.8): - dependencies: - postcss: 8.5.8 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.11 - - postcss-js@4.1.0(postcss@8.5.8): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.8 - - postcss-load-config@4.0.2(postcss@8.5.8): - dependencies: - lilconfig: 3.1.3 - yaml: 2.8.3 - optionalDependencies: - postcss: 8.5.8 - - postcss-nested@6.2.0(postcss@8.5.8): - dependencies: - postcss: 8.5.8 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - prelude-ls@1.2.1: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - react-day-picker@9.14.0(react@19.2.4): - dependencies: - '@date-fns/tz': 1.4.1 - '@tabby_ai/hijri-converter': 1.0.5 - date-fns: 4.1.0 - date-fns-jalali: 4.1.0-0 - react: 19.2.4 - - react-dom@19.2.4(react@19.2.4): - dependencies: - react: 19.2.4 - scheduler: 0.27.0 - - react-hook-form@7.72.0(react@19.2.4): - dependencies: - react: 19.2.4 - - react-refresh@0.16.0: {} - - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4): - dependencies: - react: 19.2.4 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4): - dependencies: - react: 19.2.4 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.4) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.4) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.4) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - - react-resizable-panels@4.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4): - dependencies: - get-nonce: 1.0.1 - react: 19.2.4 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - react@19.2.4: {} - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@1.1.14: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-wrap@1.0.0: - dependencies: - readable-stream: 1.1.14 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.2 - - regenerator-runtime@0.14.1: {} - - resolve-from@4.0.0: {} - - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.1.0: {} - - rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): - dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.12 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-x64': 1.0.0-rc.12 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-buffer@5.2.1: {} - - scheduler@0.27.0: {} - - semver@6.3.1: {} - - semver@7.7.4: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - source-map-js@1.2.1: {} - - split@0.3.3: - dependencies: - through: 2.3.8 - - stream-splicer@1.3.2: - dependencies: - indexof: 0.0.1 - inherits: 2.0.4 - isarray: 0.0.1 - readable-stream: 1.1.14 - readable-wrap: 1.0.0 - through2: 1.1.1 - - string_decoder@0.10.31: {} - - strip-json-comments@3.1.1: {} - - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.15 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - tailwind-merge@3.5.0: {} - - tailwindcss-animate@1.0.7(tailwindcss@3.4.1): - dependencies: - tailwindcss: 3.4.1 - - tailwindcss@3.4.1: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.8 - postcss-import: 15.1.0(postcss@8.5.8) - postcss-js: 4.1.0(postcss@8.5.8) - postcss-load-config: 4.0.2(postcss@8.5.8) - postcss-nested: 6.2.0(postcss@8.5.8) - postcss-selector-parser: 6.1.2 - resolve: 1.22.11 - sucrase: 3.35.1 - transitivePeerDependencies: - - ts-node - - term-size@2.2.1: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - through2@0.4.2: - dependencies: - readable-stream: 1.0.34 - xtend: 2.1.2 - - through2@0.6.5: - dependencies: - readable-stream: 1.0.34 - xtend: 4.0.2 - - through2@1.1.1: - dependencies: - readable-stream: 1.1.14 - xtend: 4.0.2 - - through@2.3.8: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - trumpet@1.7.2: - dependencies: - duplexer2: 0.0.2 - html-select: 2.3.24 - html-tokenize: 1.2.5 - inherits: 2.0.4 - readable-stream: 1.1.14 - through2: 1.1.1 - - ts-api-utils@2.5.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-interface-checker@0.1.13: {} - - tslib@2.8.1: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typescript-eslint@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) - eslint: 9.39.4(jiti@1.21.7) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.9.3: {} - - undici-types@7.16.0: {} - - update-browserslist-db@1.2.3(browserslist@4.28.2): - dependencies: - browserslist: 4.28.2 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4): - dependencies: - react: 19.2.4 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4): - dependencies: - detect-node-es: 1.1.0 - react: 19.2.4 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - use-sync-external-store@1.6.0(react@19.2.4): - dependencies: - react: 19.2.4 - - util-deprecate@1.0.2: {} - - utility-types@3.11.0: {} - - vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - vite@8.0.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@24.12.0)(jiti@1.21.7)(yaml@2.8.3): - dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.8 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.12.0 - fsevents: 2.3.3 - jiti: 1.21.7 - yaml: 2.8.3 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - weak-lru-cache@1.2.2: {} - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - xtend@2.1.2: - dependencies: - object-keys: 0.4.0 - - xtend@4.0.2: {} - - yallist@3.1.1: {} - - yaml@2.8.3: {} - - yocto-queue@0.1.0: {} - - zod-validation-error@4.0.2(zod@4.3.6): - dependencies: - zod: 4.3.6 - - zod@4.3.6: {} diff --git a/orion-docs/postcss.config.js b/orion-docs/postcss.config.js deleted file mode 100644 index 2e7af2b..0000000 --- a/orion-docs/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/orion-docs/public/favicon.svg b/orion-docs/public/favicon.svg deleted file mode 100644 index 6893eb1..0000000 --- a/orion-docs/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/orion-docs/public/icons.svg b/orion-docs/public/icons.svg deleted file mode 100644 index e952219..0000000 --- a/orion-docs/public/icons.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/orion-docs/src/App.css b/orion-docs/src/App.css deleted file mode 100644 index f90339d..0000000 --- a/orion-docs/src/App.css +++ /dev/null @@ -1,184 +0,0 @@ -.counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; - - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } -} - -.hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; - position: relative; - z-index: 0; - } - - .framework, - .vite { - position: absolute; - } - - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } - - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } -} - -#center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; - - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } -} - -#next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; - - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; - } - } - - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } - - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } -} - -#docs { - border-right: 1px solid var(--border); - - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } -} - -#next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); - display: flex; - padding: 6px 12px; - align-items: center; - gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; - - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); - } - - a { - width: 100%; - justify-content: center; - box-sizing: border-box; - } - } -} - -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { - height: 48px; - } -} - -.ticks { - position: relative; - width: 100%; - - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } - - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } -} diff --git a/orion-docs/src/App.tsx b/orion-docs/src/App.tsx deleted file mode 100644 index 53365fd..0000000 --- a/orion-docs/src/App.tsx +++ /dev/null @@ -1,2122 +0,0 @@ -import { useState } from "react"; - -// ─── Types ─────────────────────────────────────────────────────────────────── - -type Section = - | "overview" - | "phases" - | "flows" - | "agents" - | "memory" - | "harness-gardener" - | "protocols"; - -// ─── Helpers ───────────────────────────────────────────────────────────────── - -const Code = ({ children }: { children: React.ReactNode }) => ( - - {children} - -); - -const Badge = ({ - children, - color = "zinc", -}: { - children: React.ReactNode; - color?: "zinc" | "amber" | "blue" | "green" | "red" | "purple" | "cyan"; -}) => { - const colors = { - zinc: "bg-zinc-100 text-zinc-700 border-zinc-200", - amber: "bg-amber-50 text-amber-800 border-amber-200", - blue: "bg-blue-50 text-blue-800 border-blue-200", - green: "bg-green-50 text-green-700 border-green-200", - red: "bg-red-50 text-red-700 border-red-200", - purple: "bg-violet-50 text-violet-800 border-violet-200", - cyan: "bg-cyan-50 text-cyan-800 border-cyan-200", - }; - return ( - - {children} - - ); -}; - -const SectionTitle = ({ children }: { children: React.ReactNode }) => ( -

- {children} -

-); - -const SectionSubtitle = ({ children }: { children: React.ReactNode }) => ( -

- {children} -

-); - -const H3 = ({ children }: { children: React.ReactNode }) => ( -

- {children} -

-); - -const P = ({ children }: { children: React.ReactNode }) => ( -

{children}

-); - -// ─── Flow diagram helpers ───────────────────────────────────────────────────── - -const FlowBox = ({ - children, - color = "zinc", - small = false, -}: { - children: React.ReactNode; - color?: "zinc" | "amber" | "blue" | "green" | "red" | "purple" | "cyan"; - small?: boolean; -}) => { - const colors = { - zinc: "bg-zinc-50 border-zinc-300 text-zinc-700", - amber: "bg-amber-50 border-amber-300 text-amber-900", - blue: "bg-blue-50 border-blue-300 text-blue-900", - green: "bg-green-50 border-green-300 text-green-900", - red: "bg-red-50 border-red-300 text-red-900", - purple: "bg-violet-50 border-violet-300 text-violet-900", - cyan: "bg-cyan-50 border-cyan-300 text-cyan-900", - }; - return ( -
- {children} -
- ); -}; - -const Arrow = ({ label }: { label?: string }) => ( -
- {label && ( - - {label} - - )} -
-
-); - -// ─── Table ──────────────────────────────────────────────────────────────────── - -const Table = ({ - headers, - rows, -}: { - headers: string[]; - rows: (string | React.ReactNode)[][]; -}) => ( -
- - - - {headers.map((h, i) => ( - - ))} - - - - {rows.map((row, ri) => ( - - {row.map((cell, ci) => ( - - ))} - - ))} - -
- {h} -
- {cell} -
-
-); - -// ─── Agent Card ─────────────────────────────────────────────────────────────── - -const AgentCard = ({ - name, - role, - color, - temp, - variant, - mode, - permissions, - triggers, - details, -}: { - name: string; - role: string; - color: "amber" | "blue" | "green" | "red" | "purple" | "cyan" | "zinc"; - temp: string; - variant?: string; - mode: string; - permissions: string[]; - triggers: string[]; - details?: React.ReactNode; -}) => { - const borderColors = { - amber: "border-l-amber-400", - blue: "border-l-blue-400", - green: "border-l-green-400", - red: "border-l-red-400", - purple: "border-l-violet-400", - cyan: "border-l-cyan-400", - zinc: "border-l-zinc-400", - }; - return ( -
-
-
-
- - {name} - -
- temp: {temp} - {variant && variant: {variant}} - mode: {mode} -
-
-
-

{role}

-
-
-
- Déclencheurs -
-
    - {triggers.map((t, i) => ( -
  • - - {t} -
  • - ))} -
-
-
-
- Permissions -
-
- {permissions.map((p, i) => ( - {p} - ))} -
-
-
- {details && ( -
{details}
- )} -
-
- ); -}; - -// ─── Sections ───────────────────────────────────────────────────────────────── - -function SectionOverview() { - return ( -
- Vue d'ensemble - - Architecture générale du système Orion — un plugin OpenCode qui injecte - un agent orchestrateur pur. - - -

Qu'est-ce qu'Orion ?

-

- Orion est un agent orchestrateur injecté dans OpenCode via un plugin. - Son rôle est de planifier le travail, déléguer chaque tâche à des - sous-agents spécialisés, réviser les résultats, et faire un rapport à - l'utilisateur. -

-

- La règle cardinale est absolue :{" "} - - Orion ne touche jamais au code directement. - {" "} - Il n'implémente pas, ne modifie pas, ne crée pas de fichiers (sauf{" "} - scratchpad.md). Tout ce qui touche au code passe par un - sous-agent. -

- -
-
- RÈGLE CARDINALE -
-

- "You NEVER do the work yourself. You delegate everything to - sub-agents." -

-
- -

Comment le plugin fonctionne

-

- Le plugin enregistre les définitions d'agents dans la config OpenCode - via le hook config. Au démarrage, chaque prompt agent est - chargé depuis un fichier .md dédié. Le scratchpad persiste - entre les sessions via le hook{" "} - experimental.session.compacting qui l'injecte lors des - resets de contexte. -

- -

Écosystème complet

- - {/* Ecosystem diagram */} -
-
- {/* User row */} -
- 👤 Utilisateur -
- - {/* Phase 0 — brainstorm (upstream, before Orion) */} -
-
↓ si découverte produit
-
-
-
- ◈ brainstorm (Phase 0) -
-
-
-
↓ produit docs/briefs/*.md
-
-
-
↓ sinon demande directe
-
- - {/* Orion center */} -
-
- ✦ Orion (team-lead) -
-
- - {/* Bidirectional arrow */} -
-
- ↕ planifie · délègue · synthétise -
-
- - {/* Sub-agents row */} -
- planning - bug-finder - general agents - review-manager - harness - gardener -
- - {/* Review sub-agents */} -
-
- └─ spawned by review-manager: -
- - code-reviewer - - - security-reviewer - - - requirements-reviewer - -
-
-
- -

Ce que le plugin enregistre

- team-lead, - "all", - "0.3", - "max", - "Orchestrateur principal", - ], - [ - review-manager, - "subagent", - "0.2", - "max", - "Arbitre des reviews", - ], - [ - code-reviewer, - "subagent", - "0.2", - "—", - "Correctness & maintenabilité", - ], - [ - security-reviewer, - "subagent", - "0.2", - "—", - "Vulnérabilités & exposition", - ], - [ - requirements-reviewer, - "subagent", - "0.2", - "—", - "Conformité aux specs", - ], - [bug-finder, "all", "0.2", "—", "Root cause analysis"], - [ - planning, - "all", - "0.2", - "—", - "Exec-plans et contrats de travail", - ], - [ - harness, - "all", - "0.2", - "—", - "Encode les patterns en règles", - ], - [ - gardener, - "all", - "0.2", - "—", - "Doc-gardening + Code-GC", - ], - [ - brainstorm, - "all", - "0.5", - "max", - "Découverte produit → product brief", - ], - ]} - /> - - ); -} - -function SectionPhases() { - const phases = [ - { - num: "1", - name: "Comprendre", - color: "blue" as const, - description: - "Orion commence chaque mission en lisant son état courant : le scratchpad, puis deux appels obligatoires aux lifecycle tools. Il qualifie ensuite la demande.", - steps: [ - "Lire scratchpad.md", - "Appeler project_state() — état complet des exec-plans, specs, briefs", - "Appeler check_artifacts() — cohérence inter-artefacts, refs mortes, statuts stales", - "Qualifier : Bug / Feature complexe / Feature simple / Maintenance", - ], - agents: ["Orion seul — phase de lecture"], - }, - { - num: "2", - name: "Planifier", - color: "amber" as const, - description: - "Selon la qualification, Orion choisit sa stratégie de planification. La règle : plus c'est ambigu ou complexe, plus il faut un contrat formel.", - steps: [ - "Écrire le plan dans scratchpad.md", - "Créer une todo list", - "Si complexe/ambigu → déléguer au planning agent (→ exec-plan.md)", - "Si simple/clair → plan inline dans scratchpad", - "Si bug → bug-finder en priorité", - ], - agents: ["planning (si complexe/ambigu)", "bug-finder (si bug)"], - }, - { - num: "3", - name: "Déléguer", - color: "green" as const, - description: - "Lancement des agents spécialisés avec un contexte complet. Parallélisation maximale des tâches indépendantes.", - steps: [ - "Lancer les agents avec contexte complet (objectif, contraintes, fichiers concernés)", - "Utiliser des personas descriptifs et spécifiques", - "Paralléliser les tâches indépendantes", - "Pointer vers les fichiers pertinents dans la délégation", - ], - agents: ["general agents", "agents spécialisés selon le domaine"], - }, - { - num: "4", - name: "Réviser", - color: "purple" as const, - description: - "TOUS les changements code/archi/infra passent par le review-manager. Maximum 2 rounds. Le verdict détermine la suite.", - steps: [ - "Déléguer au review-manager (qui spawne les reviewers en parallèle)", - "APPROVED → rapport + mise à jour decision log", - "CHANGES_REQUESTED → fix via agent + re-review (max 2 rounds)", - "BLOCKED → escalade immédiate à l'utilisateur", - ], - agents: [ - "review-manager", - "code-reviewer", - "security-reviewer", - "requirements-reviewer", - ], - }, - { - num: "5", - name: "Synthétiser", - color: "cyan" as const, - description: - "Auto-évaluation, mise à jour de la mémoire, rapport à l'utilisateur, et suggestions de suivi si pertinent.", - steps: [ - "Checklist d'auto-évaluation : tout livré ? docs à jour ? tests OK ?", - "Mettre à jour scratchpad.md avec le résumé de mission", - "Rapport structuré à l'utilisateur", - "Suggérer gardener si patterns émergents", - "Suggérer harness si pattern récurrent détecté", - ], - agents: ["Orion", "gardener (suggestion)", "harness (suggestion)"], - }, - ]; - - return ( -
- Les 5 phases d'Orion - - Chaque mission suit ce workflow linéaire. La rigueur du processus est ce - qui garantit la qualité des livrables. - - - {/* Timeline */} -
-
- {phases.map((phase, idx) => { - const dotColors = { - blue: "bg-blue-400", - amber: "bg-amber-400", - green: "bg-green-400", - purple: "bg-violet-400", - cyan: "bg-cyan-400", - }; - const headerBg = { - blue: "bg-blue-50 border-blue-200 text-blue-700", - amber: "bg-amber-50 border-amber-200 text-amber-800", - green: "bg-green-50 border-green-200 text-green-700", - purple: "bg-violet-50 border-violet-200 text-violet-700", - cyan: "bg-cyan-50 border-cyan-200 text-cyan-700", - }; - const cardBorder = { - blue: "border-blue-200", - amber: "border-amber-200", - green: "border-green-200", - purple: "border-violet-200", - cyan: "border-cyan-200", - }; - return ( -
-
-
-
- - Phase {phase.num} - - {phase.name} -
-
-

- {phase.description} -

-
-
-
- Étapes -
-
    - {phase.steps.map((s, i) => ( -
  • - - › - - {s} -
  • - ))} -
-
-
-
- Agents impliqués -
-
    - {phase.agents.map((a, i) => ( -
  • - - › - - {a} -
  • - ))} -
-
-
-
-
-
- ); - })} -
-
- ); -} - -function SectionFlows() { - const [active, setActive] = useState< - "delivery" | "bug" | "maintenance" | "discovery" - >("discovery"); - - return ( -
- Les flux principaux - - Selon la nature de la demande, Orion (ou Brainstorm en Phase 0) suit un - flux différent. Le flux Orion est déterminé lors de la phase Comprendre. - - -
- {( - [ - { id: "discovery", label: "Phase 0 — Découverte" }, - { id: "delivery", label: "Livraison (Feature)" }, - { id: "bug", label: "Bug" }, - { id: "maintenance", label: "Maintenance" }, - ] as const - ).map((tab) => ( - - ))} -
- - {active === "discovery" && ( -
-

Flux Phase 0 — Découverte produit (Brainstorm)

-

- Le brainstorm s'exécute avant{" "} - Orion et Planning. Il transforme une idée floue en product brief - structuré via un dialogue Socratique en 3 phases. -

-
-
- 👤 User → brainstorm agent - - - {/* Démarrage de session block */} -
-
- Démarrage de session — explorer docs/briefs/ -
-
-
-
Aucun brief
-
→ Phase 1
-
-
-
Draft existant
-
continuer / nouveau
-
-
-
Brief terminé
-
réviser / nouveau
-
-
-
Multiples
-
liste → user choisit
-
-
-
- - - - {/* Phase 1 */} -
-
- - Phase 1 - - - Découverte - -
-
    -
  • ≤ 2 questions à la fois
  • -
  • Fin : problème en 2-4 phrases, utilisateur principal nommé
  • -
-
- - - - {/* Phase 2 */} -
-
- - Phase 2 - - - Approfondissement - -
-
    -
  • Scope, Critères de succès, Cas d'usage, Contraintes, Idées rejetées
  • -
  • 4 questions de défi
  • -
  • webfetch autorisé pour contexte domaine externe
  • -
-
- - - - {/* Vérification adversariale */} -
-
- Vérification adversariale -
-
    -
  1. - "Voici le meilleur argument contre ce projet…" → 3 choix proposés -
  2. -
  3. - "Qu'est-ce qui devrait être vrai pour que ça échoue en 1 an ?" - → enregistré en Open Questions / Contraintes -
  4. -
-

- Séquentiel, obligatoire, exécuté une seule fois. -

-
- - - - {/* Phase 3 */} -
-
- - Phase 3 - - - Rédaction + Validation - -
-
    -
  • Générer le brief complet → présenter inline (pas d'écriture)
  • -
  • Itérer via question → Quality Gate
  • -
-
- - - - {/* Quality Gate */} -
-
- Quality Gate -
-
-
-
Tier 1 — auto-fix
-
Solution dans Problème, Vision >3 phrases, nom non kebab-case…
-
-
-
Tier 2 — question obligatoire
-
Utilisateur vague, Cas sans AC, Critère non mesurable…
-
+ STOP si bloquant (Problème absent, Scope In vide…)
-
-
-
- - - Écrire docs/briefs/{nom}.md - -
- → planning agent - → Orion -
-
-
-
- )} - - {active === "delivery" && ( -
-

Flux Livraison (Feature)

-

- Utilisé pour les nouvelles fonctionnalités, les refactors, et tous - les travaux d'implémentation planifiés. -

-
-
- 👤 User → Orion qualifie - -
-
- Branche de planification -
-
-
-
- Si complexe/ambigu -
- - planning agent - - - - exec-plan.md - -
- status: draft → active -
-
-
-
- Si simple/clair -
- - plan inline - - - - scratchpad.md - -
-
-
- -
-
- Boucle d'implémentation -
- general agent → implémente - - review-manager -
-
-
- APPROVED -
- - ✓ bloc validé - -
- update decision log -
-
-
-
- CHANGES_REQ. -
- - fix + re-review - -
- max 2 rounds -
-
-
-
- BLOCKED -
- - escalate - -
→ user
-
-
-
- - exec-plan: completed - - - Post-delivery: suggest Gardener + Harness - -
-
-
- )} - - {active === "bug" && ( -
-

Flux Bug

-

- La règle : toujours{" "} - passer par bug-finder avant d'implémenter un fix, sauf si la ligne - exacte fautive est déjà identifiée avec certitude. -

-
-
- Bug report → Orion - - bug-finder (root cause) - -
-
- Pattern Detection block -
-
-
-
- Pattern: YES/NO -
-
- Encodable: YES/NO -
-
-
-
- Certitude: -
-
- HIGH / MEDIUM / UNCERTAINTY -
-
-
-
- - general agent (fix) - - review-manager - -
-
- Si Pattern=YES + Encodable=YES -
- - - → suggest Harness - -
-
-
-
- )} - - {active === "maintenance" && ( -
-

Flux Maintenance

-

- Le gardener est le point d'entrée de la maintenance. Il opère en - deux modes : doc-gardening et code-GC. Les patterns récurrents qu'il - détecte deviennent des règles mécaniques via le harness. -

-
-
- - Gardener (post-feature ou périodique) - -
-
-
- Fonction 1 : Doc-gardening -
- - docs stales vs code réel - - - - PRs de correction - -
-
-
- Fonction 2 : Code-GC -
- - vérifie dérives sémantiques - - -
- - one-time → PR directe - - - pattern récurrent → Harness - -
-
-
- - Harness agent - - Identifie → Choisit artefact - -
- - lint rule - - - CI check - - - AGENTS.md - - - guiding-principles - -
- - - PR → artefact s'exécute autonomement - -
-
-
- )} -
- ); -} - -function SectionAgents() { - return ( -
- Les agents - - Chaque agent a un rôle précis, des permissions restreintes au minimum - nécessaire, et des conditions d'activation explicites. - - - -
-
-
- Démarrage de session -
-
    -
  • - - Délègue explore docs/briefs/ en premier -
  • -
  • - - Aucun brief → Phase 1 directement -
  • -
  • - - Draft trouvé → continuer ou nouveau brief -
  • -
  • - - Brief terminé → réviser ou nouveau -
  • -
  • - - Multiples → liste, l'utilisateur choisit -
  • -
-

- La lecture de fichiers est déléguée à un sous-agent{" "} - explore via task. -

-
-
-
- Workflow 3 phases -
-
-
- Phase 1 - - Découverte — ≤ 2 questions, problème en 2-4 phrases - -
-
- Phase 2 - - Approfondissement — Scope, Critères, Cas d'usage, Contraintes - -
-
- Phase 3 - - Rédaction + Validation — brief inline → Quality Gate → écriture fichier - -
-
-
-
- -
-
- Vérification adversariale (entre Phase 2 et Phase 3) -
-
    -
  1. - "Voici le meilleur argument contre ce projet…" → 3 choix proposés à l'utilisateur -
  2. -
  3. - "Qu'est-ce qui devrait être vrai pour que ça échoue en 1 an ?" → - enregistré en Open Questions / Contraintes -
  4. -
-

- Séquentielle, obligatoire, exécutée une seule fois avant la Phase 3. -

-
- -
-
- Quality Gate -
-
- Tier 1 — auto-fix silencieux - Tier 2 — question obligatoire - Tier 2 — STOP si bloquant -
-
    -
  • - - Questions (Tier 2) : utilisateur vague, cas sans AC, critère non mesurable, rationale inconnu -
  • -
  • - - STOP conditions : Problème absent, aucun critère de succès, Scope In vide -
  • -
-
- -
-
- Artefact de sortie -
-
-
# docs/briefs/{project-name}.md
-
---
-
project: nom-en-kebab-case
-
type: product # product | tool | library | service | experiment
-
status: draft | done
-
created / updated: date
-
---
-
## Problem
-
## Vision
-
## Users (Primary / Secondary)
-
## Core Use Cases (UC-NNN)
-
## Success Criteria (SC-NNN)
-
## Scope (In / Out)
-
## Constraints
-
## Open Questions
-
## Rejected Ideas
-
-
- Phase 0 — s'exécute avant Orion et avant le planning agent. - Ne fait PAS : market research, architecture technique, tickets, backlog. -
-
- Le brief est toujours rédigé en anglais, quelle que soit la langue de la session. -
-
-
- } - /> - - -
- Ce qu'Orion NE fait PAS -
-
    - {[ - "Modifier des fichiers source (sauf scratchpad.md)", - "Exécuter des commandes shell arbitraires", - "Implémenter du code", - "Accéder à internet", - ].map((item, i) => ( -
  • - - {item} -
  • - ))} -
-
- } - /> - - -
- Verdicts possibles -
-
- APPROVED - CHANGES_REQUESTED - BLOCKED -
-

- Spawne code-reviewer, security-reviewer et requirements-reviewer - en parallèle. Maximum 2 rounds de review par bloc. -

-
- } - /> - -
-
- Reviewers spécialisés (spawned by review-manager) -
-
- {[ - { - name: "code-reviewer", - focus: "Correctness, logic, error handling, maintenabilité", - color: "border-violet-200", - }, - { - name: "security-reviewer", - focus: "Vulnérabilités, misconfigurations, exposition de données", - color: "border-violet-200", - }, - { - name: "requirements-reviewer", - focus: "Conformité avec les requirements originaux", - color: "border-violet-200", - }, - ].map((r, i) => ( -
- {r.name} -

{r.focus}

-
- mode: subagent -
-
- ))} -
-
- - -
- Format de sortie -
-
-
- HIGH → implémentation directe -
-
- MEDIUM → implémenter + signaler -
-
- - UNCERTAINTY_EXPOSED → questions avant de continuer - -
-
-
-
Pattern Detection block:
-
Pattern récurrent: YES / NO
-
Mécaniquement encodable: YES / NO
-
- Si YES+YES → Orion suggère Harness -
-
- - } - /> - - -
- Template exec-plan -
-
-
- # exec-plan: <feature> -
-
- status: draft | active | completed -
-
## Goal
-
## Scope
-
## Building blocks
-
- - [ ] Bloc 1 (Done when: X, Depends on: —) -
-
## Open questions
-
## Decision log
-
-
- Activation : complexe OU ambigu. PAS pour bugs (→ bug-finder). - PAS pour tâches simples. -
- - } - /> - - -
- Hiérarchie des artefacts (préférence décroissante) -
-
- lint rule - - CI check - - AGENTS.md - - guiding-principles -
-
- Workflow : Identifier le - pattern → Choisir l'artefact → Générer la règle (le linter - lui-même, pas une description) → Tester contre le code existant → - Ouvrir une PR -
- - } - /> - - -
-
-
- Fonction 1 : Doc-gardening -
-
    -
  • - - Trouve docs stales vs code réel -
  • -
  • - - Ouvre des PRs de correction -
  • -
  • - - Vérifie README, AGENTS.md, specs -
  • -
-
-
-
- Fonction 2 : Code-GC -
-
    -
  • - - Vérifie vs guiding-principles + AGENTS.md -
  • -
  • - - Dérive one-time → PR directe -
  • -
  • - - Pattern récurrent → trigger Harness -
  • -
  • - - Met à jour QUALITY_SCORE.md -
  • -
-
-
- - } - /> - - ); -} - -function SectionMemory() { - return ( -
- Mémoire & État - - Deux artefacts de mémoire complémentaires : le scratchpad pour la - mission courante, l'exec-plan pour le contrat de feature. - - -
-
-
- scratchpad.md - éphémère -
-
-

- Mémoire de travail d'Orion pour la mission courante. Survit aux - resets de contexte. Écrasé à chaque nouvelle mission. -

-
- Contenu -
-
    - {[ - "Mission courante", - "Plan (blocs, dépendances)", - "Tâche active (sous-tâches, fichiers modifiés, resume context)", - "Résultats des agents", - "Décisions prises", - "Questions ouvertes", - "Scopes parkés", - ].map((item, i) => ( -
  • - - {item} -
  • - ))} -
-
- .opencode/scratchpad.md -
-
-
- -
-
- exec-plan.md - permanent -
-
-

- Contrat de travail de la feature. Partagé, archivé, mis à jour - pendant l'implémentation. Répond à : quoi + done-when + - depends-on. -

-
- Lifecycle -
-
- draft - - active - - completed -
-
- Contenu -
-
    - {[ - "Goal (l'objectif final)", - "Scope (in/out)", - "Building blocks (Done when + Depends on)", - "Open questions", - "Decision log (mis à jour par Orion)", - ].map((item, i) => ( -
  • - - {item} -
  • - ))} -
-
- docs/exec-plans/<feature>.md -
-
-
-
- -

Différences clés

-
Oui (hook compaction), - Oui (fichier permanent), - ], - ]} - /> - -

Lifecycle tools — les outils qui font avancer les plans

-

- Orion dispose d'outils de bookkeeping directs — sans délégation, sans - sous-agent. Ils sont déterministes et non optionnels. -

-
project_state(), - "Début de chaque mission", - "Vue complète : exec-plans, specs, briefs", - ], - [ - check_artifacts(), - "Début de mission + fin de scope", - "Scan de cohérence inter-artefacts", - ], - [ - mark_block_done(plan, block), - "Après chaque livraison validée", - "Coche un bloc dans l'exec-plan", - ], - [ - complete_plan(plan), - "Quand tous les blocs sont cochés", - "Passe l'exec-plan à status: completed", - ], - [ - register_spec(file, title), - "Quand une nouvelle spec doit exister", - "Crée le fichier spec avec frontmatter minimal", - ], - ]} - /> - -

Survie au context reset

-

- Le scratchpad survit aux resets de contexte via le hook{" "} - experimental.session.compacting — Orion retrouve son état - courant après une compaction. L'exec-plan, étant un fichier permanent - sur disque, survit également par nature. -

- - ); -} - -function SectionHarnessGardener() { - return ( -
- Boucle Harness / Gardener - - Le mécanisme d'amélioration continue du repo. Ce n'est pas un processus - humain — c'est une boucle de feedback autonome entre les agents. - - -

Philosophie de la boucle

-
-
-
- harness -
-

- Installe le filet. Encode - les patterns récurrents en règles mécaniques (lint, CI, docs). Une - fois installé, il s'exécute automatiquement sans intervention - humaine. -

-
-
-
- gardener -
-

- Vérifie les mailles.{" "} - Détecte ce que lint/CI ne couvrent pas encore — la dérive - sémantique, les docs stales. S'il trouve un pattern récurrent, il - déclenche harness pour combler la brèche. -

-
-
- -
-
- DISTINCTION IMPORTANTE -
-

- Le gardener vérifie UNIQUEMENT ce que lint/CI ne couvrent PAS encore. - Si le harness a déjà encodé une règle, le gardener n'a pas à la - revérifier — c'est redondant. -

-
- -

Diagramme de la boucle

-
-
- Implémentation feature - - Gardener (post-feature sweep) - -
-
- Dérive détectée ? -
-
-
-
- Non -
- - QUALITY_SCORE.md ↑ - -
-
-
- Oui -
- - One-time → PR directe - -
- ou -
-
- - Pattern récurrent - - - - → Harness - - - - Encode règle mécanique - - - - lint / CI / AGENTS.md - - - - PR → s'exécute autonomement - -
-
-
-
-
-
- -

Règle d'activation du harness

-

- Le harness n'est PAS un outil de setup initial. Il est déclenché quand - un pattern a DÉJÀ émergé — la répétition est la preuve qu'une règle - mécanique est nécessaire. -

-
- - ); -} - -function SectionProtocols() { - return ( -
- Protocoles - - Les règles opérationnelles qui gouvernent le comportement d'Orion dans - les situations critiques. - - -

Protocole de review

-
-
- review-protocol -
-
-
-
- règle -
-

- TOUS les changements code / architecture / infrastructure passent - par review-manager, sans exception. -

-
-
-
- max -
-

- Maximum 2 rounds de review par bloc. Après 2 - rounds sans résolution → escalade. -

-
-
-
- Arbre de décision -
-
-
- APPROVED - - → rapport à l'utilisateur, mise à jour decision log, ✓ bloc - -
-
- CHANGES_REQUESTED - - → fix via agent + re-soumission (max 2 rounds total) - -
-
- BLOCKED - - → escalade IMMÉDIATE à l'utilisateur, jamais de contournement - -
-
-
-
-
- Quand passer la review -
-
    -
  • - - Doc only, pas de sécurité (gardener le vérifie de toute façon) -
  • -
  • - - L'utilisateur demande explicitement la vitesse sur une tâche - triviale -
  • -
-
-
-
- -

Protocole bug-finder

-
-
- bug-protocol -
-
-
-
- règle -
-

- TOUJOURS déléguer au bug-finder en premier — sauf si la ligne - exacte fautive est identifiée avec certitude absolue. -

-
-
-
- Comportement selon la certitude -
-
-
- HIGH - - → implémenter directement sans demander confirmation - -
-
- MEDIUM - - → implémenter, mais signaler l'incertitude dans le rapport - -
-
- UNCERTAINTY_EXPOSED - - → poser les questions à l'utilisateur AVANT de continuer - -
-
-
-
-
- -

Gestion des erreurs

-
-
- error-handling -
-
-
-
-

- NEVER retry with identical inputs. -

-

- Si un agent échoue, soit le prompt est reformulé, soit la tâche - est décomposée, soit on escalade. Jamais de copier-coller de la - même délégation. -

-
- - - -

Gestion du contexte

-
-
- context-management -
-
-
- {[ - { - step: "1", - action: "Update scratchpad FIRST", - detail: - "Avant toute action longue — c'est l'assurance compaction. Si le contexte reset, Orion sait où il en était.", - }, - { - step: "2", - action: "Distill agent outputs", - detail: - "Résumer les sorties d'agents en summaries compacts. Ne pas conserver les outputs bruts dans le contexte.", - }, - { - step: "3", - action: "Prune stale content", - detail: - "Après avoir incorporé les résultats, supprimer les contenus obsolètes du scratchpad.", - }, - ].map((item) => ( -
-
- {item.step} -
-
-
- {item.action} -
-

{item.detail}

-
-
- ))} -
-
-
- - ); -} - -// ─── Sidebar nav ────────────────────────────────────────────────────────────── - -const navItems: { - id: Section; - label: string; - description: string; -}[] = [ - { - id: "overview", - label: "Vue d'ensemble", - description: "Architecture générale", - }, - { - id: "phases", - label: "Les 5 phases", - description: "Workflow de chaque mission", - }, - { - id: "flows", - label: "Les flux", - description: "Phase 0, Feature, Bug, Maintenance", - }, - { - id: "agents", - label: "Les agents", - description: "Rôles, permissions, triggers", - }, - { - id: "memory", - label: "Mémoire & État", - description: "Scratchpad, exec-plan", - }, - { - id: "harness-gardener", - label: "Harness / Gardener", - description: "Boucle d'amélioration continue", - }, - { - id: "protocols", - label: "Protocoles", - description: "Règles opérationnelles", - }, -]; - -// ─── Main App ───────────────────────────────────────────────────────────────── - -export default function App() { - const [activeSection, setActiveSection] = useState
("overview"); - - const renderSection = () => { - switch (activeSection) { - case "overview": return ; - case "phases": return ; - case "flows": return ; - case "agents": return ; - case "memory": return ; - case "harness-gardener": return ; - case "protocols": return ; - } - }; - - return ( -
- {/* Top bar */} -
-
-
- O -
- - Orion - - / - Documentation -
-
- - opencode-team-lead - -
-
- -
- {/* Sidebar */} - - - {/* Main content */} -
-
- {renderSection()} -
-
-
-
- ); -} diff --git a/orion-docs/src/assets/hero.png b/orion-docs/src/assets/hero.png deleted file mode 100644 index cc51a3d20ad4bc961b596a6adfd686685cd84bb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44919 zcma%i^5TDbT`tlgo2c`(n!ND-Q6MGAYIbZ-QCh5-QC^YozK_ne*b_MKK#O- zIWy zd$aJVZ?rl%;eiC7d#Sl-cWLv9rA0(UOX(@I3k&yyL+3GaQ4xpb1EGC|i|{byaTI># zBO=0pyZu5XO!hzGNPch4cx%6XJAJpDa<+98BOcYNo1=XER1sv!UW z^>ZDMp%FSmVnt)n^EIR+Nth`vRO^_=UF3EWv75ym{S;#2F8MPot@-y$>ioj!)a1bE zijXPQY;U`qNwl9|wl{W>{FhMSb<>m4{;8Udp4psl)NwFRo(W-T)Y6-qDf=L#U?g<@ zV+T|3+RuE~!E&nodKrkfPcOpJ)&1|p`Tbtd12@MSE8DjWkD|9M>GZsHLf>TTbLx)B z#5K5l%gS7s(yWk?Lj{Nvm`Z-s8xb-Xr`5-xRr%w8v>!oSz{dN*MmxbscQl#Z40qSd z!PQXs-utLEF&$@S#__Lo*pOhG{l(%jyCh-0ME8owiT>U~r&q@MaDRePL(aZAAff9= zBd@*7RZxmiqK^nZH7`bTjIEQw#Y=V6(h{$>7ZIf=7S0;$8~4NXLd4T;Ai~C8&3k-; zYEtJWq6x$#5rrCJ%zspgO z((R)&>BIkkr^qQSEZljO*B+ZDvTeBKJ9N%8Ej=U+62GI)dc|ZMEM66~W12v&QFAIS zoDs`J`wjsl?WdE(NTnjCO!^yB>{yU-2UPT`&FOyVQVmxy#un2Po>GiPPfzd0M^d_i z+Kr}dPhIfsDLd~jOiJ(sHTN;2u)@MaX&0AdXR;BAwr_;1sR;)MM+&{XTzNnKWH@0a zoy9ApaUt=>jjHICu3W42)5;nzHS!M3?aOvZfv-sIc%wc9#l0uHFc}aS4JSrIDOQ?4ri_bS?pjH{U{6qr+6m z--%u=5oc&PxE==-I$~$5gw}yiu_y_o?|ag2+rAgSg%G)}EU}r%*A|v|pjbE`lxJpU zy0{?;(US(i-TiKq6s_(KTYy|YVi&!plMT)EJ4wMU{C7Y;!Xow1nJ+X@ks@r0v25R; z*o$8AP*G*f3$UlYR~18PxKyPj9vU#v)4#GgEx4*?KOhlh>0%3M$-LN7&b*0fXgm$k zH78>bObkx^3_K+RY;G+Usy6L}p9iT!hlnJCmR=;=JL1TdtB#vL!RTJ1TABQx8Ux0w zl^{Jkf(hU>-jr59iK_v-PkV!WwG!LvW<@{3{IbbSiWBrX@S8^`8JFRrc+(AqsUIvm zCTstACtCZ~qy-5^Gr@_z#X!N1*1vH=7@8oL4AEOxWl^YW&LW|1$1J?gG061vk1epe zRI_*s(lrX?-2#tCt_`)p?{zZC+)onl60CU~%4!vPA}h0+fB9ucNkTQ3u29((9Wq=> z^JUm|{_2-=?dMKu&9)#x{lgPOCM`U1^tXDbmZ%I$0fw7|Y-@3Tyj1LGfk$lvzYC85 z=R()QEER%Dz=mTMZ=7E?K74&?)4b~-uj34rKwb~7vU(48%+1xYc^VYn| zncI4NL8xEnmi>eM9EK&~si%*s|BX@zKIUU?cAWA5pdc`xEZIF1Ce=Wcg3#AP?N~p# zD7mfb{oR=ZPE^jgwD3G< z#8h1K&u&zKD4q*Pxt0ta#d}bm;QqZ!hFift22a~7c529SkmFQyN-*H zzQck2cL5iH2@d@Lhq4$~_!wMWL6(&mNq=7HhT}YYI$pVVZeQr>)4>qObE$PPNZ2!0 z&7?y_upwfiefj8-`B$ju)}QKTz*Zs<$Lb?XHBo(jyU(405&`EL({mgxA$Ov49U|rN z2@(l@n`1vzG(v=!u4AZ*0s}~H4{VgcNOJ1rB?Kg!=)mGHKWeC|MHb>aiQ4Qd+gq7|??WH7;?J+kYL8z# z@juTBhW#n3rN))N7T1~)qr~Es;2rln6_U>_Ejxj(E5%Cpoc^vfw64mua!ADSZ8i|+ zB}g?u(dtvesTegnG!9K33T)4eq>)>ZFp?L>R8Qp#(J=bxz2mscD;ZNoJB@ZUqPpI>o7VgScniW4c()#;@;-9PfR`b(r+#4c; z;1-)`!?b}4A3v^zVtGa(a;O%bzu(ZG;(l4+W^vU|a&n*xV0kU$uFQ!5!aWy)^q4^r zn!-6hfj79_B#>GGNvQiKMD?xyW>F&GS>3y?Ric*xp4cz3FH3Gd1z|e+Vuug7*Ya48 zL~K*l5zo1XRuWm%S~GzE4LQyuRsH1&L`Gz-%>!ZTYn9K_Ttz+Pa@9hKob^)gmLVN` zKJz}C50X$$>G1Q_p;%C}B?<9h`60%vwalt2*Ymd44dGF(oOa2mJQuPQmE~Yurn0UC z6(+5$posAd@e$nvJQFL^C~E0E4IH`B68)j#L_u|Ex5mNE8a8{>gAGcIFVS|K?g77# zE@R|9nR>Rw3(5}{d~HnPpooZ*XZC$5FYt20 z3Ydvy9t)XHw8qFCd;mt8r$e?RQ%MiUF@}!oDGG#E6xxV z=z>11f!msSqbAZYnSvt}&J+QXZCU5b`0!gi_R}Z@Qq2d2Mwc z%9aWfp&x2UGbLDvtjGb*p>4O(#}UE+QhYmf0&Vc_Ay<~3V0zym%`Lk}-3MOz<%)%#Pl z<=OjGrvuBq318+CJ-{30QA1-O@<-O!-zFNM^&wp}iWGG$B&eIYtF)Rs4;5FK=>Aa9 zyTJdUgpK$di~MI|ZC=Vkd^V6T5h^z))sl~Dq7~stg?&l_LW6N1>0nX=aS46Ks+vj7 zr#P2~h=M-LLX2!W_k&dv^Tm2}o9vK&uKMDMmPkEcj7~C78vw2XJx^s8uo(Lw>9ET2 zzXG^MDxZzwh4y=Hs@h^Y2$ntYP+GSm>#cM9ZiUR^>tiFtIol3wi8=y~L2f@Bun;{B zr@yZMir9Ur@yw@7ni+Jd*Oc9hFx zK$M%P9+XKj>`spPB?k6^h1pok(_k*E$fr(SnXlXEnE{ODRWuWqB2u+8*2z?-wl+WC zntSCtFwpr0nF!avN+7`^Pt@XDvec7%ipuHYXg%5TXDAXv;U-33A(vzDB8V%0%j-R@ zk!2mox%%pJ<_M$o0lf*YButy@IP%9Zz=UDDlr|NuSNW*bYB{&18Xj|$eVP~(lx>y3 zgjJh3l1)5_uw6CTgk`ABQVoCHT$nbFS*edKLAbhRxLyzMI-{#6H!q_O@+mM7#~@Kw zWFDq#m<+NGVr`grM*Mh=Dq@8Tzl-$WKFWsWruYa^v`B30wDORai8q&__SDBzc?K#o z^UN`hN&IN;bep+mS1Z}i#zurS+Vl`B&+6`B#XK@l^8+&2+e@&zII(kdzid}Lm^AE5 zqjZ+3N*0O?1%{glymHcUP?g3vB#mH9MA)__>pUakjX+4jPuRS$9mmbImM8^= zOGMzKSY0_htZs;&-)|di4DJjSjVQ}hf2vq`u?G4@2@M(y#8xp{#1&$)ZW$rlUwG%{ z-S3I$D5~^(7stnQ#qh(0D6TnSA5R2*0u@x*22u1y%V5wYfW$b@)H*9X9{5!1Gw0`$ z4^fR@T%cw74(zCoPNP98@iS+WaFoE>g!a7#s-iwfRHKJSou%<97*I%619(655MjTr z6;k$p>T1-|cb9V=`;0i>gjBf%t=3jn_oC874-1o3(J|G-g$c?a=wn!m?U?CAd4WKW zm>=k4ApUHFtra|}Wl_G|#Y@n(Qv*q-frfU@rg{K1dLr%5(jA(Als7lSt8bue+zbab zVF0VKb`8x4k`2s^D1=P<^mk&LXhA!1jsr46^sGC@bsZfT)hZq4gnT+I+aHp`_XRE{ zDgx9ExOOSGF^DuVB_iQ8s$S{7agA7rKLtYG0nVl0q1kdJPQ3g#tw9qL?gP!_e~V$R z7B*H7J0{kp*t0|SM#+|$l6`>>9*GXki2@B!1?#&`s}t$D9D05bdTLaq__DzJ3hhhx z4>Z*xjuhGkL>lPDr8KhXi~8N*3~eqgebLTG`3g)&9`ESMo4O`ywJ{RymGvLXG}!Y?yAZ!5^Y19ukC`n~3GM7)2v! zx|C7WvVV`|+~>K~FRJPdp3VTPY##;_7#_^stFuo>5ewhPn5=@ApsXs_<27I&gPv>g~?s5SHzci&*$xeFVsI6?MsNJwojSpg9-+xbDwNanO9CUPbs06^E~@ zW3}{)@boKx;MgISD4?gb;X2~Nzv6Vu z_d;=oiM*wq!ou(NN8Zrg1ZYYlE==ylKlarfHe9u21xL{BI8t!pRC1^0=DGRrV0_Q@ zC#L85xcROt(T$6-@Y|KI-@7cgFD>WF?-)WG5jRleK;pn&=Rb9nZ+_@Mx-Fk~VSb{E zq@Ay=ub)@s&Mz*$+FSlG0WrrMKZI+3YuZ5k`RZGGO+r;}6mJy$DM;>AadvNZ=5yf|1r(je z0NIXNIS||Cv*MHEs{?>y+_cZmakNb+;cq-QqDcP%tMf{NmoE%a zN}Y33Vukiwxzm0dhmNsZQ>TsfYfZ-XZJv?ZTQ(=j1nt6FMd#;_K1oqQ{yq$GC6%)U zZU3B>;dh0p{DE?0kaj|iKj8?vvgC|-pv7<_WZBV7+B?`x+~3_las0^52<3d}UOOFD z7O7yf($skvy4y{NCq)B!Z=x|~NnJN+V(IV6LPL~?ORfvDDj*}q67_9}bTd~ci zlKmqOV)pG2tgWwY4Xr65@I8rddMwBV71bVAeGxT?v8-f6l9tsu9MFYr4r+BQr%mT; zO=G1)NW}SP4_kI0273Ew)qtwOwo=X-`1?bJ^>I^-9FXhSX17W>;{G^F+<9U(<%-*JPc!x>jH zSpfzK?Tx3%`#8Qlql2)Lf)TAiKHBQ5IOieg6~2NY7g@9IFI!7$DETtUG^srTsi2YS zc$`cq59-bK0{Yv})|#O4%XrxCkS29A6q~iTWNRlF;SlDMr$~v5hgerQQg_UB>M>2% zI6J+NtM*`(N7ghI_emz^lYyF_O8LW&&6oX-gU1h39L7r@8tpHA@>FGx*W=fR6E@q@ zg{!zJeVuJaQCuA=1@IE7|3##J$1oumJ5vky^UJEjKU#$)KuHS7B;vs(wJ%$?>4zlr z<=b*ca@HsJ!Osy3xBOqrn__D7pqhw2^7;n0$R~Z;twx??hrssk#C1cMtRHfFzhTG1 zE{;!Tmiq;ZD9#2W4(M?+!*~v>l$%5;__SINKTNAEIBf46X8185dhp4TD9_K#gp?em zl9d>E%I2x(q#pB8rt!89i!Mi7sMMmaZ?N?eM2!JHoQ{QdAoSm@`@TtaEkw{)WuZe^ zzrVO3sL=ewi4YYv1t!gfQ_Xo()Is9PQtqh!#?v&Mscaiz6wb$F>GjZE1xw7d5)*24 zu~!(MAawsNH*G-kU-c=3l(?|JJl0^q#LV(WKmSHC=#5YKstmI(V=6c4>73kKDwk3F zD!sjK#(*WYb8j>uP??1gq4SEU63;>Pk_#yOYu7(GAy4!ABPQY-WoeY1I=l2&k9RM( z;&F-Ki}KoHAb;HXNP-^_3u`-L$+~dmP7LmypyE23q+IsyIAyGbu{1T^)Y7+m(;oN@;N26N#9X<& zwqI@>wi=7v)<%`#h|WWx1pPuT%3Hx zTmHj4u@(m6TMc`y;_9#P8As?uJeu-!|Lgzd>}uWMUo5{kA<)1ndxs@UZR32fT6pJHGaO!4QH(eAa5+t zS1N59EQ1r6i z<(E$QmAL~w+VkGpLI9*Hnm0tLT@_hjW9JWQXev%DVG3YZJ@}x78{*jc{asC?1L_)h zF^DC#%H`1`O_VrpaQ}@~&1zbs5~&ja^i#ZVXwP!}j8mnEV@;<{Ahw)4%S3LKNFJ3i zaiK4p7j50(Gg`7o7JU5p$cw9Ok3@$*lZ@g;nFZi|2gmE)4`U4Rnm2m{vKk-zbX%kA zCoK32`kIhZtyUTzRW&2mT0PG|s|zU{4QPllcC91scP>F97ZXap<9Bv#F$2P|qk;b&2$rxv~0fH76P8hs?SUZLs6n%pW)x z{94NZ^zuBrMOvmx1jBKr7I^C(e7yj;&kgD*7xRHBhV0n=;gNznW(J%ArEdQ3v2RnW zr(kstOqa&TJ`*F&kJM}we0``YRAQ>!`T?;}wzZgRk(fa^)#2*9%Z+psyrobKU%nac znGGN&)Npn`s=}e$R4yL6IsRDDSF=Ps)Z;1?NH}K#C*jVV4dx0@(DMhJqOL*I6)&L4 z9cLFcW!bbaiw~-ib4#2tjht6tOE}{zD6zU{xlC2$ zI>jGRD=rdrA25&Qq4jqQAhS4A^TEeuR}+ZLmIn&KRN3!3YkB-ej*-b9-c-AE)S%N> zf?x6evrm$2MOQ(b0-<^gvSC_6oBe@p+i`Ajxy1G91_dbm9z>* z`v6e3>~L1a-C*c2`$0^HXjr4(?IN{jFy+;}uvyb!LNh16HAJ)d@63e8GRMmWrMZ&F zv_aLU&4#ktx$@=QM^zZSdGAFn^&JpWIEc06k(WFQd*!&PpmY;wf3>)TvXQM+vqd#z zyU8VT;5@(~T!27u_1N3Z<{-f&SNd-M>^C*BK>cKP5&U7*KXmq@FP2FiN4aT+-1iF~ zfRiPbO{*ky%`uehvD+s~XnH7V{jvXcN8((ts-<3M-#N&I$MX3xlZ!UGg+fiN+}`r5 zkj3AjM%Sj6BRHE5?Q@(GmaEXx+0)r!TPtcgyrsy<^`_Wc*hwyr-;OCdQ4#vF=h5Xj!r_#p6O*Q* z)GM*S@GP^XHnavtL<^TD>&W%F)LS4nt}T73^w2{aE8S?2vByR~WOdM+N!yff<@?z8 zI#ww-Zu3B+Dw2VJIAV7nOX9!ujfO>l`;d|vXtw#0QXN#ak`$I0n8kN5(2;87J-CD? zHmL*sL>eCfe*GTXwvDI2D~K%nI37JKu}-!Po8ExO7L8{#pw*RuB`6KEDkQxqNdG4R zbz*yTL(6Iv2z+#WI#BgSE1!LJckdfI7H#~xxtSQ;JHtJbofI^}g8L7|Kn}2;V?6dd zK9bChE}t-w#v@|YYe!RB4PsH{@hW+RWHlR3f&YL23-N7 zB={^p7mTZ^ud}HaFV%4UvxHK!)luf%KBVaoi+}5rSQwa@bCw;vYHCGARWld==<7kL z=59v02kEeG3Rm_z)Zc3=MXmaA)I9-9T+O+St{6L3)`@2_41VCAA&8E3bj5sZx5x4s zmtI{uQpw=7HHzdjnUy|za5p(fC=*%NXWhuB(Dh_u6(6Y_e%!8tO&OI$^_@sEYZMc) z<_`+vf$U0(c!m5aMnvIZvM^uI5SEj)Z(;;xrCT_CmpZM4!RQ9UsISG;<-MiaiPA(v1+;q7waq z#DaO&yeXX-esRlYcP9QBezojM(;1VYYslzFHa5kqnhTql9tB)(1PR83ymJM)zr}u2 zA!bL-PF~HWs6_&|a2T`59w8gMCgzI0ZUSUfQfl;Ojkd&KMV<)NhcnfxuOH2mUXuwQ zAM*!OvW!{`MXjm7TIXfL-k+n%0dP~x1% zi$3~@96_CUQxT;Gzf^B~3kR0u=7eg2I4Fgw5M>k5m~x;XrP_^xUNLYFvz1}cRTX7r z0lHVaPz&tCq!B@(_+nwtq0RK$#IV+@P;sE{>RX8Bn-rrhrkj}46K*PBvhLdC@?i7h zJjx#Hk>f+3F<_Y0nGofcP^IE@)+(L~Q4*1fl-B_6231_D^dqI(^dhIc= z=LA*Dx+nYb(z7F472oY=W@o*6`ujtJZ|o#z!EAVr%)^Fux|HNxTtvhvDsp6UwTFwJ zM*F1zvWTTAmTD7v5DPy;dkkH$be+d!3z!mh9?~B zP;G9Vwc=}F40A(Sds~L)9PeFHO$%36su`>ADF4lttX|1!{}kJEkmfex*_yNVfSVdD*&UI|G|lX40rxwlAPgKpuk`23wH2sCfRuKK%fnp1R#=<@<9%+; zML4y^o|%u9_V0m5cLefgy9n<{uobfvYeu+aZKo0Ktc|gWw&pasMBNnfI2UHbKn{9O z)8)imqR}+@&r{T;xui0wrvTi{YW)CT-RWebe0G8{202Acf|Llgnqf=$=%XtXfK4Qv z=zT1j1nI9*CySKsm0?}}<#3SfXM2MsnAkgZs>SG?0o-+s-LK%L80d)#K;3u!6;8=5 zX@g4Fm=G<8m!gGW=R{0399feKC9Xe6!If(%Vf-@0mQ7tBX0NzqmY|9qPu^277yohID3?W6U;XA5NfW2T%outqW~PhQ+n&nro#DcM$Z$THW`N zvNBz|DwU7qm-tFK?Q`5dA&PTB@?7}m0eDq==POEw^{A`Fa?qK z&48UqJjKg|to+>?O{Xf0(K=JOzIa?8#vDp}6Rf^uG9;_RQ>Sv54OQdMjViE9g742S zMhS8Ye+*}NihDGfGuOzbNvx`CgC7KR%vHu{O-ehz$6LT4Mk3SiWVM?^5C{rNs<(ci zqw`nSS8I-1*=qA%mSmm%)UgQ`dsW)FynP!Cpz`|ATE_}k?|*Q37_<7=60FiHwB(_h zw5+MMx={v+RgSy*%jLa^{Rki@+7`oxIZt}@^zY`)n@lMhgAPv!!2u;Sa^;2L@?^x z%A-Mrjx%teimuzTAPSO;F~lr&gy>_G4IY{^P*NEOF|%r&ntw4|Ix}Z6Za4>|Vq}%A z6pcxIPQ@tDsnqjX?bEekhr8)RQoOi)#Gg%k8s-M;;psx6&rT16qf|d(x zQm|i=dq2&*4+`a7Tfs#LSH|);MEHt+!b{0d7;B0PK<1QGH_ynoq!E*2hGkz#6O9hV z?$@wob1i#9kmr+^>ORB=Br!O}1{@=Or zo%h~IPq;QRxJrZG=B=N=LCa3_ths#xboN?(E~BHD0#-A0HRWBd% zQcIeW%y@>zZ8l81ks#C7e+hpvP3-w#+7K8!Z#+falSF*kz#{e>Br}RGNxX7AU1lVi zBM!bs|1pEQkrg!e8V!3s{|$r6OO-b5{0em=IHTj>B%>xTM{2fQAz|zH#Py4>+?xni_0O!81gn!QL~C|A^iO>kV^4a_%tZvJM}($5)k4nG z1`n!DqAq7NrQbVbxd2VW=*}I~?A_RaioH~%?eBYLjJ5@FW1Pu+UAm(%H!%U>%pk7} zejlDzFG%i?NWK}?hzUWsKEW}sW!hRv85emvYXb>bj9PjkEJUSs#y-}~vu{`L=EN&3c~hF@`6?yd zt*{wD)SEe5tJzqXKE$Yy+1IchWywJgfw_Q4!wv!!5v&6E{)Mf7)=|Ty$5R8b@U^UT zH*#GGHSYPR@bGZ$75&;Bj!Dh8Z%`1MNltRwF(-lxD(>)-*7(HhmG5nQ+i+Z`;k`|g z%h9)2??XolklwMj)H3$J>HaS9heUSwj9nb|SnvxxR~23MWzjJ&wWNu0GHR|_`D@uU zJcWrzlRcU6ndDlgFI8Lbxu<+@@QxstO@yNH$yd+_nh{q=e4eP<==cK*H3z8Y(t_9COqt4~v_Qlm%pPjo%wZFKfn|@@9(-C_ zTK~A)tQ3f~*E*=hg0)-;lGt;ScvIjOMibwZ4x zJ_UAlwx$oR%6XV>upP2|637WYo24&Q}Y_fL*yf-Q)J=sU0Ln?t+}=J zO{6MCeh7$_?fo>?^zii23s=e9C&jWN+3Wk&N8il?$Rn1TVg8b_3$+-c4t1EpM3jNP1tx-~ZtZSw|kM3YHhY<3yn%Vn1xhDJu% z4Dv4H$I&nplNH^mY?|6wy=hopGrWsK{z&zWzg~2L(?_BXd*1qJV>321H#9~{E*{+K z!e9TFLZas6aujoB{o2~V*B17dvd{&Iqsk3=Epw1yoDK19=8B`6=j}^sM*D%B$mSlQ zX#nr4DX~ji#!=Nj_)ias_^{Y(lA?qcE`a>{=4^TOc?#56oiVbq2ANi8i&=TNn?&pk zt`VtbWh*T;WGoa9?%8a=={cj52ay?-Yi9r)62hP4b&xzbC(HecT>GQPlc<;0Z%*7x zZodr#pCg`OB3`dw!hrntXAoJmo=QMs$@kx$r(LhAPd=epl?(E@ zTyv?TwckxHOeIZy3=>WJv}?OuzDp~badvrF4_ zZAYU~d}%i=v{4M&=+*K|6X*V2+1Qvjc2Ko9YD}ENS~}lpu>xTCv^#n6e-9qt zhV_&E$RMR>%`RQ@$54%E!G$j!61RAW5b~GSPP)}#v)oupgLY4;dEuZK@1+Gg;XV}I$rIL*jyWr z%#b+Fa2-|41c5tm(GN?a8dVl1zFisqiPky)WPO?`%oSsK(Hf&IDaL(r`%S z-2Wn#BoRnHfqGV*!s*;zG-l;5+rkmw$u*-sA!lNdlNI=^8=bE^h^& zEODXG-PWduHouXLwjF4F!(35IXa!Q$a@o0)hwQe^4f(f-JAX*4-Cow;VDb*TZdS@H zqUd9T*+%su%e6L7M5t%M=UJ7V9HyWKQT0MWs3COo66`!uFnY3gmQjYiy2x8XhO@)> z$~WPw(}UW1aF~-s=CIaPH+8kG4exyi}ai$+h{shB*3W0rRF7=mD$#s zvR#Q@SDXD3D^=`Ph`BRQ^{vl_$cFGe&)d~zCy%|q@PdImLSty)@pAQ1>&enPc=}Hc zxK|095i`i|VQrKL0815&JK&dK9DdZJTv=}cxe}!(rRTVQA zz>Br`kSb^ePLUvOWki3xxKlM4deNqbyEV}je3vb|B;s5&FGql9?_#CDoYdH0y-F&x zmmEfNh6h@>F{QJ{ho4NR2lD=9hGNH2oIC_rb$IML zpQS^1(_7Yop5+Vhy%+YHF|E`%=bc9rjv2?=;WM~G<|FyL6?u#%TieI6z;E_?35N=+ z0Ixo25mhW*iKUS!M5jj`B4Aoh4{hmH(BZwuOSArZaffRMr0bkL=(zyx)q{3nGIFCt zP?|CQYOzYk5rJl?01bIJjV$ahRJVSWd3!3Z>FXU+^up2{FBnzM>P|-;XGsVkL5`RF z^7=C zeC2+{=kIBc)0DD5`G_YoUabnci0OMA>;XphacRZ#+lS*D8?ARGW7fDCOLMwkx#)by zx#YDL*_I7FjrWyjTBGud;0GL)qpsT(*rB1J-_=`Uw&ydA;1-mYlcj^y@4#eC#Oae{ zJMzbmnKyLiYBU&+6!x)+AHU8|r(4I|5gXO|yvLXkB8XQ!H zX2baRkI_{jpLFvC2dRbFcD)-@6RwWk6)$7O2aHGPQ4w5Ljz{X^ANl66!{l)US^OWr z7AZob!By7dm7H-cRkSe7adHaySI*vu#vJk0AzD%0Oj~;1NL0@B4>hMui3vafOxJH( z4|j*!N321k^8ELv`Q|voWIy=68f3oF19ight;SN>tLXSx=j7MN<#sD^G zXN=O6OXa?}ym}R~{&5qmA3br7O-gH%p>*6pf0>seX8#r;TT_si#b~RwReA-by-m5@KaM)U^CF;34yDGKb(cEIZa6%3o05E4cb7* z+;9{Ba~%6OZ?QP*qY4Lw{;`lW{Fw2)eDG(3ZA~DV=!e=H;w!?-D#OdFS1(gG zyzFg7o63quNB{kdv#R(Yms~Bi4g9(oQwOYZYF`fcDwZ;-e&+u6T3W7QyfyOLH~hV{ zcv{U@RWmFQUhZo-NV~bPb^B)Ma;IYLenRx_^`LpLomh?w_P?t)9#vU4oFt$%US2J7 zG3u77_b6!)XWOBm!OJr?p02gOc^iVO`vx^92i{QobuWO~{!bcylk#?ZolipoAuKZr5iYfc{YDSBTuZQWm0!K#TmjNYXzrs)cQG&h zs{O^UW3-$Pb6!s4t@cgj;iXW3B7S7t=z3bJhFpwR45Ez8fI41>sx74>ekw!_IkXfy zaL5ml)#=(w-DYW8AfCLQ1e{;|xE}b|M;gTf5I`}KA*Be@mJHPc`IVnmN zKzM}j2YhkQ(rua?wS`rnM9N_)A*)+I#aruc65|6j1X`K72zoM*5Z~k)`YpJg5u#T# z1UnK~t?@aOUqv`d{*9m0_V4EBFisI{SFXLr&WLI~tQ zdF3Fs&^^1nyLsQF`roY8z^SLRWCE{Et)_#r$;h|s@RR6~(s*+?KO^%8-RISZ$H2>s zU{yd|BIT`kpIB5PjcsOqU)MkLBt+l-ru8wdyMpf~uKXlS!ZkG8fCc|ZBT$+q#M{LXUTT@!$(pFyi+Z!=WrIl!ht(fbk6;GJYVD*)Qw*}LClLT+2yS_;POgF zq9xDxnSU7MfAAHf5i3~pi3m+?P6Eyb=Wi3&phKKk`PYcAC-FI3!sn7~p9jc`Cj$Q8 zuHDipWtBYU8|yeb(Ipdt&#=;h?}Loqf`0}UBZ!p$r;RqQfsXP)&wO+4Vflp$K6?&Q z;twAQ9bh;;J&DQ?%~cJxeA4^Usg3;(?o`E|Mm8(tG|Ayr6JOM1hW!Z zqxD=krm74NT!{cb)MHL-r<17RXDy8XM(g;r)EeD?j?WYa&0OkUiQjcxzi13nL8K!H zeDiiC=kH~xEt7u3fCSK42D#NOh42IayWdgWtoKjlQnwdQM6un!^>Q};JNS3NxvanR zz__R3*d{xY)ysy%#g0*R>YHm?_pI#R?Qj044R??sFMD2~Kf4zvu{NBA_$usENKfTS z4Gaw@rs*oK9f_aLy@FV(2ZI);S8rim-Z8N3*Dz@+q80$8+CUpR`}czcAl9#Nm*w` z3|4wuio*VcAN5^%L%@{ESF$qq8bp%5q0YxJqK_}=U17JDLBB@&VnLzg8n{M7<51&(7bIU0jO&t zore{7s{$>&?z~!j{}cowSNOHUwt9R85(Umm&g{Vt?c}9`e7nV{JA^-{`()zWc}mP< z`6vz@TnCDyM`=+5RT8M76SsxK1reI)_I0bypU)^%KHehFfB%DUBrq5-5*yhuSmA{K zg;^?iEVP{?k%jiZ^P{_rUv90*a`V}0T|DlP7nH#NEk?)g@D!tQ88(Hzh=ZT!Ipr*U z`$%5ehv&a@uTgn1q`VV-gj@&HX?$b+@rmi(FbA5?fQfs@S1S0_0zft0jJDHE{%Koh zJ}Yt3x&j;YrLThxA1C?y%Im9L>9sWfg@~pxH)IpP6d7j^Rp84-`?w#;l8_>mLOU$b zsHSafe6DIKD~U7^dD|Fa5hAcEABzc6^Ktz%I<)h8d7rUL$;n|Or^b9< zreSTSTbv4S4e zb+4F~=Rivm>wW8;?bgzr-caIP$LEvo{?<~D?wb*f zZzmBM!r>(u$Kar};P##{zdSDu1fuBpt zTQBv*X8N3?HakuultkMtd4Q8C_V4LnBc ze2rw!s6?G6Uf98Phn-$ud5-UQXr(!yslCjt!C&F2N z42*250>QOtI?~TE?4s8%=3ts;Mezd=8L2BMI?lDT` zd+-%YaKTWgiUykY6;X$SH8WzJweL&qkIL~-{r2?12=un^tCjyE$j^eWlG=R)b31$4 zkO%>Vx<_(5UEW5hTP8D@Bgr(i{ZlwprU{UL2MxN=FqS}t>rLg&(9wFi5&|a?mrz&# zoRbHGs<#$=Op@a|-xV_Vm;kCqZ$2nWvjFWH`@0g7A6!LRVAWKP@LcmdKUJmGD^juJxC{MLX2GZvG;>X!!?68TZ^|$=XepiPnI_ zw7cM~+XO<*d*G+10HH=PNat07nZYlXwM@rPmO7qLXF!Qson(VS$82|Sra<}4PZMZ7c8b7fmPo~Zh5UZ z8?C7AAgO@JmB^Lw$JuK7FPee+iUh%!WLW-D7|TxUKs2)mc23L(zxnOpF{>7~e|-~t zbXysjma)vW3S8&i124Twu-3@uWC36HbFS0tID++G@BkdO@4}9WIp8^;aod!0VE$I4 z5;fO>p#q#OGeyM@^ah^>oA=vc>$sD!WAYKOo00&|IytaQ`xdy*D`N*(3eq_ZuzOw$ zIBQjakA4H}(SHCUoigxU#Jzd`lQpGIf8|7aJx@rPiiDYsd|b{%#vtYR4|TP4qD1Ui#tqq>Y+bmSmg z+z30qxeji#D!^@KHArVQG7@eAhbcu6u%r+A~fUC79DP7T;iz6qqP>aA;GauX-0lUmB1ZVAH z_OsO>oKgUmQ;vh}^my3zVKK~m?Sv9DSJi{!$pfW;*{indelQza2iBidfaQ!sAexo| zPK*$(r)0pcX@wB7vWcC5TJYAZW`DlNGS@ng&Z~hyBLySeI*x!{=iCE7!y4GTv>AMt zmVuXk1^f9L2wK_(A#2#*o0AMKbJJ1-)?5j{o7qg$W{F&hT>Bxi_OzG<&uGuwKfjIf z$8B($p21eRx!}LF0QN3t8K+Sl1g>acoYKfv&v!w}2zD;Lm^6TFX*IadD*~B*3&<8Iz)iOh_N{4x&{fS4xV()0>{SrXIL-de)42zC zT=V_D`JV&mh9hz%a_#%5IRC#BbG?4r5j;ncCegYJHs2kk*xSgs93s}2gYC39u$_8}eepBkHv2-_F}GWG%{AYX9!um( z774GGer*__v8MIZZRi0t{)o=TgM;mtgF{f1@A>Sz*Fx&rV%=tyvBa#2@k$NsUcfkLVHNCNR0SThtHEXFUGQ5}559VhEa7VgnO+;XOl8R) z%Wx(0a#?bB4$McCF=BOQNu+&*GB>nFO;-tl$tt@+bD%d&8R!Sg)$+h*Oc|`77zD05 z=fG#tCGgZOV8n^t5G*xc(g?vTo4GIKKD&%d**)j7>{Y)Q0*q_GcafZ(glY&jsRQqM z)!@Cj7`$|=A!5S=kQ&?p|CQIkb#@k5Pf7rLmK{rG+yvJdSHROK^H{-|CMw+`awT%@ zBWQ2>Wx)0DUyZXwKRL#4{2rn<7lEzz2@uW50;g%|u<6SquzBoJ5PTL4Zu7EX_mb-@ zfvaYuSP3C3Tfl2!IUHQq%CcF;D@!W5l`_f#vPDg>Tfd4+@?2)!WB*nO$4%~YO1av6 z|HX`-3`$wndx0f!=eQ=RDFbDU<8}*PQf5q6@yebw(48^63up|Kz{1zkz~Y^H*g5$u ztp3awJmzJAXjTqe?pLw{ui~l#b}z)Ge=+P?S`TjX3&C;5ZT98Z7uKs|%l{TQAW*QA zQ3{?5%D|nyrS`97ZxzETkSr(!kA;`ObzTN+85<27zl>zr@nNvlJPndr*BOalJbldW zu6yaFmM`e$BoKNp?wt8yTI}ZU_T=vV6@1xJ-`n6Sm`~adn_P~fyN+s9%uO*1JRQwsS zy2CV;K){ZzwL=TRdSV_|>*_e|G@89Q9&<}rdS3$v);7U@(+ZF+$p?GQR9N%L0dSh0 z4i*|mVaMbcu$dAM`_~jgqII+MPTY@kTN}S4J(fV|O~%z{ny00>v^pL$ZwolGwgY^% z8$dj*7|f>zGtxW@J2ayi+2+IMua3g{&%;@gbp!&J-GZ>yb&OL=S!PosuYp}vM#mDC8kv z={xzL#a84DIWH+YwACWibOs&j&=}|mlLzjGDJs6O;`J-A>x(9^(`HL|ta0Y3WG?Dr4Y$zkNVR1QH)TfuKp4eVoC>%nyj zmd!RpuyGR{SXU3nEf_IRJqs2SPO_651J;w0!C`tTh-RmOn?Wkei0?p>umO%+)p+L} zRT#9^|D-}UE`h*b)D(8Sm*HPyeqc>Wc+`d_aQ?g*Hmg^{mJjd3?!|Xt-w>+`8rkakE=YB&z+1l(r1Pu5XUQGz-?bWl8CI%Y<5uLF1N{Uq z^+f2X9JJI?J;Y_Ls7=fnbQG-LYhugy3t&GbnH^+2OSN-BGQWhqL9isEhGn1C?29rY zHDsi^t_^}$H$a4W3xus}VSjFffK_tvSyT?eYpPkwUkSbjmF%Qd!#?(Nht`*a``k>h zo0I`A)3aF?n+|3Z!eFP?aR^va0It(2!SS~famu?$wP99*>Tv!5>mAH8~(xn2clZT5LzmBLKbNSHi8lK4_j##EKS?8yVYQS@cx z8UtI@8(BJk58QM!VB7c@Muu6O*MO&P8OuPM*&BjouZD8i%ib`7#?`Qwy-oHQGcsMt zvRn3630P6XveibAu~hwlNjvx%RKf10g>Z093&d_G9T$tvD*Eta`X zRSAG)ujj(Hj|xFF?+kd(y9{o#&w+Se9(XLg12QAbLTe#JAO|n@wg@s|>HNkPh}iHQ z_%APmgY3kFnKi=E9c>V{z6rb+-G{I>55U{75JJ|<*$FIV+3g*$7=Ik>7`g5oe+F#7 zP2)5YYwZ}=FDQi_U)%+UcOHOX=zS2pQ4YIjH^I?O3fQ+)9(ygaV=3L-1VYc?{^iCm z4sE+B+h=k+9B1z>`!F1|RS$si>-lUMUceHwIWJ|MP(pmNnGffMmQ*Fhmh6v5VEQX{Fbt; zl##Fh@(M<}b=>MXbWH;U88t$vaT`cMaayu1HPo zl;i_Y(DA`h$D1ypD{me?wBar+dp{B;4R8k?)o{=q6wi{NYA{i|3zowhz;0v{h{v{q zNcSQLXU4tDCu%@Zl}3 zj3XLguW==W7`HI;t>@}peU=t;yc1^H0=v|NatLE2(x0wA(h~} z^ghQIK`ZMZa2fk`c|H4mEd;V|-RlcWEtq zTQozcNi9Tfd;k#}+Zftm?{Yb(vmW3269lfR1liJ32wqbLksBT`(yd`{mPR47L&PmDOIx~kY4K6{@vN{ld!#?}nA7SgTa`sj%0+ZM8 zv5R;X=BUPij>Ic;2MIby!)824qAEbuy95) zXulzaZ(g;5X#)dU*6POX(M(qjWzT0NtWqmvxB*+$tHI{I1_(541vlL+u+%&TYrYJE z9TVfhW7ZXLoR$vTzfS!B*?SM5s+P4~ch_HMF9RwFm=o$+>e6KnC?YvXFs-%se{Q|^8|^-)>fZYAxqsSwuQ0o+Yfi=-a{^;_ zzx}*lf87HKx_3})+mEaxy~wugWzd#r^on$%pY&u5`8Gqypkuj5N0DaSPa;Y#S^Fi+ z3W(HviA*zY)h9un-fI%^cPKeNgb=yTo&?n%xj+5di@w0EAg7f*2vfNMpS>60E7^iX zy+@2*Q}l;%+GZT5k4+-O^gSZ!c!AXz@~jB$P5an|NHuwl)7BqQ;xNrHpL;F!P%m-EKEeG>UE;$`*4-3ZLLnd!@JcCukz}DunxbU;%kiV zJrSwhQWdXz1N(o7VFJ42I}Z|69|kj9zjMMadd@9AlAVdHW7I5Bq5#jQ;5vzFvr_8vpA`z&0FY+u$3CaeLZSfvC zM+n^P`;nmEjU;aI(UCzC(>|PW7-7yh!;G8c8ep;3Q)Z(`IsA4qT(8UgPrua?q|{&@ zEPJzui@nAkxJm!;019nB(8w`BLfOZH&m5t0G1e^l=Sxpa;jH5*&e}|o;0_V3zDJek zr*9XIaKF@PjD+_Uk~JU0N8$=R_B7-8)+z)@cfeb=0rC59BSEVVfg2{^vT%&Z^&u?h z_rQq%J~ZcCgx1_3QKS1hD116WILSaY)RFX8mpVcL8iCy&Xia+-`atxth&? zLFD=dCxl1fw7eUM>YS~A1#bc+FR6NjD7C?PcO6`I)xr9w5+v)~NB+?lNIpp7YSNEF z>v0qxpC)Y>L8{?<6rC7D43RIFZIo@^hg>4md`nJDhnX8rHtgYC^JI+v)1VqB2>j`{ zUV^sW7YJ5t4T{majRGznLiV2{(cEK$EEJG__#LuLhfwS|fl?CM94q?S;w{dc7-6sH zSq{?$A0#2}qvLN-e1Z!T+(v{-7yPBJ!%wOe-qM%p%V{JPMZ|U%_c%FB}&1 z!&2}S)ovOkTUl~2w+}6sHYPqZl15c8HghRS0=wfoPaIxf27kF5aFQtPED3q+@nP@_ zZz(OW^6I})uUGY``0cAb=PFy;>Lq^;G6Eq)roOCC{q$!$Y@gwdT{C=1SVO39xwE?K zJ3mITTtC$3?}P#WHI{;9E8Gje??;F#2a#ra2Y!1m!$GtHZW8BN*e^)tCQfXtK@sUf z?vXdhGJlJ_W1NQcp}=+sXNgYpkB%YFx}P*=l3)_jb_wjZZ$N84(g zeir%D@2#{(KqSv{pdjf`H;p<2$h90~IA7^Lg?y_K78c;dw8V7`7kqv}h5HzaY)4S- zJwc<-2x`5)&?xl*70#nLZP88k|1KQ2*O9n(z-`ZE1S+&3P^lRyMo*EhF$K?6LvUKq zha-Y7a9H3W^yjs+g$~lQQdoFEj6{~Zn*z58f*Vc6W^f~}2lg$>#esDxY&~)QVFMU9k!Jcgg~lo1wBajQWi$392o&(IXdQEtOh%osZ$TfdLBHDu@>j@S|AHz%Z3cU8Tv8Avl74E}BvL2_bA0tU?5Z-GCVK4lS z<-D5AzXP3l%~0hlCrXW`8p|qYSGf4kZW?j9y&JioxkkXnizMdx!E*CyBp-N)Gp?^A zZeD!D+uD#<|FCte|I@6qUQdD(_TMK_y#oF9ao9P-8(U{Mv)!Y(y7kXa*!mqOpeOPD z|2XjN_)I?*ca@qE#~dSDDnGjfM*I(PRIrBtXb2}3_9I?-nDpQ|eB~~|RxA%T+ltww zwVP-o{KRg+Pr4aJR^2GJ??WNcYNmM)k?R1m&H9mVJ&e4gBLrikD03yva2`YcF><&D z1Cv$WlTLs7qm|ra{pQ8TCwel>-Xg)^InqqHT(nW-+r1-vA0)A*3*|C_QujfWoR~l% z;eIiVN;MwSM6W~0F@6oZ&6V&LZ%3$n7d#|rgcGko-2NMgP<;*mpN8PIWD2%I-;$IK z`ENsgPA$u?6PpqCO+aUId3P~PV7XD2YXssmBA5Vk!FW*;+e2&f5vbZgcI0hVvHSDz z{s+IT;&nD&{iD>0v5)`KakftHnAnaI=uJ7&6J*Gz(snIYIY(~DJZ z5^L*s&P20b*h1%Uiv{*@uXE{FGXhztfCHPovvZ(5w~=7yCai^@!DZnPyw?vPQLmrv zC%|nd%B{e3qkiosO3$TlAyBp*sRwVP*zpxIEnlL{X#zE#pOJ4lOcXneT#F$R*Vm}< zqUScqv-e` z%ALkh>NJ2_mm#Fm4pGVv;3{4RFWEY>1aA>0{T^=1`*2v`4hic`m~LP;)3<2AAMZoPkykwxZa>TM)b#(Oq?z=XSGs)cDY6?wDOrDRLaV}M6a{uYD03ab zS*Ly?*g;ggllZ!gBGcd%0wiw1aVJ>^>1*(oYC?c)8&XZlQYiMqf898o7xt3{c>puA zA$oJ$**(9wbUB@qa8E2+*V)qoFmqqM66ueBR8kPIYW)P=W&4l8cYdx zP6+qIZOIT~l*W*5!rddQ8IGbAu-$nUo}$fg+1?E2?M;Z&xQDaWZ;@m14#f_`k~>HM<>tuO$W6mK!B&9|Blk=|5v9<=Z`&Q_LHdg;)2rysBoSjitRy-$0W`= zzQ;xXG31%NMyUK91WP=mFQW|}VvUGUe1I&=yGYW1i@?nja9lXRtcMX1tl|9YP@H`l zDtx6xsu}Dq3R1IU*`vaoEV3+F)Hpm@I6#gsm1-slZ5*5YQsB#F;R10Qouy`S?@5ID zrXr*oJ;p_sPZ4#2<35A0KMM0YDX;z(Yg68P18=3~Mw{)mIIuPg67zhqWrjT@=7g|# z>aLkS*iCgid+r5^*^zAWN_=J*#AXN5InL~L>A&5fWGBlZk0kdO%*d4s#c^3WYI7=K zA=pd8Is~VMJqTVuf<*2nfd{(~CVvY-vbR{ydVtJzSZ+LvK5*wvIt@fM zrS)12zn|peby!~gP23IO-lx??)*q4s74Ka3lx~6f>iTc_sk3~ja*zIyntKx4W;hYS zx>I{6H%EZ+(|0x`s6?@R0W2)QCbmdyxv&5ibL9k<>sR9B_&CAkZkr;{m(9eL+v%TM z@@gym9zGlTk;>f$>hKe|iPs}V;|)&iu7KOFD>$*`0wU#}A>ZN!F8B_k+IIkD!X z#@jN?pYuWh|J8CoA0kyA!)@ixBe)##5p8k5px*Bbs@#Xr;5+&^aeV-n-3{;*Yi3_e zIJa}o(RWBv8-nO2%L-zkIN?dw->U@4S=c(d< zbE)(CY+mI)-cxAbgEF^%BH1xC_>Un`^AY?cI^npj9$pen@Yr(&?oxHgws?%x{iE>v zVU$M5XE2$6m&IOn=3Rp3ybJ7$-a9Ls=rsT;^9sr4L@+DEG6-h)KxTFlqg!r87nl30 z$d~&qR4_Y*H5i#WTnbk*l=!o$;dwE-zjznR9Pr%J20t48(v0pRVgGBy z?3#k@qDMF;^csf*?!rKzlj?P-&M9Fc%84SEHo~nO;cN>RfBlvN8_DuqcQT=k$6lgS zZgPtwRT(~_T)r6Wq>)^7*0-ELMzgcSuwS?l#}+)Hzvm@RYP2I%qn6SpOp09e`%qBrIz;yW8DdnPBShv7+;%syow6boA0k=r2?~z&Ax35b zp=-Y2m|!eT)pMu zrPS9JqwhcR;<3E?53LWc_iXf0ZK^M_8cqw5y9w=udC(JRf%?2MYQu3jxS$15+SlMM zc^g{%wbbULAwJKKg#~ua@?=80W2P&1&T@z3oKULYh<59YZ^yTP=fWm>C8=+4E3&x0 z!Q36WzyIX`xk+Sh+fP0ICRhkQh2z3r_-=WJ48s9rnLLA=< z*Xeon?_J-%8WavQt2w2#+-t~gdjlNB>qsb%LvBtIOqSe)@?2{BWZ@k)JV2hs3wV*Z z%FRuNq<|k}_(R!b6_-*aKQ9HlXZuj~BC&PHZa#PHne9u|>I><45%k=Tfrb>{$-hBI z9Lv7pM3n;;4o=kOl|xsc9)|_)v$RNuMQ;!+(T7~iK6aOAZWpXj`CIUn?3nZxZFSR-cP2$@68=YsvI;D0{w>EiMRz{M;1C z^QU0zOnVa9lThSO!y(~j78)=Tyic~ukKUKWNLg!nDgu=*AzZ7mChJ&NTIac!3Oo_u z)xSs03vKn#Tov|SdATR-cAbIdl2m9c%76sF7c_*5p(AvWxh-{pBE%?UAp)8Qa(z6t( zFK}5lGP4ueq%W6KzL)xo`n*c$^IwB5|0UQ6_rQPkDAF`PpxkK)soLG}mZIa^N`mAB zoOp57Ut0;<)*}!l_d3W=>MDHpbi!5a0>ZT~Am<&-YN3?2! zc_hH!LI-klH{Fzp3Xg7_wS9}jYb%&w%JE0B39JK)>ZqMZ!brFi z@tUuYsPPth!sj4HA}S*gitT)MM5r!M6;6k&z)2{~r}jNJjE=ct*KBueo@vEGV%%hw zvcM_q;q#`?i(zvR9F(wyIOO!W%7q5B1kS-s_#Tc4y`cIEUh9UCa$pFjtRBEes;MpC zaEKRI{nam}m3uDYw)=8{pF}&Nw6CJfVG2<)18`qDf+Ki_%EeK8r*& zi>Ni7&2Dn3S5kbD*e6)Ph*f%SB#Wc&nc+{PaR|{Yjrt4oNnAr%I6#3vmCcMw&k2Vp zpFdRQXG29W8`|^F!FJJeSS+~@t@$-jqETI${}hpNGE{^zpeRUUyCfd=d&-b*dKcdE zHO(a_Z#a+iP4PsQSN~J>_SI+Goz?R%>a2==Z?mHm5o)(letZD+zT-&L?1RdJ6zt@4 zf&#TYZNVC-2^2zZUK}iz-XVAQ0`WSJVX(NK03Zf(LLnrm^|w|$_O$Ax?tj!%Y(Ic(-7oN1(+|f5BQ$EhgrQI?bOr07 zKED_W0?G9FZGTs8a!Yn@JPQ$Uiv?unMl-SHVpOX9IYg_WbSxH1H1caMEQF@eSrXP* zSgg7Ub-{cVCQzE6O3w>mBzOxJ3m+5J=F`ZYgS~T;sbL1N_bQSos|cq;RKN)`!hWz9 ztw6NyRm7XL3LyHa7E{OLx%q(k*zPb&vJys+#nL*a3bLdBHC~Lg0*qJQ0Cyci7qj2?qYTdl;;&< zztCkI7V3iif;Vtl@_sU8S3fVV`kP(jX@oid}rpkl^=$ z;krz?%9bNu_hv=vk_D(i($6Bi@7MZ`FV&`>O+>%bGZKWnzczOfk14TX^Wk6 z9NC`6asts%m>&z#dG6F+!yrD_2jYBwP!ddr)Vx5JJs>{k+oRs%3O4V+Wz=wcbnKkz z0mV5vP@Q)chlFpynuOI<@NQy|2ye;i@1~TPLnL6^+XD9`lVsOlkv+MEgY!F}KChgJ zw1_Nw9*JirON!=bRDFICTO1%sqqExl( zL1#qaB zpwd_Qy-l|o@r7!-x0u}?T3=BwJ-X7Gl~ zE+Nl!5M_2F(57>?@!1lM20?1RHzfJJAuZ@f?K23{0>KcQ=SkG+OFsu=>nt0hRewgV zoUn3X16lqU)*sXab69RTN3GmEg#v$8kB-0vUR?E$Qgj3^n;S2^+H+t*6AmqHf#}R& z$nvF-rHRD81vyZfpH8E1I;8nxAU->otW*inY(5EO0yU~2Xf7;(I-SSmx603tV|jku z`y}TDu+d#fD3MJLSS@}5GvSBO5I#ennMR~rMvc1wYQmW$tiI4(mJZd0Tzo4W@(aRP z)m)kdr9~&9x;Pe!ivw{&{4CsLOIyPYE*9Ua$mQeoRbv&2@yNfDd-ec4Q#~ z(YfxdjVlVpvQUBS+!!|D^=*#gB%4=I7tEQIm>m%$ClJI70sIk*fpBZk!9|yQSRj6O zDE0{!u~ZTz!8Ee+1vK&okSG#i&Iy2uP&zx#k*BIqCX3U`%!{P+a-g%Y90n`OS-J{m zmn7!;lkGYOvn4lRvGg9ah+GdYJI_*Jl!Y>&ESyXYof_c6R3g?;77mahN-$V`8ZyE@ zP+1ZM)umC;SWHyBA{oY;GGVki2FJznZ+fT~T^#5c<89FW2dRb8S5BC0Pq}wwQz5K( z6(RM&3)Fi~pe1Aq^+7|p6gGu(Uejz7=}M=sM6uIIQ0_*Z=M?IEh7qv0mBsWW1l?Kt zG+EKc#E^r5AhEYd)p?0P@t4%5v!NgqNzN&l2KxvoFNlZE@>48pU>6^^aKMd`ujm|4 z0)TXu_sT6IP^EsMFh3sqmy|(8Fat^g1Pp@N`EmjYJW>6lmu)k>L=@&F6sS?-(pqo^ za&r>N;uo=5PZ|C&i1P)q6)IdKQ(KS)**P)va}o;?=q;>d@l)+ZMNE9PmgKMr0JVi_ zEM@D+lKZe;{usK#)ht%ag%0!=*FtaU8K^Euh78#)xdnl27WdHFLZ}g~sxKyzT|ktv zG!Y65=x-46!GX0T=8Hn0yxg1JmDWl8Y-d5xRj&^NUuN+H=y$qgwWDvVyYjh4gCCN+ zjn`$tWm^*>Rqmn6VF;IfKjKRC2Q)>Dp&{TS>ioZ=<$+j37ZJ7+A!?Kp3P20wFFyVl5a0-Q@*rgBO+gS=cheu5H&$KVArcSN`83 z>m;&QApZWog`7afu!R8{3ksmWw2}q(rRS13F3g4e{8*w{YIt-GH<`szuh!yxYIq!x zCPIZoQ(|r)S+N`(THFH1HE*H2s1jNvw%ob%;j63u^vasu`!sft!D$d z%92PDSYH~@1DJp+2~%5NK$N?b+USyW?4IKcjYTA~i&LPoFqYmE!QeuAZusPGJ|An(yUL=us0oMYf+B4_PU0;%V1x53)o)ECowrNd`+>QC*l0MS&C|f=U>z zswF|qhV1-sXp`6)uc?9QifcHr>Mf3~d<0E8CdVJcLJ6FWGFV+mjg!bgAOLd0L<}NX zFyB}Pjpg(jk%r;gd?JVt9NkzAll4W=6-mXxwYgATMg+Yq5(j@shyMCdm~Tye5U6#& zrn%yQ8c&>l+qF4s+$37_RZW=kLnNpUB2lRqQL@hwEB6L@h65qrc#y z-zd&|d_twm2b{5*Mve0ql-m!Z;LrftB0l1j(QBBktA(_%7bN&SVY{IV#!FkEyQByw z)^_8R;d`X(z9Ru{hW7F_Cahxf+;QmpGdQrS0DA?)Aw}e>ydVxTf&l~#evn@n3Q7I| zBGz0ky=zipo?noTNIowFz$^d$VzusS5VzD%V{s-_g;QC|2^TsrTvC7iONm_5ptrmTh9YHbWy}5*r=h+e8*V?mhw~4;Fj#t?&W(YxU#2G!xsSYp%n1aXak3e+VOy^DtOeNewv*`)}@g+hrxJL5=?$dhT+Ee=SglC!iRb$c_RBOuYHd`t*CSwi7K$@&dNFR z90`i=5ib6SNVNx%k}r`c-_JxgOLqXp#|BaBI)LWzF*Jnrk+^FJ`I=GKzDHwIPuk5l1Fyy42fzcWckC%_MgSkbuBo$;xSy;_u}yC z258ec2bPz^YQt5?3x~7DtG_ZIN{hp&hT`a^D#$PPV|1#%A_6MQsBwRv4ZE#%B(gbB zrJt3T2E%mYX&l>93H8;1&{!FbeJdhi@?$QHf6T<8^~um#8w&fqIn8Y)uX(qc`8B3i z4Sbq)HD&B*(b0Dq*$3a?ockDZ4BsI^;T__n-y>S`4I)WYW2Ac!A@vNo2ZvDOGJw{Q zk7y)XZ9VxB&5_e+4E%~3x6i0N{uyOfUs31#85LF^Q13B~O1lX-h}L6|fCEdT;s$)X zjklq*q=?#JB?^wx?78kn$u+ab096`1t}qKBG+_sVX2cU z!g0JMtGx2}De^+m=0vVNN`i?nSXB!Bg9W~@+)~EuKNljq~=w5AAJD-#mUd2v-<`A1|Gs4q?m(pZ{?L#xVhaAg@(7bd`RT@#D9 zaJ^g zn+tGkTQO{QmB4s?9(Ak`=zkvz&D8<#GQ69D``?TU@&xXmQ*Tv$P)RlHKNF_>urW&W z2?C^^!hJ(O&X|8jOV}r5X!Q}LK1YJ=0Fo8@5hM4SYBy5U-l5iMoQQP-*Au>=BkmKf zM1IEQ@Xx6A{DiZ1lPIy7Mxpr>YFtN=r8SH?pHVu08cusIlid%3>e5J9ZM*{KZI5VR zFM#9r>nODyp*l{KS`2wQhYJU2uSg~^h=Kf~U=r3099W&(X1F1P7gyz#e{7Lk93f(` zvbf;z_vO%8LDaam0@{mDLt|+Q4A-7vL4QLU^);4c!+Fy)cbEvfK}{iydIFF1|Z6u-<3j?FU{w z_8(O5cf8%2*$3UWKF}kpf8?jrFyC|rMjK9n+x5sv^dedR zQzWdpFj$|0!y8XQ=lhf3wwXI2R>?%v?5BK$sdv!p39#N?2162N(@nW>5xopI(KhNl z!PvJl5cYd>o3B>A;N5EG?^uW4P0mesX^ODjQ`F@kb{;l6t6;vN0@mbayhUHZW7{jF zDSSb-%QQ}NHwWB1jKsbD2ormXB*g*5%l0Equ^UzPV`%W6MxFlN|-Sx;`}$6GM};UbCbC8TMM zvsGNal8+!eKMZ2?U7))rj%w1R#>%)LUa#hrUsZ7z>oPa_p{hrFX)c_1U4tG`sp^tw z99&%t`;E5{B-#t}bq&329QF{IuFr<;o-@#29|I@xY9^w=N>^Fz)pAQdG}i=?pyt4ET^6ji zR4{Qh`za4cx0K<;&N?FDWE|WON1q@1-by<2>h1PtTX|ym-#A${I`uCXv+o&Oi>2MP z-%|t+$xCn)y?|poO6fZ;fz9Si@DRHX@7*M#Y9nY4`2}Y!2av8jiZ}%>OQ0Ju(yx&y z*N1GaQMS_Ra?l5~M}K4?f%b&YXbR`{6PQBviND~i#YYsGOyHu|M-*E0quiknO+gdz zmT953Qb2=l1~gVA!gljj8t{{8;6IP-gCoc}{04SgFXPz8dX|Nvu`)K%Nv?($SLKyo zXE7AX7tvpxS75mIG#s~e;_wfpFkD+i4Z9saJKy5yh8D76#V}f13EgE}icA%Ze>j8v zt21D=qlC@)ANV02$9Ggwr)-AR_97hGkcI;r5@GTaS^OUpm{3}7D}d?dEVxQufF+5s zt>_t;Z_b0owp(gPexdg#`AHifnd@1ICGe&H1Gq?m<}UFX%I=WLZC!rlflyo-=jmFUA{|Rjo6S$fD8SU|( z(Gu|)&0)Xbf;W-t@vkU3LXSs(#s&AUIDPN~&O3fWD+zXx%1s)m^I`ZyHV%JZi4&V| zLw7|stVvL7oIau0b`b7jH|h1Pwg^SuT~>MJH&Rp=Cy4k?Z(M`3~z)2K$)UrHRN6AX)t&M}xk7;n&T?^w4r=Ynygv2!q zUecFgur3kiTe7f!eH8o^T41&{okTYd2i7N$Ko`POrU3!+?Qj++TH3~mb2n<1&eJ6MLWfDnID2O?X?8blYllXmSQmDF1`|t6uNjm~gZq!)Dj1 zI~MePSZ*#LN^!V@ zoMA+2u_X^4(nOgXGf5b0;iuS4RGI^4i5eKJkH-lyqSPHZ@Y&k{lT8`07cIewJykfV zc7su^?apEx-jqcIb()c}&CYVTN;JV$tOfQv>TrDLdANwS&}TP5XDt`MO@WjA+2)Sw zZY7>*{`+caSeL8G#<=Ilcb>-a-6brx>L$?wf7vb~$2{2Ys)ZwcudZU3ad;gKv^$y* zq1=lIsUcL^lEn|6LZ1EzQkBM#sxXWMxjw{6_aaa411>mC5upy@R_a%DBut|%mfNu9 zD=zwcMfC|1R`bs&F#JRU`vrA=M8GDasQ3PWQ-*J8u)YAJP093~o`S)O3fOMBf+IiH z;H2!k$qfBBLHRn9ybu7d{Pv6f%G{una{ZHjqVM3a?K;fY*TQaV3yy8R058c~FxhYh z2iK*+jI8~!?S&+u`Sd&!hCjwrhpnK;M7T+vN3c>m9nZ#bu_8KthU|ScTqLXEuUwC# zJ9FV7bAdW^Cj8_ZVX`@$Xtj*aD`V+e9JzAD>MM5@{&LsgE!z&;9W_K*<#3UzLzwD4 zmLF^UV+I$R=(dzh>*#qk$O{$x8+Bsr^S@LicN~q>ZmzQ1k$2BxOAZXzXTx2h6;9%f z@Q`eQuk1BAN>tJJl@I$p6*RaJ#cr!W@ZKlz6@QK}i9wXwki`%Dj7*}|Or=RA$n>$A zrZ9#a-4S+k!H%fUxSq_#TR-DU6p?GdN1XHeMB+-sYWf*@2S4Jh`4`kUf5171Pq-EL zugEfd!4{oZkhmMJ%Z0DZ6BeQ}`=KgdN2ErC*CTo5cU7FW4T+qTdtcxw`Vcl-8sRS1 z1(!XYj4+PxK8FMAl8GwoVYR)O1Tq&EM5vAuWw0d?^;Nh8N3m+SOPz!9rbH&9CnV0m zVmk?`LL;1{N@2IB2v$4u>3yf*y_e`$>=aIjmcxlUxWB>`mLuyS(+FqD^K|Syf|Rep zQ??l{;!W_A>x8p-13hnqx6Cyd(BERPE&&I=Pk5W=aXECTcanFjnZMN+w+1)(X_r@- z{gi|gyGm(ryNnQ(M|6#EP;G~oTr)ydZX;6jK927pXR$pW`s?H9JGp{rjb}u)*AS&N zh!nL^T=e{idjAhZt;2{E?M4QPY|7pdB*_mU-(Vb9LZ)#e@eA6MCU7nOE1FM!!X^K| zpvr-)ztt4-4}PNh1;s}`q4?-9%8yN=$>(R}m=2QbDIf=Q7H;D0u-ks6&286hUR;$| ze&?YAA_uKiNj)|{U4fhEb)wg59Q+{*MjLWS46ETof@dR^LjqUd0B}Az=+uX@i4AF|2pzljs)0iRjjg z&h?PKM4wv=f29_Ls9q<5y$%-=bPu^Y7LRolyNCe!E_(lCgztL@XNfxcyHa4aC$H;5 z)-#how5ZtZ?j0A&a&i)lNIBS#VC4sN%{$2z+(CqP7Y$N%aFed5L8^_# z!~+ytV7-&RAE^uQl)i#6h1Up?=|PU(6zY9GW$ zXbzepVx7jVl)sR;{){V;KeO!x&stBT(s~L-#*@f7Fo8-U)-DU<%HUFN)A$18uRa$-lTx$Tbn9(VB$SZ%Gw@ttJRcjhtLwAh&e7ikhr(E^xn z&W7>UIJipHAW-QtJY;L&qi}%;H49d|v*9CON4CBKmOIjkL@%@m;m>+}nsCrRzk-mtnW-9Erv|Bxt`!f^IMT zWFNBZ1e+bD_k1-jo$IbgqX5~PY$DBJPhD5B&zpdezA3)nyQp3)xS{W(T2}8Ue!A0Lt^y~uy6Bp| zAYpxp812`H*!L3Any(O|b{C#<%|x*`i1=?IT>S>z_SO)s()U1O9HMp&o-&u|x?Uz{ z(uEYQ5tjJRS^bKm)5uW%fJB*oB+3pTokTW$-w-bQeMEiW09*3f8a0g$I=3l=6Vkt+ z!fqOQhF_3pFom4`pV1oj7Ze(g;(E-#(rd$Q8RpM8caCgi z6A5btcfTw|s*~`^H<10mKpnM=I&dw#h+N%>YLAQO(uG5AyoM~0#xe}ta1&R=8uSU8%PLlQHO71L>r*eMr2lxP{k)m zJw)`X^B(b9eTY#VMxy2b;&flaTka}}NEb4U`U^V?#`TBaPyg;j_Vw+tb*abN)10Nw zcDT@W3{~lXi{vHt|A(qRK$O-~q#F&;HGhjlonE@0w-KaD!m4(gxr0c}E_f@}(?Hlj z-x=pD&e4EbN!PfUg%aXaxXoCm&>sH@S^GwjC`Z><<{P!9DU2iEU<{p!A8|YFXS794 z;a2+3XpR1gOM$=OywhJ$ZTAJGmYlGTB2#A!7d$6Xe0chPliw#^T$NXN<=-lPa!qnR z@(n#fO3g&8NhGkRVY54rMDRQUl^ftBUWz3BTVy%QsFqOYt-;Y-?nrjT`T0vU#VNINuu6vG}8m?wzUdxY~rBVKK#Z}$BjM3viU zJj0p${*12luehG{Gdk$J%RxV*C4i{a{xfP%d_?Ynzal|-5NFLlOkQ;R z%-af(S9s;$6_1rDGG9l4w8IIbY$XY4H4$hVLNy!Mv1pA>oRBz89k`x^wiw}B z&FmaknG)EEXORfrN4owK1S+(^Pw^t+^@&=Qn~9_@z(ejl32+zL+zxokUm)vRPn67A z+XiM~{S`aO`aVXHEp>MNaikC-rBTf@oj{h!AYyf&QhiRs{0uRA50Gm7xFA^PLREA5 z-QVo3X0Da=YWb>G*83?};iP&yBDFecKx=}xLIWbTJBik>Bh$Eti2fBa=^7**c#Zh| z-N-Q;M4a9W_{d*@A6@H{tE^d6FTCET7y30vhTm5(*7$7jK5_H zLhJtQ7@N(A?q zKKCAy44=SeNA|t5L7iUxJ)^&wUAJx&4{8dBkfyL+ZhINIB4lLc>pJ3iyJn(Vvm2@&Q>?(-p>%sxXEOm2tF%eMU#jXBH0V zNce*53IB?gkpGEhzptpWpGJ}C&u!($K5ygo5?tazv$qCEb|%7nM*^Ir3K2?{G;Cip3FUQ0xBg0Xh}5}CcAlt8 zyOmzMf|P@gNeEsbl%B`x+@WLFkYWB92}Grdy04LAI*hpeFOhv{0I_O)$TAv7n(;g2 zS`3j8KSP?~TN2erM6OQ|O=25O!t5k=mc+cGwKVv?*YjKb8-A^#TAzFWP=e9b!Wga2 znsk#}h^0X$PWuMjaQW;WN5Mk5F`c5NRgeH1NEk|Mv+p z4)+k1J}1F_LD#nf*~YJsV)y|5>gN%uOV{|oJ%p&X(sjH|M0*=~hewcaJc_2UDO_}) z!YS2BCaxJuACR~26G~0Kp!MVw?xg*UdpTTa;1_fz{(^I!Q)u@6OHYZ-&%C%Qukgx$ zXYp66F?WkDq{5BE&{(`mN%@zjcjl$S?SjBgeMtJh!jQ>!JxqyfeF0TF!*VszWtwaGSl zie%$kNH*$X0}^+Q@-2H2yZ;^vtOt;5)r&&AVH#B4Aj_u!3=o)e%fz(6yiC|mc ztyoI~&UM7jEIPx_<;ncnv4abYzh9qg7SGG0AAshzhCi?uW$-iz0%_(TL4EQR8GVqHLoH> zy`HG_D(oe55w3QH#Fd0X>l)GL6Qmt@h#=(#66F>mu)B!gPn2eG4e6$L$O1n=010&N zv8P0(kC0+?AE!xBGmLsrU^Rp?r%@Cf`G8`ZPbjgS###Gexec$q6)@c#54&A?u-lWB1G@KUHCLglh5E+9s;6G=psN&D|2LH`C4xa(qkpM>*1(hfdE zmI+-ygXajR!7Ib;ISKAF`v2c^*%FA-d`QImgs$~{oHBcfaE&(Pm_McW--DC%S-Q?Q zk!*0A1|crwatEmfeROSyQ1AW)o$H7}0vkR}wi@BUtqk z(n%n=i7{WLYD8*Zq0Zh#V)=rJNwUFRqOvNlhktyks%fOw(7$H76RgeuJ~e-;v1NM20C@U$Ym8)@&!yK93;P z^YB%yftOq*0u<_zr1cD0hn^QkX|>g)**C@4r#~^fd9hpO+0DKUAI2vCOeQG`5hUQv6&Is4Mj5r-G4ecDlROlM$-$A4X4LJ58b1a|&g4 zUvSQeNbC47$g>zm_K~;9HYZDL{t}soU*nAJ01`>4i>>;QbnrT|4nJVR606mTOrkh0 zmKmbj1YeaZL};}jN%s-`t}6)LcL{!q=iseS2`{BmBFgg1QTk0~;Rff63q89+tAk#6 zRmVI$(U|tqq9*pS-Gzi_HWw3LST&{gSQPu-52*Be<(FX6mK&|zQI%?V|4bo?VW!y~ zoH_msr!0vkEgm39tq$QTtwi>XNYd{jF{SHZ&`HF3i>}diqW%tqX&zq6+j@LSsFKKj2C9-!YFs5jZN^CwjL>}zM5s5AZS;hQ zwTrASQR|_bD71cwY|DEnuzXEoL&wb?lQ`ZbI(vtV!!J?dIEs=JA5i7+7ZTPlR6ioe zWR$3Fg2ZYNnoy^fP^N=u!E@YD&qAz5v_FfNNzYlFWU(J1|&c_j8ZhHnt4QU@PdI;M67@jAB=soTol@2_%>Y&`ufI_)H)O)Qly zT>T3D-#1yDG>qsrL7$!_)B9|H!IjXTaXfC!DEVuDtZSq*d~&3Kaa}aL1-kTj{f5W~F-f%m9kLmWbfSh*+ng`BMWL&TWxm96-M3 z1Sz;DcyNhA*}z3qhb#)|)P}61o)lJ*|2&cF7V1LxN!{+FPW=(h!9UP@htNfQ#{H{b zP!sf?l-nCLN57_HY$4BQ3Z;RwL@JYL4S9nyuN5Ng4I%L&j~P<0Q>3h)A=P0JNw&{$ z&yEzeWhbs$wjtGd5Q(-u^qmGMRG*NW13%xS(E7G@50T_F?QcX5h3NMjheV-EJDJ@O zV*jN3N}>*9$aEc(Vqd27IO0yWka}JxLVZDD`iP_^QXHNO$uj{nnO-~DPRE^;bV0t$ z0@CPx&bgNQ&7(EqHGQ6euE{D&{7K25e~C8DKHYHMj@l!oZ=}yA z61}jEn)9UE&(5JNa9R{_)mbL!byBl?s8S!IHS8k{X+IOeenExf5sFV9q1yI)eeNIk zPALDu3KaZ;QR+P}ty>u`!!or+WQ!`lRU|t+LayrsDoK$gIrJiv-Y@o^qfq`0DaEfT zf({K4B`L3(&~>z3+(%8wTQr{EqmcM5>I42N>4Ca)2e=>i1@|w1Phsv$v}$%~`)$+( zzmgm-tGzP6S!AmW^gNGpBI+z6xJ*)@?2V9aKTe;wfa}(zQtf&X`{xD;$&-mFZ=LC( zM>mSxSBNB^6Nx?{GA6+oVAY2_)jZvVjA)M7L{0b{ zo%13JJ!eoIxQ3eGHRvMW(Yd`LmHG<0n73%YctB)(2z~qq6bCGzJ?bs)+CC+s9ieOb zO3pjqbDVB2Q>gOi-1Pw|*pKLp{24C_e#AiHk0>~~H(Y6BR`RL}6#SZ?*O*V_IL(+! z{TD^OwuHQ+aGGiYcx~M}m$G)cLJv2q_pelG1#eqDCutZ92naJfON{F!YJPp#pQ0z4) z?M*4RBgpX>CuKPyQ)8TSWd)mTI}ELDAGG$pq;l!|l2T2uc}T=MMEeYhZ$b)fljk{2 z1U`p+w|S&GJx8%8h2Zo#1@wEas}XnY`{?&sB-;!jkq9%_;|1=KYUN^8rs@Tev=M3c zBhcE=b}q|A)MKP(pP|xslL&cC+SeMx*3lTbiX!hBQTMgyRwd-`y0VM5m_2mF(Ye!g zYKt+GQvHOs*gaCPTj;*Lht}{nbi|eE?=e;U zlX);v8Cg}J;8%?ln?ZHD-MEQKj#X=!&jPp|sfNh3J^Ced;U-BJ6nYye?B~`hBay=< z>WCog&%Z-c#1UGekI)%?EWV+gM6#`ndLU0VgA7u!Tv<<7jiSVFiHLAmh_cdeQwm=RXC6t& zU+lU{g!mX*B0Kh2V8YFJofSgN;DVIhfE3HJRgXXKa#u8YVdm8(7T1lf+$NV0h@ zeXQxK5jw_W$={ZGt;@04lYzG@^fb~aaFqHB|$*U?*@LPfU z8|@#8{f*iRzZL0w&2$+;ZP2=ezPhLlDZJ<|yp#f0Y2X}Mqu)S(?ErO=Cdnx_h8>|P zY#;UKj?jDk3z5hNv_%uiM7%_G$R_Q(i@I~KNa1nQ{WIhenPxhTN&zj42#`AllI)+z z2rv616niXFC{CgIsryK_A0%~aK&s;q%Kg?!Wlqq(FC-^gva|lLEFgnHlX3+tKr&klag0epy0QNmhin3jUnrG zP2p>#4Es@eb^-Zb6VMS!Hk{i=y?Td8caunS9gnqUw8tFDAVG5kg})b%(G>E%cnx%1 zqR=?{E$Sn`qtJLCO&4BE(|tXW5G%imvok30m?okk0uNZC*Onwtnqc(=_v{T)mFJM0 z+oL#7SsA!NA^JFy9iAb@W=KA}+;dHeX6cS&@}0C+Po>kM zk*-5a)F#RTh@gFVpn``YUZRA~fzP`&`jBo&`)H4QPsF-UukF!|hR=Tjts(Ew5xs*F zQvXGs({xVDXb9diHHMg!ys82PzXz218!f5=R!mHUMZS|1)|+tu(k_L;q*|liqMFoJ z=f%%xzp@K`ycr!ae?dpoPiT!erqK2idT)Fo;yp$cZCB*Ggs#{lv|f0Raw4GKtNWq= zn}T1VKKMInmn!y{MODB$DNdabCAU{`=*~T^Om3w*>Iqn{1ZOUjBh&%-DroMbbAeAju|Cc|}@2=j?_B&3ll=5#}W+X7NZ zS*O!}_v}YWl`hJDxsJ1>u(`PP0!`uU6JSJ{zY&cT=9l@-)Ad+GXY9T#u~HZI22B@t z>3V&U9BSv4w}*dyk?{O*ad_1#?5#qLNotpy2n2T;D-;ZSaz*%zqB$ z>RA-}Orb)(Bn2AIqu#%IB$G&-chz6|5&D?FqAlt(+B9Z#UOPlR&)A3WNP6JG6)y1X zpf%D&q_jaH{vyhFd^B)@NNrYz9B!O^AYpr!>zJ6zTtBH7<;teuT(rvbn39PoE;ywT z`Q>{}BhPhCUQaqRK*wB_^}*5{264x>k5np8J{hE^H`{576srLl6z*rL#*ldGvGmMl z5n&elEQ+^66{%w;b{#3qMC(3DLGVhcm%nY6ylo~OubR%kniPEfxw&YX0t{kH|f?J3_qa~ckG~#bWq=z!4)f%;rhV!qXi++bf3bD&c zxiy~OAVtd_uOp-|hltRIQRFcvrYLMMQ{*>`yAF?0;l(C41KPi=yQA zDd|a7&7e@4`{`It&yhl;cuVrIqteQi?au90Q!-l1#jYeLQlkz={K>V3@Aw}*-<$3>H*D0jhjY!V)mQ9z8#&Rlvy9e08tH5=MRPMMGpbAI{ zr`irtm~Rvnnqb?DZ0BiGuk%Q8d4dv8Qj%`-k{;mpDs}@a@S3LI4dB6wo3xMgysD;U z{Pwnu9?1?*kx0t6A#@#OzD(u=bc_k;FTFwg#T^v-&p>~TZYUSc=#Dp|>+&bGXx@{u zKQQa#54E)#lac~Zpg_TY50$|inpVv_Q>*3!p4|EweOLd22b!PIL+Y(2=m1R@KBDL9 zPo(bNqATtYr2(r%I`2vKy^*{nw=k7@Eh5u(Sb9qHJV+tBE+9`e2lhZwV$+D2b3G@C zEC*yHHplfJz63<(N!CQ*J}*$_wSilwdJy~PCZyA6CtCI+mB_V#4Y7%!a~zFC-UgHh z&Y>Y>19|S_XpZD@;C0lU+d+M}33U-BI@iylTnQY_kX$8qB2)*g(EHz^#*h77 znZzE+iU@2V%>^o672)O?y(~wQ>oO|~D(1N?kcu@Bnev$I91-9!GTcUpC|^hm)s0h~ za;y@M6>+ZO@mMZ~@%U?!^#Bs>dL&)IT?$OX9QxMKq+?7<5lhx0vwbQA&)x!e zNilP~SatA%OqgZ67*Oav30=e%YJykL5VcL@x`X!Ek7x`(94_@&TB{T&Q1DMcZMgYF zZP17Ldi4=1{Xd{9>Sxr29H2VHgx1K9XrV`S@GDdWZAoFLI%o+c{?kOp8$wP+9F{v7 zP@tml-gQ!PpX_rQZ>g77D4rf;MVo3jOkw$|7`5=~3d!_4o2+mOAxAYO4*#WIt3;xM zQUqf+tyqf&$)ED%R+=M|=71EmxW6^UaY*`Ib6t$c^&Lln#~doWwk3Cao3=?OMa_c* zoNvu>8xz%9;6JovXbovznZ@|&&jYrmd6tjK*4 zU78(Khs~l{y^Fin{kR|ZnjNyt`R< zdlO_k%%Iqloxq;px>c795^$^6bt}De4ctEU5Y52{NK^HrR=rL)f=Lv5O`-V$6ZNpZ zRK0#e`HL%1py2-uecGQ-=%Nqm+AhC`F8Tu+LibR4b{n-suEoC7Vh&U7zb-jUcHLs@ zJ~nRQu7C^*w|Taoi%#MZ;QXAz^)1}A?3Hjo{&WZOT;^nufX%eIbD+eVkFzM&g;yOr%5vLPp8FKi>_(Azx=-A;_;ntCWu;plNXpk|O~!8XJ!X-3rk_-;frz5*2iR#sV6pg_Sd6xG4&>h@@piI+S{aeOT4fozW5)2 z#GS%!&lNFUNhT%AD*)uUOd`j5nh3C8icdEzdt@Y)yj>wou+hI)706cPg&9aTuY8Nu>nS5DAFCd;*dG(w# zr`e5YYgNh+fC2>yekEuOTT`_}Zg%Imj#Ajaj0(SHBF28{HRWOx6WnzQ?^A7grGiBn zL5=uhIpQt!qFmYBrNDFMt39F0fE4>-Sr(i<2zVHPC%rf=Q0coRBwHS^Ecshb4aiCd zr+H1Tr*!;bWVso{RqHNo&t~1V>g{2j`cR{>s8vW+fdU1;PSmQ`PxM@QqfU1k94_}> zm$s+dR=r4fG$74xOnO^W9S3D~fZL}Y%TnLmubSpGfP8OKwXPE~rpjw#C0aj}@SY7< zcx07Hl}BH%pX?U@ST?@SRvGEI2C*&Fp6)||`+^J{q}V(k&UH6x`v6HY%ga|Zzzs+eRs|9MaKTx`lZlikqEY5R%}gn7?6;ktN*;b3zPA!(+?J|S$5`SJ5H+=g{nY-g5Mn~Jhr|m z@tjwcc&%s>tRLj%yUz`$+6@igv3<0Y=`dxEx44hEZ(GE$MQh!MT<2L_`nJ)W?rhje zw0^vkV*ji=%WbqST{WU*)0rz4?cZoE<`ptkpg@5F1qyzP_zyN4`RKUL%sc=9002ov JPDHLkV1myZcL)Fg diff --git a/orion-docs/src/assets/react.svg b/orion-docs/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/orion-docs/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/orion-docs/src/assets/vite.svg b/orion-docs/src/assets/vite.svg deleted file mode 100644 index 5101b67..0000000 --- a/orion-docs/src/assets/vite.svg +++ /dev/null @@ -1 +0,0 @@ -Vite diff --git a/orion-docs/src/components/ui/accordion.tsx b/orion-docs/src/components/ui/accordion.tsx deleted file mode 100644 index e1797c9..0000000 --- a/orion-docs/src/components/ui/accordion.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import * as React from "react" -import * as AccordionPrimitive from "@radix-ui/react-accordion" -import { ChevronDown } from "lucide-react" - -import { cn } from "@/lib/utils" - -const Accordion = AccordionPrimitive.Root - -const AccordionItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AccordionItem.displayName = "AccordionItem" - -const AccordionTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - svg]:rotate-180", - className - )} - {...props} - > - {children} - - - -)) -AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName - -const AccordionContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - -
{children}
-
-)) -AccordionContent.displayName = AccordionPrimitive.Content.displayName - -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/orion-docs/src/components/ui/alert.tsx b/orion-docs/src/components/ui/alert.tsx deleted file mode 100644 index 5afd41d..0000000 --- a/orion-docs/src/components/ui/alert.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" - -import { cn } from "@/lib/utils" - -const alertVariants = cva( - "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7", - { - variants: { - variant: { - default: "bg-background text-foreground", - destructive: - "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -const Alert = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes & VariantProps ->(({ className, variant, ...props }, ref) => ( -
-)) -Alert.displayName = "Alert" - -const AlertTitle = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -AlertTitle.displayName = "AlertTitle" - -const AlertDescription = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -AlertDescription.displayName = "AlertDescription" - -export { Alert, AlertTitle, AlertDescription } diff --git a/orion-docs/src/components/ui/aspect-ratio.tsx b/orion-docs/src/components/ui/aspect-ratio.tsx deleted file mode 100644 index c4abbf3..0000000 --- a/orion-docs/src/components/ui/aspect-ratio.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" - -const AspectRatio = AspectRatioPrimitive.Root - -export { AspectRatio } diff --git a/orion-docs/src/components/ui/avatar.tsx b/orion-docs/src/components/ui/avatar.tsx deleted file mode 100644 index 991f56e..0000000 --- a/orion-docs/src/components/ui/avatar.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from "react" -import * as AvatarPrimitive from "@radix-ui/react-avatar" - -import { cn } from "@/lib/utils" - -const Avatar = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -Avatar.displayName = AvatarPrimitive.Root.displayName - -const AvatarImage = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AvatarImage.displayName = AvatarPrimitive.Image.displayName - -const AvatarFallback = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName - -export { Avatar, AvatarImage, AvatarFallback } diff --git a/orion-docs/src/components/ui/badge.tsx b/orion-docs/src/components/ui/badge.tsx deleted file mode 100644 index e87d62b..0000000 --- a/orion-docs/src/components/ui/badge.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" - -import { cn } from "@/lib/utils" - -const badgeVariants = cva( - "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", - { - variants: { - variant: { - default: - "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", - secondary: - "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", - destructive: - "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", - outline: "text-foreground", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -export interface BadgeProps - extends React.HTMLAttributes, - VariantProps {} - -function Badge({ className, variant, ...props }: BadgeProps) { - return ( -
- ) -} - -export { Badge, badgeVariants } diff --git a/orion-docs/src/components/ui/breadcrumb.tsx b/orion-docs/src/components/ui/breadcrumb.tsx deleted file mode 100644 index 60e6c96..0000000 --- a/orion-docs/src/components/ui/breadcrumb.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import * as React from "react" -import { Slot } from "@radix-ui/react-slot" -import { ChevronRight, MoreHorizontal } from "lucide-react" - -import { cn } from "@/lib/utils" - -const Breadcrumb = React.forwardRef< - HTMLElement, - React.ComponentPropsWithoutRef<"nav"> & { - separator?: React.ReactNode - } ->(({ ...props }, ref) =>
- ) - }, - ...components, - }} - {...props} - /> - ) -} - -function CalendarDayButton({ - className, - day, - modifiers, - ...props -}: React.ComponentProps) { - const defaultClassNames = getDefaultClassNames() - - const ref = React.useRef(null) - React.useEffect(() => { - if (modifiers.focused) ref.current?.focus() - }, [modifiers.focused]) - - return ( - - ) -}) -CarouselPrevious.displayName = "CarouselPrevious" - -const CarouselNext = React.forwardRef< - HTMLButtonElement, - React.ComponentProps ->(({ className, variant = "outline", size = "icon", ...props }, ref) => { - const { orientation, scrollNext, canScrollNext } = useCarousel() - - return ( - - ) -}) -CarouselNext.displayName = "CarouselNext" - -export { - type CarouselApi, - Carousel, - CarouselContent, - CarouselItem, - CarouselPrevious, - CarouselNext, -} diff --git a/orion-docs/src/components/ui/checkbox.tsx b/orion-docs/src/components/ui/checkbox.tsx deleted file mode 100644 index c6fdd07..0000000 --- a/orion-docs/src/components/ui/checkbox.tsx +++ /dev/null @@ -1,30 +0,0 @@ -"use client" - -import * as React from "react" -import * as CheckboxPrimitive from "@radix-ui/react-checkbox" -import { Check } from "lucide-react" - -import { cn } from "@/lib/utils" - -const Checkbox = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - - - -)) -Checkbox.displayName = CheckboxPrimitive.Root.displayName - -export { Checkbox } diff --git a/orion-docs/src/components/ui/collapsible.tsx b/orion-docs/src/components/ui/collapsible.tsx deleted file mode 100644 index a23e7a2..0000000 --- a/orion-docs/src/components/ui/collapsible.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" - -const Collapsible = CollapsiblePrimitive.Root - -const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger - -const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent - -export { Collapsible, CollapsibleTrigger, CollapsibleContent } diff --git a/orion-docs/src/components/ui/command.tsx b/orion-docs/src/components/ui/command.tsx deleted file mode 100644 index 2cecd91..0000000 --- a/orion-docs/src/components/ui/command.tsx +++ /dev/null @@ -1,153 +0,0 @@ -"use client" - -import * as React from "react" -import { type DialogProps } from "@radix-ui/react-dialog" -import { Command as CommandPrimitive } from "cmdk" -import { Search } from "lucide-react" - -import { cn } from "@/lib/utils" -import { Dialog, DialogContent } from "@/components/ui/dialog" - -const Command = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -Command.displayName = CommandPrimitive.displayName - -const CommandDialog = ({ children, ...props }: DialogProps) => { - return ( - - - - {children} - - - - ) -} - -const CommandInput = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( -
- - -
-)) - -CommandInput.displayName = CommandPrimitive.Input.displayName - -const CommandList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandList.displayName = CommandPrimitive.List.displayName - -const CommandEmpty = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->((props, ref) => ( - -)) - -CommandEmpty.displayName = CommandPrimitive.Empty.displayName - -const CommandGroup = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandGroup.displayName = CommandPrimitive.Group.displayName - -const CommandSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -CommandSeparator.displayName = CommandPrimitive.Separator.displayName - -const CommandItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandItem.displayName = CommandPrimitive.Item.displayName - -const CommandShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - - ) -} -CommandShortcut.displayName = "CommandShortcut" - -export { - Command, - CommandDialog, - CommandInput, - CommandList, - CommandEmpty, - CommandGroup, - CommandItem, - CommandShortcut, - CommandSeparator, -} diff --git a/orion-docs/src/components/ui/context-menu.tsx b/orion-docs/src/components/ui/context-menu.tsx deleted file mode 100644 index 1306dd2..0000000 --- a/orion-docs/src/components/ui/context-menu.tsx +++ /dev/null @@ -1,200 +0,0 @@ -"use client" - -import * as React from "react" -import * as ContextMenuPrimitive from "@radix-ui/react-context-menu" -import { Check, ChevronRight, Circle } from "lucide-react" - -import { cn } from "@/lib/utils" - -const ContextMenu = ContextMenuPrimitive.Root - -const ContextMenuTrigger = ContextMenuPrimitive.Trigger - -const ContextMenuGroup = ContextMenuPrimitive.Group - -const ContextMenuPortal = ContextMenuPrimitive.Portal - -const ContextMenuSub = ContextMenuPrimitive.Sub - -const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup - -const ContextMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, children, ...props }, ref) => ( - - {children} - - -)) -ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName - -const ContextMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName - -const ContextMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - -)) -ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName - -const ContextMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName - -const ContextMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - -)) -ContextMenuCheckboxItem.displayName = - ContextMenuPrimitive.CheckboxItem.displayName - -const ContextMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - - - - {children} - -)) -ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName - -const ContextMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName - -const ContextMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName - -const ContextMenuShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - - ) -} -ContextMenuShortcut.displayName = "ContextMenuShortcut" - -export { - ContextMenu, - ContextMenuTrigger, - ContextMenuContent, - ContextMenuItem, - ContextMenuCheckboxItem, - ContextMenuRadioItem, - ContextMenuLabel, - ContextMenuSeparator, - ContextMenuShortcut, - ContextMenuGroup, - ContextMenuPortal, - ContextMenuSub, - ContextMenuSubContent, - ContextMenuSubTrigger, - ContextMenuRadioGroup, -} diff --git a/orion-docs/src/components/ui/dialog.tsx b/orion-docs/src/components/ui/dialog.tsx deleted file mode 100644 index 9dbeaa0..0000000 --- a/orion-docs/src/components/ui/dialog.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { X } from "lucide-react" - -import { cn } from "@/lib/utils" - -const Dialog = DialogPrimitive.Root - -const DialogTrigger = DialogPrimitive.Trigger - -const DialogPortal = DialogPrimitive.Portal - -const DialogClose = DialogPrimitive.Close - -const DialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName - -const DialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - {children} - - - Close - - - -)) -DialogContent.displayName = DialogPrimitive.Content.displayName - -const DialogHeader = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DialogHeader.displayName = "DialogHeader" - -const DialogFooter = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DialogFooter.displayName = "DialogFooter" - -const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogTitle.displayName = DialogPrimitive.Title.displayName - -const DialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DialogDescription.displayName = DialogPrimitive.Description.displayName - -export { - Dialog, - DialogPortal, - DialogOverlay, - DialogTrigger, - DialogClose, - DialogContent, - DialogHeader, - DialogFooter, - DialogTitle, - DialogDescription, -} diff --git a/orion-docs/src/components/ui/drawer.tsx b/orion-docs/src/components/ui/drawer.tsx deleted file mode 100644 index 6a0ef53..0000000 --- a/orion-docs/src/components/ui/drawer.tsx +++ /dev/null @@ -1,118 +0,0 @@ -"use client" - -import * as React from "react" -import { Drawer as DrawerPrimitive } from "vaul" - -import { cn } from "@/lib/utils" - -const Drawer = ({ - shouldScaleBackground = true, - ...props -}: React.ComponentProps) => ( - -) -Drawer.displayName = "Drawer" - -const DrawerTrigger = DrawerPrimitive.Trigger - -const DrawerPortal = DrawerPrimitive.Portal - -const DrawerClose = DrawerPrimitive.Close - -const DrawerOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName - -const DrawerContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - -
- {children} - - -)) -DrawerContent.displayName = "DrawerContent" - -const DrawerHeader = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DrawerHeader.displayName = "DrawerHeader" - -const DrawerFooter = ({ - className, - ...props -}: React.HTMLAttributes) => ( -
-) -DrawerFooter.displayName = "DrawerFooter" - -const DrawerTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DrawerTitle.displayName = DrawerPrimitive.Title.displayName - -const DrawerDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DrawerDescription.displayName = DrawerPrimitive.Description.displayName - -export { - Drawer, - DrawerPortal, - DrawerOverlay, - DrawerTrigger, - DrawerClose, - DrawerContent, - DrawerHeader, - DrawerFooter, - DrawerTitle, - DrawerDescription, -} diff --git a/orion-docs/src/components/ui/dropdown-menu.tsx b/orion-docs/src/components/ui/dropdown-menu.tsx deleted file mode 100644 index 5a20503..0000000 --- a/orion-docs/src/components/ui/dropdown-menu.tsx +++ /dev/null @@ -1,201 +0,0 @@ -"use client" - -import * as React from "react" -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" -import { Check, ChevronRight, Circle } from "lucide-react" - -import { cn } from "@/lib/utils" - -const DropdownMenu = DropdownMenuPrimitive.Root - -const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger - -const DropdownMenuGroup = DropdownMenuPrimitive.Group - -const DropdownMenuPortal = DropdownMenuPrimitive.Portal - -const DropdownMenuSub = DropdownMenuPrimitive.Sub - -const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup - -const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, children, ...props }, ref) => ( - - {children} - - -)) -DropdownMenuSubTrigger.displayName = - DropdownMenuPrimitive.SubTrigger.displayName - -const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSubContent.displayName = - DropdownMenuPrimitive.SubContent.displayName - -const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, sideOffset = 4, ...props }, ref) => ( - - - -)) -DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName - -const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - svg]:size-4 [&>svg]:shrink-0", - inset && "pl-8", - className - )} - {...props} - /> -)) -DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName - -const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuCheckboxItem.displayName = - DropdownMenuPrimitive.CheckboxItem.displayName - -const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName - -const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName - -const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName - -const DropdownMenuShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - - ) -} -DropdownMenuShortcut.displayName = "DropdownMenuShortcut" - -export { - DropdownMenu, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuRadioGroup, -} diff --git a/orion-docs/src/components/ui/form.tsx b/orion-docs/src/components/ui/form.tsx deleted file mode 100644 index 2003743..0000000 --- a/orion-docs/src/components/ui/form.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import * as React from "react" -import * as LabelPrimitive from "@radix-ui/react-label" -import { Slot } from "@radix-ui/react-slot" -import { - Controller, - FormProvider, - useFormContext, - type ControllerProps, - type FieldPath, - type FieldValues, -} from "react-hook-form" - -import { cn } from "@/lib/utils" -import { Label } from "@/components/ui/label" - -const Form = FormProvider - -type FormFieldContextValue< - TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath -> = { - name: TName -} - -const FormFieldContext = React.createContext( - {} as FormFieldContextValue -) - -const FormField = < - TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath ->({ - ...props -}: ControllerProps) => { - return ( - - - - ) -} - -const useFormField = () => { - const fieldContext = React.useContext(FormFieldContext) - const itemContext = React.useContext(FormItemContext) - const { getFieldState, formState } = useFormContext() - - const fieldState = getFieldState(fieldContext.name, formState) - - if (!fieldContext) { - throw new Error("useFormField should be used within ") - } - - const { id } = itemContext - - return { - id, - name: fieldContext.name, - formItemId: `${id}-form-item`, - formDescriptionId: `${id}-form-item-description`, - formMessageId: `${id}-form-item-message`, - ...fieldState, - } -} - -type FormItemContextValue = { - id: string -} - -const FormItemContext = React.createContext( - {} as FormItemContextValue -) - -const FormItem = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => { - const id = React.useId() - - return ( - -
- - ) -}) -FormItem.displayName = "FormItem" - -const FormLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => { - const { error, formItemId } = useFormField() - - return ( -
-
- {children} -
-
- -)) -Table.displayName = "Table" - -const TableHeader = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableHeader.displayName = "TableHeader" - -const TableBody = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableBody.displayName = "TableBody" - -const TableFooter = React.forwardRef< - HTMLTableSectionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - tr]:last:border-b-0", - className - )} - {...props} - /> -)) -TableFooter.displayName = "TableFooter" - -const TableRow = React.forwardRef< - HTMLTableRowElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( - -)) -TableRow.displayName = "TableRow" - -const TableHead = React.forwardRef< - HTMLTableCellElement, - React.ThHTMLAttributes ->(({ className, ...props }, ref) => ( -
[role=checkbox]]:translate-y-[2px]", - className - )} - {...props} - /> -)) -TableHead.displayName = "TableHead" - -const TableCell = React.forwardRef< - HTMLTableCellElement, - React.TdHTMLAttributes ->(({ className, ...props }, ref) => ( - [role=checkbox]]:translate-y-[2px]", - className - )} - {...props} - /> -)) -TableCell.displayName = "TableCell" - -const TableCaption = React.forwardRef< - HTMLTableCaptionElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => ( -
-)) -TableCaption.displayName = "TableCaption" - -export { - Table, - TableHeader, - TableBody, - TableFooter, - TableHead, - TableRow, - TableCell, - TableCaption, -} diff --git a/orion-docs/src/components/ui/tabs.tsx b/orion-docs/src/components/ui/tabs.tsx deleted file mode 100644 index 85d83be..0000000 --- a/orion-docs/src/components/ui/tabs.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from "react" -import * as TabsPrimitive from "@radix-ui/react-tabs" - -import { cn } from "@/lib/utils" - -const Tabs = TabsPrimitive.Root - -const TabsList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsList.displayName = TabsPrimitive.List.displayName - -const TabsTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsTrigger.displayName = TabsPrimitive.Trigger.displayName - -const TabsContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -TabsContent.displayName = TabsPrimitive.Content.displayName - -export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/orion-docs/src/components/ui/textarea.tsx b/orion-docs/src/components/ui/textarea.tsx deleted file mode 100644 index e56b0af..0000000 --- a/orion-docs/src/components/ui/textarea.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -const Textarea = React.forwardRef< - HTMLTextAreaElement, - React.ComponentProps<"textarea"> ->(({ className, ...props }, ref) => { - return ( -