Skip to content

Dev - #70

Merged
Dinil-Thilakarathne merged 4 commits into
masterfrom
dev
Jul 6, 2026
Merged

Dev#70
Dinil-Thilakarathne merged 4 commits into
masterfrom
dev

Conversation

@Dinil-Thilakarathne

@Dinil-Thilakarathne Dinil-Thilakarathne commented Jul 5, 2026 •

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Added two new visual components: Dot Orbit Shader and Mesh Gradient Shader, along with multiple ready-made examples and playground controls.
    • Updated the sidebar to use a more polished drawer-style mobile experience.
  • Documentation

    • Added documentation pages for the new shader components.
    • Updated the changelog with the latest release highlights.
  • Bug Fixes

    • Adjusted the docs layout to better fit large screens.
    • Added the Tailwind icon to the shared icon set.

- Register new shader components in the registry.
- Add documentation pages for both shaders.
- Create demo examples for various configurations.
- Update layout shell to prevent overflow.
Apply uniform import ordering and syntax formatting across the codebase
to
improve readability and maintainability.
…ding

feat: Add Dot Orbit and Mesh Gradient shader components with docs
@vercel

vercel Bot commented Jul 5, 2026 •

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
sona-ui Ready Ready Preview, Comment Jul 5, 2026 7:25pm

@coderabbitai

coderabbitai Bot commented Jul 5, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds new dot-orbit-shader and mesh-gradient-shader UI components (with examples, docs, playground, and registry entries) backed by a new @paper-design/shaders-react dependency, introduces Sheet and shadcn Button primitives to refactor the component sidebar's mobile overlay, and applies broad non-functional import/formatting reordering across most files.

Changes

Shader Components Feature

Layer / File(s) Summary
Shader component implementations
package.json, src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx, src/registry/sonaui/mesh-gradient-shader/mesh-gradient-shader.tsx
Adds @paper-design/shaders-react dependency and implements DotOrbitShader and MeshGradientShader components wrapping DotOrbit/MeshGradient.
Shader example variants
src/registry/examples/dot-orbit-shader/*, src/registry/examples/mesh-gradient-shader/*
Adds preset demo variants (dense, slow, pastel, ocean, sunset, monochrome, static, default) rendering the shader components with fixed configuration.
Registry, playground, docs wiring
public/r/*.json, registry.json, src/registry/registry.json, src/registry/index.ts, src/registry/playground/index.tsx, src/registry/prop-types.ts, src/config/components.ts, src/lib/types.ts, src/content/docs/dot-orbit-shader.mdx, src/content/docs/mesh-gradient-shader.mdx, src/content/docs/changelog.mdx
Wires new components into registries, playground controls, prop metadata, navigation config (adding "Shaders" type), documentation pages, and the changelog.

Sidebar Sheet Overlay Refactor

Layer / File(s) Summary
Sheet and Button primitives
src/components/common/sheet.tsx, src/components/common/shadcn-button.tsx
Adds new Sheet* wrapper components around @base-ui/react/dialog and a Button/buttonVariants component using cva.
Sidebar refactor
src/components/component-sidebar/index.tsx
Extracts SidebarContent, replaces manual off-canvas overlay/scroll-lock with Sheet/SheetTrigger/SheetContent, and adds a persistent desktop aside.

Import Reordering and Formatting Cleanup

Layer / File(s) Summary
Widespread formatting-only changes
next.config.ts, tsconfig.json, CSS files, most src/components/*, src/app/*, src/registry/sonaui/*, src/registry/examples/*, public/r/*.json, src/lib/*, src/hooks/*
Reorders imports, reformats interface extends clauses, export lists, JSX, and closing syntax with no functional behavior change; also rewrites FanView's fan-point positioning math to an angular/radial layout.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant SheetTrigger
  participant Sheet
  participant SheetContent
  participant SidebarContent
  User->>SheetTrigger: click mobile toggle button
  SheetTrigger->>Sheet: set open state true
  Sheet->>SheetContent: render overlay/popup
  SheetContent->>SidebarContent: render grouped links + navLinks
  User->>SidebarContent: click a nav link
  SidebarContent->>Sheet: onLinkClick closes sidebar
Loading
sequenceDiagram
  participant Demo as Example/Playground
  participant DotOrbitShader
  participant MeshGradientShader
  participant ShadersReact as "`@paper-design/shaders-react`"
  Demo->>DotOrbitShader: pass colors/size/speed props
  DotOrbitShader->>ShadersReact: render DotOrbit filling container
  Demo->>MeshGradientShader: pass colors/distortion/swirl props
  MeshGradientShader->>ShadersReact: render MeshGradient filling container
Loading

Possibly related PRs

  • Dinil-Thilakarathne/sona-ui#59: Both PRs add new UI component entries to the registry manifests (public/r/registry.json, registry.json), extending the same registry structure with new dependencies.

Suggested labels: enhancement

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title is too vague to describe the main changes in this PR. Use a specific summary, e.g. add the new shader components and sidebar/sheet updates.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/registry/sonaui/fan-view/fan-view.tsx (1)

40-49: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Center the single-item case.

total <= 1 still maps a lone card to progress = 0, which places it at -40° instead of centered above the toggle. If one-card fans are supported, special-case total === 1.

Suggested fix
-  const progress = total <= 1 ? 0 : index / (total - 1);
+  const progress = total === 1 ? 0.5 : total <= 1 ? 0 : index / (total - 1);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/registry/sonaui/fan-view/fan-view.tsx` around lines 40 - 49, The
single-item fan layout in getFanPoint still uses the left-offset angle when
total is 1, so a lone card is not centered above the toggle. Update getFanPoint
to special-case total === 1 and return a centered position/rotation for that
case, while keeping the existing progress-based math for multi-item fans. Use
the existing getFanPoint helper as the fix point so the one-card path is handled
consistently wherever fan points are computed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/app/api/read-file/route.ts`:
- Around line 34-37: The 404 response in the read-file route is exposing the
resolved filesystem path, which should not be sent to clients. Update the logic
in the route handler that checks fs.existsSync(txtFilePath) so the
NextResponse.json payload returns a generic not-found message only, and keep the
concrete txtFilePath details in server-side logging if needed.

In `@src/app/globals.css`:
- Around line 132-134: The CSS in globals.css should keep the height calc
expression on a single line to satisfy the scss/operator-no-newline-after lint
rule. Update the existing calc() declaration in the globals stylesheet so the
subtraction stays inline, using the same value and variables already present,
and make sure the rule remains valid without changing the computed result.

In `@src/components/component-sidebar/index.tsx`:
- Around line 109-141: The mobile sheet content is missing a responsive guard,
so it can still render on desktop when the parent controls isOpen. Add the same
lg:hidden behavior to SheetContent in component-sidebar/index.tsx, alongside the
existing SheetTrigger and SidebarContent mobile logic, so the SheetContent only
displays on small screens.

In `@src/config/components.ts`:
- Around line 94-105: The “Circular Dock Menu” and “Fan View” items are
commented out in the components config, so they no longer appear in
groupedComponents and the sidebar. Update the components list in the config so
these entries are either restored as active items or removed entirely if they
are intentionally obsolete; use the existing component definitions around the
commented entries to keep the navigation in sync with the docs pages.

In `@src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx`:
- Around line 7-8: The DotOrbitShaderProps and MeshGradientShaderProps type
declarations reference React.HTMLAttributes<HTMLDivElement> without importing
the React type namespace, which causes a TypeScript error. Add a type-only React
import at the top of both dot-orbit-shader.tsx and mesh-gradient-shader.tsx,
keeping the props interfaces unchanged so the React.HTMLAttributes reference
resolves correctly.

In `@src/styles/theme-data.css`:
- Around line 64-66: The theme sizing expression is split across multiple lines,
which violates the current Stylelint operator rule. Update the calc() value in
the theme stylesheet so the full subtraction remains on a single line, keeping
the existing value and operators intact. Use the existing CSS variable-based
sizing expression near the theme-data definition as the place to fix it.

---

Outside diff comments:
In `@src/registry/sonaui/fan-view/fan-view.tsx`:
- Around line 40-49: The single-item fan layout in getFanPoint still uses the
left-offset angle when total is 1, so a lone card is not centered above the
toggle. Update getFanPoint to special-case total === 1 and return a centered
position/rotation for that case, while keeping the existing progress-based math
for multi-item fans. Use the existing getFanPoint helper as the fix point so the
one-card path is handled consistently wherever fan points are computed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5c21e268-c36a-4f18-a56f-383abf28ba82

📥 Commits

Reviewing files that changed from the base of the PR and between b21e37c and 1dd77cd.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (107)
  • next.config.ts
  • package.json
  • public/r/accordion.json
  • public/r/bubble-up-button.json
  • public/r/circular-dock-menu.json
  • public/r/dot-orbit-shader.json
  • public/r/expandable-tabs.json
  • public/r/fan-view.json
  • public/r/link-preview.json
  • public/r/magnetic-button.json
  • public/r/marquee.json
  • public/r/mesh-gradient-shader.json
  • public/r/registry.json
  • public/r/stagger-text.json
  • registry.json
  • scripts/build-prop-types.ts
  • src/app/api/read-file/route.ts
  • src/app/docs/not-found.tsx
  • src/app/globals.css
  • src/app/playground/page.tsx
  • src/app/robots.ts
  • src/assets/svgs/index.ts
  • src/components/Search.tsx
  • src/components/button/index.tsx
  • src/components/code-block/code-block-source.tsx
  • src/components/code-block/code-block.tsx
  • src/components/code-block/internal-code-block.tsx
  • src/components/code-block/lib/shiki-shared.ts
  • src/components/code-block/lib/transformers/utils.ts
  • src/components/common/Fade.tsx
  • src/components/common/animated-link.tsx
  • src/components/common/code-syntax-highlighter.tsx
  • src/components/common/component-installation-server.tsx
  • src/components/common/component-installation.tsx
  • src/components/common/component-preview-server.tsx
  • src/components/common/component-preview.tsx
  • src/components/common/fade-in.tsx
  • src/components/common/full-width-text.tsx
  • src/components/common/logo.tsx
  • src/components/common/mdx-components.tsx
  • src/components/common/scroll-up-button.tsx
  • src/components/common/shadcn-button.tsx
  • src/components/common/sheet.tsx
  • src/components/common/sidebar-link.tsx
  • src/components/common/splil-text-comp.tsx
  • src/components/common/stagger-text.tsx
  • src/components/common/start-count.tsx
  • src/components/common/tabs.tsx
  • src/components/common/tag.tsx
  • src/components/common/theme-provider.tsx
  • src/components/common/theme-toggle.tsx
  • src/components/component-card/index.tsx
  • src/components/component-sidebar/index.tsx
  • src/components/copy-button/copy-button.tsx
  • src/components/docs-layout-shell.tsx
  • src/components/header/index.tsx
  • src/components/hero/feature-grid/InfoCard.tsx
  • src/components/hero/feature-grid/index.tsx
  • src/components/hero/index-old.tsx
  • src/components/profile-popover/index.tsx
  • src/components/scroll-area/scroll-area.tsx
  • src/components/tabs/tabs.tsx
  • src/components/usage/component-usage-server.tsx
  • src/components/usage/component-usage.tsx
  • src/config/components.ts
  • src/config/metadata.ts
  • src/content/docs/changelog.mdx
  • src/content/docs/dot-orbit-shader.mdx
  • src/content/docs/mesh-gradient-shader.mdx
  • src/fonts/clashDisplay/index.ts
  • src/hooks/useClock.ts
  • src/hooks/useGitStars.ts
  • src/lib/fileReader.ts
  • src/lib/types.ts
  • src/lib/utils.ts
  • src/registry/examples/accordion/accordion-splitted.tsx
  • src/registry/examples/circular-dock-menu/circular-dock-menu-demo.tsx
  • src/registry/examples/dot-orbit-shader/dot-orbit-shader-demo.tsx
  • src/registry/examples/dot-orbit-shader/dot-orbit-shader-dense.tsx
  • src/registry/examples/dot-orbit-shader/dot-orbit-shader-pastel.tsx
  • src/registry/examples/dot-orbit-shader/dot-orbit-shader-slow.tsx
  • src/registry/examples/expandable-tabs/expandable-tabs-demo.tsx
  • src/registry/examples/hold-to-delete-button/hold-to-delete-button-demo.tsx
  • src/registry/examples/mesh-gradient-shader/mesh-gradient-shader-demo.tsx
  • src/registry/examples/mesh-gradient-shader/mesh-gradient-shader-monochrome.tsx
  • src/registry/examples/mesh-gradient-shader/mesh-gradient-shader-ocean.tsx
  • src/registry/examples/mesh-gradient-shader/mesh-gradient-shader-static.tsx
  • src/registry/examples/mesh-gradient-shader/mesh-gradient-shader-sunset.tsx
  • src/registry/examples/ripple-button/ripple-button-demo.tsx
  • src/registry/examples/spinning-text/spinning-text-demo.tsx
  • src/registry/index.ts
  • src/registry/playground/index.tsx
  • src/registry/prop-types.ts
  • src/registry/registry.json
  • src/registry/sonaui/accordion/accordion.tsx
  • src/registry/sonaui/bubble-up-button/bubble-up-button.tsx
  • src/registry/sonaui/circular-dock-menu/circular-dock-menu.tsx
  • src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx
  • src/registry/sonaui/expandable-tabs/expandable-tabs.tsx
  • src/registry/sonaui/fan-view/fan-view.tsx
  • src/registry/sonaui/link-preview/link-preview.tsx
  • src/registry/sonaui/magnetic-button/magnetic-button.tsx
  • src/registry/sonaui/marquee/marquee.tsx
  • src/registry/sonaui/mesh-gradient-shader/mesh-gradient-shader.tsx
  • src/registry/sonaui/stagger-text/stagger-text.tsx
  • src/styles/theme-data.css
  • tsconfig.json
💤 Files with no reviewable changes (1)
  • src/components/common/logo.tsx

Comment on lines 34 to +37
if (!fs.existsSync(txtFilePath)) {
return NextResponse.json(
{ error: `File not found: ${txtFilePath}` },
{ status: 404 }
{ status: 404 },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Avoid echoing the resolved filesystem path in 404s.

This leaks the server’s directory layout to clients. Return a generic not-found body and keep the concrete path only in server logs.

Suggested fix
-      return NextResponse.json(
-        { error: `File not found: ${txtFilePath}` },
-        { status: 404 },
-      );
+      return NextResponse.json(
+        { error: "File not found." },
+        { status: 404 },
+      );
📝 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
if (!fs.existsSync(txtFilePath)) {
return NextResponse.json(
{ error: `File not found: ${txtFilePath}` },
{ status: 404 }
{ status: 404 },
if (!fs.existsSync(txtFilePath)) {
return NextResponse.json(
{ error: "File not found." },
{ status: 404 },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/api/read-file/route.ts` around lines 34 - 37, The 404 response in the
read-file route is exposing the resolved filesystem path, which should not be
sent to clients. Update the logic in the route handler that checks
fs.existsSync(txtFilePath) so the NextResponse.json payload returns a generic
not-found message only, and keep the concrete txtFilePath details in server-side
logging if needed.

Comment thread src/app/globals.css
Comment on lines +132 to +134
100svh -
var(--spacing-header-height) -
2rem

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the calc() on one line.

This multiline subtraction now violates the current Stylelint rule (scss/operator-no-newline-after), so lint will fail unless the rule is relaxed.

Proposed fix
-    100svh -
-    var(--spacing-header-height) -
-    2rem
+    100svh - var(--spacing-header-height) - 2rem
📝 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
100svh -
var(--spacing-header-height) -
2rem
100svh - var(--spacing-header-height) - 2rem
🧰 Tools
🪛 Stylelint (17.14.0)

[error] 132-132: Unexpected newline after "-" (scss/operator-no-newline-after)

(scss/operator-no-newline-after)


[error] 133-133: Unexpected newline after "-" (scss/operator-no-newline-after)

(scss/operator-no-newline-after)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/globals.css` around lines 132 - 134, The CSS in globals.css should
keep the height calc expression on a single line to satisfy the
scss/operator-no-newline-after lint rule. Update the existing calc() declaration
in the globals stylesheet so the subtraction stays inline, using the same value
and variables already present, and make sure the rule remains valid without
changing the computed result.

Source: Linters/SAST tools

Comment on lines +109 to +141
{/* Mobile Sidebar (Sheet component overlay) */}
<Sheet open={isOpen} onOpenChange={setIsOpen}>
<SheetTrigger
render={
<motion.button
className="bg-background/20 fixed right-4 bottom-4 z-50 block rounded-full p-4 backdrop-blur lg:hidden border border-border shadow-lg"
whileTap={{ scale: 0.95 }}
initial={{ scale: 0, opacity: 0 }}
animate={{ scale: 1, opacity: 1 }}
aria-label="Toggle menu"
>
{isOpen ? <MdClose size={24} /> : <FiMenu size={24} />}
</motion.button>
}
/>
<SheetContent
side="left"
className="w-sidebar-width max-w-sidebar-width bg-sidebar border p-4 h-full max-h-[calc(100dvh-var(--spacing-header-height)-2rem)] flex flex-col rounded-lg top-[calc(var(--spacing-header-height)+1rem)]! left-2!"
showCloseButton={false}
>
<div className="sr-only">
<SheetTitle>Documentation Navigation</SheetTitle>
<SheetDescription>
Browse categories and components
</SheetDescription>
</div>
<div className="flex flex-col h-full overflow-y-auto overscroll-none pr-1">
<SidebarContent
pathname={pathname}
onLinkClick={closeSidebarOnMobile}
/>
</div>
</SheetContent>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Does Base UI's Dialog.Trigger toggle the dialog closed when clicked while already open, or does it only open it?

💡 Result:

In Base UI, the Dialog.Trigger component is designed to toggle the dialog state [1]. When clicked, if the dialog is closed, it opens it; if the dialog is already open, clicking the trigger closes it [1]. This toggle behavior was specifically addressed in earlier development to ensure consistent interaction [1]. While the documentation describes the Trigger primarily as a component that "opens the dialog" [2], the internal implementation and bug fixes (such as resolving issues where non-modal dialogs would re-open instead of closing [1]) confirm that the intended and current behavior is to toggle the dialog's visibility [1].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show the relevant component with line numbers.
sed -n '1,220p' src/components/component-sidebar/index.tsx

Repository: Dinil-Thilakarathne/sona-ui

Length of output: 5076


Add lg:hidden to SheetContent
The mobile sheet can still render over the persistent desktop sidebar if isOpen is controlled from the parent, so a responsive guard here is a good safety net.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/component-sidebar/index.tsx` around lines 109 - 141, The
mobile sheet content is missing a responsive guard, so it can still render on
desktop when the parent controls isOpen. Add the same lg:hidden behavior to
SheetContent in component-sidebar/index.tsx, alongside the existing SheetTrigger
and SidebarContent mobile logic, so the SheetContent only displays on small
screens.

Comment thread src/config/components.ts
Comment on lines +94 to +105
// {
// name: "Circular Dock Menu",
// slug: "circular-dock-menu",
// href: "/docs/circular-dock-menu",
// type: "Components",
// },
// {
// name: "Fan View",
// slug: "fan-view",
// href: "/docs/fan-view",
// type: "Components",
// },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== src/config/components.ts (relevant lines) ==\n'
sed -n '70,140p' src/config/components.ts

printf '\n== component-sidebar consumer ==\n'
sed -n '1,120p' src/components/component-sidebar/index.tsx

printf '\n== fan-view and circular-dock-menu references ==\n'
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' \
  'fan-view|circular-dock-menu|Circular Dock Menu|Fan View' src docs . 2>/dev/null | sed -n '1,200p'

Repository: Dinil-Thilakarathne/sona-ui

Length of output: 16306


Restore the Circular Dock Menu and Fan View links
These entries are commented out, so they drop out of groupedComponents and disappear from the sidebar even though both docs pages still exist. If they’re meant to stay accessible, keep them in the nav; otherwise remove the dead commented code.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/config/components.ts` around lines 94 - 105, The “Circular Dock Menu” and
“Fan View” items are commented out in the components config, so they no longer
appear in groupedComponents and the sidebar. Update the components list in the
config so these entries are either restored as active items or removed entirely
if they are intentionally obsolete; use the existing component definitions
around the commented entries to keep the navigation in sync with the docs pages.

Comment on lines +7 to +8
export interface DotOrbitShaderProps
extends React.HTMLAttributes<HTMLDivElement> {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if React namespace is globally declared (e.g. via tsconfig "types" or global.d.ts)
rg -n "declare global" --type=ts
rg -n '"types"' tsconfig.json
cat tsconfig.json | head -40
# Confirm mesh-gradient-shader.tsx has the same pattern (missing React import) for cross-check
rg -n "React.HTMLAttributes|import.*React" src/registry/sonaui/mesh-gradient-shader/mesh-gradient-shader.tsx

Repository: Dinil-Thilakarathne/sona-ui

Length of output: 165


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repo files =="
git ls-files | rg '(^|/)(tsconfig\.json|global\.d\.ts|.*\.d\.ts|dot-orbit-shader\.tsx|mesh-gradient-shader\.tsx|playground/index\.tsx)$'

echo
echo "== tsconfig.json (top) =="
if [ -f tsconfig.json ]; then
  cat -n tsconfig.json | sed -n '1,120p'
fi

echo
echo "== React namespace/type declarations =="
rg -n --hidden --glob '!node_modules' --glob '!dist' --glob '!build' \
  'declare global|namespace React|type React|import type \* as React from "react"|from "react"' \
  .

echo
echo "== target file =="
cat -n src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx

echo
echo "== similar files =="
for f in src/registry/sonaui/mesh-gradient-shader/mesh-gradient-shader.tsx src/registry/playground/index.tsx; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    cat -n "$f"
  fi
done

Repository: Dinil-Thilakarathne/sona-ui

Length of output: 46384


Add the missing React type import.
React.HTMLAttributes<HTMLDivElement> needs import type * as React from "react"; in src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx to avoid a TypeScript compile error. The same fix is needed in src/registry/sonaui/mesh-gradient-shader/mesh-gradient-shader.tsx.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/registry/sonaui/dot-orbit-shader/dot-orbit-shader.tsx` around lines 7 -
8, The DotOrbitShaderProps and MeshGradientShaderProps type declarations
reference React.HTMLAttributes<HTMLDivElement> without importing the React type
namespace, which causes a TypeScript error. Add a type-only React import at the
top of both dot-orbit-shader.tsx and mesh-gradient-shader.tsx, keeping the props
interfaces unchanged so the React.HTMLAttributes reference resolves correctly.

Comment thread src/styles/theme-data.css
Comment on lines +64 to +66
100svh -
var(--spacing-header-height) -
2rem

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the calc() on one line.

This multiline subtraction now violates the current Stylelint rule (scss/operator-no-newline-after), so lint will fail unless the rule is relaxed.

Proposed fix
-    100svh -
-    var(--spacing-header-height) -
-    2rem
+    100svh - var(--spacing-header-height) - 2rem
📝 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
100svh -
var(--spacing-header-height) -
2rem
100svh - var(--spacing-header-height) - 2rem
🧰 Tools
🪛 Stylelint (17.14.0)

[error] 64-64: Unexpected newline after "-" (scss/operator-no-newline-after)

(scss/operator-no-newline-after)


[error] 65-65: Unexpected newline after "-" (scss/operator-no-newline-after)

(scss/operator-no-newline-after)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/styles/theme-data.css` around lines 64 - 66, The theme sizing expression
is split across multiple lines, which violates the current Stylelint operator
rule. Update the calc() value in the theme stylesheet so the full subtraction
remains on a single line, keeping the existing value and operators intact. Use
the existing CSS variable-based sizing expression near the theme-data definition
as the place to fix it.

Source: Linters/SAST tools

@Dinil-Thilakarathne
Dinil-Thilakarathne merged commit 112f46c into master Jul 6, 2026
4 checks passed
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 2.14.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

This branch was successfully deployed

1 active deployment
Preview — 1dd77cd6 Deployed Jul 5, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant