xt-components 0.6.0 → 0.6.1

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.
@@ -260,7 +260,7 @@ class XtBaseContext {
260
260
  return this;
261
261
  }
262
262
  isInForm() {
263
- return ((this.subName != null) && (this.formGroup() != null));
263
+ return (this.formGroup() != null);
264
264
  }
265
265
  formControlNameOrNull() {
266
266
  return this.subName ?? null;
@@ -1303,7 +1303,7 @@ function updateFormGroupWithValue(formGroup, value, valueType, resolver) {
1303
1303
  const subValue = (value != null) ? value[valueKey] : null;
1304
1304
  const subType = resolver?.findType(valueType, valueKey, subValue) ?? undefined;
1305
1305
  const subTypeName = isTypeReference(subType) ? subType.toType : subType?.type;
1306
- const primitive = resolver?.isPrimitiveType(subType, subValue);
1306
+ const primitive = (resolver != null) ? resolver?.isPrimitiveType(subType, subValue) : isPrimitive(subValue);
1307
1307
  if (toDelete.delete(valueKey)) {
1308
1308
  // Already a control
1309
1309
  const oldControl = formGroup.get(valueKey);
@@ -1 +1 @@
1
- {"version":3,"file":"xt-components.mjs","sources":["../../../projects/xt-components/src/lib/registry/xt-plugin-registry.ts","../../../projects/xt-components/src/lib/xt-context.ts","../../../projects/xt-components/src/lib/xt-resolved-component.ts","../../../projects/xt-components/src/globals.ts","../../../projects/xt-components/src/lib/angular/xt-tokens.ts","../../../projects/xt-components/src/lib/resolver/xt-registry-resolver.ts","../../../projects/xt-components/src/lib/action/xt-action.ts","../../../projects/xt-components/src/lib/test/store-test-helper.ts","../../../projects/xt-components/src/lib/store/store-support.ts","../../../projects/xt-components/src/lib/angular/xt-resolver.service.ts","../../../projects/xt-components/src/lib/output/xt-base-output.ts","../../../projects/xt-components/src/lib/render/xt-render.component.ts","../../../projects/xt-components/src/lib/render/xt-render.component.html","../../../projects/xt-components/src/lib/render/xt-render-sub.component.ts","../../../projects/xt-components/src/lib/render/xt-render-sub.component.html","../../../projects/xt-components/src/lib/output/xt-base-input.ts","../../../projects/xt-components/src/lib/xt-simple/xt-simple.component.ts","../../../projects/xt-components/src/lib/xt-composite/xt-composite.component.ts","../../../projects/xt-components/src/lib/angular/xt-message-handler.service.ts","../../../projects/xt-components/src/lib/type/type-helper.ts","../../../projects/xt-components/src/lib/test/xt-unit-test-helper.ts","../../../projects/xt-components/src/lib/test/xt-test-helper-components.ts","../../../projects/xt-components/src/public-api.ts","../../../projects/xt-components/src/xt-components.ts"],"sourcesContent":["import { XtActionHandlerInfo, XtActionInfo, XtComponentInfo, XtPluginInfo } from '../plugin/xt-plugin-info';\nimport { signal, Type } from '@angular/core';\nimport { XtComponent } from '../xt-component';\n\nexport class XtPluginRegistry {\n\n pluginRegistry = new Map<string, XtPluginInfo> ();\n componentRegistry = new Map<string, XtComponentInfo<any>> ();\n componentByTypeCache = new Map<string, XtComponentInfo<any>[]> ();\n protected actionByTypeRegistry = new Map<string, Map<string, XtActionInfo<any>>> ();\n\n listComponents = signal(new Array<XtComponentInfo<any>>());\n listPlugins = signal(new Array<XtPluginInfo>());\n\n /**\n * The component can manage any standard javascript primitives types. That's usually the default whenever we don't know any particular type\n * string\n * number\n * bigint\n * boolean\n * undefined\n * null\n * symbol is not managed\n * Date, while an object and not a primitive, is managed\n */\n public static readonly ANY_PRIMITIVE_TYPE=\"ANY_PRIMITIVE_TYPE\";\n /**\n * The components can manage any composite javascript type. Default when no type has been defined and it's a user defined javascript object (not a data type)\n */\n public static readonly ANY_OBJECT_TYPE=\"ANY_OBJECT_TYPE\";\n\n public static readonly ANY_PRIMITIVE_SET = \"ANY_PRIMITIVE_SET\";\n\n public static readonly ANY_OBJECT_SET = \"ANY_OBJECT_SET\";\n\n /**\n * Whenever a component can handle any type of reference to a single entity or to multiple entities.\n */\n public static readonly ANY_SINGLE_REFERENCE = \"ANY_SINGLE_REFERENCE\";\n\n public static readonly ANY_MULTIPLE_REFERENCE = \"ANY_MULTIPLE_REFERENCE\";\n\n registerPlugin (info:XtPluginInfo) {\n this.pluginRegistry.set (info.name, info);\n\n if (info.components != null) {\n let updated=false;\n for (const comp of info.components) {\n updated=true;\n this.registerComponent (comp);\n }\n if (updated) this.componentByTypeCache.clear(); // Force recalculation of type\n }\n\n if( info.actionHandlers!=null) {\n for (const handler of info.actionHandlers) {\n this.registerActionHandler (handler);\n }\n }\n\n this.listPlugins.update((array) => {\n let found=false;\n for (let i=0; i<array.length; i++) {\n if (array[i].name==info.name) {\n found=true;\n array[i] = info;\n }\n }\n if( !found)\n array.push(info);\n return [...array]; // You have to send another value, not just update the existing one.\n });\n\n }\n\n registerComponent<T> (info:XtComponentInfo<T>) {\n this.componentRegistry.set (info.componentName, info);\n this.listComponents.update((array) => {\n let found=false;\n for (let i=0; i<array.length; i++) {\n if (array[i].componentName==info.componentName) {\n found=true;\n array[i] = info;\n }\n }\n if( !found)\n array.push(info);\n return array;\n });\n }\n\n findComponentsForType<T> (valueType:string|null|undefined, value?:T): XtComponentInfo<any>[] {\n let originalType=valueType;\n //console.debug('Finding type from '+valueType+' with value ',value);\n // We don't know the value type, let's try to guess if it's a primitive or object based on the value\n if ( valueType == null) {\n valueType = XtPluginRegistry.ANY_OBJECT_TYPE;\n if ((value == null) || (typeof value != 'object')) {\n valueType=XtPluginRegistry.ANY_PRIMITIVE_TYPE;\n } else if (value instanceof Date) {\n valueType=XtPluginRegistry.ANY_PRIMITIVE_TYPE;\n }\n\n if (Array.isArray(value)) {\n valueType = (valueType===XtPluginRegistry.ANY_PRIMITIVE_TYPE)?XtPluginRegistry.ANY_PRIMITIVE_SET:XtPluginRegistry.ANY_OBJECT_SET;\n }\n } else { // originalType has been defined.\n if (Array.isArray(value)) {\n valueType=valueType.endsWith('[]')?valueType:valueType+'[]';\n originalType=valueType;\n }\n }\n //console.debug('Type found is '+valueType);\n\n let ret = this.componentByTypeCache.get(valueType);\n if (ret == null) {\n ret = new Array<XtComponentInfo<any>> ()\n for (const comp of this.componentRegistry) {\n const info=comp[1];\n if (info.typesHandled.includes (valueType)) {\n ret.push(info);\n }\n }\n\n if ((ret.length == 0) && (originalType!=null)) {\n // Couldn't find a specific component, let's try the generic ones, so we don't pass any type\n ret = this.findComponentsForType(null, value);\n // Cache the component only if we were able to assert its type.\n // If no type has been given and value is null, then we cannot assess the real type\n if (value!=null) {\n this.componentByTypeCache.set(originalType, ret);\n }\n } else {\n // Cache the component only if we were able to assert its type.\n // If no type has been given and value is null, then we cannot assess the real type\n if ((value!=null) || (originalType!=null)) {\n this.componentByTypeCache.set(originalType ?? valueType, ret);\n }\n }\n\n }\n return ret;\n }\n\n public static registry (): XtPluginRegistry {\n return XT_REGISTRY;\n }\n\n findComponentInfo(type: Type<XtComponent<any>>): XtComponentInfo<any>|null {\n // Search for the component registered with this class\n for (const info of this.componentRegistry.values()) {\n if (info.componentClass==type) {\n return info;\n }\n }\n return null;\n }\n\n getComponentInfo(type: Type<XtComponent<any>>): XtComponentInfo<any> {\n const ret= this.findComponentInfo(type);\n if (ret==null) {throw new Error (\"No component found with class \"+type);}\n return ret;\n }\n\n registerActionHandler<T>(handlerInfo:XtActionHandlerInfo<T>) {\n for (const type of handlerInfo.types) {\n const handlers = handlerInfo.actions;\n for (const actionName of Object.keys(handlers)) {\n let exist = this.actionByTypeRegistry.get(type);\n if (exist==null) {\n exist = new Map();\n this.actionByTypeRegistry.set(type, exist);\n }\n exist.set(actionName, handlers[actionName]);\n }\n }\n }\n\n findActionInfo<T>(type:string, actionName:string):XtActionInfo<T>|undefined {\n const handlers=this.actionByTypeRegistry.get(type);\n if (handlers!=null) {\n return handlers.get(actionName);\n }\n return undefined;\n }\n\n listActionInfos<T> (type:string): {name:string, info: XtActionInfo<T>}[] {\n const handlers=this.actionByTypeRegistry.get(type);\n if (handlers!=null) {\n return Array.from(handlers.entries()).map(([name,info]) => {\n return {name:name,info:info};\n });\n }\n else return []\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { isTypeReference, XtBaseTypeReference, XtTypeHierarchy, XtTypeReference, XtTypeResolver } from 'xt-type';\nimport { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { XtAction } from './action/xt-action';\nimport { XtPluginRegistry } from './registry/xt-plugin-registry';\n\n/**\n * A XtContext provides all the necessary information for an ng-extended component to operate. It is passed from parent to child component and pass\n * - The display mode - View, Inline view or Edit\n * - The value, either directly as a signal or in a formgroup when editing.\n * - The valueType, necessary to find the right ng-extended component to display\n *\n * To do this, it maintains a hierarchy of context and subContexts by name.\n */\nexport type XtContext<T> = {\n\n displayMode: XtDisplayMode;\n\n subName?: string; // The subName in the parentFormGroup and parentContext\n parentFormGroup?: FormGroup;\n localFormGroup?: FormGroup;\n\n /**\n * When the value in the context is a reference to another type\n */\n reference?:XtTypeReference\n\n /**\n * If it's a reference, we keep the context referenced\n */\n referencedContext?:XtContext<any>;\n\n /**\n * creates the referencedContext by using this referenced value\n * @param val\n *\n updateReferencedContext(val: any, valueType?:string): void;*/\n\n /**\n * Signal when all the asynchronously defined subreferences are resolved.\n *\n subReferencesResolved: WritableSignal<boolean>;\n*/\n\n // A parentContext if defined\n parentContext?:XtContext<any>;\n\n isInForm (): boolean;\n\n formGroup () : FormGroup | undefined;\n\n formControlNameOrNull():string|null;\n\n formControlValue (): any | null;\n\n subValue (subName?:string):T | null | undefined;\n\n subContext(subName: string | undefined | null, subType?:string, typeResolver?: XtTypeResolver | null): XtContext<any>;\n\n elementSetContext(subElement: any): XtContext<any>;\n\n displayValue: Signal<T|null>;\n\n setDisplayValue (newValue:T|null|undefined, type?:string): XtContext<T>;\n\n setFormValue (newValue:T|null|undefined, markAsDirty?:boolean): boolean;\n\n value(): T | null | undefined;\n\n valueType?:string;\n\n toString (): string;\n\n listActions: WritableSignal<XtAction<T>[] | null>;\n\n isReference ():boolean;\n\n setReferenceInfo (ref:XtTypeReference):void;\n\n}\n\nexport type XtDisplayMode = 'INLINE_VIEW'|'FULL_VIEW'|'FULL_EDITABLE'|'LIST_VIEW';\n\nexport class XtBaseContext<T> implements XtContext<T>{\n displayMode: XtDisplayMode = 'FULL_VIEW';\n\n /**\n * When editable, the value is stored in a parent formGroup\n */\n subName?: string;\n parentFormGroup?: FormGroup<any>;\n\n /**\n * When the context is a child, it potentially needs to update its parent value\n */\n parentContext?:XtBaseContext<any>;\n\n /**\n * All child contexts are kept in this map\n */\n protected childContexts?:Map<string, XtBaseContext<any>>;\n\n /**\n * localFormGroup exists only for composite components: it's children are all gathered in a form group\n */\n localFormGroup?: FormGroup<any>;\n\n /**\n * When not managed by a form, the value is here\n */\n nonFormValue?: WritableSignal<T|null>;\n\n valueType?:string;\n\n /**\n * When the value in the context is a reference to another type\n */\n reference?:XtTypeReference;\n\n /**\n * If it's a reference, we keep the context referenced\n *\n referencedContext?:XtContext<any>;*/\n\n //subReferencesResolved = signal(false);\n\n /**\n * Keeps track of all the possible actions for this context\n * @protected\n */\n listActions = signal<XtAction<T>[]|null>(null);\n\n /**\n *\n * @param displayMode\n * @param readOnly\n * @param parentGroup\n * @param controlName\n */\n\n constructor (displayMode: XtDisplayMode, subName?: string, parentGroup?: FormGroup, parentContext?:XtBaseContext<any>)\n {\n this.displayMode=displayMode;\n this.parentFormGroup=parentGroup;\n this.parentContext=parentContext;\n this.subName=subName;\n if ((parentGroup!=null) && (subName!=null)) {\n const subControl=parentGroup.get(subName);\n // If it's a form group, then it should be set as localFormGroup\n if ((subControl as FormGroup)?.controls!=null) {\n this.localFormGroup=subControl as FormGroup;\n }\n }\n }\n\n setDisplayValue (newValue:T|null|undefined, type?:string, updateParent:boolean=true): XtBaseContext<T> {\n if (newValue!==undefined){\n const oldValue = this.nonFormValue?this.nonFormValue():null;\n if (this.nonFormValue==null) {\n if ((this.childContexts!=null) && (this.childContexts.size>0)) throw new Error ('An XtContext with no values cannot have children ',{cause:this});\n this.nonFormValue=signal(newValue);\n }else {\n this.nonFormValue.set(newValue);\n }\n\n // Change the children values if needed\n if (this.childContexts!=null) {\n if (newValue==null) {\n for (const [subName, child] of this.childContexts) {\n child.setDisplayValue(null, undefined, false);\n }\n\n } else if (oldValue!=null) {\n for (const [subName, child] of this.childContexts) {\n if (newValue[subName as keyof T]!=oldValue[subName as keyof T]) {\n // The value has changed, let's update\n child.setDisplayValue(newValue[subName as keyof T], undefined, false);\n }\n }\n }\n }\n\n if ((updateParent) && (this.subName!=null))\n this.parentContext?.updateSubDisplayValue(this.subName,newValue);\n }\n\n if (type!==undefined)\n this.valueType = type;\n return this;\n }\n\n displayValue = computed( ()=> {\n if (this.nonFormValue!==undefined) {\n return this.nonFormValue();\n } else {\n throw new Error (\"Cannot display a value that does not exist. Are you sure you're not using Reactive Form with this context? \"+ this.toString());\n }\n });\n\n isInForm (): boolean {\n return ((this.subName != null) && (this.formGroup()!=null));\n }\n\n formControlNameOrNull():string|null {\n return this.subName??null;\n }\n\n value ():T | null | undefined {\n if (this.nonFormValue!=null)\n return this.nonFormValue()??this.formControlValue();\n else\n return this.formControlValue();\n }\n\n subValue (subsubName?:string):any | null | undefined {\n const value = this.nonFormValue?this.nonFormValue():this.formControlValue();\n if ((subsubName != null) && (value != null)) {\n return value[subsubName as keyof typeof value];\n }else {\n return value;\n }\n }\n\n /**\n * Enable child contexts to update its own value in the parent context whenever it's value changes\n */\n protected updateSubDisplayValue (subName:string, subValue:any): void {\n if (this.nonFormValue!=null) {\n let newValue = this.nonFormValue();\n if (newValue==null) {\n const newValue = {} as T;\n newValue[subName as keyof T]=subValue\n this.nonFormValue.set(newValue);\n } else {\n newValue[subName as keyof T] = subValue; // Discretly update the subValue without triggering parent signal\n }\n } else {\n throw new Error (\"No nonFormValue to update subDisplayValue\"+this.toString());\n }\n }\n\n formControlValue (): T | null | undefined {\n let ret:T|undefined|null=undefined;\n if (this.isInForm()) {\n if (this.subName!=null) {\n //console.debug (\"formControlValue parentGroup value is \", this.parentFormGroup?.value);\n ret=this.parentFormGroup?.value[this.subName];\n } else {\n ret= this.parentFormGroup?.value;\n }\n } else {\n ret= undefined;\n }\n //console.debug(\"formControlValue of \"+this.subName+ \" is \",ret);\n return ret;\n }\n\n setFormValue (newValue:T|null|undefined, markAsDirty=false): boolean {\n if (this.isInForm()) {\n if (this.subName!=null) {\n const control=this.parentFormGroup?.get(this.subName);\n if (control!=null) {\n control.setValue(newValue);\n if (markAsDirty) {\n control.markAsDirty();\n }\n return true;\n } else {\n // Supports setting values without a child form control\n const value=this.parentFormGroup?.getRawValue();\n if (value!=null) {\n if (newValue!==undefined)\n value[this.subName]=newValue;\n else\n delete value[this.subName];\n }\n }\n }\n }\n return false;\n }\n\n\n /**\n * Returns the context associated with a specific element in a set.\n * Value must be an array.\n * @param elementIndex\n */\n elementSetContext(elementIndex:number): XtContext<any> {\n const value = this.value();\n\n if (!Array.isArray(this.value())) {\n throw new Error (\"The value must be an Array / Set to create a subElement context.\")\n }\n\n const indexKey = elementIndex.toString();\n let ret = this.childContexts?.get(indexKey);\n\n if( ret==null) {\n ret = new XtBaseContext<T>(this.displayMode, undefined, undefined, this);\n ret.setDisplayValue((value as any[])[elementIndex]);\n\n if (this.valueType != null) {\n // Convert potential array type into single type\n ret.valueType = this.valueType.endsWith('[]') ? this.valueType.substring(0, this.valueType.length - 2) : this.valueType;\n }\n if( this.childContexts==null) this.childContexts=new Map<string, XtBaseContext<any>>();\n this.childContexts?.set(indexKey, ret);\n }\n return ret;\n }\n\n subContext(subName: string | undefined | null, subType?:string, typeResolver?:XtTypeResolver | null): XtContext<any> {\n if ((subName==null) || (subName.length==0)) {\n return this;\n } else if (this.childContexts?.has(subName)) {\n return this.childContexts?.get(subName)!;\n }else {\n let subValue:WritableSignal<any|null> | null = null;\n let currentGroup = this.formGroup();\n // Recalculate parentGroup and formControlName and value if needed.\n if (currentGroup==null){\n let curValue = this.nonFormValue;\n if (curValue!=null){\n if (curValue()!=null) {\n subValue = signal ((curValue() as any)[subName]);\n }\n }\n if (subValue==null) {\n subValue = signal (null);\n }\n }\n\n const ret = new XtBaseContext<T> (this.displayMode, subName, currentGroup, this);\n if( subValue!=null) ret.nonFormValue=subValue;\n\n if (subType!=null) {\n ret.valueType=subType;\n } else if ((this.valueType!=null) && (typeResolver!=null)) {\n const subType = typeResolver.findType(this.valueType, subName, this.value());\n if( subType!=null) {\n if (isTypeReference(subType)) {\n if( subType.type== XtBaseTypeReference.UNRESOLVED_TYPE) throw new Error (\"You must resolve all reference types before using them in a context. Missing type \"+subType.type+\" for subName \"+subName+\" in valueType \"+this.valueType+\" of context \"+this.toString())\n\n ret.valueType=subType.toType;\n ret.reference=subType;\n if (this.displayMode=='LIST_VIEW') ret.displayMode='INLINE_VIEW'; // We display a reference as inline in a list\n else if (this.displayMode=='FULL_EDITABLE') {\n // We don't edit directly references, we simply enable selection of them.\n ret.valueType=(subType.referenceType=='ONE-TO-MANY')?XtPluginRegistry.ANY_MULTIPLE_REFERENCE:XtPluginRegistry.ANY_SINGLE_REFERENCE;\n }\n } else {\n ret.valueType=(subType as XtTypeHierarchy).type;\n }\n }\n //ret.valueType=typeResolver.findTypeName(this.valueType, subName, this.value())??undefined;\n }\n\n if (this.childContexts==null) this.childContexts=new Map<string, XtBaseContext<any>>();\n this.childContexts.set(subName, ret);\n return ret;\n }\n }\n\n formGroup (): FormGroup|undefined {\n return this.localFormGroup??this.parentFormGroup;\n }\n\n isReference ():boolean {\n return (this.reference!=null);\n }\n\n setReferenceInfo (reference:XtTypeReference):void {\n this.reference=reference;\n //this.subReferencesResolved.set(this.reference!=null);\n }\n\n /**\n * creates the referencedContext by using this referenced value\n * @param val\n *\n updateReferencedContext(val: any, valueType?:string): void {\n if (!this.isReference()) throw new Error ('This context '+this.toString()+' is not a reference.');\n\n if( this.referencedContext==null) {\n let refDisplayMode = 'INLINE_VIEW' as XtDisplayMode;\n if (this.displayMode=='FULL_VIEW') refDisplayMode = 'FULL_VIEW';\n this.referencedContext = new XtBaseContext(refDisplayMode);\n }\n this.referencedContext.setDisplayValue(val);\n if( valueType!=null) this.referencedContext.valueType=valueType;\n }*/\n\n toString():string {\n let ret='XtContext named ';\n ret += this.subName??'None';\n ret += ' with type ';\n ret += this.valueType??'None';\n ret +=' with value ';\n ret += this.nonFormValue?this.nonFormValue():this.formControlValue();\n if (this.isReference()) {\n ret +=' referencing ';\n ret += this.reference?.type\n }\n return ret;\n }\n}\n","import { XtComponentInfo } from './plugin/xt-plugin-info';\n\nexport class XtResolvedComponent {\n componentName: string;\n componentClass: any;\n outputs:boolean;\n\n constructor (componantName:string, componentClass:any, outputs:boolean=false) {\n this.componentName = componantName;\n this.componentClass = componentClass;\n this.outputs = outputs;\n }\n\n public static from (info:XtComponentInfo<any>): XtResolvedComponent {\n const ret = new XtResolvedComponent(info.componentName, info.componentClass);\n if ( (info.outputs!=null) && (info.outputs.length>0)){\n ret.outputs=true;\n }\n return ret;\n }\n}\n","/**\n * The global plugin registry.\n * Plugins will register to this when loaded.\n */\nimport { XtPluginRegistry } from './lib/registry/xt-plugin-registry';\n\ndeclare global {\n\n var XT_REGISTRY:XtPluginRegistry;\n}\n\nexport function initXtPluginRegistry () {\n if (globalThis.XT_REGISTRY==null) {\n globalThis.XT_REGISTRY = new XtPluginRegistry();\n }\n}\n\nexport function xtPluginRegistry (): XtPluginRegistry {\n if (globalThis.XT_REGISTRY==null) {\n initXtPluginRegistry();\n }\n return globalThis.XT_REGISTRY;\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { XtResolver } from \"../resolver/xt-resolver\";\nimport { XtPluginRegistry } from \"../registry/xt-plugin-registry\";\nimport { XtTypeResolver } from \"xt-type\";\nimport { xtPluginRegistry } from '../../globals';\n\nexport const XT_RESOLVER_TOKEN = new InjectionToken<XtResolver> ('Enable providing a custom component resolver.');\n\nexport const XT_TYPE_RESOLVER_TOKEN = new InjectionToken<XtTypeResolver> ('Enable providing a custom type resolver.');\n\nexport const XT_REGISTRY_TOKEN = new InjectionToken<XtPluginRegistry> (\"Injects the Plugin Registry right into your angular component\",\n {\n factory: () => {\n return xtPluginRegistry();\n }\n }\n )\n","import { XtPluginRegistry } from \"../registry/xt-plugin-registry\";\nimport { isTypeReference, XtTypeResolver } from \"xt-type\";\nimport { XtContext } from \"../xt-context\";\nimport { XtResolvedComponent } from \"../xt-resolved-component\";\nimport { XtResolver } from \"./xt-resolver\";\n\nexport class XtRegistryResolver implements XtResolver {\n\n registry:XtPluginRegistry;\n typeResolver: XtTypeResolver;\n\n constructor (registry:XtPluginRegistry, typeResolver:XtTypeResolver) {\n this.registry = registry;\n this.typeResolver = typeResolver;\n }\n\n resolve<T>(baseContext: XtContext<T>, subName?:string): XtResolvedComponent | null {\n let typeToFind = baseContext.valueType;\n\n const typeInfo = this.typeResolver.findType(baseContext.valueType, subName);\n // If it's a type reference, we find the component of the referenced type\n if (isTypeReference(typeInfo)) {\n if (baseContext.displayMode=='FULL_EDITABLE') {\n typeToFind = XtPluginRegistry.ANY_SINGLE_REFERENCE;\n }else {\n typeToFind =typeInfo.toType;\n }\n }\n\n const ret= this.registry.findComponentsForType (typeToFind, baseContext.subValue(subName));\n if (ret!=null && ret.length>0) {\n return XtResolvedComponent.from( ret[0]);\n }\n return null;\n }\n\n}\n","import { signal } from '@angular/core';\nimport { XtActionInfo } from '../plugin/xt-plugin-info';\n\nexport class XtAction<T> {\n name: string;\n info: XtActionInfo<T>;\n enabled = signal<boolean>(false);\n\n constructor(name: string, info: XtActionInfo<T>, enabled?: boolean) {\n this.name = name;\n this.info = info;\n if (enabled!=null) {\n this.enabled.set(enabled);\n }\n }\n}\n","import { from, Observable } from 'rxjs';\nimport {\n IDataTransformer,\n IDocumentInfo,\n IStoreCriteria,\n IStoreCriteriaOperator,\n IStoreManager,\n IStoreProvider,\n StoreSupport\n} from '../store/store-support';\n\n/**\n * A very light and not 100% compatible storemanager in case you are not using xt-store.\n * It can emulate XtStoreManager to some extends for doing some tests\n */\nexport class StoreTestHelper {\n public static ensureTestProviderOnly() {\n StoreSupport.setTestStoreManager(new TestStoreManager());\n }\n}\n\nexport class TestStoreManager implements IStoreManager {\n protected defaultProvider= new TestStoreProvider();\n\n getProvider<T = never>(name?: string): IStoreProvider<T> | undefined {\n return this.defaultProvider;\n }\n\n getProviderSafe<T = never>(name?: string): IStoreProvider<T> {\n return this.defaultProvider;\n }\n\n getDefaultProvider<T = never>(): IStoreProvider<T> | undefined {\n return this.defaultProvider;\n }\n\n getDefaultProviderSafe<T = never>(): IStoreProvider<T> {\n return this.defaultProvider;\n }\n\n newStoreCriteria(name: string, value: any, operator: IStoreCriteriaOperator): IStoreCriteria {\n return new TestStoreCriteria(name, value, operator);\n }\n\n}\n\nexport class TestStoreProvider<T = never> implements IStoreProvider<T> {\n protected data = new Map<string, Map<string,any>> ();\n\n protected getOrCreateArray (name: string): Map<string,T> {\n let ret=this.data.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.data.set(name, ret);\n }\n return ret;\n }\n\n protected extractKey (value: any, create?:boolean):string {\n if (value._id!=null) return value._id; // ManagedData key\n else if (value.id!=null) return value.id;\n else {\n if (create===true) {\n const newId = Math.random().toString(36).substring(2, 8);\n value._id=newId;\n return newId;\n }\n return value.toString();\n }\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n this.getOrCreateArray(name).set(this.extractKey(entity, true), entity);\n return Promise.resolve(entity);\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n const ret = this.getOrCreateArray(name).get(key);\n if (ret==null) {\n throw new Error (\"No entity named \"+name+\" with key \"+key);\n }\n return Promise.resolve(ret);\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n return Promise.resolve(this.getOrCreateArray(name).get(key));\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return Promise.resolve( this.getOrCreateArray(name).delete(key));\n }\n\n searchEntities(name: string, ...criteria: TestStoreCriteria[]): Observable<T[]> {\n // No criteria defined, just send the full list\n const ret=new Array<T>();\n if( (criteria==null)||(criteria.length==0)) {\n for (const toAdd of this.getOrCreateArray(name).values()) {\n ret.push(toAdd);\n }\n } else {\n for (const toAdd of this.getOrCreateArray(name).values()) {\n let canAdd=true;\n for (const criter of criteria) {\n if (!criter.filter(toAdd)) {\n canAdd=false;\n break;\n }\n }\n if( canAdd) ret.push(toAdd);\n }\n\n }\n return from([ret]);\n }\n\n searchAndPrepareEntities(name: string, sort?: any, groupBy?: any, transformer?: IDataTransformer<T> | undefined, ...criteria: any[]): Observable<any> {\n throw new Error('Method not implemented.');\n }\n canStoreDocument(): boolean {\n return true;\n }\n storeDocument(toStore: File): Promise<IDocumentInfo> {\n const ret = new TestDocumentInfo(toStore.name, true,URL.createObjectURL(toStore));\n return Promise.resolve(ret);\n }\n\n storeDocuments(toStore: File[]): Observable<IDocumentInfo> {\n throw new Error('Method not implemented.');\n }\n\n}\n\nexport class TestDocumentInfo implements IDocumentInfo {\n documentName: string;\n isUrl: boolean;\n documentId?: string;\n\n constructor(documentName: string, isUrl: boolean,documentId?: string) {\n this.documentId = documentId;\n this.documentName = documentName;\n this.isUrl = isUrl;\n }\n}\n\nexport class TestStoreCriteria implements IStoreCriteria {\n name: string;\n value: any;\n operator: '='|'<='|'<';\n\n constructor(\n name: string,\n value: any,\n operator?: IStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = '=';\n else {\n this.operator = operator;\n }\n }\n\n filter (toFilter:any): boolean {\n const testValue=toFilter[this.name];\n switch (this.operator) {\n case '=':\n return testValue == this.value;\n case '<':\n return (testValue as number)<(this.value as number);\n case '<=':\n return (testValue as number)<(this.value as number);\n default:\n return true;\n }\n }\n}\n","/**\n * Wrapper around xt-store manager: You can use it to check if xt-store is included or not, and decide what to do\n *\n * This allows plugins to potentially use xt-store whenever included in the applications running the plugin\n */\nimport { Observable } from 'rxjs';\nimport { TestStoreCriteria } from '../test/store-test-helper';\n\nexport class StoreSupport {\n\n protected static testStoreManager?: IStoreManager;\n\n static isStoreManagerAvailable () {\n if (this.testStoreManager!=null) return true;\n return ((globalThis as any).xtStoreManager!=undefined);\n }\n\n static getStoreManager (): IStoreManager {\n return this.testStoreManager??((globalThis as any).xtStoreManager());\n }\n\n static setTestStoreManager (testStoreManager:IStoreManager): void {\n StoreSupport.testStoreManager = testStoreManager;\n }\n\n static newStoreCriteria (name:string, value:any, operator?:IStoreCriteriaOperator): IStoreCriteria {\n return new TestStoreCriteria(name, value, operator);\n }\n\n}\n\n/**\n * Interface definition for xt-store component.\n * We re-define them here to avoid importing xt-store in all plugins that don't need it.\n */\n\n\nexport interface IDataTransformer<T> {\n /**\n * Enable transformation of data right after it has been loaded from the store\n * @param source\n */\n postLoadingTransformation (source:any[]): T[];\n\n}\n\nexport interface IDocumentInfo {\n documentName: string;\n isUrl: boolean;\n documentId?: string;\n}\n\nexport type IStoreCriteriaOperator = '='|'<'|'<=';\n\nexport interface IStoreCriteria {\n name: string;\n value: any;\n operator: IStoreCriteriaOperator;\n}\n\nexport interface IStoreProvider<T> {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: IStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:any,\n groupBy?:any,\n transformer?: IDataTransformer<T>,\n ...criteria: any[]\n ): Observable<any>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<IDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<IDocumentInfo>;\n\n\n}\n\nexport interface IStoreManager {\n getProvider<T=never>(name?: string): IStoreProvider<T> | undefined;\n getProviderSafe<T=never>(name?: string): IStoreProvider<T>;\n\n getDefaultProvider<T=never>(): IStoreProvider<T> | undefined;\n\n getDefaultProviderSafe<T=never>(): IStoreProvider<T>;\n\n newStoreCriteria (name:string, value:any, operator: IStoreCriteriaOperator): IStoreCriteria;\n}\n","import { computed, inject, Injectable, Type } from '@angular/core';\nimport { XtContext } from '../xt-context';\nimport { XtRegistryResolver } from '../resolver/xt-registry-resolver';\nimport { XT_REGISTRY_TOKEN, XT_RESOLVER_TOKEN, XT_TYPE_RESOLVER_TOKEN } from './xt-tokens';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport {\n ManagedDataHandler,\n MappingHelper,\n XtSpecialFieldsHelper,\n XtTypeHandler,\n XtTypeInfo,\n xtTypeManager,\n XtTypeResolver,\n XtUpdatableTypeResolver\n} from 'xt-type';\nimport { XtComponentInfo, XtPluginInfo, XtTypeHandlerInfo } from '../plugin/xt-plugin-info';\nimport { XtResolver } from '../resolver/xt-resolver';\nimport { XtComponent } from '../xt-component';\nimport { loadRemoteModule } from '@angular-architects/native-federation';\nimport { XtAction } from '../action/xt-action';\nimport { XtActionHandler, XtActionResult } from '../action/xt-action-handler';\nimport { IStoreManager, StoreSupport } from '../store/store-support';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n/**\n * An all in one helper class, enabling manipulation of the context, with data and type associated with it.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtResolverService {\n\n pluginRegistry = inject (XT_REGISTRY_TOKEN);\n\n protected baseResolver = inject (XT_RESOLVER_TOKEN, {optional:true});\n protected baseTypeResolver = inject (XT_TYPE_RESOLVER_TOKEN, {optional:true});\n\n resolver:XtResolver;\n typeResolver:XtTypeResolver;\n\n constructor() {\n if (this.baseTypeResolver==null) {\n this.typeResolver = xtTypeManager();\n } else this.typeResolver=this.baseTypeResolver;\n\n if (this.baseResolver==null) {\n this.resolver=new XtRegistryResolver (this.pluginRegistry, this.typeResolver);\n } else this.resolver=this.baseResolver;\n\n }\n\n findBestComponent<T> (baseContext: XtContext<T>, subName?:string) : XtResolvedComponent{\n const ret= this.resolver.resolve(baseContext, subName);\n if (ret!=null) return ret;\n else throw new Error (\"No components found for this context \"+ baseContext.toString());\n }\n\n findTypeOf<T> (baseContext:XtContext<T>, subName?:string, value?:T): string | null | undefined {\n const ret = this.typeResolver.findTypeName (baseContext.valueType, subName, value);\n return ret;\n }\n\n findTypeHandlerOf<T> (baseContext:XtContext<T>, subName?:string, value?:T): {typeName?:string | null, handler?:XtTypeHandler<any>} {\n let ret:{typeName?:string | null, handler?:XtTypeHandler<any>} = {typeName:undefined, handler:undefined};\n if (baseContext.isReference()){\n ret = this.typeResolver.findTypeHandler(baseContext.reference!.toType, false, undefined, value);\n }else {\n ret = this.typeResolver.findTypeHandler(baseContext.valueType, false, subName, value);\n }\n return ret;\n }\n\n listSubNamesOf<T> (baseContext:XtContext<T>, value?:T): string[] {\n return this.typeResolver.listSubNames(baseContext.valueType, value);\n }\n\n listSubNamesOfType<T> (valueType:string, value?:T): string[] {\n return this.typeResolver.listSubNames(valueType, value);\n }\n\n registerPlugin (info:XtPluginInfo) {\n this.pluginRegistry.registerPlugin (info);\n this.registerTypes (info.types, info.typeHandlers);\n }\n\n registerTypes (types:XtTypeInfo|undefined, handlers?:XtTypeHandlerInfo<any>[]): void {\n if ((types !=null) && (this.typeResolver.canUpdate())) {\n\n for (const newType in types) {\n let handler=this.handlerDefinedFor (newType, handlers);\n if (handler==null) {\n handler = new ManagedDataHandler();\n }\n (this.typeResolver as XtUpdatableTypeResolver).addRootType (newType, types[newType], handler);\n }\n }\n }\n\n\n /**\n * Calculates all the possible actions for a given context\n * @param context\n * @param onlyVisible\n */\n possibleActions<T> (context:XtContext<T>, onlyVisible:boolean=true): Array<XtAction<T>> {\n const existingActions = context.listActions();\n if (existingActions!=null) {\n return existingActions;\n }\n\n if (context.valueType!=null) {\n const actionInfos = this.pluginRegistry.listActionInfos<T>(context.valueType);\n const actions = actionInfos.map((info) => {\n const ret = new XtAction(info.name,info.info, true);\n return ret;\n });\n context.listActions.set(actions);\n return actions;\n }\n return [];\n }\n\n /**\n * Finds the possible action with the given name for the current type, and runs it in the current value.\n * If the action is not possible in this context, try a parent context\n * @param actionName\n */\n async runAction<T> (context: XtContext<T>, actionName:string, storeMgr?:any): Promise<XtActionResult<any>> {\n let handler: XtActionHandler<T> |null = null;\n for (const action of this.possibleActions(context,false)) {\n if (action.name==actionName) {\n const handlerClass=action.info.handlerClass;\n handler=new handlerClass ();\n break;\n }\n }\n\n if (handler!=null) {\n return handler.runAction(context, actionName, this, storeMgr);\n } else {\n // Couldn't find the handler, let's see if we can have that up the context chain\n if (context.parentContext!=null) {\n return this.runAction(context.parentContext, actionName); // Run the parent without any store indication, as it most probably is different\n } else {\n return Promise.reject(\"Cannot find action \"+actionName+\" for context \"+this.toString());\n }\n }\n }\n\n\n protected handlerDefinedFor(newType: string, handlers: XtTypeHandlerInfo<any>[] | undefined):any {\n for (const handler of handlers ?? []) {\n if (handler.typesHandled.includes(newType)) {\n return new handler.handlerClass ();\n }\n }\n return null;\n }\n\n getComponentInfo<T>(type: Type<XtComponent<T>>):XtResolvedComponent {\n return XtResolvedComponent.from(this.pluginRegistry.getComponentInfo (type));\n }\n\n findComponentInfo<T>(type: Type<XtComponent<T>>):XtResolvedComponent|null {\n const ret=this.pluginRegistry.findComponentInfo (type);\n if (ret==null) return null;\n else return XtResolvedComponent.from(ret);\n }\n\n public listComponents = computed<Array<XtComponentInfo<any>>>(() => {\n return this.pluginRegistry.listComponents();\n });\n\n public listPlugins = computed<Array<XtPluginInfo>>(() => {\n return this.pluginRegistry.listPlugins();\n });\n\n /**\n * Dynamically load a register a plugin from the given url\n * The plugin must export at least a Register entrypoint that will be called right after loading..\n * @param url\n * @returns a Promise with the module loaded and already registered.\n */\n loadPlugin (url:URL|string):Promise<any> {\n return loadRemoteModule({\n remoteEntry: url.toString(),\n exposedModule: './Register'\n }).then((module:any) => {\n const pluginName = module.registerPlugin(this);\n // Transform the configured Uris to real urls\n const pluginConfig=this.pluginRegistry.pluginRegistry.get(pluginName);\n if (pluginConfig?.uriLogo!=null) {\n let urlString = url.toString();\n const lastSlash = urlString.lastIndexOf('/');\n urlString = urlString.substring(0, lastSlash+1)+pluginConfig?.uriLogo;\n pluginConfig.uriLogo=urlString;\n }\n return module;\n });\n\n }\n\n /**\n * Based on the type & value of the element, find which property is on its type and returns it's value\n * @param context\n * @param subPropertyType\n * @param value\n */\n findSubPropertyWithType<T> (context: XtContext<T>, subPropertyType:string, value:T): any {\n const subKeys = this.typeResolver.findSubPropertiesWithType (context.valueType, subPropertyType);\n if ((subKeys!=null)&&(subKeys.length==1)) {\n return value[subKeys[0] as keyof T];\n } else if (subKeys.length>1) {\n // Let's pickup the first\n return value[subKeys[0] as keyof T];\n } else {\n return undefined;\n }\n }\n\n /**\n * Creates a duplicate of an object, using our knowledge on its type given by the context\n * @param context\n * @param value\n */\n safeDuplicate<T> (context: XtContext<T>, value:T): T {\n\n const typeHandler = this.typeResolver.findTypeHandler(context.valueType, false, undefined, value);\n\n if (typeHandler.handler!=null) {\n return typeHandler.handler.safeDuplicate (value);\n }\n return structuredClone(value);\n }\n\n resolveMappingOf<U, T> (context: XtContext<T>, targetType:string, value?:T): MappingHelper<U, T> | undefined {\n if (context.valueType!=null) {\n const typeHandler = this.typeResolver.findTypeHandler<T>(targetType, false, undefined, value);\n\n if (typeHandler.handler!=null) {\n const ret = typeHandler.handler.getOrCreateMappingFrom<U>(context.valueType, this.typeResolver);\n if( ret != null) {\n return ret;\n }\n }\n }\n return undefined;\n }\n\n async resolveReferencedValue<T,U> (context: XtContext<T>, storeMgr: IStoreManager): Promise<U | U[] | null | undefined> {\n if (!context.isReference()) return undefined;\n const ref= context.reference!;\n const storeProvider = storeMgr.getProvider<U> (ref.type);\n if (storeProvider == null) {\n throw new Error ('No Store provider found for type '+ref.type);\n }\n\n const ret= await firstValueFrom(storeProvider.searchEntities(ref.toType, storeMgr.newStoreCriteria(ref.field, context.value(),'=')));\n if (ret.length == 0) return null;\n if (ref.referenceType=='MANY-TO-ONE') {\n if (ret.length > 1) throw new Error('Multiple values for many to one relation between ' + context.valueType + ' and ' + ref.type + ' with value ' + context.value());\n return ret[0];\n } else if (ref.referenceType=='ONE-TO-MANY') {\n return ret;\n }\n return undefined;\n }\n\n resolvePendingReferences () {\n (this.typeResolver as XtUpdatableTypeResolver).resolveAllTypeReferences();\n }\n\n /**\n * Calculates the values that can be referenced by the reference & value of this context\n * @param context\n */\n findPossibleReferences<T, U> (context:XtContext<T>): Observable<U[]> {\n if (!context.isReference()) throw new Error('Cannot find possible references of this non reference context'+context.toString());\n const reference = context.reference!;\n const store =StoreSupport.getStoreManager().getProviderSafe<U>(reference.toType);\n return store.searchEntities(reference.toType );\n }\n\n/* async loadAllReferencesForContext<T> (context:XtContext<T>, storeMgr: IStoreManager): Promise<void> {\n const refs =this.typeResolver.listReferences(context.valueType);\n const promises:Promise<void>[]=[];\n for (const ref of Object.keys(refs)) {\n const subContext= context.subContext(ref, undefined, this.typeResolver);\n promises.push(this.resolveReferencedValue(subContext, storeMgr).then ((value) => {\n subContext.updateReferencedContext(value);\n }));\n }\n\n if( promises.length>0) {\n return Promise.all(promises).then((values) => {\n context.subReferencesResolved.set(true);\n return;\n });\n } else {\n return Promise.resolve().then (() => {\n context.subReferencesResolved.set(true);\n });\n }\n\n }\n*/\n\n}\n","import { OutputEmitterRef } from '@angular/core';\nimport { XtComponentOutput } from '../xt-component';\n\nexport class XtBaseOutput implements XtComponentOutput {\n valueSelected: OutputEmitterRef<any> | undefined;\n\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n Signal,\n Type,\n viewChild\n} from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { XtComponent, XtComponentOutput, XtInputType, XtOutputType } from '../xt-component';\nimport { XtBaseContext, XtContext, XtDisplayMode } from '../xt-context';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\nimport { isTypeReference } from 'xt-type';\n\n/**\n * Offers a nice and easy to dynamically embed a component.\n * You set the type, the display mode, and either the value or the formgroup & subName to use.\n * XtRender will then instantiate the component, bind it to the value or form, and display it.\n */\n@Component({\n selector: 'xt-render',\n standalone: true,\n imports: [\n NgComponentOutlet,\n ReactiveFormsModule\n ],\n templateUrl: './xt-render.component.html',\n styleUrl: './xt-render.component.css'\n})\nexport class XtRenderComponent<T> implements AfterViewInit {\n resolverService = inject(XtResolverService);\n\n componentType = input<Type<XtComponent<T>>> ();\n displayMode = input.required<XtDisplayMode> ();\n valueType = input<string> ();\n\n // Either we set the value directly\n value= model<T> ();\n // Or we are inside a Form\n formGroup=input<FormGroup>();\n subName= input<string>();\n\n outputsObject = new XtBaseOutput();\n\n inputs = input<XtBaseInput>();\n outputs = output<XtComponentOutput>();\n\n outlet = viewChild.required(NgComponentOutlet);\n\n constructor() {\n\n }\n\n\n context: Signal<XtContext<any>> = computed(() => {\n let form = this.formGroup();\n\n const ret= new XtBaseContext<any>(this.displayMode(), this.subName(), form);\n ret.valueType=this.valueType();\n const typeInfo = this.resolverService.typeResolver.findType(ret.valueType);\n if( isTypeReference(typeInfo)) {\n ret.setReferenceInfo(typeInfo);\n }\n if (!ret.isInForm()) {\n const subName = this.subName();\n const value = this.value();\n if ( (subName == null) || (value == null)) {\n ret.setDisplayValue(value);\n } else {\n ret.setDisplayValue(value[subName as keyof typeof value]);\n }\n }\n return ret as XtContext<T>;\n });\n\n realContext = computed(() => {\n let ret = this.context();\n /*if ((ret.isReference())&& (ret.referencedContext!=null)) {\n ret = ret.referencedContext;\n }*/\n return ret;\n });\n\n\n type:Signal<Type<XtComponent<T>>|null> = computed( () => {\n //console.debug(\"Calculating type in XtRenderSubComponent\");\n\n let type=this.componentType();\n let compFound:XtResolvedComponent|null = null;\n if (type==null) {\n //console.debug('XtRender, using component set '+ type);\n //compFound = this.resolverService.findComponentInfo (type);\n //} else {\n compFound= this.resolverService.findBestComponent(this.realContext());\n //console.debug('XtRender, found component ',compFound.componentName);\n type= compFound.componentClass;\n }\n\n return type??null;\n });\n\n /**\n * Transfers the input and outputs from the host to the rendered component\n */\n ngAfterViewInit() {\n const instance=this.outlet().componentInstance as XtComponent;\n if (instance?.outputsObject!=null) {\n let hasOneOutput = false;\n for (const key of Object.keys(instance.outputsObject) as XtOutputType[] ) {\n this.outputsObject[key] = instance.outputsObject[key];\n hasOneOutput=true;\n }\n if (hasOneOutput) {\n this.outputs.emit(this.outputsObject);\n }\n }\n const inputs = this.inputs();\n if ((inputs!=null) && (instance?.inputsObject!=null)) {\n for (const key of Object.keys(inputs) as XtInputType[] ) {\n instance.inputsObject[key] = inputs[key];\n }\n\n }\n\n }\n\n}\n","<ng-container *ngComponentOutlet=\"type(); inputs: {context:context ()}\" />\n","import { AfterViewInit, Component, computed, inject, input, output, Signal, Type, viewChild } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { XtContext } from '../xt-context';\nimport { XtComponent, XtComponentInput, XtComponentOutput, XtInputType, XtOutputType } from '../xt-component';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\n\n/**\n * Dynamically render a component that will display the given subValue.\n * To be used only inside an XtSimpleComponent or XtCompositeComponent\n */\n@Component({\n selector: 'xt-render-sub',\n standalone: true,\n imports: [\n NgComponentOutlet,\n ReactiveFormsModule\n ],\n templateUrl: './xt-render-sub.component.html',\n styleUrl: './xt-render-sub.component.css'\n})\nexport class XtRenderSubComponent<T> implements AfterViewInit {\n context = input.required<XtContext<T>> ();\n componentType = input<Type<XtComponent<T>>> ();\n\n outputsObject = new XtBaseOutput();\n\n inputs = input<XtBaseInput>();\n outputs = output<XtComponentOutput>();\n\n outlet = viewChild.required(NgComponentOutlet);\n\n resolverService = inject(XtResolverService);\n\n realContext = computed(() => {\n let ret = this.context();\n /*if ((ret.isReference()) && (ret.referencedContext!=null)) {\n ret = ret.referencedContext;\n }*/\n return ret;\n });\n\n type:Signal<Type<XtComponent<T>>|null> = computed( () => {\n //console.debug(\"Calculating type in XtRenderSubComponent\");\n\n let type=this.componentType();\n let compFound:XtResolvedComponent|null = null;\n if (type==null) {\n //console.debug('XtRender, using component set '+ type);\n //compFound = this.resolverService.findComponentInfo (type);\n //} else {\n compFound= this.resolverService.findBestComponent(this.realContext());\n //console.debug('XtRender, found component ',compFound.componentName);\n type= compFound.componentClass;\n }\n\n return type??null;\n\n });\n\n /**\n * Transfers the input and outputs from the host to the rendered component\n */\n ngAfterViewInit() {\n const instance=this.outlet().componentInstance as XtComponent;\n if (instance?.outputsObject!=null) {\n let hasOneOutput = false;\n for (const key of Object.keys(instance.outputsObject) as XtOutputType[] ) {\n this.outputsObject[key] = instance.outputsObject[key];\n hasOneOutput=true;\n }\n if (hasOneOutput) {\n this.outputs.emit(this.outputsObject);\n }\n }\n const inputs = this.inputs();\n if ((inputs!=null) && (instance?.inputsObject!=null)) {\n for (const key of Object.keys(inputs) as XtInputType[] ) {\n instance.inputsObject[key] = inputs[key];\n }\n\n }\n\n\n }\n\n}\n","{{componentType()}}\n<ng-container *ngComponentOutlet=\"type(); inputs: {context:realContext ()}\" />\n","import { InputSignal } from '@angular/core';\nimport { XtComponentInput } from '../xt-component';\n\nexport class XtBaseInput implements XtComponentInput {\n valueSelected: InputSignal<any>|undefined;\n}\n","import { Component, computed, input, OnInit, output } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { XtContext } from '../xt-context';\nimport { XtComponent, XtComponentOutput } from '../xt-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\n\n/**\n * An XtSimpleComponent just displays the given value or element in a form.\n * If you need to dynamically embed other XtComponents to display sub elements, then please use the XtCompositeComponent\n */\n@Component({\n standalone: true,\n imports: [],\n template: ''\n})\nexport class XtSimpleComponent<T = any> implements XtComponent<T>, OnInit{\n context = input.required<XtContext<T>>();\n outputsObject = new XtBaseOutput();\n inputsObject = new XtBaseInput();\n outputs=output<XtComponentOutput>();\n\n isInForm = computed<boolean> ( () => {\n return this.context()?.isInForm()??false;\n });\n\n formControlNameIfAny = computed<string | undefined> (() => {\n return this.context()?.subName;\n });\n\n formGroupIfAny = computed<FormGroup | undefined> (() => {\n return this.context()?.formGroup();\n })\n\n formGroup = computed<FormGroup> (() => {\n const ret= this.context()?.formGroup();\n if (ret==null) throw new Error ('No form groups in this component of type '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Returns the component form name, which is for now the subName\n */\n componentNameInForm=computed<string> ( () => {\n return this.safelyGetSubName();\n });\n\n constructor() {\n }\n\n ngOnInit(): void {\n this.setupInputOutput();\n if (Object.keys(this.outputsObject).length > 0) {\n // At least one output has been defined\n this.outputs.emit(this.outputsObject);\n }\n }\n\n manageFormControl<T> (ctrlName:string, create:boolean=true): AbstractControl<T>|undefined {\n const formGroup = this.formGroupIfAny();\n if (formGroup==null) {\n // You can call manageFormControl even in not a form, it just get ignored\n //console.debug('FormGroup is undefined when declaring managedcontrol '+ctrlName);\n return undefined;\n } else {\n let ctrl=formGroup.get(ctrlName);\n if ((create) && (ctrl==null)) {\n ctrl = new FormControl<T|undefined>(undefined);\n formGroup.setControl(ctrlName, ctrl);\n }\n return ctrl??undefined;\n }\n }\n\n safelyGetSubName = computed<string>(() => {\n const ret = this.context()?.subName;\n if (ret==null) throw new Error ('This component has no name in the form '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Returns the form control name and create a form control behind the scene\n */\n formControlName = computed<string> (() => {\n const ret = this.safelyGetSubName();\n\n //this.manageFormControl<any>(ret); // Don't create anything at this point. It's a computed value.\n return ret;\n });\n\n formControl = computed<AbstractControl<any>> (() => {\n const subName = this.safelyGetSubName();\n const formControl= this.manageFormControl(subName, false);\n if (formControl==null) throw new Error (\"Calling formControl for subName \"+subName+\" when none exist.\");\n return formControl;\n});\n\n componentDescriptor (): string {\n return \"Component with type \"+this.constructor.name+\" with context \"+this.context().toString();\n }\n\n getValue= computed (()=> {\n return this.context().value();\n });\n\n displayValue = computed (() => {\n return this.context().displayValue();\n });\n\n /**\n * This is where components can assign their output() and input() into the XtComponent inputs and outputs member\n * @protected\n */\n protected setupInputOutput () {\n // Nothing to do here\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { XtSimpleComponent } from '../xt-simple/xt-simple.component';\nimport { FormGroup } from '@angular/forms';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtContext } from '../xt-context';\n\n@Component({\n standalone: true,\n imports: [],\n template: '',\n styleUrl: './xt-composite.component.css'\n})\nexport class XtCompositeComponent<T = any> extends XtSimpleComponent<T> {\n\n resolverService = inject(XtResolverService);\n\n override formGroupIfAny = computed<FormGroup | undefined> (() => {\n const context = this.context();\n if (context==null) return undefined;\n let ret= context.localFormGroup;\n if ((ret==null) && (context.parentFormGroup!=null) && (context.subName!=null)) {\n if (context.parentFormGroup.contains(context.subName)) {\n context.localFormGroup = context.parentFormGroup.get(context.subName) as FormGroup;\n } else {\n context.localFormGroup= new FormGroup ({});\n context.parentFormGroup.addControl(context.subName, context.localFormGroup);\n }\n ret=context.localFormGroup;\n }\n return ret;\n })\n\n /**\n * We need to create a new form group to manage the sub elements.\n */\n override formGroup = computed<FormGroup> (() => {\n const ret= this.formGroupIfAny();\n if (ret==null) throw new Error ('No form groups in this component of type '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Helper function to calculate the sub context\n * @param subName\n * @param subType\n */\n subContext (subName:string, subType?:string):XtContext<any> {\n this.formGroupIfAny(); // Ensure the context is properly initialized\n return this.context().subContext(subName, subType, this.resolverService.typeResolver);\n }\n\n}\n","import { Injectable } from \"@angular/core\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtMessageHandler {\n errorOccurred (error:any, errorMsg?:string) {\n console.error(errorMsg, error);\n }\n\n warningOccurred (warningMsg?:string) {\n console.warn(warningMsg);\n }\n\n}\n","import { FormControl, FormGroup } from '@angular/forms';\nimport { isPrimitive, isTypeReference, XtTypeHierarchy, XtTypeReference, XtTypeResolver } from 'xt-type';\n\nexport function attachToFormGroup(formGroup: FormGroup, controlName:string, value:any, valueType?:string, resolver?:XtTypeResolver) {\n // If it's a single value, just create the control\n if (((value!=null) && (isPrimitive(value))\n || (resolver?.isPrimitiveType(valueType)))) {\n const simpleControl = new FormControl(value);\n formGroup.addControl(controlName, simpleControl);\n } else {\n const complexGroup = new FormGroup({});\n updateFormGroupWithValue(complexGroup, value, valueType, resolver);\n formGroup.addControl(controlName, complexGroup);\n }\n}\n\nexport function updateFormGroupWithValue(formGroup: FormGroup, value:{[key:string]:any}, valueType?:string, resolver?:XtTypeResolver) {\n\n const toDelete = new Set<string>(Object.keys(formGroup.controls));\n // We merge the properties of the value if any, with the properties of the model\n const keySet = new Set<string>((value!=null)?Object.keys(value):null);\n if( ((valueType!=null) && (resolver!=null))) {\n const modelSubName = resolver.listSubNames(valueType, value);\n for (const sub of modelSubName) {\n keySet.add(sub);\n }\n }\n\n for (const valueKey of keySet) {\n const subValue=(value!=null)?value[valueKey]:null;\n const subType=resolver?.findType(valueType, valueKey, subValue)??undefined;\n const subTypeName = isTypeReference(subType) ? subType.toType : subType?.type;\n const primitive = resolver?.isPrimitiveType(subType, subValue);\n if (toDelete.delete(valueKey)) {\n // Already a control\n const oldControl = formGroup.get(valueKey)!;\n // Is it the right type ?\n if ((primitive) || (isTypeReference(subType))) {\n // Must be an FormControl2\n if ((oldControl as any).controls === undefined) {\n // It's ok, just set the value\n oldControl.setValue(value[valueKey]);\n } else {\n formGroup.setControl(valueKey, new FormControl(subValue));\n }\n } else {\n // Must be a FormGroup\n if ((oldControl as any).controls === undefined) {\n const newFormGroup = new FormGroup({});\n formGroup.setControl(valueKey, newFormGroup);\n updateFormGroupWithValue(newFormGroup, subValue, subTypeName, resolver);\n } else {\n // It was already a formgroup, so just update it\n updateFormGroupWithValue(oldControl as FormGroup, subValue, subTypeName, resolver);\n }\n }\n } else {\n if ((primitive) || (isTypeReference(subType))) {\n formGroup.addControl(valueKey, new FormControl(subValue));\n } else {\n const newFormGroup = new FormGroup({});\n formGroup.addControl(valueKey, newFormGroup);\n updateFormGroupWithValue(newFormGroup, subValue, subTypeName, resolver);\n }\n }\n }\n\n // Delete controls that are no more used\n for (const delName of toDelete) {\n formGroup.removeControl(delName);\n }\n}\n","import { XtResolverService } from '../angular/xt-resolver.service';\nimport { inject } from '@angular/core';\n\nexport class XtUnitTestHelper {\n/* public static registerComponent<T> (name:string, compClass:T, type:string){\n this.resolverService.pluginRegistry.registerComponent({\n componentName:name,\n componentClass: compClass,\n typesHandled: [type]\n });\n }\n*/\n}\n","import { Component, computed, inject, input, OnInit, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { XtRenderComponent } from '../render/xt-render.component';\nimport { XtComponent } from '../xt-component';\nimport { XtBaseContext, XtDisplayMode } from '../xt-context';\nimport { XtRenderSubComponent } from '../render/xt-render-sub.component';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { xtTypeManager } from 'xt-type';\nimport { updateFormGroupWithValue } from '../type/type-helper';\n/**\n * Component that can be used to bootstrap tests.\n * Just set the value and component type, and it will be injected in your test.\n */\n@Component({\n selector:'test-host',\n standalone:true,\n imports: [CommonModule, XtRenderComponent],\n template: '<h1>Test Simple Component</h1> <xt-render [componentType]=\"type()\" [displayMode]=\"displayMode()\" [value]=\"value()\" ></xt-render> '\n\n})\nexport class HostTestSimpleComponent {\n type = input.required<Type<XtComponent<any>>>();\n displayMode = input<XtDisplayMode> ('FULL_VIEW');\n value = input<any|undefined> (undefined);\n\n}\n\n/**\n * Same as HostTestSimpleComponent but it includes everything in a form.\n * Just set the component type, the formGroup and the component name, and your component will be run.\n * You can as well easily read and set the value.\n */\n@Component({\n selector:'test-form-host',\n standalone:true,\n imports: [CommonModule, XtRenderComponent, ReactiveFormsModule],\n template: '<h1>Test Form Component</h1> <form [formGroup]=\"computedFormGroup()\"> <xt-render [componentType]=\"type()\" displayMode=\"FULL_EDITABLE\" [subName]=\"controlName()\" [formGroup]=\"computedFormGroup()\"></xt-render></form>'\n})\nexport class HostTestFormComponent {\n builder = inject(FormBuilder);\n type = input.required<Type<XtComponent<any>>>();\n controlName = input.required<string>();\n // You can send the description to be used in a FormBuilder to create the formgroup;\n formDescription = input<any> ({ });\n // Or set the FormGroup directly\n formGroup= input<FormGroup>();\n\n// parentFormGroup = this.builder.group<{[keys:string]: AbstractControl}>({});\n createdFormGroup: FormGroup|null = null;\n\n computedFormGroup () {\n if( this.createdFormGroup==null) {\n const formGroup=this.formGroup();\n this.createdFormGroup=formGroup??generateFormGroup(this.formDescription());\n }\n // this.parentFormGroup.addControl(this.controlName()??HostTestTypedFormComponent.CONTROL_NAME, this.createdFormGroup);\n return this.createdFormGroup;\n }\n\n patchValue (newVal:any) {\n const patch:{[key:string]:any}={};\n patch[this.controlName()]=newVal;\n if (this.createdFormGroup!=null)\n this.createdFormGroup.patchValue(patch);\n else throw new Error (\"FormGroup not yet created. Did you set formGroup or formDescription property ?\");\n }\n\n retrieveValue (): any {\n if (this.createdFormGroup!=null)\n return this.createdFormGroup.value[this.controlName()];\n else throw new Error (\"FormGroup not yet created. Did you set formGroup or formDescription property ?\");\n }\n}\n\n/**\n * Component that can be used to test your component based on the type it handles\n * Just set the type hierarchy to register, the value, and it will instantiate the right component in your plugin\n */\n@Component({\n selector:'test-typed-host',\n standalone:true,\n imports: [CommonModule, XtRenderSubComponent],\n template: '<h1>Test Typed Component</h1> <xt-render-sub [context]=\"context()\" ></xt-render-sub> '\n\n})\nexport class HostTestTypedComponent {\n\n displayMode = input<XtDisplayMode> ('FULL_VIEW');\n value = input<any> ();\n valueType = input<string> ();\n\n context = computed( () => {\n const ret = new XtBaseContext(this.displayMode());\n\n ret.valueType=this.valueType();\n ret.setDisplayValue(this.value());\n return ret;\n });\n}\n\n/**\n * Same as HostTestSimpleComponent but it includes everything in a form.\n * Just set the component type, the formGroup and the component name, and your component will be run.\n * You can as well easily read and set the value.\n */\n@Component({\n selector:'test-typed-form-host',\n standalone:true,\n imports: [CommonModule, ReactiveFormsModule, XtRenderSubComponent],\n template: '<h1>Test Typed Form Component</h1> <form [formGroup]=\"parentFormGroup\"> <xt-render-sub [context]=\"subContext()\"></xt-render-sub></form>'\n})\nexport class HostTestTypedFormComponent implements OnInit{\n builder = inject(FormBuilder);\n resolver = inject(XtResolverService);\n\n static readonly CONTROL_NAME='ForTest';\n\n valueType = input<string> ();\n controlName = input<string>();\n // You can send the description to be used in a FormBuilder to create the formgroup;\n formDescription = input<any> (null);\n // Or set the FormGroup directly\n formGroup= input<FormGroup>();\n\n parentFormGroup = this.builder.group<{[keys:string]: AbstractControl}>({});\n\n createdFormGroup: FormGroup|null = null;\n\n ngOnInit(): void {\n this.computeFormGroup();\n }\n\n computeFormGroup () {\n if( this.createdFormGroup==null) {\n const formGroup=this.formGroup();\n if( this.formDescription()!=null) {\n this.createdFormGroup=formGroup??generateFormGroup(this.formDescription());\n } else {\n this.createdFormGroup=this.builder.group({});\n if (this.valueType()!=null) {\n updateFormGroupWithValue(this.createdFormGroup, {}, this.valueType(), this.resolver.typeResolver);\n }\n }\n this.parentFormGroup.addControl(this.controlName()??HostTestTypedFormComponent.CONTROL_NAME, this.createdFormGroup);\n }\n return this.createdFormGroup;\n };\n\n subContext () {\n this.computeFormGroup(); // Make sure the subformgroups are created\n\n const ctrlName = this.controlName();\n let ret:XtBaseContext<any>|null = null;\n if (ctrlName==null){\n ret = new XtBaseContext('FULL_EDITABLE', HostTestTypedFormComponent.CONTROL_NAME, this.parentFormGroup);\n }\n else{\n ret = new XtBaseContext('FULL_EDITABLE', ctrlName, this.createdFormGroup!);\n }\n ret.valueType=this.valueType();\n\n return ret;\n };\n\n patchValue (controlName:string, newVal:any) {\n const patch:{[key:string]:any}={};\n patch[controlName]=newVal;\n this.computeFormGroup().patchValue(patch);\n }\n\n retrieveValue (controlName:string): any {\n return this.computeFormGroup().value[controlName];\n }\n\n}\n\nfunction generateFormGroup(formDescription: any):FormGroup {\n if (typeof formDescription != 'object') {\n throw new Error ('Form Description should be an object of values');\n }\n return generateFormControl(formDescription) as FormGroup;\n}\n\nfunction generateFormControl(formDescription: any): AbstractControl {\n\n if (formDescription==null) {\n return new FormControl(formDescription);\n }\n\n if (Array.isArray(formDescription)){\n const retArray = new FormArray<AbstractControl>([]);\n for (const val of formDescription) {\n retArray.push(generateFormControl(val), {emitEvent:false});\n }\n return retArray;\n }\n\n if ((typeof formDescription=='object')&&(!(formDescription instanceof Date))) {\n const retObject=new FormGroup({});\n for (const key of Object.keys(formDescription)) {\n retObject.addControl(key, generateFormControl(formDescription[key]));\n }\n return retObject;\n }\n return new FormControl(formDescription);\n}\n","/*\n * Public API Surface of xt-components\n */\n\nexport * from './lib/xt-component';\nexport * from './lib/xt-context';\nexport * from './lib/xt-resolved-component';\nexport * from './lib/resolver/xt-resolver';\nexport * from './lib/registry/xt-plugin-registry'\nexport * from './lib/plugin/xt-plugin-info'\nexport * from './lib/action/xt-action-handler';\nexport * from './globals';\n\nexport * from './lib/angular/xt-tokens';\nexport * from './lib/angular/xt-resolver.service';\n\nexport * from './lib/render/xt-render.component';\nexport * from './lib/render/xt-render-sub.component';\nexport * from './lib/xt-simple/xt-simple.component';\nexport * from './lib/xt-composite/xt-composite.component';\n\nexport * from './lib/angular/xt-message-handler.service';\nexport * from './lib/store/store-support';\nexport * from './lib/type/type-helper';\nexport * from './lib/test/xt-unit-test-helper';\nexport * from './lib/test/xt-test-helper-components';\nexport * from './lib/test/store-test-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xt-components.mjs","sources":["../../../projects/xt-components/src/lib/registry/xt-plugin-registry.ts","../../../projects/xt-components/src/lib/xt-context.ts","../../../projects/xt-components/src/lib/xt-resolved-component.ts","../../../projects/xt-components/src/globals.ts","../../../projects/xt-components/src/lib/angular/xt-tokens.ts","../../../projects/xt-components/src/lib/resolver/xt-registry-resolver.ts","../../../projects/xt-components/src/lib/action/xt-action.ts","../../../projects/xt-components/src/lib/test/store-test-helper.ts","../../../projects/xt-components/src/lib/store/store-support.ts","../../../projects/xt-components/src/lib/angular/xt-resolver.service.ts","../../../projects/xt-components/src/lib/output/xt-base-output.ts","../../../projects/xt-components/src/lib/render/xt-render.component.ts","../../../projects/xt-components/src/lib/render/xt-render.component.html","../../../projects/xt-components/src/lib/render/xt-render-sub.component.ts","../../../projects/xt-components/src/lib/render/xt-render-sub.component.html","../../../projects/xt-components/src/lib/output/xt-base-input.ts","../../../projects/xt-components/src/lib/xt-simple/xt-simple.component.ts","../../../projects/xt-components/src/lib/xt-composite/xt-composite.component.ts","../../../projects/xt-components/src/lib/angular/xt-message-handler.service.ts","../../../projects/xt-components/src/lib/type/type-helper.ts","../../../projects/xt-components/src/lib/test/xt-unit-test-helper.ts","../../../projects/xt-components/src/lib/test/xt-test-helper-components.ts","../../../projects/xt-components/src/public-api.ts","../../../projects/xt-components/src/xt-components.ts"],"sourcesContent":["import { XtActionHandlerInfo, XtActionInfo, XtComponentInfo, XtPluginInfo } from '../plugin/xt-plugin-info';\nimport { signal, Type } from '@angular/core';\nimport { XtComponent } from '../xt-component';\n\nexport class XtPluginRegistry {\n\n pluginRegistry = new Map<string, XtPluginInfo> ();\n componentRegistry = new Map<string, XtComponentInfo<any>> ();\n componentByTypeCache = new Map<string, XtComponentInfo<any>[]> ();\n protected actionByTypeRegistry = new Map<string, Map<string, XtActionInfo<any>>> ();\n\n listComponents = signal(new Array<XtComponentInfo<any>>());\n listPlugins = signal(new Array<XtPluginInfo>());\n\n /**\n * The component can manage any standard javascript primitives types. That's usually the default whenever we don't know any particular type\n * string\n * number\n * bigint\n * boolean\n * undefined\n * null\n * symbol is not managed\n * Date, while an object and not a primitive, is managed\n */\n public static readonly ANY_PRIMITIVE_TYPE=\"ANY_PRIMITIVE_TYPE\";\n /**\n * The components can manage any composite javascript type. Default when no type has been defined and it's a user defined javascript object (not a data type)\n */\n public static readonly ANY_OBJECT_TYPE=\"ANY_OBJECT_TYPE\";\n\n public static readonly ANY_PRIMITIVE_SET = \"ANY_PRIMITIVE_SET\";\n\n public static readonly ANY_OBJECT_SET = \"ANY_OBJECT_SET\";\n\n /**\n * Whenever a component can handle any type of reference to a single entity or to multiple entities.\n */\n public static readonly ANY_SINGLE_REFERENCE = \"ANY_SINGLE_REFERENCE\";\n\n public static readonly ANY_MULTIPLE_REFERENCE = \"ANY_MULTIPLE_REFERENCE\";\n\n registerPlugin (info:XtPluginInfo) {\n this.pluginRegistry.set (info.name, info);\n\n if (info.components != null) {\n let updated=false;\n for (const comp of info.components) {\n updated=true;\n this.registerComponent (comp);\n }\n if (updated) this.componentByTypeCache.clear(); // Force recalculation of type\n }\n\n if( info.actionHandlers!=null) {\n for (const handler of info.actionHandlers) {\n this.registerActionHandler (handler);\n }\n }\n\n this.listPlugins.update((array) => {\n let found=false;\n for (let i=0; i<array.length; i++) {\n if (array[i].name==info.name) {\n found=true;\n array[i] = info;\n }\n }\n if( !found)\n array.push(info);\n return [...array]; // You have to send another value, not just update the existing one.\n });\n\n }\n\n registerComponent<T> (info:XtComponentInfo<T>) {\n this.componentRegistry.set (info.componentName, info);\n this.listComponents.update((array) => {\n let found=false;\n for (let i=0; i<array.length; i++) {\n if (array[i].componentName==info.componentName) {\n found=true;\n array[i] = info;\n }\n }\n if( !found)\n array.push(info);\n return array;\n });\n }\n\n findComponentsForType<T> (valueType:string|null|undefined, value?:T): XtComponentInfo<any>[] {\n let originalType=valueType;\n //console.debug('Finding type from '+valueType+' with value ',value);\n // We don't know the value type, let's try to guess if it's a primitive or object based on the value\n if ( valueType == null) {\n valueType = XtPluginRegistry.ANY_OBJECT_TYPE;\n if ((value == null) || (typeof value != 'object')) {\n valueType=XtPluginRegistry.ANY_PRIMITIVE_TYPE;\n } else if (value instanceof Date) {\n valueType=XtPluginRegistry.ANY_PRIMITIVE_TYPE;\n }\n\n if (Array.isArray(value)) {\n valueType = (valueType===XtPluginRegistry.ANY_PRIMITIVE_TYPE)?XtPluginRegistry.ANY_PRIMITIVE_SET:XtPluginRegistry.ANY_OBJECT_SET;\n }\n } else { // originalType has been defined.\n if (Array.isArray(value)) {\n valueType=valueType.endsWith('[]')?valueType:valueType+'[]';\n originalType=valueType;\n }\n }\n //console.debug('Type found is '+valueType);\n\n let ret = this.componentByTypeCache.get(valueType);\n if (ret == null) {\n ret = new Array<XtComponentInfo<any>> ()\n for (const comp of this.componentRegistry) {\n const info=comp[1];\n if (info.typesHandled.includes (valueType)) {\n ret.push(info);\n }\n }\n\n if ((ret.length == 0) && (originalType!=null)) {\n // Couldn't find a specific component, let's try the generic ones, so we don't pass any type\n ret = this.findComponentsForType(null, value);\n // Cache the component only if we were able to assert its type.\n // If no type has been given and value is null, then we cannot assess the real type\n if (value!=null) {\n this.componentByTypeCache.set(originalType, ret);\n }\n } else {\n // Cache the component only if we were able to assert its type.\n // If no type has been given and value is null, then we cannot assess the real type\n if ((value!=null) || (originalType!=null)) {\n this.componentByTypeCache.set(originalType ?? valueType, ret);\n }\n }\n\n }\n return ret;\n }\n\n public static registry (): XtPluginRegistry {\n return XT_REGISTRY;\n }\n\n findComponentInfo(type: Type<XtComponent<any>>): XtComponentInfo<any>|null {\n // Search for the component registered with this class\n for (const info of this.componentRegistry.values()) {\n if (info.componentClass==type) {\n return info;\n }\n }\n return null;\n }\n\n getComponentInfo(type: Type<XtComponent<any>>): XtComponentInfo<any> {\n const ret= this.findComponentInfo(type);\n if (ret==null) {throw new Error (\"No component found with class \"+type);}\n return ret;\n }\n\n registerActionHandler<T>(handlerInfo:XtActionHandlerInfo<T>) {\n for (const type of handlerInfo.types) {\n const handlers = handlerInfo.actions;\n for (const actionName of Object.keys(handlers)) {\n let exist = this.actionByTypeRegistry.get(type);\n if (exist==null) {\n exist = new Map();\n this.actionByTypeRegistry.set(type, exist);\n }\n exist.set(actionName, handlers[actionName]);\n }\n }\n }\n\n findActionInfo<T>(type:string, actionName:string):XtActionInfo<T>|undefined {\n const handlers=this.actionByTypeRegistry.get(type);\n if (handlers!=null) {\n return handlers.get(actionName);\n }\n return undefined;\n }\n\n listActionInfos<T> (type:string): {name:string, info: XtActionInfo<T>}[] {\n const handlers=this.actionByTypeRegistry.get(type);\n if (handlers!=null) {\n return Array.from(handlers.entries()).map(([name,info]) => {\n return {name:name,info:info};\n });\n }\n else return []\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { isTypeReference, XtBaseTypeReference, XtTypeHierarchy, XtTypeReference, XtTypeResolver } from 'xt-type';\nimport { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { XtAction } from './action/xt-action';\nimport { XtPluginRegistry } from './registry/xt-plugin-registry';\n\n/**\n * A XtContext provides all the necessary information for an ng-extended component to operate. It is passed from parent to child component and pass\n * - The display mode - View, Inline view or Edit\n * - The value, either directly as a signal or in a formgroup when editing.\n * - The valueType, necessary to find the right ng-extended component to display\n *\n * To do this, it maintains a hierarchy of context and subContexts by name.\n */\nexport type XtContext<T> = {\n\n displayMode: XtDisplayMode;\n\n subName?: string; // The subName in the parentFormGroup and parentContext\n parentFormGroup?: FormGroup;\n localFormGroup?: FormGroup;\n\n /**\n * When the value in the context is a reference to another type\n */\n reference?:XtTypeReference\n\n /**\n * If it's a reference, we keep the context referenced\n */\n referencedContext?:XtContext<any>;\n\n /**\n * creates the referencedContext by using this referenced value\n * @param val\n *\n updateReferencedContext(val: any, valueType?:string): void;*/\n\n /**\n * Signal when all the asynchronously defined subreferences are resolved.\n *\n subReferencesResolved: WritableSignal<boolean>;\n*/\n\n // A parentContext if defined\n parentContext?:XtContext<any>;\n\n isInForm (): boolean;\n\n formGroup () : FormGroup | undefined;\n\n formControlNameOrNull():string|null;\n\n formControlValue (): any | null;\n\n subValue (subName?:string):T | null | undefined;\n\n subContext(subName: string | undefined | null, subType?:string, typeResolver?: XtTypeResolver | null): XtContext<any>;\n\n elementSetContext(subElement: any): XtContext<any>;\n\n displayValue: Signal<T|null>;\n\n setDisplayValue (newValue:T|null|undefined, type?:string): XtContext<T>;\n\n setFormValue (newValue:T|null|undefined, markAsDirty?:boolean): boolean;\n\n value(): T | null | undefined;\n\n valueType?:string;\n\n toString (): string;\n\n listActions: WritableSignal<XtAction<T>[] | null>;\n\n isReference ():boolean;\n\n setReferenceInfo (ref:XtTypeReference):void;\n\n}\n\nexport type XtDisplayMode = 'INLINE_VIEW'|'FULL_VIEW'|'FULL_EDITABLE'|'LIST_VIEW';\n\nexport class XtBaseContext<T> implements XtContext<T>{\n displayMode: XtDisplayMode = 'FULL_VIEW';\n\n /**\n * When editable, the value is stored in a parent formGroup\n */\n subName?: string;\n parentFormGroup?: FormGroup<any>;\n\n /**\n * When the context is a child, it potentially needs to update its parent value\n */\n parentContext?:XtBaseContext<any>;\n\n /**\n * All child contexts are kept in this map\n */\n protected childContexts?:Map<string, XtBaseContext<any>>;\n\n /**\n * localFormGroup exists only for composite components: it's children are all gathered in a form group\n */\n localFormGroup?: FormGroup<any>;\n\n /**\n * When not managed by a form, the value is here\n */\n nonFormValue?: WritableSignal<T|null>;\n\n valueType?:string;\n\n /**\n * When the value in the context is a reference to another type\n */\n reference?:XtTypeReference;\n\n /**\n * If it's a reference, we keep the context referenced\n *\n referencedContext?:XtContext<any>;*/\n\n //subReferencesResolved = signal(false);\n\n /**\n * Keeps track of all the possible actions for this context\n * @protected\n */\n listActions = signal<XtAction<T>[]|null>(null);\n\n /**\n *\n * @param displayMode\n * @param readOnly\n * @param parentGroup\n * @param controlName\n */\n\n constructor (displayMode: XtDisplayMode, subName?: string, parentGroup?: FormGroup, parentContext?:XtBaseContext<any>)\n {\n this.displayMode=displayMode;\n this.parentFormGroup=parentGroup;\n this.parentContext=parentContext;\n this.subName=subName;\n if ((parentGroup!=null) && (subName!=null)) {\n const subControl=parentGroup.get(subName);\n // If it's a form group, then it should be set as localFormGroup\n if ((subControl as FormGroup)?.controls!=null) {\n this.localFormGroup=subControl as FormGroup;\n }\n }\n }\n\n setDisplayValue (newValue:T|null|undefined, type?:string, updateParent:boolean=true): XtBaseContext<T> {\n if (newValue!==undefined){\n const oldValue = this.nonFormValue?this.nonFormValue():null;\n if (this.nonFormValue==null) {\n if ((this.childContexts!=null) && (this.childContexts.size>0)) throw new Error ('An XtContext with no values cannot have children ',{cause:this});\n this.nonFormValue=signal(newValue);\n }else {\n this.nonFormValue.set(newValue);\n }\n\n // Change the children values if needed\n if (this.childContexts!=null) {\n if (newValue==null) {\n for (const [subName, child] of this.childContexts) {\n child.setDisplayValue(null, undefined, false);\n }\n\n } else if (oldValue!=null) {\n for (const [subName, child] of this.childContexts) {\n if (newValue[subName as keyof T]!=oldValue[subName as keyof T]) {\n // The value has changed, let's update\n child.setDisplayValue(newValue[subName as keyof T], undefined, false);\n }\n }\n }\n }\n\n if ((updateParent) && (this.subName!=null))\n this.parentContext?.updateSubDisplayValue(this.subName,newValue);\n }\n\n if (type!==undefined)\n this.valueType = type;\n return this;\n }\n\n displayValue = computed( ()=> {\n if (this.nonFormValue!==undefined) {\n return this.nonFormValue();\n } else {\n throw new Error (\"Cannot display a value that does not exist. Are you sure you're not using Reactive Form with this context? \"+ this.toString());\n }\n });\n\n isInForm (): boolean {\n return (this.formGroup()!=null);\n }\n\n formControlNameOrNull():string|null {\n return this.subName??null;\n }\n\n value ():T | null | undefined {\n if (this.nonFormValue!=null)\n return this.nonFormValue()??this.formControlValue();\n else\n return this.formControlValue();\n }\n\n subValue (subsubName?:string):any | null | undefined {\n const value = this.nonFormValue?this.nonFormValue():this.formControlValue();\n if ((subsubName != null) && (value != null)) {\n return value[subsubName as keyof typeof value];\n }else {\n return value;\n }\n }\n\n /**\n * Enable child contexts to update its own value in the parent context whenever it's value changes\n */\n protected updateSubDisplayValue (subName:string, subValue:any): void {\n if (this.nonFormValue!=null) {\n let newValue = this.nonFormValue();\n if (newValue==null) {\n const newValue = {} as T;\n newValue[subName as keyof T]=subValue\n this.nonFormValue.set(newValue);\n } else {\n newValue[subName as keyof T] = subValue; // Discretly update the subValue without triggering parent signal\n }\n } else {\n throw new Error (\"No nonFormValue to update subDisplayValue\"+this.toString());\n }\n }\n\n formControlValue (): T | null | undefined {\n let ret:T|undefined|null=undefined;\n if (this.isInForm()) {\n if (this.subName!=null) {\n //console.debug (\"formControlValue parentGroup value is \", this.parentFormGroup?.value);\n ret=this.parentFormGroup?.value[this.subName];\n } else {\n ret= this.parentFormGroup?.value;\n }\n } else {\n ret= undefined;\n }\n //console.debug(\"formControlValue of \"+this.subName+ \" is \",ret);\n return ret;\n }\n\n setFormValue (newValue:T|null|undefined, markAsDirty=false): boolean {\n if (this.isInForm()) {\n if (this.subName!=null) {\n const control=this.parentFormGroup?.get(this.subName);\n if (control!=null) {\n control.setValue(newValue);\n if (markAsDirty) {\n control.markAsDirty();\n }\n return true;\n } else {\n // Supports setting values without a child form control\n const value=this.parentFormGroup?.getRawValue();\n if (value!=null) {\n if (newValue!==undefined)\n value[this.subName]=newValue;\n else\n delete value[this.subName];\n }\n }\n }\n }\n return false;\n }\n\n\n /**\n * Returns the context associated with a specific element in a set.\n * Value must be an array.\n * @param elementIndex\n */\n elementSetContext(elementIndex:number): XtContext<any> {\n const value = this.value();\n\n if (!Array.isArray(this.value())) {\n throw new Error (\"The value must be an Array / Set to create a subElement context.\")\n }\n\n const indexKey = elementIndex.toString();\n let ret = this.childContexts?.get(indexKey);\n\n if( ret==null) {\n ret = new XtBaseContext<T>(this.displayMode, undefined, undefined, this);\n ret.setDisplayValue((value as any[])[elementIndex]);\n\n if (this.valueType != null) {\n // Convert potential array type into single type\n ret.valueType = this.valueType.endsWith('[]') ? this.valueType.substring(0, this.valueType.length - 2) : this.valueType;\n }\n if( this.childContexts==null) this.childContexts=new Map<string, XtBaseContext<any>>();\n this.childContexts?.set(indexKey, ret);\n }\n return ret;\n }\n\n subContext(subName: string | undefined | null, subType?:string, typeResolver?:XtTypeResolver | null): XtContext<any> {\n if ((subName==null) || (subName.length==0)) {\n return this;\n } else if (this.childContexts?.has(subName)) {\n return this.childContexts?.get(subName)!;\n }else {\n let subValue:WritableSignal<any|null> | null = null;\n let currentGroup = this.formGroup();\n // Recalculate parentGroup and formControlName and value if needed.\n if (currentGroup==null){\n let curValue = this.nonFormValue;\n if (curValue!=null){\n if (curValue()!=null) {\n subValue = signal ((curValue() as any)[subName]);\n }\n }\n if (subValue==null) {\n subValue = signal (null);\n }\n }\n\n const ret = new XtBaseContext<T> (this.displayMode, subName, currentGroup, this);\n if( subValue!=null) ret.nonFormValue=subValue;\n\n if (subType!=null) {\n ret.valueType=subType;\n } else if ((this.valueType!=null) && (typeResolver!=null)) {\n const subType = typeResolver.findType(this.valueType, subName, this.value());\n if( subType!=null) {\n if (isTypeReference(subType)) {\n if( subType.type== XtBaseTypeReference.UNRESOLVED_TYPE) throw new Error (\"You must resolve all reference types before using them in a context. Missing type \"+subType.type+\" for subName \"+subName+\" in valueType \"+this.valueType+\" of context \"+this.toString())\n\n ret.valueType=subType.toType;\n ret.reference=subType;\n if (this.displayMode=='LIST_VIEW') ret.displayMode='INLINE_VIEW'; // We display a reference as inline in a list\n else if (this.displayMode=='FULL_EDITABLE') {\n // We don't edit directly references, we simply enable selection of them.\n ret.valueType=(subType.referenceType=='ONE-TO-MANY')?XtPluginRegistry.ANY_MULTIPLE_REFERENCE:XtPluginRegistry.ANY_SINGLE_REFERENCE;\n }\n } else {\n ret.valueType=(subType as XtTypeHierarchy).type;\n }\n }\n //ret.valueType=typeResolver.findTypeName(this.valueType, subName, this.value())??undefined;\n }\n\n if (this.childContexts==null) this.childContexts=new Map<string, XtBaseContext<any>>();\n this.childContexts.set(subName, ret);\n return ret;\n }\n }\n\n formGroup (): FormGroup|undefined {\n return this.localFormGroup??this.parentFormGroup;\n }\n\n isReference ():boolean {\n return (this.reference!=null);\n }\n\n setReferenceInfo (reference:XtTypeReference):void {\n this.reference=reference;\n //this.subReferencesResolved.set(this.reference!=null);\n }\n\n /**\n * creates the referencedContext by using this referenced value\n * @param val\n *\n updateReferencedContext(val: any, valueType?:string): void {\n if (!this.isReference()) throw new Error ('This context '+this.toString()+' is not a reference.');\n\n if( this.referencedContext==null) {\n let refDisplayMode = 'INLINE_VIEW' as XtDisplayMode;\n if (this.displayMode=='FULL_VIEW') refDisplayMode = 'FULL_VIEW';\n this.referencedContext = new XtBaseContext(refDisplayMode);\n }\n this.referencedContext.setDisplayValue(val);\n if( valueType!=null) this.referencedContext.valueType=valueType;\n }*/\n\n toString():string {\n let ret='XtContext named ';\n ret += this.subName??'None';\n ret += ' with type ';\n ret += this.valueType??'None';\n ret +=' with value ';\n ret += this.nonFormValue?this.nonFormValue():this.formControlValue();\n if (this.isReference()) {\n ret +=' referencing ';\n ret += this.reference?.type\n }\n return ret;\n }\n}\n","import { XtComponentInfo } from './plugin/xt-plugin-info';\n\nexport class XtResolvedComponent {\n componentName: string;\n componentClass: any;\n outputs:boolean;\n\n constructor (componantName:string, componentClass:any, outputs:boolean=false) {\n this.componentName = componantName;\n this.componentClass = componentClass;\n this.outputs = outputs;\n }\n\n public static from (info:XtComponentInfo<any>): XtResolvedComponent {\n const ret = new XtResolvedComponent(info.componentName, info.componentClass);\n if ( (info.outputs!=null) && (info.outputs.length>0)){\n ret.outputs=true;\n }\n return ret;\n }\n}\n","/**\n * The global plugin registry.\n * Plugins will register to this when loaded.\n */\nimport { XtPluginRegistry } from './lib/registry/xt-plugin-registry';\n\ndeclare global {\n\n var XT_REGISTRY:XtPluginRegistry;\n}\n\nexport function initXtPluginRegistry () {\n if (globalThis.XT_REGISTRY==null) {\n globalThis.XT_REGISTRY = new XtPluginRegistry();\n }\n}\n\nexport function xtPluginRegistry (): XtPluginRegistry {\n if (globalThis.XT_REGISTRY==null) {\n initXtPluginRegistry();\n }\n return globalThis.XT_REGISTRY;\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { XtResolver } from \"../resolver/xt-resolver\";\nimport { XtPluginRegistry } from \"../registry/xt-plugin-registry\";\nimport { XtTypeResolver } from \"xt-type\";\nimport { xtPluginRegistry } from '../../globals';\n\nexport const XT_RESOLVER_TOKEN = new InjectionToken<XtResolver> ('Enable providing a custom component resolver.');\n\nexport const XT_TYPE_RESOLVER_TOKEN = new InjectionToken<XtTypeResolver> ('Enable providing a custom type resolver.');\n\nexport const XT_REGISTRY_TOKEN = new InjectionToken<XtPluginRegistry> (\"Injects the Plugin Registry right into your angular component\",\n {\n factory: () => {\n return xtPluginRegistry();\n }\n }\n )\n","import { XtPluginRegistry } from \"../registry/xt-plugin-registry\";\nimport { isTypeReference, XtTypeResolver } from \"xt-type\";\nimport { XtContext } from \"../xt-context\";\nimport { XtResolvedComponent } from \"../xt-resolved-component\";\nimport { XtResolver } from \"./xt-resolver\";\n\nexport class XtRegistryResolver implements XtResolver {\n\n registry:XtPluginRegistry;\n typeResolver: XtTypeResolver;\n\n constructor (registry:XtPluginRegistry, typeResolver:XtTypeResolver) {\n this.registry = registry;\n this.typeResolver = typeResolver;\n }\n\n resolve<T>(baseContext: XtContext<T>, subName?:string): XtResolvedComponent | null {\n let typeToFind = baseContext.valueType;\n\n const typeInfo = this.typeResolver.findType(baseContext.valueType, subName);\n // If it's a type reference, we find the component of the referenced type\n if (isTypeReference(typeInfo)) {\n if (baseContext.displayMode=='FULL_EDITABLE') {\n typeToFind = XtPluginRegistry.ANY_SINGLE_REFERENCE;\n }else {\n typeToFind =typeInfo.toType;\n }\n }\n\n const ret= this.registry.findComponentsForType (typeToFind, baseContext.subValue(subName));\n if (ret!=null && ret.length>0) {\n return XtResolvedComponent.from( ret[0]);\n }\n return null;\n }\n\n}\n","import { signal } from '@angular/core';\nimport { XtActionInfo } from '../plugin/xt-plugin-info';\n\nexport class XtAction<T> {\n name: string;\n info: XtActionInfo<T>;\n enabled = signal<boolean>(false);\n\n constructor(name: string, info: XtActionInfo<T>, enabled?: boolean) {\n this.name = name;\n this.info = info;\n if (enabled!=null) {\n this.enabled.set(enabled);\n }\n }\n}\n","import { from, Observable } from 'rxjs';\nimport {\n IDataTransformer,\n IDocumentInfo,\n IStoreCriteria,\n IStoreCriteriaOperator,\n IStoreManager,\n IStoreProvider,\n StoreSupport\n} from '../store/store-support';\n\n/**\n * A very light and not 100% compatible storemanager in case you are not using xt-store.\n * It can emulate XtStoreManager to some extends for doing some tests\n */\nexport class StoreTestHelper {\n public static ensureTestProviderOnly() {\n StoreSupport.setTestStoreManager(new TestStoreManager());\n }\n}\n\nexport class TestStoreManager implements IStoreManager {\n protected defaultProvider= new TestStoreProvider();\n\n getProvider<T = never>(name?: string): IStoreProvider<T> | undefined {\n return this.defaultProvider;\n }\n\n getProviderSafe<T = never>(name?: string): IStoreProvider<T> {\n return this.defaultProvider;\n }\n\n getDefaultProvider<T = never>(): IStoreProvider<T> | undefined {\n return this.defaultProvider;\n }\n\n getDefaultProviderSafe<T = never>(): IStoreProvider<T> {\n return this.defaultProvider;\n }\n\n newStoreCriteria(name: string, value: any, operator: IStoreCriteriaOperator): IStoreCriteria {\n return new TestStoreCriteria(name, value, operator);\n }\n\n}\n\nexport class TestStoreProvider<T = never> implements IStoreProvider<T> {\n protected data = new Map<string, Map<string,any>> ();\n\n protected getOrCreateArray (name: string): Map<string,T> {\n let ret=this.data.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.data.set(name, ret);\n }\n return ret;\n }\n\n protected extractKey (value: any, create?:boolean):string {\n if (value._id!=null) return value._id; // ManagedData key\n else if (value.id!=null) return value.id;\n else {\n if (create===true) {\n const newId = Math.random().toString(36).substring(2, 8);\n value._id=newId;\n return newId;\n }\n return value.toString();\n }\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n this.getOrCreateArray(name).set(this.extractKey(entity, true), entity);\n return Promise.resolve(entity);\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n const ret = this.getOrCreateArray(name).get(key);\n if (ret==null) {\n throw new Error (\"No entity named \"+name+\" with key \"+key);\n }\n return Promise.resolve(ret);\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n return Promise.resolve(this.getOrCreateArray(name).get(key));\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return Promise.resolve( this.getOrCreateArray(name).delete(key));\n }\n\n searchEntities(name: string, ...criteria: TestStoreCriteria[]): Observable<T[]> {\n // No criteria defined, just send the full list\n const ret=new Array<T>();\n if( (criteria==null)||(criteria.length==0)) {\n for (const toAdd of this.getOrCreateArray(name).values()) {\n ret.push(toAdd);\n }\n } else {\n for (const toAdd of this.getOrCreateArray(name).values()) {\n let canAdd=true;\n for (const criter of criteria) {\n if (!criter.filter(toAdd)) {\n canAdd=false;\n break;\n }\n }\n if( canAdd) ret.push(toAdd);\n }\n\n }\n return from([ret]);\n }\n\n searchAndPrepareEntities(name: string, sort?: any, groupBy?: any, transformer?: IDataTransformer<T> | undefined, ...criteria: any[]): Observable<any> {\n throw new Error('Method not implemented.');\n }\n canStoreDocument(): boolean {\n return true;\n }\n storeDocument(toStore: File): Promise<IDocumentInfo> {\n const ret = new TestDocumentInfo(toStore.name, true,URL.createObjectURL(toStore));\n return Promise.resolve(ret);\n }\n\n storeDocuments(toStore: File[]): Observable<IDocumentInfo> {\n throw new Error('Method not implemented.');\n }\n\n}\n\nexport class TestDocumentInfo implements IDocumentInfo {\n documentName: string;\n isUrl: boolean;\n documentId?: string;\n\n constructor(documentName: string, isUrl: boolean,documentId?: string) {\n this.documentId = documentId;\n this.documentName = documentName;\n this.isUrl = isUrl;\n }\n}\n\nexport class TestStoreCriteria implements IStoreCriteria {\n name: string;\n value: any;\n operator: '='|'<='|'<';\n\n constructor(\n name: string,\n value: any,\n operator?: IStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = '=';\n else {\n this.operator = operator;\n }\n }\n\n filter (toFilter:any): boolean {\n const testValue=toFilter[this.name];\n switch (this.operator) {\n case '=':\n return testValue == this.value;\n case '<':\n return (testValue as number)<(this.value as number);\n case '<=':\n return (testValue as number)<(this.value as number);\n default:\n return true;\n }\n }\n}\n","/**\n * Wrapper around xt-store manager: You can use it to check if xt-store is included or not, and decide what to do\n *\n * This allows plugins to potentially use xt-store whenever included in the applications running the plugin\n */\nimport { Observable } from 'rxjs';\nimport { TestStoreCriteria } from '../test/store-test-helper';\n\nexport class StoreSupport {\n\n protected static testStoreManager?: IStoreManager;\n\n static isStoreManagerAvailable () {\n if (this.testStoreManager!=null) return true;\n return ((globalThis as any).xtStoreManager!=undefined);\n }\n\n static getStoreManager (): IStoreManager {\n return this.testStoreManager??((globalThis as any).xtStoreManager());\n }\n\n static setTestStoreManager (testStoreManager:IStoreManager): void {\n StoreSupport.testStoreManager = testStoreManager;\n }\n\n static newStoreCriteria (name:string, value:any, operator?:IStoreCriteriaOperator): IStoreCriteria {\n return new TestStoreCriteria(name, value, operator);\n }\n\n}\n\n/**\n * Interface definition for xt-store component.\n * We re-define them here to avoid importing xt-store in all plugins that don't need it.\n */\n\n\nexport interface IDataTransformer<T> {\n /**\n * Enable transformation of data right after it has been loaded from the store\n * @param source\n */\n postLoadingTransformation (source:any[]): T[];\n\n}\n\nexport interface IDocumentInfo {\n documentName: string;\n isUrl: boolean;\n documentId?: string;\n}\n\nexport type IStoreCriteriaOperator = '='|'<'|'<=';\n\nexport interface IStoreCriteria {\n name: string;\n value: any;\n operator: IStoreCriteriaOperator;\n}\n\nexport interface IStoreProvider<T> {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: IStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:any,\n groupBy?:any,\n transformer?: IDataTransformer<T>,\n ...criteria: any[]\n ): Observable<any>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<IDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<IDocumentInfo>;\n\n\n}\n\nexport interface IStoreManager {\n getProvider<T=never>(name?: string): IStoreProvider<T> | undefined;\n getProviderSafe<T=never>(name?: string): IStoreProvider<T>;\n\n getDefaultProvider<T=never>(): IStoreProvider<T> | undefined;\n\n getDefaultProviderSafe<T=never>(): IStoreProvider<T>;\n\n newStoreCriteria (name:string, value:any, operator: IStoreCriteriaOperator): IStoreCriteria;\n}\n","import { computed, inject, Injectable, Type } from '@angular/core';\nimport { XtContext } from '../xt-context';\nimport { XtRegistryResolver } from '../resolver/xt-registry-resolver';\nimport { XT_REGISTRY_TOKEN, XT_RESOLVER_TOKEN, XT_TYPE_RESOLVER_TOKEN } from './xt-tokens';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport {\n ManagedDataHandler,\n MappingHelper,\n XtSpecialFieldsHelper,\n XtTypeHandler,\n XtTypeInfo,\n xtTypeManager,\n XtTypeResolver,\n XtUpdatableTypeResolver\n} from 'xt-type';\nimport { XtComponentInfo, XtPluginInfo, XtTypeHandlerInfo } from '../plugin/xt-plugin-info';\nimport { XtResolver } from '../resolver/xt-resolver';\nimport { XtComponent } from '../xt-component';\nimport { loadRemoteModule } from '@angular-architects/native-federation';\nimport { XtAction } from '../action/xt-action';\nimport { XtActionHandler, XtActionResult } from '../action/xt-action-handler';\nimport { IStoreManager, StoreSupport } from '../store/store-support';\nimport { firstValueFrom, Observable } from 'rxjs';\n\n/**\n * An all in one helper class, enabling manipulation of the context, with data and type associated with it.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtResolverService {\n\n pluginRegistry = inject (XT_REGISTRY_TOKEN);\n\n protected baseResolver = inject (XT_RESOLVER_TOKEN, {optional:true});\n protected baseTypeResolver = inject (XT_TYPE_RESOLVER_TOKEN, {optional:true});\n\n resolver:XtResolver;\n typeResolver:XtTypeResolver;\n\n constructor() {\n if (this.baseTypeResolver==null) {\n this.typeResolver = xtTypeManager();\n } else this.typeResolver=this.baseTypeResolver;\n\n if (this.baseResolver==null) {\n this.resolver=new XtRegistryResolver (this.pluginRegistry, this.typeResolver);\n } else this.resolver=this.baseResolver;\n\n }\n\n findBestComponent<T> (baseContext: XtContext<T>, subName?:string) : XtResolvedComponent{\n const ret= this.resolver.resolve(baseContext, subName);\n if (ret!=null) return ret;\n else throw new Error (\"No components found for this context \"+ baseContext.toString());\n }\n\n findTypeOf<T> (baseContext:XtContext<T>, subName?:string, value?:T): string | null | undefined {\n const ret = this.typeResolver.findTypeName (baseContext.valueType, subName, value);\n return ret;\n }\n\n findTypeHandlerOf<T> (baseContext:XtContext<T>, subName?:string, value?:T): {typeName?:string | null, handler?:XtTypeHandler<any>} {\n let ret:{typeName?:string | null, handler?:XtTypeHandler<any>} = {typeName:undefined, handler:undefined};\n if (baseContext.isReference()){\n ret = this.typeResolver.findTypeHandler(baseContext.reference!.toType, false, undefined, value);\n }else {\n ret = this.typeResolver.findTypeHandler(baseContext.valueType, false, subName, value);\n }\n return ret;\n }\n\n listSubNamesOf<T> (baseContext:XtContext<T>, value?:T): string[] {\n return this.typeResolver.listSubNames(baseContext.valueType, value);\n }\n\n listSubNamesOfType<T> (valueType:string, value?:T): string[] {\n return this.typeResolver.listSubNames(valueType, value);\n }\n\n registerPlugin (info:XtPluginInfo) {\n this.pluginRegistry.registerPlugin (info);\n this.registerTypes (info.types, info.typeHandlers);\n }\n\n registerTypes (types:XtTypeInfo|undefined, handlers?:XtTypeHandlerInfo<any>[]): void {\n if ((types !=null) && (this.typeResolver.canUpdate())) {\n\n for (const newType in types) {\n let handler=this.handlerDefinedFor (newType, handlers);\n if (handler==null) {\n handler = new ManagedDataHandler();\n }\n (this.typeResolver as XtUpdatableTypeResolver).addRootType (newType, types[newType], handler);\n }\n }\n }\n\n\n /**\n * Calculates all the possible actions for a given context\n * @param context\n * @param onlyVisible\n */\n possibleActions<T> (context:XtContext<T>, onlyVisible:boolean=true): Array<XtAction<T>> {\n const existingActions = context.listActions();\n if (existingActions!=null) {\n return existingActions;\n }\n\n if (context.valueType!=null) {\n const actionInfos = this.pluginRegistry.listActionInfos<T>(context.valueType);\n const actions = actionInfos.map((info) => {\n const ret = new XtAction(info.name,info.info, true);\n return ret;\n });\n context.listActions.set(actions);\n return actions;\n }\n return [];\n }\n\n /**\n * Finds the possible action with the given name for the current type, and runs it in the current value.\n * If the action is not possible in this context, try a parent context\n * @param actionName\n */\n async runAction<T> (context: XtContext<T>, actionName:string, storeMgr?:any): Promise<XtActionResult<any>> {\n let handler: XtActionHandler<T> |null = null;\n for (const action of this.possibleActions(context,false)) {\n if (action.name==actionName) {\n const handlerClass=action.info.handlerClass;\n handler=new handlerClass ();\n break;\n }\n }\n\n if (handler!=null) {\n return handler.runAction(context, actionName, this, storeMgr);\n } else {\n // Couldn't find the handler, let's see if we can have that up the context chain\n if (context.parentContext!=null) {\n return this.runAction(context.parentContext, actionName); // Run the parent without any store indication, as it most probably is different\n } else {\n return Promise.reject(\"Cannot find action \"+actionName+\" for context \"+this.toString());\n }\n }\n }\n\n\n protected handlerDefinedFor(newType: string, handlers: XtTypeHandlerInfo<any>[] | undefined):any {\n for (const handler of handlers ?? []) {\n if (handler.typesHandled.includes(newType)) {\n return new handler.handlerClass ();\n }\n }\n return null;\n }\n\n getComponentInfo<T>(type: Type<XtComponent<T>>):XtResolvedComponent {\n return XtResolvedComponent.from(this.pluginRegistry.getComponentInfo (type));\n }\n\n findComponentInfo<T>(type: Type<XtComponent<T>>):XtResolvedComponent|null {\n const ret=this.pluginRegistry.findComponentInfo (type);\n if (ret==null) return null;\n else return XtResolvedComponent.from(ret);\n }\n\n public listComponents = computed<Array<XtComponentInfo<any>>>(() => {\n return this.pluginRegistry.listComponents();\n });\n\n public listPlugins = computed<Array<XtPluginInfo>>(() => {\n return this.pluginRegistry.listPlugins();\n });\n\n /**\n * Dynamically load a register a plugin from the given url\n * The plugin must export at least a Register entrypoint that will be called right after loading..\n * @param url\n * @returns a Promise with the module loaded and already registered.\n */\n loadPlugin (url:URL|string):Promise<any> {\n return loadRemoteModule({\n remoteEntry: url.toString(),\n exposedModule: './Register'\n }).then((module:any) => {\n const pluginName = module.registerPlugin(this);\n // Transform the configured Uris to real urls\n const pluginConfig=this.pluginRegistry.pluginRegistry.get(pluginName);\n if (pluginConfig?.uriLogo!=null) {\n let urlString = url.toString();\n const lastSlash = urlString.lastIndexOf('/');\n urlString = urlString.substring(0, lastSlash+1)+pluginConfig?.uriLogo;\n pluginConfig.uriLogo=urlString;\n }\n return module;\n });\n\n }\n\n /**\n * Based on the type & value of the element, find which property is on its type and returns it's value\n * @param context\n * @param subPropertyType\n * @param value\n */\n findSubPropertyWithType<T> (context: XtContext<T>, subPropertyType:string, value:T): any {\n const subKeys = this.typeResolver.findSubPropertiesWithType (context.valueType, subPropertyType);\n if ((subKeys!=null)&&(subKeys.length==1)) {\n return value[subKeys[0] as keyof T];\n } else if (subKeys.length>1) {\n // Let's pickup the first\n return value[subKeys[0] as keyof T];\n } else {\n return undefined;\n }\n }\n\n /**\n * Creates a duplicate of an object, using our knowledge on its type given by the context\n * @param context\n * @param value\n */\n safeDuplicate<T> (context: XtContext<T>, value:T): T {\n\n const typeHandler = this.typeResolver.findTypeHandler(context.valueType, false, undefined, value);\n\n if (typeHandler.handler!=null) {\n return typeHandler.handler.safeDuplicate (value);\n }\n return structuredClone(value);\n }\n\n resolveMappingOf<U, T> (context: XtContext<T>, targetType:string, value?:T): MappingHelper<U, T> | undefined {\n if (context.valueType!=null) {\n const typeHandler = this.typeResolver.findTypeHandler<T>(targetType, false, undefined, value);\n\n if (typeHandler.handler!=null) {\n const ret = typeHandler.handler.getOrCreateMappingFrom<U>(context.valueType, this.typeResolver);\n if( ret != null) {\n return ret;\n }\n }\n }\n return undefined;\n }\n\n async resolveReferencedValue<T,U> (context: XtContext<T>, storeMgr: IStoreManager): Promise<U | U[] | null | undefined> {\n if (!context.isReference()) return undefined;\n const ref= context.reference!;\n const storeProvider = storeMgr.getProvider<U> (ref.type);\n if (storeProvider == null) {\n throw new Error ('No Store provider found for type '+ref.type);\n }\n\n const ret= await firstValueFrom(storeProvider.searchEntities(ref.toType, storeMgr.newStoreCriteria(ref.field, context.value(),'=')));\n if (ret.length == 0) return null;\n if (ref.referenceType=='MANY-TO-ONE') {\n if (ret.length > 1) throw new Error('Multiple values for many to one relation between ' + context.valueType + ' and ' + ref.type + ' with value ' + context.value());\n return ret[0];\n } else if (ref.referenceType=='ONE-TO-MANY') {\n return ret;\n }\n return undefined;\n }\n\n resolvePendingReferences () {\n (this.typeResolver as XtUpdatableTypeResolver).resolveAllTypeReferences();\n }\n\n /**\n * Calculates the values that can be referenced by the reference & value of this context\n * @param context\n */\n findPossibleReferences<T, U> (context:XtContext<T>): Observable<U[]> {\n if (!context.isReference()) throw new Error('Cannot find possible references of this non reference context'+context.toString());\n const reference = context.reference!;\n const store =StoreSupport.getStoreManager().getProviderSafe<U>(reference.toType);\n return store.searchEntities(reference.toType );\n }\n\n/* async loadAllReferencesForContext<T> (context:XtContext<T>, storeMgr: IStoreManager): Promise<void> {\n const refs =this.typeResolver.listReferences(context.valueType);\n const promises:Promise<void>[]=[];\n for (const ref of Object.keys(refs)) {\n const subContext= context.subContext(ref, undefined, this.typeResolver);\n promises.push(this.resolveReferencedValue(subContext, storeMgr).then ((value) => {\n subContext.updateReferencedContext(value);\n }));\n }\n\n if( promises.length>0) {\n return Promise.all(promises).then((values) => {\n context.subReferencesResolved.set(true);\n return;\n });\n } else {\n return Promise.resolve().then (() => {\n context.subReferencesResolved.set(true);\n });\n }\n\n }\n*/\n\n}\n","import { OutputEmitterRef } from '@angular/core';\nimport { XtComponentOutput } from '../xt-component';\n\nexport class XtBaseOutput implements XtComponentOutput {\n valueSelected: OutputEmitterRef<any> | undefined;\n\n}\n","import {\n AfterViewInit,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n Signal,\n Type,\n viewChild\n} from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { XtComponent, XtComponentOutput, XtInputType, XtOutputType } from '../xt-component';\nimport { XtBaseContext, XtContext, XtDisplayMode } from '../xt-context';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\nimport { isTypeReference } from 'xt-type';\n\n/**\n * Offers a nice and easy to dynamically embed a component.\n * You set the type, the display mode, and either the value or the formgroup & subName to use.\n * XtRender will then instantiate the component, bind it to the value or form, and display it.\n */\n@Component({\n selector: 'xt-render',\n standalone: true,\n imports: [\n NgComponentOutlet,\n ReactiveFormsModule\n ],\n templateUrl: './xt-render.component.html',\n styleUrl: './xt-render.component.css'\n})\nexport class XtRenderComponent<T> implements AfterViewInit {\n resolverService = inject(XtResolverService);\n\n componentType = input<Type<XtComponent<T>>> ();\n displayMode = input.required<XtDisplayMode> ();\n valueType = input<string> ();\n\n // Either we set the value directly\n value= model<T> ();\n // Or we are inside a Form\n formGroup=input<FormGroup>();\n subName= input<string>();\n\n outputsObject = new XtBaseOutput();\n\n inputs = input<XtBaseInput>();\n outputs = output<XtComponentOutput>();\n\n outlet = viewChild.required(NgComponentOutlet);\n\n constructor() {\n\n }\n\n\n context: Signal<XtContext<any>> = computed(() => {\n let form = this.formGroup();\n\n const ret= new XtBaseContext<any>(this.displayMode(), this.subName(), form);\n ret.valueType=this.valueType();\n const typeInfo = this.resolverService.typeResolver.findType(ret.valueType);\n if( isTypeReference(typeInfo)) {\n ret.setReferenceInfo(typeInfo);\n }\n if (!ret.isInForm()) {\n const subName = this.subName();\n const value = this.value();\n if ( (subName == null) || (value == null)) {\n ret.setDisplayValue(value);\n } else {\n ret.setDisplayValue(value[subName as keyof typeof value]);\n }\n }\n return ret as XtContext<T>;\n });\n\n realContext = computed(() => {\n let ret = this.context();\n /*if ((ret.isReference())&& (ret.referencedContext!=null)) {\n ret = ret.referencedContext;\n }*/\n return ret;\n });\n\n\n type:Signal<Type<XtComponent<T>>|null> = computed( () => {\n //console.debug(\"Calculating type in XtRenderSubComponent\");\n\n let type=this.componentType();\n let compFound:XtResolvedComponent|null = null;\n if (type==null) {\n //console.debug('XtRender, using component set '+ type);\n //compFound = this.resolverService.findComponentInfo (type);\n //} else {\n compFound= this.resolverService.findBestComponent(this.realContext());\n //console.debug('XtRender, found component ',compFound.componentName);\n type= compFound.componentClass;\n }\n\n return type??null;\n });\n\n /**\n * Transfers the input and outputs from the host to the rendered component\n */\n ngAfterViewInit() {\n const instance=this.outlet().componentInstance as XtComponent;\n if (instance?.outputsObject!=null) {\n let hasOneOutput = false;\n for (const key of Object.keys(instance.outputsObject) as XtOutputType[] ) {\n this.outputsObject[key] = instance.outputsObject[key];\n hasOneOutput=true;\n }\n if (hasOneOutput) {\n this.outputs.emit(this.outputsObject);\n }\n }\n const inputs = this.inputs();\n if ((inputs!=null) && (instance?.inputsObject!=null)) {\n for (const key of Object.keys(inputs) as XtInputType[] ) {\n instance.inputsObject[key] = inputs[key];\n }\n\n }\n\n }\n\n}\n","<ng-container *ngComponentOutlet=\"type(); inputs: {context:context ()}\" />\n","import { AfterViewInit, Component, computed, inject, input, output, Signal, Type, viewChild } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { XtContext } from '../xt-context';\nimport { XtComponent, XtComponentInput, XtComponentOutput, XtInputType, XtOutputType } from '../xt-component';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtResolvedComponent } from '../xt-resolved-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\n\n/**\n * Dynamically render a component that will display the given subValue.\n * To be used only inside an XtSimpleComponent or XtCompositeComponent\n */\n@Component({\n selector: 'xt-render-sub',\n standalone: true,\n imports: [\n NgComponentOutlet,\n ReactiveFormsModule\n ],\n templateUrl: './xt-render-sub.component.html',\n styleUrl: './xt-render-sub.component.css'\n})\nexport class XtRenderSubComponent<T> implements AfterViewInit {\n context = input.required<XtContext<T>> ();\n componentType = input<Type<XtComponent<T>>> ();\n\n outputsObject = new XtBaseOutput();\n\n inputs = input<XtBaseInput>();\n outputs = output<XtComponentOutput>();\n\n outlet = viewChild.required(NgComponentOutlet);\n\n resolverService = inject(XtResolverService);\n\n realContext = computed(() => {\n let ret = this.context();\n /*if ((ret.isReference()) && (ret.referencedContext!=null)) {\n ret = ret.referencedContext;\n }*/\n return ret;\n });\n\n type:Signal<Type<XtComponent<T>>|null> = computed( () => {\n //console.debug(\"Calculating type in XtRenderSubComponent\");\n\n let type=this.componentType();\n let compFound:XtResolvedComponent|null = null;\n if (type==null) {\n //console.debug('XtRender, using component set '+ type);\n //compFound = this.resolverService.findComponentInfo (type);\n //} else {\n compFound= this.resolverService.findBestComponent(this.realContext());\n //console.debug('XtRender, found component ',compFound.componentName);\n type= compFound.componentClass;\n }\n\n return type??null;\n\n });\n\n /**\n * Transfers the input and outputs from the host to the rendered component\n */\n ngAfterViewInit() {\n const instance=this.outlet().componentInstance as XtComponent;\n if (instance?.outputsObject!=null) {\n let hasOneOutput = false;\n for (const key of Object.keys(instance.outputsObject) as XtOutputType[] ) {\n this.outputsObject[key] = instance.outputsObject[key];\n hasOneOutput=true;\n }\n if (hasOneOutput) {\n this.outputs.emit(this.outputsObject);\n }\n }\n const inputs = this.inputs();\n if ((inputs!=null) && (instance?.inputsObject!=null)) {\n for (const key of Object.keys(inputs) as XtInputType[] ) {\n instance.inputsObject[key] = inputs[key];\n }\n\n }\n\n\n }\n\n}\n","{{componentType()}}\n<ng-container *ngComponentOutlet=\"type(); inputs: {context:realContext ()}\" />\n","import { InputSignal } from '@angular/core';\nimport { XtComponentInput } from '../xt-component';\n\nexport class XtBaseInput implements XtComponentInput {\n valueSelected: InputSignal<any>|undefined;\n}\n","import { Component, computed, input, OnInit, output } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { XtContext } from '../xt-context';\nimport { XtComponent, XtComponentOutput } from '../xt-component';\nimport { XtBaseOutput } from '../output/xt-base-output';\nimport { XtBaseInput } from '../output/xt-base-input';\n\n/**\n * An XtSimpleComponent just displays the given value or element in a form.\n * If you need to dynamically embed other XtComponents to display sub elements, then please use the XtCompositeComponent\n */\n@Component({\n standalone: true,\n imports: [],\n template: ''\n})\nexport class XtSimpleComponent<T = any> implements XtComponent<T>, OnInit{\n context = input.required<XtContext<T>>();\n outputsObject = new XtBaseOutput();\n inputsObject = new XtBaseInput();\n outputs=output<XtComponentOutput>();\n\n isInForm = computed<boolean> ( () => {\n return this.context()?.isInForm()??false;\n });\n\n formControlNameIfAny = computed<string | undefined> (() => {\n return this.context()?.subName;\n });\n\n formGroupIfAny = computed<FormGroup | undefined> (() => {\n return this.context()?.formGroup();\n })\n\n formGroup = computed<FormGroup> (() => {\n const ret= this.context()?.formGroup();\n if (ret==null) throw new Error ('No form groups in this component of type '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Returns the component form name, which is for now the subName\n */\n componentNameInForm=computed<string> ( () => {\n return this.safelyGetSubName();\n });\n\n constructor() {\n }\n\n ngOnInit(): void {\n this.setupInputOutput();\n if (Object.keys(this.outputsObject).length > 0) {\n // At least one output has been defined\n this.outputs.emit(this.outputsObject);\n }\n }\n\n manageFormControl<T> (ctrlName:string, create:boolean=true): AbstractControl<T>|undefined {\n const formGroup = this.formGroupIfAny();\n if (formGroup==null) {\n // You can call manageFormControl even in not a form, it just get ignored\n //console.debug('FormGroup is undefined when declaring managedcontrol '+ctrlName);\n return undefined;\n } else {\n let ctrl=formGroup.get(ctrlName);\n if ((create) && (ctrl==null)) {\n ctrl = new FormControl<T|undefined>(undefined);\n formGroup.setControl(ctrlName, ctrl);\n }\n return ctrl??undefined;\n }\n }\n\n safelyGetSubName = computed<string>(() => {\n const ret = this.context()?.subName;\n if (ret==null) throw new Error ('This component has no name in the form '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Returns the form control name and create a form control behind the scene\n */\n formControlName = computed<string> (() => {\n const ret = this.safelyGetSubName();\n\n //this.manageFormControl<any>(ret); // Don't create anything at this point. It's a computed value.\n return ret;\n });\n\n formControl = computed<AbstractControl<any>> (() => {\n const subName = this.safelyGetSubName();\n const formControl= this.manageFormControl(subName, false);\n if (formControl==null) throw new Error (\"Calling formControl for subName \"+subName+\" when none exist.\");\n return formControl;\n});\n\n componentDescriptor (): string {\n return \"Component with type \"+this.constructor.name+\" with context \"+this.context().toString();\n }\n\n getValue= computed (()=> {\n return this.context().value();\n });\n\n displayValue = computed (() => {\n return this.context().displayValue();\n });\n\n /**\n * This is where components can assign their output() and input() into the XtComponent inputs and outputs member\n * @protected\n */\n protected setupInputOutput () {\n // Nothing to do here\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { XtSimpleComponent } from '../xt-simple/xt-simple.component';\nimport { FormGroup } from '@angular/forms';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { XtContext } from '../xt-context';\n\n@Component({\n standalone: true,\n imports: [],\n template: '',\n styleUrl: './xt-composite.component.css'\n})\nexport class XtCompositeComponent<T = any> extends XtSimpleComponent<T> {\n\n resolverService = inject(XtResolverService);\n\n override formGroupIfAny = computed<FormGroup | undefined> (() => {\n const context = this.context();\n if (context==null) return undefined;\n let ret= context.localFormGroup;\n if ((ret==null) && (context.parentFormGroup!=null) && (context.subName!=null)) {\n if (context.parentFormGroup.contains(context.subName)) {\n context.localFormGroup = context.parentFormGroup.get(context.subName) as FormGroup;\n } else {\n context.localFormGroup= new FormGroup ({});\n context.parentFormGroup.addControl(context.subName, context.localFormGroup);\n }\n ret=context.localFormGroup;\n }\n return ret;\n })\n\n /**\n * We need to create a new form group to manage the sub elements.\n */\n override formGroup = computed<FormGroup> (() => {\n const ret= this.formGroupIfAny();\n if (ret==null) throw new Error ('No form groups in this component of type '+this.componentDescriptor());\n return ret;\n });\n\n /**\n * Helper function to calculate the sub context\n * @param subName\n * @param subType\n */\n subContext (subName:string, subType?:string):XtContext<any> {\n this.formGroupIfAny(); // Ensure the context is properly initialized\n return this.context().subContext(subName, subType, this.resolverService.typeResolver);\n }\n\n}\n","import { Injectable } from \"@angular/core\";\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtMessageHandler {\n errorOccurred (error:any, errorMsg?:string) {\n console.error(errorMsg, error);\n }\n\n warningOccurred (warningMsg?:string) {\n console.warn(warningMsg);\n }\n\n}\n","import { FormControl, FormGroup } from '@angular/forms';\nimport { isPrimitive, isTypeReference, XtTypeHierarchy, XtTypeReference, XtTypeResolver } from 'xt-type';\n\nexport function attachToFormGroup(formGroup: FormGroup, controlName:string, value:any, valueType?:string, resolver?:XtTypeResolver) {\n // If it's a single value, just create the control\n if (((value!=null) && (isPrimitive(value))\n || (resolver?.isPrimitiveType(valueType)))) {\n const simpleControl = new FormControl(value);\n formGroup.addControl(controlName, simpleControl);\n } else {\n const complexGroup = new FormGroup({});\n updateFormGroupWithValue(complexGroup, value, valueType, resolver);\n formGroup.addControl(controlName, complexGroup);\n }\n}\n\nexport function updateFormGroupWithValue(formGroup: FormGroup, value:{[key:string]:any}, valueType?:string, resolver?:XtTypeResolver) {\n\n const toDelete = new Set<string>(Object.keys(formGroup.controls));\n // We merge the properties of the value if any, with the properties of the model\n const keySet = new Set<string>((value!=null)?Object.keys(value):null);\n if( ((valueType!=null) && (resolver!=null))) {\n const modelSubName = resolver.listSubNames(valueType, value);\n for (const sub of modelSubName) {\n keySet.add(sub);\n }\n }\n\n for (const valueKey of keySet) {\n const subValue=(value!=null)?value[valueKey]:null;\n const subType=resolver?.findType(valueType, valueKey, subValue)??undefined;\n const subTypeName = isTypeReference(subType) ? subType.toType : subType?.type;\n const primitive = (resolver!=null)?resolver?.isPrimitiveType(subType, subValue): isPrimitive(subValue);\n if (toDelete.delete(valueKey)) {\n // Already a control\n const oldControl = formGroup.get(valueKey)!;\n // Is it the right type ?\n if ((primitive) || (isTypeReference(subType))) {\n // Must be an FormControl2\n if ((oldControl as any).controls === undefined) {\n // It's ok, just set the value\n oldControl.setValue(value[valueKey]);\n } else {\n formGroup.setControl(valueKey, new FormControl(subValue));\n }\n } else {\n // Must be a FormGroup\n if ((oldControl as any).controls === undefined) {\n const newFormGroup = new FormGroup({});\n formGroup.setControl(valueKey, newFormGroup);\n updateFormGroupWithValue(newFormGroup, subValue, subTypeName, resolver);\n } else {\n // It was already a formgroup, so just update it\n updateFormGroupWithValue(oldControl as FormGroup, subValue, subTypeName, resolver);\n }\n }\n } else {\n if ((primitive) || (isTypeReference(subType))) {\n formGroup.addControl(valueKey, new FormControl(subValue));\n } else {\n const newFormGroup = new FormGroup({});\n formGroup.addControl(valueKey, newFormGroup);\n updateFormGroupWithValue(newFormGroup, subValue, subTypeName, resolver);\n }\n }\n }\n\n // Delete controls that are no more used\n for (const delName of toDelete) {\n formGroup.removeControl(delName);\n }\n}\n","import { XtResolverService } from '../angular/xt-resolver.service';\nimport { inject } from '@angular/core';\n\nexport class XtUnitTestHelper {\n/* public static registerComponent<T> (name:string, compClass:T, type:string){\n this.resolverService.pluginRegistry.registerComponent({\n componentName:name,\n componentClass: compClass,\n typesHandled: [type]\n });\n }\n*/\n}\n","import { Component, computed, inject, input, OnInit, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { XtRenderComponent } from '../render/xt-render.component';\nimport { XtComponent } from '../xt-component';\nimport { XtBaseContext, XtDisplayMode } from '../xt-context';\nimport { XtRenderSubComponent } from '../render/xt-render-sub.component';\nimport { XtResolverService } from '../angular/xt-resolver.service';\nimport { xtTypeManager } from 'xt-type';\nimport { updateFormGroupWithValue } from '../type/type-helper';\n/**\n * Component that can be used to bootstrap tests.\n * Just set the value and component type, and it will be injected in your test.\n */\n@Component({\n selector:'test-host',\n standalone:true,\n imports: [CommonModule, XtRenderComponent],\n template: '<h1>Test Simple Component</h1> <xt-render [componentType]=\"type()\" [displayMode]=\"displayMode()\" [value]=\"value()\" ></xt-render> '\n\n})\nexport class HostTestSimpleComponent {\n type = input.required<Type<XtComponent<any>>>();\n displayMode = input<XtDisplayMode> ('FULL_VIEW');\n value = input<any|undefined> (undefined);\n\n}\n\n/**\n * Same as HostTestSimpleComponent but it includes everything in a form.\n * Just set the component type, the formGroup and the component name, and your component will be run.\n * You can as well easily read and set the value.\n */\n@Component({\n selector:'test-form-host',\n standalone:true,\n imports: [CommonModule, XtRenderComponent, ReactiveFormsModule],\n template: '<h1>Test Form Component</h1> <form [formGroup]=\"computedFormGroup()\"> <xt-render [componentType]=\"type()\" displayMode=\"FULL_EDITABLE\" [subName]=\"controlName()\" [formGroup]=\"computedFormGroup()\"></xt-render></form>'\n})\nexport class HostTestFormComponent {\n builder = inject(FormBuilder);\n type = input.required<Type<XtComponent<any>>>();\n controlName = input.required<string>();\n // You can send the description to be used in a FormBuilder to create the formgroup;\n formDescription = input<any> ({ });\n // Or set the FormGroup directly\n formGroup= input<FormGroup>();\n\n// parentFormGroup = this.builder.group<{[keys:string]: AbstractControl}>({});\n createdFormGroup: FormGroup|null = null;\n\n computedFormGroup () {\n if( this.createdFormGroup==null) {\n const formGroup=this.formGroup();\n this.createdFormGroup=formGroup??generateFormGroup(this.formDescription());\n }\n // this.parentFormGroup.addControl(this.controlName()??HostTestTypedFormComponent.CONTROL_NAME, this.createdFormGroup);\n return this.createdFormGroup;\n }\n\n patchValue (newVal:any) {\n const patch:{[key:string]:any}={};\n patch[this.controlName()]=newVal;\n if (this.createdFormGroup!=null)\n this.createdFormGroup.patchValue(patch);\n else throw new Error (\"FormGroup not yet created. Did you set formGroup or formDescription property ?\");\n }\n\n retrieveValue (): any {\n if (this.createdFormGroup!=null)\n return this.createdFormGroup.value[this.controlName()];\n else throw new Error (\"FormGroup not yet created. Did you set formGroup or formDescription property ?\");\n }\n}\n\n/**\n * Component that can be used to test your component based on the type it handles\n * Just set the type hierarchy to register, the value, and it will instantiate the right component in your plugin\n */\n@Component({\n selector:'test-typed-host',\n standalone:true,\n imports: [CommonModule, XtRenderSubComponent],\n template: '<h1>Test Typed Component</h1> <xt-render-sub [context]=\"context()\" ></xt-render-sub> '\n\n})\nexport class HostTestTypedComponent {\n\n displayMode = input<XtDisplayMode> ('FULL_VIEW');\n value = input<any> ();\n valueType = input<string> ();\n\n context = computed( () => {\n const ret = new XtBaseContext(this.displayMode());\n\n ret.valueType=this.valueType();\n ret.setDisplayValue(this.value());\n return ret;\n });\n}\n\n/**\n * Same as HostTestSimpleComponent but it includes everything in a form.\n * Just set the component type, the formGroup and the component name, and your component will be run.\n * You can as well easily read and set the value.\n */\n@Component({\n selector:'test-typed-form-host',\n standalone:true,\n imports: [CommonModule, ReactiveFormsModule, XtRenderSubComponent],\n template: '<h1>Test Typed Form Component</h1> <form [formGroup]=\"parentFormGroup\"> <xt-render-sub [context]=\"subContext()\"></xt-render-sub></form>'\n})\nexport class HostTestTypedFormComponent implements OnInit{\n builder = inject(FormBuilder);\n resolver = inject(XtResolverService);\n\n static readonly CONTROL_NAME='ForTest';\n\n valueType = input<string> ();\n controlName = input<string>();\n // You can send the description to be used in a FormBuilder to create the formgroup;\n formDescription = input<any> (null);\n // Or set the FormGroup directly\n formGroup= input<FormGroup>();\n\n parentFormGroup = this.builder.group<{[keys:string]: AbstractControl}>({});\n\n createdFormGroup: FormGroup|null = null;\n\n ngOnInit(): void {\n this.computeFormGroup();\n }\n\n computeFormGroup () {\n if( this.createdFormGroup==null) {\n const formGroup=this.formGroup();\n if( this.formDescription()!=null) {\n this.createdFormGroup=formGroup??generateFormGroup(this.formDescription());\n } else {\n this.createdFormGroup=this.builder.group({});\n if (this.valueType()!=null) {\n updateFormGroupWithValue(this.createdFormGroup, {}, this.valueType(), this.resolver.typeResolver);\n }\n }\n this.parentFormGroup.addControl(this.controlName()??HostTestTypedFormComponent.CONTROL_NAME, this.createdFormGroup);\n }\n return this.createdFormGroup;\n };\n\n subContext () {\n this.computeFormGroup(); // Make sure the subformgroups are created\n\n const ctrlName = this.controlName();\n let ret:XtBaseContext<any>|null = null;\n if (ctrlName==null){\n ret = new XtBaseContext('FULL_EDITABLE', HostTestTypedFormComponent.CONTROL_NAME, this.parentFormGroup);\n }\n else{\n ret = new XtBaseContext('FULL_EDITABLE', ctrlName, this.createdFormGroup!);\n }\n ret.valueType=this.valueType();\n\n return ret;\n };\n\n patchValue (controlName:string, newVal:any) {\n const patch:{[key:string]:any}={};\n patch[controlName]=newVal;\n this.computeFormGroup().patchValue(patch);\n }\n\n retrieveValue (controlName:string): any {\n return this.computeFormGroup().value[controlName];\n }\n\n}\n\nfunction generateFormGroup(formDescription: any):FormGroup {\n if (typeof formDescription != 'object') {\n throw new Error ('Form Description should be an object of values');\n }\n return generateFormControl(formDescription) as FormGroup;\n}\n\nfunction generateFormControl(formDescription: any): AbstractControl {\n\n if (formDescription==null) {\n return new FormControl(formDescription);\n }\n\n if (Array.isArray(formDescription)){\n const retArray = new FormArray<AbstractControl>([]);\n for (const val of formDescription) {\n retArray.push(generateFormControl(val), {emitEvent:false});\n }\n return retArray;\n }\n\n if ((typeof formDescription=='object')&&(!(formDescription instanceof Date))) {\n const retObject=new FormGroup({});\n for (const key of Object.keys(formDescription)) {\n retObject.addControl(key, generateFormControl(formDescription[key]));\n }\n return retObject;\n }\n return new FormControl(formDescription);\n}\n","/*\n * Public API Surface of xt-components\n */\n\nexport * from './lib/xt-component';\nexport * from './lib/xt-context';\nexport * from './lib/xt-resolved-component';\nexport * from './lib/resolver/xt-resolver';\nexport * from './lib/registry/xt-plugin-registry'\nexport * from './lib/plugin/xt-plugin-info'\nexport * from './lib/action/xt-action-handler';\nexport * from './globals';\n\nexport * from './lib/angular/xt-tokens';\nexport * from './lib/angular/xt-resolver.service';\n\nexport * from './lib/render/xt-render.component';\nexport * from './lib/render/xt-render-sub.component';\nexport * from './lib/xt-simple/xt-simple.component';\nexport * from './lib/xt-composite/xt-composite.component';\n\nexport * from './lib/angular/xt-message-handler.service';\nexport * from './lib/store/store-support';\nexport * from './lib/type/type-helper';\nexport * from './lib/test/xt-unit-test-helper';\nexport * from './lib/test/xt-test-helper-components';\nexport * from './lib/test/store-test-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xt-components",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "repository": {
5
5
  "url": "https://github.com/dont-code/ng-xtend.git"
6
6
  },
@@ -13,6 +13,7 @@
13
13
  "@angular/platform-browser": "^20.2.3",
14
14
  "@angular/platform-browser-dynamic": "^20.2.3",
15
15
  "@angular/router": "^20.2.3",
16
+ "xt-type": "^0.9.0",
16
17
  "rxjs": "~7.8.2",
17
18
  "primeng": "^20.0.1",
18
19
  "primeicons": "^7.0.0"