development-hub/assets/js/1db64337.804ac24b.js

1 line
19 KiB
JavaScript

"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,n,s){s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>a,frontMatter:()=>c,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"overview","title":"Development Hub","description":"Central orchestration project for managing Rob\'s multi-project development ecosystem.","source":"@site/docs/overview.md","sourceDirName":".","slug":"/","permalink":"/rob/development-hub/","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"slug":"/","sidebar_position":1},"sidebar":"docs","next":{"title":"Development Hub TODOs","permalink":"/rob/development-hub/todos"}}');var t=s(4848),i=s(8453);const c={slug:"/",sidebar_position:1},d="Development Hub",l={},o=[{value:"Overview",id:"overview",level:2},{value:"GUI Application",id:"gui-application",level:2},{value:"Running the App",id:"running-the-app",level:3},{value:"Features",id:"features",level:3},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"The <code>new-project</code> Script",id:"the-new-project-script",level:2},{value:"What It Creates",id:"what-it-creates",level:3},{value:"Usage",id:"usage",level:3},{value:"Architecture",id:"architecture",level:2},{value:"Key Classes",id:"key-classes",level:3},{value:"Project Structure",id:"project-structure",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Project Search Paths",id:"project-search-paths",level:3},{value:"Gitea API Token",id:"gitea-api-token",level:3},{value:"Template Placeholders",id:"template-placeholders",level:2},{value:"Related Projects",id:"related-projects",level:2}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"development-hub",children:"Development Hub"})}),"\n",(0,t.jsx)(n.p,{children:"Central orchestration project for managing Rob's multi-project development ecosystem."}),"\n",(0,t.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(n.p,{children:"Development Hub provides:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"GUI Application"})," - PyQt6 workspace with project list, splittable terminal panes, and session persistence"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"CLI Tools"})," - Scripts to create and manage projects following consistent patterns"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Centralized Documentation"})," - Docusaurus-based docs with Gitea Pages deployment"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"gui-application",children:"GUI Application"}),"\n",(0,t.jsx)(n.p,{children:"A PyQt6-based workspace for managing your development projects."}),"\n",(0,t.jsx)(n.h3,{id:"running-the-app",children:"Running the App"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd ~/PycharmProjects/development-hub\nsource .venv/bin/activate\npython -m development_hub\n"})}),"\n",(0,t.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Project Auto-Discovery"})," - Scans configurable directories for git repos, with ignore patterns"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Project Dashboard"})," - View todos, goals, milestones at a glance with interactive checkboxes"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Splittable Panes"})," - Horizontal/vertical splits, each pane has its own tab bar"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"PTY Terminals"})," - Full terminal emulation with TUI support (vim, htop work)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Drag & Drop"})," - Drop files/folders into terminal to inject paths"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Session Persistence"})," - Remembers pane layout and open terminals on restart"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"New Project Dialog"})," - Create projects with optional Ramble voice input"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Context Menu Actions"})," - Open terminal, editor, Gitea, docs, deploy from right-click"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Documentation Preview"})," - Preview documentation updates before applying changes"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Discussion Integration"})," - Launch orchestrated discussions for todos and milestones"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"keyboard-shortcuts",children:"Keyboard Shortcuts"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Shortcut"}),(0,t.jsx)(n.th,{children:"Action"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Shift+T"})}),(0,t.jsx)(n.td,{children:"New terminal tab"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Shift+W"})}),(0,t.jsx)(n.td,{children:"Close current tab"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Shift+D"})}),(0,t.jsx)(n.td,{children:"Split horizontal"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Shift+E"})}),(0,t.jsx)(n.td,{children:"Split vertical"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Shift+P"})}),(0,t.jsx)(n.td,{children:"Close active pane"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+Alt+Left/Right"})}),(0,t.jsx)(n.td,{children:"Switch panes"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+B"})}),(0,t.jsx)(n.td,{children:"Toggle project panel"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Ctrl+N"})}),(0,t.jsx)(n.td,{children:"New project dialog"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"F5"})}),(0,t.jsx)(n.td,{children:"Refresh project list"})]})]})]}),"\n",(0,t.jsxs)(n.h2,{id:"the-new-project-script",children:["The ",(0,t.jsx)(n.code,{children:"new-project"})," Script"]}),"\n",(0,t.jsxs)(n.p,{children:["The main tool is ",(0,t.jsx)(n.code,{children:"new-project"}),", which automates creating a new project in the ecosystem:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'new-project my-tool --title "My Tool" --tagline "Does useful things"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"what-it-creates",children:"What It Creates"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Gitea repository"})," at ",(0,t.jsx)(n.code,{children:"gitea.brrd.tech/rob/my-tool"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Local project"})," at ",(0,t.jsx)(n.code,{children:"~/PycharmProjects/my-tool/"})," with:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"CLAUDE.md"})," - AI assistant context"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"README.md"})," - Project readme"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"pyproject.toml"})," - Python packaging"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:".gitignore"})," - Standard ignores"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"docs/"})," - Symlink to centralized docs"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Documentation folder"})," at ",(0,t.jsx)(n.code,{children:"project-docs/docs/projects/my-tool/"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Build configuration"})," in ",(0,t.jsx)(n.code,{children:"build-public-docs.sh"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'# Full specification\nnew-project myproject --title "My Project" --tagline "Short description"\n\n# Interactive mode (prompts for title/tagline)\nnew-project myproject\n\n# Options\n--dry-run Show what would happen without making changes\n--skip-gitea Skip Gitea repo creation (for offline use)\n--help Show help\n'})}),"\n",(0,t.jsx)(n.h2,{id:"architecture",children:"Architecture"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"src/development_hub/\n\u251c\u2500\u2500 __init__.py\n\u251c\u2500\u2500 __main__.py # Entry point\n\u251c\u2500\u2500 app.py # QApplication subclass\n\u251c\u2500\u2500 main_window.py # Main window with menus\n\u251c\u2500\u2500 project_list.py # Left panel - project discovery & context menu\n\u251c\u2500\u2500 workspace.py # Right panel - splittable panes with tabs\n\u251c\u2500\u2500 terminal_widget.py # PTY terminal with pyte emulation\n\u251c\u2500\u2500 project_discovery.py # Auto-discover projects from configurable paths\n\u251c\u2500\u2500 dialogs.py # New Project (with Ramble), Settings, Preview dialogs\n\u251c\u2500\u2500 settings.py # JSON persistence for settings & session\n\u251c\u2500\u2500 styles.py # Dark theme stylesheet\n\u251c\u2500\u2500 models/ # Data models (Goal, Todo, Milestone, Health)\n\u251c\u2500\u2500 views/ # Dashboard views (Project, Global)\n\u251c\u2500\u2500 parsers/ # Markdown file parsers (todos, goals, milestones)\n\u251c\u2500\u2500 services/ # Business logic (git, health checker, progress writer)\n\u2514\u2500\u2500 widgets/ # Reusable UI components\n"})}),"\n",(0,t.jsx)(n.h3,{id:"key-classes",children:"Key Classes"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Class"}),(0,t.jsx)(n.th,{children:"File"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MainWindow"})}),(0,t.jsx)(n.td,{children:"main_window.py"}),(0,t.jsx)(n.td,{children:"QMainWindow with menus, splitter layout"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ProjectListWidget"})}),(0,t.jsx)(n.td,{children:"project_list.py"}),(0,t.jsx)(n.td,{children:"Project list with context menu actions"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WorkspaceManager"})}),(0,t.jsx)(n.td,{children:"workspace.py"}),(0,t.jsx)(n.td,{children:"Manages splittable pane layout"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PaneWidget"})}),(0,t.jsx)(n.td,{children:"workspace.py"}),(0,t.jsx)(n.td,{children:"Tab container within a pane"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"TerminalWidget"})}),(0,t.jsx)(n.td,{children:"terminal_widget.py"}),(0,t.jsx)(n.td,{children:"PTY-based terminal with pyte screen emulation"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ProjectDashboard"})}),(0,t.jsx)(n.td,{children:"views/dashboard.py"}),(0,t.jsx)(n.td,{children:"Project-specific dashboard view"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"GlobalDashboard"})}),(0,t.jsx)(n.td,{children:"views/global_dashboard.py"}),(0,t.jsx)(n.td,{children:"Cross-project overview dashboard"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"project-structure",children:"Project Structure"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"development-hub/\n\u251c\u2500\u2500 src/development_hub/ # GUI application (see Architecture above)\n\u251c\u2500\u2500 bin/\n\u2502 \u2514\u2500\u2500 new-project # CLI scaffolding script\n\u251c\u2500\u2500 templates/\n\u2502 \u251c\u2500\u2500 gitignore.template # Python .gitignore with docs exclusion\n\u2502 \u251c\u2500\u2500 CLAUDE.md.template # AI context file\n\u2502 \u251c\u2500\u2500 README.md.template # Basic README\n\u2502 \u251c\u2500\u2500 pyproject.toml.template\n\u2502 \u251c\u2500\u2500 overview.md.template # Docs overview\n\u2502 \u2514\u2500\u2500 updating-documentation.md.template\n\u251c\u2500\u2500 docs/ # Symlink to project-docs\n\u251c\u2500\u2500 pyproject.toml # Python packaging with PyQt6 dep\n\u251c\u2500\u2500 CLAUDE.md\n\u2514\u2500\u2500 README.md\n"})}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.h3,{id:"project-search-paths",children:"Project Search Paths"}),"\n",(0,t.jsxs)(n.p,{children:["Projects are auto-discovered by scanning configured directories for ",(0,t.jsx)(n.code,{children:".git"})," folders. Configure in Settings dialog or edit ",(0,t.jsx)(n.code,{children:"~/.config/development-hub/settings.json"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "project_search_paths": ["~/PycharmProjects"],\n "project_ignore_folders": ["trash", "project-docs", ".cache", "__pycache__", "node_modules"]\n}\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Discovery rules:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Scans immediate subdirectories (not recursive)"}),"\n",(0,t.jsxs)(n.li,{children:["Requires ",(0,t.jsx)(n.code,{children:".git"})," folder to be recognized as a project"]}),"\n",(0,t.jsxs)(n.li,{children:["Skips hidden folders (starting with ",(0,t.jsx)(n.code,{children:"."}),")"]}),"\n",(0,t.jsx)(n.li,{children:"Skips folders in ignore list"}),"\n",(0,t.jsxs)(n.li,{children:["Merges rich metadata from ",(0,t.jsx)(n.code,{children:"build-public-docs.sh"})," when available"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"gitea-api-token",children:"Gitea API Token"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"new-project"})," script needs a Gitea API token to create repositories automatically."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Setup options:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Environment variable: ",(0,t.jsx)(n.code,{children:"export GITEA_TOKEN=your_token"})]}),"\n",(0,t.jsxs)(n.li,{children:["Config file: ",(0,t.jsx)(n.code,{children:"~/.config/development-hub/gitea-token"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The script will prompt for the token on first run and save it automatically."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Creating a token:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to ",(0,t.jsx)(n.a,{href:"https://gitea.brrd.tech/user/settings/applications",children:"https://gitea.brrd.tech/user/settings/applications"})]}),"\n",(0,t.jsx)(n.li,{children:"Generate a new token with 'repo' scope"}),"\n",(0,t.jsx)(n.li,{children:"Copy the token when prompted"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"template-placeholders",children:"Template Placeholders"}),"\n",(0,t.jsx)(n.p,{children:"When creating new projects, templates use these placeholders:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Placeholder"}),(0,t.jsx)(n.th,{children:"Description"}),(0,t.jsx)(n.th,{children:"Example"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{PROJECT_NAME}}"})}),(0,t.jsx)(n.td,{children:"Lowercase project name"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"my-tool"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{PROJECT_TITLE}}"})}),(0,t.jsx)(n.td,{children:"Display title"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"My Tool"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{PROJECT_TAGLINE}}"})}),(0,t.jsx)(n.td,{children:"Short description"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"Does useful things"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{YEAR}}"})}),(0,t.jsx)(n.td,{children:"Current year"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2026"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{DATE}}"})}),(0,t.jsx)(n.td,{children:"Creation date"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2026-01-07"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{GITEA_URL}}"})}),(0,t.jsx)(n.td,{children:"Gitea server URL"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"https://gitea.brrd.tech"})})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"{{GITEA_OWNER}}"})}),(0,t.jsx)(n.td,{children:"Repository owner"}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"rob"})})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"related-projects",children:"Related Projects"}),"\n",(0,t.jsx)(n.p,{children:"Development Hub manages these projects:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Project"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"../cmdforge/overview",children:"CmdForge"})}),(0,t.jsx)(n.td,{children:"AI-powered CLI tool builder"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"../cascadingdev/overview",children:"CascadingDev"})}),(0,t.jsx)(n.td,{children:"Cascading Development Framework"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"../orchestrated-discussions/overview",children:"Orchestrated Discussions"})}),(0,t.jsx)(n.td,{children:"AI Discussion Framework"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"../artifact-editor/overview",children:"Artifact Editor"})}),(0,t.jsx)(n.td,{children:"Code Artifact Editor"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.a,{href:"../ramble/overview",children:"Ramble"})}),(0,t.jsx)(n.td,{children:"Voice Note Transcription"})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["All projects follow the same patterns and can be created using ",(0,t.jsx)(n.code,{children:"new-project"}),"."]})]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},8453(e,n,s){s.d(n,{R:()=>c,x:()=>d});var r=s(6540);const t={},i=r.createContext(t);function c(e){const n=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]);