# Glossary Page (`glossary-01`) - SignalOS page block

> Glossary review page: a split panel listing a pipeline's glossary terms beside a per-term editor, with accept/reject decisions, inline edits, deletion, and an add-term dialog.

- **Version:** 0.2.8
- **Kind:** block (group: semantics-details) · **Category:** pages
- **Install:** `npx shadcn@latest add @signalos/glossary-01`
- **Registry dependencies (pulled automatically):** @signalos/tokens, @signalos/utils, @signalos/button, @signalos/page-header, @signalos/textarea, @signalos/badge, @signalos/checkbox, @signalos/command, @signalos/input, @signalos/label, @signalos/popover, @signalos/progress, @signalos/select, @signalos/skeleton, @signalos/tooltip, @signalos/split-panel, @signalos/dialog
- **npm dependencies:** lucide-react@^0.468.0, @xyflow/react@^12.0.0
- **Files installed:** `src/components/blocks/glossary-01/Glossary.tsx`, `src/components/blocks/glossary-01/Glossary.types.ts`, `src/components/blocks/glossary-01/components/GlossaryAddDialog.tsx`, `src/components/blocks/glossary-01/components/GlossaryHeader.tsx`, `src/components/blocks/glossary-01/components/GlossaryTermDetail.tsx`, `src/components/blocks/glossary-01/components/GlossaryTermList.tsx`

## Access

This is a private registry: pulling source requires a `SIGNALOS_REGISTRY_TOKEN`
(GitHub fine-grained PAT with read access to the signal-widgets repo) and an
`@signalos` entry in components.json `"registries"`. Previews and this document are public.

## Usage

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

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

## Props

### `GlossaryTerm`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `term` | `string` | yes | - |  |
| `definition` | `string` | yes | - |  |
| `synonyms` | `string[] \| undefined` | no | - |  |
| `mapped_entity` | `string \| undefined` | no | - |  |
| `source` | `string \| undefined` | no | - |  |
| `owner_team` | `string \| undefined` | no | - |  |
| `domain_context` | `string \| undefined` | no | - |  |
| `review_origin` | `string \| undefined` | no | - |  |

### `GlossaryReviewItem`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `index` | `number` | yes | - |  |
| `status` | `"accepted" \| "flagged" \| "deleted"` | yes | - |  |
| `feedback` | `string` | yes | - |  |
| `edits` | `Partial<GlossaryTerm>` | yes | - |  |

### `TermDecision`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `status` | `"accepted" \| "flagged"` | yes | - |  |
| `feedback` | `string` | yes | - |  |
| `edits` | `Partial<GlossaryTerm>` | yes | - |  |

### `GlossaryAddValues`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `term` | `string` | yes | - |  |
| `definition` | `string` | yes | - |  |
| `synonyms` | `string[]` | yes | - |  |
| `mapped_entity` | `string \| undefined` | no | - |  |
| `owner_team` | `string` | yes | - |  |

### `GlossaryItemEdits`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `term` | `string` | yes | - |  |
| `definition` | `string` | yes | - |  |
| `synonyms` | `string[]` | yes | - |  |
| `mapped_entity` | `string \| undefined` | no | - |  |
| `owner_team` | `string \| undefined` | no | - |  |

### `SubmitGlossaryReviewPayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `action` | `"confirm" \| "retry" \| "add_item"` | yes | - |  |
| `items` | `GlossaryReviewItem[] \| undefined` | no | - |  |
| `connector_id` | `string \| undefined` | no | - |  |
| `item_edits` | `GlossaryAddValues \| undefined` | no | - |  |

### `AddGlossaryPayload`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `action` | `"add_item"` | yes | - |  |
| `connector_id` | `string` | yes | - |  |
| `feedback` | `string \| undefined` | no | - |  |
| `item_edits` | `GlossaryItemEdits` | yes | - |  |

### `AddGlossaryResponse`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `status` | `string \| undefined` | no | - |  |
| `index` | `number \| undefined` | no | - |  |
| `item` | `GlossaryTerm \| undefined` | no | - |  |
| `soft_warning` | `string \| undefined` | no | - |  |

### `CreateGlossaryTermPayload`

```ts
export type CreateGlossaryTermPayload = GlossaryTerm
```

### `GlossaryFdeInput`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `items` | `GlossaryReviewItem[]` | yes | - |  |

### `TermEditState`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `definition` | `string` | yes | - |  |
| `synonyms` | `string` | yes | - |  |
| `selectedNamespace` | `string` | yes | - |  |
| `selectedTable` | `string` | yes | - |  |

### `CatalogData`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `namespaces` | `string[]` | yes | - |  |
| `tablesByNamespace` | `Record<string, string[]>` | yes | - |  |
| `allTables` | `string[]` | yes | - |  |
| `hasNamespaces` | `boolean` | yes | - |  |

### `GlossaryAddFormState`

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `term` | `string` | yes | - |  |
| `definition` | `string` | yes | - |  |
| `synonyms` | `string` | yes | - |  |
| `selectedNamespace` | `string` | yes | - |  |
| `selectedTable` | `string` | yes | - |  |
| `owner_team` | `string` | yes | - |  |

### `GlossaryAddFormErrors`

```ts
export type GlossaryAddFormErrors = Partial<
  Record<keyof GlossaryAddFormState, string>
>
```

## Changelog

## 0.2.8

- Replace the copied placeholder description with one that actually describes this block; the registry description is what the agent skill shows as "pick it when".

## 0.2.7

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

## 0.2.6

- Replace `FormDialog` + `TextField` widgets in `GlossaryAddDialog` with raw shadcn `Dialog`, `Input`, and `Label` primitives; removes `@signalos/form-dialog` and `@signalos/text-field` from registry dependencies.
- Add `data-testid="glossary-desktop-panel"` wrapper div around `SplitPanel` in `Glossary.tsx`.
- Add `data-testid="glossary-term-list"` to the root div in `GlossaryTermList`.
- Add `Retry` button alongside `Dismiss` in `GlossaryHeader` error banner; wired to `onSubmit`.

## 0.2.5

- Replace Label + Input with TextField widget in GlossaryAddDialog for Term, Synonyms, and Owner team fields; validation errors now flow through TextField's built-in error prop.

## 0.2.4

- Replace raw shadcn Dialog in GlossaryAddDialog with FormDialog widget; fix raw color-scale tokens to semantic tokens; swap `@signalos/dialog` for `@signalos/form-dialog`.

## 0.2.3

- Content updates.

## 0.2.2

- Content updates.

# glossary-01
## 0.2.1
## 0.2.0

- Refactor: lift all add-dialog form state, validation, synonym parsing, and `mapped_entity` construction into `GlossaryReview` (parent).
- `GlossaryAddDialog` is now fully presentational — receives controlled `form`, `errors`, `availableTables`, `onFieldChange`, and `onSubmit` (no-arg) as props; no internal `useState`, no validation, no payload building.
- `GlossaryTermDetail`: removed unused `termIdx` prop; `TermEditState` and `CatalogData` are now imported from `Glossary.types` instead of redeclared locally.
- `GlossaryTermList`: fixed import casing (`../Glossary.types`).
- `Glossary.types.ts`: added `TermEditState`, `CatalogData`, `GlossaryAddFormState`, `GlossaryAddFormErrors` exports; these were previously duplicated as local interfaces across multiple files.
- Fixed import casing (`./glossary.types` → `./Glossary.types`) across all files in the block.

# semantics-details-01

## 0.4.0

- Register all 54 component files in `registry-item.json` so consumers receive the full component tree on install.

## 0.3.0

- Remove legacy `components/semantics/` folder; all components now live in per-stage directories (`glossary/`, `relationships/`, `cross-source/`, `metrics/`, `signal-rules/`, `equilibrium/`, `content-profile/`).
- Register all migrated component files in `registry-item.json` so consumers receive the full component tree.

## 0.2.0

- Lift navigation out of card sub-components: `ReviewQueueCard`, `SharedStageCard`, and `CompletedStageCard` no longer call `useRouter` — they now accept an `onNavigate: (path: string) => void` prop and call it instead.
- Add `onNavigate` to `ReviewQueueViewProps`; `ReviewQueueView` threads it through `QueueSection` to each card.
- Replace `@/types` imports in card components and `StepProgress` with relative imports from `../../pipeline.types` (removes the forbidden app-level alias from shipped files).
- Remove `StageActionDialog` import from `SharedStageCard` (pointed to `@/components/features/…`, a forbidden app-side path).

## 0.1.0

- Initial block: review queue view with per-source and shared stage sections, tab navigation, and questionnaire view.
