gitextract_tfg2fxbz/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── feature_request.md │ │ └── help_wanted.md │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── chromatic.yml │ ├── ci.yml │ └── supabase-push-staging.yml ├── .gitignore ├── .gitmodules ├── .prettierignore ├── .vscode/ │ ├── .debug.script.mjs │ ├── extensions.json │ ├── launch.json │ └── tasks.json ├── AGENTS.md ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE.md ├── README.md ├── SECURITY.md ├── apps/ │ ├── backend/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── supabase/ │ │ │ ├── .gitignore │ │ │ ├── config.toml │ │ │ └── migrations/ │ │ │ ├── 0000_same_human_robot.sql │ │ │ ├── 0001_graceful_exodus.sql │ │ │ ├── 0002_red_crusher_hogan.sql │ │ │ ├── 0003_loud_ozymandias.sql │ │ │ ├── 0004_pink_expediter.sql │ │ │ ├── 0005_short_lila_cheney.sql │ │ │ ├── 0006_rls.sql │ │ │ ├── 0007_realtime_rls.sql │ │ │ ├── 0008_preview-img-storage.sql │ │ │ ├── 0009_project_img_path.sql │ │ │ ├── 0010_bent_edwin_jarvis.sql │ │ │ ├── 0011_typical_clea.sql │ │ │ ├── 0012_file-transfer-bucket.sql │ │ │ ├── 0013_aspiring_kabuki.sql │ │ │ ├── 0014_military_marrow.sql │ │ │ ├── 0015_same_leo.sql │ │ │ ├── 0016_pretty_dust.sql │ │ │ ├── 0017_small_xavin.sql │ │ │ ├── 0018_lush_thanos.sql │ │ │ ├── 0019_abandoned_psylocke.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ ├── 0003_snapshot.json │ │ │ ├── 0004_snapshot.json │ │ │ ├── 0005_snapshot.json │ │ │ ├── 0006_snapshot.json │ │ │ ├── 0007_snapshot.json │ │ │ ├── 0008_snapshot.json │ │ │ ├── 0009_snapshot.json │ │ │ ├── 0010_snapshot.json │ │ │ ├── 0011_snapshot.json │ │ │ ├── 0012_snapshot.json │ │ │ ├── 0013_snapshot.json │ │ │ ├── 0014_snapshot.json │ │ │ ├── 0015_snapshot.json │ │ │ ├── 0016_snapshot.json │ │ │ ├── 0017_snapshot.json │ │ │ ├── 0018_snapshot.json │ │ │ ├── 0019_snapshot.json │ │ │ └── _journal.json │ │ └── tsconfig.json │ └── web/ │ ├── .gitignore │ ├── README.md │ ├── client/ │ │ ├── .gitignore │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ ├── mocks/ │ │ │ │ ├── supabase-client.ts │ │ │ │ └── trpc-react.tsx │ │ │ ├── preview-head.html │ │ │ ├── preview.tsx │ │ │ └── vitest.setup.ts │ │ ├── README.md │ │ ├── chromatic.config.json │ │ ├── components.json │ │ ├── eslint.config.js │ │ ├── messages/ │ │ │ ├── en.d.json.ts │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── ja.json │ │ │ ├── ko.json │ │ │ └── zh.json │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ ├── onlook-preload-script.js │ │ │ └── scenes/ │ │ │ └── flow-background.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── _components/ │ │ │ │ │ ├── auth-modal.tsx │ │ │ │ │ ├── button-link.tsx │ │ │ │ │ ├── hero/ │ │ │ │ │ │ ├── ai-features-hero.tsx │ │ │ │ │ │ ├── ai-frontend-hero.tsx │ │ │ │ │ │ ├── builder-features-hero.tsx │ │ │ │ │ │ ├── claude-code-hero.tsx │ │ │ │ │ │ ├── create-error.tsx │ │ │ │ │ │ ├── create.tsx │ │ │ │ │ │ ├── features-hero.tsx │ │ │ │ │ │ ├── high-demand.tsx │ │ │ │ │ │ ├── import.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── mobile-email-capture.tsx │ │ │ │ │ │ ├── start-blank.tsx │ │ │ │ │ │ └── unicorn-background.tsx │ │ │ │ │ ├── landing-page/ │ │ │ │ │ │ ├── ai-benefits-section.tsx │ │ │ │ │ │ ├── ai-features-grid-section.tsx │ │ │ │ │ │ ├── ai-features-intro-section.tsx │ │ │ │ │ │ ├── benefits-section.tsx │ │ │ │ │ │ ├── builder-benefits-section.tsx │ │ │ │ │ │ ├── builder-features-grid-section.tsx │ │ │ │ │ │ ├── builder-features-intro-section.tsx │ │ │ │ │ │ ├── code-one-to-one-section.tsx │ │ │ │ │ │ ├── color-swatch-group.tsx │ │ │ │ │ │ ├── contributor-section.tsx │ │ │ │ │ │ ├── contributor.css │ │ │ │ │ │ ├── cta-section.tsx │ │ │ │ │ │ ├── design-mockup/ │ │ │ │ │ │ │ ├── design-mockup-icons.tsx │ │ │ │ │ │ │ └── design-mockup.tsx │ │ │ │ │ │ ├── faq-dropdown.tsx │ │ │ │ │ │ ├── faq-section.tsx │ │ │ │ │ │ ├── feature-blocks/ │ │ │ │ │ │ │ ├── ai-chat-preview-block.tsx │ │ │ │ │ │ │ ├── brand-compliance.tsx │ │ │ │ │ │ │ ├── components.tsx │ │ │ │ │ │ │ ├── direct-editing.tsx │ │ │ │ │ │ │ ├── layers.tsx │ │ │ │ │ │ │ ├── responsive-website.tsx │ │ │ │ │ │ │ └── revision-history.tsx │ │ │ │ │ │ ├── features-grid-section.tsx │ │ │ │ │ │ ├── features-intro-section.tsx │ │ │ │ │ │ ├── illustrations.tsx │ │ │ │ │ │ ├── obsess-for-hours-section.tsx │ │ │ │ │ │ ├── onlook-interface-mockup.tsx │ │ │ │ │ │ ├── page-footer.tsx │ │ │ │ │ │ ├── responsive-mockup-section.tsx │ │ │ │ │ │ ├── social-proof-section.tsx │ │ │ │ │ │ ├── testimonials-section.tsx │ │ │ │ │ │ └── what-can-onlook-do-section.tsx │ │ │ │ │ ├── login-button.tsx │ │ │ │ │ ├── shared/ │ │ │ │ │ │ └── mockups/ │ │ │ │ │ │ ├── ai-chat-interactive.tsx │ │ │ │ │ │ ├── components-mockup.tsx │ │ │ │ │ │ ├── direct-editing-interactive.tsx │ │ │ │ │ │ └── tailwind-color-editor.tsx │ │ │ │ │ ├── theme.tsx │ │ │ │ │ ├── top-bar/ │ │ │ │ │ │ ├── github.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── mega-menu.tsx │ │ │ │ │ │ ├── mobile-menu.tsx │ │ │ │ │ │ └── user.tsx │ │ │ │ │ └── website-layout.tsx │ │ │ │ ├── about/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── api/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── stream.ts │ │ │ │ │ │ │ └── usage.ts │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── email-capture/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── trpc/ │ │ │ │ │ └── [trpc]/ │ │ │ │ │ └── route.ts │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth-context.tsx │ │ │ │ │ ├── callback/ │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── redirect/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── callback/ │ │ │ │ │ ├── github/ │ │ │ │ │ │ └── install/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── stripe/ │ │ │ │ │ ├── cancel/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── message-screen.tsx │ │ │ │ │ └── success/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── faq/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── features/ │ │ │ │ │ ├── ai/ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── ai-for-frontend/ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── builder/ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── prototype/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── fonts.ts │ │ │ │ ├── invitation/ │ │ │ │ │ └── [id]/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── auth.tsx │ │ │ │ │ │ └── main.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── login/ │ │ │ │ │ ├── actions.tsx │ │ │ │ │ ├── error.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── pricing/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── privacy-policy/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── project/ │ │ │ │ │ ├── [id]/ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ ├── bottom-bar/ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── restart-sandbox-button.tsx │ │ │ │ │ │ │ │ ├── terminal-area.tsx │ │ │ │ │ │ │ │ └── terminal.tsx │ │ │ │ │ │ │ ├── branch/ │ │ │ │ │ │ │ │ ├── branch-controls.tsx │ │ │ │ │ │ │ │ └── branch-list.tsx │ │ │ │ │ │ │ ├── canvas/ │ │ │ │ │ │ │ │ ├── frame/ │ │ │ │ │ │ │ │ │ ├── gesture.tsx │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ ├── resize-handles.tsx │ │ │ │ │ │ │ │ │ ├── top-bar/ │ │ │ │ │ │ │ │ │ │ ├── branch.tsx │ │ │ │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ └── page-selector.tsx │ │ │ │ │ │ │ │ │ ├── use-frame-reload.ts │ │ │ │ │ │ │ │ │ ├── use-sandbox-timeout.ts │ │ │ │ │ │ │ │ │ └── view.tsx │ │ │ │ │ │ │ │ ├── frames.tsx │ │ │ │ │ │ │ │ ├── hotkeys/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── overlay/ │ │ │ │ │ │ │ │ │ ├── drag-select.tsx │ │ │ │ │ │ │ │ │ ├── elements/ │ │ │ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ │ │ │ ├── chat.tsx │ │ │ │ │ │ │ │ │ │ │ ├── code.tsx │ │ │ │ │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ │ ├── measurement.tsx │ │ │ │ │ │ │ │ │ │ ├── rect/ │ │ │ │ │ │ │ │ │ │ │ ├── base.tsx │ │ │ │ │ │ │ │ │ │ │ ├── click.tsx │ │ │ │ │ │ │ │ │ │ │ ├── hover.tsx │ │ │ │ │ │ │ │ │ │ │ ├── insert.tsx │ │ │ │ │ │ │ │ │ │ │ └── resize.tsx │ │ │ │ │ │ │ │ │ │ ├── snap-guidelines.tsx │ │ │ │ │ │ │ │ │ │ └── text.tsx │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ └── pan.tsx │ │ │ │ │ │ │ │ ├── recenter-canvas-button.tsx │ │ │ │ │ │ │ │ └── selection-utils.ts │ │ │ │ │ │ │ ├── clone-project-dialog.tsx │ │ │ │ │ │ │ ├── editor-bar/ │ │ │ │ │ │ │ │ ├── div-selected.tsx │ │ │ │ │ │ │ │ ├── dropdowns/ │ │ │ │ │ │ │ │ │ ├── border-color.tsx │ │ │ │ │ │ │ │ │ ├── border.tsx │ │ │ │ │ │ │ │ │ ├── color-background.tsx │ │ │ │ │ │ │ │ │ ├── display/ │ │ │ │ │ │ │ │ │ │ ├── direction.tsx │ │ │ │ │ │ │ │ │ │ ├── gap.tsx │ │ │ │ │ │ │ │ │ │ ├── horizontal-align.tsx │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ ├── type.tsx │ │ │ │ │ │ │ │ │ │ └── vertical-align.tsx │ │ │ │ │ │ │ │ │ ├── height.tsx │ │ │ │ │ │ │ │ │ ├── img-background.tsx │ │ │ │ │ │ │ │ │ ├── img-fit.tsx │ │ │ │ │ │ │ │ │ ├── margin.tsx │ │ │ │ │ │ │ │ │ ├── opacity.tsx │ │ │ │ │ │ │ │ │ ├── padding.tsx │ │ │ │ │ │ │ │ │ ├── radius.tsx │ │ │ │ │ │ │ │ │ ├── state-dropdown.tsx │ │ │ │ │ │ │ │ │ └── width.tsx │ │ │ │ │ │ │ │ ├── frame-selected/ │ │ │ │ │ │ │ │ │ ├── device-selector.tsx │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ ├── rotate-group.tsx │ │ │ │ │ │ │ │ │ ├── theme-group.tsx │ │ │ │ │ │ │ │ │ └── window-actions-group.tsx │ │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ │ ├── use-background-image-update.ts │ │ │ │ │ │ │ │ │ ├── use-box-control.ts │ │ │ │ │ │ │ │ │ ├── use-color-update.ts │ │ │ │ │ │ │ │ │ ├── use-dimension-control.ts │ │ │ │ │ │ │ │ │ ├── use-dropdown-manager.tsx │ │ │ │ │ │ │ │ │ ├── use-gradient-update.ts │ │ │ │ │ │ │ │ │ ├── use-input-control.ts │ │ │ │ │ │ │ │ │ ├── use-measure-group.ts │ │ │ │ │ │ │ │ │ └── use-text-control.ts │ │ │ │ │ │ │ │ ├── hover-tooltip.tsx │ │ │ │ │ │ │ │ ├── img-selected.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── inputs/ │ │ │ │ │ │ │ │ │ ├── color-picker.tsx │ │ │ │ │ │ │ │ │ ├── input-color.tsx │ │ │ │ │ │ │ │ │ ├── input-dropdown.tsx │ │ │ │ │ │ │ │ │ ├── input-icon.tsx │ │ │ │ │ │ │ │ │ ├── input-image.tsx │ │ │ │ │ │ │ │ │ ├── input-radio.tsx │ │ │ │ │ │ │ │ │ ├── input-range.tsx │ │ │ │ │ │ │ │ │ └── spacing-inputs.tsx │ │ │ │ │ │ │ │ ├── overflow-menu.tsx │ │ │ │ │ │ │ │ ├── separator.tsx │ │ │ │ │ │ │ │ ├── text-inputs/ │ │ │ │ │ │ │ │ │ ├── advanced-typography.tsx │ │ │ │ │ │ │ │ │ ├── font/ │ │ │ │ │ │ │ │ │ │ ├── font-family-selector.tsx │ │ │ │ │ │ │ │ │ │ ├── font-family.tsx │ │ │ │ │ │ │ │ │ │ ├── font-size.tsx │ │ │ │ │ │ │ │ │ │ └── font-weight.tsx │ │ │ │ │ │ │ │ │ ├── text-align.tsx │ │ │ │ │ │ │ │ │ └── text-color.tsx │ │ │ │ │ │ │ │ ├── text-selected.tsx │ │ │ │ │ │ │ │ ├── toolbar-button.tsx │ │ │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ │ │ └── gradient.ts │ │ │ │ │ │ │ ├── left-panel/ │ │ │ │ │ │ │ │ ├── code-panel/ │ │ │ │ │ │ │ │ │ ├── code-tab/ │ │ │ │ │ │ │ │ │ │ ├── file-content/ │ │ │ │ │ │ │ │ │ │ │ ├── code-editor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── code-mirror-config.ts │ │ │ │ │ │ │ │ │ │ │ ├── floating-add-to-chat-button.tsx │ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ │ └── unsaved-changes-dialog.tsx │ │ │ │ │ │ │ │ │ │ ├── file-tabs/ │ │ │ │ │ │ │ │ │ │ │ ├── file-tab.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ │ ├── header-controls.tsx │ │ │ │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ │ │ │ └── use-code-navigation.ts │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ ├── modals/ │ │ │ │ │ │ │ │ │ │ │ ├── file-modal.tsx │ │ │ │ │ │ │ │ │ │ │ ├── folder-modal.tsx │ │ │ │ │ │ │ │ │ │ │ └── upload-modal.tsx │ │ │ │ │ │ │ │ │ │ ├── shared/ │ │ │ │ │ │ │ │ │ │ │ ├── file-operations.ts │ │ │ │ │ │ │ │ │ │ │ ├── file-templates.ts │ │ │ │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ │ │ │ └── sidebar/ │ │ │ │ │ │ │ │ │ │ ├── file-icon.tsx │ │ │ │ │ │ │ │ │ │ ├── file-tree-node.tsx │ │ │ │ │ │ │ │ │ │ ├── file-tree-row.tsx │ │ │ │ │ │ │ │ │ │ ├── file-tree-search.tsx │ │ │ │ │ │ │ │ │ │ └── file-tree.tsx │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ ├── design-panel/ │ │ │ │ │ │ │ │ │ ├── branches-tab/ │ │ │ │ │ │ │ │ │ │ ├── branch-management.tsx │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ ├── brand-tab/ │ │ │ │ │ │ │ │ │ │ ├── color-panel/ │ │ │ │ │ │ │ │ │ │ │ ├── color-name-input.tsx │ │ │ │ │ │ │ │ │ │ │ ├── color-pallet-group.tsx │ │ │ │ │ │ │ │ │ │ │ ├── color-popover.tsx │ │ │ │ │ │ │ │ │ │ │ ├── color-row.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ │ ├── font-panel/ │ │ │ │ │ │ │ │ │ │ │ ├── font-family.tsx │ │ │ │ │ │ │ │ │ │ │ ├── font-files.tsx │ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ │ ├── system-font.tsx │ │ │ │ │ │ │ │ │ │ │ └── upload-modal.tsx │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ ├── help-button/ │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ ├── image-tab/ │ │ │ │ │ │ │ │ │ │ ├── breadcrumb-navigation.tsx │ │ │ │ │ │ │ │ │ │ ├── folder-list.tsx │ │ │ │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ │ │ │ ├── use-image-drag-drop.tsx │ │ │ │ │ │ │ │ │ │ │ ├── use-image-operations.tsx │ │ │ │ │ │ │ │ │ │ │ └── use-navigation.tsx │ │ │ │ │ │ │ │ │ │ ├── image-grid.tsx │ │ │ │ │ │ │ │ │ │ ├── image-item.tsx │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ ├── search-upload-bar.tsx │ │ │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ │ │ │ │ ├── image-references.test.ts │ │ │ │ │ │ │ │ │ │ └── image-references.ts │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ ├── layers-tab/ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ └── tree/ │ │ │ │ │ │ │ │ │ │ ├── page-tree-node.tsx │ │ │ │ │ │ │ │ │ │ ├── page-tree-row.tsx │ │ │ │ │ │ │ │ │ │ ├── tree-node.tsx │ │ │ │ │ │ │ │ │ │ └── tree-row.tsx │ │ │ │ │ │ │ │ │ ├── page-tab/ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ └── page-modal.tsx │ │ │ │ │ │ │ │ │ ├── windows-tab/ │ │ │ │ │ │ │ │ │ │ ├── device-settings.tsx │ │ │ │ │ │ │ │ │ │ ├── frame-dimensions.tsx │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ └── zoom-controls/ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── main.tsx │ │ │ │ │ │ │ ├── members/ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── invitation-row.tsx │ │ │ │ │ │ │ │ ├── invite-member-input.tsx │ │ │ │ │ │ │ │ ├── member-row.tsx │ │ │ │ │ │ │ │ ├── members-content.tsx │ │ │ │ │ │ │ │ └── suggested-teammates.tsx │ │ │ │ │ │ │ ├── right-click-menu/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── right-panel/ │ │ │ │ │ │ │ │ ├── chat-tab/ │ │ │ │ │ │ │ │ │ ├── chat-input/ │ │ │ │ │ │ │ │ │ │ ├── action-buttons.tsx │ │ │ │ │ │ │ │ │ │ ├── chat-context.tsx │ │ │ │ │ │ │ │ │ │ ├── chat-mode-toggle.tsx │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ └── queue-items/ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ └── queue-item.tsx │ │ │ │ │ │ │ │ │ ├── chat-messages/ │ │ │ │ │ │ │ │ │ │ ├── assistant-message.tsx │ │ │ │ │ │ │ │ │ │ ├── error-message.tsx │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ ├── message-content/ │ │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ │ ├── tool-call-display.tsx │ │ │ │ │ │ │ │ │ │ │ └── tool-call-simple.tsx │ │ │ │ │ │ │ │ │ │ ├── multi-branch-revert-modal.tsx │ │ │ │ │ │ │ │ │ │ ├── stream-message.tsx │ │ │ │ │ │ │ │ │ │ └── user-message.tsx │ │ │ │ │ │ │ │ │ ├── chat-tab-content/ │ │ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ │ │ ├── code-display/ │ │ │ │ │ │ │ │ │ │ ├── bash-code-display.tsx │ │ │ │ │ │ │ │ │ │ ├── code-block.tsx │ │ │ │ │ │ │ │ │ │ ├── code-diff.tsx │ │ │ │ │ │ │ │ │ │ ├── collapsible-code-block.tsx │ │ │ │ │ │ │ │ │ │ └── search-sources-display.tsx │ │ │ │ │ │ │ │ │ ├── context-pills/ │ │ │ │ │ │ │ │ │ │ ├── draft-context-pill.tsx │ │ │ │ │ │ │ │ │ │ ├── helpers.tsx │ │ │ │ │ │ │ │ │ │ ├── image-pill.tsx │ │ │ │ │ │ │ │ │ │ ├── input-context-pills.tsx │ │ │ │ │ │ │ │ │ │ └── sent-context-pill.tsx │ │ │ │ │ │ │ │ │ ├── controls.tsx │ │ │ │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ │ │ │ ├── history.tsx │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ ├── panel-dropdown.tsx │ │ │ │ │ │ │ │ │ └── suggestions.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── top-bar/ │ │ │ │ │ │ │ ├── branch.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── mode-toggle.tsx │ │ │ │ │ │ │ ├── new-project-menu.tsx │ │ │ │ │ │ │ ├── project-breadcrumb.tsx │ │ │ │ │ │ │ ├── publish/ │ │ │ │ │ │ │ │ ├── dropdown/ │ │ │ │ │ │ │ │ │ ├── advanced-settings.tsx │ │ │ │ │ │ │ │ │ ├── custom-domain/ │ │ │ │ │ │ │ │ │ │ ├── action.tsx │ │ │ │ │ │ │ │ │ │ ├── domain.tsx │ │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ │ ├── no-domain.tsx │ │ │ │ │ │ │ │ │ │ └── provider.tsx │ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ │ ├── loading.tsx │ │ │ │ │ │ │ │ │ ├── preview-domain-section.tsx │ │ │ │ │ │ │ │ │ └── url.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── trigger-button.tsx │ │ │ │ │ │ │ └── recent-projects.tsx │ │ │ │ │ │ ├── _hooks/ │ │ │ │ │ │ │ ├── use-chat/ │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ ├── use-panel-measure.tsx │ │ │ │ │ │ │ ├── use-start-project.tsx │ │ │ │ │ │ │ └── use-tab-active.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── providers.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── projects/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── carousel/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── edit-app.tsx │ │ │ │ │ │ ├── select/ │ │ │ │ │ │ │ ├── highlight-text.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── masonry-layout.tsx │ │ │ │ │ │ │ ├── project-card-presentation.tsx │ │ │ │ │ │ │ ├── project-card.tsx │ │ │ │ │ │ │ ├── square-project-card-presentation.tsx │ │ │ │ │ │ │ └── square-project-card.tsx │ │ │ │ │ │ ├── select-presentation.tsx │ │ │ │ │ │ ├── settings/ │ │ │ │ │ │ │ ├── clone-project.tsx │ │ │ │ │ │ │ ├── create-template.tsx │ │ │ │ │ │ │ ├── delete-project.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── rename-project.tsx │ │ │ │ │ │ ├── templates/ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── lazy-image.tsx │ │ │ │ │ │ │ ├── template-card.tsx │ │ │ │ │ │ │ ├── template-modal-presentation.tsx │ │ │ │ │ │ │ └── template-modal.tsx │ │ │ │ │ │ ├── top-bar-presentation.tsx │ │ │ │ │ │ └── top-bar.tsx │ │ │ │ │ ├── import/ │ │ │ │ │ │ ├── cancel-button.tsx │ │ │ │ │ │ ├── github/ │ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ │ ├── connect.tsx │ │ │ │ │ │ │ │ ├── finalizing.tsx │ │ │ │ │ │ │ │ └── setup.tsx │ │ │ │ │ │ │ ├── _context/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── _hooks/ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── use-data.ts │ │ │ │ │ │ │ │ ├── use-installation.ts │ │ │ │ │ │ │ │ ├── use-repo-import.ts │ │ │ │ │ │ │ │ └── use-repo-validation.ts │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ │ ├── finalizing-project.tsx │ │ │ │ │ │ │ │ ├── import-local-project.tsx │ │ │ │ │ │ │ │ ├── select-folder.tsx │ │ │ │ │ │ │ │ └── verify-project.tsx │ │ │ │ │ │ │ ├── _context/ │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── steps.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── see-a-demo/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── seo.ts │ │ │ │ ├── site-map/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── sitemap.ts │ │ │ │ ├── terms-of-service/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── webhook/ │ │ │ │ │ └── stripe/ │ │ │ │ │ ├── route.ts │ │ │ │ │ └── subscription/ │ │ │ │ │ ├── create.ts │ │ │ │ │ ├── delete.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update.ts │ │ │ │ └── workflows/ │ │ │ │ ├── claude-code/ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── vibe-coding/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── components/ │ │ │ │ ├── hotkey.ts │ │ │ │ ├── ide.ts │ │ │ │ ├── rb2b-loader.tsx │ │ │ │ ├── store/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── manager.ts │ │ │ │ │ ├── editor/ │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── ast/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── layers.ts │ │ │ │ │ │ ├── branch/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── manager.ts │ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ │ ├── file-cache.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── unified-cache.ts │ │ │ │ │ │ ├── canvas/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ │ ├── conversation.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── code/ │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── insert.ts │ │ │ │ │ │ │ ├── requests.ts │ │ │ │ │ │ │ └── tailwind.ts │ │ │ │ │ │ ├── copy/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── element/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── engine.ts │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── font/ │ │ │ │ │ │ │ ├── font-config.ts │ │ │ │ │ │ │ ├── font-search-manager.ts │ │ │ │ │ │ │ ├── font-upload-manager.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── layout-manager.ts │ │ │ │ │ │ │ └── tailwind-config.ts │ │ │ │ │ │ ├── frame-events/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── frames/ │ │ │ │ │ │ │ ├── dimension.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── manager.ts │ │ │ │ │ │ │ └── navigation.ts │ │ │ │ │ │ ├── git/ │ │ │ │ │ │ │ ├── git.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── group/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── history/ │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── ide/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── image/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── insert/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── move/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── overlay/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── prosemirror/ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── state.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── pages/ │ │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── sandbox/ │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── preload-script.ts │ │ │ │ │ │ │ ├── session.ts │ │ │ │ │ │ │ └── terminal.ts │ │ │ │ │ │ ├── screenshot/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── snap/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── state/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── style/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── text/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── theme/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── util.ts │ │ │ │ │ ├── hosting/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── provider.tsx │ │ │ │ │ │ └── type.tsx │ │ │ │ │ └── state/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── manager.ts │ │ │ │ ├── telemetry-provider.tsx │ │ │ │ ├── tools/ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tools.ts │ │ │ │ └── ui/ │ │ │ │ ├── auth-redirect.tsx │ │ │ │ ├── avatar-dropdown/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── plans.tsx │ │ │ │ ├── pricing-modal/ │ │ │ │ │ ├── enterprise-card.tsx │ │ │ │ │ ├── free-card.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── legacy-promotion.tsx │ │ │ │ │ ├── pro-card.tsx │ │ │ │ │ └── use-subscription.tsx │ │ │ │ ├── pricing-table/ │ │ │ │ │ └── index.tsx │ │ │ │ └── settings-modal/ │ │ │ │ ├── domain/ │ │ │ │ │ ├── custom/ │ │ │ │ │ │ ├── headers.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── no-domain-input.tsx │ │ │ │ │ │ ├── record-field.tsx │ │ │ │ │ │ ├── use-domain-verification.tsx │ │ │ │ │ │ ├── verification.tsx │ │ │ │ │ │ └── verified.tsx │ │ │ │ │ ├── danger-zone.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── preview.tsx │ │ │ │ │ └── upgrade-prompt.tsx │ │ │ │ ├── helpers.tsx │ │ │ │ ├── non-project.tsx │ │ │ │ ├── preferences-tab.tsx │ │ │ │ ├── project/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── site/ │ │ │ │ │ ├── favicon.tsx │ │ │ │ │ ├── image.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── metadata-form.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── use-metadata-form.ts │ │ │ │ ├── subscription-cancel-modal.tsx │ │ │ │ ├── subscription-tab.tsx │ │ │ │ ├── user-delete-section.tsx │ │ │ │ ├── versions/ │ │ │ │ │ ├── empty-state/ │ │ │ │ │ │ └── version.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── version-row.tsx │ │ │ │ │ └── versions.tsx │ │ │ │ └── with-project.tsx │ │ │ ├── env.ts │ │ │ ├── global.ts │ │ │ ├── hooks/ │ │ │ │ ├── use-create-blank-project.ts │ │ │ │ ├── use-debounce-input.tsx │ │ │ │ ├── use-feature-flags.tsx │ │ │ │ ├── use-font-loader.tsx │ │ │ │ ├── use-get-background.tsx │ │ │ │ └── use-parallax-cursor.ts │ │ │ ├── i18n/ │ │ │ │ ├── keys.ts │ │ │ │ └── request.ts │ │ │ ├── instrumentation.ts │ │ │ ├── proxy.ts │ │ │ ├── server/ │ │ │ │ └── api/ │ │ │ │ ├── root.ts │ │ │ │ ├── routers/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── conversation.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── message.ts │ │ │ │ │ │ └── suggestion.ts │ │ │ │ │ ├── code.ts │ │ │ │ │ ├── domain/ │ │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ │ └── freestyle.ts │ │ │ │ │ │ ├── custom.ts │ │ │ │ │ │ ├── freestyle.ts │ │ │ │ │ │ ├── hosting-factory.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── preview.ts │ │ │ │ │ │ └── verify/ │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ ├── freestyle.ts │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── records.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── forward/ │ │ │ │ │ │ ├── editor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── github.ts │ │ │ │ │ ├── image.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── project/ │ │ │ │ │ │ ├── branch.ts │ │ │ │ │ │ ├── createRequest.ts │ │ │ │ │ │ ├── fork.ts │ │ │ │ │ │ ├── frame.ts │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── invitation.ts │ │ │ │ │ │ ├── member.ts │ │ │ │ │ │ ├── project.ts │ │ │ │ │ │ ├── sandbox.ts │ │ │ │ │ │ └── settings.ts │ │ │ │ │ ├── publish/ │ │ │ │ │ │ ├── deployment.ts │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ ├── deploy.ts │ │ │ │ │ │ │ ├── env.ts │ │ │ │ │ │ │ ├── fork.ts │ │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── publish.ts │ │ │ │ │ │ │ └── unpublish.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── manager.ts │ │ │ │ │ ├── subscription/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── subscription.ts │ │ │ │ │ ├── usage/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── user/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user-canvas.ts │ │ │ │ │ ├── user-settings.ts │ │ │ │ │ └── user.ts │ │ │ │ └── trpc.ts │ │ │ ├── services/ │ │ │ │ └── sync-engine/ │ │ │ │ ├── index.ts │ │ │ │ └── sync-engine.ts │ │ │ ├── stories/ │ │ │ │ ├── Button.stories.tsx │ │ │ │ ├── ProjectCard.stories.tsx │ │ │ │ ├── ProjectsPage.stories.tsx │ │ │ │ ├── SelectProject.stories.tsx │ │ │ │ ├── TopBar.stories.tsx │ │ │ │ └── assets/ │ │ │ │ └── avif-test-image.avif │ │ │ ├── styles/ │ │ │ │ └── globals.css │ │ │ ├── trpc/ │ │ │ │ ├── client.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── query-client.ts │ │ │ │ ├── react.tsx │ │ │ │ ├── request-server.ts │ │ │ │ └── server.ts │ │ │ └── utils/ │ │ │ ├── analytics/ │ │ │ │ └── server.ts │ │ │ ├── constants/ │ │ │ │ ├── index.ts │ │ │ │ └── navigation.ts │ │ │ ├── git/ │ │ │ │ ├── index.test.ts │ │ │ │ └── index.ts │ │ │ ├── n8n/ │ │ │ │ └── webhook.ts │ │ │ ├── subscription.ts │ │ │ ├── supabase/ │ │ │ │ ├── admin.ts │ │ │ │ ├── client/ │ │ │ │ │ └── index.ts │ │ │ │ ├── middleware.ts │ │ │ │ ├── request-server.ts │ │ │ │ └── server.ts │ │ │ ├── telemetry/ │ │ │ │ └── index.ts │ │ │ ├── upload/ │ │ │ │ └── image-compression.ts │ │ │ └── url/ │ │ │ └── index.ts │ │ ├── test/ │ │ │ ├── cache/ │ │ │ │ ├── file-cache.test.ts │ │ │ │ └── unified-cache.test.ts │ │ │ ├── frame/ │ │ │ │ └── navigation.test.ts │ │ │ ├── messages.test.ts │ │ │ ├── pages/ │ │ │ │ └── helper.test.ts │ │ │ ├── sandbox/ │ │ │ │ ├── env.test.ts │ │ │ │ ├── helpers.test.ts │ │ │ │ ├── port.test.ts │ │ │ │ └── subdirectory.test.ts │ │ │ └── setup.ts │ │ ├── tsconfig.json │ │ ├── vercel.json │ │ ├── vitest.config.ts │ │ └── vitest.shims.d.ts │ ├── package.json │ ├── preload/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── script/ │ │ │ ├── api/ │ │ │ │ ├── dom.ts │ │ │ │ ├── elements/ │ │ │ │ │ ├── dom/ │ │ │ │ │ │ ├── group.ts │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ ├── image.ts │ │ │ │ │ │ ├── insert.ts │ │ │ │ │ │ └── remove.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── move/ │ │ │ │ │ │ ├── drag.ts │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── stub.ts │ │ │ │ │ ├── style.ts │ │ │ │ │ └── text.ts │ │ │ │ ├── events/ │ │ │ │ │ ├── dom.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── publish.ts │ │ │ │ ├── index.ts │ │ │ │ ├── ready.ts │ │ │ │ ├── screenshot.ts │ │ │ │ ├── state.ts │ │ │ │ ├── style/ │ │ │ │ │ ├── css-manager.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── update.ts │ │ │ │ └── theme/ │ │ │ │ └── index.ts │ │ │ ├── helpers/ │ │ │ │ ├── assert.ts │ │ │ │ ├── clone.ts │ │ │ │ ├── dom.ts │ │ │ │ ├── ids.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── server/ │ │ │ └── index.ts │ │ └── tsconfig.json │ └── server/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── eslint.config.js │ ├── package.json │ ├── src/ │ │ ├── index.ts │ │ ├── router/ │ │ │ ├── context.ts │ │ │ ├── index.ts │ │ │ ├── routes/ │ │ │ │ └── sandbox.ts │ │ │ └── trpc.ts │ │ ├── sandbox/ │ │ │ └── index.ts │ │ └── server.ts │ └── tsconfig.json ├── bunfig.toml ├── docker-compose.yml ├── docs/ │ ├── .gitignore │ ├── README.md │ ├── content/ │ │ └── docs/ │ │ ├── developers/ │ │ │ ├── appendix.mdx │ │ │ ├── architecture.mdx │ │ │ ├── index.mdx │ │ │ ├── meta.json │ │ │ ├── running-locally.mdx │ │ │ └── troubleshooting.mdx │ │ ├── enterprise.mdx │ │ ├── faq.mdx │ │ ├── getting-started/ │ │ │ ├── core-features.mdx │ │ │ ├── first-project.mdx │ │ │ ├── meta.json │ │ │ └── ui-overview.mdx │ │ ├── index.mdx │ │ ├── meta.json │ │ ├── migrations/ │ │ │ └── electron-to-web-migration.mdx │ │ ├── self-hosting/ │ │ │ ├── admin-dashboard.mdx │ │ │ ├── cloud-deployment.mdx │ │ │ ├── docker-compose.mdx │ │ │ ├── external-services.mdx │ │ │ ├── index.mdx │ │ │ ├── meta.json │ │ │ ├── oauth-setup.mdx │ │ │ └── single-machine.mdx │ │ └── tutorials/ │ │ ├── figma-to-onlook.mdx │ │ └── importing-templates.mdx │ ├── eslint.config.js │ ├── next-sitemap.config.js │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public/ │ │ ├── sitemap-0.xml │ │ └── sitemap.xml │ ├── source.config.ts │ ├── src/ │ │ ├── app/ │ │ │ ├── [[...slug]]/ │ │ │ │ ├── edit-button.tsx │ │ │ │ ├── edit-gh.tsx │ │ │ │ └── page.tsx │ │ │ ├── api/ │ │ │ │ └── search/ │ │ │ │ └── route.ts │ │ │ ├── global.css │ │ │ ├── layout.config.tsx │ │ │ ├── layout.tsx │ │ │ ├── not-found.tsx │ │ │ └── robots.txt/ │ │ │ └── route.ts │ │ ├── components/ │ │ │ ├── card.tsx │ │ │ ├── cards.tsx │ │ │ └── rb2b-loader.tsx │ │ ├── lib/ │ │ │ └── source.ts │ │ └── mdx-components.tsx │ └── tsconfig.json ├── eslint.config.js ├── package.json ├── packages/ │ ├── ai/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── agents/ │ │ │ │ ├── index.ts │ │ │ │ ├── root.ts │ │ │ │ └── tool-lookup.ts │ │ │ ├── apply/ │ │ │ │ ├── client.ts │ │ │ │ └── index.ts │ │ │ ├── chat/ │ │ │ │ ├── index.ts │ │ │ │ └── providers.ts │ │ │ ├── contexts/ │ │ │ │ ├── classes/ │ │ │ │ │ ├── agent-rule.ts │ │ │ │ │ ├── branch.ts │ │ │ │ │ ├── error.ts │ │ │ │ │ ├── file.ts │ │ │ │ │ ├── highlight.ts │ │ │ │ │ ├── image.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ └── models/ │ │ │ │ ├── base.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── prompt/ │ │ │ │ ├── constants/ │ │ │ │ │ ├── ask.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── create.ts │ │ │ │ │ ├── format.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── onlook.ts │ │ │ │ │ ├── shell.ts │ │ │ │ │ ├── signatures.ts │ │ │ │ │ ├── suggest.ts │ │ │ │ │ ├── summary.ts │ │ │ │ │ └── system.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ └── provider.ts │ │ │ ├── stream/ │ │ │ │ ├── converter.ts │ │ │ │ └── index.ts │ │ │ ├── tokens/ │ │ │ │ └── index.ts │ │ │ └── tools/ │ │ │ ├── classes/ │ │ │ │ ├── bash-edit.ts │ │ │ │ ├── bash-read.ts │ │ │ │ ├── check-errors.ts │ │ │ │ ├── fuzzy-edit-file.ts │ │ │ │ ├── glob.ts │ │ │ │ ├── grep.ts │ │ │ │ ├── index.ts │ │ │ │ ├── list-branches.ts │ │ │ │ ├── list-files.ts │ │ │ │ ├── onlook-instructions.ts │ │ │ │ ├── read-file.ts │ │ │ │ ├── read-style-guide.ts │ │ │ │ ├── sandbox.ts │ │ │ │ ├── scrape-url.ts │ │ │ │ ├── search-replace-edit.ts │ │ │ │ ├── search-replace-multi-edit.ts │ │ │ │ ├── terminal-command.ts │ │ │ │ ├── typecheck.ts │ │ │ │ ├── upload-image.ts │ │ │ │ ├── web-search.ts │ │ │ │ └── write-file.ts │ │ │ ├── index.ts │ │ │ ├── models/ │ │ │ │ ├── base.ts │ │ │ │ ├── client.ts │ │ │ │ └── index.ts │ │ │ ├── shared/ │ │ │ │ ├── helpers/ │ │ │ │ │ ├── cli.ts │ │ │ │ │ └── files.ts │ │ │ │ └── type.ts │ │ │ └── toolset.ts │ │ ├── test/ │ │ │ ├── apply.test.ts │ │ │ ├── contexts/ │ │ │ │ ├── agent-rule-context.test.ts │ │ │ │ ├── branch-context.test.ts │ │ │ │ ├── error-context.test.ts │ │ │ │ ├── file-context.test.ts │ │ │ │ ├── highlight-context.test.ts │ │ │ │ ├── image-context.test.ts │ │ │ │ └── index.test.ts │ │ │ ├── prompt/ │ │ │ │ ├── data/ │ │ │ │ │ ├── create-page-system.txt │ │ │ │ │ ├── examples.txt │ │ │ │ │ ├── file.txt │ │ │ │ │ ├── highlights.txt │ │ │ │ │ ├── summary.txt │ │ │ │ │ ├── system.txt │ │ │ │ │ ├── user-empty.txt │ │ │ │ │ └── user.txt │ │ │ │ └── prompt.test.ts │ │ │ ├── stream/ │ │ │ │ └── convert.test.ts │ │ │ ├── tokens.test.ts │ │ │ └── tools/ │ │ │ ├── edit.test.ts │ │ │ ├── helpers.test.ts │ │ │ └── read.test.ts │ │ └── tsconfig.json │ ├── code-provider/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── providers/ │ │ │ │ ├── codesandbox/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── list-files.ts │ │ │ │ │ ├── read-file.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── write-file.ts │ │ │ │ └── nodefs/ │ │ │ │ └── index.ts │ │ │ ├── providers.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── constants/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── colors.ts │ │ │ ├── contact.ts │ │ │ ├── csb.ts │ │ │ ├── dom.ts │ │ │ ├── editor.ts │ │ │ ├── files.ts │ │ │ ├── frame.ts │ │ │ ├── freestyle.ts │ │ │ ├── index.ts │ │ │ ├── language.ts │ │ │ ├── links.ts │ │ │ ├── storage.ts │ │ │ ├── style.ts │ │ │ └── tags.ts │ │ └── tsconfig.json │ ├── db/ │ │ ├── drizzle.config.ts │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── defaults/ │ │ │ │ ├── branch.ts │ │ │ │ ├── canvas.ts │ │ │ │ ├── conversation.ts │ │ │ │ ├── frame.ts │ │ │ │ ├── index.ts │ │ │ │ ├── project-settings.ts │ │ │ │ ├── project.ts │ │ │ │ ├── user-canvas.ts │ │ │ │ └── user-settings.ts │ │ │ ├── index.ts │ │ │ ├── mappers/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── conversation.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── message.ts │ │ │ │ ├── domain.ts │ │ │ │ ├── index.ts │ │ │ │ ├── project/ │ │ │ │ │ ├── branch.ts │ │ │ │ │ ├── canvas.ts │ │ │ │ │ ├── frame.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── project.ts │ │ │ │ │ └── settings.ts │ │ │ │ ├── subscription.ts │ │ │ │ └── user/ │ │ │ │ ├── index.ts │ │ │ │ ├── settings.ts │ │ │ │ └── user.ts │ │ │ ├── migration-scripts/ │ │ │ │ ├── README.md │ │ │ │ └── migrate-to-branching.ts │ │ │ ├── schema/ │ │ │ │ ├── canvas/ │ │ │ │ │ ├── canvas.ts │ │ │ │ │ ├── frame.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── chat/ │ │ │ │ │ ├── conversation.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── message.ts │ │ │ │ ├── domain/ │ │ │ │ │ ├── custom/ │ │ │ │ │ │ ├── domain.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── project-custom-domain.ts │ │ │ │ │ │ └── verification.ts │ │ │ │ │ ├── deployment.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── preview.ts │ │ │ │ ├── feedback/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── project/ │ │ │ │ │ ├── branch.ts │ │ │ │ │ ├── create.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── invitation.ts │ │ │ │ │ ├── project.ts │ │ │ │ │ └── settings.ts │ │ │ │ ├── subscription/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── legacy.ts │ │ │ │ │ ├── price.ts │ │ │ │ │ ├── product.ts │ │ │ │ │ ├── rate-limits.ts │ │ │ │ │ ├── subscription.ts │ │ │ │ │ └── usage.ts │ │ │ │ ├── supabase/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── user.ts │ │ │ │ └── user/ │ │ │ │ ├── index.ts │ │ │ │ ├── settings.ts │ │ │ │ ├── user-canvas.ts │ │ │ │ ├── user-project.ts │ │ │ │ └── user.ts │ │ │ └── seed/ │ │ │ ├── constants.ts │ │ │ ├── db.ts │ │ │ ├── reset.ts │ │ │ ├── seed.ts │ │ │ ├── stripe/ │ │ │ │ ├── .gitignore │ │ │ │ ├── backfill-subscriptions.ts │ │ │ │ ├── legacy-subscription.ts │ │ │ │ └── stripe.ts │ │ │ └── supabase.ts │ │ └── tsconfig.json │ ├── email/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── index.ts │ │ │ ├── invitation.ts │ │ │ ├── templates/ │ │ │ │ ├── index.ts │ │ │ │ └── invite-user.tsx │ │ │ └── types/ │ │ │ └── send-email.ts │ │ └── tsconfig.json │ ├── file-system/ │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── code-fs.ts │ │ │ ├── config.ts │ │ │ ├── fs.ts │ │ │ ├── hooks/ │ │ │ │ ├── index.ts │ │ │ │ ├── use-dir.ts │ │ │ │ ├── use-file.ts │ │ │ │ └── use-fs.tsx │ │ │ ├── index-cache.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── fonts/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── default.ts │ │ │ ├── family.ts │ │ │ ├── helpers/ │ │ │ │ ├── ast-generators.ts │ │ │ │ ├── ast-manipulators.ts │ │ │ │ ├── class-utils.ts │ │ │ │ ├── font-extractors.ts │ │ │ │ ├── import-export-manager.ts │ │ │ │ ├── index.ts │ │ │ │ └── validators.ts │ │ │ ├── index.ts │ │ │ ├── utils.ts │ │ │ └── variants.ts │ │ ├── test/ │ │ │ ├── ast-generators.test.ts │ │ │ ├── ast-manipulators.test.ts │ │ │ ├── class-utils.test.ts │ │ │ ├── data/ │ │ │ │ ├── ast-manipulators/ │ │ │ │ │ ├── add-font-to-tailwind-theme/ │ │ │ │ │ │ ├── existing-fontfamily/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── font-already-exists/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── new-fontfamily/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── add-google-font-specifier/ │ │ │ │ │ │ ├── existing-import/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── no-import/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── merge-local-font-sources/ │ │ │ │ │ │ ├── array-to-array/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── empty-array/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── no-src-property/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── single-to-array/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── remove-font-declaration/ │ │ │ │ │ │ ├── google-font/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── last-google-font/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── local-font/ │ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── multiple-fonts/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── remove-font-from-tailwind-theme/ │ │ │ │ │ ├── multiple-fonts/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── non-existent-font/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── single-font/ │ │ │ │ │ ├── config.json │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── create-font-src-objects/ │ │ │ │ │ ├── basic-sources/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ ├── multiple-formats/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ └── optional-properties/ │ │ │ │ │ ├── config.json │ │ │ │ │ └── expected.ts │ │ │ │ ├── create-local-font-config/ │ │ │ │ │ ├── basic-local-font/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ └── complex-font-name/ │ │ │ │ │ ├── config.json │ │ │ │ │ └── expected.ts │ │ │ │ ├── create-template-literal-with-font/ │ │ │ │ │ ├── conditional-expression/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── empty-string/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── function-call-expression/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── identifier-expression/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── member-expression/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── string-literal/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── font-extractors/ │ │ │ │ │ ├── migrate-fonts-from-layout/ │ │ │ │ │ │ ├── complex-layout/ │ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── layout-with-classnames/ │ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── simple-layout/ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── parse-font-declarations/ │ │ │ │ │ ├── google-fonts/ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── local-fonts/ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── mixed-fonts/ │ │ │ │ │ │ ├── expected.json │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── no-fonts/ │ │ │ │ │ ├── expected.json │ │ │ │ │ └── input.tsx │ │ │ │ ├── generate-font-variable-export/ │ │ │ │ │ ├── basic-google-font/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ ├── local-font-type/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ ├── missing-optional-props/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ ├── multiple-weights-styles/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ └── expected.ts │ │ │ │ │ └── special-characters/ │ │ │ │ │ ├── config.json │ │ │ │ │ └── expected.ts │ │ │ │ ├── remove-fonts-classname/ │ │ │ │ │ ├── font-weight-preservation/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── member-expression-remove-all/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── member-expression-remove-font/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── string-literal-empty/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── string-literal-no-fonts/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── string-literal-remove-all/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── string-literal-specific-fonts/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── template-literal-complex-expressions/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── template-literal-multiple-fonts/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── template-literal-remove-all/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── template-literal-specific-font/ │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── template-literal-static-only/ │ │ │ │ │ ├── config.json │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── update-classname-with-font-var/ │ │ │ │ │ ├── jsx-expression-classname/ │ │ │ │ │ │ ├── already-has-font/ │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ ├── identifier-expression/ │ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ │ └── input.tsx │ │ │ │ │ │ └── template-literal-existing/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── string-literal-classname/ │ │ │ │ │ ├── empty-string/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── with-existing-classes/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── with-font-classes/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ └── update-template-literal-with-font-class/ │ │ │ │ ├── complex-template/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── empty-template/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── font-weight-preservation/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── multiple-expressions/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── multiple-font-classes/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── replace-existing-font/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── with-existing-classes/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ └── with-leading-space/ │ │ │ │ ├── expected.tsx │ │ │ │ └── input.tsx │ │ │ ├── font-extractors.test.ts │ │ │ ├── import-export-manager.test.ts │ │ │ ├── test-utils.ts │ │ │ └── validators.test.ts │ │ └── tsconfig.json │ ├── git/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── git.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── github/ │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── auth.ts │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ ├── installation.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── growth/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ ├── inject.ts │ │ │ ├── remove.ts │ │ │ └── script.ts │ │ ├── tests/ │ │ │ └── inject.test.ts │ │ └── tsconfig.json │ ├── image-server/ │ │ ├── README.md │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── compress.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── test/ │ │ │ └── image.test.ts │ │ └── tsconfig.json │ ├── models/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── actions/ │ │ │ │ ├── action.ts │ │ │ │ ├── code.ts │ │ │ │ ├── index.ts │ │ │ │ ├── location.ts │ │ │ │ └── target.ts │ │ │ ├── assets/ │ │ │ │ └── index.ts │ │ │ ├── auth/ │ │ │ │ └── index.ts │ │ │ ├── chat/ │ │ │ │ ├── conversation/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message/ │ │ │ │ │ ├── checkpoint.ts │ │ │ │ │ ├── code.ts │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ └── queue.ts │ │ │ │ ├── request.ts │ │ │ │ ├── response.ts │ │ │ │ ├── suggestion.ts │ │ │ │ ├── summary.ts │ │ │ │ └── type.ts │ │ │ ├── code/ │ │ │ │ └── index.ts │ │ │ ├── create/ │ │ │ │ └── index.ts │ │ │ ├── domain/ │ │ │ │ └── index.ts │ │ │ ├── editor/ │ │ │ │ └── index.ts │ │ │ ├── element/ │ │ │ │ ├── classes.ts │ │ │ │ ├── element.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layers.ts │ │ │ │ ├── props.ts │ │ │ │ └── templateNode.ts │ │ │ ├── font/ │ │ │ │ └── index.ts │ │ │ ├── hosting/ │ │ │ │ └── index.ts │ │ │ ├── ide/ │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── llm/ │ │ │ │ └── index.ts │ │ │ ├── next/ │ │ │ │ └── index.ts │ │ │ ├── pages/ │ │ │ │ ├── index.ts │ │ │ │ └── opengraph.ts │ │ │ ├── project/ │ │ │ │ ├── branch.ts │ │ │ │ ├── canvas.ts │ │ │ │ ├── command.ts │ │ │ │ ├── create.ts │ │ │ │ ├── frame.ts │ │ │ │ ├── index.ts │ │ │ │ ├── project.ts │ │ │ │ ├── rect.ts │ │ │ │ ├── role.ts │ │ │ │ └── settings.ts │ │ │ ├── run/ │ │ │ │ └── index.ts │ │ │ ├── sandbox/ │ │ │ │ ├── files.ts │ │ │ │ ├── folder.ts │ │ │ │ ├── index.ts │ │ │ │ └── template.ts │ │ │ ├── style/ │ │ │ │ └── index.ts │ │ │ ├── supabase/ │ │ │ │ └── db.ts │ │ │ ├── tools/ │ │ │ │ └── index.ts │ │ │ ├── usage/ │ │ │ │ └── index.ts │ │ │ └── user/ │ │ │ ├── index.ts │ │ │ ├── settings.ts │ │ │ └── user.ts │ │ └── tsconfig.json │ ├── parser/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── code-edit/ │ │ │ │ ├── group.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── image.ts │ │ │ │ ├── index.ts │ │ │ │ ├── insert.ts │ │ │ │ ├── layout.ts │ │ │ │ ├── move.ts │ │ │ │ ├── next-config.ts │ │ │ │ ├── remove.ts │ │ │ │ ├── style.ts │ │ │ │ ├── text.ts │ │ │ │ └── transform.ts │ │ │ ├── helpers.ts │ │ │ ├── ids.ts │ │ │ ├── index.ts │ │ │ ├── packages.ts │ │ │ ├── parse.ts │ │ │ ├── prettier/ │ │ │ │ └── index.ts │ │ │ └── template-node/ │ │ │ ├── helpers.ts │ │ │ ├── index.ts │ │ │ └── map.ts │ │ ├── test/ │ │ │ ├── data/ │ │ │ │ ├── ids/ │ │ │ │ │ ├── adds-ids-to-jsx/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── does-not-add-ids-if-exist/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── layout/ │ │ │ │ │ ├── adds-script-if-missing/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── creates-body/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── does-not-duplicate/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── handles-self-closing-body/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── handles-self-closing-html-head/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── injects-at-bottom/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── injects-in-first-body/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── injects-with-existing-head-script/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── preserves-body-props/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── removes-deprecated-script/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── removes-deprecated-script-multiple/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── wraps-conditional-ternary/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ ├── wraps-fragment-only/ │ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ │ └── input.tsx │ │ │ │ │ └── wraps-plain-children/ │ │ │ │ │ ├── expected.tsx │ │ │ │ │ └── input.tsx │ │ │ │ ├── next-config/ │ │ │ │ │ ├── add-basic-js/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── add-basic-mjs/ │ │ │ │ │ │ ├── expected.mjs │ │ │ │ │ │ └── input.mjs │ │ │ │ │ ├── add-basic-ts/ │ │ │ │ │ │ ├── expected.ts │ │ │ │ │ │ └── input.ts │ │ │ │ │ ├── alternative-name-config/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── complex-nested-objects/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── direct-return-from-function/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── empty-config/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── exported-as-function/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── iife-wrapped-config/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── merge-typescript-props/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── no-duplicate-props/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── with-mdx/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── with-mdx-alt-name-order/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ ├── with-mdx-alt-order/ │ │ │ │ │ │ ├── expected.js │ │ │ │ │ │ └── input.js │ │ │ │ │ └── with-plugin/ │ │ │ │ │ ├── expected.js │ │ │ │ │ └── input.js │ │ │ │ └── parse/ │ │ │ │ └── simple/ │ │ │ │ ├── expected.js │ │ │ │ └── input.js │ │ │ ├── helpers.test.ts │ │ │ ├── ids.test.ts │ │ │ ├── layout.test.ts │ │ │ ├── next-config.test.ts │ │ │ ├── parse.test.ts │ │ │ ├── preload.test.ts │ │ │ └── template.test.ts │ │ └── tsconfig.json │ ├── penpal/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── child.ts │ │ │ ├── index.ts │ │ │ └── parent.ts │ │ └── tsconfig.json │ ├── rpc/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── trpc/ │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── scripts/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── api-keys.ts │ │ │ ├── backend.ts │ │ │ ├── helpers.ts │ │ │ └── index.ts │ │ ├── test/ │ │ │ ├── comprehensive.test.ts │ │ │ ├── integration.test.ts │ │ │ └── simple.test.ts │ │ └── tsconfig.json │ ├── stripe/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── client.ts │ │ │ ├── constants.ts │ │ │ ├── functions.ts │ │ │ ├── index.ts │ │ │ ├── scripts/ │ │ │ │ ├── dev/ │ │ │ │ │ ├── customer.ts │ │ │ │ │ ├── product.ts │ │ │ │ │ ├── reset.ts │ │ │ │ │ └── setup.ts │ │ │ │ └── production/ │ │ │ │ ├── coupon.ts │ │ │ │ └── product-price.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── types/ │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── adapters/ │ │ │ │ ├── index.ts │ │ │ │ └── props.ts │ │ │ ├── design-tokens/ │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── ui/ │ │ ├── README.md │ │ ├── components.json │ │ ├── eslint.config.js │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── src/ │ │ │ ├── components/ │ │ │ │ ├── accordion.tsx │ │ │ │ ├── ai-elements/ │ │ │ │ │ ├── code-block.tsx │ │ │ │ │ ├── context.tsx │ │ │ │ │ ├── conversation.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── reasoning.tsx │ │ │ │ │ ├── response.tsx │ │ │ │ │ ├── tool.tsx │ │ │ │ │ └── web-preview.tsx │ │ │ │ ├── alert-dialog.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ ├── avatar.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── breadcrumb.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── color-picker/ │ │ │ │ │ ├── ColorPicker.tsx │ │ │ │ │ ├── ColorSlider.tsx │ │ │ │ │ ├── EyeDropperButton.tsx │ │ │ │ │ ├── Gradient.tsx │ │ │ │ │ ├── SVPicker.tsx │ │ │ │ │ ├── checkPattern.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── context-menu.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── draftable-input.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── hotkey-label.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── header-level-icons/ │ │ │ │ │ │ ├── h1Icon.tsx │ │ │ │ │ │ ├── h2Icon.tsx │ │ │ │ │ │ ├── h3Icon.tsx │ │ │ │ │ │ ├── h4Icon.tsx │ │ │ │ │ │ ├── h5Icon.tsx │ │ │ │ │ │ └── h6Icon.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── input-group.tsx │ │ │ │ ├── input-otp.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── kbd.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── menubar.tsx │ │ │ │ ├── motion-card.tsx │ │ │ │ ├── navigation-menu.tsx │ │ │ │ ├── node-icon.tsx │ │ │ │ ├── pagination.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress-with-interval.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── resizable.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── shine-border.tsx │ │ │ │ ├── sidebar.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toggle-group.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ └── tooltip.tsx │ │ │ ├── globals.css │ │ │ ├── hooks/ │ │ │ │ ├── index.ts │ │ │ │ ├── use-enter-submit.ts │ │ │ │ ├── use-media-query.ts │ │ │ │ ├── use-mobile.ts │ │ │ │ ├── use-pointer-stroke.tsx │ │ │ │ ├── use-reduced-motion.ts │ │ │ │ └── use-resize-observer.ts │ │ │ ├── index.ts │ │ │ └── utils/ │ │ │ ├── cn.ts │ │ │ ├── index.ts │ │ │ └── truncate.ts │ │ ├── tailwind.config.ts │ │ ├── test/ │ │ │ └── Gradient.test.ts │ │ ├── tokens.ts │ │ └── tsconfig.json │ └── utility/ │ ├── eslint.config.js │ ├── package.json │ ├── src/ │ │ ├── assert.ts │ │ ├── autolayout.ts │ │ ├── clone.ts │ │ ├── color.ts │ │ ├── domain.test.ts │ │ ├── domain.ts │ │ ├── email.ts │ │ ├── errors.ts │ │ ├── file.ts │ │ ├── folder.ts │ │ ├── font.ts │ │ ├── frame.ts │ │ ├── id.ts │ │ ├── image.ts │ │ ├── index.ts │ │ ├── initials.ts │ │ ├── math.ts │ │ ├── name.ts │ │ ├── null.ts │ │ ├── path.ts │ │ ├── screenshot.ts │ │ ├── string.ts │ │ ├── tailwind.ts │ │ ├── time.ts │ │ ├── tw-merge.ts │ │ ├── unit.ts │ │ ├── urls.ts │ │ └── window-metadata.ts │ ├── test/ │ │ ├── colors.test.ts │ │ ├── domain.test.ts │ │ ├── errors.test.ts │ │ ├── file.test.ts │ │ ├── frame.ts │ │ ├── id.test.ts │ │ ├── image.test.ts │ │ ├── name.test.ts │ │ ├── path.test.ts │ │ ├── tailwind.test.ts │ │ ├── tw-merge.test.ts │ │ └── urls.test.ts │ └── tsconfig.json └── tooling/ ├── eslint/ │ ├── base.js │ ├── nextjs.js │ ├── package.json │ ├── react.js │ └── tsconfig.json ├── prettier/ │ ├── index.js │ ├── package.json │ └── tsconfig.json └── typescript/ ├── base.json ├── next-react.json ├── package.json ├── react-library.json └── vite-react.json