Skip to content

feat: upgrade to Next.js 16, TailwindCSS v4, Storybook 10, and Biome#422

Merged
hari merged 63 commits intomainfrom
hari-lamichhane/upgrade-to-latest
Mar 9, 2026
Merged

feat: upgrade to Next.js 16, TailwindCSS v4, Storybook 10, and Biome#422
hari merged 63 commits intomainfrom
hari-lamichhane/upgrade-to-latest

Conversation

@hari
Copy link
Contributor

@hari hari commented Mar 6, 2026

  • Upgrade Next.js 14 → 16, TailwindCSS v3 → v4, Storybook 9 → 10
  • Replace ESLint + Prettier with Biome for linting and formatting
  • Replace contentlayer with velite for content processing
  • Migrate CSS config from tailwind.config.ts to CSS-based @theme syntax
  • Fix animated-border-trail CSS @Property animation compatibility
  • Add (main) route group for layout separation
  • Update component preview iframe URLs for Storybook 10 autodocs
  • Fix story file issues (titles, exports, autodocs tags)
  • Add deploy-v3 GitHub Actions workflow
  • Update globals.css with TailwindCSS v4 base layer resets

- Upgrade Next.js 14 → 16, TailwindCSS v3 → v4, Storybook 9 → 10
- Replace ESLint + Prettier with Biome for linting and formatting
- Replace contentlayer with velite for content processing
- Migrate CSS config from tailwind.config.ts to CSS-based @theme syntax
- Fix animated-border-trail CSS @Property animation compatibility
- Add (main) route group for layout separation
- Update component preview iframe URLs for Storybook 10 autodocs
- Fix story file issues (titles, exports, autodocs tags)
- Add deploy-v3 GitHub Actions workflow
- Update globals.css with TailwindCSS v4 base layer resets

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link

coderabbitai bot commented Mar 6, 2026

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 50221892-10f3-434a-ac5d-f4acacec6e8c

📥 Commits

Reviewing files that changed from the base of the PR and between 04517d8 and f83c244.

📒 Files selected for processing (300)
  • .env.development
  • .eslintignore
  • .eslintrc.cjs
  • .github/PULL_REQUEST_TEMPLATE/new_component.md
  • .github/workflows/deploy-v3.yml
  • .github/workflows/deploy.yml
  • .gitignore
  • .node-version
  • .prettierrc.cjs
  • .storybook/main.ts
  • .storybook/preview.tsx
  • .vscode/extensions.json
  • animata/accordion/faq.stories.tsx
  • animata/accordion/faq.tsx
  • animata/background/animated-beam.stories.tsx
  • animata/background/animated-beam.tsx
  • animata/background/blurry-blob.stories.tsx
  • animata/background/blurry-blob.tsx
  • animata/background/diagonal-lines.stories.tsx
  • animata/background/diagonal-lines.tsx
  • animata/background/dot.stories.tsx
  • animata/background/dot.tsx
  • animata/background/grid.stories.tsx
  • animata/background/grid.tsx
  • animata/background/interactive-grid.stories.tsx
  • animata/background/interactive-grid.tsx
  • animata/background/moving-gradient.stories.tsx
  • animata/background/moving-gradient.tsx
  • animata/background/zigzag.stories.tsx
  • animata/background/zigzag.tsx
  • animata/bento-grid/eight.stories.tsx
  • animata/bento-grid/eight.tsx
  • animata/bento-grid/eleven.stories.tsx
  • animata/bento-grid/five.stories.tsx
  • animata/bento-grid/four.stories.tsx
  • animata/bento-grid/four.tsx
  • animata/bento-grid/gradient.stories.tsx
  • animata/bento-grid/gradient.tsx
  • animata/bento-grid/nine.stories.tsx
  • animata/bento-grid/nine.tsx
  • animata/bento-grid/seven.stories.tsx
  • animata/bento-grid/seven.tsx
  • animata/bento-grid/six.stories.tsx
  • animata/bento-grid/six.tsx
  • animata/bento-grid/ten.stories.tsx
  • animata/bento-grid/ten.tsx
  • animata/bento-grid/three.stories.tsx
  • animata/button/ai-button.stories.tsx
  • animata/button/ai-button.tsx
  • animata/button/algolia-blue-button.stories.tsx
  • animata/button/algolia-blue-button.tsx
  • animata/button/algolia-white-button.stories.tsx
  • animata/button/algolia-white-button.tsx
  • animata/button/animated-follow-button.stories.tsx
  • animata/button/animated-follow-button.tsx
  • animata/button/arrow-button.stories.tsx
  • animata/button/arrow-button.tsx
  • animata/button/duolingo.stories.tsx
  • animata/button/duolingo.tsx
  • animata/button/external-link-button.stories.tsx
  • animata/button/external-link-button.tsx
  • animata/button/get-started-button.stories.tsx
  • animata/button/get-started-button.tsx
  • animata/button/ripple-button.stories.tsx
  • animata/button/shining-button.stories.tsx
  • animata/button/shining-button.tsx
  • animata/button/slide-arrow-button.stories.tsx
  • animata/button/slide-arrow-button.tsx
  • animata/button/status-button.stories.tsx
  • animata/button/status-button.tsx
  • animata/button/swipe-button.stories.tsx
  • animata/button/swipe-button.tsx
  • animata/button/toggle-switch.stories.tsx
  • animata/button/toggle-switch.tsx
  • animata/button/work-button.stories.tsx
  • animata/button/work-button.tsx
  • animata/card/WebHooks-card.tsx
  • animata/card/blur-stack-card.stories.tsx
  • animata/card/blur-stack-card.tsx
  • animata/card/card-comment.stories.tsx
  • animata/card/card-comment.tsx
  • animata/card/card-spread.stories.tsx
  • animata/card/card-spread.tsx
  • animata/card/case-study-card.stories.tsx
  • animata/card/case-study-card.tsx
  • animata/card/comment-reply-card.stories.tsx
  • animata/card/comment-reply-card.tsx
  • animata/card/email-feature-card.stories.tsx
  • animata/card/email-feature-card.tsx
  • animata/card/flip-card.stories.tsx
  • animata/card/flip-card.tsx
  • animata/card/fluid-tabs.stories.tsx
  • animata/card/fluid-tabs.tsx
  • animata/card/github-card-shiny.stories.tsx
  • animata/card/github-card-shiny.tsx
  • animata/card/github-card-skew.stories.tsx
  • animata/card/github-card-skew.tsx
  • animata/card/glowing-card.stories.tsx
  • animata/card/glowing-card.tsx
  • animata/card/integration-pills.stories.tsx
  • animata/card/integration-pills.tsx
  • animata/card/led-board.stories.tsx
  • animata/card/led-board.tsx
  • animata/card/notice-card.stories.tsx
  • animata/card/notice-card.tsx
  • animata/card/notification-card.stories.tsx
  • animata/card/notification-card.tsx
  • animata/card/notify-user-info.stories.tsx
  • animata/card/notify-user-info.tsx
  • animata/card/reminder-scheduler.stories.tsx
  • animata/card/reminder-scheduler.tsx
  • animata/card/score-card.stories.tsx
  • animata/card/score-card.tsx
  • animata/card/staggered-card.stories.tsx
  • animata/card/staggered-card.tsx
  • animata/card/subscribe-card.stories.tsx
  • animata/card/subscribe-card.tsx
  • animata/card/survey-card.stories.tsx
  • animata/card/survey-card.tsx
  • animata/card/swap-card.stories.tsx
  • animata/card/swap-card.tsx
  • animata/card/swap-text-card.stories.tsx
  • animata/card/swap-text-card.tsx
  • animata/card/tilted-card.stories.tsx
  • animata/card/tilted-card.tsx
  • animata/card/webhooks-card.stories.tsx
  • animata/carousel/expandable.stories.tsx
  • animata/carousel/expandable.tsx
  • animata/carousel/image-carousel.stories.tsx
  • animata/carousel/image-carousel.tsx
  • animata/container/animated-border-trail.stories.tsx
  • animata/container/animated-border-trail.tsx
  • animata/container/animated-dock.stories.tsx
  • animata/container/animated-dock.tsx
  • animata/container/cursor-tracker.stories.tsx
  • animata/container/cursor-tracker.tsx
  • animata/container/fibonacci-lines.stories.tsx
  • animata/container/marquee.stories.tsx
  • animata/container/marquee.tsx
  • animata/container/nav-tabs.stories.tsx
  • animata/container/nav-tabs.tsx
  • animata/container/scrolling-testimonials.stories.tsx
  • animata/container/scrolling-testimonials.tsx
  • animata/container/shift-tabs.stories.tsx
  • animata/container/shift-tabs.tsx
  • animata/fabs/speed-dial.stories.tsx
  • animata/fabs/speed-dial.tsx
  • animata/feature-cards/confirmation-message.stories.tsx
  • animata/feature-cards/confirmation-message.tsx
  • animata/feature-cards/content-scan.stories.tsx
  • animata/feature-cards/content-scan.tsx
  • animata/graphs/bar-chart.stories.tsx
  • animata/graphs/bar-chart.tsx
  • animata/graphs/commit-graph.stories.tsx
  • animata/graphs/commit-graph.tsx
  • animata/graphs/donut-chart.stories.tsx
  • animata/graphs/donut-chart.tsx
  • animata/graphs/gauge-chart.stories.tsx
  • animata/graphs/gauge-chart.tsx
  • animata/graphs/progress.stories.tsx
  • animata/graphs/progress.tsx
  • animata/graphs/ring-chart.stories.tsx
  • animata/graphs/ring-chart.tsx
  • animata/hero/hero-section-text-hover.stories.tsx
  • animata/hero/hero-section-text-hover.tsx
  • animata/hero/hero-section.stories.tsx
  • animata/hero/hero-section.tsx
  • animata/hero/product-features.stories.tsx
  • animata/hero/product-features.tsx
  • animata/hero/shape-shifter.stories.tsx
  • animata/hero/shape-shifter.tsx
  • animata/hero/slack-intro.stories.tsx
  • animata/icon/hover-interaction.stories.tsx
  • animata/icon/hover-interaction.tsx
  • animata/icon/icon-ripple.stories.tsx
  • animata/image/disclose-image.stories.tsx
  • animata/image/disclose-image.tsx
  • animata/image/image-box-shadow.stories.tsx
  • animata/image/image-box-shadow.tsx
  • animata/image/images-reveal.stories.tsx
  • animata/image/images-reveal.tsx
  • animata/image/photo-booth.stories.tsx
  • animata/image/photo-booth.tsx
  • animata/image/skew-image.stories.tsx
  • animata/image/skew-image.tsx
  • animata/image/tilted-cover.stories.tsx
  • animata/image/tilted-cover.tsx
  • animata/image/trailing-image.stories.tsx
  • animata/image/trailing-image.tsx
  • animata/image/zoom-image.stories.tsx
  • animata/image/zoom-image.tsx
  • animata/list/avatar-list.stories.tsx
  • animata/list/avatar-list.tsx
  • animata/list/flipping-cards.stories.tsx
  • animata/list/flipping-cards.tsx
  • animata/list/flower-menu.stories.tsx
  • animata/list/flower-menu.tsx
  • animata/list/menu-animation.stories.tsx
  • animata/list/menu-animation.tsx
  • animata/list/orbiting-items-3-d.stories.tsx
  • animata/list/orbiting-items-3-d.tsx
  • animata/list/orbiting-items.stories.tsx
  • animata/list/orbiting-items.tsx
  • animata/list/reveal-image.stories.tsx
  • animata/list/reveal-image.tsx
  • animata/list/transaction-list.stories.tsx
  • animata/list/transaction-list.tsx
  • animata/list/transition-list.stories.tsx
  • animata/list/transition-list.tsx
  • animata/overlay/modal.stories.tsx
  • animata/overlay/modal.tsx
  • animata/preloader/vertical-tiles.stories.tsx
  • animata/preloader/vertical-tiles.tsx
  • animata/progress/animatedtimeline.stories.tsx
  • animata/progress/animatedtimeline.tsx
  • animata/progress/spinner.stories.tsx
  • animata/progress/spinner.tsx
  • animata/section/pricing.stories.tsx
  • animata/section/pricing.tsx
  • animata/skeleton/code.stories.tsx
  • animata/skeleton/cookie-banner.stories.tsx
  • animata/skeleton/list.stories.tsx
  • animata/skeleton/receipt.stories.tsx
  • animata/skeleton/report.stories.tsx
  • animata/skeleton/wide-card.stories.tsx
  • animata/skeleton/wide-card.tsx
  • animata/text/animated-gradient-text.stories.tsx
  • animata/text/animated-gradient-text.tsx
  • animata/text/bold-copy.stories.tsx
  • animata/text/bold-copy.tsx
  • animata/text/circular-text.stories.tsx
  • animata/text/circular-text.tsx
  • animata/text/counter.stories.tsx
  • animata/text/counter.tsx
  • animata/text/cycle-text.stories.tsx
  • animata/text/cycle-text.tsx
  • animata/text/double-underline.stories.tsx
  • animata/text/double-underline.tsx
  • animata/text/gibberish-text.stories.tsx
  • animata/text/gibberish-text.tsx
  • animata/text/glitch-text.stories.tsx
  • animata/text/glitch-text.tsx
  • animata/text/jitter-text.stories.tsx
  • animata/text/jitter-text.tsx
  • animata/text/jumping-text-instagram.stories.tsx
  • animata/text/jumping-text-instagram.tsx
  • animata/text/mask-text.stories.tsx
  • animata/text/mask-text.tsx
  • animata/text/mirror-text.stories.tsx
  • animata/text/mirror-text.tsx
  • animata/text/scroll-reveal.stories.tsx
  • animata/text/scroll-reveal.tsx
  • animata/text/split-text.stories.tsx
  • animata/text/split-text.tsx
  • animata/text/staggered-letter.stories.tsx
  • animata/text/staggered-letter.tsx
  • animata/text/swap-text.stories.tsx
  • animata/text/swap-text.tsx
  • animata/text/text-border-animation.stories.tsx
  • animata/text/text-border-animation.tsx
  • animata/text/text-explode-imessage.stories.tsx
  • animata/text/text-explode-imessage.tsx
  • animata/text/text-flip.stories.tsx
  • animata/text/ticker.stories.tsx
  • animata/text/ticker.tsx
  • animata/text/typing-text.stories.tsx
  • animata/text/typing-text.tsx
  • animata/text/underline-hover-text.stories.tsx
  • animata/text/underline-hover-text.tsx
  • animata/text/wave-reveal.stories.tsx
  • animata/text/wave-reveal.tsx
  • animata/widget/alarm-clock.stories.tsx
  • animata/widget/alarm-clock.tsx
  • animata/widget/battery-level.stories.tsx
  • animata/widget/battery.stories.tsx
  • animata/widget/battery.tsx
  • animata/widget/calendar-event.stories.tsx
  • animata/widget/calendar-event.tsx
  • animata/widget/calendar-widget.stories.tsx
  • animata/widget/calendar-widget.tsx
  • animata/widget/calorie-counter.stories.tsx
  • animata/widget/calorie-counter.tsx
  • animata/widget/clock-with-photo.stories.tsx
  • animata/widget/clock-with-photo.tsx
  • animata/widget/cycling.stories.tsx
  • animata/widget/cycling.tsx
  • animata/widget/delivery-card.stories.tsx
  • animata/widget/delivery-card.tsx
  • animata/widget/direction-card.stories.tsx
  • animata/widget/direction-card.tsx
  • animata/widget/expense-tracker.stories.tsx
  • animata/widget/expense-tracker.tsx
  • animata/widget/flight-widget.stories.tsx
  • animata/widget/flight-widget.tsx
  • animata/widget/fund-widget.stories.tsx
  • animata/widget/fund-widget.tsx
  • animata/widget/live-score.stories.tsx
  • animata/widget/live-score.tsx
  • animata/widget/mobile-detail.stories.tsx
  • animata/widget/mobile-detail.tsx

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch hari-lamichhane/upgrade-to-latest

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.

Comment on lines +10 to +48
runs-on: ubuntu-latest
environment: v3-deployment
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install yarn
run: npm install -g yarn
- name: Restore cache
uses: actions/cache@v4
with:
path: |
.next/cache
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-
- name: Install dependencies
run: yarn install --immutable
- name: Build component previews
run: yarn storybook:build
- name: Build with Next.js
env:
NEXT_PUBLIC_APP_URL: ${{ vars.NEXT_PUBLIC_APP_URL }}
NEXT_PUBLIC_SUPABASE_URL: ${{ vars.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ vars.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
NEXT_PUBLIC_POSTHOG_KEY: ${{ vars.NEXT_PUBLIC_POSTHOG_KEY }}
NEXT_PUBLIC_POSTHOG_HOST: ${{ vars.NEXT_PUBLIC_POSTHOG_HOST }}
NEXT_PUBLIC_PLUNK_API_KEY: ${{ vars.NEXT_PUBLIC_PLUNK_API_KEY }}
run: yarn build
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy out --project-name=animata-v3 --branch=main
gitHubToken: ${{ secrets.GITHUB_TOKEN }}

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 6 days ago

To fix the problem, explicitly define a minimal permissions block so that the GITHUB_TOKEN used by this workflow/job is limited to read-only repository contents unless more is required. The safest pattern is to declare permissions at the workflow root (applies to all jobs) or at the deploy-v3 job level. Since there is only a single job and no evidence of needing write permissions (the job checks out code, builds, caches, and then deploys to Cloudflare using Cloudflare credentials), we can safely set contents: read as the only permission.

The best minimal change is to add a permissions block near the top of .github/workflows/deploy-v3.yml, right after the name: line (or before/after on:; all are valid) so that it applies to the entire workflow. No imports or additional methods are needed since this is just YAML configuration. Concretely, in .github/workflows/deploy-v3.yml, insert:

permissions:
  contents: read

between line 1 (name: Deploy v3) and line 3 (on:), keeping indentation consistent. This documents that the workflow only needs read access to repository contents and ensures the GITHUB_TOKEN is not given unnecessary write permissions.

Suggested changeset 1
.github/workflows/deploy-v3.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/deploy-v3.yml b/.github/workflows/deploy-v3.yml
--- a/.github/workflows/deploy-v3.yml
+++ b/.github/workflows/deploy-v3.yml
@@ -1,5 +1,8 @@
 name: Deploy v3
 
+permissions:
+  contents: read
+
 on:
   push:
     branches:
EOF
@@ -1,5 +1,8 @@
name: Deploy v3

permissions:
contents: read

on:
push:
branches:
Copilot is powered by AI and may make mistakes. Always verify output.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@claude fix

Cloudflare Pages defaults to Node 18.17.1, but Next.js 16 requires
Node >=20.9.0. The .node-version file is respected by Cloudflare's
build system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Mar 6, 2026

Deploying animata with  Cloudflare Pages  Cloudflare Pages

Latest commit: f83c244
Status: ✅  Deploy successful!
Preview URL: https://4931795f.animata.pages.dev
Branch Preview URL: https://hari-lamichhane-upgrade-to-l.animata.pages.dev

View logs

hari and others added 25 commits March 6, 2026 20:03
- Inline @Property and @Keyframes in AnimatedBorderTrail component so
  the CSS custom property animation works with TailwindCSS v4
- Remove leftover test files (testingo, navigation-menu) that broke
  storybook build due to missing @radix-ui/react-navigation-menu dep

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ensures component previews are always built during `yarn build`,
including on Cloudflare Pages direct builds where the build command
is just `yarn build`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Install @storybook/addon-docs to support autodocs in Storybook 10
- Run Next.js and Storybook dev server concurrently via `yarn dev`
- Use NEXT_PUBLIC_STORYBOOK_URL env var to point previews to Storybook
  dev server in development, falling back to /preview for production
- Add prebuild script to build static storybook for production builds
- Update all 162 MDX files from --docs to --primary story IDs
- Use viewMode=story for component preview iframes
- Fix border trail animation by inlining @Property for TailwindCSS v4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Next.js 16 uses Turbopack by default which skips the webpack velite
plugin. Run velite CLI directly: --watch mode for dev, one-shot for
prebuild. Fixes stale .velite cache causing --docs IDs to persist.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace bg-opacity-*, text-opacity-*, border-opacity-* with the
Tailwind v4 color/opacity modifier syntax (e.g. bg-gray-400/30).
Also move complex multi-layer box-shadows to inline styles for
algolia buttons since Tailwind v4 can't parse rgba() commas in
arbitrary shadow values.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Restore missing styles/storybook.css (lost in migration) which
  defines storybook-fix class and embedded preview styles
- Re-add storybook.css import to storybook preview config
- Replace -z-1 with z-0 in components — in Tailwind v3 -z-1 was not
  a default utility (no-op), but in v4 it generates z-index:-1 which
  pushes elements behind the parent background

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Marquee and animated-beam: inline @Keyframes and animation styles to
bypass @theme variable indirection broken in Storybook webpack context.
Jumping text: fix spring animation with keyframe arrays unsupported in
Motion v12.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…yping

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Switch embedded preview from story view to docs view with interactive
Controls. Add embedded class to body for proper CSS targeting, measure
full docs container height, and hide docs chrome in embedded mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add transparent background and no-grid globals to iframe URL. Hide
zoom bar and remove story preview borders in embedded mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tailwind v4 requires @Utility syntax instead of @layer utilities for
custom utilities with pseudo-element selectors to work properly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The step counter ::before pseudo-element uses position: absolute but
the h3 had no positioned ancestor, making the numbers invisible.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Read theme from URL globals parameter and apply matching Storybook
theme (light/dark) to the docs view so controls and chrome match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
resolvedTheme is undefined during SSR; wait for client mount so the
correct light/dark theme is passed to the storybook iframe. Also key
the iframe on theme so it remounts on theme change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Linter removed the semicolon causing max-width to be parsed as part
of the @apply directive, breaking the Storybook webpack build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use context.globals.theme in the decorator instead of manually parsing
URL query params. Storybook populates globals from the URL internally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Storybook globals context was unreliable for embedded iframes. Now
detect theme directly from URL (theme:dark) at module load time, and
also listen for postMessage from parent for live theme switching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the Storybook iframe embedding with direct dynamic imports of
story files. Renders the Primary story with its args and render
function inline, eliminating iframe theme sync and height issues.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Renders editable controls for boolean, number, and string props below
the component preview. Reads args/argTypes from the story module and
updates the rendered component live when props change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split preview and props editor into sibling elements so the preview's
overflow/absolute positioning isn't affected by the editor below it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
hari and others added 28 commits March 9, 2026 23:37
Remove redundant JSDoc comments, use cn() for className composition in
skew-image, remove stale eslint-disable comment, fix Tailwind v4
transition classes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
In Tailwind v4, transition-all now transitions ALL properties including
display and visibility which causes visual glitches. Replace with
transition which only covers common properties (color, background,
transform, opacity, shadow).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Convert all tailwind.config.js code blocks in component MDX docs to
Tailwind v4 CSS syntax: @Keyframes for animations, @theme for custom
values (--animate-*, --ease-*, --bg-*, --shadow-*). Remove color-only
config steps (foreground/background already global). Update setup docs
to note tailwindcss-animate is no longer needed in v4.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use bg-linear-to-bl (v4 syntax) in led-board, replace hardcoded
text-white with text-background in tilted-card for theme support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- bg-gradient-to-* → bg-linear-to-* (v4 gradient syntax)
- flex-grow → grow, flex-shrink → shrink (v4 naming)
- outline-none → outline-hidden (v4 accessibility change)
- Remove transform-gpu (GPU acceleration is default in v4)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Complete shape-shifter @Keyframes (was missing 20%/40%/80%/100%)
- Update PR template test command from npm run start to yarn dev
- Update setup.mdx: Framer Motion → Motion package, remove
  tailwind.config.js reference in troubleshooting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Components like ring-chart, donut-chart, grid, dot, zigzag,
subscribe-card, cycling, and shopping-list had empty or complex-only
args, making them invisible in the inline PropsEditor. Added their
primitive props (size, gap, width, color, title, etc.) to story args.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Audited all 21 component categories and added missing primitive props
to story args so they appear in the inline PropsEditor. Changes span
background, button, card, carousel, container, hero, image, list,
text, and widget categories (28 story files total).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a subtle dot pattern background to preview containers so
component content stands out visually against the preview area.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace div/p elements with button/span for proper semantics, add
explicit text-black for inactive tabs, and use item value as React
key instead of array index.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove invalid leading-2 class from stories, fix important modifier
syntax to v4 (! suffix), and clean up border-1 class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CalculateItemStyle was a function using hooks (useState, useEffect)
but called as a regular function inside render, violating Rules of
Hooks. Extract it as a proper OrbitingItem component. Also fix
storybook-fix → full-content class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adjust center icon z-index to z-1, use 0/3 range for orbiting items
instead of -1/1, and reduce back-scale to 0.9 for better 3D effect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix double-colon typo in group-hover/orbit::paused that broke the
pause-on-hover feature. Replace storybook-fix with full-content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add --animate-rotate-full theme variable so the animate-rotate-full
utility works. Replace arbitrary animate-[rotate-full_45s] with the
proper utility. Fix pause-on-hover using arbitrary property syntax.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use spring transitions, popLayout mode, semantic button elements,
consistent layoutId naming, and cleaner spacing/typography.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace transition with transition-all so font-size changes animate
on hover. Tailwind v4's transition utility no longer includes
font-size by default.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…eview

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…views

Replace storybook-fix with full-content. Add has-[.full-content]:overflow-auto
to preview containers so scrollable components like scroll-reveal work
instead of being clipped by overflow-hidden.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use after:transition-all instead of after:transition so height and
background-color changes animate on hover.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The opacity style is on the motion.span wrapper, not on the icon
element itself. Change CSS selectors to target .scroll-baby and
.scroll-file as children of the element with the opacity style.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The full-content class caused the preview wrapper to become scrollable
(overflow-auto), stealing scroll events from the component's own
scroll container. Without full-content, the preview stays
overflow-hidden and useScroll correctly tracks the inner container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…veal

Motion v12's useScroll with container ref wasn't triggering scroll
progress updates. Replace with a native scroll event listener that
manually updates a useMotionValue, which is more reliable across
rendering contexts like dynamic imports in ComponentPreview.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@hari hari merged commit 9fb760f into main Mar 9, 2026
6 checks passed
@hari hari deleted the hari-lamichhane/upgrade-to-latest branch March 9, 2026 19:33
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