{component.name}
#{component.deniedReason ?? component.description}
)} {isExpanded && ("use client";
import { useEffect, useMemo, useState } from "react";
import { buildCustomJsxComponentUsageExample } from "@homarr/custom-widgets/catalog-example";
import type {
CustomJsxAuthoringCatalog,
CustomJsxComponentApi,
CustomJsxPropDescriptor,
} from "@homarr/custom-widgets/catalog";
import { CustomWidgetCodeExample } from "./custom-widget-code";
import styles from "./custom-jsx-component-reference.module.css";
type ComponentCatalog = CustomJsxAuthoringCatalog;
type CatalogComponent = CustomJsxComponentApi;
type CatalogProp = CustomJsxPropDescriptor;
const PAGE_SIZE = 40;
export function CustomJsxComponentReference() {
return
Release-matched static catalog
This browser reads the same versioned JSON artifact used by offline authoring. It never imports or executes the listed component objects.
Every available component also receives these {catalog.globalProps.length} generated global, ARIA, data, and safe style props. Component cards below list only their component-specific additions.
{component.deniedReason ?? component.description}
)} {isExpanded && (
bind stores a temporary {component.bind.type} input. Initialize it with{" "}
{component.bind.initialProp}.
This component does not expose a temporary-input adapter.
)} {component.subcomponents.length > 0 && (
Subcomponents:{" "}
{component.subcomponents.map((name, index) => (
{index > 0 && ", "}
{name}
))}
{prop.name} is blocked: {prop.reason}
No component-specific props are exposed.
) : (| Prop | Type | Required | Known values | Description |
|---|---|---|---|---|
{prop.name}
|
{types[prop.typeRef] ?? "unknown"}
|
{prop.required ? Yes : "No"} |
{prop.literalValues?.length ? (
{prop.literalValues.map(formatLiteral).join(" | ")}
) : (
—
)}
|
{prop.description ?? —} |