6.7 KiB
pack-context — React context plumbing for the pack registry
(no submodules)
- pack-registry-provider — (no submodules)- runtime-override — (no submodules) - runtime-override — (no submodules)- use-pack-component — (no submodules) - use-pack-component — (no submodules)- version-check — (no submodules) - version-check — (no submodules)- pack-context — (no submodules)- pack-registry-provider — _(…
- pack-registry-provider — (no submodules)- runtime-override — (no submodules)- runtime-override — (no submodules)- use-pack-component — (no submodules)- use-pack-component — (no submodules)- version-check — (no submodules)- version-check — (no submodules)- pack-context — (no submodules)- pack-registry-provider — (no submodules)- runtime-override — (no submodules)- runtime-override — (no submodules)- use-pack-component — (no submodules)- use-pack-component — (no submodules)- version-check — (no submodules)- version-check — (no submodules)- pack-context — (no submodules)- pack-registry-provider — <!-…
- pack-registry-provider — (no submodules)- runtime-override — (no submodules)- runtime-override — (no submodules)- use-pack-component — (no submodules)- use-pack-component — (no submodules)- version-check — (no submodules)- version-check — (no submodules)- pack-context — (no submodules)- pack-registry-provider — _…
- pack-registry-provider — (no submodules)- runtime-override — (no submodules) - runtime-override — (no submodules)- use-pack-component — (no submodules) - use-pack-component — (no submodules)- version-check — (no submodules) - version-check — (no submodules)- pack-context — (no submodules)
Purpose
Owns the React Context <PackRegistryProvider> 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
nulldiscriminator drives provider-missing detection in every consumer hookdisplayNameset so React DevTools surfaces the context asReactUiPackRegistryContextrather than the genericContext.Providerresolvedmap is computed inside the Provider'suseMemoso a re-render does not rebuild the merged maps unlesspacksor the override prop change
Usage: Basic example
import { useContext } from "react";
import { PackRegistryContext } from "@suaveplan/react-ui/pack";
function PackInspector() {
const ctx = useContext(PackRegistryContext);
if (!ctx) return null;
return <pre>{[...ctx.packs.keys()].join(", ")}</pre>;
}
Usage: Advanced example
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 <ul>{rows.map((r) => <li key={r}>{r}</li>)}</ul>;
}
API Reference
PackRegistryContext: React.Context<PackRegistryContextValue | null>interface PackRegistryContextValuepacks: ReadonlyMap<string, ComponentPack>resolved: ReadonlyMap<string, ReadonlyMap<string, ComponentType<unknown>>>
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.