/** @jsxImportSource react */ import React from "react"; // Function component export function ReactFunctionComponent(props: { title: string; children?: React.ReactNode }) { return (

{props.title}

{props.children}
); } // Function component with hooks export function ReactCounterComponent(props: { initialCount?: number }) { const [count, setCount] = React.useState(props.initialCount ?? 0); return (
{count}
); } // Class component export class ReactClassComponent extends React.Component< { label: string; children?: React.ReactNode }, { active: boolean } > { constructor(props: { label: string; children?: React.ReactNode }) { super(props); this.state = { active: false }; } render() { return (
{this.props.children}
); } } // Pure component export class ReactPureComponent extends React.PureComponent<{ value: string }> { render() { return {this.props.value}; } } // Function component with useRef and useEffect export function ReactRefEffectComponent(props: { onMount?: (element: HTMLDivElement | null) => void }) { const divRef = React.useRef(null); const mountedRef = React.useRef(false); React.useEffect(() => { mountedRef.current = true; props.onMount?.(divRef.current); return () => { mountedRef.current = false; }; }, []); return (
Component with ref and effect
); } // Function component with useEffect that updates state export function ReactEffectStateComponent(props: { value: string }) { const [processed, setProcessed] = React.useState(""); const renderCountRef = React.useRef(0); React.useEffect(() => { setProcessed(`Processed: ${props.value}`); }, [props.value]); renderCountRef.current += 1; return (
{processed} {renderCountRef.current}
); } // Component for testing prop translation export function ReactPropsComponent(props: { text: string; count: number; enabled: boolean; tags?: string[]; onClick?: () => void; }) { return (
{props.text} {props.count} {props.enabled ? "yes" : "no"} {props.tags && {props.tags.join(", ")}} {props.onClick && }
); }