{"version":3,"file":"oktoflow-transex.mjs","sources":["../../../projects/transex/src/lib/interfaces/core/expression.interfaces.ts","../../../projects/transex/src/lib/interfaces/shared.interfaces.ts","../../../projects/transex/src/lib/components/expression-editor/expression-header/expression-header.component.ts","../../../projects/transex/src/lib/components/expression-editor/expression-header/expression-header.component.html","../../../projects/transex/src/lib/components/expression-editor/division-toggle/division-toggle.component.ts","../../../projects/transex/src/lib/components/expression-editor/division-toggle/division-toggle.component.html","../../../projects/transex/src/lib/components/expression-editor/expression-textarea/expression-textarea.component.ts","../../../projects/transex/src/lib/components/expression-editor/expression-textarea/expression-textarea.component.html","../../../projects/transex/src/lib/components/expression-editor/custom-function-builder/custom-function-builder.component.ts","../../../projects/transex/src/lib/components/expression-editor/custom-function-builder/custom-function-builder.component.html","../../../projects/transex/src/lib/components/expression-editor/expression-controls/expression-controls.component.ts","../../../projects/transex/src/lib/components/expression-editor/expression-controls/expression-controls.component.html","../../../projects/transex/src/lib/components/expression-editor/expression-info/expression-info.component.ts","../../../projects/transex/src/lib/components/expression-editor/expression-info/expression-info.component.html","../../../projects/transex/src/lib/services/extension-manager/extension-manager.service.ts","../../../projects/transex/src/lib/components/expression-editor/functions-menu/functions-menu.component.ts","../../../projects/transex/src/lib/components/expression-editor/functions-menu/functions-menu.component.html","../../../projects/transex/src/lib/components/expression-editor/symbol-picker/symbol-picker.component.ts","../../../projects/transex/src/lib/components/expression-editor/symbol-picker/symbol-picker.component.html","../../../projects/transex/src/lib/components/expression-editor/variable-manager/variable-manager.component.ts","../../../projects/transex/src/lib/components/expression-editor/variable-manager/variable-manager.component.html","../../../projects/transex/src/lib/data/function-categories.data.ts","../../../projects/transex/src/lib/data/default-variables.data.ts","../../../projects/transex/src/lib/services/variable-manager/variable-manager.service.ts","../../../projects/transex/src/lib/services/expression-pattern/expression-pattern.service.ts","../../../projects/transex/src/lib/services/type-analyzer/type-analyzer.service.ts","../../../projects/transex/src/lib/services/validation/validation.service.ts","../../../projects/transex/src/lib/services/tokenizer/tokenizer.service.ts","../../../projects/transex/src/lib/services/binary-tree-parser/binary-tree-parser.service.ts","../../../projects/transex/src/lib/services/configuration/configuration.service.ts","../../../projects/transex/src/lib/services/expression-evaluator/expression-evaluator.service.ts","../../../projects/transex/src/lib/components/expression-editor/expression-editor.component.ts","../../../projects/transex/src/lib/components/expression-editor/expression-editor.component.html","../../../projects/transex/src/public-api.ts","../../../projects/transex/src/oktoflow-transex.ts"],"sourcesContent":["export enum DataType {\r\n    BOOLEAN = 'Boolean',\r\n    INTEGER = 'Integer', \r\n    REAL = 'Real',\r\n    STRING = 'String',\r\n    ASSIGNMENT = 'Assignment',\r\n    FUNCTION = 'Function',\r\n    ANY = 'Any'  // Add this line\r\n}\r\n  \r\n  export enum ContextType {\r\n    BOOLEAN = 'boolean',\r\n    ASSIGNMENT = 'assignment', \r\n    ARITHMETIC = 'arithmetic',\r\n    LIMITED_CONNECTOR = 'limited_connector', \r\n    GENERAL = 'general'\r\n  }\r\n  \r\n  export interface Variable {\r\n    name: string;\r\n    value: any;\r\n    type: DataType;\r\n    explanation: string;\r\n    example?: string;\r\n  }\r\n  \r\n  export interface FunctionCategory {\r\n    name: string;\r\n    label: string;\r\n    functions: FunctionItem[];\r\n  }\r\n  \r\n  export interface FunctionItem {\r\n    name: string;\r\n    syntax: string;\r\n    description: string;\r\n    example?: string;\r\n    category: string;\r\n  }\r\n  \r\n  export interface SymbolCategory {\r\n    name: string;\r\n    label: string;\r\n    symbols: SymbolItem[];\r\n  }\r\n  \r\n  export interface SymbolItem {\r\n    name: string;\r\n    symbol: string;\r\n    description: string;\r\n    category: string;\r\n  }\r\n  \r\n  export interface ExpressionTypeResult {\r\n    success: boolean;\r\n    returnType?: DataType;\r\n    error?: string;\r\n    typeValidation?: any; // Import will be resolved\r\n    usedVariables?: Variable[];\r\n    isLambdaExpression?: boolean;\r\n  }\r\n  \r\n  export interface EvaluationResult {\r\n    success: boolean;\r\n    result?: any;\r\n    type?: string;\r\n    error?: string;\r\n    typeValidation?: any; // Import will be resolved\r\n  }\r\n  \r\n  export interface EvaluationResultEnhanced extends EvaluationResult {\r\n    usedVariables?: Variable[];\r\n    isLambdaExpression?: boolean;\r\n  }\r\n  ","// Core interfaces\r\nexport * from './core/expression.interfaces';\r\nexport * from './core/validation.interfaces';\r\nexport * from './core/extensibility.interfaces';\r\n\r\n// UI interfaces  \r\nexport * from './ui/style-config.interfaces';\r\nexport * from './ui/editor-config.interfaces';\r\n\r\n// Tree interfaces\r\nexport * from './tree/binary-tree.interfaces';","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExpressionEditorConfig, ContextType } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-expression-header',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './expression-header.component.html',\r\n  styleUrls: ['./expression-header.component.css']\r\n})\r\nexport class ExpressionHeaderComponent {\r\n  @Input() editorConfig?: ExpressionEditorConfig;\r\n\r\n  ContextType = ContextType;\r\n\r\n  getContextDescription(): string {\r\n    if (!this.editorConfig) return '';\r\n    \r\n    switch (this.editorConfig.contextType) {\r\n      case ContextType.BOOLEAN:\r\n        return 'Boolean expressions for conditions and state machines';\r\n      case ContextType.ASSIGNMENT:\r\n        return 'Assignment expressions for data mapping and transformations';\r\n      case ContextType.LIMITED_CONNECTOR:\r\n        return 'Arithmetic expressions with limited operations (+, -, *, optionally /)';\r\n      case ContextType.ARITHMETIC:\r\n        return 'Mathematical expressions returning numeric values';\r\n      case ContextType.GENERAL:\r\n        return 'Flexible expression editor without specific validation';\r\n      default:\r\n        return '';\r\n    }\r\n  }\r\n}\r\n","<div class=\"header-section\">\r\n  <h3 class=\"editor-title\">{{ editorConfig?.title || 'Expression Editor' }}</h3>\r\n  <p class=\"editor-description\">{{ getContextDescription() }}</p>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ExpressionEditorConfig, ContextType } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-division-toggle',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './division-toggle.component.html',\r\n  styleUrls: ['./division-toggle.component.css']\r\n})\r\nexport class DivisionToggleComponent {\r\n  @Input() editorConfig?: ExpressionEditorConfig;\r\n  @Output() configChange = new EventEmitter<ExpressionEditorConfig>();\r\n\r\n  ContextType = ContextType;\r\n\r\n  isLimitedConnectorContext(): boolean {\r\n    return this.editorConfig?.contextType === ContextType.LIMITED_CONNECTOR;\r\n  }\r\n\r\n  toggleDivision() {\r\n    if (this.editorConfig && this.editorConfig.contextType === ContextType.LIMITED_CONNECTOR) {\r\n      const newConfig = {\r\n        ...this.editorConfig,\r\n        allowDivision: !this.editorConfig.allowDivision\r\n      };\r\n      this.configChange.emit(newConfig);\r\n    }\r\n  }\r\n}\r\n","<div *ngIf=\"isLimitedConnectorContext()\" class=\"division-toggle-section\">\r\n  <div class=\"toggle-container\">\r\n    <label class=\"toggle-label\">\r\n      <input \r\n        type=\"checkbox\" \r\n        [checked]=\"editorConfig?.allowDivision === true\"\r\n        (change)=\"toggleDivision()\"\r\n        class=\"toggle-checkbox\">\r\n      <span class=\"toggle-text\">Allow Division (/) Operation</span>\r\n    </label>\r\n    <div class=\"toggle-status\" [class.enabled]=\"editorConfig?.allowDivision === true\" [class.disabled]=\"editorConfig?.allowDivision !== true\">\r\n      {{ (editorConfig?.allowDivision === true) ? 'Division Enabled' : 'Division Disabled' }}\r\n    </div>\r\n  </div>\r\n  <div class=\"allowed-operations\">\r\n    <strong>Allowed operations:</strong> \r\n    <span class=\"operations\">+ - * {{ (editorConfig?.allowDivision === true) ? '/' : '' }}</span>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewChild, ElementRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ExpressionEditorConfig, TypeValidationResult } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-expression-textarea',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './expression-textarea.component.html',\r\n  styleUrls: ['./expression-textarea.component.css'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => ExpressionTextareaComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class ExpressionTextareaComponent implements ControlValueAccessor {\r\n  @Input() disabled = false;\r\n  @Input() editorConfig?: ExpressionEditorConfig;\r\n  @Input() currentValidation: TypeValidationResult | null = null;\r\n  @Output() valueChange = new EventEmitter<string>();\r\n  \r\n  @ViewChild('expressionTextarea') expressionTextarea!: ElementRef<HTMLTextAreaElement>;\r\n\r\n  value = '';\r\n  \r\n  private onChange = (value: string) => {};\r\n  private onTouched = () => {};\r\n\r\n  onInput(event: any) {\r\n    this.value = event.target.value;\r\n    this.onChange(this.value);\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n\r\n  getPlaceholder(): string {\r\n    return 'Enter your expression here...';\r\n  }\r\n\r\n  insertTextAtCursor(text: string) {\r\n    if (!this.expressionTextarea?.nativeElement) {\r\n      this.value = (this.value || '') + text;\r\n      this.onChange(this.value);\r\n      this.valueChange.emit(this.value);\r\n      return;\r\n    }\r\n\r\n    const textarea = this.expressionTextarea.nativeElement;\r\n    const startPos = textarea.selectionStart;\r\n    const endPos = textarea.selectionEnd;\r\n    \r\n    this.value = this.value.substring(0, startPos) + text + this.value.substring(endPos);\r\n    this.onChange(this.value);\r\n    this.valueChange.emit(this.value);\r\n    \r\n    setTimeout(() => {\r\n      textarea.focus();\r\n      if (textarea.setSelectionRange && typeof textarea.setSelectionRange === 'function') {\r\n        textarea.setSelectionRange(startPos + text.length, startPos + text.length);\r\n      }\r\n    });\r\n  }\r\n\r\n  writeValue(value: string | null): void {\r\n    this.value = value || '';\r\n  }\r\n\r\n  registerOnChange(fn: (value: string) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n}\r\n","<div class=\"textarea-container\">\r\n  <textarea\r\n    #expressionTextarea\r\n    class=\"expression-textarea\"\r\n    [class.valid]=\"currentValidation && currentValidation.isValid\"\r\n    [class.invalid]=\"currentValidation && !currentValidation.isValid\"\r\n    [(ngModel)]=\"value\"\r\n    (input)=\"onInput($event)\"\r\n    [placeholder]=\"getPlaceholder()\"\r\n    [disabled]=\"disabled\"\r\n    rows=\"3\"\r\n  ></textarea>\r\n  \r\n  <div *ngIf=\"currentValidation\" class=\"validation-display\" \r\n       [class.validation-success]=\"currentValidation.isValid\"\r\n       [class.validation-error]=\"!currentValidation.isValid\">\r\n    <span class=\"validation-icon\">{{ currentValidation.isValid ? '✓' : '⚠' }}</span>\r\n    <span class=\"validation-message\">{{ currentValidation.message }}</span>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { CustomFunction } from '../../../interfaces/core/extensibility.interfaces';\n\n@Component({\n  selector: 'lib-custom-function-builder',\n  standalone: true,\n  imports: [CommonModule, FormsModule],\n  templateUrl: './custom-function-builder.component.html',\n  styleUrls: ['./custom-function-builder.component.css']\n})\nexport class CustomFunctionBuilderComponent {\n  @Input() isVisible = false;\n  @Output() functionCreated = new EventEmitter<CustomFunction>();\n  @Output() closeModal = new EventEmitter<void>();\n\n  newFunction: CustomFunction = {\n    name: '',\n    syntax: '',\n    description: '',\n    example: '',\n    category: 'custom'\n  };\n\n  // Validation methods\n  isValidFunctionName(): boolean {\n    const name = this.newFunction.name?.trim() || '';\n    return name.length > 0 && /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);\n  }\n\n  isValidFunctionSyntax(): boolean {\n    const syntax = this.newFunction.syntax?.trim() || '';\n    return syntax.length > 0;\n  }\n\n  isValidFunctionDescription(): boolean {\n    const description = this.newFunction.description?.trim() || '';\n    return description.length > 0;\n  }\n\n  isFormValid(): boolean {\n    return this.isValidFunctionName() && \n           this.isValidFunctionSyntax() && \n           this.isValidFunctionDescription();\n  }\n\n  // add () after FN name\n  onFunctionNameChange(): void {\n    if (this.newFunction.name) {\n      this.newFunction.syntax = `${this.newFunction.name}()`;\n    }\n  }\n\n  closeBuilder(): void {\n    this.closeModal.emit();\n    this.resetForm();\n  }\n\n  createFunction(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n\n    const customFunction: CustomFunction = {\n      name: this.newFunction.name!,\n      syntax: this.newFunction.syntax!,\n      description: this.newFunction.description!,\n      example: this.newFunction.example || '',\n      category: this.newFunction.category || 'custom',\n    };\n\n    this.functionCreated.emit(customFunction);\n    this.resetForm();\n  }\n\n  private resetForm(): void {\n    this.newFunction = {\n      name: '',\n      syntax: '',\n      description: '',\n      example: '',\n      category: 'custom'\n    };\n  }\n}\n","<div class=\"custom-function-overlay\" *ngIf=\"isVisible\" (click)=\"closeBuilder()\">\n  <div class=\"custom-function-dialog\" (click)=\"$event.stopPropagation()\">\n    <div class=\"dialog-header\">\n      <h3>Create Custom Function</h3>\n      <button class=\"close-btn\" (click)=\"closeBuilder()\">×</button>\n    </div>\n    \n    <div class=\"dialog-content\">\n      <form (ngSubmit)=\"createFunction()\" #functionForm=\"ngForm\">\n        <div class=\"form-group\">\n          <label for=\"functionName\">Function Name:</label>\n          <input\n            type=\"text\"\n            id=\"functionName\"\n            name=\"functionName\"\n            [(ngModel)]=\"newFunction.name\"\n            required\n            class=\"form-control\"\n            placeholder=\"e.g., square\"\n          />\n        </div>\n        \n        <div class=\"form-group\">\n          <label for=\"functionSyntax\">Syntax:</label>\n          <input\n            type=\"text\"\n            id=\"functionSyntax\"\n            name=\"functionSyntax\"\n            [(ngModel)]=\"newFunction.syntax\"\n            required\n            class=\"form-control\"\n            placeholder=\"e.g., square(x)\"\n          />\n        </div>\n        \n        <div class=\"form-group\">\n          <label for=\"functionDescription\">Description:</label>\n          <textarea\n            id=\"functionDescription\"\n            name=\"functionDescription\"\n            [(ngModel)]=\"newFunction.description\"\n            required\n            class=\"form-control\"\n            rows=\"2\"\n            placeholder=\"Returns the square of a number\"\n          ></textarea>\n        </div>\n        \n        <div class=\"form-group\">\n          <label for=\"functionExample\">Example (optional):</label>\n          <input\n            type=\"text\"\n            id=\"functionExample\"\n            name=\"functionExample\"\n            [(ngModel)]=\"newFunction.example\"\n            class=\"form-control\"\n            placeholder=\"square(5) = 25\"\n          />\n        </div>\n        \n        <div class=\"form-group\">\n          <label for=\"functionCategory\">Category:</label>\n          <select\n            id=\"functionCategory\"\n            name=\"functionCategory\"\n            [(ngModel)]=\"newFunction.category\"\n            class=\"form-control\"\n          >\n            <option value=\"custom\">Custom</option>\n          </select>\n        </div>\n        \n        <div class=\"form-actions\">\n          <button type=\"button\" (click)=\"closeBuilder()\" class=\"btn btn-secondary\">\n            Cancel\n          </button>\n          <button type=\"submit\" [disabled]=\"!functionForm.valid\" class=\"btn btn-primary\">\n            Create Function\n          </button>\n        </div>\n      </form>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CustomFunctionBuilderComponent } from '../custom-function-builder/custom-function-builder.component';\r\nimport { CustomFunction } from '../../../interfaces/core/extensibility.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-expression-controls',\r\n  standalone: true,\r\n  imports: [CommonModule, CustomFunctionBuilderComponent],\r\n  templateUrl: './expression-controls.component.html',\r\n  styleUrls: ['./expression-controls.component.css']\r\n})\r\nexport class ExpressionControlsComponent {\r\n  @Input() disabled = false;\r\n  @Input() showCustomFunctionBuilder = false;\r\n  @Input() hasVariables = false;\r\n  \r\n  @Output() toggleEditor = new EventEmitter<void>();\r\n  @Output() clearExpression = new EventEmitter<void>();\r\n  @Output() openFunctionsMenu = new EventEmitter<void>();\r\n  @Output() openSymbolPicker = new EventEmitter<void>();\r\n  @Output() openCustomFunctionBuilder = new EventEmitter<void>();\r\n  @Output() closeCustomFunctionBuilder = new EventEmitter<void>();\r\n  @Output() customFunctionCreated = new EventEmitter<CustomFunction>();\r\n  @Output() openVariableManager = new EventEmitter<void>();\r\n\r\n  onToggleEditor() {\r\n    this.toggleEditor.emit();\r\n  }\r\n\r\n  onClearExpression() {\r\n    this.clearExpression.emit();\r\n  }\r\n\r\n  onOpenFunctionsMenu() {\r\n    this.openFunctionsMenu.emit();\r\n  }\r\n\r\n  onOpenSymbolPicker() {\r\n    this.openSymbolPicker.emit();\r\n  }\r\n\r\n  onOpenCustomFunctionBuilder() {\r\n    this.openCustomFunctionBuilder.emit();\r\n  }\r\n\r\n  onCloseCustomFunctionBuilder() {\r\n    this.closeCustomFunctionBuilder.emit();\r\n  }\r\n\r\n  onCustomFunctionCreated(customFunction: CustomFunction) {\r\n    this.customFunctionCreated.emit(customFunction);\r\n  }\r\n\r\n  onOpenVariableManager() {\r\n    this.openVariableManager.emit();\r\n  }\r\n}\r\n","<div class=\"controls-row\">\r\n  <button\r\n    (click)=\"onToggleEditor()\"\r\n    [class]=\"'btn-toggle ' + (disabled ? 'btn-enable' : 'btn-disable')\"\r\n  >\r\n    {{ disabled ? \"Enable\" : \"Disable\" }} Editor\r\n  </button>\r\n  <button \r\n    (click)=\"onClearExpression()\" \r\n    class=\"btn\"\r\n    [disabled]=\"disabled\">\r\n    Clear Expression\r\n  </button>\r\n  <button \r\n    (click)=\"onOpenFunctionsMenu()\" \r\n    class=\"btn btn-functions\"\r\n    [disabled]=\"disabled\">\r\n    📋 Functions Menu\r\n  </button>\r\n  <button \r\n    (click)=\"onOpenSymbolPicker()\" \r\n    class=\"btn btn-symbols\"\r\n    [disabled]=\"disabled\">\r\n    🔣 Symbol Picker\r\n  </button>\r\n\r\n  \r\n  <button \r\n    *ngIf=\"hasVariables\"\r\n    (click)=\"onOpenVariableManager()\" \r\n    class=\"btn btn-variables\"\r\n    [disabled]=\"disabled\">\r\n    🧮 Variables\r\n  </button>\r\n\r\n \r\n  <div class=\"custom-function-inline\">\r\n    <lib-custom-function-builder\r\n      [isVisible]=\"showCustomFunctionBuilder\"\r\n      (functionCreated)=\"onCustomFunctionCreated($event)\"\r\n      (closeModal)=\"onCloseCustomFunctionBuilder()\"\r\n    >\r\n    </lib-custom-function-builder>\r\n    <button \r\n      (click)=\"onOpenCustomFunctionBuilder()\" \r\n      class=\"btn btn-custom\"\r\n      [disabled]=\"disabled\">\r\n      ⚙️ Create Function\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExpressionTypeResult, DataType, TypeValidationResult } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-expression-info',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './expression-info.component.html',\r\n  styleUrls: ['./expression-info.component.css']\r\n})\r\nexport class ExpressionInfoComponent {\r\n  @Input() value = '';\r\n  @Input() typeResult: ExpressionTypeResult | null = null;\r\n  @Input() currentValidation: TypeValidationResult | null = null;\r\n\r\n  getReturnTypeDisplay(): string {\r\n    if (!this.typeResult?.success || !this.typeResult.returnType) return '';\r\n    \r\n    switch (this.typeResult.returnType) {\r\n      case DataType.INTEGER:\r\n        return 'Integer';\r\n      case DataType.REAL:\r\n        return 'Real';\r\n      case DataType.BOOLEAN:\r\n        return 'Boolean';\r\n      case DataType.STRING:\r\n        return 'String';\r\n      case DataType.ASSIGNMENT:\r\n        return 'Assignment';\r\n      case DataType.FUNCTION:\r\n        return 'Function';\r\n      default:\r\n        return this.typeResult.returnType;\r\n    }\r\n  }\r\n\r\n  shouldShowTypeInfo(): boolean {\r\n    return this.typeResult?.success === true && \r\n           (this.currentValidation === null || this.currentValidation?.isValid === true);\r\n  }\r\n}\r\n","<div class=\"info-section\">\r\n  <p>\r\n    <strong>Current Value:</strong> {{ value || \"No expression entered\" }}\r\n  </p>\r\n\r\n  <div *ngIf=\"shouldShowTypeInfo()\" class=\"type-info\">\r\n    <p>\r\n      <strong>Return Type:</strong>\r\n      <span class=\"result-type\">{{ getReturnTypeDisplay() }}</span>\r\n    </p>\r\n  </div>\r\n\r\n  <div *ngIf=\"typeResult && !typeResult.success\" class=\"error-info\">\r\n    <p>\r\n      <strong>Error:</strong>\r\n      <span class=\"error-message\">{{ typeResult.error }}</span>\r\n    </p>\r\n  </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { CustomFunction } from '../../interfaces/core/extensibility.interfaces';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ExtensionManagerService {\r\n  private customFunctions: CustomFunction[] = [];\r\n\r\n  constructor() { }\r\n\r\n  getCustomFunctions(): CustomFunction[] {\r\n    return [...this.customFunctions];\r\n  }\r\n\r\n  registerCustomFunction(customFunction: CustomFunction): void {\r\n    this.customFunctions.push(customFunction);\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FunctionCategory, FunctionItem } from '../../../interfaces/shared.interfaces';\r\nimport { ExtensionManagerService } from '../../../services/extension-manager/extension-manager.service';\r\n\r\n@Component({\r\n  selector: 'lib-functions-menu',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './functions-menu.component.html',\r\n  styleUrls: ['./functions-menu.component.css']\r\n})\r\nexport class FunctionsMenuComponent {\r\n  @Input() showFunctionsMenu = false;\r\n  @Input() functionCategories: FunctionCategory[] = [];\r\n  @Input() selectedFunctionCategory = 'arithmetic';\r\n  @Input() selectedFunction: FunctionItem | null = null;\r\n  \r\n  @Output() closeFunctionsMenu = new EventEmitter<void>();\r\n  @Output() functionCategorySelected = new EventEmitter<string>();\r\n  @Output() functionSelected = new EventEmitter<FunctionItem>();\r\n  @Output() functionInserted = new EventEmitter<FunctionItem>();\r\n\r\n  constructor(private extensionManager: ExtensionManagerService) {}\r\n\r\n  onCloseFunctionsMenu() {\r\n    this.closeFunctionsMenu.emit();\r\n  }\r\n\r\n  onSelectFunctionCategory(category: string) {\r\n    this.functionCategorySelected.emit(category);\r\n  }\r\n\r\n  onSelectFunction(func: FunctionItem) {\r\n    this.functionSelected.emit(func);\r\n  }\r\n\r\n  onInsertFunction(func: FunctionItem) {\r\n    this.functionInserted.emit(func);\r\n  }\r\n\r\n  getSelectedCategoryFunctions(): FunctionItem[] {\r\n    const category = this.functionCategories.find(c => c.name === this.selectedFunctionCategory);\r\n    let functions = category ? category.functions : [];\r\n    \r\n    if (this.selectedFunctionCategory === 'custom') {\r\n      const customFunctions = this.extensionManager.getCustomFunctions();\r\n      const customFunctionItems: FunctionItem[] = customFunctions.map(cf => ({\r\n        name: cf.name,\r\n        syntax: cf.syntax,\r\n        description: cf.description,\r\n        example: cf.example || '',\r\n        category: 'custom'\r\n      }));\r\n      functions = [...customFunctionItems];\r\n    }\r\n    \r\n    return functions;\r\n  }\r\n}\r\n","<!-- Functions Menu Modal -->\r\n<div\r\n  class=\"functions-menu-overlay\"\r\n  *ngIf=\"showFunctionsMenu\"\r\n  (click)=\"onCloseFunctionsMenu()\"\r\n>\r\n  <div class=\"functions-menu-dialog\" (click)=\"$event.stopPropagation()\">\r\n    <div class=\"dialog-header\">\r\n      <h3>Functions Menu</h3>\r\n      <button class=\"close-btn\" (click)=\"onCloseFunctionsMenu()\">×</button>\r\n    </div>\r\n\r\n    <div class=\"dialog-content\">\r\n      <div class=\"category-tabs\">\r\n        <button\r\n          *ngFor=\"let category of functionCategories\"\r\n          class=\"category-tab\"\r\n          [class.active]=\"selectedFunctionCategory === category.name\"\r\n          (click)=\"onSelectFunctionCategory(category.name)\"\r\n        >\r\n          {{ category.label }}\r\n        </button>\r\n      </div>\r\n\r\n      <div class=\"content-area\">\r\n        <div class=\"function-list\">\r\n          <div\r\n            *ngFor=\"let func of getSelectedCategoryFunctions()\"\r\n            class=\"function-item\"\r\n            [class.selected]=\"selectedFunction === func\"\r\n            (click)=\"onSelectFunction(func)\"\r\n          >\r\n            <div class=\"function-name\">{{ func.name }}</div>\r\n            <div class=\"function-syntax\">{{ func.syntax }}</div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"function-details\" *ngIf=\"selectedFunction\">\r\n          <h4>{{ selectedFunction!.name }}</h4>\r\n          <p><strong>Syntax:</strong> {{ selectedFunction!.syntax }}</p>\r\n          <p>\r\n            <strong>Description:</strong> {{ selectedFunction!.description }}\r\n          </p>\r\n          <p *ngIf=\"selectedFunction!.example\">\r\n            <strong>Example:</strong> {{ selectedFunction!.example }}\r\n          </p>\r\n          <button (click)=\"onInsertFunction(selectedFunction!)\">\r\n            Insert Function\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SymbolCategory, SymbolItem } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-symbol-picker',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './symbol-picker.component.html',\r\n  styleUrls: ['./symbol-picker.component.css']\r\n})\r\nexport class SymbolPickerComponent {\r\n  @Input() showSymbolPicker = false;\r\n  @Input() symbolCategories: SymbolCategory[] = [];\r\n  @Input() selectedSymbolCategory = 'arithmetic';\r\n  @Input() selectedSymbol: SymbolItem | null = null;\r\n  \r\n  @Output() closeSymbolPicker = new EventEmitter<void>();\r\n  @Output() symbolCategorySelected = new EventEmitter<string>();\r\n  @Output() symbolSelected = new EventEmitter<SymbolItem>();\r\n  @Output() symbolInserted = new EventEmitter<SymbolItem>();\r\n\r\n  onCloseSymbolPicker() {\r\n    this.closeSymbolPicker.emit();\r\n  }\r\n\r\n  onSelectSymbolCategory(category: string) {\r\n    this.symbolCategorySelected.emit(category);\r\n  }\r\n\r\n  onSelectSymbol(symbol: SymbolItem) {\r\n    this.symbolSelected.emit(symbol);\r\n  }\r\n\r\n  onInsertSymbol(symbol: SymbolItem) {\r\n    this.symbolInserted.emit(symbol);\r\n  }\r\n\r\n  getSelectedCategorySymbols(): SymbolItem[] {\r\n    const category = this.symbolCategories.find(c => c.name === this.selectedSymbolCategory);\r\n    return category ? category.symbols : [];\r\n  }\r\n}\r\n","<div\r\n  class=\"symbol-picker-overlay\"\r\n  *ngIf=\"showSymbolPicker\"\r\n  (click)=\"onCloseSymbolPicker()\"\r\n>\r\n  <div class=\"symbol-picker-dialog\" (click)=\"$event.stopPropagation()\">\r\n    <div class=\"dialog-header\">\r\n      <h3>Symbol Picker</h3>\r\n      <button class=\"close-btn\" (click)=\"onCloseSymbolPicker()\">×</button>\r\n    </div>\r\n\r\n    <div class=\"dialog-content\">\r\n      <div class=\"category-tabs\">\r\n        <button\r\n          *ngFor=\"let category of symbolCategories\"\r\n          class=\"category-tab\"\r\n          [class.active]=\"selectedSymbolCategory === category.name\"\r\n          (click)=\"onSelectSymbolCategory(category.name)\"\r\n        >\r\n          {{ category.label }}\r\n        </button>\r\n      </div>\r\n\r\n      <div class=\"content-area\">\r\n        <div class=\"symbol-grid\">\r\n          <div\r\n            *ngFor=\"let symbol of getSelectedCategorySymbols()\"\r\n            class=\"symbol-item\"\r\n            [class.selected]=\"selectedSymbol === symbol\"\r\n            (click)=\"onSelectSymbol(symbol)\"\r\n          >\r\n            <div class=\"symbol-display\">{{ symbol.symbol }}</div>\r\n            <div class=\"symbol-name\">{{ symbol.name }}</div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"symbol-details\" *ngIf=\"selectedSymbol\">\r\n          <h4>{{ selectedSymbol!.name }}</h4>\r\n          <p><strong>Symbol:</strong> {{ selectedSymbol!.symbol }}</p>\r\n          <p>\r\n            <strong>Description:</strong> {{ selectedSymbol!.description }}\r\n          </p>\r\n          <button (click)=\"onInsertSymbol(selectedSymbol!)\">\r\n            Insert Symbol\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Variable, DataType } from '../../../interfaces/shared.interfaces';\r\n\r\n@Component({\r\n  selector: 'lib-variable-manager',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './variable-manager.component.html',\r\n  styleUrls: ['./variable-manager.component.css']\r\n})\r\nexport class VariableManagerComponent {\r\n  @Input() variables: Variable[] = [];\r\n  @Input() allowVariableCreation = true;\r\n  @Input() showVariableManager = false;\r\n  \r\n  @Output() variableSelected = new EventEmitter<Variable>();\r\n  @Output() variableInserted = new EventEmitter<Variable>();\r\n  @Output() variableCreated = new EventEmitter<Variable>();\r\n  @Output() variableDeleted = new EventEmitter<Variable>();\r\n  @Output() closeVariableManager = new EventEmitter<void>();\r\n\r\n  selectedVariable: Variable | null = null;\r\n  showCreateForm = false;\r\n\r\n  // New variable form\r\n  newVariable: Variable = {\r\n    name: '',\r\n    value: '',\r\n    type: DataType.STRING,\r\n    explanation: '',\r\n  };\r\n\r\n  DataType = DataType;\r\n\r\n  onVariableSelected(variable: Variable) {\r\n    this.selectedVariable = variable;\r\n    this.variableSelected.emit(variable);\r\n  }\r\n\r\n  onInsertVariable(variable: Variable) {\r\n    this.variableInserted.emit(variable);\r\n  }\r\n\r\n  onDeleteVariable(variable: Variable, event: Event) {\r\n    // Stop event propagation to prevent variable selection\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n    \r\n    // Use setTimeout to ensure the event handling is complete before showing confirm\r\n    setTimeout(() => {\r\n      const confirmed = window.confirm(`Are you sure you want to delete variable \"${variable.name}\"?\\n\\nThis action cannot be undone.`);\r\n      if (confirmed) {\r\n        this.variableDeleted.emit(variable);\r\n        \r\n        // Clear selection if deleted variable was selected\r\n        if (this.selectedVariable === variable) {\r\n          this.selectedVariable = null;\r\n        }\r\n      }\r\n    }, 10);\r\n  }\r\n\r\n  onShowCreateForm() {\r\n    this.showCreateForm = true;\r\n    this.resetNewVariableForm();\r\n  }\r\n\r\n  onHideCreateForm() {\r\n    this.showCreateForm = false;\r\n    this.resetNewVariableForm();\r\n  }\r\n\r\n  onCreateVariable() {\r\n    if (this.isValidNewVariable()) {\r\n      const variable: Variable = {\r\n        name: this.newVariable.name!,\r\n        value: this.parseVariableValue(this.newVariable.value!, this.newVariable.type!),\r\n        type: this.newVariable.type!,\r\n        explanation: this.newVariable.explanation!,\r\n      };\r\n\r\n      this.variableCreated.emit(variable);\r\n      this.onHideCreateForm();\r\n    }\r\n  }\r\n\r\n  onClose() {\r\n    this.closeVariableManager.emit();\r\n    this.selectedVariable = null;\r\n    this.showCreateForm = false;\r\n  }\r\n\r\n  // Public methods used in template\r\n  public isValidNewVariable(): boolean {\r\n    return !!(\r\n      this.newVariable.name?.trim() &&\r\n      this.newVariable.value !== undefined &&\r\n      this.newVariable.explanation?.trim() &&\r\n      this.newVariable.type\r\n    );\r\n  }\r\n\r\n  public getValuePlaceholder(): string {\r\n    switch (this.newVariable.type) {\r\n      case DataType.BOOLEAN:\r\n        return 'true or false';\r\n      case DataType.INTEGER:\r\n        return 'e.g., 42, -10, 0';\r\n      case DataType.REAL:\r\n        return 'e.g., 3.14, -2.5, 0.0';\r\n      case DataType.FUNCTION:\r\n        return 'e.g., (x, y) => x + y, (n) => n * 2';\r\n      case DataType.STRING:\r\n      default:\r\n        return 'e.g., \"Hello World\", \"active\"';\r\n    }\r\n  }\r\n\r\n  public getVariableTypeLabel(type: DataType): string {\r\n    switch (type) {\r\n      case DataType.BOOLEAN: return 'Boolean';\r\n      case DataType.INTEGER: return 'Integer';\r\n      case DataType.REAL: return 'Real';\r\n      case DataType.STRING: return 'String';\r\n      case DataType.ASSIGNMENT: return 'Assignment';\r\n      case DataType.FUNCTION: return 'Function';\r\n      default: return 'Unknown';\r\n    }\r\n  }\r\n\r\n  public getVariableValueDisplay(variable: Variable): string {\r\n    if (variable.type === DataType.STRING) {\r\n      return `\"${variable.value}\"`;\r\n    }\r\n    if (variable.type === DataType.FUNCTION) {\r\n      return `${variable.value}`;\r\n    }\r\n    return String(variable.value);\r\n  }\r\n\r\n  // Private helper methods\r\n  private resetNewVariableForm() {\r\n    this.newVariable = {\r\n      name: '',\r\n      value: '',\r\n      type: DataType.STRING,\r\n      explanation: '',\r\n    };\r\n  }\r\n\r\n  private parseVariableValue(value: any, type: DataType): any {\r\n    switch (type) {\r\n      case DataType.BOOLEAN:\r\n        return value === 'true' || value === true;\r\n      case DataType.INTEGER:\r\n        return parseInt(value, 10);\r\n      case DataType.REAL:\r\n        return parseFloat(value);\r\n      case DataType.FUNCTION:\r\n        return String(value); // Keep function as string for lambda expressions\r\n      case DataType.STRING:\r\n      default:\r\n        return String(value);\r\n    }\r\n  }\r\n}\r\n","<div class=\"variable-manager-modal\" *ngIf=\"showVariableManager\" (click)=\"onClose()\">\r\n  <div class=\"variable-manager-content\" (click)=\"$event.stopPropagation()\">\r\n    \r\n    <!-- Header -->\r\n    <div class=\"variable-manager-header\">\r\n      <h3>Variable Manager</h3>\r\n      <button class=\"close-btn\" (click)=\"onClose()\" type=\"button\">×</button>\r\n    </div>\r\n\r\n    <!-- Variable List -->\r\n    <div class=\"variable-list\" *ngIf=\"!showCreateForm\">\r\n      <div class=\"variable-item\" \r\n           *ngFor=\"let variable of variables\" \r\n           [class.selected]=\"selectedVariable === variable\"\r\n           (click)=\"onVariableSelected(variable)\">\r\n        \r\n        <div class=\"variable-header\">\r\n          <span class=\"variable-name\">{{ variable.name }}</span>\r\n          <span class=\"variable-type\">{{ getVariableTypeLabel(variable.type) }}</span>\r\n          <span class=\"variable-value\">{{ getVariableValueDisplay(variable) }}</span>\r\n          <button \r\n            class=\"delete-btn\" \r\n            (click)=\"onDeleteVariable(variable, $event)\" \r\n            type=\"button\"\r\n            title=\"Delete variable\">\r\n            🗑️\r\n          </button>\r\n        </div>\r\n        \r\n        <div class=\"variable-explanation\">\r\n          {{ variable.explanation }}\r\n        </div>\r\n        \r\n        <div class=\"variable-actions\" *ngIf=\"selectedVariable === variable\">\r\n          <button class=\"insert-btn\" (click)=\"onInsertVariable(variable)\" type=\"button\">\r\n            Insert Variable\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"no-variables\" *ngIf=\"variables.length === 0\">\r\n        <p>No variables available.</p>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Create Variable Form -->\r\n    <div class=\"create-variable-form\" *ngIf=\"showCreateForm\">\r\n      <h4>Create New Variable</h4>\r\n      \r\n      <div class=\"form-group\">\r\n        <label for=\"variableName\">Variable Name:</label>\r\n        <input \r\n          id=\"variableName\"\r\n          type=\"text\" \r\n          [(ngModel)]=\"newVariable.name\" \r\n          placeholder=\"Enter variable name (e.g., temperature, count)\"\r\n          class=\"form-control\">\r\n      </div>\r\n\r\n      <div class=\"form-group\">\r\n        <label for=\"variableType\">Type:</label>\r\n        <select id=\"variableType\" [(ngModel)]=\"newVariable.type\" class=\"form-control\">\r\n          <option [value]=\"DataType.STRING\">String</option>\r\n          <option [value]=\"DataType.INTEGER\">Integer</option>\r\n          <option [value]=\"DataType.REAL\">Real</option>\r\n          <option [value]=\"DataType.BOOLEAN\">Boolean</option>\r\n          <option [value]=\"DataType.FUNCTION\">Function</option>\r\n        </select>\r\n      </div>\r\n\r\n      <div class=\"form-group\">\r\n        <label for=\"variableValue\">Value:</label>\r\n        <input \r\n          id=\"variableValue\"\r\n          type=\"text\" \r\n          [(ngModel)]=\"newVariable.value\" \r\n          [placeholder]=\"getValuePlaceholder()\"\r\n          class=\"form-control\">\r\n      </div>\r\n\r\n      <div class=\"form-group\">\r\n        <label for=\"variableExplanation\">Explanation:</label>\r\n        <textarea \r\n          id=\"variableExplanation\"\r\n          [(ngModel)]=\"newVariable.explanation\" \r\n          placeholder=\"Explain what this variable represents and how it's used\"\r\n          class=\"form-control explanation-textarea\"\r\n          rows=\"3\"></textarea>\r\n      </div>\r\n\r\n      <div class=\"form-actions\">\r\n        <button \r\n          class=\"create-btn\" \r\n          (click)=\"onCreateVariable()\" \r\n          [disabled]=\"!isValidNewVariable()\"\r\n          type=\"button\">\r\n          Create Variable\r\n        </button>\r\n        <button class=\"cancel-btn\" (click)=\"onHideCreateForm()\" type=\"button\">\r\n          Cancel\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Footer Actions -->\r\n    <div class=\"variable-manager-footer\" *ngIf=\"!showCreateForm\">\r\n      <button \r\n        class=\"create-variable-btn\" \r\n        (click)=\"onShowCreateForm()\" \r\n        *ngIf=\"allowVariableCreation\"\r\n        type=\"button\">\r\n        + Create Variable\r\n      </button>\r\n    </div>\r\n\r\n  </div>\r\n</div>\r\n","import { FunctionCategory, SymbolCategory } from '../interfaces/shared.interfaces';\r\n\r\nexport const FUNCTION_CATEGORIES: FunctionCategory[] = [\r\n  {\r\n    name: 'arithmetic',\r\n    label: 'Arithmetic',\r\n    functions: [\r\n      { \r\n        name: 'add', \r\n        syntax: 'add(a, b)', \r\n        description: 'Adds two numbers', \r\n        example: 'add(5, 3) = 8', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'subtract', \r\n        syntax: 'subtract(a, b)', \r\n        description: 'Subtracts second number from first', \r\n        example: 'subtract(10, 3) = 7', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'multiply', \r\n        syntax: 'multiply(a, b)', \r\n        description: 'Multiplies two numbers', \r\n        example: 'multiply(4, 5) = 20', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'divide', \r\n        syntax: 'divide(a, b)', \r\n        description: 'Divides first number by second', \r\n        example: 'divide(15, 3) = 5', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'power', \r\n        syntax: 'power(base, exponent)', \r\n        description: 'Raises base to the power of exponent', \r\n        example: 'power(2, 3) = 8', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'square', \r\n        syntax: 'square(number)', \r\n        description: 'Returns the square of a number', \r\n        example: 'square(5) = 25', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'sqrt', \r\n        syntax: 'sqrt(number)', \r\n        description: 'Returns square root of number', \r\n        example: 'sqrt(16) = 4', \r\n        category: 'arithmetic' \r\n      },\r\n      { \r\n        name: 'abs', \r\n        syntax: 'abs(number)', \r\n        description: 'Returns absolute value', \r\n        example: 'abs(-5) = 5', \r\n        category: 'arithmetic' \r\n      }\r\n    ]\r\n  },\r\n  {\r\n    name: 'relational',\r\n    label: 'Relational',\r\n    functions: [\r\n      { \r\n        name: 'equals', \r\n        syntax: 'equals(a, b)', \r\n        description: 'Checks if two values are equal', \r\n        example: 'equals(5, 5) = true', \r\n        category: 'relational' \r\n      },\r\n      { \r\n        name: 'greaterThan', \r\n        syntax: 'greaterThan(a, b)', \r\n        description: 'Checks if first value is greater than second', \r\n        example: 'greaterThan(10, 5) = true', \r\n        category: 'relational' \r\n      },\r\n      { \r\n        name: 'lessThan', \r\n        syntax: 'lessThan(a, b)', \r\n        description: 'Checks if first value is less than second', \r\n        example: 'lessThan(3, 8) = true', \r\n        category: 'relational' \r\n      },\r\n      { \r\n        name: 'greaterThanOrEqual', \r\n        syntax: 'greaterThanOrEqual(a, b)', \r\n        description: 'Checks if first value is greater than or equal to second', \r\n        example: 'greaterThanOrEqual(5, 5) = true', \r\n        category: 'relational' \r\n      },\r\n      { \r\n        name: 'lessThanOrEqual', \r\n        syntax: 'lessThanOrEqual(a, b)', \r\n        description: 'Checks if first value is less than or equal to second', \r\n        example: 'lessThanOrEqual(3, 5) = true', \r\n        category: 'relational' \r\n      }\r\n    ]\r\n  },\r\n  {\r\n    name: 'logical',\r\n    label: 'Logical',\r\n    functions: [\r\n      { \r\n        name: 'and', \r\n        syntax: 'and(a, b)', \r\n        description: 'Logical AND operation', \r\n        example: 'and(true, false) = false', \r\n        category: 'logical' \r\n      },\r\n      { \r\n        name: 'or', \r\n        syntax: 'or(a, b)', \r\n        description: 'Logical OR operation', \r\n        example: 'or(true, false) = true', \r\n        category: 'logical' \r\n      },\r\n      { \r\n        name: 'not', \r\n        syntax: 'not(value)', \r\n        description: 'Logical NOT operation', \r\n        example: 'not(true) = false', \r\n        category: 'logical' \r\n      },\r\n      { \r\n        name: 'if', \r\n        syntax: 'if(condition, trueValue, falseValue)', \r\n        description: 'Conditional expression', \r\n        example: 'if(greaterThan(5, 3), \"yes\", \"no\") = \"yes\"', \r\n        category: 'logical' \r\n      }\r\n    ]\r\n  },\r\n  {\r\n    name: 'string',\r\n    label: 'String',\r\n    functions: [\r\n      { \r\n        name: 'concat', \r\n        syntax: 'concat(str1, str2)', \r\n        description: 'Concatenates two strings', \r\n        example: 'concat(\"Hello\", \" World\") = \"Hello World\"', \r\n        category: 'string' \r\n      },\r\n      { \r\n        name: 'length', \r\n        syntax: 'length(string)', \r\n        description: 'Returns length of string', \r\n        example: 'length(\"Hello\") = 5', \r\n        category: 'string' \r\n      },\r\n      { \r\n        name: 'substring', \r\n        syntax: 'substring(string, start, end)', \r\n        description: 'Extracts substring', \r\n        example: 'substring(\"Hello\", 1, 4) = \"ell\"', \r\n        category: 'string' \r\n      },\r\n      { \r\n        name: 'toUpperCase', \r\n        syntax: 'toUpperCase(string)', \r\n        description: 'Converts to uppercase', \r\n        example: 'toUpperCase(\"hello\") = \"HELLO\"', \r\n        category: 'string' \r\n      },\r\n      { \r\n        name: 'toLowerCase', \r\n        syntax: 'toLowerCase(string)', \r\n        description: 'Converts to lowercase', \r\n        example: 'toLowerCase(\"HELLO\") = \"hello\"', \r\n        category: 'string' \r\n      }\r\n    ]\r\n  }\r\n];\r\n\r\n// Symbol \r\nexport const SYMBOL_CATEGORIES: SymbolCategory[] = [\r\n  {\r\n    name: 'arithmetic',\r\n    label: 'Arithmetic',\r\n    symbols: [\r\n      { name: 'Plus', symbol: '+', description: 'Addition operator', category: 'arithmetic' },\r\n      { name: 'Minus', symbol: '-', description: 'Subtraction operator', category: 'arithmetic' },\r\n      { name: 'Multiply', symbol: '*', description: 'Multiplication operator', category: 'arithmetic' },\r\n      { name: 'Divide', symbol: '/', description: 'Division operator', category: 'arithmetic' },\r\n      { name: 'Modulo', symbol: '%', description: 'Modulo operator', category: 'arithmetic' },\r\n      { name: 'Power', symbol: '**', description: 'Exponentiation operator', category: 'arithmetic' }\r\n    ]\r\n  },\r\n  {\r\n    name: 'relational',\r\n    label: 'Relational',\r\n    symbols: [\r\n      { name: 'Equal', symbol: '==', description: 'Equality operator', category: 'relational' },\r\n      { name: 'Not Equal', symbol: '!=', description: 'Inequality operator', category: 'relational' },\r\n      { name: 'Greater Than', symbol: '>', description: 'Greater than operator', category: 'relational' },\r\n      { name: 'Less Than', symbol: '<', description: 'Less than operator', category: 'relational' },\r\n      { name: 'Greater Equal', symbol: '>=', description: 'Greater than or equal operator', category: 'relational' },\r\n      { name: 'Less Equal', symbol: '<=', description: 'Less than or equal operator', category: 'relational' }\r\n    ]\r\n  },\r\n  {\r\n    name: 'logical',\r\n    label: 'Logical',\r\n    symbols: [\r\n      { name: 'AND', symbol: '&&', description: 'Logical AND operator', category: 'logical' },\r\n      { name: 'OR', symbol: '||', description: 'Logical OR operator', category: 'logical' },\r\n      { name: 'NOT', symbol: '!', description: 'Logical NOT operator', category: 'logical' },\r\n      { name: 'Ternary If', symbol: '?:', description: 'Short if syntax (condition ? true : false)', category: 'logical' },\r\n      { name: 'Question Mark', symbol: '?', description: 'Ternary operator condition part', category: 'logical' },\r\n      { name: 'Colon', symbol: ':', description: 'Ternary operator separator', category: 'logical' }\r\n    ]\r\n  },\r\n  {\r\n    name: 'brackets',\r\n    label: 'Brackets',\r\n    symbols: [\r\n      { name: 'Parentheses', symbol: '()', description: 'Grouping parentheses', category: 'brackets' },\r\n      { name: 'Square Brackets', symbol: '[]', description: 'Square brackets', category: 'brackets' },\r\n      { name: 'Curly Braces', symbol: '{}', description: 'Curly braces', category: 'brackets' },\r\n      { name: 'Open Paren', symbol: '(', description: 'Opening parenthesis', category: 'brackets' },\r\n      { name: 'Close Paren', symbol: ')', description: 'Closing parenthesis', category: 'brackets' }\r\n    ]\r\n  },\r\n  {\r\n    name: 'punctuation',\r\n    label: 'Punctuation',\r\n    symbols: [\r\n      { name: 'Comma', symbol: ',', description: 'Comma separator', category: 'punctuation' },\r\n      { name: 'Semicolon', symbol: ';', description: 'Semicolon', category: 'punctuation' },\r\n      { name: 'Colon', symbol: ':', description: 'Colon', category: 'punctuation' },\r\n      { name: 'Question Mark', symbol: '?', description: 'Question mark', category: 'punctuation' },\r\n      { name: 'Dot', symbol: '.', description: 'Dot/period', category: 'punctuation' }\r\n    ]\r\n  }\r\n];\r\n","import { Variable, DataType } from '../interfaces/shared.interfaces';\r\n\r\nexport const DEFAULT_VARIABLES: Variable[] = [\r\n  {\r\n    name: 'temperature',\r\n    value: 25.5,\r\n    type: DataType.REAL,\r\n    explanation: 'Current temperature in Celsius',\r\n    example: 'temperature > 30'\r\n  },\r\n  {\r\n    name: 'status',\r\n    value: 'active',\r\n    type: DataType.STRING,\r\n    explanation: 'Current system status',\r\n    example: 'status == \"active\"'\r\n  },\r\n  {\r\n    name: 'count',\r\n    value: 42,\r\n    type: DataType.INTEGER,\r\n    explanation: 'Number of items processed',\r\n    example: 'count * 2'\r\n  },\r\n  {\r\n    name: 'isEnabled',\r\n    value: true,\r\n    type: DataType.BOOLEAN,\r\n    explanation: 'Whether the feature is enabled',\r\n    example: 'isEnabled && hasPermission'\r\n  },\r\n  {\r\n    name: 'price',\r\n    value: 99.99,\r\n    type: DataType.REAL,\r\n    explanation: 'Product price in currency units',\r\n    example: 'price * quantity'\r\n  },\r\n  {\r\n    name: 'quantity',\r\n    value: 3,\r\n    type: DataType.INTEGER,\r\n    explanation: 'Number of items in order',\r\n    example: 'price * quantity'\r\n  },\r\n  {\r\n    name: 'fahrenheitToCelsius',\r\n    value: '(f) => (f - 32) * 5 / 9',\r\n    type: DataType.FUNCTION,\r\n    explanation: 'Lambda function to convert Fahrenheit to Celsius',\r\n    example: 'fahrenheitToCelsius(77)'\r\n  }\r\n];\r\n","import { Injectable } from '@angular/core';\r\nimport { Variable, DataType } from '../../interfaces/shared.interfaces';\r\nimport { DEFAULT_VARIABLES } from '../../data/default-variables.data';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class VariableManagerService {\r\n\r\n  private variables: Variable[] = [];\r\n\r\n  constructor() { \r\n    this.variables = [...DEFAULT_VARIABLES];\r\n  }\r\n\r\n  addVariable(variable: Variable): void {\r\n    const existingIndex = this.variables.findIndex(v => v.name === variable.name);\r\n    if (existingIndex >= 0) {\r\n      this.variables[existingIndex] = variable;\r\n    } else {\r\n      this.variables.push(variable);\r\n    }\r\n  }\r\n\r\n  removeVariable(name: string): void {\r\n    this.variables = this.variables.filter(v => v.name !== name);\r\n  }\r\n\r\n  getVariables(): Variable[] {\r\n    return [...this.variables];\r\n  }\r\n\r\n  getVariable(name: string): Variable | undefined {\r\n    return this.variables.find(v => v.name === name);\r\n  }\r\n\r\n  extractUsedVariables(expression: string): Variable[] {\r\n    const usedVariables: Variable[] = [];\r\n    const variableNames = expression.match(/\\b[a-zA-Z_][a-zA-Z0-9_]*\\b/g) || [];\r\n    \r\n    for (const name of variableNames) {\r\n      const variable = this.getVariable(name);\r\n      if (variable && !usedVariables.find(v => v.name === name)) {\r\n        usedVariables.push(variable);\r\n      }\r\n    }\r\n    \r\n    return usedVariables;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface PatternMatch {\r\n  isMatch: boolean;\r\n  confidence: number; // 0-1 scale\r\n  details?: any;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ExpressionPatternService {\r\n\r\n  isLambdaFunction(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    const lambdaPattern = /^\\s*(\\([^)]*\\)|\\w+)\\s*=>\\s*.+/;\r\n    const isMatch = lambdaPattern.test(trimmed);\r\n    \r\n    return {\r\n      isMatch,\r\n      confidence: isMatch ? 0.95 : 0,\r\n      details: { pattern: 'lambda', expression: trimmed }\r\n    };\r\n  }\r\n\r\n  isFieldAssignment(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    // Updated regex to avoid matching == (equals comparison)\r\n    const assignmentPattern = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*\\s*=(?!=)\\s*.+/;\r\n    const isMatch = assignmentPattern.test(trimmed);\r\n    \r\n    return {\r\n      isMatch,\r\n      confidence: isMatch ? 0.9 : 0,\r\n      details: { pattern: 'assignment', expression: trimmed }\r\n    };\r\n  }\r\n\r\n  isTernaryExpression(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    const ternaryPattern = /.*\\?.*:.*/;\r\n    const isMatch = ternaryPattern.test(trimmed);\r\n    \r\n    return {\r\n      isMatch,\r\n      confidence: isMatch ? 0.85 : 0,\r\n      details: { pattern: 'ternary', expression: trimmed }\r\n    };\r\n  }\r\n\r\n  isBooleanExpression(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    \r\n    // Boolean literals\r\n    if (/^(true|false)$/i.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 1.0,\r\n        details: { pattern: 'boolean_literal', subtype: 'literal' }\r\n      };\r\n    }\r\n    \r\n    // Comparison operators\r\n    if (/[<>=!]=?|[<>]/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 0.9,\r\n        details: { pattern: 'boolean_expression', subtype: 'comparison' }\r\n      };\r\n    }\r\n    \r\n    // Logical operators\r\n    if (/&&|\\|\\||!/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 0.85,\r\n        details: { pattern: 'boolean_expression', subtype: 'logical' }\r\n      };\r\n    }\r\n    \r\n    return { isMatch: false, confidence: 0 };\r\n  }\r\n\r\n  isStringLiteral(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    const stringPattern = /^(['\"`]).*\\1$/;\r\n    const isMatch = stringPattern.test(trimmed);\r\n    \r\n    return {\r\n      isMatch,\r\n      confidence: isMatch ? 1.0 : 0,\r\n      details: { pattern: 'string_literal', expression: trimmed }\r\n    };\r\n  }\r\n\r\n  isNumericExpression(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    \r\n    // Pure number\r\n    if (/^\\d+(\\.\\d+)?$/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 1.0,\r\n        details: { pattern: 'numeric', subtype: 'literal' }\r\n      };\r\n    }\r\n    \r\n    // Contains arithmetic operators\r\n    if (/[+\\-*/%]/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 0.8,\r\n        details: { pattern: 'numeric', subtype: 'arithmetic' }\r\n      };\r\n    }\r\n    \r\n    // Math functions\r\n    if (/Math\\.\\w+\\(/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 0.9,\r\n        details: { pattern: 'numeric', subtype: 'math_function' }\r\n      };\r\n    }\r\n    \r\n    return { isMatch: false, confidence: 0 };\r\n  }\r\n\r\n  willReturnInteger(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    \r\n    // Pure integer\r\n    if (/^\\d+$/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 1.0,\r\n        details: { pattern: 'integer', subtype: 'literal' }\r\n      };\r\n    }\r\n    \r\n    // Contains division or decimal\r\n    if (/[\\/.]/.test(trimmed)) {\r\n      return {\r\n        isMatch: false,\r\n        confidence: 0,\r\n        details: { pattern: 'real', reason: 'contains_division_or_decimal' }\r\n      };\r\n    }\r\n    \r\n    // Integer arithmetic operations\r\n    if (/^[\\d\\s+\\-*()]+$/.test(trimmed)) {\r\n      return {\r\n        isMatch: true,\r\n        confidence: 0.9,\r\n        details: { pattern: 'integer', subtype: 'arithmetic' }\r\n      };\r\n    }\r\n    \r\n    // Math functions that return integers\r\n    const integerMathFunctions = ['Math.abs', 'Math.ceil', 'Math.floor', 'Math.round', 'Math.trunc'];\r\n    for (const func of integerMathFunctions) {\r\n      if (trimmed.includes(func)) {\r\n        return {\r\n          isMatch: true,\r\n          confidence: 0.85,\r\n          details: { pattern: 'integer', subtype: 'math_function', function: func }\r\n        };\r\n      }\r\n    }\r\n    \r\n    return { isMatch: false, confidence: 0 };\r\n  }\r\n\r\n  containsArithmeticOperators(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    const arithmeticPattern = /[+\\-*/%]/;\r\n    const isMatch = arithmeticPattern.test(trimmed);\r\n    \r\n    const operators = trimmed.match(/[+\\-*/%]/g) || [];\r\n    \r\n    return {\r\n      isMatch,\r\n      confidence: isMatch ? 0.8 : 0,\r\n      details: { \r\n        pattern: 'arithmetic_operators', \r\n        operators: operators,\r\n        count: operators.length \r\n      }\r\n    };\r\n  }\r\n\r\n  hasOnlyIntegerArguments(expression: string): PatternMatch {\r\n    const trimmed = expression.trim();\r\n    \r\n    // Extract function arguments\r\n    const functionMatch = trimmed.match(/\\w+\\(([^)]+)\\)/);\r\n    if (!functionMatch) {\r\n      return { isMatch: false, confidence: 0 };\r\n    }\r\n    \r\n    const args = functionMatch[1].split(',').map(arg => arg.trim());\r\n    const allInteger = args.every(arg => /^\\d+$/.test(arg));\r\n    \r\n    return {\r\n      isMatch: allInteger,\r\n      confidence: allInteger ? 0.9 : 0,\r\n      details: { \r\n        pattern: 'integer_arguments', \r\n        arguments: args,\r\n        allInteger \r\n      }\r\n    };\r\n  }\r\n\r\n  analyzeComplexity(expression: string): {\r\n    level: 'simple' | 'moderate' | 'complex' | 'very_complex';\r\n    score: number;\r\n    factors: string[];\r\n  } {\r\n    const trimmed = expression.trim();\r\n    let score = 0;\r\n    const factors: string[] = [];\r\n    \r\n    // Length factor\r\n    if (trimmed.length > 50) {\r\n      score += 2;\r\n      factors.push('long_expression');\r\n    }\r\n    \r\n    // Nested parentheses\r\n    const parenDepth = this.getMaxParenthesesDepth(trimmed);\r\n    if (parenDepth > 2) {\r\n      score += parenDepth;\r\n      factors.push('deep_nesting');\r\n    }\r\n    \r\n    // Function calls\r\n    const functionCalls = (trimmed.match(/\\w+\\(/g) || []).length;\r\n    if (functionCalls > 2) {\r\n      score += functionCalls;\r\n      factors.push('multiple_functions');\r\n    }\r\n    \r\n    // Operators\r\n    const operators = (trimmed.match(/[+\\-*/%=<>!&|]/g) || []).length;\r\n    if (operators > 3) {\r\n      score += Math.floor(operators / 2);\r\n      factors.push('many_operators');\r\n    }\r\n    \r\n    // Variables\r\n    const variables = (trimmed.match(/[a-zA-Z_$][a-zA-Z0-9_$]*/g) || []).length;\r\n    if (variables > 3) {\r\n      score += Math.floor(variables / 2);\r\n      factors.push('many_variables');\r\n    }\r\n    \r\n    let level: 'simple' | 'moderate' | 'complex' | 'very_complex';\r\n    if (score <= 2) level = 'simple';\r\n    else if (score <= 5) level = 'moderate';\r\n    else if (score <= 10) level = 'complex';\r\n    else level = 'very_complex';\r\n    \r\n    return { level, score, factors };\r\n  }\r\n\r\n  private getMaxParenthesesDepth(expression: string): number {\r\n    let maxDepth = 0;\r\n    let currentDepth = 0;\r\n    \r\n    for (const char of expression) {\r\n      if (char === '(') {\r\n        currentDepth++;\r\n        maxDepth = Math.max(maxDepth, currentDepth);\r\n      } else if (char === ')') {\r\n        currentDepth--;\r\n      }\r\n    }\r\n    \r\n    return maxDepth;\r\n  }\r\n\r\n  extractPatterns(expression: string): PatternMatch[] {\r\n    const patterns: PatternMatch[] = [];\r\n    \r\n    patterns.push(this.isLambdaFunction(expression));\r\n    patterns.push(this.isFieldAssignment(expression));\r\n    patterns.push(this.isTernaryExpression(expression));\r\n    patterns.push(this.isBooleanExpression(expression));\r\n    patterns.push(this.isStringLiteral(expression));\r\n    patterns.push(this.isNumericExpression(expression));\r\n    patterns.push(this.containsArithmeticOperators(expression));\r\n    \r\n    return patterns.filter(pattern => pattern.isMatch);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DataType } from '../../interfaces/shared.interfaces';\r\nimport { VariableManagerService } from '../variable-manager/variable-manager.service';\r\nimport { ExpressionPatternService } from '../expression-pattern/expression-pattern.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TypeAnalyzerService {\r\n\r\n  constructor(\r\n    private variableManager: VariableManagerService,\r\n    private patternService: ExpressionPatternService\r\n  ) {}\r\n\r\n  analyzeExpressionReturnType(expression: string): DataType {\r\n    const trimmed = expression.trim();\r\n    \r\n    const lambdaMatch = this.patternService.isLambdaFunction(trimmed);\r\n    if (lambdaMatch.isMatch) {\r\n      return DataType.FUNCTION;\r\n    }\r\n    \r\n    const assignmentMatch = this.patternService.isFieldAssignment(trimmed);\r\n    if (assignmentMatch.isMatch) {\r\n      return DataType.ASSIGNMENT;\r\n    }\r\n\r\n    const ternaryMatch = this.patternService.isTernaryExpression(trimmed);\r\n    if (ternaryMatch.isMatch) {\r\n      const ternaryType = this.analyzeTernaryReturnType(trimmed);\r\n      if (ternaryType) {\r\n        return ternaryType;\r\n      }\r\n      return DataType.REAL;\r\n    }\r\n    \r\n    const booleanMatch = this.patternService.isBooleanExpression(trimmed);\r\n    if (booleanMatch.isMatch) {\r\n      return DataType.BOOLEAN;\r\n    }\r\n    \r\n    const stringMatch = this.patternService.isStringLiteral(trimmed);\r\n    if (stringMatch.isMatch) {\r\n      return DataType.STRING;\r\n    }\r\n    \r\n    const numericMatch = this.patternService.isNumericExpression(trimmed);\r\n    if (numericMatch.isMatch) {\r\n      const integerMatch = this.patternService.willReturnInteger(trimmed);\r\n      if (integerMatch.isMatch) {\r\n        return DataType.INTEGER;\r\n      } else {\r\n        return DataType.REAL;\r\n      }\r\n    }\r\n    \r\n    const singleVariable = this.variableManager.getVariable(trimmed);\r\n    if (singleVariable) {\r\n      return singleVariable.type;\r\n    }\r\n    \r\n    return DataType.REAL;\r\n  }\r\n\r\n  private analyzeTernaryReturnType(expression: string): DataType | null {\r\n    const qIndex = expression.indexOf('?');\r\n    const cIndex = expression.lastIndexOf(':');\r\n    if (qIndex < 0 || cIndex < 0 || qIndex < 1 || cIndex <= qIndex + 1) {\r\n      return null;\r\n    }\r\n    \r\n    const whenTrue = expression.slice(qIndex + 1, cIndex).trim();\r\n    const whenFalse = expression.slice(cIndex + 1).trim();\r\n\r\n    const trueType = this.analyzeExpressionReturnType(whenTrue);\r\n    const falseType = this.analyzeExpressionReturnType(whenFalse);\r\n\r\n    if (trueType === falseType) {\r\n      return trueType;\r\n    }\r\n\r\n    const numericTypes = [DataType.INTEGER, DataType.REAL];\r\n    if (numericTypes.includes(trueType) && numericTypes.includes(falseType)) {\r\n      return (trueType === DataType.INTEGER && falseType === DataType.INTEGER)\r\n        ? DataType.INTEGER\r\n        : DataType.REAL;\r\n    }\r\n\r\n    if ((trueType === DataType.STRING && falseType !== DataType.ASSIGNMENT && falseType !== DataType.FUNCTION) ||\r\n        (falseType === DataType.STRING && trueType !== DataType.ASSIGNMENT && trueType !== DataType.FUNCTION)) {\r\n      return DataType.STRING;\r\n    }\r\n\r\n    return DataType.REAL;\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\nimport { \r\n  DataType, \r\n  ContextType, \r\n  ExpressionEditorConfig, \r\n  TypeValidationResult, \r\n  ExpressionEditorConfigEnhanced\r\n} from '../../interfaces/shared.interfaces';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ValidationService {\r\n\r\n  validateExpressionType(expression: string, returnType: DataType, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): TypeValidationResult {\r\n    let result: TypeValidationResult;\r\n    \r\n    switch (config.contextType) {\r\n      case ContextType.BOOLEAN:\r\n        result = this.validateBooleanContext(expression, returnType, config);\r\n        break;\r\n      case ContextType.ASSIGNMENT:\r\n        result = this.validateAssignmentContext(expression, returnType, config);\r\n        break;\r\n      case ContextType.ARITHMETIC:\r\n        result = this.validateArithmeticContext(expression, returnType, config);\r\n        break;\r\n      case ContextType.LIMITED_CONNECTOR:\r\n        result = this.validateLimitedConnectorContext(expression, returnType, config);\r\n        break;\r\n      case ContextType.GENERAL:\r\n        result = {\r\n          isValid: true,\r\n          message: 'Expression is valid',\r\n          expectedType: config.expectedResultType,\r\n          actualType: returnType,\r\n          contextType: config.contextType\r\n        };\r\n        break;\r\n      default:\r\n        result = {\r\n          isValid: true,\r\n          message: 'Expression is valid',\r\n          expectedType: config.expectedResultType,\r\n          actualType: returnType,\r\n          contextType: config.contextType\r\n        };\r\n    }\r\n    \r\n    // Log validation result to console\r\n    console.log(`%c${result.isValid ? '✓' : '✗'} Validation: ${result.message}`, \r\n      `color: ${result.isValid ? '#4ade80' : '#f87171'}; font-weight: bold;`);\r\n    \r\n    return result;\r\n  }\r\n\r\n  private validateBooleanContext(expression: string, returnType: DataType, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): TypeValidationResult {\r\n    const isLambdaFunction = this.isLambdaFunction(expression);\r\n    if (isLambdaFunction) {\r\n      return {\r\n        isValid: false,\r\n        message: 'Lambda functions are not allowed in boolean context. Use boolean expressions like \"status == \\'active\\'\" or \"temperature > 25\"',\r\n        expectedType: DataType.BOOLEAN,\r\n        actualType: DataType.FUNCTION,\r\n        contextType: config.contextType\r\n      };\r\n    }\r\n\r\n    const isBoolean = returnType === DataType.BOOLEAN;\r\n    \r\n    return {\r\n      isValid: isBoolean,\r\n      message: isBoolean ? 'Valid boolean expression' : 'Expression must return a boolean value',\r\n      expectedType: DataType.BOOLEAN,\r\n      actualType: returnType,\r\n      contextType: config.contextType\r\n    };\r\n  }\r\n\r\n  private validateAssignmentContext(expression: string, returnType: DataType, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): TypeValidationResult {\r\n    const isLambdaFunction = this.isLambdaFunction(expression);\r\n    if (isLambdaFunction) {\r\n      return {\r\n        isValid: false,\r\n        message: 'Lambda functions are not allowed in assignment context. Use assignment expressions like \"output.value = input.data\"',\r\n        expectedType: DataType.ASSIGNMENT,\r\n        actualType: DataType.FUNCTION,\r\n        contextType: config.contextType\r\n      };\r\n    }\r\n\r\n    const isAssignment = returnType === DataType.ASSIGNMENT;\r\n    \r\n    return {\r\n      isValid: isAssignment,\r\n      message: isAssignment ? 'Valid assignment expression' : 'Expression must be an assignment (e.g., field = value)',\r\n      expectedType: DataType.ASSIGNMENT,\r\n      actualType: returnType,\r\n      contextType: config.contextType\r\n    };\r\n  }\r\n\r\n  private validateArithmeticContext(expression: string, returnType: DataType, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): TypeValidationResult {\r\n    const isLambdaFunction = this.isLambdaFunction(expression);\r\n    if (isLambdaFunction) {\r\n      return {\r\n        isValid: false,\r\n        message: 'Lambda functions are not allowed in arithmetic context. Use mathematical expressions like \"price * quantity\"',\r\n        expectedType: DataType.REAL,\r\n        actualType: DataType.FUNCTION,\r\n        contextType: config.contextType\r\n      };\r\n    }\r\n\r\n    const isNumeric = returnType === DataType.INTEGER || returnType === DataType.REAL;\r\n    \r\n    return {\r\n      isValid: isNumeric,\r\n      message: isNumeric ? 'Valid arithmetic expression' : 'Expression must return a numeric value',\r\n      expectedType: DataType.REAL,\r\n      actualType: returnType,\r\n      contextType: config.contextType\r\n    };\r\n  }\r\n\r\n  private validateLimitedConnectorContext(expression: string, returnType: DataType, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): TypeValidationResult {\r\n    const isLambdaFunction = this.isLambdaFunction(expression);\r\n    if (isLambdaFunction) {\r\n      return {\r\n        isValid: false,\r\n        message: 'Lambda functions are not allowed in limited connector context. Use simple arithmetic expressions like \"a + b\"',\r\n        expectedType: DataType.REAL,\r\n        actualType: DataType.FUNCTION,\r\n        contextType: ContextType.LIMITED_CONNECTOR\r\n      };\r\n    }\r\n\r\n    const hasOnlyAllowedOperators = this.hasOnlyAllowedArithmeticOperators(expression, config);\r\n    const isNumeric = returnType === DataType.INTEGER || returnType === DataType.REAL;\r\n    \r\n    const hasDivision = expression.includes('/');\r\n    const divisionAllowed = config.allowDivision !== false;\r\n    \r\n    return {\r\n      isValid: hasOnlyAllowedOperators && isNumeric && (divisionAllowed || !hasDivision),\r\n      message: !divisionAllowed && hasDivision\r\n        ? 'Division (/) operator is not allowed in this context'\r\n        : hasOnlyAllowedOperators && isNumeric \r\n          ? 'Valid limited connector expression' \r\n          : 'Expression must use only allowed operators and return a numeric value',\r\n      expectedType: DataType.REAL,\r\n      actualType: returnType,\r\n      contextType: ContextType.LIMITED_CONNECTOR\r\n    };\r\n  }\r\n\r\n  private hasOnlyAllowedArithmeticOperators(expression: string, config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): boolean {\r\n    // Check for disallowed function calls like Math.sqrt, Math.pow, etc.\r\n    if (/Math\\.|[a-zA-Z_][a-zA-Z0-9_]*\\s*\\(/.test(expression)) {\r\n      return false;\r\n    }\r\n    \r\n    const operators = expression.replace(/[\\d\\w\\s().,]/g, '');\r\n    \r\n    if (config.allowDivision === false) {\r\n      // Only allow +, -, * (no division)\r\n      return /^[+\\-*]*$/.test(operators);\r\n    } else {\r\n      // Allow +, -, *, /\r\n      return /^[+\\-*/]*$/.test(operators);\r\n    }\r\n  }\r\n\r\n  private isLambdaFunction(expression: string): boolean {\r\n    // Detect lambda function patterns \r\n    return /^\\s*(\\([^)]*\\)|\\w+)\\s*=>\\s*.+/.test(expression.trim());\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface Token {\r\n  type: 'operator' | 'function' | 'variable' | 'literal' | 'parenthesis' | 'comma' | 'bracket' | 'semicolon' | 'colon' | 'question';\r\n  value: string;\r\n  position: number;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TokenizerService {\r\n\r\n  tokenize(expression: string): Token[] {\r\n    const tokens: Token[] = [];\r\n    let i = 0;\r\n    \r\n    while (i < expression.length) {\r\n      const char = expression[i];\r\n      \r\n      // Skip whitespace\r\n      if (/\\s/.test(char)) {\r\n        i++;\r\n        continue;\r\n      }\r\n      \r\n      // Handle operators\r\n      if (this.isOperator(char)) {\r\n        const operator = this.parseOperator(expression, i);\r\n        tokens.push({\r\n          type: 'operator',\r\n          value: operator,\r\n          position: i\r\n        });\r\n        i += operator.length;\r\n        continue;\r\n      }\r\n      \r\n      // Handle parentheses\r\n      if (char === '(' || char === ')') {\r\n        tokens.push({\r\n          type: 'parenthesis',\r\n          value: char,\r\n          position: i\r\n        });\r\n        i++;\r\n        continue;\r\n      }\r\n      \r\n      // Handle comma\r\n      if (char === ',') {\r\n        tokens.push({\r\n          type: 'comma',\r\n          value: char,\r\n          position: i\r\n        });\r\n        i++;\r\n        continue;\r\n      }\r\n      \r\n      // Handle string literals\r\n      if (char === '\"' || char === \"'\") {\r\n        const stringLiteral = this.parseStringLiteral(expression, i);\r\n        tokens.push({\r\n          type: 'literal',\r\n          value: stringLiteral.value,\r\n          position: i\r\n        });\r\n        i = stringLiteral.endIndex;\r\n        continue;\r\n      }\r\n      \r\n      // Handle numbers\r\n      if (/\\d/.test(char) || (char === '.' && /\\d/.test(expression[i + 1]))) {\r\n        const number = this.parseNumber(expression, i);\r\n        tokens.push({\r\n          type: 'literal',\r\n          value: number.value,\r\n          position: i\r\n        });\r\n        i = number.endIndex;\r\n        continue;\r\n      }\r\n      \r\n      // Handle identifiers (variables/functions)\r\n      if (/[a-zA-Z_$]/.test(char)) {\r\n        const identifier = this.parseIdentifier(expression, i);\r\n        const nextChar = expression[identifier.endIndex];\r\n        \r\n        tokens.push({\r\n          type: nextChar === '(' ? 'function' : 'variable',\r\n          value: identifier.value,\r\n          position: i\r\n        });\r\n        i = identifier.endIndex;\r\n        continue;\r\n      }\r\n      \r\n      // Unknown character - skip it\r\n      i++;\r\n    }\r\n    \r\n    return tokens;\r\n  }\r\n\r\n  private isOperator(char: string): boolean {\r\n    return /[+\\-*/%=!<>&|^~]/.test(char);\r\n  }\r\n\r\n  private parseOperator(expression: string, startIndex: number): string {\r\n    const char = expression[startIndex];\r\n    const nextChar = expression[startIndex + 1];\r\n    \r\n    // Two-character operators\r\n    const twoChar = char + nextChar;\r\n    if (['==', '!=', '<=', '>=', '&&', '||', '=>'].includes(twoChar)) {\r\n      return twoChar;\r\n    }\r\n    \r\n    return char;\r\n  }\r\n\r\n  private parseStringLiteral(expression: string, startIndex: number): { value: string; endIndex: number } {\r\n    const quote = expression[startIndex];\r\n    let i = startIndex + 1;\r\n    let value = '';\r\n    \r\n    while (i < expression.length && expression[i] !== quote) {\r\n      if (expression[i] === '\\\\' && i + 1 < expression.length) {\r\n        // Handle escape sequences\r\n        i++;\r\n        const escaped = expression[i];\r\n        switch (escaped) {\r\n          case 'n': value += '\\n'; break;\r\n          case 't': value += '\\t'; break;\r\n          case 'r': value += '\\r'; break;\r\n          case '\\\\': value += '\\\\'; break;\r\n          case '\"': value += '\"'; break;\r\n          case \"'\": value += \"'\"; break;\r\n          default: value += escaped; break;\r\n        }\r\n      } else {\r\n        value += expression[i];\r\n      }\r\n      i++;\r\n    }\r\n    \r\n    return {\r\n      value: quote + value + quote, // Include quotes in the value\r\n      endIndex: i + 1\r\n    };\r\n  }\r\n\r\n  private parseNumber(expression: string, startIndex: number): { value: string; endIndex: number } {\r\n    let i = startIndex;\r\n    let value = '';\r\n    let hasDecimal = false;\r\n    \r\n    while (i < expression.length) {\r\n      const char = expression[i];\r\n      \r\n      if (/\\d/.test(char)) {\r\n        value += char;\r\n      } else if (char === '.' && !hasDecimal && /\\d/.test(expression[i + 1])) {\r\n        hasDecimal = true;\r\n        value += char;\r\n      } else {\r\n        break;\r\n      }\r\n      i++;\r\n    }\r\n    \r\n    return { value, endIndex: i };\r\n  }\r\n\r\n  private parseIdentifier(expression: string, startIndex: number): { value: string; endIndex: number } {\r\n    let i = startIndex;\r\n    let value = '';\r\n    \r\n    while (i < expression.length && /[a-zA-Z0-9_$.]/.test(expression[i])) {\r\n      value += expression[i];\r\n      i++;\r\n    }\r\n    \r\n    return { value, endIndex: i };\r\n  }\r\n\r\n  validateTokens(tokens: Token[]): { isValid: boolean; errors: string[] } {\r\n    const errors: string[] = [];\r\n    \r\n    // Check for empty token list\r\n    if (tokens.length === 0) {\r\n      errors.push('No tokens found');\r\n      return { isValid: false, errors };\r\n    }\r\n    \r\n    // Check for balanced parentheses\r\n    let parenthesesCount = 0;\r\n    for (const token of tokens) {\r\n      if (token.type === 'parenthesis') {\r\n        if (token.value === '(') {\r\n          parenthesesCount++;\r\n        } else {\r\n          parenthesesCount--;\r\n          if (parenthesesCount < 0) {\r\n            errors.push('Unmatched closing parenthesis');\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    \r\n    if (parenthesesCount > 0) {\r\n      errors.push('Unmatched opening parenthesis');\r\n    }\r\n    \r\n    // Check for consecutive operators\r\n    for (let i = 0; i < tokens.length - 1; i++) {\r\n      const current = tokens[i];\r\n      const next = tokens[i + 1];\r\n      \r\n      if (current.type === 'operator' && next.type === 'operator') {\r\n        errors.push(`Consecutive operators: ${current.value} ${next.value}`);\r\n      }\r\n    }\r\n    \r\n    return {\r\n      isValid: errors.length === 0,\r\n      errors\r\n    };\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TokenizerService, Token } from '../tokenizer/tokenizer.service';\r\n\r\nexport interface BinaryTreeNode {\r\n  type: 'operator' | 'function' | 'variable' | 'literal';\r\n  value: string | number | boolean;\r\n  left?: BinaryTreeNode;\r\n  right?: BinaryTreeNode;\r\n  children?: BinaryTreeNode[]; // For function calls with multiple parameters\r\n}\r\n\r\nexport interface ParseResult {\r\n  success: boolean;\r\n  tree?: BinaryTreeNode;\r\n  error?: string;\r\n  json?: string;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class BinaryTreeParserService {\r\n\r\n  private tokens: Token[] = [];\r\n  private currentIndex = 0;\r\n\r\n  constructor(private tokenizerService: TokenizerService) {}\r\n\r\n  parseExpression(expression: string): ParseResult {\r\n    try {\r\n      if (!expression || expression.trim().length === 0) {\r\n        return {\r\n          success: false,\r\n          error: 'Expression is empty'\r\n        };\r\n      }\r\n\r\n      // Use TokenizerService instead of internal tokenization\r\n      this.tokens = this.tokenizerService.tokenize(expression);\r\n      this.currentIndex = 0;\r\n\r\n      // Validate tokens using TokenizerService\r\n      const validation = this.tokenizerService.validateTokens(this.tokens);\r\n      if (!validation.isValid) {\r\n        return {\r\n          success: false,\r\n          error: `Tokenization error: ${validation.errors.join(', ')}`\r\n        };\r\n      }\r\n\r\n      if (this.tokens.length === 0) {\r\n        return {\r\n          success: false,\r\n          error: 'No valid tokens found'\r\n        };\r\n      }\r\n\r\n      const tree = this.parseOrExpression();\r\n      \r\n      if (this.currentIndex < this.tokens.length) {\r\n        return {\r\n          success: false,\r\n          error: `Unexpected token: ${this.tokens[this.currentIndex].value}`\r\n        };\r\n      }\r\n\r\n      const json = JSON.stringify(tree, null, 2);\r\n\r\n      return {\r\n        success: true,\r\n        tree: tree,\r\n        json: json\r\n      };\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Parse error'\r\n      };\r\n    }\r\n  }\r\n\r\n  private parseOrExpression(): BinaryTreeNode {\r\n    let left = this.parseAndExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && this.tokens[this.currentIndex].value === '||') {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseAndExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseAndExpression(): BinaryTreeNode {\r\n    let left = this.parseEqualityExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && this.tokens[this.currentIndex].value === '&&') {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseEqualityExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseEqualityExpression(): BinaryTreeNode {\r\n    let left = this.parseRelationalExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && ['==', '!='].includes(this.tokens[this.currentIndex].value as string)) {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseRelationalExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseRelationalExpression(): BinaryTreeNode {\r\n    let left = this.parseAssignmentExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && ['<', '>', '<=', '>='].includes(this.tokens[this.currentIndex].value as string)) {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseAssignmentExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseAssignmentExpression(): BinaryTreeNode {\r\n    let left = this.parseAdditiveExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && this.tokens[this.currentIndex].value === '=') {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseAdditiveExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseAdditiveExpression(): BinaryTreeNode {\r\n    let left = this.parseMultiplicativeExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && ['+', '-'].includes(this.tokens[this.currentIndex].value as string)) {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseMultiplicativeExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseMultiplicativeExpression(): BinaryTreeNode {\r\n    let left = this.parseUnaryExpression();\r\n    \r\n    while (this.currentIndex < this.tokens.length && ['*', '/'].includes(this.tokens[this.currentIndex].value as string)) {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const right = this.parseUnaryExpression();\r\n      left = {\r\n        type: 'operator',\r\n        value: operator,\r\n        left: left,\r\n        right: right\r\n      };\r\n    }\r\n    \r\n    return left;\r\n  }\r\n\r\n  private parseUnaryExpression(): BinaryTreeNode {\r\n    if (this.currentIndex < this.tokens.length && ['+', '-', '!'].includes(this.tokens[this.currentIndex].value as string)) {\r\n      const operator = this.tokens[this.currentIndex].value;\r\n      this.currentIndex++;\r\n      const operand = this.parseUnaryExpression();\r\n      return {\r\n        type: 'operator',\r\n        value: operator,\r\n        right: operand\r\n      };\r\n    }\r\n    \r\n    return this.parsePrimaryExpression();\r\n  }\r\n\r\n  private parsePrimaryExpression(): BinaryTreeNode {\r\n    if (this.currentIndex >= this.tokens.length) {\r\n      throw new Error('Unexpected end of expression');\r\n    }\r\n    \r\n    const token = this.tokens[this.currentIndex];\r\n    \r\n    // Parentheses\r\n    if (token.value === '(') {\r\n      this.currentIndex++;\r\n      const expr = this.parseOrExpression();\r\n      if (this.currentIndex >= this.tokens.length || this.tokens[this.currentIndex].value !== ')') {\r\n        throw new Error('Missing closing parenthesis');\r\n      }\r\n      this.currentIndex++;\r\n      return expr;\r\n    }\r\n    \r\n    // String literals\r\n    if (typeof token.value === 'string' && (token.value.startsWith('\"') || token.value.startsWith(\"'\"))) {\r\n      this.currentIndex++;\r\n      return {\r\n        type: 'literal',\r\n        value: token.value.slice(1, -1) // Remove quotes\r\n      };\r\n    }\r\n    \r\n    // Numbers\r\n    if (typeof token.value === 'string' && /^\\d+(\\.\\d+)?$/.test(token.value)) {\r\n      this.currentIndex++;\r\n      const numValue = parseFloat(token.value);\r\n      return {\r\n        type: 'literal',\r\n        value: numValue\r\n      };\r\n    }\r\n    \r\n    // Boolean literals\r\n    if (token.value === 'true' || token.value === 'false') {\r\n      this.currentIndex++;\r\n      return {\r\n        type: 'literal',\r\n        value: token.value === 'true'\r\n      };\r\n    }\r\n    \r\n    // Function calls\r\n    if (this.currentIndex + 1 < this.tokens.length && this.tokens[this.currentIndex + 1].value === '(') {\r\n      const functionName = token.value;\r\n      this.currentIndex += 2; // Skip function name and '('\r\n      \r\n      const args: BinaryTreeNode[] = [];\r\n      \r\n      // Parse arguments\r\n      if (this.currentIndex < this.tokens.length && this.tokens[this.currentIndex].value !== ')') {\r\n        args.push(this.parseOrExpression());\r\n        \r\n        while (this.currentIndex < this.tokens.length && this.tokens[this.currentIndex].value === ',') {\r\n          this.currentIndex++; // Skip comma\r\n          args.push(this.parseOrExpression());\r\n        }\r\n      }\r\n      \r\n      if (this.currentIndex >= this.tokens.length || this.tokens[this.currentIndex].value !== ')') {\r\n        throw new Error('Missing closing parenthesis in function call');\r\n      }\r\n      this.currentIndex++; // Skip ')'\r\n      \r\n      return {\r\n        type: 'function',\r\n        value: functionName,\r\n        children: args\r\n      };\r\n    }\r\n    \r\n    // Variables\r\n    this.currentIndex++;\r\n    return {\r\n      type: 'variable',\r\n      value: token.value\r\n    };\r\n  }\r\n}","import { Injectable } from '@angular/core';\r\nimport { \r\n  DataType, \r\n  ContextType, \r\n  ExpressionEditorConfig, \r\n  ExpressionEditorConfigEnhanced\r\n} from '../../interfaces/shared.interfaces';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ConfigurationService {\r\n\r\n  getAssignmentConfig(): ExpressionEditorConfig {\r\n    return {\r\n      expectedResultType: DataType.ASSIGNMENT,\r\n      contextType: ContextType.ASSIGNMENT,\r\n      strictValidation: true,\r\n      title: 'Assignment Expression Editor',\r\n      description: 'Enter assignment expressions for data mapping',\r\n      placeholder: 'Enter assignment (e.g., output = input * 2)',\r\n      examples: [\r\n        'output.value = input.data',\r\n        'result = transform(source)',\r\n        'target.field = source.value * 2',\r\n        'destination = calculation + offset'\r\n      ]\r\n    };\r\n  }\r\n\r\n  getLimitedConnectorConfig(allowDivision: boolean = false): ExpressionEditorConfig {\r\n    \r\n    return {\r\n      expectedResultType: DataType.REAL,\r\n      contextType: ContextType.LIMITED_CONNECTOR,\r\n      strictValidation: true,\r\n      allowDivision: allowDivision,\r\n      title: 'Limited Connector Expression Editor',\r\n      description: allowDivision \r\n        ? 'Enter arithmetic expressions using +, -, *, / operations'\r\n        : 'Enter arithmetic expressions using +, -, * operations (division disabled)',\r\n      placeholder: allowDivision \r\n        ? 'Enter arithmetic expression (e.g., a + b, x * y / 2)'\r\n        : 'Enter arithmetic expression (e.g., a + b, x * y)',\r\n      \r\n    };\r\n  }\r\n\r\n  getBooleanConfig(): ExpressionEditorConfig {\r\n    return {\r\n      expectedResultType: DataType.BOOLEAN,\r\n      contextType: ContextType.BOOLEAN,\r\n      strictValidation: true,\r\n      title: 'Boolean Expression Editor',\r\n      description: 'Enter boolean expressions for conditions and state machines',\r\n      placeholder: 'Enter boolean condition (e.g., status == \"active\", value > 10)',\r\n     \r\n    };\r\n  }\r\n\r\n  getArithmeticConfig(): ExpressionEditorConfig {\r\n    return {\r\n      expectedResultType: DataType.REAL,\r\n      contextType: ContextType.ARITHMETIC,\r\n      strictValidation: true,\r\n      title: 'Arithmetic Expression Editor',\r\n      description: 'Enter mathematical expressions for calculations',\r\n      placeholder: 'Enter a mathematical expression (e.g., price * quantity)',\r\n      \r\n    };\r\n  }\r\n\r\n  getConnectorConfig(): ExpressionEditorConfig {\r\n    return this.getAssignmentConfig();\r\n  }\r\n\r\n  getGeneralConfig(): ExpressionEditorConfig {\r\n    return {\r\n      expectedResultType: DataType.REAL,\r\n      contextType: ContextType.GENERAL,\r\n      strictValidation: false,\r\n      title: 'General Expression Editor',\r\n      description: 'Enter any type of expression',\r\n      placeholder: 'Enter your expression here...',\r\n     \r\n    };\r\n  }\r\n\r\n  getPlaceholderForType(config: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): string {\r\n    switch (config.contextType) {\r\n      case ContextType.BOOLEAN:\r\n        return 'Enter boolean condition (e.g., status == \"active\", value > 10)';\r\n      case ContextType.ASSIGNMENT:\r\n        return 'Enter assignment (e.g., output = input * 2)';\r\n      case ContextType.LIMITED_CONNECTOR:\r\n        return 'Enter arithmetic expression (e.g., a + b, price * quantity)';\r\n      case ContextType.ARITHMETIC:\r\n        return 'Enter mathematical expression (e.g., Math.sqrt(x), (a + b) / 2)';\r\n      case ContextType.GENERAL:\r\n        return 'Enter your expression here...';\r\n      default:\r\n        return 'Enter your expression here...';\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TypeAnalyzerService } from '../type-analyzer/type-analyzer.service';\r\nimport { ValidationService } from '../validation/validation.service';\r\nimport { VariableManagerService } from '../variable-manager/variable-manager.service';\r\nimport { BinaryTreeParserService } from '../binary-tree-parser/binary-tree-parser.service';\r\nimport { ConfigurationService } from '../configuration/configuration.service';\r\nimport { BinaryTreeResult, ExpressionEditorConfig, ExpressionEditorConfigEnhanced, ExpressionResult, Variable, VariableMapping } from '../../interfaces/shared.interfaces';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ExpressionEvaluatorService {\r\n\r\n  constructor(\r\n    private typeAnalyzer: TypeAnalyzerService,\r\n    private validator: ValidationService,\r\n    private variableManager: VariableManagerService,\r\n    private binaryTreeParser: BinaryTreeParserService,\r\n    private configurationService: ConfigurationService\r\n  ) { }\r\n\r\n  addVariable(variable: Variable): void {\r\n    this.variableManager.addVariable(variable);\r\n  }\r\n\r\n  removeVariable(name: string): void {\r\n    this.variableManager.removeVariable(name);\r\n  }\r\n\r\n  getVariables(): Variable[] {\r\n    return this.variableManager.getVariables();\r\n  }\r\n\r\n  getVariable(name: string): Variable | undefined {\r\n    return this.variableManager.getVariable(name);\r\n  }\r\n\r\n  identifyExpressionType(expression: string, config?: ExpressionEditorConfig | ExpressionEditorConfigEnhanced): ExpressionResult {\r\n    if (!expression || expression.trim().length === 0) {\r\n      return {\r\n        success: false,\r\n        error: 'Expression is empty'\r\n      };\r\n    }\r\n\r\n    try {\r\n        // Check if it's a lambda function or ternary expression first\r\n        const isLambdaExpression = this.isLambdaFunction(expression);\r\n         const isTernaryExpression = this.isTernaryExpression(expression);\r\n      \r\n      // Parse binary tree only if it's NOT a lambda function or ternary expression\r\n  let parseResult: BinaryTreeResult | null = null;\r\n  if (!isLambdaExpression && !isTernaryExpression) {\r\n    parseResult = this.binaryTreeParser.parseExpression(expression);\r\n    if (!parseResult.success) {\r\n      return {\r\n        success: false,\r\n        error: parseResult.error || 'Parse error'\r\n      };\r\n    }\r\n  }\r\n    \r\n      // Analyze return type\r\n      const returnType = this.typeAnalyzer.analyzeExpressionReturnType(expression);\r\n      \r\n      // Get used variables\r\n      const usedVariables = this.variableManager.extractUsedVariables(expression);\r\n    \r\n      const result: ExpressionResult = {\r\n        success: true,\r\n        returnType: returnType,\r\n        binaryTree: parseResult || undefined,  // Only include if available\r\n        usedVariables: usedVariables,\r\n        isLambdaExpression: isLambdaExpression\r\n      };\r\n    \r\n      // Add type validation if config is provided\r\n      if (config) {\r\n        const typeValidation = this.validator.validateExpressionType(expression, returnType, config);\r\n        result.typeValidation = typeValidation;\r\n      }\r\n    \r\n      return result;\r\n    } catch (error) {\r\n      return {\r\n        success: false,\r\n        error: error instanceof Error ? error.message : 'Unknown analysis error'\r\n      };\r\n    }\r\n  }\r\n\r\n  private isLambdaFunction(expression: string): boolean {\r\n    // Detect lambda function\r\n    return /^\\s*(\\([^)]*\\)|\\w+)\\s*=>\\s*.+/.test(expression.trim());\r\n  }\r\n\r\n  getAssignmentConfig(): ExpressionEditorConfig {\r\n    return this.configurationService.getAssignmentConfig();\r\n  }\r\n\r\n  getLimitedConnectorConfig(allowDivision: boolean = false): ExpressionEditorConfig {\r\n    return this.configurationService.getLimitedConnectorConfig(allowDivision);\r\n  }\r\n\r\n  getBooleanConfig(): ExpressionEditorConfig {\r\n    return this.configurationService.getBooleanConfig();\r\n  }\r\n\r\n  getArithmeticConfig(): ExpressionEditorConfig {\r\n    return this.configurationService.getArithmeticConfig();\r\n  }\r\n\r\n  getConnectorConfig(): ExpressionEditorConfig {\r\n    return this.configurationService.getConnectorConfig();\r\n  }\r\n\r\n  getGeneralConfig(): ExpressionEditorConfig {\r\n    return this.configurationService.getGeneralConfig();\r\n  }\r\n\r\n  getPlaceholderForType(config: ExpressionEditorConfig): string {\r\n    return this.configurationService.getPlaceholderForType(config);\r\n  }\r\n  private isTernaryExpression(expression: string): boolean {\r\n    // Detect ternary/conditional expressions like: condition ? value1 : value2\r\n    return /\\?.*:/.test(expression.trim());\r\n  }\r\n  transformToBackend(expression: string, mappings: VariableMapping[]): string {\r\n    let transformed = expression;\r\n    \r\n    // Replace frontend variable names with backend names\r\n    mappings.forEach(mapping => {\r\n      const regex = new RegExp(this.escapeRegex(mapping.frontendName), 'g');\r\n      transformed = transformed.replace(regex, mapping.backendName);\r\n    });\r\n    \r\n    return transformed;\r\n  }\r\n  \r\n  transformToFrontend(expression: string, mappings: VariableMapping[]): string {\r\n    let transformed = expression;\r\n    \r\n    // Replace backend variable names with frontend names\r\n    mappings.forEach(mapping => {\r\n      const regex = new RegExp(this.escapeRegex(mapping.backendName), 'g');\r\n      transformed = transformed.replace(regex, mapping.frontendName);\r\n    });\r\n    \r\n    return transformed;\r\n  }\r\n  \r\n  private escapeRegex(str: string): string {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewChild, OnDestroy } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { ExpressionHeaderComponent } from './expression-header/expression-header.component';\r\nimport { DivisionToggleComponent } from './division-toggle/division-toggle.component';\r\nimport { ExpressionTextareaComponent } from './expression-textarea/expression-textarea.component';\r\nimport { ExpressionControlsComponent } from './expression-controls/expression-controls.component';\r\nimport { ExpressionInfoComponent } from './expression-info/expression-info.component';\r\nimport { FunctionsMenuComponent } from './functions-menu/functions-menu.component';\r\nimport { SymbolPickerComponent } from './symbol-picker/symbol-picker.component';\r\nimport { VariableManagerComponent } from './variable-manager/variable-manager.component';\r\n\r\nimport { ExpressionEvaluatorService } from '../../services/expression-evaluator/expression-evaluator.service';\r\nimport { ExtensionManagerService } from '../../services/extension-manager/extension-manager.service';\r\nimport { CustomFunction } from '../../interfaces/core/extensibility.interfaces';\r\nimport { \r\n  FunctionCategory, \r\n  FunctionItem, \r\n  SymbolCategory, \r\n  SymbolItem, \r\n  ExpressionEditorConfig,\r\n  TypeValidationResult,\r\n  Variable,\r\n  ExpressionResult,\r\n  ExpressionEditorConfigEnhanced,\r\n  DataType,\r\n  BinaryTreeResult,\r\n  TextareaStyleConfig,\r\n  FieldMappingData\r\n} from '../../interfaces/shared.interfaces';\r\nimport { FUNCTION_CATEGORIES, SYMBOL_CATEGORIES } from '../../data/function-categories.data';\r\n\r\n\r\n@Component({\r\n  selector: 'lib-expression-editor',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule, \r\n    FormsModule,\r\n    ExpressionHeaderComponent,\r\n    DivisionToggleComponent,\r\n    ExpressionTextareaComponent,\r\n    ExpressionControlsComponent,\r\n    ExpressionInfoComponent,\r\n    FunctionsMenuComponent,\r\n    VariableManagerComponent,\r\n    SymbolPickerComponent\r\n  ],\r\n  templateUrl: './expression-editor.component.html',\r\n  styleUrls: ['./expression-editor.component.css'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => ExpressionEditorComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class ExpressionEditorComponent implements ControlValueAccessor, OnDestroy {\r\n  @Input() disabled = false;\r\n  @Input() editorConfig?: ExpressionEditorConfig | ExpressionEditorConfigEnhanced;\r\n  @Input() simpleMode = false;\r\n  @Input() textareaStyle?: TextareaStyleConfig;\r\n  @Input() placeholder?: string;\r\n  @Output() expressionChange = new EventEmitter<string>();\r\n  @Output() validationChange = new EventEmitter<TypeValidationResult | null>();\r\n  @Output() configChange = new EventEmitter<ExpressionEditorConfig | ExpressionEditorConfigEnhanced>();\r\n  @Output() binaryTreeChange = new EventEmitter<BinaryTreeResult | null>();\r\n  @Output() fieldMappingChange = new EventEmitter<FieldMappingData | null>();\r\n\r\n  @ViewChild(ExpressionTextareaComponent) expressionTextarea!: ExpressionTextareaComponent;\r\n\r\n  value = '';\r\n  typeResult: ExpressionResult | null = null;\r\n  currentValidation: TypeValidationResult | null = null;\r\n  \r\n  showFunctionsMenu = false;\r\n  showSymbolPicker = false;\r\n  showCustomFunctionBuilder = false;\r\n  showVariableManager = false;\r\n  \r\n  selectedFunction: FunctionItem | null = null;\r\n  selectedSymbol: SymbolItem | null = null;\r\n  selectedFunctionCategory = 'arithmetic';\r\n  selectedSymbolCategory = 'arithmetic';\r\n  \r\n  private onChange = (value: string) => {};\r\n  private onTouched = () => {};\r\n  private debounceTimer: any = null;\r\n  private debounceDelay = 1000;\r\n\r\n  functionCategories: FunctionCategory[] = [];\r\n  symbolCategories: SymbolCategory[] = SYMBOL_CATEGORIES;\r\n\r\n  constructor(\r\n    private evaluatorService: ExpressionEvaluatorService,\r\n    private extensionManager: ExtensionManagerService\r\n  ) {\r\n    this.initializeFunctionCategories();\r\n  }\r\n\r\n  private initializeFunctionCategories(): void {\r\n    this.functionCategories = [...FUNCTION_CATEGORIES];\r\n    this.functionCategories.push({\r\n      name: 'custom',\r\n      label: 'Custom Functions',\r\n      functions: [] \r\n    });\r\n  }\r\n\r\n  get enhancedConfig(): ExpressionEditorConfigEnhanced | undefined {\r\n    return this.editorConfig as ExpressionEditorConfigEnhanced;\r\n  }\r\n\r\n  get variables(): Variable[] {\r\n    const configVariables = this.enhancedConfig?.variables || [];\r\n    const serviceVariables = this.evaluatorService.getVariables();\r\n    \r\n    const mergedVariables = [...configVariables];\r\n    \r\n    for (const serviceVar of serviceVariables) {\r\n      const existingIndex = mergedVariables.findIndex(v => v.name === serviceVar.name);\r\n      if (existingIndex >= 0) {\r\n        mergedVariables[existingIndex] = serviceVar; \r\n      } else {\r\n        mergedVariables.push(serviceVar); \r\n      }\r\n    }\r\n    \r\n    return mergedVariables;\r\n  }\r\n\r\n  onValueChange(value: string) {\r\n    this.value = value;\r\n    this.onChange(this.value);\r\n    this.expressionChange.emit(this.value);\r\n    \r\n    if (this.debounceTimer) {\r\n      clearTimeout(this.debounceTimer);\r\n    }\r\n    \r\n    this.debounceTimer = setTimeout(() => {\r\n      this.analyzeExpression();\r\n    }, this.debounceDelay);\r\n  }\r\n\r\n  onTextareaBlur() {\r\n    this.onTouched();\r\n  }\r\n\r\n  onToggleEditor() {\r\n    this.disabled = !this.disabled;\r\n  }\r\n\r\n  onClearExpression() {\r\n    this.value = '';\r\n    this.onChange(this.value);\r\n    this.expressionChange.emit(this.value);\r\n    this.typeResult = null;\r\n    this.validationChange.emit(null);\r\n    this.binaryTreeChange.emit(null);\r\n  }\r\n\r\n  onConfigChange(newConfig: ExpressionEditorConfig | ExpressionEditorConfigEnhanced) {\r\n    this.editorConfig = newConfig;\r\n    this.configChange.emit(newConfig);\r\n    if (this.value.trim()) this.analyzeExpression();\r\n  }\r\n\r\n  onOpenFunctionsMenu() { this.showFunctionsMenu = true; }\r\n  onCloseFunctionsMenu() { \r\n    this.showFunctionsMenu = false;\r\n    this.selectedFunction = null;\r\n  }\r\n  onFunctionCategorySelected(category: string) {\r\n    this.selectedFunctionCategory = category;\r\n    this.selectedFunction = null;\r\n  }\r\n  onFunctionSelected(func: FunctionItem) { this.selectedFunction = func; }\r\n  onFunctionInserted(func: FunctionItem) {\r\n    this.insertTextAtCursor(func.syntax);\r\n    this.onCloseFunctionsMenu();\r\n  }\r\n\r\n  onOpenSymbolPicker() { this.showSymbolPicker = true; }\r\n  onCloseSymbolPicker() {\r\n    this.showSymbolPicker = false;\r\n    this.selectedSymbol = null;\r\n  }\r\n  onSymbolCategorySelected(category: string) {\r\n    this.selectedSymbolCategory = category;\r\n    this.selectedSymbol = null;\r\n  }\r\n  onSymbolSelected(symbol: SymbolItem) { this.selectedSymbol = symbol; }\r\n  onSymbolInserted(symbol: SymbolItem) {\r\n    this.insertTextAtCursor(symbol.symbol);\r\n    this.onCloseSymbolPicker();\r\n  }\r\n\r\n  onOpenCustomFunctionBuilder() { this.showCustomFunctionBuilder = true; }\r\n  onCloseCustomFunctionBuilder() { this.showCustomFunctionBuilder = false; }\r\n  onCustomFunctionCreated(customFunction: CustomFunction) {\r\n    this.extensionManager.registerCustomFunction(customFunction);\r\n    this.onCloseCustomFunctionBuilder();\r\n    this.selectedFunctionCategory = 'custom';\r\n    if (customFunction.syntax) {\r\n      this.insertTextAtCursor(customFunction.syntax);\r\n    }\r\n  }\r\n\r\n  onOpenVariableManager() { this.showVariableManager = true; }\r\n  onCloseVariableManager() { this.showVariableManager = false; }\r\n  onVariableSelected(variable: Variable) {\r\n  }\r\n  onVariableInserted(variable: Variable) {\r\n    const textToInsert = variable.type === DataType.FUNCTION \r\n      ? `${variable.name}()` \r\n      : variable.name;\r\n    \r\n    this.insertTextAtCursor(textToInsert);\r\n    this.onCloseVariableManager(); // Add missing modal close call\r\n  }\r\n  onVariableCreated(variable: Variable) {\r\n    this.evaluatorService.addVariable(variable);\r\n  }\r\n  onVariableDeleted(variable: Variable) {\r\n    this.evaluatorService.removeVariable(variable.name);\r\n  }\r\n\r\n  insertTextAtCursor(text: string) {\r\n    if (this.expressionTextarea) {\r\n      this.expressionTextarea.insertTextAtCursor(text);\r\n    }\r\n  }\r\n\r\n  analyzeExpression() {\r\n    if (!this.value.trim()) {\r\n      this.typeResult = null;\r\n      this.currentValidation = null;\r\n      this.validationChange.emit(null);\r\n      this.binaryTreeChange.emit(null);\r\n      this.fieldMappingChange.emit(null);\r\n      return;\r\n    }\r\n  \r\n    this.typeResult = this.evaluatorService.identifyExpressionType(this.value, this.editorConfig);\r\n    \r\n    if (this.typeResult?.typeValidation) {\r\n      this.currentValidation = this.typeResult.typeValidation;\r\n      this.validationChange.emit(this.typeResult.typeValidation);\r\n    } else {\r\n      this.currentValidation = null;\r\n      this.validationChange.emit(null);\r\n    }\r\n  \r\n    if (this.typeResult?.binaryTree) {\r\n      const isValid = this.typeResult?.typeValidation?.isValid !== false;\r\n      \r\n      if (isValid && this.typeResult.binaryTree.success) {\r\n        this.binaryTreeChange.emit(this.typeResult.binaryTree);\r\n        \r\n        // ✅ Emit field mapping data\r\n        const enhancedConfig = this.editorConfig as ExpressionEditorConfigEnhanced;\r\n        if (enhancedConfig?.variableMappings && enhancedConfig.variableMappings.length > 0) {\r\n          const mapping = enhancedConfig.variableMappings[0];\r\n          \r\n          const fieldMappingData: FieldMappingData = {\r\n            frontendField: mapping.frontendName,\r\n            backendField: mapping.backendName,\r\n            expression: this.value,\r\n            tree: this.typeResult.binaryTree,\r\n            timestamp: new Date().toISOString()\r\n          };\r\n          \r\n          this.fieldMappingChange.emit(fieldMappingData);\r\n          \r\n          console.log('💾 Field Mapping Data:');\r\n          console.log('  Frontend Field:', fieldMappingData.frontendField);\r\n          console.log('  Backend Field:', fieldMappingData.backendField);\r\n          console.log('  Expression:', fieldMappingData.expression);\r\n          console.log('  Tree:', fieldMappingData.tree.json);\r\n        }\r\n      } else {\r\n        this.binaryTreeChange.emit(null);\r\n        this.fieldMappingChange.emit(null);\r\n      }\r\n    }  \r\n  }\r\n  writeValue(value: string | null): void {\r\n    this.value = value || '';\r\n    if (this.value) {\r\n      this.analyzeExpression();\r\n    }\r\n  }\r\n\r\n  registerOnChange(fn: (value: string) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n  \r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n\r\n  getTextareaStyles(): any {\r\n    if (!this.textareaStyle) return {};\r\n    \r\n    return {\r\n      '--border-color': this.textareaStyle.borderColor || '#000000',\r\n      '--focus-border-color': this.textareaStyle.focusBorderColor || '#007bff',\r\n      '--valid-border-color': this.textareaStyle.validBorderColor || '#28a745',\r\n      '--error-border-color': this.textareaStyle.errorBorderColor || '#dc3545',\r\n      'border-width': this.textareaStyle.borderWidth || '2px',\r\n      'border-style': this.textareaStyle.borderStyle || 'solid',\r\n      'border-radius': this.textareaStyle.borderRadius || '4px',\r\n      'background-color': this.textareaStyle.backgroundColor || '#ffffff',\r\n      'color': this.textareaStyle.textColor || '#000000',\r\n      'font-size': this.textareaStyle.fontSize || '14px',\r\n      'font-family': this.textareaStyle.fontFamily || 'monospace',\r\n      'padding': this.textareaStyle.padding || '8px',\r\n      'height': this.textareaStyle.height || 'auto',\r\n      'width': this.textareaStyle.width || '100%'\r\n    };\r\n  }\r\n  \r\n  ngOnDestroy() {\r\n    if (this.debounceTimer) {\r\n      clearTimeout(this.debounceTimer);\r\n    }\r\n  }\r\n}\r\n","<!-- Simple Mode: Just Textarea -->\r\n<div *ngIf=\"simpleMode\" class=\"simple-expression-editor\">\r\n  <textarea\r\n    [(ngModel)]=\"value\"\r\n    (input)=\"onValueChange(value)\"\r\n    (blur)=\"onTextareaBlur()\"\r\n    [disabled]=\"disabled\"\r\n    [placeholder]=\"placeholder || 'Enter expression...'\"\r\n    [ngStyle]=\"getTextareaStyles()\"\r\n    [class.valid]=\"currentValidation && currentValidation.isValid\"\r\n    [class.invalid]=\"currentValidation && !currentValidation.isValid\"\r\n    class=\"simple-textarea\"\r\n    rows=\"1\">\r\n  </textarea>\r\n</div>\r\n\r\n<!-- Full Mode: Complete Expression Editor -->\r\n<div *ngIf=\"!simpleMode\" class=\"expression-editor-container\">\r\n  <lib-expression-header \r\n    [editorConfig]=\"editorConfig\">\r\n  </lib-expression-header>\r\n\r\n  <div class=\"editor-section\">\r\n    <lib-division-toggle \r\n      [editorConfig]=\"editorConfig\"\r\n      (configChange)=\"onConfigChange($event)\">\r\n    </lib-division-toggle>\r\n\r\n    <lib-expression-textarea\r\n      [disabled]=\"disabled\"\r\n      [editorConfig]=\"editorConfig\"\r\n      [currentValidation]=\"currentValidation\"\r\n      [(ngModel)]=\"value\"\r\n      (valueChange)=\"onValueChange($event)\"\r\n      (blur)=\"onTextareaBlur()\">\r\n    </lib-expression-textarea>\r\n    \r\n    <lib-expression-controls\r\n      [disabled]=\"disabled\"\r\n      [showCustomFunctionBuilder]=\"showCustomFunctionBuilder\"\r\n      [hasVariables]=\"variables.length > 0\"\r\n      (toggleEditor)=\"onToggleEditor()\"\r\n      (clearExpression)=\"onClearExpression()\"\r\n      (openFunctionsMenu)=\"onOpenFunctionsMenu()\"\r\n      (openSymbolPicker)=\"onOpenSymbolPicker()\"\r\n      (openCustomFunctionBuilder)=\"onOpenCustomFunctionBuilder()\"\r\n      (closeCustomFunctionBuilder)=\"onCloseCustomFunctionBuilder()\"\r\n      (customFunctionCreated)=\"onCustomFunctionCreated($event)\"\r\n      (openVariableManager)=\"onOpenVariableManager()\">\r\n    </lib-expression-controls>\r\n  </div>\r\n  \r\n  <lib-expression-info\r\n    [value]=\"value\"\r\n    [typeResult]=\"typeResult\"\r\n    [currentValidation]=\"currentValidation\">\r\n  </lib-expression-info>\r\n\r\n  <!-- Modals -->\r\n  <lib-functions-menu\r\n    [showFunctionsMenu]=\"showFunctionsMenu\"\r\n    [functionCategories]=\"functionCategories\"\r\n    [selectedFunctionCategory]=\"selectedFunctionCategory\"\r\n    [selectedFunction]=\"selectedFunction\"\r\n    (closeFunctionsMenu)=\"onCloseFunctionsMenu()\"\r\n    (functionCategorySelected)=\"onFunctionCategorySelected($event)\"\r\n    (functionSelected)=\"onFunctionSelected($event)\"\r\n    (functionInserted)=\"onFunctionInserted($event)\">\r\n  </lib-functions-menu>\r\n\r\n  <lib-symbol-picker\r\n    [showSymbolPicker]=\"showSymbolPicker\"\r\n    [symbolCategories]=\"symbolCategories\"\r\n    [selectedSymbolCategory]=\"selectedSymbolCategory\"\r\n    [selectedSymbol]=\"selectedSymbol\"\r\n    (closeSymbolPicker)=\"onCloseSymbolPicker()\"\r\n    (symbolCategorySelected)=\"onSymbolCategorySelected($event)\"\r\n    (symbolSelected)=\"onSymbolSelected($event)\"\r\n    (symbolInserted)=\"onSymbolInserted($event)\">\r\n  </lib-symbol-picker>\r\n\r\n  <lib-variable-manager\r\n    [showVariableManager]=\"showVariableManager\"\r\n    [variables]=\"variables\"\r\n    [allowVariableCreation]=\"enhancedConfig?.allowVariableCreation !== false\"\r\n    (closeVariableManager)=\"onCloseVariableManager()\"\r\n    (variableSelected)=\"onVariableSelected($event)\"\r\n    (variableInserted)=\"onVariableInserted($event)\"\r\n    (variableCreated)=\"onVariableCreated($event)\"\r\n    (variableDeleted)=\"onVariableDeleted($event)\">\r\n  </lib-variable-manager>\r\n  \r\n</div>","/*\r\n * Public API Surface of transex\r\n */\r\n\r\n// Core components\r\nexport * from './lib/components/expression-editor/expression-editor.component';\r\nexport * from './lib/components/expression-editor/custom-function-builder/custom-function-builder.component';\r\n\r\n// Sub-components (actively used)\r\nexport * from './lib/components/expression-editor/expression-header/expression-header.component';\r\nexport * from './lib/components/expression-editor/division-toggle/division-toggle.component';\r\nexport * from './lib/components/expression-editor/expression-textarea/expression-textarea.component';\r\nexport * from './lib/components/expression-editor/expression-controls/expression-controls.component';\r\nexport * from './lib/components/expression-editor/expression-info/expression-info.component';\r\nexport * from './lib/components/expression-editor/functions-menu/functions-menu.component';\r\nexport * from './lib/components/expression-editor/symbol-picker/symbol-picker.component';\r\nexport * from './lib/components/expression-editor/variable-manager/variable-manager.component';\r\n\r\n// Services\r\nexport * from './lib/services/expression-evaluator/expression-evaluator.service';\r\nexport * from './lib/services/extension-manager/extension-manager.service';\r\nexport * from './lib/services/type-analyzer/type-analyzer.service';\r\nexport * from './lib/services/validation/validation.service';\r\nexport * from './lib/services/variable-manager/variable-manager.service';\r\nexport * from './lib/services/binary-tree-parser/binary-tree-parser.service';\r\nexport * from './lib/services/configuration/configuration.service';\r\nexport * from './lib/services/tokenizer/tokenizer.service';\r\nexport * from './lib/services/expression-pattern/expression-pattern.service';\r\n\r\n// Interfaces\r\nexport * from './lib/interfaces/shared.interfaces';\r\nexport * from './lib/interfaces/core/extensibility.interfaces';\r\n\r\n// Data\r\nexport * from './lib/data/function-categories.data';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ExtensionManagerService","i2","i1.VariableManagerService","i2.ExpressionPatternService","i1.TokenizerService","i1.TypeAnalyzerService","i2.ValidationService","i3.VariableManagerService","i4.BinaryTreeParserService","i5.ConfigurationService","i1.ExpressionEvaluatorService","i2.ExtensionManagerService","i3","i4"],"mappings":"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"}