Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
π Add Experimental SSR-Safe zeroSSR.onClick() Runtime
Summary
This PR introduces an experimental 300B runtime that enables click-based UI state mutation in server components β no use client, no re-renders, and fully compatible with Tailwindβs data attribute variants.
βΈ»
β Features Added
β’activateZeroUiRuntime(variantKeyMap):
β’Adds a global click listener.
β’Handles data-ui="global:key(val1,val2,...)" and data-ui="scoped:key(val1,val2,...)".
β’Cycles values on the data-* attribute target (either body or closest matching ancestor).
β’zeroSSR.onClick() / scopedZeroSSR.onClick():
β’Generates proper data-ui attributes as JSX props.
β’Validates kebab-case keys and non-empty value arrays (in dev).
β’Keeps server components static and interactive.
βΈ»
π Files Added
β’ packages/core/src/experimental/index.ts
β’ packages/core/src/experimental/runtime.ts
β’ packages/core/src/experimental/README.md (module-level docs)
βΈ»
π§ͺ Usage Example
import { zeroSSR } from '@react-zero-ui/experimental';
βΈ»
π Developer Notes
β’ Runtime is opt-in and treeshakable.
β’ Requires calling activateZeroUiRuntime() with the generated variantKeyMap.
β’ Designed for use in Next.js 13+/RSC environments where client components are costly.
βΈ»
π§ Motivation
Many devs want interactivity without sacrificing RSC performance. This PR unlocks a middle-ground: static UI components powered by Tailwind + data-attributes, enhanced with click-based transitions.
βΈ»