ngx-json-render 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-json-render.mjs","sources":["../../../projects/ngx-json-render/src/lib/root-context.ts","../../../projects/ngx-json-render/src/lib/state.service.ts","../../../projects/ngx-json-render/src/lib/validation.service.ts","../../../projects/ngx-json-render/src/lib/actions.service.ts","../../../projects/ngx-json-render/src/lib/confirm-dialog.component.ts","../../../projects/ngx-json-render/src/lib/devtools.ts","../../../projects/ngx-json-render/src/lib/tokens.ts","../../../projects/ngx-json-render/src/lib/element.component.ts","../../../projects/ngx-json-render/src/lib/renderer.component.ts","../../../projects/ngx-json-render/src/lib/repeat-scope.component.ts","../../../projects/ngx-json-render/src/lib/children.component.ts","../../../projects/ngx-json-render/src/lib/registry.ts","../../../projects/ngx-json-render/src/lib/streaming.ts","../../../projects/ngx-json-render/src/lib/schema.ts","../../../projects/ngx-json-render/src/public-api.ts","../../../projects/ngx-json-render/src/ngx-json-render.ts"],"sourcesContent":["import { Injectable, type Signal, type Type, signal } from '@angular/core';\nimport type {\n ActionHandler,\n ComputedFunction,\n DirectiveRegistry,\n Spec,\n StateModel,\n StateStore,\n ValidationFunction,\n} from '@json-render/core';\nimport type { ComponentRegistry, RegistryEntry, StateChange } from './types';\n\nconst EMPTY = signal(undefined);\n\n/**\n * Internal bridge between the `<json-render>` component's inputs and the\n * renderer services / element tree. The renderer component replaces these\n * signal references with its own input signals at construction time.\n *\n * @internal\n */\n@Injectable()\nexport class JsonRenderRootContext {\n spec: Signal<Spec | null | undefined> = EMPTY;\n registry: Signal<ComponentRegistry | undefined> = EMPTY;\n loading: Signal<boolean> = signal(false);\n fallback: Signal<Type<unknown> | RegistryEntry | null | undefined> = EMPTY;\n\n /** External store (controlled mode). */\n store: Signal<StateStore | null | undefined> = EMPTY;\n /** Initial state (uncontrolled mode); falls back to `spec.state`. */\n initialState: Signal<StateModel> = signal({});\n\n handlers: Signal<Record<string, ActionHandler> | undefined> = EMPTY;\n onAction: Signal<\n ((name: string, params?: Record<string, unknown>) => unknown) | null | undefined\n > = EMPTY;\n navigate: Signal<((path: string) => void) | null | undefined> = EMPTY;\n\n validationFunctions: Signal<Record<string, ValidationFunction> | undefined> =\n EMPTY;\n functions: Signal<Record<string, ComputedFunction> | undefined> = EMPTY;\n directiveRegistry: Signal<DirectiveRegistry | undefined> = EMPTY;\n\n /** Emits uncontrolled-mode state changes to the renderer output. */\n emitStateChange: (changes: StateChange[]) => void = () => {};\n\n /** Resolve a registry entry (component + slot metadata) for a type. */\n resolveEntry(type: string): RegistryEntry | undefined {\n const raw = this.registry()?.[type] ?? this.fallback() ?? undefined;\n if (!raw) return undefined;\n return typeof raw === 'function' ? { component: raw } : raw;\n }\n}\n","import {\n Injectable,\n type Signal,\n computed,\n effect,\n inject,\n isDevMode,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n type StateModel,\n type StateStore,\n createStateStore,\n getByPath,\n} from '@json-render/core';\nimport { flattenToPointers } from '@json-render/core/store-utils';\nimport { JsonRenderRootContext } from './root-context';\nimport type { StateChange } from './types';\n\n/**\n * The state store of a `<json-render>` subtree.\n *\n * Wraps a core {@link StateStore} (either the internal in-memory store in\n * uncontrolled mode, or an external store passed via the `store` input) and\n * exposes the current state model as a signal.\n *\n * Inject it from catalog components or action handlers via\n * {@link injectStateStore}.\n */\n@Injectable()\nexport class JsonRenderStateService {\n private readonly root = inject(JsonRenderRootContext);\n private readonly internalStore = createStateStore({});\n\n private readonly changeListeners = new Set<(changes: StateChange[]) => void>();\n\n private readonly _state = signal<StateModel>(\n {},\n // External stores may mutate snapshots in place — always propagate.\n { equal: () => false },\n );\n\n /** The current state model as a signal. */\n readonly state: Signal<StateModel> = this._state.asReadonly();\n\n private readonly currentStore = computed<StateStore>(\n () => this.root.store() ?? this.internalStore,\n );\n\n constructor() {\n const initialMode = untracked(this.currentStore) === this.internalStore\n ? 'uncontrolled'\n : 'controlled';\n let modeWarned = false;\n\n // Keep the state signal in sync with whichever store is active.\n effect((onCleanup) => {\n const store = this.currentStore();\n\n if (isDevMode() && !modeWarned) {\n const mode = store === this.internalStore ? 'uncontrolled' : 'controlled';\n if (mode !== initialMode) {\n modeWarned = true;\n console.warn(\n `[ngx-json-render] switching from ${initialMode} to ${mode} mode is not supported.`,\n );\n }\n }\n\n untracked(() => this._state.set(store.getSnapshot()));\n const unsubscribe = store.subscribe(() => {\n this._state.set(store.getSnapshot());\n });\n onCleanup(unsubscribe);\n });\n\n // Uncontrolled mode: when the (resolved) initial state changes — e.g.\n // `spec.state` grows while streaming — diff it against the previous\n // initial state and apply only the changed leaves to the store.\n let prevFlat: Record<string, unknown> = {};\n effect(() => {\n if (this.root.store()) return;\n const initialState = this.root.initialState() ?? {};\n const nextFlat =\n Object.keys(initialState).length > 0\n ? flattenToPointers(initialState)\n : {};\n const allKeys = new Set([\n ...Object.keys(prevFlat),\n ...Object.keys(nextFlat),\n ]);\n const updates: Record<string, unknown> = {};\n for (const key of allKeys) {\n if (prevFlat[key] !== nextFlat[key]) {\n updates[key] = key in nextFlat ? nextFlat[key] : undefined;\n }\n }\n prevFlat = nextFlat;\n if (Object.keys(updates).length > 0) {\n untracked(() => this.internalStore.update(updates));\n }\n });\n }\n\n /** Read a value by JSON Pointer path from the current state. */\n get(path: string): unknown {\n return untracked(this.currentStore).get(path);\n }\n\n /** Write a value by JSON Pointer path and notify subscribers. */\n set(path: string, value: unknown): void {\n const store = untracked(this.currentStore);\n const prev = store.getSnapshot();\n const prevValue = getByPath(prev, path);\n store.set(path, value);\n if (prevValue !== value) {\n const changes: StateChange[] = [{ path, value }];\n this.notifyChanges(changes);\n if (!untracked(this.root.store) && store.getSnapshot() !== prev) {\n this.root.emitStateChange(changes);\n }\n }\n }\n\n /** Write multiple values at once (single notification). */\n update(updates: Record<string, unknown>): void {\n const store = untracked(this.currentStore);\n const prev = store.getSnapshot();\n store.update(updates);\n const changes: StateChange[] = [];\n for (const [path, value] of Object.entries(updates)) {\n if (getByPath(prev, path) !== value) {\n changes.push({ path, value });\n }\n }\n if (changes.length > 0) {\n this.notifyChanges(changes);\n if (!untracked(this.root.store) && store.getSnapshot() !== prev) {\n this.root.emitStateChange(changes);\n }\n }\n }\n\n /** Return the full state object (non-reactive read). */\n getSnapshot(): StateModel {\n return untracked(this.currentStore).getSnapshot();\n }\n\n /**\n * Register a listener called with the list of changed paths whenever state\n * is written through this service (element `watch` fields rely on this).\n * Returns an unsubscribe function.\n */\n subscribeChanges(listener: (changes: StateChange[]) => void): () => void {\n this.changeListeners.add(listener);\n return () => {\n this.changeListeners.delete(listener);\n };\n }\n\n private notifyChanges(changes: StateChange[]): void {\n for (const listener of this.changeListeners) {\n listener(changes);\n }\n }\n}\n\n/**\n * Inject the state store of the nearest `<json-render>` renderer.\n * Must be called from within the renderer's subtree (e.g. a catalog\n * component) or a component that provides {@link JsonRenderStateService}.\n */\nexport function injectStateStore(): JsonRenderStateService {\n return inject(JsonRenderStateService);\n}\n\n/** Reactive read of a state value by JSON Pointer path. */\nexport function injectStateValue<T>(\n path: string | (() => string),\n): Signal<T | undefined> {\n const store = injectStateStore();\n const getPath = typeof path === 'function' ? path : () => path;\n return computed(() => getByPath(store.state(), getPath()) as T | undefined);\n}\n\n/**\n * Reactive two-way binding to a state path: a value signal plus a setter\n * that writes back to the same path.\n */\nexport function injectStateBinding<T>(path: string | (() => string)): {\n value: Signal<T | undefined>;\n set: (value: T) => void;\n} {\n const store = injectStateStore();\n const getPath = typeof path === 'function' ? path : () => path;\n return {\n value: computed(() => getByPath(store.state(), getPath()) as T | undefined),\n set: (value: T) => store.set(getPath(), value),\n };\n}\n\n/**\n * Two-way bound prop helper for catalog components, mirroring `useBoundProp`\n * from the other renderers: the value comes from the already-resolved prop,\n * and the setter writes back to the bound state path (no-op if not bound).\n *\n * @example\n * ```ts\n * const ctx = injectRenderContext<{ value?: string }>();\n * const bound = injectBoundProp<string>(\n * () => ctx.props().value,\n * () => ctx.bindings()?.['value'],\n * );\n * // template: <input [value]=\"bound.value() ?? ''\" (input)=\"bound.set($any($event.target).value)\" />\n * ```\n */\nexport function injectBoundProp<T>(\n propValue: () => T | undefined,\n bindingPath: () => string | undefined,\n): { value: Signal<T | undefined>; set: (value: T) => void } {\n const store = injectStateStore();\n return {\n value: computed(propValue),\n set: (value: T) => {\n const path = bindingPath();\n if (path) store.set(path, value);\n },\n };\n}\n","import {\n Injectable,\n type Signal,\n computed,\n effect,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n type ValidationConfig,\n type ValidationFunction,\n type ValidationResult,\n runValidation,\n} from '@json-render/core';\nimport { JsonRenderRootContext } from './root-context';\nimport { JsonRenderStateService } from './state.service';\n\nexport interface FieldValidationState {\n touched: boolean;\n validated: boolean;\n result: ValidationResult | null;\n}\n\nfunction dynamicArgsEqual(\n a: Record<string, unknown> | undefined,\n b: Record<string, unknown> | undefined,\n): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n const va = a[key];\n const vb = b[key];\n if (va === vb) continue;\n if (\n typeof va === 'object' &&\n va !== null &&\n typeof vb === 'object' &&\n vb !== null\n ) {\n const sa = (va as Record<string, unknown>)['$state'];\n const sb = (vb as Record<string, unknown>)['$state'];\n if (typeof sa === 'string' && sa === sb) continue;\n }\n return false;\n }\n return true;\n}\n\nfunction validationConfigEqual(\n a: ValidationConfig,\n b: ValidationConfig,\n): boolean {\n if (a === b) return true;\n\n if (a.validateOn !== b.validateOn) return false;\n\n const ac = a.checks ?? [];\n const bc = b.checks ?? [];\n if (ac.length !== bc.length) return false;\n\n for (let i = 0; i < ac.length; i++) {\n const ca = ac[i]!;\n const cb = bc[i]!;\n if (ca.type !== cb.type) return false;\n if (ca.message !== cb.message) return false;\n if (!dynamicArgsEqual(ca.args, cb.args)) return false;\n }\n\n return true;\n}\n\n/**\n * Form validation state of a `<json-render>` subtree. Fields register their\n * {@link ValidationConfig}; the built-in `validateForm` action validates all\n * registered fields and writes the result to state.\n */\n@Injectable()\nexport class JsonRenderValidationService {\n private readonly root = inject(JsonRenderRootContext);\n private readonly state = inject(JsonRenderStateService);\n\n private readonly _fieldStates = signal<Record<string, FieldValidationState>>(\n {},\n );\n private readonly _fieldConfigs = signal<Record<string, ValidationConfig>>({});\n\n /** Validation state per registered field path. */\n readonly fieldStates: Signal<Record<string, FieldValidationState>> =\n this._fieldStates.asReadonly();\n\n get customFunctions(): Record<string, ValidationFunction> {\n return untracked(this.root.validationFunctions) ?? {};\n }\n\n /** Register (or update) a field's validation config. */\n registerField(path: string, config: ValidationConfig): void {\n const prev = untracked(this._fieldConfigs);\n const existing = prev[path];\n if (existing && validationConfigEqual(existing, config)) return;\n this._fieldConfigs.set({ ...prev, [path]: config });\n }\n\n /** Validate a single field and record the result. */\n validate(path: string, config: ValidationConfig): ValidationResult {\n const currentState = this.state.getSnapshot();\n const segments = path.split('/').filter(Boolean);\n let value: unknown = currentState;\n for (const seg of segments) {\n if (value != null && typeof value === 'object') {\n value = (value as Record<string, unknown>)[seg];\n } else {\n value = undefined;\n break;\n }\n }\n const result = runValidation(config, {\n value,\n stateModel: currentState,\n customFunctions: this.customFunctions,\n });\n\n const prev = untracked(this._fieldStates);\n this._fieldStates.set({\n ...prev,\n [path]: {\n touched: prev[path]?.touched ?? true,\n validated: true,\n result,\n },\n });\n\n return result;\n }\n\n /** Mark a field as touched. */\n touch(path: string): void {\n const prev = untracked(this._fieldStates);\n this._fieldStates.set({\n ...prev,\n [path]: {\n ...prev[path],\n touched: true,\n validated: prev[path]?.validated ?? false,\n result: prev[path]?.result ?? null,\n },\n });\n }\n\n /** Clear a field's validation state. */\n clear(path: string): void {\n const { [path]: _, ...rest } = untracked(this._fieldStates);\n this._fieldStates.set(rest);\n }\n\n /** Validate all registered fields. Returns whether all are valid. */\n validateAll(): boolean {\n let allValid = true;\n for (const [path, config] of Object.entries(\n untracked(this._fieldConfigs),\n )) {\n const result = this.validate(path, config);\n if (!result.valid) {\n allValid = false;\n }\n }\n return allValid;\n }\n}\n\n/** Inject the validation service of the nearest `<json-render>` renderer. */\nexport function injectValidation(): JsonRenderValidationService {\n return inject(JsonRenderValidationService);\n}\n\n/**\n * Field-level validation helper for catalog input components: registers the\n * config and exposes the field's validation state as signals.\n */\nexport function injectFieldValidation(\n path: string | (() => string),\n config?: ValidationConfig | (() => ValidationConfig | undefined),\n): {\n state: Signal<FieldValidationState>;\n validate: () => ValidationResult;\n touch: () => void;\n clear: () => void;\n errors: Signal<string[]>;\n isValid: Signal<boolean>;\n} {\n const validation = injectValidation();\n const getPath = typeof path === 'function' ? path : () => path;\n const getConfig = typeof config === 'function' ? config : () => config;\n\n effect(() => {\n const p = getPath();\n const c = getConfig();\n if (p && c) {\n validation.registerField(p, c);\n }\n });\n\n const state = computed<FieldValidationState>(() => {\n const current = validation.fieldStates()[getPath()];\n return current ?? { touched: false, validated: false, result: null };\n });\n\n return {\n state,\n validate: () =>\n validation.validate(getPath(), getConfig() ?? { checks: [] }),\n touch: () => validation.touch(getPath()),\n clear: () => validation.clear(getPath()),\n errors: computed(() => state().result?.errors ?? []),\n isValid: computed(() => state().result?.valid ?? true),\n };\n}\n","import {\n Injectable,\n type Signal,\n computed,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n type ActionBinding,\n type ActionHandler,\n type ResolvedAction,\n executeAction,\n nextActionDispatchId,\n notifyActionDispatch,\n notifyActionSettle,\n resolveAction,\n} from '@json-render/core';\nimport { JsonRenderRootContext } from './root-context';\nimport { JsonRenderStateService } from './state.service';\nimport { JsonRenderValidationService } from './validation.service';\n\nlet idCounter = 0;\nfunction generateUniqueId(): string {\n idCounter += 1;\n return `${Date.now()}-${idCounter}`;\n}\n\nfunction deepResolveValue(\n value: unknown,\n get: (path: string) => unknown,\n): unknown {\n if (value === null || value === undefined) return value;\n\n if (value === '$id') {\n return generateUniqueId();\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n if (keys.length === 1 && typeof obj['$state'] === 'string') {\n return get(obj['$state'] as string);\n }\n\n if (keys.length === 1 && '$id' in obj) {\n return generateUniqueId();\n }\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => deepResolveValue(item, get));\n }\n\n if (typeof value === 'object') {\n const resolved: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value as Record<string, unknown>)) {\n resolved[key] = deepResolveValue(val, get);\n }\n return resolved;\n }\n\n return value;\n}\n\nexport interface PendingConfirmation {\n action: ResolvedAction;\n handler: ActionHandler;\n resolve: () => void;\n reject: () => void;\n}\n\n/**\n * Action dispatcher of a `<json-render>` subtree.\n *\n * Executes {@link ActionBinding}s: built-in actions (`setState`, `pushState`,\n * `removeState`, `push`, `pop`, `validateForm`) are handled internally;\n * everything else is routed to the host-provided `handlers` (or the\n * `onAction` catch-all), honoring `confirm`, `onSuccess`, and `onError`.\n */\n@Injectable()\nexport class JsonRenderActionsService {\n private readonly root = inject(JsonRenderRootContext);\n private readonly state = inject(JsonRenderStateService);\n private readonly validation = inject(JsonRenderValidationService, {\n optional: true,\n });\n\n private readonly extraHandlers = signal<Record<string, ActionHandler>>({});\n private readonly _loadingActions = signal<ReadonlySet<string>>(new Set());\n private readonly _pendingConfirmation = signal<PendingConfirmation | null>(\n null,\n );\n\n /** Names of actions currently executing. */\n readonly loadingActions: Signal<ReadonlySet<string>> =\n this._loadingActions.asReadonly();\n\n /** The confirmation currently awaiting user input, if any. */\n readonly pendingConfirmation: Signal<PendingConfirmation | null> =\n this._pendingConfirmation.asReadonly();\n\n /** All registered handlers (host handlers + runtime registrations). */\n get handlers(): Record<string, ActionHandler> {\n return {\n ...(untracked(this.root.handlers) ?? {}),\n ...untracked(this.extraHandlers),\n };\n }\n\n /** Register an additional action handler at runtime. */\n registerHandler(name: string, handler: ActionHandler): void {\n this.extraHandlers.set({\n ...untracked(this.extraHandlers),\n [name]: handler,\n });\n }\n\n /** Execute an action binding. */\n async execute(binding: ActionBinding): Promise<void> {\n const resolved = resolveAction(binding, this.state.getSnapshot());\n const get = (path: string) => this.state.get(path);\n const set = (path: string, value: unknown) => this.state.set(path, value);\n\n // --- devtools / observer hooks ---\n const dispatchId = nextActionDispatchId();\n const dispatchedAt = Date.now();\n notifyActionDispatch({\n id: dispatchId,\n name: resolved.action,\n params: resolved.params,\n at: dispatchedAt,\n });\n let ok = true;\n let error: unknown = undefined;\n\n try {\n if (resolved.action === 'setState' && resolved.params) {\n const statePath = resolved.params['statePath'] as string;\n const value = resolved.params['value'];\n if (statePath) {\n set(statePath, value);\n }\n return;\n }\n\n if (resolved.action === 'pushState' && resolved.params) {\n const statePath = resolved.params['statePath'] as string;\n const rawValue = resolved.params['value'];\n if (statePath) {\n const resolvedValue = deepResolveValue(rawValue, get);\n const arr = (get(statePath) as unknown[] | undefined) ?? [];\n set(statePath, [...arr, resolvedValue]);\n const clearStatePath = resolved.params['clearStatePath'] as\n | string\n | undefined;\n if (clearStatePath) {\n set(clearStatePath, '');\n }\n }\n return;\n }\n\n if (resolved.action === 'removeState' && resolved.params) {\n const statePath = resolved.params['statePath'] as string;\n const index = resolved.params['index'] as number;\n if (statePath !== undefined && index !== undefined) {\n const arr = (get(statePath) as unknown[] | undefined) ?? [];\n set(\n statePath,\n arr.filter((_, i) => i !== index),\n );\n }\n return;\n }\n\n if (resolved.action === 'push' && resolved.params) {\n const screen = resolved.params['screen'] as string;\n if (screen) {\n const currentScreen = get('/currentScreen') as string | undefined;\n const navStack = (get('/navStack') as string[] | undefined) ?? [];\n if (currentScreen) {\n set('/navStack', [...navStack, currentScreen]);\n } else {\n set('/navStack', [...navStack, '']);\n }\n set('/currentScreen', screen);\n }\n return;\n }\n\n if (resolved.action === 'pop') {\n const navStack = (get('/navStack') as string[] | undefined) ?? [];\n if (navStack.length > 0) {\n const previousScreen = navStack[navStack.length - 1];\n set('/navStack', navStack.slice(0, -1));\n if (previousScreen) {\n set('/currentScreen', previousScreen);\n } else {\n set('/currentScreen', undefined);\n }\n }\n return;\n }\n\n if (resolved.action === 'validateForm') {\n if (!this.validation) {\n console.warn(\n 'validateForm action was dispatched but no JsonRenderValidationService is available.',\n );\n return;\n }\n const valid = this.validation.validateAll();\n const errors: Record<string, string[]> = {};\n for (const [path, fs] of Object.entries(\n untracked(this.validation.fieldStates),\n )) {\n if (fs.result && !fs.result.valid) {\n errors[path] = fs.result.errors;\n }\n }\n const statePath =\n (resolved.params?.['statePath'] as string) || '/formValidation';\n set(statePath, { valid, errors });\n return;\n }\n\n const handler = this.lookupHandler(resolved.action);\n\n if (!handler) {\n console.warn(`No handler registered for action: ${resolved.action}`);\n return;\n }\n\n if (resolved.confirm) {\n return new Promise<void>((resolve, reject) => {\n this._pendingConfirmation.set({\n action: resolved,\n handler,\n resolve: () => {\n this._pendingConfirmation.set(null);\n resolve();\n },\n reject: () => {\n this._pendingConfirmation.set(null);\n reject(new Error('Action cancelled'));\n },\n });\n }).then(() => this.runHandler(resolved, handler));\n }\n\n await this.runHandler(resolved, handler);\n } catch (err) {\n ok = false;\n error = err;\n throw err;\n } finally {\n const now = Date.now();\n notifyActionSettle({\n id: dispatchId,\n name: resolved.action,\n ok,\n at: now,\n durationMs: now - dispatchedAt,\n error,\n });\n }\n }\n\n /** Confirm the pending confirmation dialog. */\n confirm(): void {\n untracked(this._pendingConfirmation)?.resolve();\n }\n\n /** Cancel the pending confirmation dialog. */\n cancel(): void {\n untracked(this._pendingConfirmation)?.reject();\n }\n\n private lookupHandler(name: string): ActionHandler | undefined {\n const direct = this.handlers[name];\n if (direct) return direct;\n // Catch-all: route unknown actions to the `onAction` input when provided.\n const onAction = untracked(this.root.onAction);\n if (onAction) {\n return (params) => onAction(name, params);\n }\n return undefined;\n }\n\n private async runHandler(\n resolved: ResolvedAction,\n handler: ActionHandler,\n ): Promise<void> {\n this._loadingActions.set(\n new Set(untracked(this._loadingActions)).add(resolved.action),\n );\n try {\n await executeAction({\n action: resolved,\n handler,\n setState: (path, value) => this.state.set(path, value),\n navigate: untracked(this.root.navigate) ?? undefined,\n executeAction: async (binding) => {\n await this.execute(binding);\n },\n });\n } finally {\n const next = new Set(untracked(this._loadingActions));\n next.delete(resolved.action);\n this._loadingActions.set(next);\n }\n }\n}\n\n/** Inject the actions service of the nearest `<json-render>` renderer. */\nexport function injectActions(): JsonRenderActionsService {\n return inject(JsonRenderActionsService);\n}\n\n/**\n * Convenience helper for executing a fixed action binding, mirroring\n * `useAction` from the other renderers.\n */\nexport function injectAction(binding: ActionBinding): {\n execute: () => Promise<void>;\n isLoading: Signal<boolean>;\n} {\n const actions = injectActions();\n return {\n execute: () => actions.execute(binding),\n isLoading: computed(() => actions.loadingActions().has(binding.action)),\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport type { ActionConfirm } from '@json-render/core';\n\n/**\n * Default confirmation dialog shown for action bindings with a `confirm`\n * field. Rendered automatically by `<json-render>`; can also be used\n * standalone with a custom action flow.\n */\n@Component({\n selector: 'jr-confirm-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n style=\"position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 50\"\n (click)=\"cancelled.emit()\"\n >\n <div\n style=\"background-color: white; border-radius: 8px; padding: 24px; max-width: 400px; width: 100%; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1)\"\n (click)=\"$event.stopPropagation()\"\n >\n <h3 style=\"margin: 0 0 8px 0; font-size: 18px; font-weight: 600\">\n {{ config().title }}\n </h3>\n <p style=\"margin: 0 0 24px 0; color: #6b7280\">{{ config().message }}</p>\n <div style=\"display: flex; gap: 12px; justify-content: flex-end\">\n <button\n type=\"button\"\n (click)=\"cancelled.emit()\"\n style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #d1d5db; background-color: white; cursor: pointer\"\n >\n {{ config().cancelLabel ?? 'Cancel' }}\n </button>\n <button\n type=\"button\"\n (click)=\"confirmed.emit()\"\n [style.background-color]=\"isDanger() ? '#dc2626' : '#3b82f6'\"\n style=\"padding: 8px 16px; border-radius: 6px; border: none; color: white; cursor: pointer\"\n >\n {{ config().confirmLabel ?? 'Confirm' }}\n </button>\n </div>\n </div>\n </div>\n `,\n})\nexport class JrConfirmDialog {\n readonly config = input.required<ActionConfirm>();\n readonly confirmed = output<void>();\n readonly cancelled = output<void>();\n\n protected readonly isDanger = computed(\n () => this.config().variant === 'danger',\n );\n}\n","import { DestroyRef, type Signal, inject, signal } from '@angular/core';\nimport { isDevtoolsActive, subscribeDevtoolsActive } from '@json-render/core';\n\n/**\n * Reactive mirror of the json-render devtools-active flag. When active, the\n * renderer wraps each element with a `data-jr-key` attribute for the picker.\n */\nexport function injectDevtoolsActive(): Signal<boolean> {\n const active = signal(isDevtoolsActive());\n const unsubscribe = subscribeDevtoolsActive(() =>\n active.set(isDevtoolsActive()),\n );\n inject(DestroyRef).onDestroy(unsubscribe);\n return active.asReadonly();\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport type { RenderContext, RepeatScope } from './types';\n\n/**\n * The render context of the element currently being rendered.\n * Provided by the renderer for every catalog component instance.\n */\nexport const RENDER_CONTEXT = new InjectionToken<RenderContext>(\n 'ngx-json-render RENDER_CONTEXT',\n);\n\n/**\n * The current repeat scope. Present only for elements rendered inside a\n * `repeat` block.\n */\nexport const REPEAT_SCOPE = new InjectionToken<RepeatScope>(\n 'ngx-json-render REPEAT_SCOPE',\n);\n\n/**\n * Inject the render context inside a catalog component.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'app-button',\n * template: `<button (click)=\"ctx.emit('press')\">{{ ctx.props().label }}</button>`,\n * })\n * export class ButtonComponent {\n * readonly ctx = injectRenderContext<{ label: string }>();\n * }\n * ```\n */\nexport function injectRenderContext<\n P = Record<string, unknown>,\n>(): RenderContext<P> {\n const ctx = inject(RENDER_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n 'injectRenderContext() must be used inside a component rendered by <json-render>',\n );\n }\n return ctx as RenderContext<P>;\n}\n\n/**\n * Inject the current repeat scope, or `null` when the component is not\n * rendered inside a `repeat` block.\n */\nexport function injectRepeatScope(): RepeatScope | null {\n return inject(REPEAT_SCOPE, { optional: true });\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n type Signal,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n untracked,\n} from '@angular/core';\nimport type {\n PropResolutionContext,\n UIElement,\n} from '@json-render/core';\nimport {\n evaluateVisibility,\n resolveActionParam,\n resolveBindings,\n resolveElementProps,\n} from '@json-render/core';\nimport { JsonRenderActionsService } from './actions.service';\nimport { injectDevtoolsActive } from './devtools';\nimport { JsonRenderRootContext } from './root-context';\nimport { JsonRenderStateService } from './state.service';\nimport { REPEAT_SCOPE, RENDER_CONTEXT } from './tokens';\nimport type { EventHandle, RenderContext } from './types';\n\nconst warnedSlots = new Set<string>();\n\n/**\n * Renders a single spec element: evaluates visibility, resolves prop\n * expressions against the state model, wires event/watch bindings, and\n * instantiates the catalog component with a {@link RenderContext} injector.\n *\n * @internal Used by `<json-render>` and `<jr-children>`.\n */\n@Component({\n selector: 'jr-element',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet],\n styles: `:host { display: contents; }`,\n template: `\n @if (rawElement() && visible() && component()) {\n @if (devtoolsKey(); as dk) {\n <span [attr.data-jr-key]=\"dk\" style=\"display: contents\">\n <ng-container *ngComponentOutlet=\"component(); injector: outletInjector\" />\n </span>\n } @else {\n <ng-container *ngComponentOutlet=\"component(); injector: outletInjector\" />\n }\n }\n `,\n})\nexport class JrElement {\n readonly elementKey = input.required<string>();\n\n private readonly root = inject(JsonRenderRootContext);\n private readonly state = inject(JsonRenderStateService);\n private readonly actions = inject(JsonRenderActionsService);\n private readonly repeatScope = inject(REPEAT_SCOPE, { optional: true });\n private readonly devtoolsActive = injectDevtoolsActive();\n\n /** The raw (unresolved) element from the spec. */\n readonly rawElement = computed<UIElement | undefined>(\n () => this.root.spec()?.elements?.[this.elementKey()],\n );\n\n /** Prop/visibility resolution context (state + repeat scope + extensions). */\n private readonly resolutionCtx = computed<PropResolutionContext>(() => {\n const scope = this.repeatScope;\n return {\n stateModel: this.state.state(),\n ...(scope\n ? {\n repeatItem: scope.item(),\n repeatIndex: scope.index(),\n repeatBasePath: scope.basePath(),\n }\n : {}),\n functions: this.root.functions() ?? {},\n directives: this.root.directiveRegistry(),\n };\n });\n\n protected readonly visible = computed(() => {\n const el = this.rawElement();\n if (!el || el.visible === undefined) return true;\n return evaluateVisibility(el.visible, this.resolutionCtx());\n });\n\n /** The element with all prop expressions resolved. */\n readonly resolvedElement = computed<UIElement | undefined>(() => {\n const el = this.rawElement();\n if (!el) return undefined;\n return { ...el, props: resolveElementProps(el.props ?? {}, this.resolutionCtx()) };\n });\n\n /** Two-way binding paths ($bindState / $bindItem) by prop name. */\n readonly bindings = computed<Record<string, string> | undefined>(() => {\n const el = this.rawElement();\n return el ? resolveBindings(el.props ?? {}, this.resolutionCtx()) : undefined;\n });\n\n private readonly entry = computed(() => {\n const el = this.rawElement();\n return el ? this.root.resolveEntry(el.type) : undefined;\n });\n\n protected readonly component = computed(() => this.entry()?.component ?? null);\n\n protected readonly devtoolsKey = computed(() =>\n this.devtoolsActive() ? this.elementKey() : null,\n );\n\n private readonly renderCtx: RenderContext = {\n element: this.resolvedElement as Signal<UIElement>,\n props: computed(() => this.resolvedElement()?.props ?? {}),\n emit: (event) => void this.emitEvent(event),\n on: (event) => this.eventHandle(event),\n bindings: this.bindings,\n loading: computed(() => this.root.loading()),\n setBound: (prop, value) => {\n const path = untracked(this.bindings)?.[prop];\n if (path) {\n this.state.set(path, value);\n } else if (isDevMode()) {\n console.warn(\n `[ngx-json-render] setBound(\"${prop}\"): prop has no $bindState/$bindItem binding`,\n );\n }\n },\n };\n\n protected readonly outletInjector = Injector.create({\n providers: [{ provide: RENDER_CONTEXT, useValue: this.renderCtx }],\n parent: inject(Injector),\n });\n\n constructor() {\n // Warn (once per type) about unknown component types.\n const warnedTypes = new Set<string>();\n effect(() => {\n const el = this.rawElement();\n if (!el || this.entry() || warnedTypes.has(el.type)) return;\n warnedTypes.add(el.type);\n console.warn(`No renderer for component type: ${el.type}`);\n });\n\n // Warn about unknown / default slots when the registry carries metadata.\n effect(() => {\n const el = this.rawElement();\n const meta = this.entry();\n if (!el?.slots || !meta?.slots) return;\n const available = new Set(meta.slots);\n for (const slotName of Object.keys(el.slots)) {\n const warnKey = `${el.type}:${slotName}`;\n if (warnedSlots.has(warnKey)) continue;\n if (slotName === 'default') {\n warnedSlots.add(warnKey);\n console.warn(\n `[json-render] Component \"${el.type}\" uses slots.default. Use \"children\" for default slot content.`,\n );\n } else if (!available.has(slotName)) {\n warnedSlots.add(warnKey);\n console.warn(\n `[json-render] Unknown slot \"${slotName}\" on component \"${el.type}\". Available slots: ${meta.slots.join(', ')}`,\n );\n }\n }\n });\n\n // Watch effect: fire actions when watched state paths change.\n effect((onCleanup) => {\n const watchConfig = this.rawElement()?.watch;\n if (!watchConfig) return;\n const paths = Object.keys(watchConfig);\n if (paths.length === 0) return;\n\n const unsubscribe = this.state.subscribeChanges((changes) => {\n const changedPaths = new Set(changes.map((change) => change.path));\n\n void (async () => {\n for (const path of paths) {\n if (!changedPaths.has(path)) continue;\n\n const binding = watchConfig[path];\n if (!binding) continue;\n const bindings = Array.isArray(binding) ? binding : [binding];\n\n for (const b of bindings) {\n if (!b.params) {\n await this.actions.execute(b);\n continue;\n }\n const liveCtx = this.liveResolutionCtx();\n const resolved: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(b.params)) {\n resolved[key] = resolveActionParam(val, liveCtx);\n }\n await this.actions.execute({ ...b, params: resolved });\n }\n }\n })().catch(console.error);\n });\n\n onCleanup(unsubscribe);\n });\n }\n\n /**\n * Resolution context with a live state snapshot, so `$state` references in\n * later actions of a chain see mutations from earlier ones.\n */\n private liveResolutionCtx(): PropResolutionContext {\n return {\n ...untracked(this.resolutionCtx),\n stateModel: this.state.getSnapshot(),\n };\n }\n\n private async emitEvent(eventName: string): Promise<void> {\n const el = untracked(this.rawElement);\n const binding = el?.on?.[eventName];\n if (!binding) return;\n const actionBindings = Array.isArray(binding) ? binding : [binding];\n for (const b of actionBindings) {\n if (!b.params) {\n await this.actions.execute(b);\n continue;\n }\n const liveCtx = this.liveResolutionCtx();\n const resolved: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(b.params)) {\n resolved[key] = resolveActionParam(val, liveCtx);\n }\n await this.actions.execute({ ...b, params: resolved });\n }\n }\n\n private eventHandle(eventName: string): EventHandle {\n const el = this.rawElement();\n const binding = el?.on?.[eventName];\n if (!binding) {\n return { emit: () => {}, shouldPreventDefault: false, bound: false };\n }\n const actionBindings = Array.isArray(binding) ? binding : [binding];\n return {\n emit: () => void this.emitEvent(eventName),\n shouldPreventDefault: actionBindings.some((b) => b.preventDefault),\n bound: true,\n };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n type Type,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport type {\n ActionHandler,\n ComputedFunction,\n DirectiveDefinition,\n Spec,\n StateModel,\n StateStore,\n ValidationFunction,\n} from '@json-render/core';\nimport { createDirectiveRegistry } from '@json-render/core';\nimport { JsonRenderActionsService } from './actions.service';\nimport { JrConfirmDialog } from './confirm-dialog.component';\nimport { JrElement } from './element.component';\nimport { JsonRenderRootContext } from './root-context';\nimport { JsonRenderStateService } from './state.service';\nimport type { ComponentRegistry, RegistryEntry, StateChange } from './types';\nimport { JsonRenderValidationService } from './validation.service';\n\n/**\n * Renders a json-render {@link Spec} using a registry of Angular components.\n *\n * The renderer owns the state store, action dispatcher, and validation state\n * of its subtree (all injectable from catalog components). Pass an external\n * {@link StateStore} via `store` for controlled mode or to share state across\n * renderers.\n *\n * @example\n * ```html\n * <json-render\n * [spec]=\"spec()\"\n * [registry]=\"registry\"\n * [handlers]=\"handlers\"\n * [loading]=\"isStreaming()\"\n * (stateChange)=\"onStateChange($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'json-render',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [JrElement, JrConfirmDialog],\n providers: [\n JsonRenderRootContext,\n JsonRenderStateService,\n JsonRenderValidationService,\n JsonRenderActionsService,\n ],\n styles: `:host { display: contents; }`,\n template: `\n @if (rootKey(); as key) {\n <jr-element [elementKey]=\"key\" />\n }\n @if (pendingConfirm(); as confirm) {\n <jr-confirm-dialog\n [config]=\"confirm\"\n (confirmed)=\"actions.confirm()\"\n (cancelled)=\"actions.cancel()\"\n />\n }\n `,\n})\nexport class JsonRenderer {\n /** The UI spec to render (may be partial while streaming). */\n readonly spec = input.required<Spec | null>();\n /** Component registry mapping catalog type names to Angular components. */\n readonly registry = input.required<ComponentRegistry>();\n /** Whether the spec is currently loading/streaming. */\n readonly loading = input(false);\n /** Fallback component for unknown types. */\n readonly fallback = input<Type<unknown> | RegistryEntry | null>(null);\n\n /**\n * Initial state model (uncontrolled mode). Defaults to `spec.state`.\n * Ignored when `store` is provided.\n */\n readonly state = input<StateModel | undefined>(undefined);\n /** External state store (controlled mode). */\n readonly store = input<StateStore | null>(null);\n\n /** Action handlers by action name. */\n readonly handlers = input<Record<string, ActionHandler> | undefined>(\n undefined,\n );\n /** Catch-all action handler for actions without a dedicated handler. */\n readonly onAction = input<\n ((name: string, params?: Record<string, unknown>) => unknown) | null\n >(null);\n /** Navigation function used by `onSuccess: { navigate }` handlers. */\n readonly navigate = input<((path: string) => void) | null>(null);\n\n /** Custom validation functions. */\n readonly validationFunctions = input<\n Record<string, ValidationFunction> | undefined\n >(undefined);\n /** Named functions for `$computed` expressions in props. */\n readonly functions = input<Record<string, ComputedFunction> | undefined>(\n undefined,\n );\n /** Custom directives for user-defined `$`-prefixed dynamic values. */\n readonly directives = input<DirectiveDefinition[] | undefined>(undefined);\n\n /** Emits state changes in uncontrolled mode. */\n readonly stateChange = output<StateChange[]>();\n\n /** The state store of this renderer (also injectable in the subtree). */\n readonly stateStore: JsonRenderStateService;\n /** The action dispatcher of this renderer. */\n protected readonly actions: JsonRenderActionsService;\n\n constructor() {\n const root = inject(JsonRenderRootContext);\n root.spec = this.spec;\n root.registry = this.registry;\n root.loading = this.loading;\n root.fallback = this.fallback;\n root.store = this.store;\n root.initialState = computed(\n () => this.state() ?? this.spec()?.state ?? {},\n );\n root.handlers = this.handlers;\n root.onAction = this.onAction;\n root.navigate = this.navigate;\n root.validationFunctions = this.validationFunctions;\n root.functions = this.functions;\n root.directiveRegistry = computed(() => {\n const definitions = this.directives();\n return definitions ? createDirectiveRegistry(definitions) : undefined;\n });\n root.emitStateChange = (changes) => this.stateChange.emit(changes);\n\n // Instantiate the subtree services now that the root context is wired.\n this.stateStore = inject(JsonRenderStateService);\n inject(JsonRenderValidationService);\n this.actions = inject(JsonRenderActionsService);\n }\n\n protected readonly rootKey = computed(() => {\n const spec = this.spec();\n return spec?.root && spec.elements?.[spec.root] ? spec.root : null;\n });\n\n protected readonly pendingConfirm = computed(\n () => this.actions.pendingConfirmation()?.action.confirm ?? null,\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n} from '@angular/core';\nimport { REPEAT_SCOPE } from './tokens';\nimport type { RepeatScope } from './types';\n\n/**\n * Provides the repeat scope (item, index, absolute base path) to the elements\n * rendered inside a `repeat` block.\n *\n * @internal Used by `<jr-children>`; not intended for direct use.\n */\n@Component({\n selector: 'jr-repeat-scope',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: REPEAT_SCOPE, useExisting: forwardRef(() => JrRepeatScope) },\n ],\n styles: `:host { display: contents; }`,\n template: '<ng-content />',\n})\nexport class JrRepeatScope implements RepeatScope {\n readonly item = input.required<unknown>();\n readonly index = input.required<number>();\n readonly basePath = input.required<string>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport {\n getByPath,\n resolveRepeatItemStatePath,\n resolveRepeatStatePath,\n} from '@json-render/core';\nimport { JrElement } from './element.component';\nimport { JrRepeatScope } from './repeat-scope.component';\nimport { JsonRenderRootContext } from './root-context';\nimport { JsonRenderStateService } from './state.service';\nimport { REPEAT_SCOPE, injectRenderContext } from './tokens';\n\n/**\n * Renders the children of the current element. Place it inside a catalog\n * component's template where nested content should appear — like a\n * `<router-outlet>` for the spec tree.\n *\n * - Default (no `slot`): renders `element.children`, honoring the element's\n * `repeat` field (one pass per item of the referenced state array, with the\n * proper repeat scope for `$item` / `$index` / `$bindItem` expressions).\n * - With `slot`: renders the element keys of `element.slots[slot]`.\n *\n * @example\n * ```html\n * <div class=\"card\">\n * <h3>{{ ctx.props().title }}</h3>\n * <jr-children />\n * </div>\n * ```\n */\n@Component({\n selector: 'jr-children',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [JrElement, JrRepeatScope],\n styles: `:host { display: contents; }`,\n template: `\n @if (repeat()) {\n @for (item of repeatItems(); track trackItem($index, item)) {\n <jr-repeat-scope\n [item]=\"item\"\n [index]=\"$index\"\n [basePath]=\"itemPath($index)\"\n >\n @for (key of childKeys(); track key) {\n <jr-element [elementKey]=\"key\" />\n }\n </jr-repeat-scope>\n }\n } @else {\n @for (key of childKeys(); track key) {\n <jr-element [elementKey]=\"key\" />\n }\n }\n `,\n})\nexport class JrChildren {\n /** Named slot to render instead of the default children. */\n readonly slot = input<string | null>(null);\n\n private readonly ctx = injectRenderContext();\n private readonly root = inject(JsonRenderRootContext);\n private readonly state = inject(JsonRenderStateService);\n // The repeat scope enclosing the host element (scopes created by this\n // element's own repeat live below, in the template).\n private readonly parentScope = inject(REPEAT_SCOPE, { optional: true });\n\n protected readonly childKeys = computed<string[]>(() => {\n const el = this.ctx.element();\n if (!el) return [];\n const slot = this.slot();\n if (slot) return el.slots?.[slot] ?? [];\n return el.children ?? [];\n });\n\n protected readonly repeat = computed(() => {\n if (this.slot()) return undefined;\n return this.ctx.element()?.repeat;\n });\n\n private readonly repeatBasePath = computed<string | undefined>(() => {\n const rep = this.repeat();\n if (!rep) return undefined;\n const resolved = resolveRepeatStatePath(\n rep.statePath,\n this.parentScope?.basePath(),\n );\n if (resolved === undefined) {\n console.warn(\n '[ngx-json-render] $item in repeat.statePath used outside of a repeat scope',\n );\n }\n return resolved;\n });\n\n protected readonly repeatItems = computed<unknown[]>(() => {\n const basePath = this.repeatBasePath();\n if (basePath === undefined) return [];\n return (\n (getByPath(this.state.state(), basePath) as unknown[] | undefined) ?? []\n );\n });\n\n constructor() {\n // Warn (once per key) about children referencing missing elements.\n const warned = new Set<string>();\n effect(() => {\n if (this.root.loading()) return;\n const spec = this.root.spec();\n if (!spec) return;\n for (const key of this.childKeys()) {\n if (!spec.elements?.[key] && !warned.has(key)) {\n warned.add(key);\n console.warn(\n `[json-render] Missing element \"${key}\" referenced as child of \"${untracked(this.ctx.element)?.type}\". This element will not render.`,\n );\n }\n }\n });\n }\n\n protected itemPath(index: number): string {\n return resolveRepeatItemStatePath(this.repeatBasePath()!, index);\n }\n\n protected trackItem(index: number, item: unknown): unknown {\n const rep = untracked(this.repeat);\n if (rep?.key && typeof item === 'object' && item !== null) {\n return (item as Record<string, unknown>)[rep.key] ?? index;\n }\n return index;\n }\n}\n","import type { Type } from '@angular/core';\nimport type { Catalog, StateStore } from '@json-render/core';\nimport { flattenToPointers } from '@json-render/core/store-utils';\nimport type {\n Actions,\n CatalogHasActions,\n ComponentRegistry,\n Components,\n RegistryEntry,\n SetState,\n StateModel,\n} from './types';\n\n/**\n * Result returned by {@link defineRegistry}.\n */\nexport interface DefineRegistryResult {\n /** Component registry for `<json-render [registry]=\"...\">`. */\n registry: ComponentRegistry;\n /**\n * Create renderer-compatible handlers from the catalog actions.\n * Accepts getter functions so handlers always read the latest\n * state/setState.\n */\n handlers: (\n getSetState: () => SetState | undefined,\n getState: () => StateModel,\n ) => Record<string, (params: Record<string, unknown>) => Promise<void>>;\n /**\n * Execute an action by name imperatively\n * (for use outside the renderer tree, e.g. initial state loading).\n */\n executeAction: (\n actionName: string,\n params: Record<string, unknown> | undefined,\n setState: SetState,\n state?: StateModel,\n ) => Promise<void>;\n}\n\n/**\n * Options for defineRegistry.\n *\n * When the catalog declares actions, the `actions` field is required.\n * When the catalog has no actions (or `actions: {}`), the field is optional.\n */\ntype DefineRegistryOptions<C extends Catalog> = {\n components?: Components<C>;\n} & (CatalogHasActions<C> extends true\n ? { actions: Actions<C> }\n : { actions?: Actions<C> });\n\n/** @internal */\ntype DefineRegistryActionFn = (\n params: Record<string, unknown> | undefined,\n setState: SetState,\n state: StateModel,\n) => Promise<void>;\n\n/**\n * Create a registry from a catalog with components and/or actions.\n *\n * Component keys are type-checked against the catalog, and slot metadata from\n * the catalog is carried into the registry for dev-mode slot warnings.\n *\n * @example\n * ```ts\n * const { registry, handlers } = defineRegistry(catalog, {\n * components: { Card: CardComponent, Button: ButtonComponent },\n * actions: {\n * refresh: async (params, setState) => {\n * setState((prev) => ({ ...prev, refreshedAt: Date.now() }));\n * },\n * },\n * });\n * ```\n */\nexport function defineRegistry<C extends Catalog>(\n catalog: C,\n options: DefineRegistryOptions<C>,\n): DefineRegistryResult {\n const catalogComponents = (\n catalog as unknown as {\n data?: { components?: Record<string, { slots?: string[] }> };\n }\n ).data?.components;\n\n // Build the component registry, attaching slot metadata from the catalog.\n const registry: ComponentRegistry = {};\n if (options.components) {\n for (const [name, component] of Object.entries(options.components) as Array<\n [string, Type<unknown>]\n >) {\n const entry: RegistryEntry = { component };\n const slots = catalogComponents?.[name]?.slots;\n if (slots) entry.slots = slots;\n registry[name] = entry;\n }\n }\n\n // Build action helpers.\n const actionMap = options.actions\n ? (Object.entries(options.actions) as Array<\n [string, DefineRegistryActionFn]\n >)\n : [];\n\n const handlers = (\n getSetState: () => SetState | undefined,\n getState: () => StateModel,\n ): Record<string, (params: Record<string, unknown>) => Promise<void>> => {\n const result: Record<\n string,\n (params: Record<string, unknown>) => Promise<void>\n > = {};\n for (const [name, actionFn] of actionMap) {\n result[name] = async (params) => {\n const setState = getSetState();\n const state = getState();\n if (setState) {\n await actionFn(params, setState, state);\n }\n };\n }\n return result;\n };\n\n const executeAction = async (\n actionName: string,\n params: Record<string, unknown> | undefined,\n setState: SetState,\n state: StateModel = {},\n ): Promise<void> => {\n const entry = actionMap.find(([name]) => name === actionName);\n if (entry) {\n await entry[1](params, setState, state);\n } else {\n console.warn(`Unknown action: ${actionName}`);\n }\n };\n\n return { registry, handlers, executeAction };\n}\n\n/**\n * Build a {@link SetState} (whole-state updater) on top of a path-based\n * store. The updater's result is diffed against the previous state and only\n * changed leaves are written, preserving fine-grained reactivity.\n *\n * Works with both a core {@link StateStore} and the renderer's injected\n * `JsonRenderStateService`.\n */\nexport function createStoreSetState(\n store: Pick<StateStore, 'getSnapshot' | 'update'>,\n): SetState {\n return (updater) => {\n const prev = store.getSnapshot();\n const next = updater(prev);\n if (next === prev) return;\n const prevFlat = flattenToPointers(prev);\n const nextFlat = flattenToPointers(next);\n const allKeys = new Set([\n ...Object.keys(prevFlat),\n ...Object.keys(nextFlat),\n ]);\n const updates: Record<string, unknown> = {};\n for (const key of allKeys) {\n if (prevFlat[key] !== nextFlat[key]) {\n updates[key] = key in nextFlat ? nextFlat[key] : undefined;\n }\n }\n if (Object.keys(updates).length > 0) {\n store.update(updates);\n }\n };\n}\n","import { DestroyRef, type Signal, computed, inject, signal } from '@angular/core';\nimport type {\n FlatElement,\n JsonPatch,\n Spec,\n SpecDataPart,\n UIElement,\n} from '@json-render/core';\nimport {\n SPEC_DATA_PART_TYPE,\n applySpecPatch,\n createMixedStreamParser,\n getByPath,\n nestedToFlat,\n removeByPath,\n setByPath,\n} from '@json-render/core';\n\n/**\n * Token usage metadata from AI generation.\n */\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\n/**\n * Parse result for a single line — either a patch or usage metadata.\n */\ntype ParsedLine =\n | { type: 'patch'; patch: JsonPatch }\n | { type: 'usage'; usage: TokenUsage }\n | null;\n\n/**\n * Parse a single JSON line (patch or metadata).\n */\nfunction parseLine(line: string): ParsedLine {\n try {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('//')) {\n return null;\n }\n const parsed = JSON.parse(trimmed);\n\n // Check for usage metadata\n if (parsed.__meta === 'usage') {\n return {\n type: 'usage',\n usage: {\n promptTokens: parsed.promptTokens ?? 0,\n completionTokens: parsed.completionTokens ?? 0,\n totalTokens: parsed.totalTokens ?? 0,\n },\n };\n }\n\n return { type: 'patch', patch: parsed as JsonPatch };\n } catch {\n return null;\n }\n}\n\n/**\n * Set a value at a spec path (for add/replace operations).\n */\nfunction setSpecValue(newSpec: Spec, path: string, value: unknown): void {\n if (path === '/root') {\n newSpec.root = value as string;\n return;\n }\n\n if (path === '/state') {\n newSpec.state = value as Record<string, unknown>;\n return;\n }\n\n if (path.startsWith('/state/')) {\n if (!newSpec.state) newSpec.state = {};\n const statePath = path.slice('/state'.length); // e.g. \"/posts\"\n setByPath(newSpec.state as Record<string, unknown>, statePath, value);\n return;\n }\n\n if (path.startsWith('/elements/')) {\n const pathParts = path.slice('/elements/'.length).split('/');\n const elementKey = pathParts[0];\n if (!elementKey) return;\n\n if (pathParts.length === 1) {\n newSpec.elements[elementKey] = value as UIElement;\n } else {\n const element = newSpec.elements[elementKey];\n if (element) {\n const propPath = '/' + pathParts.slice(1).join('/');\n const newElement = { ...element };\n setByPath(\n newElement as unknown as Record<string, unknown>,\n propPath,\n value,\n );\n newSpec.elements[elementKey] = newElement;\n }\n }\n }\n}\n\n/**\n * Remove a value at a spec path.\n */\nfunction removeSpecValue(newSpec: Spec, path: string): void {\n if (path === '/state') {\n delete newSpec.state;\n return;\n }\n\n if (path.startsWith('/state/') && newSpec.state) {\n const statePath = path.slice('/state'.length);\n removeByPath(newSpec.state as Record<string, unknown>, statePath);\n return;\n }\n\n if (path.startsWith('/elements/')) {\n const pathParts = path.slice('/elements/'.length).split('/');\n const elementKey = pathParts[0];\n if (!elementKey) return;\n\n if (pathParts.length === 1) {\n const { [elementKey]: _, ...rest } = newSpec.elements;\n newSpec.elements = rest;\n } else {\n const element = newSpec.elements[elementKey];\n if (element) {\n const propPath = '/' + pathParts.slice(1).join('/');\n const newElement = { ...element };\n removeByPath(newElement as unknown as Record<string, unknown>, propPath);\n newSpec.elements[elementKey] = newElement;\n }\n }\n }\n}\n\n/**\n * Get a value at a spec path.\n */\nfunction getSpecValue(spec: Spec, path: string): unknown {\n if (path === '/root') return spec.root;\n if (path === '/state') return spec.state;\n if (path.startsWith('/state/') && spec.state) {\n const statePath = path.slice('/state'.length);\n return getByPath(spec.state as Record<string, unknown>, statePath);\n }\n return getByPath(spec as unknown as Record<string, unknown>, path);\n}\n\n/**\n * Apply an RFC 6902 JSON patch to the current spec, returning a new spec\n * object (structural sharing for untouched elements).\n * Supports add, remove, replace, move, copy, and test operations.\n */\nexport function applyPatch(spec: Spec, patch: JsonPatch): Spec {\n const newSpec = {\n ...spec,\n elements: { ...spec.elements },\n ...(spec.state ? { state: { ...spec.state } } : {}),\n };\n\n switch (patch.op) {\n case 'add':\n case 'replace': {\n setSpecValue(newSpec, patch.path, patch.value);\n break;\n }\n case 'remove': {\n removeSpecValue(newSpec, patch.path);\n break;\n }\n case 'move': {\n if (!patch.from) break;\n const moveValue = getSpecValue(newSpec, patch.from);\n removeSpecValue(newSpec, patch.from);\n setSpecValue(newSpec, patch.path, moveValue);\n break;\n }\n case 'copy': {\n if (!patch.from) break;\n const copyValue = getSpecValue(newSpec, patch.from);\n setSpecValue(newSpec, patch.path, copyValue);\n break;\n }\n case 'test': {\n // test is a no-op for rendering purposes (validation only)\n break;\n }\n }\n\n return newSpec;\n}\n\n/**\n * Options for {@link injectUIStream}.\n */\nexport interface UIStreamOptions {\n /** API endpoint */\n api: string;\n /** Callback when complete */\n onComplete?: (spec: Spec) => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n}\n\n/**\n * Return type for {@link injectUIStream}.\n */\nexport interface UIStreamReturn {\n /** Current UI spec */\n readonly spec: Signal<Spec | null>;\n /** Whether currently streaming */\n readonly isStreaming: Signal<boolean>;\n /** Error if any */\n readonly error: Signal<Error | null>;\n /** Token usage from the last generation */\n readonly usage: Signal<TokenUsage | null>;\n /** Raw JSONL lines received from the stream (JSON patch lines) */\n readonly rawLines: Signal<string[]>;\n /** Send a prompt to generate UI */\n send: (prompt: string, context?: Record<string, unknown>) => Promise<void>;\n /** Clear the current spec */\n clear: () => void;\n}\n\n/**\n * Streaming UI generation. POSTs `{ prompt, context, currentSpec }` to the\n * endpoint and progressively applies the returned JSONL patch stream to the\n * `spec` signal, so partial UIs render as they arrive.\n *\n * Must be called in an injection context (aborts in-flight requests on\n * destroy).\n *\n * @example\n * ```ts\n * export class GeneratePage {\n * readonly ui = injectUIStream({ api: '/api/generate' });\n * }\n * // template:\n * // <json-render [spec]=\"ui.spec()\" [registry]=\"registry\" [loading]=\"ui.isStreaming()\" />\n * ```\n */\nexport function injectUIStream(options: UIStreamOptions): UIStreamReturn {\n const spec = signal<Spec | null>(null);\n const isStreaming = signal(false);\n const error = signal<Error | null>(null);\n const usage = signal<TokenUsage | null>(null);\n const rawLines = signal<string[]>([]);\n let abortController: AbortController | null = null;\n\n inject(DestroyRef).onDestroy(() => {\n abortController?.abort();\n });\n\n const clear = () => {\n spec.set(null);\n error.set(null);\n };\n\n const send = async (prompt: string, context?: Record<string, unknown>) => {\n // Abort any existing request\n abortController?.abort();\n abortController = new AbortController();\n\n isStreaming.set(true);\n error.set(null);\n usage.set(null);\n rawLines.set([]);\n\n // Start with previous spec if provided, otherwise empty spec\n const previousSpec = context?.['previousSpec'] as Spec | undefined;\n let currentSpec: Spec =\n previousSpec && previousSpec.root\n ? { ...previousSpec, elements: { ...previousSpec.elements } }\n : { root: '', elements: {} };\n spec.set(currentSpec);\n\n const handleLine = (trimmed: string) => {\n const result = parseLine(trimmed);\n if (!result) return;\n if (result.type === 'usage') {\n usage.set(result.usage);\n } else {\n rawLines.update((prev) => [...prev, trimmed]);\n currentSpec = applyPatch(currentSpec, result.patch);\n spec.set(currentSpec);\n }\n };\n\n try {\n const response = await fetch(options.api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n prompt,\n context,\n currentSpec,\n }),\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n // Try to parse JSON error response for better error messages\n let errorMessage = `HTTP error: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.message) {\n errorMessage = errorData.message;\n } else if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Ignore JSON parsing errors, use default message\n }\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n handleLine(trimmed);\n }\n }\n\n // Process any remaining buffer\n if (buffer.trim()) {\n handleLine(buffer.trim());\n }\n\n options.onComplete?.(currentSpec);\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n return;\n }\n const resolvedError = err instanceof Error ? err : new Error(String(err));\n error.set(resolvedError);\n options.onError?.(resolvedError);\n } finally {\n isStreaming.set(false);\n }\n };\n\n return {\n spec: spec.asReadonly(),\n isStreaming: isStreaming.asReadonly(),\n error: error.asReadonly(),\n usage: usage.asReadonly(),\n rawLines: rawLines.asReadonly(),\n send,\n clear,\n };\n}\n\n/**\n * Convert a flat element list to a Spec.\n * Input elements use key/parentKey to establish identity and relationships.\n * Output spec uses the map-based format where key is the map entry key\n * and parent-child relationships are expressed through children arrays.\n */\nexport function flatToTree(elements: FlatElement[]): Spec {\n const elementMap: Record<string, UIElement> = {};\n let root = '';\n\n // First pass: add all elements to map\n for (const element of elements) {\n elementMap[element.key] = {\n type: element.type,\n props: element.props,\n children: [],\n visible: element.visible,\n };\n }\n\n // Second pass: build parent-child relationships\n for (const element of elements) {\n if (element.parentKey) {\n const parent = elementMap[element.parentKey];\n if (parent) {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push(element.key);\n }\n } else {\n root = element.key;\n }\n }\n\n return { root, elements: elementMap };\n}\n\n// =============================================================================\n// buildSpecFromParts — Derive Spec from AI SDK data parts\n// =============================================================================\n\n/**\n * A single part from the AI SDK's `message.parts` array. This is a minimal\n * structural type so that library helpers do not depend on the AI SDK.\n */\nexport interface DataPart {\n type: string;\n text?: string;\n data?: unknown;\n}\n\n/**\n * Type guard that validates a data part payload looks like a valid\n * {@link SpecDataPart} before we cast it.\n */\nfunction isSpecDataPart(data: unknown): data is SpecDataPart {\n if (typeof data !== 'object' || data === null) return false;\n const obj = data as Record<string, unknown>;\n switch (obj['type']) {\n case 'patch':\n return typeof obj['patch'] === 'object' && obj['patch'] !== null;\n case 'flat':\n case 'nested':\n return typeof obj['spec'] === 'object' && obj['spec'] !== null;\n default:\n return false;\n }\n}\n\n/**\n * Build a `Spec` by replaying all spec data parts from a message's\n * parts array (AI SDK `UIMessage.parts`). Returns `null` if no spec data\n * parts are present.\n */\nexport function buildSpecFromParts(parts: DataPart[]): Spec | null {\n const spec: Spec = { root: '', elements: {} };\n let hasSpec = false;\n\n for (const part of parts) {\n if (part.type === SPEC_DATA_PART_TYPE) {\n if (!isSpecDataPart(part.data)) continue;\n const payload = part.data;\n if (payload.type === 'patch') {\n hasSpec = true;\n applySpecPatch(spec, payload.patch);\n } else if (payload.type === 'flat') {\n hasSpec = true;\n Object.assign(spec, payload.spec);\n } else if (payload.type === 'nested') {\n hasSpec = true;\n const flat = nestedToFlat(payload.spec);\n Object.assign(spec, flat);\n }\n }\n }\n\n return hasSpec ? spec : null;\n}\n\n/**\n * Extract and join all text content from a message's parts array.\n */\nexport function getTextFromParts(parts: DataPart[]): string {\n return parts\n .filter(\n (p): p is DataPart & { text: string } =>\n p.type === 'text' && typeof p.text === 'string',\n )\n .map((p) => p.text.trim())\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Extract both the json-render spec and the text content from a message's\n * parts array, as memoized signals. Angular counterpart of\n * `useJsonRenderMessage` from the other renderers.\n *\n * @example\n * ```ts\n * readonly msg = jsonRenderMessage(() => this.message().parts);\n * // template: @if (msg.hasSpec()) { <json-render [spec]=\"msg.spec()\" ... /> }\n * ```\n */\nexport function jsonRenderMessage(parts: Signal<DataPart[]> | (() => DataPart[])): {\n spec: Signal<Spec | null>;\n text: Signal<string>;\n hasSpec: Signal<boolean>;\n} {\n const result = computed(() => {\n const p = parts();\n return {\n spec: buildSpecFromParts(p),\n text: getTextFromParts(p),\n };\n });\n\n return {\n spec: computed(() => result().spec),\n text: computed(() => result().text),\n hasSpec: computed(() => {\n const s = result().spec;\n return s !== null && Object.keys(s.elements || {}).length > 0;\n }),\n };\n}\n\n// =============================================================================\n// injectChatUI — Chat + GenUI\n// =============================================================================\n\n/**\n * A single message in the chat, which may contain text, a rendered UI spec,\n * or both.\n */\nexport interface ChatMessage {\n /** Unique message ID */\n id: string;\n /** Who sent this message */\n role: 'user' | 'assistant';\n /** Text content (conversational prose) */\n text: string;\n /** json-render Spec built from JSONL patches (null if no UI was generated) */\n spec: Spec | null;\n}\n\n/**\n * Options for {@link injectChatUI}.\n */\nexport interface ChatUIOptions {\n /** API endpoint that accepts `{ messages: Array<{ role, content }> }` and returns a text stream */\n api: string;\n /** Callback when streaming completes for a message */\n onComplete?: (message: ChatMessage) => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n}\n\n/**\n * Return type for {@link injectChatUI}.\n */\nexport interface ChatUIReturn {\n /** All messages in the conversation */\n readonly messages: Signal<ChatMessage[]>;\n /** Whether currently streaming an assistant response */\n readonly isStreaming: Signal<boolean>;\n /** Error from the last request, if any */\n readonly error: Signal<Error | null>;\n /** Send a user message */\n send: (text: string) => Promise<void>;\n /** Clear all messages and reset the conversation */\n clear: () => void;\n}\n\nlet chatMessageIdCounter = 0;\nfunction generateChatId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n chatMessageIdCounter += 1;\n return `msg-${Date.now()}-${chatMessageIdCounter}`;\n}\n\n/**\n * Chat + GenUI: manages a multi-turn conversation where each assistant\n * message can contain both conversational text and a json-render UI spec.\n * The full message history is sent to the endpoint and the streamed response\n * is split into text lines and JSONL patch lines.\n *\n * Must be called in an injection context.\n */\nexport function injectChatUI(options: ChatUIOptions): ChatUIReturn {\n const messages = signal<ChatMessage[]>([]);\n const isStreaming = signal(false);\n const error = signal<Error | null>(null);\n let abortController: AbortController | null = null;\n\n inject(DestroyRef).onDestroy(() => {\n abortController?.abort();\n });\n\n const clear = () => {\n messages.set([]);\n error.set(null);\n };\n\n const send = async (text: string) => {\n if (!text.trim()) return;\n\n // Abort any existing request\n abortController?.abort();\n abortController = new AbortController();\n\n const userMessage: ChatMessage = {\n id: generateChatId(),\n role: 'user',\n text: text.trim(),\n spec: null,\n };\n\n const assistantId = generateChatId();\n const assistantMessage: ChatMessage = {\n id: assistantId,\n role: 'assistant',\n text: '',\n spec: null,\n };\n\n // Build messages array for the API (full conversation history + new message).\n const historyForApi = [\n ...messages()\n .filter((m) => m.id !== userMessage.id && m.id !== assistantId)\n .map((m) => ({\n role: m.role,\n content: m.text,\n })),\n { role: 'user' as const, content: text.trim() },\n ];\n\n // Append user message and empty assistant placeholder\n messages.update((prev) => [...prev, userMessage, assistantMessage]);\n isStreaming.set(true);\n error.set(null);\n\n // Mutable state for accumulating the assistant response\n let accumulatedText = '';\n const currentSpec: Spec = { root: '', elements: {} };\n let hasSpec = false;\n\n const snapshotSpec = (): Spec => ({\n root: currentSpec.root,\n elements: { ...currentSpec.elements },\n ...(currentSpec.state ? { state: { ...currentSpec.state } } : {}),\n });\n\n try {\n const response = await fetch(options.api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ messages: historyForApi }),\n signal: abortController.signal,\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP error: ${response.status}`;\n try {\n const errorData = await response.json();\n if (errorData.message) {\n errorMessage = errorData.message;\n } else if (errorData.error) {\n errorMessage = errorData.error;\n }\n } catch {\n // Ignore JSON parsing errors\n }\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n\n // Use createMixedStreamParser to classify lines\n const parser = createMixedStreamParser({\n onPatch(patch) {\n hasSpec = true;\n applySpecPatch(currentSpec, patch);\n const snapshot = snapshotSpec();\n messages.update((prev) =>\n prev.map((m) =>\n m.id === assistantId ? { ...m, spec: snapshot } : m,\n ),\n );\n },\n onText(line) {\n accumulatedText += (accumulatedText ? '\\n' : '') + line;\n messages.update((prev) =>\n prev.map((m) =>\n m.id === assistantId ? { ...m, text: accumulatedText } : m,\n ),\n );\n },\n });\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n parser.push(decoder.decode(value, { stream: true }));\n }\n parser.flush();\n\n // Build final message for onComplete callback\n const finalMessage: ChatMessage = {\n id: assistantId,\n role: 'assistant',\n text: accumulatedText,\n spec: hasSpec ? snapshotSpec() : null,\n };\n options.onComplete?.(finalMessage);\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n return;\n }\n const resolvedError = err instanceof Error ? err : new Error(String(err));\n error.set(resolvedError);\n // Remove empty assistant message on error\n messages.update((prev) =>\n prev.filter((m) => m.id !== assistantId || m.text.length > 0),\n );\n options.onError?.(resolvedError);\n } finally {\n isStreaming.set(false);\n }\n };\n\n return {\n messages: messages.asReadonly(),\n isStreaming: isStreaming.asReadonly(),\n error: error.asReadonly(),\n send,\n clear,\n };\n}\n","import { defineSchema } from '@json-render/core';\n\n/**\n * The schema for ngx-json-render.\n *\n * Defines:\n * - Spec: A flat tree of elements with keys, types, props, and children references\n * - Catalog: Components with props schemas, and optional actions\n *\n * This is the same spec grammar the other json-render renderers use, so\n * catalogs and specs are portable across frameworks.\n */\nexport const schema = defineSchema(\n (s) => ({\n // What the AI-generated SPEC looks like\n spec: s.object({\n /** Root element key */\n root: s.string(),\n /** Flat map of elements by key */\n elements: s.record(\n s.object({\n /** Component type from catalog */\n type: s.ref('catalog.components'),\n /** Component props */\n props: s.propsOf('catalog.components'),\n /** Child element keys (flat reference) */\n children: s.array(s.string()),\n /** Visibility condition */\n visible: { ...s.any(), ...s.optional() },\n /** Repeat children from a state array */\n repeat: { ...s.any(), ...s.optional() },\n }),\n ),\n }),\n\n // What the CATALOG must provide\n catalog: s.object({\n /** Component definitions */\n components: s.map({\n /** Zod schema for component props */\n props: s.zod(),\n /** Slots for this component. Use ['default'] for children, or named slots like ['header', 'footer'] */\n slots: s.array(s.string()),\n /** Description for AI generation hints */\n description: s.string(),\n /** Example prop values used in prompt examples (auto-generated from Zod schema if omitted) */\n example: s.any(),\n }),\n /** Action definitions (optional) */\n actions: s.map({\n /** Zod schema for action params */\n params: s.zod(),\n /** Description for AI generation hints */\n description: s.string(),\n }),\n }),\n }),\n {\n builtInActions: [\n {\n name: 'setState',\n description:\n 'Update a value in the state model at the given statePath. Params: { statePath: string, value: any }',\n },\n {\n name: 'pushState',\n description:\n 'Append an item to an array in state. Params: { statePath: string, value: any, clearStatePath?: string }. Value can contain {\"$state\":\"/path\"} refs and \"$id\" for auto IDs.',\n },\n {\n name: 'removeState',\n description:\n 'Remove an item from an array in state by index. Params: { statePath: string, index: number }',\n },\n {\n name: 'validateForm',\n description:\n 'Validate all registered form fields and write the result to state. Params: { statePath?: string }. Defaults to /formValidation. Result: { valid: boolean, errors: Record<string, string[]> }.',\n },\n ],\n defaultRules: [\n // Element integrity\n \"CRITICAL INTEGRITY CHECK: Before outputting ANY element that references children, you MUST have already output (or will output) each child as its own element. If an element has children: ['a', 'b'], then elements 'a' and 'b' MUST exist. A missing child element causes that entire branch of the UI to be invisible.\",\n 'SELF-CHECK: After generating all elements, mentally walk the tree from root. Every key in every children array must resolve to a defined element. If you find a gap, output the missing element immediately.',\n 'REQUIRED FIELDS: Every element MUST include a \"children\" array. Leaf elements (text, badges, inputs, images) use an empty array: \"children\": []. Omitting \"children\" fails validation.',\n\n // Field placement\n 'CRITICAL: The \"visible\" field goes on the ELEMENT object, NOT inside \"props\". Correct: {\"type\":\"<ComponentName>\",\"props\":{},\"visible\":{\"$state\":\"/tab\",\"eq\":\"home\"},\"children\":[...]}.',\n 'CRITICAL: The \"on\" field goes on the ELEMENT object, NOT inside \"props\". Use on.press, on.change, on.submit etc. NEVER put action/actionParams inside props.',\n\n // State and data\n 'When the user asks for a UI that displays data (e.g. blog posts, products, users), ALWAYS include a state field with realistic sample data. The state field is a top-level field on the spec (sibling of root/elements).',\n 'When building repeating content backed by a state array (e.g. posts, products, items), use the \"repeat\" field on a container element. Example: { \"type\": \"<ContainerComponent>\", \"props\": {}, \"repeat\": { \"statePath\": \"/posts\", \"key\": \"id\" }, \"children\": [\"post-card\"] }. For a nested list stored on the enclosing item, use \"repeat\": { \"statePath\": { \"$item\": \"comments\" }, \"key\": \"id\" }. The $item statePath form is valid only inside another repeat. Inside repeated children, use { \"$item\": \"field\" } to read a field from the current item, and { \"$index\": true } for the current array index. For two-way binding to an item field use { \"$bindItem\": \"completed\" }. Do NOT hardcode individual elements for each array item.',\n\n // Design quality\n 'Design with visual hierarchy: use container components to group content, heading components for section titles, proper spacing, and status indicators. ONLY use components from the AVAILABLE COMPONENTS list.',\n 'For data-rich UIs, use multi-column layout components if available. For forms and single-column content, use vertical layout components. ONLY use components from the AVAILABLE COMPONENTS list.',\n 'Always include realistic, professional-looking sample data. For blogs include 3-4 posts with varied titles, authors, dates, categories. For products include names, prices, images. Never leave data empty.',\n ],\n },\n);\n\n/**\n * Type for the Angular schema\n */\nexport type AngularSchema = typeof schema;\n\n/**\n * Infer the spec type from a catalog\n */\nexport type AngularSpec<TCatalog> = typeof schema extends {\n createCatalog: (catalog: TCatalog) => { _specType: infer S };\n}\n ? S\n : never;\n","/*\n * Public API Surface of ngx-json-render\n */\n\n// Renderer components\nexport { JsonRenderer } from './lib/renderer.component';\nexport { JrChildren } from './lib/children.component';\nexport { JrElement } from './lib/element.component';\nexport { JrRepeatScope } from './lib/repeat-scope.component';\nexport { JrConfirmDialog } from './lib/confirm-dialog.component';\n\n// Render context / DI\nexport {\n RENDER_CONTEXT,\n REPEAT_SCOPE,\n injectRenderContext,\n injectRepeatScope,\n} from './lib/tokens';\nexport { JsonRenderRootContext } from './lib/root-context';\n\n// State\nexport {\n JsonRenderStateService,\n injectStateStore,\n injectStateValue,\n injectStateBinding,\n injectBoundProp,\n} from './lib/state.service';\n\n// Actions\nexport {\n JsonRenderActionsService,\n injectActions,\n injectAction,\n type PendingConfirmation,\n} from './lib/actions.service';\n\n// Validation\nexport {\n JsonRenderValidationService,\n injectValidation,\n injectFieldValidation,\n type FieldValidationState,\n} from './lib/validation.service';\n\n// Registry\nexport {\n defineRegistry,\n createStoreSetState,\n type DefineRegistryResult,\n} from './lib/registry';\n\n// Types\nexport type {\n Actions,\n ActionFn,\n CatalogHasActions,\n ComponentRegistry,\n Components,\n EventHandle,\n RegistryEntry,\n RenderContext,\n RepeatScope,\n SetState,\n StateChange,\n StateModel,\n} from './lib/types';\n\n// Streaming / AI helpers\nexport {\n applyPatch,\n buildSpecFromParts,\n flatToTree,\n getTextFromParts,\n injectChatUI,\n injectUIStream,\n jsonRenderMessage,\n type ChatMessage,\n type ChatUIOptions,\n type ChatUIReturn,\n type DataPart,\n type TokenUsage,\n type UIStreamOptions,\n type UIStreamReturn,\n} from './lib/streaming';\n\n// Schema (spec format + prompt rules)\nexport { schema, type AngularSchema, type AngularSpec } from './lib/schema';\n\n// Devtools\nexport { injectDevtoolsActive } from './lib/devtools';\n\n// Core re-exports (for convenience)\nexport type {\n ActionBinding,\n ActionHandler,\n JsonPatch,\n Spec,\n StateStore,\n UIElement,\n VisibilityCondition,\n} from '@json-render/core';\nexport { createStateStore, nestedToFlat } from '@json-render/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "ngx-json-render",
3
+ "version": "0.1.0",
4
+ "description": "Angular renderer for json-render — stream AI-generated JSON specs into real Angular components with signals.",
5
+ "keywords": [
6
+ "angular",
7
+ "json-render",
8
+ "generative-ui",
9
+ "genui",
10
+ "ai",
11
+ "renderer",
12
+ "signals",
13
+ "server-driven-ui"
14
+ ],
15
+ "license": "Apache-2.0",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/shteynu/ngx-json-render.git"
19
+ },
20
+ "homepage": "https://github.com/shteynu/ngx-json-render",
21
+ "bugs": {
22
+ "url": "https://github.com/shteynu/ngx-json-render/issues"
23
+ },
24
+ "peerDependencies": {
25
+ "@angular/common": ">=21.0.0",
26
+ "@angular/core": ">=21.0.0"
27
+ },
28
+ "dependencies": {
29
+ "@json-render/core": "^0.20.0",
30
+ "tslib": "^2.3.0"
31
+ },
32
+ "sideEffects": false,
33
+ "module": "fesm2022/ngx-json-render.mjs",
34
+ "typings": "types/ngx-json-render.d.ts",
35
+ "exports": {
36
+ "./package.json": {
37
+ "default": "./package.json"
38
+ },
39
+ ".": {
40
+ "types": "./types/ngx-json-render.d.ts",
41
+ "default": "./fesm2022/ngx-json-render.mjs"
42
+ }
43
+ },
44
+ "type": "module"
45
+ }