# `pack-context` — React context plumbing for the pack registry _(no submodules)_ - [pack-registry-provider](./pack-registry-provider/pack-registry-provider.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_ - [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_ - [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_ - [version-check](./version-check/version-check.md) — _(no submodules)_- [pack-context](./pack-context.md) — _(no submodules)_- pack-registry-provider — _(… - [pack-registry-provider](./pack-registry-provider/pack-registry-provider.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [pack-context](./pack-context.md) — _(no submodules)_- [pack-registry-provider](./pack-registry-provider/pack-registry-provider.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [pack-context](./pack-context.md) — _(no submodules)_- pack-registry-provider — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_- [pack-context](./pack-context.md) — _(no submodules)_- pack-registry-provider — _… - [pack-registry-provider](./pack-registry-provider/pack-registry-provider.md) — _(no submodules)_- [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_ - [runtime-override](./runtime-override/runtime-override.md) — _(no submodules)_- [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_ - [use-pack-component](./use-pack-component/use-pack-component.md) — _(no submodules)_- [version-check](./version-check/version-check.md) — _(no submodules)_ - [version-check](./version-check/version-check.md) — _(no submodules)_- [pack-context](./pack-context.md) — _(no submodules)_ ## Purpose Owns the React `Context` `` writes into and the `usePackComponent` hook reads from. The context carries two slices: a `packs` map (raw `ComponentPack` references keyed by pack name) and a `resolved` map (the merged `(packName -> componentName -> Component)` view that already accounts for runtime overrides). Splitting raw and resolved lets debugging surfaces inspect either layer. ## Features - Single source-of-truth context for the chassis pack system - `null` discriminator drives provider-missing detection in every consumer hook - `displayName` set so React DevTools surfaces the context as `ReactUiPackRegistryContext` rather than the generic `Context.Provider` - `resolved` map is computed inside the Provider's `useMemo` so a re-render does not rebuild the merged maps unless `packs` or the override prop change ## Usage: Basic example ```ts import { useContext } from "react"; import { PackRegistryContext } from "@suaveplan/react-ui/pack"; function PackInspector() { const ctx = useContext(PackRegistryContext); if (!ctx) return null; return
{[...ctx.packs.keys()].join(", ")}
; } ``` ## Usage: Advanced example ```ts import { useContext } from "react"; import { PackRegistryContext } from "@suaveplan/react-ui/pack"; function ResolvedView() { const ctx = useContext(PackRegistryContext); if (!ctx) return null; const rows = []; for (const [pack, components] of ctx.resolved) { for (const componentName of components.keys()) { rows.push(`${pack}/${componentName}`); } } return ; } ``` ## API Reference - `PackRegistryContext: React.Context` - `interface PackRegistryContextValue` - `packs: ReadonlyMap` - `resolved: ReadonlyMap>>` ## Implementation notes The two-map split allows the consumer-facing `usePackComponent` hook to read directly from `resolved` (a flat lookup) without walking the raw pack array. Test fixtures and DevTools surfaces that need to see the original pack lifecycle hooks consult `packs` instead. The context default `null` makes provider-missing failures surface at the hook call site rather than producing a confusing read-from-empty-map scenario.