@ng-render/angular 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":"ng-render-angular.mjs","sources":["../../../projects/ng-render/src/lib/schema.ts","../../../projects/ng-render/src/lib/registry/registry.token.ts","../../../projects/ng-render/src/lib/registry/registry.ts","../../../projects/ng-render/src/lib/services/spec-state.service.ts","../../../projects/ng-render/src/lib/services/visibility.service.ts","../../../projects/ng-render/src/lib/services/action-dispatcher.service.ts","../../../projects/ng-render/src/lib/services/validation.service.ts","../../../projects/ng-render/src/lib/services/repeat-scope.service.ts","../../../projects/ng-render/src/lib/renderer/element-error-handler.ts","../../../projects/ng-render/src/lib/renderer/element-renderer.component.ts","../../../projects/ng-render/src/lib/renderer/json-renderer.component.ts","../../../projects/ng-render/src/lib/renderer/children-outlet.directive.ts","../../../projects/ng-render/src/lib/renderer/confirm-dialog.component.ts","../../../projects/ng-render/src/lib/renderer/fallback.component.ts","../../../projects/ng-render/src/lib/hooks/spec-patch.ts","../../../projects/ng-render/src/lib/hooks/ui-stream.ts","../../../projects/ng-render/src/lib/hooks/chat-ui.ts","../../../projects/ng-render/src/lib/hooks/bound-prop.ts","../../../projects/ng-render/src/lib/hooks/spec-builders.ts","../../../projects/ng-render/src/public-api.ts","../../../projects/ng-render/src/ng-render-angular.ts"],"sourcesContent":["import { defineSchema } from '@json-render/core';\n\n/**\n * The schema for @ng-render/angular.\n *\n * Identical to the React schema — the schema is framework-agnostic.\n */\nexport const schema = defineSchema(\n (s) => ({\n spec: s.object({\n root: s.string(),\n elements: s.record(\n s.object({\n type: s.ref('catalog.components'),\n props: s.propsOf('catalog.components'),\n children: s.array(s.string()),\n visible: s.any(),\n }),\n ),\n }),\n\n catalog: s.object({\n components: s.map({\n props: s.zod(),\n slots: s.array(s.string()),\n description: s.string(),\n example: s.any(),\n }),\n actions: s.map({\n params: s.zod(),\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 defaultRules: [\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 '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 '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\"] }. Replace <ContainerComponent> with an appropriate component from the AVAILABLE COMPONENTS list. 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 '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\nexport type AngularSchema = typeof schema;\n","import { InjectionToken, Type } from '@angular/core';\nimport type { ActionHandler } from '@json-render/core';\nimport type { ComponentRegistry } from '../types/component-render.types';\n\nexport const NG_RENDER_REGISTRY = new InjectionToken<ComponentRegistry>(\n 'NG_RENDER_REGISTRY',\n);\n\nexport const NG_RENDER_ACTION_HANDLERS = new InjectionToken<\n Record<string, ActionHandler>\n>('NG_RENDER_ACTION_HANDLERS');\n\nexport const NG_RENDER_NAVIGATE = new InjectionToken<\n (path: string) => void\n>('NG_RENDER_NAVIGATE');\n\nexport const NG_RENDER_FALLBACK = new InjectionToken<Type<any>>(\n 'NG_RENDER_FALLBACK',\n);\n","import {\n makeEnvironmentProviders,\n type EnvironmentProviders,\n type Type,\n} from '@angular/core';\nimport type { Catalog, ActionHandler } from '@json-render/core';\nimport type { ComponentRegistry } from '../types/component-render.types';\nimport type {\n Actions,\n CatalogHasActions,\n SetState,\n StateModel,\n} from '../types/catalog-types';\nimport {\n NG_RENDER_REGISTRY,\n NG_RENDER_ACTION_HANDLERS,\n NG_RENDER_NAVIGATE,\n NG_RENDER_FALLBACK,\n} from './registry.token';\n\n/**\n * Result from defineRegistry.\n */\nexport interface DefineRegistryResult {\n registry: ComponentRegistry;\n handlers: (\n getSetState: () => SetState | undefined,\n getState: () => StateModel,\n ) => Record<string, (params: Record<string, unknown>) => Promise<void>>;\n executeAction: (\n actionName: string,\n params: Record<string, unknown> | undefined,\n setState: SetState,\n state?: StateModel,\n ) => Promise<void>;\n}\n\ntype DefineRegistryActionFn = (\n params: Record<string, unknown> | undefined,\n setState: SetState,\n state: StateModel,\n) => Promise<void>;\n\n/**\n * Options for defineRegistry. Actions are required when the catalog declares them.\n */\ntype DefineRegistryOptions<C extends Catalog> = {\n components?: Record<string, Type<any>>;\n} & (CatalogHasActions<C> extends true\n ? { actions: Actions<C> }\n : { actions?: Actions<C> });\n\n/**\n * Create a type-safe registry from a catalog.\n * Maps component names to Angular component classes.\n */\nexport function defineRegistry<C extends Catalog>(\n _catalog: C,\n options: DefineRegistryOptions<C>,\n): DefineRegistryResult {\n const registry: ComponentRegistry = {};\n if (options.components) {\n for (const [name, componentType] of Object.entries(options.components)) {\n registry[name] = componentType;\n }\n }\n\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 * Options for provideNgRender.\n */\nexport interface ProvideNgRenderOptions {\n registry: ComponentRegistry;\n handlers?: Record<string, ActionHandler>;\n navigate?: (path: string) => void;\n fallback?: Type<any>;\n}\n\n/**\n * Provide ng-render configuration at the environment level.\n * Replaces React's <JSONUIProvider>.\n */\nexport function provideNgRender(\n options: ProvideNgRenderOptions,\n): EnvironmentProviders {\n const providers: any[] = [\n { provide: NG_RENDER_REGISTRY, useValue: options.registry },\n ];\n\n if (options.handlers) {\n providers.push({\n provide: NG_RENDER_ACTION_HANDLERS,\n useValue: options.handlers,\n });\n }\n\n if (options.navigate) {\n providers.push({\n provide: NG_RENDER_NAVIGATE,\n useValue: options.navigate,\n });\n }\n\n if (options.fallback) {\n providers.push({\n provide: NG_RENDER_FALLBACK,\n useValue: options.fallback,\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { getByPath, setByPath, type StateModel } from '@json-render/core';\n\n@Injectable()\nexport class SpecStateService {\n private readonly _state = signal<StateModel>({});\n\n readonly state = this._state.asReadonly();\n\n get(path: string): unknown {\n return getByPath(this._state(), path);\n }\n\n set(path: string, value: unknown): void {\n this._state.update((prev) => {\n const next = { ...prev };\n setByPath(next, path, value);\n return next;\n });\n }\n\n update(updates: Record<string, unknown>): void {\n this._state.update((prev) => {\n const next = { ...prev };\n for (const [path, value] of Object.entries(updates)) {\n setByPath(next, path, value);\n }\n return next;\n });\n }\n\n initialize(initialState: StateModel): void {\n this._state.set({ ...initialState });\n }\n\n mergeInitialState(state: StateModel): void {\n this._state.update((prev) => ({ ...prev, ...state }));\n }\n}\n","import { Injectable, inject, computed } from '@angular/core';\nimport {\n evaluateVisibility,\n type VisibilityCondition,\n type VisibilityContext,\n} from '@json-render/core';\nimport { SpecStateService } from './spec-state.service';\n\n@Injectable()\nexport class VisibilityService {\n private readonly stateService = inject(SpecStateService);\n\n readonly ctx = computed<VisibilityContext>(() => ({\n stateModel: this.stateService.state(),\n }));\n\n isVisible(condition: VisibilityCondition | undefined): boolean {\n return evaluateVisibility(condition, this.ctx());\n }\n}\n","import { Injectable, inject, signal, Optional } from '@angular/core';\nimport {\n resolveAction,\n executeAction,\n type ActionBinding,\n type ActionHandler,\n type ResolvedAction,\n} from '@json-render/core';\nimport { SpecStateService } from './spec-state.service';\nimport {\n NG_RENDER_ACTION_HANDLERS,\n NG_RENDER_NAVIGATE,\n} from '../registry/registry.token';\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 if (value === '$id') return generateUniqueId();\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 1 && typeof obj['$state'] === 'string') {\n return get(obj['$state'] as string);\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(\n value as Record<string, unknown>,\n )) {\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@Injectable()\nexport class ActionDispatcherService {\n private readonly stateService = inject(SpecStateService);\n private readonly handlers =\n inject(NG_RENDER_ACTION_HANDLERS, { optional: true }) ?? {};\n private readonly navigate = inject(NG_RENDER_NAVIGATE, {\n optional: true,\n });\n\n readonly loadingActions = signal<Set<string>>(new Set());\n readonly pendingConfirmation = signal<PendingConfirmation | null>(null);\n\n async execute(binding: ActionBinding): Promise<void> {\n const state = this.stateService.state();\n const resolved = resolveAction(binding, state);\n\n // Built-in: setState\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 this.stateService.set(statePath, value);\n }\n return;\n }\n\n // Built-in: pushState\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, (p) =>\n this.stateService.get(p),\n );\n const arr =\n (this.stateService.get(statePath) as unknown[] | undefined) ?? [];\n this.stateService.set(statePath, [...arr, resolvedValue]);\n const clearStatePath = resolved.params['clearStatePath'] as\n | string\n | undefined;\n if (clearStatePath) {\n this.stateService.set(clearStatePath, '');\n }\n }\n return;\n }\n\n // Built-in: removeState\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 =\n (this.stateService.get(statePath) as unknown[] | undefined) ?? [];\n this.stateService.set(\n statePath,\n arr.filter((_, i) => i !== index),\n );\n }\n return;\n }\n\n // Built-in: push (navigation)\n if (resolved.action === 'push' && resolved.params) {\n const screen = resolved.params['screen'] as string;\n if (screen) {\n const currentScreen = this.stateService.get('/currentScreen') as\n | string\n | undefined;\n const navStack =\n (this.stateService.get('/navStack') as string[] | undefined) ?? [];\n if (currentScreen) {\n this.stateService.set('/navStack', [...navStack, currentScreen]);\n } else {\n this.stateService.set('/navStack', [...navStack, '']);\n }\n this.stateService.set('/currentScreen', screen);\n }\n return;\n }\n\n // Built-in: pop (navigation)\n if (resolved.action === 'pop') {\n const navStack =\n (this.stateService.get('/navStack') as string[] | undefined) ?? [];\n if (navStack.length > 0) {\n const previousScreen = navStack[navStack.length - 1];\n this.stateService.set('/navStack', navStack.slice(0, -1));\n if (previousScreen) {\n this.stateService.set('/currentScreen', previousScreen);\n } else {\n this.stateService.set('/currentScreen', undefined);\n }\n }\n return;\n }\n\n const handler = this.handlers[resolved.action];\n\n if (!handler) {\n console.warn(`No handler registered for action: ${resolved.action}`);\n return;\n }\n\n // Confirmation flow\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(async () => {\n await this.executeHandler(resolved, handler);\n });\n }\n\n await this.executeHandler(resolved, handler);\n }\n\n confirm(): void {\n this.pendingConfirmation()?.resolve();\n }\n\n cancel(): void {\n this.pendingConfirmation()?.reject();\n }\n\n private async executeHandler(\n resolved: ResolvedAction,\n handler: ActionHandler,\n ): Promise<void> {\n this.loadingActions.update((prev) => {\n const next = new Set(prev);\n next.add(resolved.action);\n return next;\n });\n\n try {\n await executeAction({\n action: resolved,\n handler,\n setState: (path: string, value: unknown) =>\n this.stateService.set(path, value),\n navigate: this.navigate ?? undefined,\n executeAction: async (name: string) => {\n await this.execute({ action: name });\n },\n });\n } finally {\n this.loadingActions.update((prev) => {\n const next = new Set(prev);\n next.delete(resolved.action);\n return next;\n });\n }\n }\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport {\n runValidation,\n type ValidationConfig,\n type ValidationFunction,\n type ValidationResult,\n} from '@json-render/core';\nimport { SpecStateService } from './spec-state.service';\n\nexport interface FieldValidationState {\n touched: boolean;\n validated: boolean;\n result: ValidationResult | null;\n}\n\n@Injectable()\nexport class ValidationService {\n private readonly stateService = inject(SpecStateService);\n private customFunctions: Record<string, ValidationFunction> = {};\n private fieldConfigs: Record<string, ValidationConfig> = {};\n\n readonly fieldStates = signal<Record<string, FieldValidationState>>({});\n\n setCustomFunctions(fns: Record<string, ValidationFunction>): void {\n this.customFunctions = fns;\n }\n\n registerField(path: string, config: ValidationConfig): void {\n this.fieldConfigs[path] = config;\n }\n\n validate(path: string, config: ValidationConfig): ValidationResult {\n const currentState = this.stateService.state();\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\n const result = runValidation(config, {\n value,\n stateModel: currentState,\n customFunctions: this.customFunctions,\n });\n\n this.fieldStates.update((prev) => ({\n ...prev,\n [path]: {\n touched: prev[path]?.touched ?? true,\n validated: true,\n result,\n },\n }));\n\n return result;\n }\n\n touch(path: string): void {\n this.fieldStates.update((prev) => ({\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(path: string): void {\n this.fieldStates.update((prev) => {\n const { [path]: _, ...rest } = prev;\n return rest;\n });\n }\n\n validateAll(): boolean {\n let allValid = true;\n for (const [path, config] of Object.entries(this.fieldConfigs)) {\n const result = this.validate(path, config);\n if (!result.valid) {\n allValid = false;\n }\n }\n return allValid;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class RepeatScopeService {\n item: unknown = undefined;\n index = 0;\n basePath = '';\n}\n","import { ErrorHandler } from '@angular/core';\n\n/**\n * Custom error handler that absorbs rendering errors for individual elements.\n * Prevents one broken component from crashing the entire tree.\n */\nexport class ElementErrorHandler extends ErrorHandler {\n override handleError(error: unknown): void {\n console.error('[json-render] Rendering error in element:', error);\n }\n}\n","import {\n Component,\n inject,\n input,\n effect,\n ViewContainerRef,\n ChangeDetectionStrategy,\n ErrorHandler,\n Injector,\n EnvironmentInjector,\n createEnvironmentInjector,\n DestroyRef,\n type ComponentRef,\n type OnDestroy,\n} from '@angular/core';\nimport type { UIElement, Spec, ActionBinding } from '@json-render/core';\nimport {\n resolveElementProps,\n resolveBindings,\n resolveActionParam,\n evaluateVisibility,\n getByPath,\n type PropResolutionContext,\n} from '@json-render/core';\nimport type { EventHandle } from '../types/catalog-types';\nimport { SpecStateService } from '../services/spec-state.service';\nimport { VisibilityService } from '../services/visibility.service';\nimport { ActionDispatcherService } from '../services/action-dispatcher.service';\nimport { RepeatScopeService } from '../services/repeat-scope.service';\nimport {\n NG_RENDER_REGISTRY,\n NG_RENDER_FALLBACK,\n} from '../registry/registry.token';\nimport { ChildrenOutletDirective } from './children-outlet.directive';\nimport { ElementErrorHandler } from './element-error-handler';\n\n@Component({\n selector: 'jr-element-renderer',\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: ErrorHandler, useClass: ElementErrorHandler }],\n})\nexport class ElementRendererComponent implements OnDestroy {\n readonly element = input.required<UIElement>();\n readonly spec = input.required<Spec>();\n readonly loading = input<boolean>(false);\n\n private readonly vcr = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly stateService = inject(SpecStateService);\n private readonly visibilityService = inject(VisibilityService);\n private readonly actionDispatcher = inject(ActionDispatcherService);\n private readonly repeatScope = inject(RepeatScopeService, {\n optional: true,\n });\n private readonly registry = inject(NG_RENDER_REGISTRY);\n private readonly fallbackComponent = inject(NG_RENDER_FALLBACK, {\n optional: true,\n });\n\n private componentRef: ComponentRef<any> | null = null;\n private childRenderers: ComponentRef<ElementRendererComponent>[] = [];\n private repeatInjectors: EnvironmentInjector[] = [];\n\n constructor() {\n effect(() => {\n this.render();\n });\n }\n\n private render(): void {\n this.cleanup();\n\n const element = this.element();\n const spec = this.spec();\n const loading = this.loading();\n\n // Read state signal to register dependency for re-rendering\n const state = this.stateService.state();\n\n // Build PropResolutionContext with repeat scope data\n const baseCtx = this.visibilityService.ctx();\n const fullCtx: PropResolutionContext = this.repeatScope\n ? {\n ...baseCtx,\n repeatItem: this.repeatScope.item,\n repeatIndex: this.repeatScope.index,\n repeatBasePath: this.repeatScope.basePath,\n }\n : baseCtx;\n\n // Evaluate visibility\n if (\n element.visible !== undefined &&\n !evaluateVisibility(element.visible, fullCtx)\n ) {\n return;\n }\n\n // Handle repeat elements\n if (element.repeat) {\n this.renderRepeat(element, spec, loading, fullCtx);\n return;\n }\n\n // Resolve bindings and props\n const rawProps = element.props as Record<string, unknown>;\n const elementBindings = resolveBindings(rawProps, fullCtx);\n const resolvedProps = resolveElementProps(rawProps, fullCtx);\n\n const resolvedElement: UIElement =\n resolvedProps !== element.props\n ? { ...element, props: resolvedProps }\n : element;\n\n // Create emit function\n const onBindings = element.on;\n const emit = (eventName: string) => {\n const binding = onBindings?.[eventName];\n if (!binding) return;\n const actionBindings: ActionBinding[] = Array.isArray(binding)\n ? binding\n : [binding];\n for (const b of actionBindings) {\n if (!b.params) {\n this.actionDispatcher.execute(b);\n continue;\n }\n const resolved: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(b.params)) {\n resolved[key] = resolveActionParam(val, fullCtx);\n }\n this.actionDispatcher.execute({ ...b, params: resolved });\n }\n };\n\n // Create on() function\n const on = (eventName: string): EventHandle => {\n const binding = onBindings?.[eventName];\n if (!binding) {\n return { emit: () => {}, shouldPreventDefault: false, bound: false };\n }\n const actionBindings: ActionBinding[] = Array.isArray(binding)\n ? binding\n : [binding];\n const shouldPreventDefault = actionBindings.some(\n (b) => b.preventDefault,\n );\n return {\n emit: () => emit(eventName),\n shouldPreventDefault,\n bound: true,\n };\n };\n\n // Look up component\n const ComponentClass =\n this.registry[resolvedElement.type] ?? this.fallbackComponent;\n\n if (!ComponentClass) {\n console.warn(\n `[ng-render] No renderer for component type: \"${resolvedElement.type}\"`,\n );\n return;\n }\n\n // Create the component\n try {\n this.componentRef = this.vcr.createComponent(ComponentClass, {\n injector: this.injector,\n environmentInjector: this.envInjector,\n });\n\n this.componentRef.setInput('element', resolvedElement);\n this.componentRef.setInput('emit', emit);\n this.componentRef.setInput('on', on);\n if (elementBindings) {\n this.componentRef.setInput('bindings', elementBindings);\n }\n this.componentRef.setInput('loading', loading);\n\n // Render children into the ChildrenOutletDirective if present\n if (resolvedElement.children && resolvedElement.children.length > 0) {\n // Trigger change detection so ViewChild queries resolve\n this.componentRef.changeDetectorRef.detectChanges();\n\n // Look for children outlet on the component instance.\n // Components that accept children must declare:\n // @ViewChild(ChildrenOutletDirective, { static: true })\n // childrenOutlet!: ChildrenOutletDirective;\n const instance = this.componentRef.instance;\n const outlet: ChildrenOutletDirective | undefined =\n instance?.childrenOutlet;\n\n if (outlet?.vcr) {\n this.renderChildren(\n resolvedElement.children,\n spec,\n loading,\n outlet.vcr,\n );\n } else {\n // No outlet found — render children as siblings after the component.\n // This handles components without explicit jrChildren directive.\n this.renderChildren(\n resolvedElement.children,\n spec,\n loading,\n this.vcr,\n );\n }\n }\n } catch (error) {\n console.error(\n `[ng-render] Error creating component for type \"${resolvedElement.type}\":`,\n error,\n );\n }\n }\n\n private renderRepeat(\n element: UIElement,\n spec: Spec,\n loading: boolean,\n ctx: PropResolutionContext,\n ): void {\n const repeat = element.repeat!;\n const items =\n (getByPath(this.stateService.state(), repeat.statePath) as\n | unknown[]\n | undefined) ?? [];\n\n for (let index = 0; index < items.length; index++) {\n const itemValue = items[index];\n const basePath = `${repeat.statePath}/${index}`;\n\n // Create a child injector with a fresh RepeatScopeService\n const repeatScopeService = new RepeatScopeService();\n repeatScopeService.item = itemValue;\n repeatScopeService.index = index;\n repeatScopeService.basePath = basePath;\n\n const childInjector = createEnvironmentInjector(\n [{ provide: RepeatScopeService, useValue: repeatScopeService }],\n this.envInjector,\n );\n this.repeatInjectors.push(childInjector);\n\n // Render children for this repeat iteration\n if (element.children) {\n for (const childKey of element.children) {\n const childElement = spec.elements[childKey];\n if (!childElement) {\n if (!loading) {\n console.warn(\n `[ng-render] Missing element \"${childKey}\" referenced as child of \"${element.type}\" (repeat).`,\n );\n }\n continue;\n }\n\n const childRef = this.vcr.createComponent(\n ElementRendererComponent,\n {\n environmentInjector: childInjector,\n },\n );\n childRef.setInput('element', childElement);\n childRef.setInput('spec', spec);\n childRef.setInput('loading', loading);\n this.childRenderers.push(childRef);\n }\n }\n }\n }\n\n private renderChildren(\n childKeys: string[],\n spec: Spec,\n loading: boolean,\n vcr: ViewContainerRef,\n ): void {\n for (const childKey of childKeys) {\n const childElement = spec.elements[childKey];\n if (!childElement) {\n if (!loading) {\n console.warn(\n `[ng-render] Missing element \"${childKey}\". This element will not render.`,\n );\n }\n continue;\n }\n\n const childRef = vcr.createComponent(ElementRendererComponent, {\n environmentInjector: this.envInjector,\n });\n childRef.setInput('element', childElement);\n childRef.setInput('spec', spec);\n childRef.setInput('loading', loading);\n this.childRenderers.push(childRef);\n }\n }\n\n private cleanup(): void {\n for (const ref of this.childRenderers) {\n ref.destroy();\n }\n this.childRenderers = [];\n\n for (const inj of this.repeatInjectors) {\n inj.destroy();\n }\n this.repeatInjectors = [];\n\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n\n this.vcr.clear();\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n}\n","import {\n Component,\n input,\n effect,\n inject,\n ChangeDetectionStrategy,\n computed,\n} from '@angular/core';\nimport type { Spec, StateModel } from '@json-render/core';\nimport { SpecStateService } from '../services/spec-state.service';\nimport { VisibilityService } from '../services/visibility.service';\nimport { ActionDispatcherService } from '../services/action-dispatcher.service';\nimport { ValidationService } from '../services/validation.service';\nimport { ElementRendererComponent } from './element-renderer.component';\n\n@Component({\n selector: 'json-renderer',\n standalone: true,\n imports: [ElementRendererComponent],\n template: `\n @if (rootElement(); as root) {\n <jr-element-renderer\n [element]=\"root\"\n [spec]=\"spec()!\"\n [loading]=\"loading()\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n SpecStateService,\n VisibilityService,\n ActionDispatcherService,\n ValidationService,\n ],\n})\nexport class JsonRendererComponent {\n readonly spec = input<Spec | null>(null);\n readonly loading = input<boolean>(false);\n readonly initialState = input<StateModel>({});\n readonly onStateChange = input<\n ((path: string, value: unknown) => void) | undefined\n >(undefined);\n\n private readonly stateService = inject(SpecStateService);\n private previousSpecState: Record<string, unknown> | undefined;\n private previousInitialState: string | undefined;\n\n readonly rootElement = computed(() => {\n const s = this.spec();\n if (!s?.root) return null;\n return s.elements[s.root] ?? null;\n });\n\n constructor() {\n // Initialize from initialState input — only when values actually change\n effect(() => {\n const initial = this.initialState();\n const serialized = JSON.stringify(initial);\n if (serialized !== this.previousInitialState) {\n this.previousInitialState = serialized;\n if (initial && Object.keys(initial).length > 0) {\n this.stateService.mergeInitialState(initial);\n }\n }\n });\n\n // Merge spec.state when spec changes\n effect(() => {\n const s = this.spec();\n if (s?.state && s.state !== this.previousSpecState) {\n this.previousSpecState = s.state;\n if (Object.keys(s.state).length > 0) {\n this.stateService.mergeInitialState(s.state);\n }\n }\n });\n\n // Wire onStateChange callback — observe state and forward changes\n effect(() => {\n const callback = this.onStateChange();\n const state = this.stateService.state();\n // The callback is invoked with the full state snapshot\n // Components should use the SpecStateService for granular path-level changes\n if (callback && state) {\n callback('', state);\n }\n });\n }\n}\n","import { Directive, ViewContainerRef, inject } from '@angular/core';\n\n/**\n * Directive that marks where children should be rendered inside a\n * registered component.\n *\n * Usage in component templates:\n * ```html\n * <div class=\"card\">\n * <ng-template jrChildren></ng-template>\n * </div>\n * ```\n */\n@Directive({\n selector: '[jrChildren]',\n standalone: true,\n exportAs: 'jrChildren',\n})\nexport class ChildrenOutletDirective {\n readonly vcr = inject(ViewContainerRef);\n}\n","import { Component, inject, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { ActionDispatcherService } from '../services/action-dispatcher.service';\n\n/**\n * Default confirmation dialog component.\n * Renders when an action has a `confirm` field.\n *\n * Place inside or near the `<json-renderer>` in your template:\n * ```html\n * <json-renderer [spec]=\"spec\">\n * <jr-confirm-dialog />\n * </json-renderer>\n * ```\n *\n * Or use it standalone anywhere the ActionDispatcherService is available.\n */\n@Component({\n selector: 'jr-confirm-dialog',\n standalone: true,\n template: `\n @if (confirm(); as c) {\n <div class=\"jr-confirm-overlay\" (click)=\"onCancel()\">\n <div class=\"jr-confirm-dialog\" (click)=\"$event.stopPropagation()\">\n <h3 class=\"jr-confirm-title\">{{ c.title }}</h3>\n <p class=\"jr-confirm-message\">{{ c.message }}</p>\n <div class=\"jr-confirm-actions\">\n <button class=\"jr-confirm-btn jr-confirm-btn-cancel\" (click)=\"onCancel()\">\n {{ c.cancelLabel ?? 'Cancel' }}\n </button>\n <button\n class=\"jr-confirm-btn\"\n [class.jr-confirm-btn-danger]=\"c.variant === 'danger'\"\n [class.jr-confirm-btn-primary]=\"c.variant !== 'danger'\"\n (click)=\"onConfirm()\">\n {{ c.confirmLabel ?? 'Confirm' }}\n </button>\n </div>\n </div>\n </div>\n }\n `,\n styles: `\n .jr-confirm-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 50;\n }\n .jr-confirm-dialog {\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 400px;\n width: 100%;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);\n }\n .jr-confirm-title {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n }\n .jr-confirm-message {\n margin: 0 0 24px 0;\n color: #6b7280;\n }\n .jr-confirm-actions {\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n }\n .jr-confirm-btn {\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n }\n .jr-confirm-btn-cancel {\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n }\n .jr-confirm-btn-primary {\n border: none;\n background: #3b82f6;\n color: white;\n }\n .jr-confirm-btn-danger {\n border: none;\n background: #dc2626;\n color: white;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n private readonly dispatcher = inject(ActionDispatcherService);\n\n readonly confirm = computed(() => {\n const pending = this.dispatcher.pendingConfirmation();\n return pending?.action.confirm ?? null;\n });\n\n onConfirm(): void {\n this.dispatcher.confirm();\n }\n\n onCancel(): void {\n this.dispatcher.cancel();\n }\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport type { UIElement } from '@json-render/core';\nimport type { EventHandle } from '../types/catalog-types';\n\n/**\n * Default fallback component for unknown element types.\n * Displays a warning in development.\n *\n * Register via provideNgRender:\n * ```ts\n * provideNgRender({\n * registry: myRegistry,\n * fallback: FallbackComponent,\n * })\n * ```\n */\n@Component({\n selector: 'jr-fallback',\n standalone: true,\n template: `\n <div class=\"jr-fallback\">\n Unknown component: \"{{ element().type }}\"\n </div>\n `,\n styles: `\n .jr-fallback {\n padding: 8px 12px;\n border: 1px dashed #f59e0b;\n border-radius: 6px;\n background: #fffbeb;\n color: #92400e;\n font-size: 12px;\n font-family: monospace;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FallbackComponent {\n readonly element = input.required<UIElement>();\n readonly emit = input.required<(event: string) => void>();\n readonly on = input.required<(event: string) => EventHandle>();\n readonly bindings = input<Record<string, string>>();\n readonly loading = input<boolean>(false);\n}\n","import type { Spec, UIElement, JsonPatch } from '@json-render/core';\nimport { setByPath, getByPath, removeByPath } 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\ntype ParsedLine =\n | { type: 'patch'; patch: JsonPatch }\n | { type: 'usage'; usage: TokenUsage }\n | null;\n\n/**\n * Parse a single JSONL line into a patch or usage metadata.\n */\nexport function parseLine(line: string): ParsedLine {\n try {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('//')) return null;\n const parsed = JSON.parse(trimmed);\n\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\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);\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\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(\n newElement as unknown as Record<string, unknown>,\n propPath,\n );\n newSpec.elements[elementKey] = newElement;\n }\n }\n }\n}\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 a Spec.\n * Returns a new shallow-copied Spec (immutable pattern for signal updates).\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 case 'remove':\n removeSpecValue(newSpec, patch.path);\n break;\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 case 'copy':\n if (!patch.from) break;\n const copyValue = getSpecValue(newSpec, patch.from);\n setSpecValue(newSpec, patch.path, copyValue);\n break;\n case 'test':\n break;\n }\n\n return newSpec;\n}\n","import { signal, type Signal, type WritableSignal } from '@angular/core';\nimport type { Spec } from '@json-render/core';\nimport { applyPatch, parseLine, type TokenUsage } from './spec-patch';\n\n/**\n * Options for createUIStream.\n */\nexport interface UIStreamOptions {\n api: string;\n onComplete?: (spec: Spec) => void;\n onError?: (error: Error) => void;\n}\n\n/**\n * Return type for createUIStream.\n */\nexport interface UIStreamState {\n spec: Signal<Spec | null>;\n isStreaming: Signal<boolean>;\n error: Signal<Error | null>;\n usage: Signal<TokenUsage | null>;\n rawLines: Signal<string[]>;\n send: (prompt: string, context?: Record<string, unknown>) => Promise<void>;\n clear: () => void;\n destroy: () => void;\n}\n\n/**\n * Create a streaming UI generator.\n * Angular equivalent of React's `useUIStream` hook.\n *\n * Returns signal-based reactive state + imperative send/clear functions.\n *\n * @example\n * ```ts\n * // In a component\n * private stream = createUIStream({ api: '/api/generate' });\n * spec = this.stream.spec;\n * isStreaming = this.stream.isStreaming;\n *\n * async generate() {\n * await this.stream.send('Create a dashboard');\n * }\n *\n * ngOnDestroy() {\n * this.stream.destroy();\n * }\n * ```\n */\nexport function createUIStream(options: UIStreamOptions): UIStreamState {\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\n let abortController: AbortController | null = null;\n\n const clear = () => {\n spec.set(null);\n error.set(null);\n };\n\n const destroy = () => {\n abortController?.abort();\n abortController = null;\n };\n\n const send = async (\n prompt: string,\n context?: Record<string, unknown>,\n ): Promise<void> => {\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 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 try {\n const response = await fetch(options.api, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ prompt, context, currentSpec }),\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) errorMessage = errorData.message;\n else if (errorData.error) errorMessage = errorData.error;\n } catch {\n // Ignore\n }\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No response body');\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 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 const result = parseLine(trimmed);\n if (!result) continue;\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\n // Process remaining buffer\n if (buffer.trim()) {\n const result = parseLine(buffer.trim());\n if (result) {\n if (result.type === 'usage') {\n usage.set(result.usage);\n } else {\n rawLines.update((prev) => [...prev, buffer.trim()]);\n currentSpec = applyPatch(currentSpec, result.patch);\n spec.set({ ...currentSpec });\n }\n }\n }\n\n options.onComplete?.(currentSpec);\n } catch (err) {\n if ((err as Error).name === 'AbortError') return;\n const resolvedError =\n 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 destroy,\n };\n}\n","import { signal, type Signal } from '@angular/core';\nimport type { Spec } from '@json-render/core';\nimport { createMixedStreamParser, applySpecPatch } from '@json-render/core';\n\n/**\n * A single message in the chat.\n */\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'assistant';\n text: string;\n spec: Spec | null;\n}\n\n/**\n * Options for createChatUI.\n */\nexport interface ChatUIOptions {\n api: string;\n onComplete?: (message: ChatMessage) => void;\n onError?: (error: Error) => void;\n}\n\n/**\n * Return type for createChatUI.\n */\nexport interface ChatUIState {\n messages: Signal<ChatMessage[]>;\n isStreaming: Signal<boolean>;\n error: Signal<Error | null>;\n send: (text: string) => Promise<void>;\n clear: () => void;\n destroy: () => void;\n}\n\nlet chatMessageIdCounter = 0;\nfunction generateChatId(): string {\n if (\n typeof crypto !== 'undefined' &&\n typeof crypto.randomUUID === 'function'\n ) {\n return crypto.randomUUID();\n }\n chatMessageIdCounter += 1;\n return `msg-${Date.now()}-${chatMessageIdCounter}`;\n}\n\n/**\n * Create a chat + GenUI interface.\n * Angular equivalent of React's `useChatUI` hook.\n *\n * Manages a multi-turn conversation where each assistant message can contain\n * both conversational text and a json-render UI spec.\n *\n * @example\n * ```ts\n * private chat = createChatUI({ api: '/api/chat' });\n * messages = this.chat.messages;\n * isStreaming = this.chat.isStreaming;\n *\n * async send(text: string) {\n * await this.chat.send(text);\n * }\n *\n * ngOnDestroy() {\n * this.chat.destroy();\n * }\n * ```\n */\nexport function createChatUI(options: ChatUIOptions): ChatUIState {\n const messages = signal<ChatMessage[]>([]);\n const isStreaming = signal(false);\n const error = signal<Error | null>(null);\n\n let abortController: AbortController | null = null;\n\n const clear = () => {\n messages.set([]);\n error.set(null);\n };\n\n const destroy = () => {\n abortController?.abort();\n abortController = null;\n };\n\n const send = async (text: string): Promise<void> => {\n if (!text.trim()) return;\n\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 messages.update((prev) => [...prev, userMessage, assistantMessage]);\n isStreaming.set(true);\n error.set(null);\n\n const historyForApi = messages()\n .filter((m) => m.id !== assistantId)\n .map((m) => ({ role: m.role, content: m.text }));\n historyForApi.push({ role: 'user', content: text.trim() });\n\n let accumulatedText = '';\n let currentSpec: Spec = { root: '', elements: {} };\n let hasSpec = false;\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) errorMessage = errorData.message;\n else if (errorData.error) errorMessage = errorData.error;\n } catch {\n // Ignore\n }\n throw new Error(errorMessage);\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error('No response body');\n\n const decoder = new TextDecoder();\n\n const parser = createMixedStreamParser({\n onPatch(patch) {\n hasSpec = true;\n applySpecPatch(currentSpec, patch);\n messages.update((prev) =>\n prev.map((m) =>\n m.id === assistantId\n ? {\n ...m,\n spec: {\n root: currentSpec.root,\n elements: { ...currentSpec.elements },\n ...(currentSpec.state\n ? { state: { ...currentSpec.state } }\n : {}),\n },\n }\n : 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 const finalMessage: ChatMessage = {\n id: assistantId,\n role: 'assistant',\n text: accumulatedText,\n spec: hasSpec\n ? {\n root: currentSpec.root,\n elements: { ...currentSpec.elements },\n ...(currentSpec.state\n ? { state: { ...currentSpec.state } }\n : {}),\n }\n : null,\n };\n options.onComplete?.(finalMessage);\n } catch (err) {\n if ((err as Error).name === 'AbortError') return;\n const resolvedError =\n err instanceof Error ? err : new Error(String(err));\n error.set(resolvedError);\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 destroy,\n };\n}\n","import { inject } from '@angular/core';\nimport { SpecStateService } from '../services/spec-state.service';\n\n/**\n * Return type for createBoundProp.\n */\nexport interface BoundProp<T> {\n value: T | undefined;\n setValue: (value: T) => void;\n}\n\n/**\n * Create a two-way bound prop helper.\n * Angular equivalent of React's `useBoundProp` hook.\n *\n * Must be called within an injection context (constructor, factory, etc.)\n * where SpecStateService is available.\n *\n * @example\n * ```ts\n * // In a component that receives bindings\n * private stateService = inject(SpecStateService);\n *\n * // Create bound prop for a form input\n * get emailBinding(): BoundProp<string> {\n * return boundProp(\n * this.element().props['value'] as string,\n * this.bindings()?.['value'],\n * this.stateService,\n * );\n * }\n *\n * onInput(event: Event) {\n * this.emailBinding.setValue((event.target as HTMLInputElement).value);\n * }\n * ```\n */\nexport function boundProp<T>(\n propValue: T | undefined,\n bindingPath: string | undefined,\n stateService: SpecStateService,\n): BoundProp<T> {\n return {\n value: propValue,\n setValue: (value: T) => {\n if (bindingPath) {\n stateService.set(bindingPath, value);\n }\n },\n };\n}\n\n/**\n * Create a two-way bound prop helper using dependency injection.\n * Convenience wrapper that injects SpecStateService automatically.\n *\n * Must be called within an injection context.\n *\n * @example\n * ```ts\n * // In a component constructor or field initializer\n * private createBound = injectBoundProp();\n *\n * get emailBinding() {\n * return this.createBound(\n * this.element().props['value'] as string,\n * this.bindings()?.['value'],\n * );\n * }\n * ```\n */\nexport function injectBoundProp(): <T>(\n propValue: T | undefined,\n bindingPath: string | undefined,\n) => BoundProp<T> {\n const stateService = inject(SpecStateService);\n return <T>(propValue: T | undefined, bindingPath: string | undefined) =>\n boundProp(propValue, bindingPath, stateService);\n}\n","import type { Spec, UIElement, FlatElement, SpecDataPart } from '@json-render/core';\nimport { applySpecPatch, nestedToFlat, SPEC_DATA_PART_TYPE } from '@json-render/core';\n\n/**\n * A single part from the AI SDK's `message.parts` array.\n * Minimal structural type so the library doesn't 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 SpecDataPart.\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 parts array.\n * Returns null if no spec data parts are present.\n *\n * Works with the AI SDK's UIMessage.parts array.\n *\n * @example\n * ```ts\n * const spec = buildSpecFromParts(message.parts);\n * if (spec) {\n * // render with <json-renderer [spec]=\"spec\" />\n * }\n * ```\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 *\n * @example\n * ```ts\n * const text = getTextFromParts(message.parts);\n * ```\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 * Convert a flat element list to a Spec.\n * Input elements use key/parentKey to establish identity and relationships.\n *\n * @example\n * ```ts\n * const spec = flatToTree([\n * { key: 'root', type: 'Stack', props: {}, children: [] },\n * { key: 'text', parentKey: 'root', type: 'Text', props: { content: 'Hello' } },\n * ]);\n * ```\n */\nexport function flatToTree(elements: FlatElement[]): Spec {\n const elementMap: Record<string, UIElement> = {};\n let root = '';\n\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 for (const element of elements) {\n if (element.parentKey) {\n const parent = elementMap[element.parentKey];\n if (parent) {\n if (!parent.children) parent.children = [];\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 * Extract both spec and text from message parts.\n * Combines buildSpecFromParts and getTextFromParts.\n *\n * @example\n * ```ts\n * const { spec, text, hasSpec } = extractFromParts(message.parts);\n * ```\n */\nexport function extractFromParts(parts: DataPart[]): {\n spec: Spec | null;\n text: string;\n hasSpec: boolean;\n} {\n const spec = buildSpecFromParts(parts);\n const text = getTextFromParts(parts);\n const hasSpec =\n spec !== null && Object.keys(spec.elements || {}).length > 0;\n return { spec, text, hasSpec };\n}\n","/*\n * Public API Surface of @ng-render/angular\n */\n\n// Schema\nexport { schema, type AngularSchema } from './lib/schema';\n\n// Types\nexport type {\n SetState,\n EventHandle,\n ComponentRenderContext,\n CatalogComponentContext,\n ActionFn,\n Actions,\n CatalogHasActions,\n StateModel,\n} from './lib/types/catalog-types';\n\nexport type {\n ComponentRegistry,\n JsonRenderComponent,\n} from './lib/types/component-render.types';\n\n// Registry\nexport {\n NG_RENDER_REGISTRY,\n NG_RENDER_ACTION_HANDLERS,\n NG_RENDER_NAVIGATE,\n NG_RENDER_FALLBACK,\n} from './lib/registry/registry.token';\n\nexport {\n defineRegistry,\n provideNgRender,\n type DefineRegistryResult,\n type ProvideNgRenderOptions,\n} from './lib/registry/registry';\n\n// Services\nexport { SpecStateService } from './lib/services/spec-state.service';\nexport { VisibilityService } from './lib/services/visibility.service';\nexport {\n ActionDispatcherService,\n type PendingConfirmation,\n} from './lib/services/action-dispatcher.service';\nexport {\n ValidationService,\n type FieldValidationState,\n} from './lib/services/validation.service';\nexport { RepeatScopeService } from './lib/services/repeat-scope.service';\n\n// Renderer Components\nexport { JsonRendererComponent } from './lib/renderer/json-renderer.component';\nexport { ElementRendererComponent } from './lib/renderer/element-renderer.component';\nexport { ChildrenOutletDirective } from './lib/renderer/children-outlet.directive';\nexport { ConfirmDialogComponent } from './lib/renderer/confirm-dialog.component';\nexport { FallbackComponent } from './lib/renderer/fallback.component';\n\n// Hooks / Composition Functions\nexport {\n createUIStream,\n type UIStreamOptions,\n type UIStreamState,\n} from './lib/hooks/ui-stream';\n\nexport {\n createChatUI,\n type ChatUIOptions,\n type ChatUIState,\n type ChatMessage,\n} from './lib/hooks/chat-ui';\n\nexport {\n boundProp,\n injectBoundProp,\n type BoundProp,\n} from './lib/hooks/bound-prop';\n\nexport {\n buildSpecFromParts,\n getTextFromParts,\n flatToTree,\n extractFromParts,\n type DataPart,\n} from './lib/hooks/spec-builders';\n\nexport { applyPatch, type TokenUsage } from './lib/hooks/spec-patch';\n\n// Re-export key types from @json-render/core\nexport type {\n UIElement,\n FlatElement,\n Spec,\n ActionBinding,\n VisibilityCondition,\n Catalog,\n JsonPatch,\n} from '@json-render/core';\n\nexport { defineCatalog } 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,43 @@
1
+ {
2
+ "name": "@ng-render/angular",
3
+ "version": "0.1.0",
4
+ "description": "Angular renderer for @json-render/core — render AI-generated JSON specs as Angular component trees",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "angular",
8
+ "json",
9
+ "ui",
10
+ "renderer",
11
+ "generative-ui",
12
+ "ai",
13
+ "signals",
14
+ "dynamic-components",
15
+ "json-render",
16
+ "ng-render"
17
+ ],
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/ng-render/ng-render",
21
+ "directory": "projects/ng-render"
22
+ },
23
+ "peerDependencies": {
24
+ "@angular/common": "^21.0.0",
25
+ "@angular/core": "^21.0.0",
26
+ "@json-render/core": "^0.7.0"
27
+ },
28
+ "dependencies": {
29
+ "tslib": "^2.3.0"
30
+ },
31
+ "sideEffects": false,
32
+ "module": "fesm2022/ng-render-angular.mjs",
33
+ "typings": "types/ng-render-angular.d.ts",
34
+ "exports": {
35
+ "./package.json": {
36
+ "default": "./package.json"
37
+ },
38
+ ".": {
39
+ "types": "./types/ng-render-angular.d.ts",
40
+ "default": "./fesm2022/ng-render-angular.mjs"
41
+ }
42
+ }
43
+ }