{"version":3,"file":"talenra-ngx-base-query-builder.mjs","sources":["../../../projects/ngx-base/query-builder/src/query-builder.types.ts","../../../projects/ngx-base/query-builder/src/query-builder.translation.ts","../../../projects/ngx-base/query-builder/src/query-condition-selector/query-condition-selector.component.ts","../../../projects/ngx-base/query-builder/src/query-condition-selector/query-condition-selector.component.html","../../../projects/ngx-base/query-builder/src/query-selection-field/query-selection-field.component.ts","../../../projects/ngx-base/query-builder/src/query-selection-field/query-selection-field.component.html","../../../projects/ngx-base/query-builder/src/query-builder/query-builder.component.ts","../../../projects/ngx-base/query-builder/src/query-builder/query-builder.component.html","../../../projects/ngx-base/query-builder/public-api.ts","../../../projects/ngx-base/query-builder/talenra-ngx-base-query-builder.ts"],"sourcesContent":["/**\n * Operators accepted by the query selection rule in which the type of value is a string. The operator is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderStringOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderStringOperator = {\n  Equal: 'equal',\n  NotEqual: 'notEqual',\n  StartsWith: 'startsWith',\n  EndsWith: 'endsWith',\n  NotStartsWith: 'notStartsWith',\n  NotEndsWith: 'notEndsWith',\n  Contains: 'contains',\n  NotContains: 'notContains',\n  From: 'from',\n  To: 'to',\n} as const;\n\n/**\n * Type of operators accepted by the query selection rule.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderStringOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderStringOperator = (typeof QueryBuilderStringOperator)[keyof typeof QueryBuilderStringOperator];\n\n/**\n * Operators accepted by the query selection rule in which the type of value is an option of multiple strings.\n * The operator is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderOptionOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderOptionOperator = {\n  Contains: 'contains',\n  NotContains: 'notContains',\n} as const;\n\n/**\n * Type of operators accepted by the query selection rule.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderOptionOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderOptionOperator = (typeof QueryBuilderOptionOperator)[keyof typeof QueryBuilderOptionOperator];\n\n/**\n * Operators accepted by the query selection rule in which the type of value is a number.\n * The operator is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderNumberOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderNumberOperator = {\n  Equal: 'equal',\n  NotEqual: 'notEqual',\n  Greater: 'greater',\n  Lesser: 'lesser',\n  GreaterOrEqual: 'greaterOrEqual',\n  LesserOrEqual: 'lesserOrEqual',\n} as const;\n\n/**\n * Type of operators accepted by the query selection rule.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderNumberOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderNumberOperator = (typeof QueryBuilderNumberOperator)[keyof typeof QueryBuilderNumberOperator];\n\n/**\n * Operators accepted by the query selection rule in which the type of value is a date.\n * The operator is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderDateOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderDateOperator = {\n  Equal: 'equal',\n  NotEqual: 'notEqual',\n  Before: 'before',\n  After: 'after',\n  BeforeOrEqual: 'beforeOrEqual',\n  AfterOrEqual: 'afterOrEqual',\n} as const;\n\n/**\n * Type of operators accepted by the query selection rule.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderDateOperator } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderDateOperator = (typeof QueryBuilderDateOperator)[keyof typeof QueryBuilderDateOperator];\n\n/**\n * Actions that can be performed on rules of a query.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderRuleAction } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderRuleAction = {\n  AddRule: 'addRule',\n  AddRuleGroup: 'addRuleGroup',\n  DeleteElement: 'deleteElement',\n  ConditionChange: 'conditionChange',\n} as const;\n\n/**\n * Type of actions which can be performed on rules of a query.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderRuleAction } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderRuleAction = (typeof QueryBuilderRuleAction)[keyof typeof QueryBuilderRuleAction];\n\n/**\n * Conditions accepted by the query. The operator is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderCondition } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderCondition = {\n  And: 'and',\n  Or: 'or',\n} as const;\n\n/**\n * Type of condition accepted by the query.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderCondition } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderCondition = (typeof QueryBuilderCondition)[keyof typeof QueryBuilderCondition];\n\n/**\n * Value types accepted by the query selection rule. The value type is used to determine the type of comparison that is to be performed.\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderValueType } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport const QueryBuilderValueType = {\n  String: 'string',\n  Option: 'option',\n  Number: 'number',\n  Date: 'date',\n  Boolean: 'boolean',\n} as const;\n\n/**\n * Type of value types accepted by the query selection rule.\n *\n * ### Import\n *\n * ```typescript\n * import { TQueryBuilderValueType } from '@talenra/ngx-base/query-builder';\n * ```\n */\nexport type TQueryBuilderValueType = (typeof QueryBuilderValueType)[keyof typeof QueryBuilderValueType];\n","import { Dictionary } from '@talenra/ngx-base/shared';\n\n/** @internal */\nexport const translations: Dictionary = {\n  'de-CH': {\n    equal: 'gleich',\n    notEqual: 'ungleich',\n    startsWith: 'beginnt mit',\n    endsWith: 'endet mit',\n    notStartsWith: 'beginnt nicht mit',\n    notEndsWith: 'endet nicht mit',\n    contains: 'enthält',\n    notContains: 'enthält nicht',\n    greater: 'grösser als',\n    lesser: 'weniger als',\n    greaterOrEqual: 'grösser als oder gleich',\n    lesserOrEqual: 'kleiner als oder gleich',\n    before: 'davor',\n    after: 'danach',\n    beforeOrEqual: 'davor oder gleich',\n    afterOrEqual: 'danach oder gleich',\n    filter: 'Filter',\n    operator: 'Bedingung',\n    chooseRuleOrGroup: 'Filter oder Gruppe wählen',\n    and: 'Und',\n    or: 'Oder',\n    from: 'von',\n    to: 'bis',\n    noEntries: 'Keine Ergebnisse gefunden.',\n    deleteFilter: 'Filter löschen',\n    deleteGroup: 'Filtergruppe löschen',\n    addFilter: 'Filter hinzufügen',\n    addGroup: 'Filtergruppe hinzufügen',\n  },\n  'fr-CH': {\n    equal: 'égal à',\n    notEqual: 'inégale à',\n    startsWith: 'commençant par',\n    endsWith: 'se termine par',\n    notStartsWith: 'ne commence pas par',\n    notEndsWith: 'ne se termine pas par',\n    contains: 'contient',\n    notContains: 'ne comprend pas',\n    greater: 'plus grande',\n    lesser: 'moins',\n    greaterOrEqual: 'plus grand ou égal',\n    lesserOrEqual: 'moins ou égal',\n    before: 'avant',\n    after: 'après',\n    beforeOrEqual: 'avant ou égal',\n    afterOrEqual: 'après ou égal',\n    filter: 'Filtre',\n    operator: 'Opérateur',\n    chooseRuleOrGroup: 'Choisir un filtre ou un groupe',\n    and: 'et',\n    or: 'ou',\n    from: 'de',\n    to: 'à',\n    noEntries: 'Aucun résultat trouvé.',\n    deleteFilter: 'Supprimer le filtre',\n    deleteGroup: 'Supprimer le groupe de filtres',\n    addFilter: 'Ajouter un filtre',\n    addGroup: 'Ajouter un groupe de filtres',\n  },\n  'it-CH': {\n    equal: 'uguale',\n    notEqual: 'disuguale',\n    startsWith: 'inizia con',\n    endsWith: 'termina con',\n    notStartsWith: 'non inizia con',\n    notEndsWith: 'non termina con',\n    contains: 'contiene',\n    notContains: 'non contiene',\n    greater: 'maggiore',\n    lesser: 'inferiore',\n    greaterOrEqual: 'maggiore o uguale',\n    lesserOrEqual: 'minore o uguale',\n    before: 'prima',\n    after: 'in seguito',\n    beforeOrEqual: 'prima o uguale',\n    afterOrEqual: 'in seguito o uguale',\n    filter: 'Filtro',\n    operator: 'Operatore',\n    chooseRuleOrGroup: 'Scegli regola o gruppo',\n    and: 'e',\n    or: 'o',\n    from: 'da',\n    to: 'a',\n    noEntries: 'Nessun risultato trovato.',\n    deleteFilter: 'Elimina filtro',\n    deleteGroup: 'Elimina gruppo di filtri',\n    addFilter: 'Aggiungi filtro',\n    addGroup: 'Aggiungi gruppo di filtri',\n  },\n  'en-US': {\n    equal: 'equal',\n    notEqual: 'not equal',\n    startsWith: 'starts with',\n    endsWith: 'ends with',\n    notStartsWith: 'does not start with',\n    notEndsWith: 'does not end with',\n    contains: 'contains',\n    notContains: 'does not contain',\n    greater: 'greater',\n    lesser: 'lesser',\n    greaterOrEqual: 'greater or equal',\n    lesserOrEqual: 'lesser or equal',\n    before: 'before',\n    after: 'after',\n    beforeOrEqual: 'before or equal',\n    afterOrEqual: 'after or equal',\n    filter: 'Filter',\n    operator: 'Operator',\n    chooseRuleOrGroup: 'Choose rule or group',\n    and: 'and',\n    or: 'or',\n    from: 'from',\n    to: 'to',\n    noEntries: 'No results found.',\n    deleteFilter: 'Delete filter',\n    deleteGroup: 'Delete filter group',\n    addFilter: 'Add filter',\n    addGroup: 'Add filter group',\n  },\n};\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  LOCALE_ID,\n  model,\n  output,\n  Signal,\n  inject,\n} from '@angular/core';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { TLocale } from '@talenra/ngx-base/shared';\nimport { TooltipDirective } from '@talenra/ngx-base/tooltip';\nimport { QueryBuilderCondition, TQueryBuilderCondition, TQueryBuilderRuleAction } from '../query-builder.types';\nimport { translations } from '../query-builder.translation';\n\n/**\n * Convert the Operators object to an array of string values.\n */\nconst conditionEntries: string[] = Object.entries(QueryBuilderCondition).map(([, value]) => value);\n\n/**\n * The `talenra-query-condition-selector` component is a query condition selector component.\n * It is used to select the condition for the query and to perform actions on the query.\n * The actions allow the user to delete the query or add a new queries, subqueries and rules.\n *\n * ```html\n * <talenra-query-condition-selector\n *  [(activeCondition)]=\"activeCondition\"\n *  [disableRuleAction]=\"disableRuleAction\"\n *  [dynamicLocale]=\"dynamicLocale\"\n *  (actionButton)=\"onActionChange($event)\">\n * </talenra-query-condition-selector>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { QueryConditionSelectorComponent } from '@talenra/ngx-base/query-builder';\n * ```\n */\n@Component({\n  selector: 'talenra-query-condition-selector',\n  imports: [ButtonComponent, TooltipDirective],\n  templateUrl: './query-condition-selector.component.html',\n  styleUrl: './query-condition-selector.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QueryConditionSelectorComponent {\n  /**\n   * The condition that is currently active.\n   *\n   * ```html\n   * <talenra-query-condition-selector\n   *  [(activeCondition)]=\"activeCondition\">\n   * </talenra-query-condition-selector>\n   * ```\n   */\n  activeCondition = model<TQueryBuilderCondition>(QueryBuilderCondition.And);\n\n  /**\n   * The actions that are disabled or hidden.\n   *\n   * ```html\n   * <talenra-query-condition-selector\n   *  [disabledRuleActions]=\"disabledRuleActions\">\n   * </talenra-query-condition-selector>\n   * ```\n   */\n  disabledRuleActions = input<TQueryBuilderRuleAction[]>([]);\n\n  /**\n   * Locale to dynamically overwrite the app's locale.\n   * Allowed values, see: Locale\n   *\n   * ```html\n   * <talenra-query-condition-selector\n   *  [dynamicLocale]=\"dynamicLocale\">\n   * </talenra-query-condition-selector>\n   * ```\n   *\n   * @see {@link Locale}\n   * @see {@link TLocale}\n   */\n  dynamicLocale = input<TLocale | null>(null);\n\n  /**\n   * The hierarchy level of the query.\n   * Used to calculate the header interaction button indent.\n   *\n   * ```html\n   * <talenra-query-condition-selector\n   *  [hierarchyLevel]=\"hierarchyLevel\">\n   * </talenra-query-condition-selector>\n   * ```\n   */\n  hierarchyLevel = input<number>(1);\n  /**\n   * The tooltip for the delete group button.\n   */\n  protected deleteFilterGroupTooltip = computed(() => translations[this.locale() as TLocale]['deleteGroup']);\n  /**\n   * The tooltip for the add filter button.\n   */\n  protected addFilterTooltip = computed(() => translations[this.locale() as TLocale]['addFilter']);\n  /**\n   * The tooltip for the add group button.\n   */\n  protected addFilterGroupTooltip = computed(() => translations[this.locale() as TLocale]['addGroup']);\n\n  /**\n   * The rule action that is performed. It emits the type of action that is to be performed on a query.\n   *\n   * ```html\n   * <talenra-query-condition-selector\n   *  (ruleAction)=\"onRuleAction($event)\">\n   * </talenra-query-condition-selector>\n   * ```\n   */\n  ruleAction = output<TQueryBuilderRuleAction>();\n  /**\n   * The computed locale to use for translations.\n   */\n  private locale = computed(() => (this.dynamicLocale() ? this.dynamicLocale() : this.appLocale));\n  /**\n   * The conditions that are available in the header.\n   */\n  protected conditions: Signal<{ key: TQueryBuilderCondition; label: string }[]> = computed(() => {\n    return conditionEntries.map((entry) => {\n      return { key: entry as TQueryBuilderCondition, label: translations[this.locale() as TLocale][entry] };\n    });\n  });\n\n  private appLocale = inject(LOCALE_ID);\n\n  /**\n   * Emits the action that is to be performed on a query.\n   * @param action The action that is to be performed on a query.\n   */\n  protected buttonAction(action: TQueryBuilderRuleAction) {\n    this.ruleAction.emit(action);\n  }\n\n  /**\n   * Changes the active condition.\n   * @param conditionElement The condition element that is to be set as the active condition.\n   */\n  protected changeActiveCondition(conditionElement: TQueryBuilderCondition) {\n    this.activeCondition.set(conditionElement);\n  }\n}\n","<div [class.disabled-condition]=\"disabledRuleActions().includes('conditionChange')\" class=\"condition-selector\">\n  @for (condition of conditions(); track condition.key) {\n    <div\n      class=\"condition\"\n      [class.active-condition]=\"condition.key === activeCondition()\"\n      [class.active-disabled-condition]=\"\n        condition.key === activeCondition() && disabledRuleActions().includes('conditionChange')\n      \"\n      (click)=\"changeActiveCondition(condition.key)\">\n      {{ condition.label }}\n    </div>\n  }\n</div>\n<div class=\"interaction-buttons-first\" [style.margin-left.px]=\"80 - (hierarchyLevel() - 1) * 33\">\n  @if (!disabledRuleActions().includes('addRule')) {\n    <button\n      [talenraTooltip]=\"addFilterTooltip()\"\n      (click)=\"buttonAction('addRule')\"\n      icon=\"add\"\n      kind=\"ghost\"\n      talenra-button></button>\n  }\n  @if (!disabledRuleActions().includes('addRuleGroup')) {\n    <button\n      [talenraTooltip]=\"addFilterGroupTooltip()\"\n      (click)=\"buttonAction('addRuleGroup')\"\n      icon=\"library-add\"\n      kind=\"ghost\"\n      talenra-button></button>\n  }\n</div>\n<div class=\"interaction-buttons-second\">\n  @if (!disabledRuleActions().includes('deleteElement')) {\n    <button\n      [talenraTooltip]=\"deleteFilterGroupTooltip()\"\n      (click)=\"buttonAction('deleteElement')\"\n      icon=\"delete\"\n      kind=\"ghost\"\n      talenra-button></button>\n  }\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  LOCALE_ID,\n  model,\n  OnInit,\n  output,\n  viewChild,\n  inject,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { FormFieldComponent } from '@talenra/ngx-base/form-field';\nimport { InputComponent } from '@talenra/ngx-base/input';\nimport { OptionComponent, SelectComponent } from '@talenra/ngx-base/select';\nimport { ToggleComponent } from '@talenra/ngx-base/toggle';\nimport { DateComponent } from '@talenra/ngx-base/date';\nimport { TLocale } from '@talenra/ngx-base/shared';\nimport { TooltipDirective } from '@talenra/ngx-base/tooltip';\nimport {\n  QueryBuilderDateOperator,\n  QueryBuilderNumberOperator,\n  QueryBuilderOptionOperator,\n  QueryBuilderRuleAction,\n  QueryBuilderStringOperator,\n  QueryBuilderValueType,\n  TQueryBuilderDateOperator,\n  TQueryBuilderNumberOperator,\n  TQueryBuilderOptionOperator,\n  TQueryBuilderRuleAction,\n  TQueryBuilderStringOperator,\n} from '../query-builder.types';\nimport {\n  IQueryBuilderOperator,\n  IQueryBuilderPossibleRule,\n  IQueryBuilderRule,\n  IQueryBuilderValueOption,\n  IQueryBuilderValueOptions,\n} from '../query-builder.interface';\nimport { translations } from '../query-builder.translation';\n\n/**\n * Convert the string Operators object to an array of string values.\n * @internal\n */\nconst stringOperatorEntries: string[] = Object.entries(QueryBuilderStringOperator).map(([, value]) => value);\n/**\n * Convert the number Operators object to an array of string values.\n * @internal\n */\nconst numberOperatorEntries: string[] = Object.entries(QueryBuilderNumberOperator).map(([, value]) => value);\n/**\n * Convert the option Operators object to an array of string values.\n * @internal\n */\nconst optionOperatorEntries: string[] = Object.entries(QueryBuilderOptionOperator).map(([, value]) => value);\n/**\n * Convert the date Operators object to an array of string values.\n * @internal\n */\nconst dateOperatorEntries: string[] = Object.entries(QueryBuilderDateOperator).map(([, value]) => value);\n\n/**\n * The `talenra-query-selection-field` component enables the user to select a rule for the query.\n * The user can select an identifier from a list of possible rules. If selected the user can select an operator and a\n * value, specific to the type of the rule.\n *\n * ```html\n * <talenra-query-selection-field\n *     [(rule)]=\"rule\"\n *     [possibleRules]=\"possibleRules\"\n *     [values]=\"values\"\n *     [dynamicLocale]=\"dynamicLocale\"\n *     (actionButton)=\"onActionChange($event)\"></talenra-query-selection-field>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { QuerySelectionFieldComponent } from '@talenra/ngx-base/query-builder';\n * ```\n */\n@Component({\n  selector: 'talenra-query-selection-field',\n  imports: [\n    ButtonComponent,\n    OptionComponent,\n    SelectComponent,\n    FormFieldComponent,\n    ReactiveFormsModule,\n    FormsModule,\n    DateComponent,\n    ToggleComponent,\n    InputComponent,\n    TooltipDirective,\n  ],\n  templateUrl: './query-selection-field.component.html',\n  styleUrl: './query-selection-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QuerySelectionFieldComponent implements OnInit, AfterViewInit {\n  /**\n   * The selection field of the rule.\n   */\n  public readonly ruleSelect = viewChild<SelectComponent>('ruleSelect');\n\n  /**\n   * The selection field of the operator.\n   */\n  public readonly operatorSelect = viewChild<SelectComponent>('operatorSelect');\n\n  /**\n   * The selection field of the option value.\n   */\n  public readonly optionValueSelect = viewChild<SelectComponent>('optionValueSelect');\n\n  /**\n   * The selection field of the string value.\n   */\n  public readonly stringValueInput = viewChild<InputComponent>('stringValueInput');\n\n  /**\n   * The selection field of the number value.\n   */\n  public readonly numberValueInput = viewChild<InputComponent>('numberValueInput');\n\n  /**\n   * The selection field of the date value component.\n   */\n  public readonly dateValue = viewChild<DateComponent>('dateValue');\n\n  /**\n   * The rule that is currently selected. Is required to be set by the parent component.\n   *\n   * ```html\n   * <talenra-query-selection-field\n   *     [(rule)]=\"rule\"\n   *     [possibleRules]=\"possibleRules\"></talenra-query-selection-field>\n   * ```\n   */\n\n  rule = model.required<IQueryBuilderRule>();\n  /**\n   * The possible rules that can be selected. Is required to be set by the parent component to enable the selection of a query selection.\n   *\n   * ```html\n   * <talenra-query-selection-field\n   *     [(rule)]=\"rule\"\n   *     [possibleRules]=\"possibleRules\"></talenra-query-selection-field>\n   * ```\n   */\n  possibleRules = input.required<IQueryBuilderPossibleRule[]>();\n\n  /**\n   * The values that can be selected in connection to the selected identifier.\n   * Has to be set during the change of the identifier.\n   *\n   * ```html\n   * <talenra-query-selection-field\n   *     [(rule)]=\"rule\"\n   *     [possibleRules]=\"possibleRules\"\n   *     [values]=\"values\"></talenra-query-selection-field>\n   * ```\n   */\n  values = input<IQueryBuilderValueOptions>({ key: '', valueOptions: [] });\n\n  /**\n   * Locale to dynamically overwrite the app's locale.\n   * Allowed values, see: Locale\n   *\n   * ```html\n   * <talenra-query-selection-field\n   *     [(rule)]=\"rule\"\n   *     [possibleRules]=\"possibleRules\"\n   *     [dynamicLocale]=\"dynamicLocale\"></talenra-query-selection-field>\n   * ```\n   *\n   * @see {@link Locale}\n   * @see {@link TLocale}\n   */\n  dynamicLocale = input<TLocale | null>(null);\n\n  /**\n   * The rule action that is performed. It emits the type of action that is to be performed on a query.\n   *\n   * ```html\n   * <talenra-query-selection-field\n   *     [(rule)]=\"rule\"\n   *     [possibleRules]=\"possibleRules\"\n   *     (ruleAction)=\"onRuleAction($event)\"></talenra-query-selection-field>\n   * ```\n   */\n  ruleAction = output<TQueryBuilderRuleAction>();\n  /**\n   * The selected rule from the possible rules.\n   */\n  protected selectedRule: IQueryBuilderPossibleRule | undefined;\n  /**\n   * The possible operator entries.\n   */\n  protected possibleOperator: IQueryBuilderOperator[] = [];\n  /**\n   * The locale to use.\n   */\n  private locale = computed(() => (this.dynamicLocale() ? this.dynamicLocale() : this.appLocale));\n  /**\n   * The filter label that is to be shown.\n   */\n  protected filterLabel = computed(() => translations[this.locale() as TLocale]['filter']);\n  /**\n   The operator label that is to be shown.\n   */\n  protected operatorLabel = computed(() => translations[this.locale() as TLocale]['operator']);\n  /**\n   The operator label that is to be shown.\n   */\n  protected noEntriesMessage = computed(() => translations[this.locale() as TLocale]['noEntries']);\n  /**\n   * The tooltip for the delete button.\n   */\n  protected deleteFilterTooltip = computed(() => translations[this.locale() as TLocale]['deleteFilter']);\n\n  private appLocale = inject(LOCALE_ID);\n\n  /**\n   * Initializes the component.\n   * @internal\n   */\n  ngOnInit(): void {\n    // set the initial values\n    this.setInitialValues();\n  }\n\n  /** @internal */\n  ngAfterViewInit() {\n    // Give time for the view to stabilize, because of close in the select component\n    setTimeout(() => {\n      const ruleSelect = this.ruleSelect();\n      if (ruleSelect && (this.rule().key === '' || this.rule().key === undefined)) {\n        // Set showPanel to true to open the dropdown\n        ruleSelect.showPanel = true;\n      }\n    }, 150);\n  }\n\n  /**\n   * Emits to the parent component that the element is to be deleted.\n   */\n  protected deleteElement() {\n    this.ruleAction.emit(QueryBuilderRuleAction.DeleteElement);\n  }\n\n  /**\n   * Handles the change of the operator.\n   * @param operator The operator that is selected.\n   */\n  protected operatorChange(\n    operator:\n      | string\n      | TQueryBuilderStringOperator\n      | TQueryBuilderOptionOperator\n      | TQueryBuilderDateOperator\n      | TQueryBuilderNumberOperator\n      | undefined\n  ) {\n    this.rule.set({ ...this.rule(), operator: operator });\n    // focus or open the value field, if operator field is not open, and no value is selected\n    setTimeout(() => {\n      const operatorSelect = this.operatorSelect();\n      // focus or open the value field, if operator field is not open, and no value is selected\n      if (operatorSelect && !operatorSelect['_showPanel'] && this.rule().value === undefined) {\n        this.focusValueField();\n      }\n    }, 150);\n  }\n\n  /**\n   * Handles the change of the value.\n   * @param value The value that is selected.\n   */\n  protected valueChange(value: string | Date | number | boolean | undefined | IQueryBuilderValueOption) {\n    // set value from the value option\n    this.values().valueOptions.forEach((valueOption) => {\n      if (value && typeof value === 'object' && 'key' in value && value.key === valueOption.key) {\n        value = valueOption;\n      }\n    });\n\n    // if selected value different from the current value, set the value\n    if (value !== this.rule().value) {\n      this.rule.set({ ...this.rule(), value: value });\n    }\n  }\n\n  /**\n   * Handles the change of the key.\n   * @param key The key that is selected.\n   */\n  protected keyChange(key: string | null | undefined) {\n    // find and set the selected rule of the possible rules\n    this.selectedRule = this.possibleRules().find((rule) => rule.key === key);\n    if (this.selectedRule) {\n      // if value is changed, reset the operator and value\n      if (key !== this.rule().key) {\n        // set the possible operator\n        this.initializeOperator();\n        // set all attributes of the rule to trigger the change detection once\n        // if the rule is not an option or boolean, set the operator to equal\n        if (\n          !this.selectedRule.operators &&\n          this.selectedRule.type !== QueryBuilderValueType.Option &&\n          this.selectedRule.type !== QueryBuilderValueType.Boolean\n        ) {\n          // set value in form group\n          this.rule.set({\n            ...this.rule(),\n            key: this.selectedRule.key,\n            label: this.selectedRule.label,\n            type: this.selectedRule.type,\n            operator: 'equal',\n            value: undefined,\n          });\n        }\n        // if the rule is an option, set the operator to contains\n        else if (!this.selectedRule.operators && this.selectedRule.type === 'option') {\n          this.rule.set({\n            ...this.rule(),\n            key: this.selectedRule.key,\n            label: this.selectedRule.label,\n            type: this.selectedRule.type,\n            operator: 'contains',\n            value: undefined,\n          });\n        } else {\n          this.rule.set({\n            ...this.rule(),\n            key: this.selectedRule.key,\n            label: this.selectedRule.label,\n            type: this.selectedRule.type,\n            operator: undefined,\n            value: undefined,\n          });\n        }\n        // Give time for the view to stabilize, because of close in the select component\n        // if rule is not an boolean, open the operator select\n        if (this.selectedRule.type !== QueryBuilderValueType.Boolean) {\n          setTimeout(() => {\n            const operatorSelect = this.operatorSelect();\n            if (operatorSelect) {\n              // Set showPanel to true to open the dropdown\n              operatorSelect.showPanel = true;\n            }\n          }, 150);\n        }\n      }\n    }\n    // if the rule is not found and no value is selected, reset the values\n    // if identifier is undefined, reset the values\n    else if (!this.selectedRule) {\n      this.rule.set({\n        ...this.rule(),\n        key: undefined,\n        label: undefined,\n        type: undefined,\n        operator: undefined,\n        value: undefined,\n      });\n    }\n  }\n\n  /**\n   * Sets the initial values of the component.\n   */\n  private setInitialValues() {\n    // set the selected rule\n    this.selectedRule = this.possibleRules().find((rule) => rule.key === this.rule().key);\n    // set the possible operator\n    this.initializeOperator();\n  }\n\n  /**\n   * Initializes the possible operator selection for each type of rule or if a custom value is chosen.\n   */\n  private initializeOperator() {\n    // set the possible operators\n    if (this.selectedRule) {\n      // reset the possible operator values\n      this.possibleOperator = [];\n      // check if custom operators are set\n      if (this.selectedRule.operators) {\n        this.possibleOperator = this.selectedRule.operators;\n      } else {\n        switch (this.selectedRule.type) {\n          case 'string':\n            stringOperatorEntries.forEach((entry) => {\n              this.possibleOperator.push({ key: entry, label: translations[this.locale() as TLocale][entry] });\n            });\n            break;\n          case 'number':\n            numberOperatorEntries.forEach((entry) => {\n              this.possibleOperator.push({ key: entry, label: translations[this.locale() as TLocale][entry] });\n            });\n            break;\n          case 'option':\n            optionOperatorEntries.forEach((entry) => {\n              this.possibleOperator.push({ key: entry, label: translations[this.locale() as TLocale][entry] });\n            });\n            break;\n          case 'date':\n            dateOperatorEntries.forEach((entry) => {\n              this.possibleOperator.push({ key: entry, label: translations[this.locale() as TLocale][entry] });\n            });\n            break;\n        }\n      }\n    }\n  }\n\n  /**\n   * Opens/Focuses the value field accordingly for each type.\n   */\n  private focusValueField() {\n    switch (this.rule().type) {\n      case QueryBuilderValueType.Option:\n        const optionValueSelect = this.optionValueSelect();\n        if (optionValueSelect) {\n          optionValueSelect.showPanel = true;\n        }\n        break;\n      case QueryBuilderValueType.String:\n        const stringValueInput = this.stringValueInput();\n        if (stringValueInput) {\n          stringValueInput.focus();\n        }\n        break;\n      case QueryBuilderValueType.Number:\n        const numberValueInput = this.numberValueInput();\n        if (numberValueInput) {\n          numberValueInput.focus();\n        }\n        break;\n      case QueryBuilderValueType.Date:\n        const dateValue = this.dateValue();\n        if (dateValue) {\n          // create a new mouse event\n          const event = new MouseEvent('click', {\n            bubbles: true,\n            cancelable: true,\n            view: window,\n          });\n          // Define the target property after event creation\n          Object.defineProperty(event, 'target', {\n            value: dateValue.inputDate.nativeElement,\n            enumerable: true,\n          });\n          dateValue.focus();\n          dateValue.openCalendarOverlay(event);\n        }\n        break;\n      default:\n        break;\n    }\n  }\n}\n","<div\n  [class.boolean-form-group]=\"rule().type === 'boolean'\"\n  [class.empty-group]=\"!rule().key\"\n  class=\"selection-form-group\">\n  <talenra-form-field [label]=\"filterLabel()\" class=\"selection-form-field\">\n    <talenra-select\n      [noMatchMessage]=\"noEntriesMessage()\"\n      [noOptionsMessage]=\"noEntriesMessage()\"\n      #ruleSelect\n      (ngModelChange)=\"keyChange($event)\"\n      [ngModel]=\"rule().key\"\n      useFilter>\n      @for (possibleRule of possibleRules(); track possibleRule.key) {\n        <talenra-option [value]=\"possibleRule.key\">{{ possibleRule.label }}</talenra-option>\n      }\n    </talenra-select>\n  </talenra-form-field>\n\n  @if (rule().key) {\n    @if (rule()?.type !== 'boolean') {\n      <talenra-form-field class=\"selection-form-field\" [label]=\"operatorLabel()\">\n        <talenra-select\n          [noMatchMessage]=\"noEntriesMessage()\"\n          [noOptionsMessage]=\"noEntriesMessage()\"\n          #operatorSelect\n          [ngModel]=\"rule().operator\"\n          (ngModelChange)=\"operatorChange($event)\"\n          useFilter>\n          @for (operator of possibleOperator; track operator.key) {\n            <talenra-option [value]=\"operator.key\">{{ operator.label }}</talenra-option>\n          }\n        </talenra-select>\n      </talenra-form-field>\n    }\n    @if (rule()?.type === 'option') {\n      <talenra-form-field class=\"selection-form-field\" [label]=\"selectedRule ? selectedRule.label : ''\">\n        <talenra-select\n          [noMatchMessage]=\"noEntriesMessage()\"\n          [noOptionsMessage]=\"noEntriesMessage()\"\n          #optionValueSelect\n          [ngModel]=\"rule().value\"\n          (ngModelChange)=\"valueChange($event)\"\n          useFilter>\n          @for (option of values()?.valueOptions; track option.key) {\n            <talenra-option [value]=\"option\">{{ option.label }}</talenra-option>\n          }\n        </talenra-select>\n      </talenra-form-field>\n    } @else if (rule()?.type === 'string') {\n      <talenra-form-field class=\"selection-form-field\" [label]=\"selectedRule ? selectedRule.label : ''\">\n        <input #stringValueInput talenra-input [ngModel]=\"rule().value\" (ngModelChange)=\"valueChange($event)\" />\n      </talenra-form-field>\n    } @else if (rule()?.type === 'number') {\n      <talenra-form-field class=\"selection-form-field\" [label]=\"selectedRule ? selectedRule.label : ''\">\n        <input\n          #numberValueInput\n          talenra-input\n          [ngModel]=\"rule().value\"\n          (ngModelChange)=\"valueChange($event)\"\n          type=\"number\" />\n      </talenra-form-field>\n    } @else if (rule()?.type === 'date') {\n      <talenra-form-field class=\"selection-form-field\" [label]=\"selectedRule ? selectedRule.label : ''\">\n        <talenra-date #dateValue [ngModel]=\"rule().value\" (ngModelChange)=\"valueChange($event)\"></talenra-date>\n      </talenra-form-field>\n    } @else if (rule()?.type === 'boolean') {\n      <talenra-toggle\n        [ngModel]=\"rule().value\"\n        (ngModelChange)=\"valueChange($event)\"\n        label=\"{{ rule()?.label }}\"></talenra-toggle>\n    }\n  }\n  <button\n    class=\"delete-button\"\n    [talenraTooltip]=\"deleteFilterTooltip()\"\n    (click)=\"deleteElement()\"\n    icon=\"delete\"\n    kind=\"ghost\"\n    talenra-button\n    type=\"button\"></button>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n  LOCALE_ID,\n  model,\n  numberAttribute,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TLocale } from '@talenra/ngx-base/shared';\nimport {\n  QueryBuilderCondition,\n  QueryBuilderValueType,\n  TQueryBuilderCondition,\n  TQueryBuilderRuleAction,\n} from '../query-builder.types';\nimport { QueryConditionSelectorComponent } from '../query-condition-selector/query-condition-selector.component';\nimport { QuerySelectionFieldComponent } from '../query-selection-field/query-selection-field.component';\nimport {\n  IQueryBuilderPossibleRule,\n  IQueryBuilderQuery,\n  IQueryBuilderRule,\n  IQueryBuilderValueOptions,\n} from '../query-builder.interface';\nimport { translations } from '../query-builder.translation';\n\n/**\n * The `talenra-query-builder` component enables the user to create a query with rules and subqueries.\n * The user can add rules and subqueries to the query and select the condition for each query and subqueries.\n * Rules can be selected from a list of possible rules and the user can select an operator and a value.\n *\n * ```html\n * <talenra-query-builder\n *     [(query)]=\"rule\"\n *     [possibleRules]=\"possibleRules\"\n *     [values]=\"values\"\n *     [maxHierarchyLevel]=\"maxHierarchyLevel\"\n *     [dynamicLocale]=\"dynamicLocale\"></talenra-query-builder>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { QueryBuilderComponent } from '@talenra/ngx-base/query-builder';\n * ```\n *\n * <example-url>../../#/query-builder</example-url>\n *\n * @experimental\n */\n@Component({\n  selector: 'talenra-query-builder',\n  imports: [QueryConditionSelectorComponent, QuerySelectionFieldComponent, NgTemplateOutlet],\n  templateUrl: './query-builder.component.html',\n  styleUrl: './query-builder.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QueryBuilderComponent {\n  /**\n   * The query that is currently selected. Contains all selection, even the rules that are not fully filled out and empty groups.\n   *\n   * ```html\n   * <talenra-query-builder\n   *     [(query)]=\"query\"\n   *     [possibleRules]=\"possibleRules\"></talenra-query-builder>\n   * ```\n   */\n  query = model<IQueryBuilderQuery>({\n    identifier: this.generateUUID(),\n    condition: QueryBuilderCondition.And,\n    hierarchyLevel: 1,\n    rules: [],\n  });\n\n  /**\n   * The possible rules that can be selected.\n   *\n   * ```html\n   * <talenra-query-builder\n   *     [possibleRules]=\"possibleRules\"></talenra-query-builder>\n   * ```\n   */\n  possibleRules = input.required<IQueryBuilderPossibleRule[]>();\n\n  /**\n   * The values that can be selected in connection to each rule identifier.\n   *\n   * ```html\n   * <talenra-query-builder\n   *     [possibleRules]=\"possibleRules\"\n   *     [values]=\"values\"></talenra-query-builder>\n   * ```\n   */\n  values = input<IQueryBuilderValueOptions[]>([]);\n\n  /**\n   * The maximum hierarchy level on how deep the rule can be constructed.\n   *\n   * ```html\n   * <talenra-query-builder ... maxHierarchyLevel=\"2\"></talenra-query-builder>\n   * ```\n   */\n  maxHierarchyLevel = input(3, { transform: numberAttribute });\n\n  /**\n   * Locale to dynamically overwrite the app's locale.\n   * Allowed values, see: Locale\n   *\n   * ```html\n   * <talenra-query-builder\n   *     [possibleRules]=\"possibleRules\"\n   *     [dynamicLocale]=\"dynamicLocale\"></talenra-query-builder>\n   * ```\n   *\n   * @see {@link Locale}\n   * @see {@link TLocale}\n   */\n  dynamicLocale = input<TLocale | null>(null);\n\n  /**\n   * The locale to use.\n   */\n  locale = computed(() => (this.dynamicLocale() ? this.dynamicLocale() : this.appLocale));\n\n  /** The app's global locale */\n  private appLocale: string = inject(LOCALE_ID);\n\n  /**\n   * Actions performed on the query. Either deleting and element of adding a new rule or query.\n   * @param action The action that is to be performed on the query.\n   * @param queryOrRule The query or rule that is to be changed.\n   */\n  protected queryAction(action: TQueryBuilderRuleAction, queryOrRule: IQueryBuilderRule | IQueryBuilderQuery): void {\n    // delete rule\n    if (action === 'deleteElement') {\n      this.deleteElementFromQuery(this.query(), queryOrRule);\n    }\n    // add rule or group\n    else if (queryOrRule && 'rules' in queryOrRule && queryOrRule.rules) {\n      // add new rule\n      if (action === 'addRule') {\n        queryOrRule.rules.push({\n          identifier: this.generateUUID(),\n          key: '',\n          label: '',\n          type: QueryBuilderValueType.String,\n        });\n      }\n      // add new group\n      if (action === 'addRuleGroup') {\n        queryOrRule.rules.push({\n          condition: QueryBuilderCondition.And,\n          identifier: this.generateUUID(),\n          hierarchyLevel: queryOrRule.hierarchyLevel + 1,\n          rules: [],\n        });\n      }\n    }\n    // set the query to trigger the change detection\n    this.query.set({ ...this.query() });\n  }\n\n  /**\n   * Changes the rule in the query.\n   * @param availableQuery\n   * @param rule\n   */\n  protected onRuleChange(availableQuery: IQueryBuilderQuery, rule: IQueryBuilderRule) {\n    // iterate over all rules and queries\n    if (availableQuery && 'rules' in availableQuery && availableQuery.rules) {\n      availableQuery.rules.forEach((ruleOrQuery) => {\n        // check if the identifier is the same as the one to delete\n        if (ruleOrQuery.identifier === rule.identifier && !this.checkTypeRuleQuery(ruleOrQuery)) {\n          // change the rule\n          ruleOrQuery.key = rule.key;\n          ruleOrQuery.type = rule.type;\n          ruleOrQuery.label = rule.label;\n          ruleOrQuery.operator = rule.operator;\n          ruleOrQuery.value = rule.value;\n          return;\n        }\n        // if the element is a query, call the function recursively with condensed query\n        else if (this.checkTypeRuleQuery(ruleOrQuery)) {\n          this.onRuleChange(ruleOrQuery, rule);\n        }\n      });\n      // break the function if the element is not found\n      if (availableQuery.hierarchyLevel === 1) {\n        this.query.set({ ...availableQuery });\n      }\n      return;\n    }\n  }\n\n  /**\n   * Changes the condition in the query.\n   * @param condition The condition that is to be set.\n   * @param query The query that is to be changed.\n   */\n  protected conditionChange(condition: TQueryBuilderCondition, query: IQueryBuilderQuery) {\n    query.condition = condition;\n    // set the query to trigger the change detection\n    this.query.set({ ...this.query() });\n  }\n\n  /**\n   * Gets the translation for a key.\n   * @param key The key that is to be translated.\n   */\n  protected getTranslation(key: string): string {\n    return translations[this.locale() as TLocale][key];\n  }\n\n  /**\n   * Gets the disabled or hidden actions for a query.\n   * @param query The query that is to be checked.\n   */\n  protected getDisableActionsForQuery(query: IQueryBuilderQuery): TQueryBuilderRuleAction[] {\n    const disableActionsHigherHierarchyGroup: TQueryBuilderRuleAction[] = [];\n    // disable the add rule group action if the hierarchy level is at the maximum\n    if (query.hierarchyLevel >= this.maxHierarchyLevel()) {\n      disableActionsHigherHierarchyGroup.push('addRuleGroup');\n    }\n    // disable the condition change action if there is no rules (queries or rules) in the query\n    if (query.rules.length === 0) {\n      disableActionsHigherHierarchyGroup.push('conditionChange');\n    }\n    // disable the delete action if the query is the root query\n    if (query.hierarchyLevel === 1) {\n      disableActionsHigherHierarchyGroup.push('deleteElement');\n    }\n    return disableActionsHigherHierarchyGroup;\n  }\n\n  /**\n   * The map of values for the rule. The key is the identifier of the rule and the value is the rule itself.\n   */\n  protected readonly valuesMap = computed(() => {\n    const valuesArray = this.values();\n    return new Map(valuesArray?.map((value) => [value.key, value]) || []);\n  });\n\n  /**\n   * Gets the values for the rule. If the values are not found, an empty array is returned.\n   * @param ruleOrQuery The rule or query that is to be checked.\n   */\n  protected getValuesForRule(ruleOrQuery: IQueryBuilderRule): IQueryBuilderValueOptions {\n    let value: IQueryBuilderValueOptions = {\n      key: '',\n      valueOptions: [],\n    };\n    if (!ruleOrQuery) {\n      return value;\n    }\n    const ruleKey = ruleOrQuery.key;\n    if (typeof ruleKey === 'undefined') {\n      return value;\n    }\n    const possibleValues = this.valuesMap().get(ruleKey);\n    if (possibleValues) {\n      value = possibleValues;\n    }\n    return value;\n  }\n\n  /**\n   * Checks if the rule or query is a query.\n   * @param queryOrRule The rule or query that is to be checked.\n   */\n  protected checkTypeRuleQuery(queryOrRule: IQueryBuilderQuery | IQueryBuilderRule): queryOrRule is IQueryBuilderQuery {\n    return (queryOrRule as IQueryBuilderQuery).condition !== undefined;\n  }\n\n  /**\n   * Generates a UUID.\n   */\n  private generateUUID(): string {\n    // Create a UUID using the template format xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n    return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n      (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16)\n    );\n  }\n\n  /**\n   * Deletes the rule or query from the available query.\n   * @param availableQuery The query that is currently available. It is condensed for the recursive function.\n   * @param queryOrRuleToDelete The query or rule that is to be deleted.\n   */\n  private deleteElementFromQuery(\n    availableQuery: IQueryBuilderQuery,\n    queryOrRuleToDelete: IQueryBuilderRule | IQueryBuilderQuery\n  ): void {\n    // iterate over all rules and queries\n    availableQuery.rules.forEach((ruleOrQuery, index) => {\n      // check if the identifier is the same as the one to delete\n      if (ruleOrQuery.identifier === queryOrRuleToDelete.identifier) {\n        // delete the rule or query\n        availableQuery.rules.splice(index, 1);\n        return;\n      }\n      // if the element is a query, call the function recursively with condensed query\n      else if (this.checkTypeRuleQuery(ruleOrQuery)) {\n        this.deleteElementFromQuery(ruleOrQuery, queryOrRuleToDelete);\n      }\n      // break the function if the element is not found\n      return;\n    });\n  }\n}\n","<talenra-query-condition-selector\n  (activeConditionChange)=\"conditionChange($event, this.query())\"\n  (ruleAction)=\"queryAction($event, query())\"\n  [activeCondition]=\"query().condition\"\n  [disabledRuleActions]=\"getDisableActionsForQuery(query())\"\n  [dynamicLocale]=\"dynamicLocale()\"\n  class=\"query-condition-selector-header\" />\n\n@if (query().rules.length > 0) {\n  <ng-container\n    *ngTemplateOutlet=\"\n      ruleTemplate;\n      context: {\n        rules: query()?.rules,\n      }\n    \" />\n} @else if (query().rules.length === 0) {\n  <div class=\"query-element-selection-field-container\">\n    <div class=\"vertical-line-header-no-element\"></div>\n    <div class=\"horizontal-line\"></div>\n    <div class=\"no-element-text\">{{ getTranslation('chooseRuleOrGroup') }}</div>\n  </div>\n}\n\n<ng-template #ruleTemplate let-rules=\"rules\">\n  @for (ruleOrQuery of rules; let index = $index; track ruleOrQuery.identifier) {\n    @if (checkTypeRuleQuery(ruleOrQuery)) {\n      <div>\n        <div class=\"query-element-condition\">\n          <div\n            class=\"vertical-line vertical-line-condition\"\n            [class.vertical-line-condition-last]=\"rules[index + 1] === undefined\"></div>\n          <div class=\"horizontal-line horizontal-line-condition\"></div>\n          <talenra-query-condition-selector\n            class=\"query-condition-selector\"\n            [dynamicLocale]=\"dynamicLocale()\"\n            [activeCondition]=\"ruleOrQuery['condition']\"\n            (activeConditionChange)=\"conditionChange($event, ruleOrQuery)\"\n            [disabledRuleActions]=\"getDisableActionsForQuery(ruleOrQuery)\"\n            [hierarchyLevel]=\"ruleOrQuery.hierarchyLevel\"\n            (ruleAction)=\"queryAction($event, ruleOrQuery)\" />\n        </div>\n        <div class=\"query-element-selection\">\n          <div class=\"vertical-line-between\" [class.vertical-line-between-last]=\"rules[index + 1] !== undefined\"></div>\n          <div class=\"query-element-recursive\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                ruleTemplate;\n                context: {\n                  rules: ruleOrQuery.rules,\n                }\n              \" />\n          </div>\n        </div>\n      </div>\n    } @else if (!checkTypeRuleQuery(ruleOrQuery)) {\n      <div class=\"query-element-selection-field-container\">\n        <div class=\"vertical-line\" [class.vertical-line-last]=\"rules[index + 1] === undefined\"></div>\n        <div class=\"horizontal-line\"></div>\n        <talenra-query-selection-field\n          class=\"query-element-selection-field\"\n          (ruleAction)=\"queryAction($event, ruleOrQuery)\"\n          [rule]=\"ruleOrQuery\"\n          (ruleChange)=\"onRuleChange(this.query(), $event)\"\n          [possibleRules]=\"possibleRules()\"\n          [dynamicLocale]=\"dynamicLocale()\"\n          [values]=\"getValuesForRule(ruleOrQuery)\" />\n      </div>\n    }\n  }\n</ng-template>\n","// components\nexport * from './src/query-builder/query-builder.component';\nexport * from './src/query-selection-field/query-selection-field.component';\nexport * from './src/query-condition-selector/query-condition-selector.component';\n\n// types & interfaces\nexport * from './src/query-builder.interface';\nexport * from './src/query-builder.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;AAQG;AACU,MAAA,0BAA0B,GAAG;AACxC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,EAAE,EAAE,IAAI;;AAcV;;;;;;;;;AASG;AACU,MAAA,0BAA0B,GAAG;AACxC,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,WAAW,EAAE,aAAa;;AAc5B;;;;;;;;;AASG;AACU,MAAA,0BAA0B,GAAG;AACxC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,aAAa,EAAE,eAAe;;AAchC;;;;;;;;;AASG;AACU,MAAA,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,YAAY,EAAE,cAAc;;AAc9B;;;;;;;;AAQG;AACU,MAAA,sBAAsB,GAAG;AACpC,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,eAAe,EAAE,iBAAiB;;AAcpC;;;;;;;;AAQG;AACU,MAAA,qBAAqB,GAAG;AACnC,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,EAAE,EAAE,IAAI;;AAcV;;;;;;;;AAQG;AACU,MAAA,qBAAqB,GAAG;AACnC,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE,SAAS;;;ACvLpB;AACO,MAAM,YAAY,GAAe;AACtC,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,aAAa,EAAE,mBAAmB;AAClC,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,cAAc,EAAE,yBAAyB;AACzC,QAAA,aAAa,EAAE,yBAAyB;AACxC,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,aAAa,EAAE,mBAAmB;AAClC,QAAA,YAAY,EAAE,oBAAoB;AAClC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,iBAAiB,EAAE,2BAA2B;AAC9C,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,EAAE,EAAE,KAAK;AACT,QAAA,SAAS,EAAE,4BAA4B;AACvC,QAAA,YAAY,EAAE,gBAAgB;AAC9B,QAAA,WAAW,EAAE,sBAAsB;AACnC,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,QAAQ,EAAE,yBAAyB;AACpC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,QAAQ,EAAE,gBAAgB;AAC1B,QAAA,aAAa,EAAE,qBAAqB;AACpC,QAAA,WAAW,EAAE,uBAAuB;AACpC,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,cAAc,EAAE,oBAAoB;AACpC,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,iBAAiB,EAAE,gCAAgC;AACnD,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,EAAE,EAAE,GAAG;AACP,QAAA,SAAS,EAAE,wBAAwB;AACnC,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,WAAW,EAAE,gCAAgC;AAC7C,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,QAAQ,EAAE,8BAA8B;AACzC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,cAAc,EAAE,mBAAmB;AACnC,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,iBAAiB,EAAE,wBAAwB;AAC3C,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,EAAE,EAAE,GAAG;AACP,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,EAAE,EAAE,GAAG;AACP,QAAA,SAAS,EAAE,2BAA2B;AACtC,QAAA,YAAY,EAAE,gBAAgB;AAC9B,QAAA,WAAW,EAAE,0BAA0B;AACvC,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,QAAQ,EAAE,2BAA2B;AACtC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,aAAa,EAAE,qBAAqB;AACpC,QAAA,WAAW,EAAE,mBAAmB;AAChC,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,YAAY,EAAE,gBAAgB;AAC9B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,iBAAiB,EAAE,sBAAsB;AACzC,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,WAAW,EAAE,qBAAqB;AAClC,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,QAAQ,EAAE,kBAAkB;AAC7B,KAAA;CACF;;AC3GD;;AAEG;AACH,MAAM,gBAAgB,GAAa,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AAElG;;;;;;;;;;;;;;;;;;;AAmBG;MAQU,+BAA+B,CAAA;AAP5C,IAAA,WAAA,GAAA;AAQE;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAyB,qBAAqB,CAAC,GAAG,CAAC;AAE1E;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAA4B,EAAE,CAAC;AAE1D;;;;;;;;;;;;AAYG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAiB,IAAI,CAAC;AAE3C;;;;;;;;;AASG;AACH,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,CAAC,CAAC;AACjC;;AAEG;AACO,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,aAAa,CAAC,CAAC;AAC1G;;AAEG;AACO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,WAAW,CAAC,CAAC;AAChG;;AAEG;AACO,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AAEpG;;;;;;;;AAQG;QACH,IAAU,CAAA,UAAA,GAAG,MAAM,EAA2B;AAC9C;;AAEG;QACK,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/F;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAA6D,QAAQ,CAAC,MAAK;AAC7F,YAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACpC,gBAAA,OAAO,EAAE,GAAG,EAAE,KAA+B,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,KAAK,CAAC,EAAE;AACvG,aAAC,CAAC;AACJ,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAiBtC;AAfC;;;AAGG;AACO,IAAA,YAAY,CAAC,MAA+B,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG9B;;;AAGG;AACO,IAAA,qBAAqB,CAAC,gBAAwC,EAAA;AACtE,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC;;8GApGjC,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,ECjD5C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,27CAyCA,EDGY,MAAA,EAAA,CAAA,qiDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,qIAAE,gBAAgB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKhC,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;+BACE,kCAAkC,EAAA,OAAA,EACnC,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,27CAAA,EAAA,MAAA,EAAA,CAAA,qiDAAA,CAAA,EAAA;;;AEHjD;;;AAGG;AACH,MAAM,qBAAqB,GAAa,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AAC5G;;;AAGG;AACH,MAAM,qBAAqB,GAAa,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AAC5G;;;AAGG;AACH,MAAM,qBAAqB,GAAa,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AAC5G;;;AAGG;AACH,MAAM,mBAAmB,GAAa,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AAExG;;;;;;;;;;;;;;;;;;;AAmBG;MAmBU,4BAA4B,CAAA;AAlBzC,IAAA,WAAA,GAAA;AAmBE;;AAEG;AACa,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAkB,YAAY,CAAC;AAErE;;AAEG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAkB,gBAAgB,CAAC;AAE7E;;AAEG;AACa,QAAA,IAAA,CAAA,iBAAiB,GAAG,SAAS,CAAkB,mBAAmB,CAAC;AAEnF;;AAEG;AACa,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAiB,kBAAkB,CAAC;AAEhF;;AAEG;AACa,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAiB,kBAAkB,CAAC;AAEhF;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAgB,WAAW,CAAC;AAEjE;;;;;;;;AAQG;AAEH,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAqB;AAC1C;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAA+B;AAE7D;;;;;;;;;;AAUG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAA4B,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAExE;;;;;;;;;;;;;AAaG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAiB,IAAI,CAAC;AAE3C;;;;;;;;;AASG;QACH,IAAU,CAAA,UAAA,GAAG,MAAM,EAA2B;AAK9C;;AAEG;QACO,IAAgB,CAAA,gBAAA,GAA4B,EAAE;AACxD;;AAEG;QACK,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/F;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxF;;AAEG;AACO,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,UAAU,CAAC,CAAC;AAC5F;;AAEG;AACO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,WAAW,CAAC,CAAC;AAChG;;AAEG;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,cAAc,CAAC,CAAC;AAE9F,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAiPtC;AA/OC;;;AAGG;IACH,QAAQ,GAAA;;QAEN,IAAI,CAAC,gBAAgB,EAAE;;;IAIzB,eAAe,GAAA;;QAEb,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;;AAE3E,gBAAA,UAAU,CAAC,SAAS,GAAG,IAAI;;SAE9B,EAAE,GAAG,CAAC;;AAGT;;AAEG;IACO,aAAa,GAAA;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC;;AAG5D;;;AAGG;AACO,IAAA,cAAc,CACtB,QAMa,EAAA;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;;QAErD,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;;AAE5C,YAAA,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE;gBACtF,IAAI,CAAC,eAAe,EAAE;;SAEzB,EAAE,GAAG,CAAC;;AAGT;;;AAGG;AACO,IAAA,WAAW,CAAC,KAA8E,EAAA;;QAElG,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACjD,YAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE;gBACzF,KAAK,GAAG,WAAW;;AAEvB,SAAC,CAAC;;QAGF,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;;;AAInD;;;AAGG;AACO,IAAA,SAAS,CAAC,GAA8B,EAAA;;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;AACzE,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;YAErB,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;;gBAE3B,IAAI,CAAC,kBAAkB,EAAE;;;AAGzB,gBAAA,IACE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS;AAC5B,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,qBAAqB,CAAC,MAAM;oBACvD,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,qBAAqB,CAAC,OAAO,EACxD;;AAEA,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBACZ,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,wBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG;AAC1B,wBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5B,wBAAA,QAAQ,EAAE,OAAO;AACjB,wBAAA,KAAK,EAAE,SAAS;AACjB,qBAAA,CAAC;;;AAGC,qBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5E,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBACZ,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,wBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG;AAC1B,wBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5B,wBAAA,QAAQ,EAAE,UAAU;AACpB,wBAAA,KAAK,EAAE,SAAS;AACjB,qBAAA,CAAC;;qBACG;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBACZ,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,wBAAA,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG;AAC1B,wBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5B,wBAAA,QAAQ,EAAE,SAAS;AACnB,wBAAA,KAAK,EAAE,SAAS;AACjB,qBAAA,CAAC;;;;gBAIJ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,qBAAqB,CAAC,OAAO,EAAE;oBAC5D,UAAU,CAAC,MAAK;AACd,wBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;wBAC5C,IAAI,cAAc,EAAE;;AAElB,4BAAA,cAAc,CAAC,SAAS,GAAG,IAAI;;qBAElC,EAAE,GAAG,CAAC;;;;;;AAMR,aAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACZ,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,CAAC;;;AAIN;;AAEG;IACK,gBAAgB,GAAA;;QAEtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;;QAErF,IAAI,CAAC,kBAAkB,EAAE;;AAG3B;;AAEG;IACK,kBAAkB,GAAA;;AAExB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;AAErB,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAE1B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS;;iBAC9C;AACL,gBAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5B,oBAAA,KAAK,QAAQ;AACX,wBAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;4BACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,yBAAC,CAAC;wBACF;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;4BACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,yBAAC,CAAC;wBACF;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;4BACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,yBAAC,CAAC;wBACF;AACF,oBAAA,KAAK,MAAM;AACT,wBAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;4BACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,yBAAC,CAAC;wBACF;;;;;AAMV;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI;YACtB,KAAK,qBAAqB,CAAC,MAAM;AAC/B,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAClD,IAAI,iBAAiB,EAAE;AACrB,oBAAA,iBAAiB,CAAC,SAAS,GAAG,IAAI;;gBAEpC;YACF,KAAK,qBAAqB,CAAC,MAAM;AAC/B,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;gBAChD,IAAI,gBAAgB,EAAE;oBACpB,gBAAgB,CAAC,KAAK,EAAE;;gBAE1B;YACF,KAAK,qBAAqB,CAAC,MAAM;AAC/B,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;gBAChD,IAAI,gBAAgB,EAAE;oBACpB,gBAAgB,CAAC,KAAK,EAAE;;gBAE1B;YACF,KAAK,qBAAqB,CAAC,IAAI;AAC7B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;gBAClC,IAAI,SAAS,EAAE;;AAEb,oBAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE;AACpC,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC;;AAEF,oBAAA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;AACrC,wBAAA,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,aAAa;AACxC,wBAAA,UAAU,EAAE,IAAI;AACjB,qBAAA,CAAC;oBACF,SAAS,CAAC,KAAK,EAAE;AACjB,oBAAA,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC;;gBAEtC;AACF,YAAA;gBACE;;;8GAxWK,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvGzC,60GAiFA,EDOI,MAAA,EAAA,CAAA,wcAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,qIACf,eAAe,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,eAAe,EACf,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,oHAClB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,kNACb,eAAe,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,wBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAlBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAChC,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,aAAa;wBACb,eAAe;wBACf,cAAc;wBACd,gBAAgB;qBACjB,EAGgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,60GAAA,EAAA,MAAA,EAAA,CAAA,wcAAA,CAAA,EAAA;;;AEzEjD;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAQU,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;AAQE;;;;;;;;AAQG;QACH,IAAK,CAAA,KAAA,GAAG,KAAK,CAAqB;AAChC,YAAA,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;YAC/B,SAAS,EAAE,qBAAqB,CAAC,GAAG;AACpC,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,KAAK,EAAE,EAAE;AACV,SAAA,CAAC;AAEF;;;;;;;AAOG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAA+B;AAE7D;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAA8B,EAAE,CAAC;AAE/C;;;;;;AAMG;QACH,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AAE5D;;;;;;;;;;;;AAYG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAiB,IAAI,CAAC;AAE3C;;AAEG;QACH,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;;AAG/E,QAAA,IAAA,CAAA,SAAS,GAAW,MAAM,CAAC,SAAS,CAAC;AA6G7C;;AAEG;AACgB,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;YACjC,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,SAAC,CAAC;AAoEH;AArLC;;;;AAIG;IACO,WAAW,CAAC,MAA+B,EAAE,WAAmD,EAAA;;AAExG,QAAA,IAAI,MAAM,KAAK,eAAe,EAAE;YAC9B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC;;;aAGnD,IAAI,WAAW,IAAI,OAAO,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,EAAE;;AAEnE,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,gBAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AACrB,oBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC/B,oBAAA,GAAG,EAAE,EAAE;AACP,oBAAA,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,qBAAqB,CAAC,MAAM;AACnC,iBAAA,CAAC;;;AAGJ,YAAA,IAAI,MAAM,KAAK,cAAc,EAAE;AAC7B,gBAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;oBACrB,SAAS,EAAE,qBAAqB,CAAC,GAAG;AACpC,oBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC/B,oBAAA,cAAc,EAAE,WAAW,CAAC,cAAc,GAAG,CAAC;AAC9C,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA,CAAC;;;;AAIN,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;;AAGrC;;;;AAIG;IACO,YAAY,CAAC,cAAkC,EAAE,IAAuB,EAAA;;QAEhF,IAAI,cAAc,IAAI,OAAO,IAAI,cAAc,IAAI,cAAc,CAAC,KAAK,EAAE;YACvE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;;AAE3C,gBAAA,IAAI,WAAW,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;;AAEvF,oBAAA,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAC1B,oBAAA,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AAC5B,oBAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC9B,oBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACpC,oBAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;oBAC9B;;;AAGG,qBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAC7C,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;;AAExC,aAAC,CAAC;;AAEF,YAAA,IAAI,cAAc,CAAC,cAAc,KAAK,CAAC,EAAE;gBACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;;YAEvC;;;AAIJ;;;;AAIG;IACO,eAAe,CAAC,SAAiC,EAAE,KAAyB,EAAA;AACpF,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS;;AAE3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;;AAGrC;;;AAGG;AACO,IAAA,cAAc,CAAC,GAAW,EAAA;QAClC,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAa,CAAC,CAAC,GAAG,CAAC;;AAGpD;;;AAGG;AACO,IAAA,yBAAyB,CAAC,KAAyB,EAAA;QAC3D,MAAM,kCAAkC,GAA8B,EAAE;;QAExE,IAAI,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACpD,YAAA,kCAAkC,CAAC,IAAI,CAAC,cAAc,CAAC;;;QAGzD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,kCAAkC,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;AAG5D,QAAA,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE;AAC9B,YAAA,kCAAkC,CAAC,IAAI,CAAC,eAAe,CAAC;;AAE1D,QAAA,OAAO,kCAAkC;;AAW3C;;;AAGG;AACO,IAAA,gBAAgB,CAAC,WAA8B,EAAA;AACvD,QAAA,IAAI,KAAK,GAA8B;AACrC,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,YAAY,EAAE,EAAE;SACjB;QACD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;;AAEd,QAAA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG;AAC/B,QAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,YAAA,OAAO,KAAK;;QAEd,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;QACpD,IAAI,cAAc,EAAE;YAClB,KAAK,GAAG,cAAc;;AAExB,QAAA,OAAO,KAAK;;AAGd;;;AAGG;AACO,IAAA,kBAAkB,CAAC,WAAmD,EAAA;AAC9E,QAAA,OAAQ,WAAkC,CAAC,SAAS,KAAK,SAAS;;AAGpE;;AAEG;IACK,YAAY,GAAA;;QAElB,OAAO,sCAAsC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAChE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CACtF;;AAGH;;;;AAIG;IACK,sBAAsB,CAC5B,cAAkC,EAClC,mBAA2D,EAAA;;QAG3D,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,KAAI;;YAElD,IAAI,WAAW,CAAC,UAAU,KAAK,mBAAmB,CAAC,UAAU,EAAE;;gBAE7D,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrC;;;AAGG,iBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,mBAAmB,CAAC;;;YAG/D;AACF,SAAC,CAAC;;8GAzPO,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,8yBC3DlC,s7FAuEA,EAAA,MAAA,EAAA,CAAA,kqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjBY,+BAA+B,EAAE,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,+KAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK9E,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,uBAAuB,EAAA,OAAA,EACxB,CAAC,+BAA+B,EAAE,4BAA4B,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAGzE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s7FAAA,EAAA,MAAA,EAAA,CAAA,kqCAAA,CAAA,EAAA;;;AEzDjD;;ACAA;;AAEG;;;;"}