Content Profile Review
v0.4.2Full-page read-only block that displays an auto-generated structural content profile, organised into navigable sections with rich field rendering.
Preview
Install & usage
npx shadcn@latest add @signalos/content-profile-01Pulls the page source plus its widget dependencies (@signalos/tokens, @signalos/utils, @signalos/badge, @signalos/skeleton, @signalos/tooltip, @signalos/split-panel) into your app - you own the copy. Requires access.
usage
// after: npx shadcn@latest add @signalos/content-profile-01
// mount the pulled page in a route, e.g. src/app/semantics-details/page.tsx
import ContentProfileReview from "@/components/blocks/content-profile-01/ContentProfileReview"
export default function Page() {
return <ContentProfileReview />
}Props
ContentProfileSection
| Prop | Type | Default | Description |
|---|---|---|---|
| key* | string | - | Unique key for the section, used as React key and identifier. |
| title* | string | - | Human-readable section title. |
| data* | Record<string, unknown> | - | Key–value map of fields to render within the section. |
ContentProfileReviewProps
| Prop | Type | Default | Description |
|---|---|---|---|
| sections* | ContentProfileSection[] | - | Sections to display in the sidebar and detail panel. |
| completedAt | string | null | undefined | - | ISO timestamp of when the stage was completed. Omit to hide the date. |
| isConfirmed | boolean | undefined | false | When true, renders the confirmed banner and locks the view read-only. |
| isLoading | boolean | undefined | false | Shows a full-page skeleton while profile data is loading. |
| selectedSectionIndex | number | undefined | 0 | Index of the currently selected section. When omitted the component manages selection internally. |
| onSectionChange | ((index: number) => void) | undefined | - | Called with the new index when the user selects a section. Required to make selection fully controlled. |
| actionButtons | ReactNode | - | Action buttons rendered in the page header (e.g. Rerun, Reset). |
| className | string | undefined | - | |
| data-testid | string | undefined | - | Test identifier rendered as `data-testid` on the root element. |
More Semantics Stages variants
Changelog
0.4.2
- Fix cross-item imports to use canonical @/components paths; add missing signalos.category to manifests.
0.4.1
- Fix file casing: rename shipped type files to PascalCase to match import paths.
0.4.0
- Add
selectedSectionIndexandonSectionChangeprops to make section selection fully controlled. Callers that omit both props retain the previous uncontrolled behaviour (selection starts at index 0 and is managed internally). UpdateContentProfileReview.preview.tsxscenarios to own selection state and pass it via these props.
0.3.0
- Replace hand-rolled sidebar/detail layout with
SplitPanel,SplitPanelListHeader, andSplitPanelListItemwidgets. Add@signalos/split-panelto registry dependencies. - Derive
data-testidvalues for the split panel and each section nav item from the rootdata-testidprop.
0.2.0
- Breaking: extract
ContentProfileSectionandContentProfileReviewPropsintoContentProfileReview.types.ts; update any direct interface imports to use the types file. - Fix
registry-item.json: correct title, description, dependency list (remove unused primitives), and point the types file entry at.types.ts(was.types.tsx). - Add
ContentProfileReview.preview.tsxwith four catalog scenarios: default, confirmed, loading, and empty. - Add
ContentProfileReview.test.tsxcovering default render, loading skeleton, empty state, section switching, confirmed banner, andactionButtonsslot.
0.1.1
- Initial block: read-only content profile display with collapsible section sidebar, rich recursive field rendering, confirmed banner, and loading skeleton.