Relationship Review

v0.4.8

Full-page relationship review block with an ER diagram, field metadata panel, review queue, and add/edit dialogs.

View as Markdown

Preview

Open full page ↗

Install & usage

npx shadcn@latest add @signalos/relationships-01

Pulls the page source plus its widget dependencies (@signalos/tokens, @signalos/utils, @signalos/button, @signalos/badge, @signalos/select, @signalos/textarea, @signalos/form-dialog, @signalos/split-panel, @signalos/page-header, @signalos/tooltip, @signalos/dialog) into your app - you own the copy. Requires access.

usage
// after: npx shadcn@latest add @signalos/relationships-01
// mount the pulled page in a route, e.g. src/app/semantics-details/page.tsx
import RelationshipReview from "@/components/blocks/relationships-01/RelationsShipReview"

export default function Page() {
  return <RelationshipReview />
}

Props

InternalRelationship

PropTypeDefaultDescription
from_table*string-
from_column*string-
to_table*string-
to_column*string-
relationship_type*RelationshipType-
confidence*number-
detection_method*string-
explanationstring | undefined-
review_originstring | undefined-

RelationshipReviewItem

PropTypeDefaultDescription
index*number-
status*"accepted" | "flagged" | "deleted"-
feedback*string-
edits*Partial<InternalRelationship>-

RelationshipReviewDecision

PropTypeDefaultDescription
status*"accepted" | "flagged"-
feedback*string-
edits*Partial<InternalRelationship>-

FieldOverride

PropTypeDefaultDescription
is_pii*boolean-
sensitivity*SensitivityLevel-

RelationshipAddValues

PropTypeDefaultDescription
from_table*string-
from_column*string-
to_table*string-
to_column*string-
relationship_type*RelationshipType-
explanationstring | undefined-

RelationshipItemEdits

PropTypeDefaultDescription
from_table*string-
from_column*string-
to_table*string-
to_column*string-
relationship_type*RelationshipType-
explanationstring | undefined-

SubmitRelationshipReviewPayload

PropTypeDefaultDescription
action*"confirm" | "retry" | "add_item"-
itemsRelationshipReviewItem[] | undefined-
field_overridesRecord<string, FieldOverride> | undefined-
connector_idstring | undefined-
item_editsRelationshipAddValues | undefined-

AddRelationshipPayload

PropTypeDefaultDescription
action*"add_item"-
connector_id*string-
feedbackstring | undefined-
item_edits*RelationshipItemEdits-

AddRelationshipResponse

PropTypeDefaultDescription
statusstring | undefined-
indexnumber | undefined-
itemInternalRelationship | undefined-
soft_warningstring | undefined-

RelationshipFdeInput

PropTypeDefaultDescription
items*RelationshipReviewItem[]-

RelationshipGraphNode

PropTypeDefaultDescription
id*string-
label*string-
x*number-
y*number-
type*"table"-

RelationshipGraphEdge

PropTypeDefaultDescription
from*string-
to*string-
label*string-
confidence*number-

SchemaColumn

PropTypeDefaultDescription
column_name*string-
data_type*string-
is_primary_keyboolean | undefined-
semantic_labelstring | undefined-
sensitivitySensitivityLevel | undefined-

SchemaTable

PropTypeDefaultDescription
table_name*string-
columns*SchemaColumn[]-

EditRelationshipFormState

PropTypeDefaultDescription
from_table*string-
from_column*string-
to_table*string-
to_column*string-
relationship_type*RelationshipType-

AddRelationshipFormState

PropTypeDefaultDescription
from_table*string-
from_column*string-
to_table*string-
to_column*string-
relationship_type*RelationshipType-
explanation*string-

AddRelationshipFormErrors

PropTypeDefaultDescription
from_tablestring | undefined-
from_columnstring | undefined-
to_tablestring | undefined-
to_columnstring | undefined-

ResolvedColumnField

PropTypeDefaultDescription
column_name*string-
data_type*string-
is_primary_keyboolean | undefined-
semantic_labelstring | undefined-
sensitivity*SensitivityLevel-
isPii*boolean-
override*FieldOverride | undefined-

Supporting types

export type SensitivityLevel =
  "none" | "low" | "medium" | "high" | "pii" | "phi"
export type RelationshipType =
  | "references"
  | "has_many"
  | "belongs_to"
  | "many_to_many"
  | "one_to_one"
  | "measures"
  | "targets"
  | "sponsors"
  | "conducted_at"
  | "co_occurs"
  | "related_to"
export type CreateInternalRelationshipPayload = InternalRelationship

More Semantics Stages variants

Changelog

0.4.8

  • Global css update

0.4.7

  • Replace raw scale token classes with semantic tokens (text-text-error, bg-bg-error, border-border-warning, border-border-info, etc.) in RelationshipsFieldsPanel and RelationshipsQueue to respect client theme overrides.

0.4.6

  • Replace raw scale token classes with semantic tokens (text-text-error, bg-bg-success, border-border-warning, etc.) to respect client theme overrides.

0.4.5

  • RelationshipsHeader: replace single Dismiss button in error banner with Retry + Dismiss pair; Retry calls onSubmit.
  • RelationshipsHeader: add data-testid="relationship-retry-button" to the new Retry button.
  • EditRelationshipDialog: replace plain div footer containers with DialogFooter; import DialogFooter from @/components/ui/dialog.
  • EditRelationshipDialog: remove contentClassName="max-h-[85vh] overflow-y-auto" from FormDialog.
  • ERDiagram: add data-testid="er-diagram-canvas" to the root container div.
  • RelationsShipReview: remove space-y-5 from the detail panel wrapper div.

0.4.4

  • Wrap relationship queue item table and column labels in Tooltip so truncated names are fully visible on hover.

0.4.3

  • Remove stray DialogFooter import from EditRelationshipDialog; replace with plain flex div since footer is already passed as ReactNode to FormDialog.
  • Remove @signalos/dialog from registryDependencies — both dialogs use FormDialog only.

0.4.1

  • Fix file casing: rename Relationships.types.ts to match PascalCase import paths.

0.4.0

  • Fix ERDiagram to use controlled nodes/edges props directly on ReactFlow, removing useNodesState/useEdgesState which silently discarded prop updates after first render.

0.3.1

0.3.0

  • Replace grid grid-cols-1 lg:grid-cols-12 layout with SplitPanel widget for the list/detail split.
  • Queue (RelationshipsQueue) moved to the SplitPanel list slot; ER diagram + fields panel moved to the detail slot.
  • Add @signalos/split-panel to registryDependencies.

0.2.0

  • Refactor: lift all business logic, form state, validation, and graph construction into RelationshipReview (parent).
  • EditRelationshipDialog is now fully presentational — receives controlled form values, column lists, and validation flags via props.
  • RelationshipAddDialog is now fully presentational — receives controlled form state, column lists, and validation errors via props.
  • ERDiagram is now fully presentational — receives pre-built nodes and edges via props; graph construction moved to parent.
  • RelationshipsFieldsPanel now receives resolvedColumns (pre-computed field overrides and PII status) instead of deriving them internally.
  • Added SchemaTable, SchemaColumn, EditRelationshipFormState, AddRelationshipFormState, AddRelationshipFormErrors, and ResolvedColumnField to Relationships.types.ts.

0.1.0

  • Initial release: Relationship Review block with ER diagram, field metadata panel, review queue, and add/edit dialogs.
  • Dialogs use the FormDialog widget.
  • All state and handler logic wired up in RelationsShipReview.