--- ## JourneyTimeline Retrospective chronicle timeline (focus + context): an ordered record of what happened / where things stand — shipment tracking, audit trails, travel logs, billing runs. Exactly one focusable node is in focus and shows rich detail (`node` snippet); the rest stay quiet, compact context rows. The chronicle axis is first-class: per-node `meta` (time/date/actor) renders on a meta rail, connectors carry meaning (`solid | dashed | dotted`) and `segmentLabel` annotates the stretch between nodes. Rows extend without forking the layout: a `marker` snippet puts glyphs inside the status dots, a `trailing` snippet adds badges/help/actions beside each header (outside the button — safe for interactive elements), and the `attention` status flags optional-but-noteworthy rows. Detail placement is configurable: `detail="inline"` expands in place (vertical default); `detail="panel"` renders a stable readout beside (wide) or docked below (narrow) the rail — horizontal always uses the panel. Use `Stepper` for a prospective wizard/progress indicator and `Tab` for switching between peer views; JourneyTimeline is read-only observation of a sequence, not process control or navigation. **Import:** `import { JourneyTimeline } from '@urbicon-ui/blocks';` ### Examples ```svelte {#snippet node(item)}

Details for {item.title}…

{/snippet}
``` ```svelte track(id)}> {#snippet node(item)} {/snippet} ``` ### Variants - size: lg, md, sm (default: md) - connectorStyle: dashed, dotted, solid (default: solid) - detail: inline, panel (default: inline) - focused: false, true (default: false) - interactive: false, true (default: true) - orientation: horizontal, vertical (default: vertical) - status: active, attention, blocked, complete, pending, skipped (default: pending) - travelled: false, true (default: false) - withMeta: false, true (default: false) ### Api | Prop | Type | Required | Default | Description | | --- | --- | :---: | --- | --- | | items | `JourneyNode[]` | yes | | The ordered journey nodes. | | ...HTMLAttributes | `HTMLAttributes` | no | | HTML attributes (excluding: 'children') | | ...Pick | `inherited` | no | | Properties inherited from Pick | | class | `string` | no | | Extra classes merged onto the root element. | | defaultFocusId | `string` | no | | Initial focused node id in uncontrolled mode. Ignored once `focusId` is bound. | | detail | `'inline' | 'panel'` | no | 'inline' (vertical) / 'panel' (horizontal) | Where the focused node's detail renders. `inline` expands in place inside the rail; `panel` renders a stable readout — beside the rail on wide viewports, docked to the viewport bottom on narrow ones. Horizontal orientation always uses the panel and ignores `inline` (DEV warning). | | focusId | `string` | no | | The focused node id. Supports `bind:focusId`. When omitted the component is uncontrolled and falls back to `defaultFocusId`, then the first `active` node, then the first focusable node. | | marker | `Snippet<[JourneyNode]>` | no | | Custom content *inside* each status dot — a glyph, count or icon. The dot keeps its status colour, shape and size contract (scale it via `slotClasses.marker`, e.g. `size-5`). Markers stay decorative (`aria-hidden`); the status is still announced through the hidden label. | | meta | `Snippet<[JourneyNode]>` | no | | Rich override for the meta rail — receives each `JourneyNode` and replaces the plain `item.meta` text (e.g. planned + actual time with a Badge). | | node | `Snippet<[JourneyNode]>` | no | | Renders the detail of the focused node. Receives the focused `JourneyNode`. | | onFocusChange | `(id: string) => void` | no | | Fires when the focused node changes (click or keyboard). | | orientation | `'vertical' | 'horizontal'` | no | 'vertical' | Orientation property for the JourneyTimeline component | | preset | `string` | no | | Apply a named preset registered via ``. Prefer this over `class` overrides when the requested look falls outside the semantic intent palette — presets keep hover/active/dark-mode logic coherent and make the custom look reusable across the project. | | size | `'sm' | 'md' | 'lg'` | no | 'md' | Marker + label scale. | | slotClasses | `Partial>` | no | | Per-slot class overrides. Slots: base | rail | node | metaColumn | meta | markerColumn | marker | connector | content | card | header | trigger | trailing | labelGroup | title | subtitle | segment | detail | detailInner | detailContent | panel | | trailing | `Snippet<[JourneyNode]>` | no | | End-of-row content beside each node's header — status badges, a help affordance, quick actions. Renders *outside* the trigger button (a sibling in the header row), so interactive elements are valid HTML and activating them never moves the focused node. Right-aligned in vertical orientation, appended to the label pill in horizontal. | | unstyled | `boolean` | no | | Remove all default tv() classes. | | connectorStyle | `'dashed' | 'dotted' | 'solid'` | no | solid | Controls the connectorStyle behavior and appearance of the JourneyTimeline component. Available options: dashed, dotted, solid. | | focused | `'false' | 'true'` | no | false | Controls the focused behavior and appearance of the JourneyTimeline component. Available options: false, true. | | interactive | `'false' | 'true'` | no | true | Controls the interactive behavior and appearance of the JourneyTimeline component. Available options: false, true. | | status | `'active' | 'attention' | 'blocked' | 'complete' | 'pending' | 'skipped'` | no | pending | Controls the status behavior and appearance of the JourneyTimeline component. Available options: active, attention, blocked, and 3 more. | | travelled | `'false' | 'true'` | no | false | Controls the travelled behavior and appearance of the JourneyTimeline component. Available options: false, true. | | withMeta | `'false' | 'true'` | no | false | Controls the withMeta behavior and appearance of the JourneyTimeline component. Available options: false, true. | Inherited from: - Pick (external) - Omit, 'children'> (omit-pattern)