diff --git a/apps/registry/registry/default/accordion/accordion.tsx b/apps/registry/registry/default/accordion/accordion.tsx index 6d5818a6..b5255ece 100644 --- a/apps/registry/registry/default/accordion/accordion.tsx +++ b/apps/registry/registry/default/accordion/accordion.tsx @@ -1,12 +1,6 @@ "use client"; -import { - createContext, - useCallback, - useContext, - useMemo, - useState, -} from "react"; +import { createContext, use, useCallback, useMemo, useState } from "react"; import type { ReactNode } from "react"; @@ -22,7 +16,7 @@ type AccordionContextValue = { const AccordionContext = createContext(null); function useAccordionContext(): AccordionContextValue { - const context = useContext(AccordionContext); + const context = use(AccordionContext); if (!context) { throw new Error("AccordionItem must be used within an Accordion"); } diff --git a/apps/registry/registry/default/activity-heatmap/activity-heatmap.tsx b/apps/registry/registry/default/activity-heatmap/activity-heatmap.tsx index 566cb81c..a0e7d20a 100644 --- a/apps/registry/registry/default/activity-heatmap/activity-heatmap.tsx +++ b/apps/registry/registry/default/activity-heatmap/activity-heatmap.tsx @@ -204,40 +204,33 @@ function HeatmapGrid({ ); } -export const ActivityHeatmap = React.forwardRef< - HTMLDivElement, - ActivityHeatmapProps ->( - ( - { - className, - data, - description, - endDate = new Date(), - title = "Activity heatmap", - weeks = 12, - ...props - }, - ref, - ) => { - const normalizedEndDate = normalizeDate(endDate); - const gridData = getGridData(data, normalizedEndDate, weeks); - - return ( -
-
-

{title}

- {description ? ( -

{description}

- ) : null} -
+export const ActivityHeatmap = ({ + className, + data, + description, + endDate = new Date(), + ref, + title = "Activity heatmap", + weeks = 12, + ...props +}: ActivityHeatmapProps & React.RefAttributes) => { + const normalizedEndDate = normalizeDate(endDate); + const gridData = getGridData(data, normalizedEndDate, weeks); -
- -
+ return ( +
+
+

{title}

+ {description ? ( +

{description}

+ ) : null} +
+ +
+
- ); - }, -); +
+ ); +}; ActivityHeatmap.displayName = "ActivityHeatmap"; diff --git a/apps/registry/registry/default/activity-log/activity-log.tsx b/apps/registry/registry/default/activity-log/activity-log.tsx index e89f8b98..362bef06 100644 --- a/apps/registry/registry/default/activity-log/activity-log.tsx +++ b/apps/registry/registry/default/activity-log/activity-log.tsx @@ -1,6 +1,6 @@ "use client"; -import { forwardRef, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { ArrowRight, ChevronLeft, ChevronRight } from "lucide-react"; @@ -294,63 +294,59 @@ function ActivityLogBody({ ); } -const ActivityLog = forwardRef( - ( - { - className, - defaultPage = 1, - description, - emptyMessage = "No activity recorded yet.", - items, - onPageChange, - page, - pageSize = 5, - title = "Activity log", - ...props - }, - ref, - ) => { - const totalPages = Math.max(1, Math.ceil(items.length / pageSize)); - const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage); - const currentPage = Math.min( - Math.max(page ?? uncontrolledPage, 1), - totalPages, - ); - const pageNumbers = useMemo( - () => buildPageNumbers(currentPage, totalPages), - [currentPage, totalPages], - ); +const ActivityLog = ({ + className, + defaultPage = 1, + description, + emptyMessage = "No activity recorded yet.", + items, + onPageChange, + page, + pageSize = 5, + ref, + title = "Activity log", + ...props +}: ActivityLogProps & React.RefAttributes) => { + const totalPages = Math.max(1, Math.ceil(items.length / pageSize)); + const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage); + const currentPage = Math.min( + Math.max(page ?? uncontrolledPage, 1), + totalPages, + ); + const pageNumbers = useMemo( + () => buildPageNumbers(currentPage, totalPages), + [currentPage, totalPages], + ); - function handlePageChange(nextPage: number) { - if (page === undefined) { - setUncontrolledPage(nextPage); - } - onPageChange?.(nextPage); + function handlePageChange(nextPage: number) { + if (page === undefined) { + setUncontrolledPage(nextPage); } + onPageChange?.(nextPage); + } - return ( - - + + + - - - - - ); - }, -); + + + ); +}; ActivityLog.displayName = "ActivityLog"; diff --git a/apps/registry/registry/default/agent-activity/agent-activity.tsx b/apps/registry/registry/default/agent-activity/agent-activity.tsx index 0f682da4..ce36a479 100644 --- a/apps/registry/registry/default/agent-activity/agent-activity.tsx +++ b/apps/registry/registry/default/agent-activity/agent-activity.tsx @@ -3,10 +3,9 @@ import { type ComponentPropsWithoutRef, createContext, - forwardRef, type ReactNode, + use, useCallback, - useContext, useId, useMemo, useState, @@ -155,47 +154,48 @@ const ACTIVITY_LIVE_REGION_ROLE: Record = * * @public */ -export const AgentActivity = forwardRef( - (props, ref) => { - const { - children, - className, - elapsed, - labels, - status = "idle", - ...rest - } = props; - const resolvedLabels = { ...DEFAULT_LABELS, ...labels }; - return ( -
-
-

- {resolvedLabels.activity} -

- {elapsed ? ( - - {elapsed} - - ) : null} -
-
    {children}
-
- ); - }, -); +export const AgentActivity = ( + props: AgentActivityProps & React.RefAttributes, +) => { + const { + children, + className, + elapsed, + labels, + ref, + status = "idle", + ...rest + } = props; + const resolvedLabels = { ...DEFAULT_LABELS, ...labels }; + return ( +
+
+

+ {resolvedLabels.activity} +

+ {elapsed ? ( + + {elapsed} + + ) : null} +
+
    {children}
+
+ ); +}; AgentActivity.displayName = "AgentActivity"; /** @@ -314,68 +314,66 @@ function StepRow({ ); } -export const AgentStep = forwardRef( - (props, ref) => { - const { - children, - className, - defaultOpen = true, - icon, - status, - ...rest - } = props; - const split = useMemo(() => splitChildren(children), [children]); - const palette = STATUS_CLASSES[status]; - const hasDetails = split.body.length > 0; - const [open, setOpen] = useState(defaultOpen); - const detailsId = useId(); - - const handleToggle = useCallback(() => { - setOpen((value) => !value); - }, []); - - const contextValue = useMemo( - () => ({ status }), - [status], - ); - const resolvedIcon = icon ?? DEFAULT_STATUS_ICON[status]; - - return ( -
  • - - - {hasDetails && open ? ( -
    -
    {split.body}
    -
    - ) : null} -
    -
  • - ); - }, -); +export const AgentStep = ( + props: AgentStepProps & React.RefAttributes, +) => { + const { + children, + className, + defaultOpen = true, + icon, + ref, + status, + ...rest + } = props; + const split = useMemo(() => splitChildren(children), [children]); + const palette = STATUS_CLASSES[status]; + const hasDetails = split.body.length > 0; + const [open, setOpen] = useState(defaultOpen); + const detailsId = useId(); + + const handleToggle = useCallback(() => { + setOpen((value) => !value); + }, []); + + const contextValue = useMemo(() => ({ status }), [status]); + const resolvedIcon = icon ?? DEFAULT_STATUS_ICON[status]; + + return ( +
  • + + + {hasDetails && open ? ( +
    +
    {split.body}
    +
    + ) : null} +
    +
  • + ); +}; AgentStep.displayName = "AgentStep"; /** @@ -390,10 +388,11 @@ export type AgentStepTitleProps = ComponentPropsWithoutRef<"p">; * * @public */ -export const AgentStepTitle = forwardRef< - HTMLParagraphElement, - AgentStepTitleProps ->(({ className, ...rest }, ref) => ( +export const AgentStepTitle = ({ + className, + ref, + ...rest +}: AgentStepTitleProps & React.RefAttributes) => (

    -)); +); AgentStepTitle.displayName = "AgentStepTitle"; /** @@ -417,16 +416,17 @@ export type AgentStepDurationProps = ComponentPropsWithoutRef<"span">; * * @public */ -export const AgentStepDuration = forwardRef< - HTMLSpanElement, - AgentStepDurationProps ->(({ className, ...rest }, ref) => ( +export const AgentStepDuration = ({ + className, + ref, + ...rest +}: AgentStepDurationProps & React.RefAttributes) => ( -)); +); AgentStepDuration.displayName = "AgentStepDuration"; /** @@ -446,10 +446,13 @@ export type AgentStepProgressProps = { * * @public */ -export const AgentStepProgress = forwardRef< - HTMLDivElement, - AgentStepProgressProps ->(({ className, label = "Step progress", value, ...rest }, ref) => { +export const AgentStepProgress = ({ + className, + label = "Step progress", + ref, + value, + ...rest +}: AgentStepProgressProps & React.RefAttributes) => { const clamped = Math.max(0, Math.min(100, value)); return (

    ); -}); +}; AgentStepProgress.displayName = "AgentStepProgress"; /** @@ -484,14 +487,16 @@ export type AgentStepDetailProps = ComponentPropsWithoutRef<"div">; * * @public */ -export const AgentStepDetail = forwardRef( - ({ className, ...rest }, ref) => ( -
    - ), +export const AgentStepDetail = ({ + className, + ref, + ...rest +}: AgentStepDetailProps & React.RefAttributes) => ( +
    ); AgentStepDetail.displayName = "AgentStepDetail"; @@ -501,5 +506,5 @@ AgentStepDetail.displayName = "AgentStepDetail"; * @public */ export function useAgentStepStatus(): AgentStepStatus { - return useContext(StepContext).status; + return use(StepContext).status; } diff --git a/apps/registry/registry/default/ai-artifact/ai-artifact.tsx b/apps/registry/registry/default/ai-artifact/ai-artifact.tsx index 784648c0..51afa18a 100644 --- a/apps/registry/registry/default/ai-artifact/ai-artifact.tsx +++ b/apps/registry/registry/default/ai-artifact/ai-artifact.tsx @@ -3,10 +3,9 @@ import { type ComponentPropsWithoutRef, createContext, - forwardRef, type ReactNode, + use, useCallback, - useContext, useMemo, useState, } from "react"; @@ -114,7 +113,7 @@ const AIArtifactContext = * @public */ export function useAIArtifact(): AIArtifactContextValue { - return useContext(AIArtifactContext); + return use(AIArtifactContext); } function pickExtension(type: AIArtifactType, language: string): string { @@ -375,62 +374,63 @@ function useArtifactController( ); } -export const AIArtifact = forwardRef( - (props, ref) => { - const { - children, - className, - defaultFullscreen = false, - filename, - labels, - language = "", - onEdit, - subtitle, - title, - type = "code", - value = "", - ...rest - } = props; - const resolvedLabels = useMemo( - () => ({ ...DEFAULT_LABELS, ...labels }), - [labels], - ); - const contextValue = useArtifactController({ - defaultFullscreen, - filename, - labels: resolvedLabels, - language, - onEdit, - title, - type, - value, - }); - - return ( - -
    - - {children} -
    -
    - ); - }, -); +export const AIArtifact = ( + props: AIArtifactProps & React.RefAttributes, +) => { + const { + children, + className, + defaultFullscreen = false, + filename, + labels, + language = "", + onEdit, + ref, + subtitle, + title, + type = "code", + value = "", + ...rest + } = props; + const resolvedLabels = useMemo( + () => ({ ...DEFAULT_LABELS, ...labels }), + [labels], + ); + const contextValue = useArtifactController({ + defaultFullscreen, + filename, + labels: resolvedLabels, + language, + onEdit, + title, + type, + value, + }); + + return ( + +
    + + {children} +
    +
    + ); +}; AIArtifact.displayName = "AIArtifact"; /** @@ -438,10 +438,11 @@ AIArtifact.displayName = "AIArtifact"; * * @public */ -export const AIArtifactToolbar = forwardRef< - HTMLDivElement, - ComponentPropsWithoutRef<"div"> ->(({ className, ...rest }, ref) => ( +export const AIArtifactToolbar = ({ + className, + ref, + ...rest +}: ComponentPropsWithoutRef<"div"> & React.RefAttributes) => (
    -)); +); AIArtifactToolbar.displayName = "AIArtifactToolbar"; type ToolbarButtonProps = Omit< @@ -465,10 +466,12 @@ type ToolbarButtonProps = Omit< * * @public */ -export const AIArtifactCopyButton = forwardRef< - HTMLButtonElement, - ToolbarButtonProps ->(({ className, onClick, ...rest }, ref) => { +export const AIArtifactCopyButton = ({ + className, + onClick, + ref, + ...rest +}: ToolbarButtonProps & React.RefAttributes) => { const { copied, copy, labels } = useAIArtifact(); const handleClick = useCallback( (event: React.MouseEvent) => { @@ -496,7 +499,7 @@ export const AIArtifactCopyButton = forwardRef< )} ); -}); +}; AIArtifactCopyButton.displayName = "AIArtifactCopyButton"; /** @@ -505,10 +508,12 @@ AIArtifactCopyButton.displayName = "AIArtifactCopyButton"; * * @public */ -export const AIArtifactEditButton = forwardRef< - HTMLButtonElement, - ToolbarButtonProps ->(({ className, onClick, ...rest }, ref) => { +export const AIArtifactEditButton = ({ + className, + onClick, + ref, + ...rest +}: ToolbarButtonProps & React.RefAttributes) => { const { hasOnEdit, labels, onEdit } = useAIArtifact(); const handleClick = useCallback( (event: React.MouseEvent) => { @@ -533,7 +538,7 @@ export const AIArtifactEditButton = forwardRef<