Skip to content

Mini Game v2#33

Draft
gianzamboni wants to merge 2 commits intomainfrom
mini-game-v2
Draft

Mini Game v2#33
gianzamboni wants to merge 2 commits intomainfrom
mini-game-v2

Conversation

@gianzamboni
Copy link
Owner

@gianzamboni gianzamboni commented Feb 27, 2026

Made-with: Cursor

Summary by CodeRabbit

  • Chores

    • Bumped Node requirement to 20.19.0 and updated numerous runtime and dev dependencies.
    • Added project configuration and CI review settings; removed previous Dockerfile.
  • New Features

    • Redesigned bottom control panel and added a dedicated settings button.
    • Demo param hook to toggle home button and debug mode.
    • 3D components now accept forwarded refs (improved interactivity).
  • Style

    • Multiple CSS and layout adjustments across UI components and sketches.

Made-with: Cursor
@vercel
Copy link

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
three-js-react Ready Ready Preview, Comment Mar 1, 2026 4:46am

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 27, 2026

Warning

Ignoring CodeRabbit configuration file changes. For security, only the configuration from the base branch is applied for open source repositories.

📝 Walkthrough

Walkthrough

Multiple dependency bumps and Node version pinning; added project config and conventions; ref-forwarding added to 3D components and demo refs; UI/CSS adjustments and refactor of the Leva bottom panel (removed old file, added new BottomPanel, SettingsButton, styles); Dockerfile removed; new hook useDemoParams introduced.

Changes

Cohort / File(s) Summary
Package & Tooling
package.json, .nvmrc
Added .nvmrc (Node 20.19.0) and engines.node constraint; bumped many runtime and dev dependencies (React, react-dom, react-router packages, Vercel libs, zustand, isbot, ESLint/@typescript-eslint, @types/*, Vite plugins).
Project Config & Conventions
.coderabbit.yaml, .cursor/rules/project-conventions.mdc
Added coderabbit config enabling auto reviews and new project conventions document with React/3D/import/style/export guidelines and phased workflow instructions.
Docker
Dockerfile
Removed previously-defined multi-stage Dockerfile entirely.
3D Components & Demos
app/3d/cube.tsx, app/3d/sphere.tsx, app/routes/demos/02-drei-app/main-scene.tsx, app/routes/demos/03-debug-ui/main-scene.tsx
Added/propagated ref typing and forwarding: Cube and Sphere now accept/forward ref?: Ref<Mesh>; added OrangeSphere export; demo scenes updated to use useRef<Mesh> and pass refs to components.
Leva Panel — Bottom Panel Refactor
app/sketched-components/leva-panel/bottom-panel/*, app/sketched-components/leva-panel/index.tsx, app/sketched-components/leva-panel/settings-button/*, app/sketched-components/leva-panel/styles.module.css
Deleted old BottomPanel implementation; added new BottomPanel component (index.tsx) with transition logic, new styles, and SettingsButton component; updated SketchyLevaPanel API to accept className. Removed previous bottom-panel styles and moved/add new CSS modules.
UI Styling & Components
app/app.css, app/routes/*/styles.module.css, app/sketched-components/*/styles.module.css, app/sketched-components/*/*.tsx
Wide CSS and markup adjustments: unit/spacing/font changes in global CSS, removal/addition of various classes (.label, .sketchy-link-icon, .title-container, etc.), simplified component wrappers, moved label styles, adjusted card/button/thumbnail styles and class usages.
Home & Layout Changes
app/routes/home/index.tsx, app/routes/home/styles.module.css, app/routes/demos/layout.tsx
Semantic markup changes (div → main), added title container class, added rel attributes on external links, conditional rendering in demos layout via new useDemoParams hook.
New Hook
app/utils/hooks/use-demo-params.ts
Added useDemoParams hook returning typed MiniGameParams (showHomeButton, debugMode) derived from URL search params.
Misc Cleanup
various small files (app/sketched-components/*, removed classes, import path fixes)
Small edits: import path adjustments, deleted unused CSS rules, moved/renamed CSS modules, minor component prop signature tweaks (e.g., SketchyLevaPanel now accepts optional className).

Sequence Diagram(s)

sequenceDiagram
  participant Store as SidePanelStore
  participant Bottom as BottomPanel
  participant Main as SketchyLevaPanel(main)
  participant Context as SketchyLevaPanel(context)

  Note right of Bottom: style background: rgba(100,150,240,0.5)
  Note right of Store: style background: rgba(200,120,80,0.5)
  Note right of Main: style background: rgba(120,200,120,0.5)
  Note right of Context: style background: rgba(220,180,240,0.5)

  Store->>Bottom: activeStore changes
  Bottom->>Bottom: set isContextPanelSlidDown = true (slide down)
  Bottom-->>Context: schedule update after TRANSITION_MS
  Note right of Bottom: wait 300ms
  Bottom->>Bottom: update renderedStore
  Bottom->>Bottom: set isContextPanelSlidDown = false (slide up)
  Bottom->>Context: render context SketchyLevaPanel with renderedStore
  Bottom->>Main: ensure main SketchyLevaPanel remains rendered
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Mini Game v2: Dependency bump #34 — Overlapping edits touching package.json/.nvmrc, Dockerfile removal, ref-forwarding in 3D components, and the BottomPanel refactor (strong overlap).
  • Simple portfolio #20 — Touches app/3d/cube.tsx and may conflict with ref-forwarding/type updates introduced here.
  • Mini Game #29 — Related changes around Mini Game/demo areas and shared files under app/routes/demos/* and side-panel interactions.

Poem

🐰
I hopped through files both near and far,
Nudged refs and styles and bumped a jar,
I tightened node and tuned the scene,
Leva slides and widgets preen,
A tiny rabbit clap — deploy the star! ✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Mini Game v2' is vague and generic, referring to a feature increment without conveying the specific, substantive changes in the changeset. Replace with a more descriptive title that captures the main scope, such as 'Refactor Leva panel structure and update project dependencies' or 'Reorganize leva-panel components and bump dependency versions'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch mini-game-v2

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@package.json`:
- Line 40: package.json has a version mismatch: `@eslint/js`@^10.0.1 requires
eslint@^10.0.0 but you currently have eslint@9.39.2; fix by updating the
dependency pair in package.json so they match — either bump eslint to ^10.0.0
(update "eslint" to ^10.x) to match "@eslint/js": "^10.0.1" or downgrade
"@eslint/js" to a 9.x release (e.g., "^9.x") to match eslint@9.39.2; after
changing the version for "eslint" or "@eslint/js" run the install
(npm/yarn/pnpm) and run lint to verify no peer dependency conflicts remain.
- Around line 5-7: Update the package.json "engines.node" entry to require a
Node version compatible with vite by changing the "engines.node" field
(currently ">=18.18.0") to at least ">=20.19.0" (or to vite's exact range
"^20.19.0 || >=22.12.0"); modify the "engines.node" value in package.json and
ensure any CI/workflow Node versions align with this new constraint.
- Line 6: The package.json declares engines.node ">=18.18.0" but `@types/node` is
pinned to 25.2.3; update the `@types/node` dependency in package.json (the
"@types/node" entry) to a major version that aligns with Node 18 (e.g., a 18.x
`@types/node`) so the type definitions don't require newer Node APIs—edit the
version string for "@types/node" accordingly and run installation/typecheck to
verify.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ee0ad3a and 9fe3f97.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • package.json

* updated node versions

* Updated some styles and added some layout refactors

* Coderabbit for everyone

* Deleted dockerfile

* Removed duplicated rule sets

* Drei app fix

* Styles refactors

* CCS tidy up and tweaks

* Some more fixes

* Last tweaks

* Update leva panel

* Better ia rules

* Added rel to external link
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
package.json (2)

40-47: ⚠️ Potential issue | 🔴 Critical

Resolve @eslint/js and eslint major-version mismatch.

Line 40 (@eslint/js 10.x) expects ESLint 10, but Line 47 is ESLint 9. This can break lint dependency resolution.

#!/bin/bash
set -euo pipefail

python - <<'PY'
import json
p = json.load(open("package.json"))
print("@eslint/js =", p["devDependencies"].get("@eslint/js"))
print("eslint     =", p["devDependencies"].get("eslint"))
PY

npm view `@eslint/js`@10.0.1 peerDependencies --json
Suggested fix (if staying on ESLint 9)
-    "@eslint/js": "^10.0.1",
+    "@eslint/js": "^9.39.2",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 40 - 47, package.json has a major-version mismatch
between the `@eslint/js` devDependency and eslint (symbols: "@eslint/js" vs
"eslint"); fix by aligning their major versions either by downgrading
"@eslint/js" to a 9.x release or upgrading "eslint" to a 10.x release so the
peerDependencies match, update the version string in package.json accordingly
and run your package manager (npm/yarn/pnpm) to install and verify no
peerDependency warnings.

42-42: ⚠️ Potential issue | 🟠 Major

Align @types/node major with the minimum supported runtime.

Line 42 uses Node 25 typings, while Line 6 allows Node 20/22. This can typecheck APIs unavailable on the supported floor.

#!/bin/bash
set -euo pipefail

python - <<'PY'
import json, re
p = json.load(open("package.json"))
engine = p.get("engines", {}).get("node", "")
types = p.get("devDependencies", {}).get("@types/node", "")
engine_majors = sorted(set(int(x) for x in re.findall(r'\d+', engine)))
types_major_match = re.search(r'(\d+)', types)
types_major = int(types_major_match.group(1)) if types_major_match else None

print("engines.node =", engine)
print("@types/node  =", types)
print("detected engine majors =", engine_majors)
print("detected `@types/node` major =", types_major)
if engine_majors and types_major is not None:
    print("types_major_exceeds_min_engine_major =", types_major > min(engine_majors))
PY
Suggested fix (runtime-floor aligned)
-    "@types/node": "^25.2.3",
+    "@types/node": "^20.19.0",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` at line 42, The `@types/node` devDependency major (currently
"25") must be aligned to the minimum Node runtime declared in package.json
engines.node to avoid referencing newer Node APIs; update the "@types/node"
entry in devDependencies to the same major as the minimum engine (e.g., change
"@types/node": "^25.x" to the major matching min(engines.node) such as "^20.x"
or "^22.x" depending on your engines.node value), then re-run typecheck to
confirm no missing types; ensure you only change the devDependency string for
"@types/node" and keep other deps intact.
🧹 Nitpick comments (5)
.cursor/rules/project-conventions.mdc (1)

14-18: Consider separating workflow instructions from coding conventions.

The "Planning and implementation" section provides workflow guidance for incremental development, which appears targeted at an AI assistant (like Cursor AI) rather than human developers reviewing coding standards.

While this doesn't cause issues, you might consider:

  • Moving this to a separate .cursor/rules/workflow.mdc file
  • Or clearly labeling it as "AI Assistant Workflow" to distinguish it from the coding conventions above

This would make the document clearer for developers who are looking specifically for code-level conventions.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.cursor/rules/project-conventions.mdc around lines 14 - 18, The "Planning
and implementation" section currently mixes AI workflow guidance with coding
conventions; extract that section into a dedicated AI workflow doc or clearly
relabel it as an assistant-focused section: either move the entire "Planning and
implementation" block out of project-conventions.mdc into a new
.cursor/rules/workflow.mdc file, or keep it but rename the heading to "AI
Assistant Workflow / Planning and implementation" and add a short note that
these steps are guidance for the assistant rather than developer coding
conventions so readers can distinguish assistant workflow from code-level rules.
app/sketched-components/link/styles.module.css (1)

6-6: Potential stacking conflict after lowering z-index.

Line 6 sets .link-container to z-index: 1, which now matches the Leva container layer (.leva-panel-container also uses z-index: 1). If these overlap, DOM order can make the link non-clickable. Please verify interactive layering in demo pages and consider assigning explicit, distinct layer levels for nav/link vs panel UI.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/sketched-components/link/styles.module.css` at line 6, The
.link-container z-index of 1 conflicts with the Leva panel
(.leva-panel-container) which also uses z-index:1, potentially making the link
non-clickable; update the CSS in styles.module.css to assign an explicit,
distinct stacking level for .link-container (or the Leva panel) — e.g., bump
.link-container to a higher z-index or lower the panel — ensure position is set
(position: relative/absolute) so z-index applies, run the demo pages to verify
clickable behavior, and adjust as needed to keep nav/link layers consistently
above or below UI panels.
app/app.css (1)

62-63: Consider fallback for text-wrap: pretty.

text-wrap: pretty has limited browser support (Chrome 117+, no Firefox/Safari support as of early 2025). This is a progressive enhancement so it won't break, but be aware it may not apply in all browsers.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/app.css` around lines 62 - 63, The CSS uses the experimental property
text-wrap: pretty which lacks wide browser support; update the rule in
app/app.css to provide robust fallbacks and a feature query: keep text-wrap:
pretty inside `@supports` (text-wrap: pretty) for browsers that support it, and
outside that block add fallback properties such as overflow-wrap: anywhere and
word-break: break-word (and/or overflow-wrap: break-word) so non‑supporting
browsers get sensible wrapping behavior.
app/3d/sphere.tsx (1)

5-8: Unused color prop in SphereProps.

The color prop is declared in SphereProps but not used in the Sphere component. Consider either using it to apply a default material color or removing it from the type.

Option 1: Remove unused prop
 export type SphereProps = Readonly<MeshProps & {
-  color?: string;
   ref?: Ref<Mesh>;
 }>;
Option 2: Use the color prop
-export function Sphere({ ref: refProp, children, ...props }: SphereProps) {
+export function Sphere({ ref: refProp, color, children, ...props }: SphereProps) {
   return (
     <mesh ref={refProp} {...props}>
       <sphereGeometry />
+      {color && <meshStandardMaterial color={color} />}
       {children}
     </mesh>
   );
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/3d/sphere.tsx` around lines 5 - 8, The SphereProps type declares an
unused color?: string; — either remove color from SphereProps to avoid dead API
surface, or thread it into the Sphere component by reading the color prop inside
the Sphere functional component and passing it to the mesh material (e.g. to
meshStandardMaterial/color or material prop) with a sensible default; update the
Sphere component signature to accept SphereProps and ensure the ref/other
MeshProps are forwarded to Mesh so the new color prop is actually applied.
app/3d/cube.tsx (1)

5-9: Redundant ref type in CubeProps — simplify for React 19.

MeshProps already includes the ref property from JSX.IntrinsicElements["mesh"], making the explicit ref?: Ref<Mesh> addition redundant. Additionally, in React 19, the refProp pattern is unnecessary; refs can be passed directly as regular props.

Simplify to:

type CubeProps = MeshProps;

export default function Cube({ children, ...props }: CubeProps) {
  return (
    <mesh {...props}>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/3d/cube.tsx` around lines 5 - 9, CubeProps redundantly declares ref?:
Ref<Mesh> and the Cube component unwraps a refProp; remove the explicit ref from
the type and stop extracting refProp in the component. Change CubeProps to
simply use MeshProps (i.e., type CubeProps = MeshProps) and update the Cube
function signature to accept ({ children, ...props }: CubeProps) and render
<mesh {...props}> so refs passed by callers flow through normally; update
references to refProp inside Cube if any.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/sketched-components/label/label.tsx`:
- Line 17: The Label component currently wraps unconstrained children in an
inline <span> (the JSX node "<span>{children}</span>"), which can break layout
for block-level or complex children; replace the forced span with direct
rendering of children ("{children}") and, if inline-only behavior is ever
required, add an explicit prop (e.g. inline?: boolean) to conditionally wrap
children in a <span> when inline is requested; update the component's props and
any usages accordingly.

---

Duplicate comments:
In `@package.json`:
- Around line 40-47: package.json has a major-version mismatch between the
`@eslint/js` devDependency and eslint (symbols: "@eslint/js" vs "eslint"); fix by
aligning their major versions either by downgrading "@eslint/js" to a 9.x
release or upgrading "eslint" to a 10.x release so the peerDependencies match,
update the version string in package.json accordingly and run your package
manager (npm/yarn/pnpm) to install and verify no peerDependency warnings.
- Line 42: The `@types/node` devDependency major (currently "25") must be aligned
to the minimum Node runtime declared in package.json engines.node to avoid
referencing newer Node APIs; update the "@types/node" entry in devDependencies
to the same major as the minimum engine (e.g., change "@types/node": "^25.x" to
the major matching min(engines.node) such as "^20.x" or "^22.x" depending on
your engines.node value), then re-run typecheck to confirm no missing types;
ensure you only change the devDependency string for "@types/node" and keep other
deps intact.

---

Nitpick comments:
In @.cursor/rules/project-conventions.mdc:
- Around line 14-18: The "Planning and implementation" section currently mixes
AI workflow guidance with coding conventions; extract that section into a
dedicated AI workflow doc or clearly relabel it as an assistant-focused section:
either move the entire "Planning and implementation" block out of
project-conventions.mdc into a new .cursor/rules/workflow.mdc file, or keep it
but rename the heading to "AI Assistant Workflow / Planning and implementation"
and add a short note that these steps are guidance for the assistant rather than
developer coding conventions so readers can distinguish assistant workflow from
code-level rules.

In `@app/3d/cube.tsx`:
- Around line 5-9: CubeProps redundantly declares ref?: Ref<Mesh> and the Cube
component unwraps a refProp; remove the explicit ref from the type and stop
extracting refProp in the component. Change CubeProps to simply use MeshProps
(i.e., type CubeProps = MeshProps) and update the Cube function signature to
accept ({ children, ...props }: CubeProps) and render <mesh {...props}> so refs
passed by callers flow through normally; update references to refProp inside
Cube if any.

In `@app/3d/sphere.tsx`:
- Around line 5-8: The SphereProps type declares an unused color?: string; —
either remove color from SphereProps to avoid dead API surface, or thread it
into the Sphere component by reading the color prop inside the Sphere functional
component and passing it to the mesh material (e.g. to
meshStandardMaterial/color or material prop) with a sensible default; update the
Sphere component signature to accept SphereProps and ensure the ref/other
MeshProps are forwarded to Mesh so the new color prop is actually applied.

In `@app/app.css`:
- Around line 62-63: The CSS uses the experimental property text-wrap: pretty
which lacks wide browser support; update the rule in app/app.css to provide
robust fallbacks and a feature query: keep text-wrap: pretty inside `@supports`
(text-wrap: pretty) for browsers that support it, and outside that block add
fallback properties such as overflow-wrap: anywhere and word-break: break-word
(and/or overflow-wrap: break-word) so non‑supporting browsers get sensible
wrapping behavior.

In `@app/sketched-components/link/styles.module.css`:
- Line 6: The .link-container z-index of 1 conflicts with the Leva panel
(.leva-panel-container) which also uses z-index:1, potentially making the link
non-clickable; update the CSS in styles.module.css to assign an explicit,
distinct stacking level for .link-container (or the Leva panel) — e.g., bump
.link-container to a higher z-index or lower the panel — ensure position is set
(position: relative/absolute) so z-index applies, run the demo pages to verify
clickable behavior, and adjust as needed to keep nav/link layers consistently
above or below UI panels.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fe3f97 and 9ca5a29.

📒 Files selected for processing (34)
  • .coderabbit.yaml
  • .cursor/rules/project-conventions.mdc
  • .nvmrc
  • Dockerfile
  • app/3d/cube.tsx
  • app/3d/sphere.tsx
  • app/app.css
  • app/routes/demos/02-drei-app/main-scene.tsx
  • app/routes/demos/02-drei-app/styles.module.css
  • app/routes/demos/03-debug-ui/main-scene.tsx
  • app/routes/demos/layout.tsx
  • app/routes/demos/styles.module.css
  • app/routes/home/index.tsx
  • app/routes/home/styles.module.css
  • app/sketched-components/button/styles.module.css
  • app/sketched-components/card/index.tsx
  • app/sketched-components/card/styles.module.css
  • app/sketched-components/common.module.css
  • app/sketched-components/label/label.tsx
  • app/sketched-components/label/styles.module.css
  • app/sketched-components/leva-panel/bottom-panel.tsx
  • app/sketched-components/leva-panel/bottom-panel/index.tsx
  • app/sketched-components/leva-panel/bottom-panel/styles.module.css
  • app/sketched-components/leva-panel/index.tsx
  • app/sketched-components/leva-panel/settings-button/index.tsx
  • app/sketched-components/leva-panel/settings-button/styles.module.css
  • app/sketched-components/leva-panel/sketchy-leva-panel/index.tsx
  • app/sketched-components/leva-panel/sketchy-leva-panel/leva-theme.ts
  • app/sketched-components/leva-panel/styles.module.css
  • app/sketched-components/link/styles.module.css
  • app/sketched-components/title/h1.tsx
  • app/sketched-components/title/styles.module.css
  • app/utils/hooks/use-demo-params.ts
  • package.json
💤 Files with no reviewable changes (5)
  • app/sketched-components/common.module.css
  • app/sketched-components/leva-panel/bottom-panel.tsx
  • app/sketched-components/leva-panel/styles.module.css
  • Dockerfile
  • app/routes/demos/02-drei-app/styles.module.css
✅ Files skipped from review due to trivial changes (3)
  • app/sketched-components/label/styles.module.css
  • .nvmrc
  • app/sketched-components/leva-panel/sketchy-leva-panel/leva-theme.ts

<SketchyBorder className={styles.label} baseStrokeWidth="xs">
<SketchyShadow strokeWidth="xs" offsetX={0.1} offsetY={2} />
{children}
<span>{children}</span>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Avoid forcing all label children into an inline <span>.

children is unconstrained, so this can cause layout/markup issues for non-inline content. Prefer rendering children directly unless inline-only content is required.

Suggested fix
-    <span>{children}</span> 
+    {children}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<span>{children}</span>
{children}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/sketched-components/label/label.tsx` at line 17, The Label component
currently wraps unconstrained children in an inline <span> (the JSX node
"<span>{children}</span>"), which can break layout for block-level or complex
children; replace the forced span with direct rendering of children
("{children}") and, if inline-only behavior is ever required, add an explicit
prop (e.g. inline?: boolean) to conditionally wrap children in a <span> when
inline is requested; update the component's props and any usages accordingly.

@gianzamboni gianzamboni marked this pull request as draft March 1, 2026 12:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant