{"version":3,"file":"udev-tn-rule-builder.mjs","sources":["../../../projects/rule-builder/src/lib/models/expression.model.ts","../../../projects/rule-builder/src/lib/models/rule.model.ts","../../../projects/rule-builder/src/lib/directives/template.directive.ts","../../../projects/rule-builder/src/lib/components/condition/condition.component.ts","../../../projects/rule-builder/src/lib/components/condition/condition.component.html","../../../projects/rule-builder/src/lib/components/rule-builder/rule-builder.component.ts","../../../projects/rule-builder/src/lib/components/rule-builder/rule-builder.component.html","../../../projects/rule-builder/src/lib/rule-builder.module.ts","../../../projects/rule-builder/src/public-api.ts","../../../projects/rule-builder/src/udev-tn-rule-builder.ts"],"sourcesContent":["import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { v4 as uuidv4 } from 'uuid';\nimport { Criterion } from './criterion.model';\n\nexport class Expression {\n    readonly uuid: string = uuidv4();\n    field?: string;\n    type?: 'GROUP' | 'CONDITION' = 'CONDITION';\n    operator?: 'equals' | 'ne' | 'contains' | 'gt' | 'goe' | 'lt' | 'loe' = 'equals';\n    connector: 'AND' | 'OR' = 'AND';\n    value: any;\n    isNegated: boolean = false;\n\n    parent?: Expression;\n    children: Array<Expression> = [];\n\n    suggestions: Array<Criterion> = [];\n    valueType: 'number' | 'boolean' | 'text' = 'text';\n\n    constructor(type?: 'GROUP' | 'CONDITION', suggestions: Array<Criterion> = []) {\n        if (type) {\n            this.type = type;\n        }\n        if (suggestions) {\n            this.suggestions = suggestions;\n        }\n    }\n\n    addChild(type: 'GROUP' | 'CONDITION' = 'CONDITION'): FormGroup {\n        // Add current field to suggestion (should be optional)\n        if (this.field && !this.suggestions.find(suggestion => suggestion.name == this.field)) {\n            this.suggestions.push({ name: this.field, type: this.valueType })\n        }\n\n        // Build the new child\n        const child = new Expression('CONDITION', this.suggestions);\n        child.type = type;\n\n        // Join the list\n        this.children.push(child);\n        child.parent = this;\n\n        // Build the form\n        return child.buildForm();\n    }\n\n    buildForm(): FormGroup {\n        const formGroup: FormGroup = new FormGroup({\n            connector: new FormControl(this.connector, [Validators.required])\n        });\n        const childrenForm: FormArray = new FormArray<any>([]);\n        for (const child of this.children) {\n            childrenForm.push(child.buildForm());\n        }\n        formGroup.addControl('children', childrenForm);\n\n        if (!this.type || this.type === 'CONDITION') {\n            formGroup.addControl('literal', new FormControl(this.field, [Validators.required]));\n            formGroup.addControl('value', new FormControl(this.value, [Validators.required]));\n            formGroup.addControl('operator', new FormControl(this.operator, [Validators.required, Validators.pattern('equals|ne|contains|gt|goe|lt|loe')]));\n        }\n\n        return formGroup;\n    }\n}\n","import { Expression } from \"./expression.model\";\n\nexport class Rule {\n    name: string = \"\";\n    description?: string;\n\n    expressions: Array<Expression> = [new Expression()];\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n/**\n *  Content can be customized using this directive.\n * \n * Examples:\n * <ng-template udTemplate=\"condition\" let-formGroup>\n *    <div class=\"input-group gap-4\" [formGroup]=\"formGroup\">\n *       <input\n *         type=\"text\"\n *         class=\"form\"\n *         formControlName=\"literal\"\n *         class=\"form-control\"\n *       />\n *    </div>\n * </ng-template>\n */\n@Directive({\n  selector: '[udTemplate]'\n})\nexport class TemplateDirective {\n  @Input({ required: false }) type?: string;\n\n  constructor(public templateRef: TemplateRef<any>) { }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, TemplateRef } from '@angular/core';\nimport { AbstractControl, ControlContainer, FormArray, FormGroup } from '@angular/forms';\nimport { Expression } from '../../models/expression.model';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'ud-condition',\n  templateUrl: './condition.component.html',\n  styleUrls: ['./condition.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConditionComponent implements OnInit, OnDestroy {\n  @Input({ required: false })\n  formArrayName?: string | number;\n  @Input({ required: false })\n  idx: number = 0;\n  @Input({ required: false })\n  expression: Expression = new Expression();\n  @Input({required: false})\n  template?: TemplateRef<any>;\n\n  @Output()\n  onRemoveExpression: EventEmitter<number> = new EventEmitter();\n\n  // data\n  childForm?: FormGroup;\n  readonly operators: Array<{ label: string, value: string, icon: string }> = [\n    { label: 'equals', value: 'equals', icon: 'fa-equals' },\n    { label: 'not equal to', value: 'ne', icon: 'fa-not-equal' },\n    { label: 'contains', value: 'contains', icon: 'fa-quote-right' },\n    { label: 'greater than', value: 'gt', icon: 'fa-greater-than' },\n    { label: 'greater than or equal to', value: 'goe', icon: 'fa-greater-than-equal' },\n    { label: 'less than', value: 'lt', icon: 'fa-less-than' },\n    { label: 'less than or equal to', value: 'loe', icon: 'fa-less-than-equal' },\n  ];\n  subscribtions: Subscription[] = [];\n\n  constructor(\n    @Optional() private readonly parentContainer: ControlContainer\n  ) {\n  }\n\n  ngOnInit(): void {\n    // Join parent\n    let parent = this.parentContainer?.control;\n    if (parent instanceof FormGroup) {\n      this.childForm = parent;\n    } else if (parent instanceof FormArray) {\n      this.childForm = parent.at(this.idx) as FormGroup;\n    } else {\n      // Init a new one\n      this.childForm = this.expression.buildForm();\n    }\n\n    // add a custom validator for value\n    this.childForm.addValidators((formGroup: AbstractControl<any, any>) => {\n      const { literal, value } = formGroup.value;\n      const foundSuggestion = this.expression.suggestions.find(suggestion => suggestion.name === literal);\n      if (foundSuggestion) {\n        if (foundSuggestion.type === 'number' && isNaN(value)) {\n          return { 'type-error': 'Please check your number value.' };\n        } else if (foundSuggestion.type === 'boolean' && (value != 'true' && value != 'false')) {\n          return { 'type-error': 'Please check your boolean value.' };\n        }\n      }\n      return null;\n    });\n\n    let subscription;\n    // Watch changes\n    subscription = this.childForm.get('value')?.valueChanges.subscribe(value => {\n      // Update value\n      this.expression.value = value;\n    });\n    if (subscription) {\n      this.subscribtions.push(subscription);\n    }\n\n    // Watch literal changes\n    subscription = this.childForm.get('literal')?.valueChanges\n      .subscribe(value => {\n        // Update value\n        this.expression.field = value;\n\n        // Detect type\n        let defaultType: 'number' | 'boolean' | 'text' = 'text';\n        const foundSuggestion = this.expression.suggestions.find(suggestion => suggestion.name === value);\n        if (foundSuggestion) {\n          defaultType = foundSuggestion.type;\n        }\n        this.expression.valueType = defaultType;\n      });\n    if (subscription) {\n      this.subscribtions.push(subscription);\n    }\n  }\n\n  /**\n   * Adds a child element to the list of conditions.\n   * \n   * @param type The type of child element to add. Default is 'CONDITION'.\n   */\n  addChild(type: 'GROUP' | 'CONDITION' = 'CONDITION'): void {\n    if (!this.childForm?.valid) {\n      console.warn('Please check your rule before add a new one.');\n      return;\n    }\n\n    (this.childForm?.get('children') as FormArray).push(this.expression.addChild(type));\n  }\n\n  /**\n   * Removes the expression from the current child form.\n   */\n  removeExpression(): void {\n    if (this.expression.parent) {\n      // Delete from this formArray.\n      (this.parentContainer.control as FormArray).removeAt(this.idx);\n      delete this.expression.parent.children[this.idx];\n      this.expression.parent.children = this.expression.parent.children.filter(ex => ex);\n\n      return;\n    }\n\n    this.onRemoveExpression.emit(this.idx);\n  }\n\n  ngOnDestroy(): void {\n    // Destroy listeners\n    while (this.subscribtions.length > 0) {\n      this.subscribtions.pop()?.unsubscribe();\n    }\n  }\n\n}\n","<div class=\"card\" [class.dashed-border]=\"expression.type === 'GROUP'\">\n  <div\n    class=\"rule-editor-collapse-btn d-flex flex-row justify-content-between align-items-center w-100 card-img-top p-2\"\n  >\n    <button\n      class=\"btn no-bg w-75 text-start collapsed\"\n      type=\"button\"\n      data-bs-toggle=\"collapse\"\n      [attr.data-bs-target]=\"'#' + expression.uuid\"\n      aria-expanded=\"false\"\n      [attr.aria-controls]=\"expression.uuid\"\n    >\n      <i class=\"fas fa-chevron-right me-2\"></i>\n      If\n    </button>\n    <button\n      class=\"btn rule-editor-remove-btn no-bg\"\n      (click)=\"removeExpression()\"\n      [disabled]=\"idx == 0 && !expression.parent\"\n    >\n      <i class=\"fa-solid fa-trash\"></i>\n    </button>\n  </div>\n  <div\n    class=\"collapse card-body\"\n    [id]=\"expression.uuid\"\n    [formGroup]=\"childForm\"\n    *ngIf=\"childForm\"\n  >\n    <div class=\"card-text lead d-flex flex-column gap-2\">\n      <ng-container *ngIf=\"template; else defaultProjection\">\n        <ng-container\n          *ngTemplateOutlet=\"template; context: { $implicit: childForm }\"\n        ></ng-container>\n      </ng-container>\n      <ng-template #defaultProjection>\n        <div *ngIf=\"expression.type === 'CONDITION'\" class=\"input-group gap-4\">\n          <input\n            type=\"text\"\n            class=\"form\"\n            formControlName=\"literal\"\n            class=\"form-control\"\n            list=\"values\"\n          />\n          <datalist id=\"values\">\n            <option *ngFor=\"let suggestion of expression.suggestions\">\n              {{ suggestion.name }}\n            </option>\n          </datalist>\n          <div class=\"dropdown\">\n            <button\n              class=\"btn dropdown-toggle\"\n              type=\"button\"\n              data-bs-toggle=\"dropdown\"\n              aria-expanded=\"false\"\n              [title]=\"childForm.get('operator')?.value\"\n            >\n              <i\n                class=\"fa-solid\"\n                [class.fa-equals]=\"\n                  childForm.get('operator')?.value === 'equals'\n                \"\n                [class.fa-not-equal]=\"childForm.get('operator')?.value === 'ne'\"\n                [class.fa-quote-right]=\"\n                  childForm.get('operator')?.value === 'contains'\n                \"\n                [class.fa-greater-than]=\"\n                  childForm.get('operator')?.value === 'gt'\n                \"\n                [class.fa-greater-than-equal]=\"\n                  childForm.get('operator')?.value === 'goe'\n                \"\n                [class.fa-less-than]=\"childForm.get('operator')?.value === 'lt'\"\n                [class.fa-less-than-equal]=\"\n                  childForm.get('operator')?.value === 'loe'\n                \"\n              ></i>\n            </button>\n            <ul class=\"dropdown-menu\">\n              <li\n                *ngFor=\"let operator of operators\"\n                (click)=\"childForm.get('operator')?.setValue(operator.value)\"\n              >\n                <a\n                  class=\"dropdown-item\"\n                  [class.active]=\"\n                    childForm.get('operator')?.value === operator.value\n                  \"\n                >\n                  <i class=\"fa-solid\" [class]=\"operator.icon\"></i>\n                  {{ operator.label }}\n                </a>\n              </li>\n            </ul>\n          </div>\n          <ng-container [ngSwitch]=\"expression.valueType\">\n            <select\n              *ngSwitchCase=\"'boolean'\"\n              class=\"form-select\"\n              formControlName=\"value\"\n            >\n              <option value=\"\" disabled selected hidden>\n                Select your value\n              </option>\n              <option value=\"true\">TRUE</option>\n              <option value=\"false\">FALSE</option>\n            </select>\n            <div *ngSwitchCase=\"expression\">output</div>\n            <input\n              *ngSwitchDefault\n              [type]=\"expression.valueType\"\n              formControlName=\"value\"\n              class=\"form-control\"\n              placeholder=\"value\"\n              [class.is-invalid]=\"childForm.hasError('type-error')\"\n            />\n          </ng-container>\n        </div>\n      </ng-template>\n\n      <div\n        *ngFor=\"let child of expression.children; let i = index\"\n        class=\"d-flex flex-row gap-2\"\n        formArrayName=\"children\"\n      >\n        <div\n          class=\"d-flex align-items-center\"\n          [formArrayName]=\"i\"\n          *ngIf=\"!(i == 0 && expression.type == 'GROUP')\"\n        >\n          <select\n            class=\"form-select bg-success-subtle text-success operator-select\"\n            formControlName=\"connector\"\n          >\n            <option value=\"AND\">AND</option>\n            <option value=\"OR\">OR</option>\n          </select>\n        </div>\n        <ud-condition\n          class=\"flex-fill\"\n          [idx]=\"i\"\n          [expression]=\"child\"\n          [template]=\"template\"\n        />\n      </div>\n\n      <div class=\"extra-btns d-grid gap-2 d-sm-block\">\n        <button class=\"btn btn-sm\" type=\"button\" (click)=\"addChild()\">\n          <i class=\"fa-regular fa-square-plus\"></i>\n          <span class=\"mx-2\">Add condition</span>\n        </button>\n        <button class=\"btn btn-sm\" type=\"button\" (click)=\"addChild('GROUP')\">\n          <i class=\"fa-solid fa-object-group\"></i>\n          <span class=\"mx-2\">Add inner group</span>\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, ContentChild, EventEmitter, OnDestroy, OnInit, Output, TemplateRef } from '@angular/core';\nimport { FormArray } from '@angular/forms';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { TemplateDirective } from '../../directives/template.directive';\nimport { Rule } from '../../models/rule.model';\nimport { Expression } from '../../models/expression.model';\n\n@Component({\n  selector: 'ud-rule-builder',\n  templateUrl: './rule-builder.component.html',\n  styleUrls: ['./rule-builder.component.scss'],\n})\nexport class RuleBuilderComponent implements OnInit, OnDestroy {\n  ruleForm?: FormGroup;\n  readonly rule: Rule = new Rule();\n\n  @Output()\n  onValueChanges: EventEmitter<Rule> = new EventEmitter<Rule>();\n\n  @ContentChild(TemplateDirective, {read: TemplateRef}) conditionTemplate?: TemplateRef<any>;\n\n  private subscription?: Subscription;\n\n  ngOnInit(): void {\n    this.initForms();\n  }\n\n  /**\n   * Initializes the form of rule and its conditions.\n   */\n  private initForms(): void {\n    this.ruleForm = new FormGroup({\n      name: new FormControl(this.rule.name, [Validators.required]),\n      description: new FormControl(this.rule.description),\n      expressions: new FormArray([])\n    });\n\n    if (!Array.isArray(this.rule.expressions) || this.rule.expressions.length == 0) {\n      // Add empty one\n      this.rule.expressions = [new Expression('CONDITION')];\n    }\n\n    const expressionsArray: FormArray = this.expressionsArray;\n    for (const _expression of this.rule.expressions) {\n      expressionsArray.push(_expression.buildForm());\n    }\n\n    // Notify changes\n    this.subscription = this.ruleForm.valueChanges.subscribe(_changes => {\n      this.onValueChanges.emit(this.rule);\n    });\n  }\n\n  private get expressionsArray(): FormArray {\n    return this.ruleForm?.get('expressions') as FormArray || [];\n  }\n\n  /**\n   * Adds a new expression to the list of expressions for the current rule.\n   * \n   * @param type The type of expression to add. Default is 'CONDITION'.\n   */\n  addNewExpression(type: 'GROUP' | 'CONDITION' = 'CONDITION'): void {\n    if (!this.expressionsArray.valid) {\n      console.warn('Please check your rule before add a new one.');\n      return;\n    }\n    const newExpression = new Expression();\n    newExpression.type = type;\n    this.rule.expressions.push(newExpression);\n    this.expressionsArray.push(newExpression.buildForm());\n  }\n\n  /**\n   * Removes the expression at the specified index.\n   * \n   * @param idx The index of the expression to remove. If not provided, removes the last expression.\n   */\n  removeExpression(idx?: number): void {\n    if (this.expressionsArray.length == 1) {\n      return;\n    }\n\n    if (idx != 0 && (!idx || idx > this.expressionsArray.length)) {\n      // remove the last one\n      idx = this.expressionsArray.length - 1;\n    }\n    delete this.rule.expressions[idx];\n    this.rule.expressions = this.rule.expressions.filter(exp => exp);\n    this.expressionsArray.removeAt(idx);\n  }\n\n  /**\n   * Adds a new group of expressions.\n   */\n  addNewGroup(): void {\n    this.addNewExpression('GROUP');\n  }\n\n  ngOnDestroy(): void {\n    this.subscription?.unsubscribe();\n  }\n}\n","<form class=\"rule-editor px-2\" [formGroup]=\"ruleForm\" *ngIf=\"ruleForm\">\n  <div class=\"rule-editor-header\">\n    <div class=\"rule-editor-title form-group py-3\">\n      <input\n        formControlName=\"name\"\n        type=\"text\"\n        placeholder=\"Name\"\n        class=\"form-control form-control-lg\"\n      />\n      <input\n        formControlName=\"description\"\n        type=\"text\"\n        placeholder=\"Description (optional)\"\n        class=\"form-control form-control-sm\"\n      />\n    </div>\n  </div>\n  <div class=\"rule-editor-content\">\n    <div\n      class=\"rule-editor-expression form-group mb-3\"\n      formArrayName=\"expressions\"\n      *ngFor=\"let expression of rule.expressions; let idx = index\"\n    >\n      <ud-condition\n        [idx]=\"idx\"\n        [formArrayName]=\"idx\"\n        [expression]=\"expression\"\n        [template]=\"conditionTemplate\"\n        (onRemoveExpression)=\"removeExpression($event)\"\n      />\n    </div>\n    <div class=\"rule-editor-add-btn\">\n      <button class=\"btn\" (click)=\"addNewExpression()\">\n        <i class=\"fa-regular fa-square-plus\"></i>\n        <span class=\"mx-2\">Add a new condition</span>\n      </button>\n      <button class=\"btn\" (click)=\"addNewGroup()\">\n        <i class=\"fa-solid fa-object-group\"></i>\n        <span class=\"mx-2\">Add a new group</span>\n      </button>\n    </div>\n  </div>\n</form>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n/** Internal */\nimport { TemplateDirective } from './directives/template.directive';\nimport { RuleBuilderComponent } from './components/rule-builder/rule-builder.component';\nimport { ConditionComponent } from './components/condition/condition.component';\n\n@NgModule({\n    imports: [\n        FormsModule,\n        ReactiveFormsModule,\n        CommonModule,\n    ],\n    exports: [\n        RuleBuilderComponent,\n        TemplateDirective,\n    ],\n    declarations: [\n        TemplateDirective,\n        RuleBuilderComponent,\n        ConditionComponent\n    ],\n})\nexport class RuleBuilderModule { }\n","/*\n * Public API Surface of rule-builder\n */\n\n/** Models */\nexport * from './lib/models/criterion.model';\nexport * from './lib/models/expression.model';\nexport * from './lib/models/rule.model';\n\n/** Services */\n\n/** Directive */\nexport * from './lib/directives/template.directive';\n\n/** Components */\nexport * from './lib/components/rule-builder/rule-builder.component';\n\n/** Global */\nexport * from './lib/rule-builder.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i3.ConditionComponent"],"mappings":"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"}