{"version":3,"file":"toolbox-forms.mjs","sources":["../../../projects/toolbox/forms/validation/validators.ts","../../../projects/toolbox/forms/validation/validation.service.ts","../../../projects/toolbox/forms/validation/validation.component.ts","../../../projects/toolbox/forms/validation/directives/currency.directive.ts","../../../projects/toolbox/forms/validation/directives/upper.directive.ts","../../../projects/toolbox/forms/validation/directives/not-equal.directive.ts","../../../projects/toolbox/forms/validation/directives/equal.directive.ts","../../../projects/toolbox/forms/validation/index.ts","../../../projects/toolbox/forms/form-helpers.ts","../../../projects/toolbox/forms/base-form.component.ts","../../../projects/toolbox/forms/autofocus/autofocus.directive.ts","../../../projects/toolbox/forms/guards/can-deactivate.guard.ts","../../../projects/toolbox/forms/controls/accessor-base.directive.ts","../../../projects/toolbox/forms/controls/input-base.directive.ts","../../../projects/toolbox/forms/controls/form-actions/form-actions.component.ts","../../../projects/toolbox/forms/controls/label/label.component.ts","../../../projects/toolbox/forms/controls/input/input.component.ts","../../../projects/toolbox/forms/controls/select/select.component.ts","../../../projects/toolbox/forms/controls/switch/switch.component.ts","../../../projects/toolbox/forms/controls/text-area/text-area.component.ts","../../../projects/toolbox/forms/controls/index.ts","../../../projects/toolbox/forms/forms.module.ts","../../../projects/toolbox/forms/toolbox-forms.ts"],"sourcesContent":["/* eslint-disable max-len,@typescript-eslint/strict-boolean-expressions */\r\nimport { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\r\n\r\nimport {\r\n  isInputValueEmpty,\r\n  isDateValid,\r\n  isSsn,\r\n  isNumber,\r\n  isCurrency,\r\n  isCreditCard,\r\n  isEmail\r\n} from \"@lacera/ngx-toolbox/utilities\";\r\n\r\n/**\r\n * Validator that requires a date. It uses {@link isDateValid}, which checks if\r\n * the date is of types {@link Date} or {@link String} ignoring numbers.\r\n * @param control The control to validate.\r\n * @returns 'invalidDate' as true if validation fails, otherwise null.\r\n */\r\nexport const dateValidator = ( control: AbstractControl ): ValidationErrors | null =>\r\n  // Don't validate empty values to allow optional controls\r\n  isInputValueEmpty( control.value )\r\n    ? null\r\n    : isDateValid( control.value ) ? null : { invalidDate: true };\r\n\r\n\r\n/**\r\n * Validator that requires a social security number with or without dashes.\r\n * @param control The control to validate.\r\n * @returns 'invalidSSN' as true if validation fails, otherwise null.\r\n */\r\nexport const ssnValidator = ( control: AbstractControl ): ValidationErrors | null =>\r\n  isInputValueEmpty( control.value )\r\n    ? null\r\n    : isSsn( control.value ) ? null : { invalidSSN: true };\r\n\r\n/**\r\n * Validator that performs validation on an Internet email address (SMTP). It\r\n * uses an RFC 2822 compliant regex match.\r\n * @param control The control to validate.\r\n * @returns 'invalidEmailAddress' as true if validation fails, otherwise null.\r\n */\r\nexport const emailValidator = ( control: AbstractControl ): ValidationErrors | null =>\r\n  !isInputValueEmpty( control.value ) && isEmail( control.value )\r\n    ? null\r\n    : { invalidEmailAddress: true };\r\n\r\n/**\r\n * Validator that performs validation on a credit card number\r\n * (Visa, MasterCard, American Express, Diners Club, Discover, and JCB).\r\n * @param control The control to validate.\r\n * @returns 'invalidCreditCard' as true if validation fails, otherwise null.\r\n */\r\nexport const creditCardValidator =\r\n  ( control: AbstractControl ): ValidationErrors | null =>\r\n    // Visa, MasterCard, American Express, Diners Club, Discover, JCB\r\n    !isInputValueEmpty( control.value ) && isCreditCard( control.value )\r\n      ? null\r\n      : { invalidCreditCard: true };\r\n\r\n/**\r\n * Validator that requires the control value to be equal to a specified value.\r\n * @param value The value the compare against.\r\n * @returns 'equal' as true if validation fails, otherwise null.\r\n */\r\nexport const equalValidator = ( value: any ): ValidatorFn =>\r\n  ( c: AbstractControl ): ValidationErrors | null =>\r\n    isInputValueEmpty( c.value )\r\n      ? null\r\n      : c.value === value ? null : { equal: { equalValue: value } };\r\n\r\n/**\r\n * Validator that requires the control value to not be equal to a specified value.\r\n * @param value The value the compare against.\r\n * @returns 'notEqual' as true if validation fails, otherwise null.\r\n */\r\nexport const notEqualValidator = ( value: any ): ValidatorFn =>\r\n  ( c: AbstractControl ): ValidationErrors | null =>\r\n    isInputValueEmpty( c.value )\r\n      ? null\r\n      : c.value !== value ? null : { notEqual: { notEqualValue: value } };\r\n\r\n/**\r\n * Validator that requires the control value to be a number.\r\n * @param control The control to validate.\r\n * @returns 'invalidNumber' as false if validation fails, otherwise null.\r\n */\r\nexport const numericValidator =\r\n  ( control: AbstractControl ): ValidationErrors | null =>\r\n    isInputValueEmpty( control.value )\r\n      ? null\r\n      : isNumber( control.value ) ? null : { invalidNumber: true };\r\n\r\n/**\r\n * Validator that requires the control value to be of currency format ($0.00).\r\n * @param control The control to validate.\r\n * @returns 'invalidCurrency' as false if validation fails, otherwise null.\r\n */\r\nexport const currencyValidator =\r\n  ( control: AbstractControl ): ValidationErrors | null =>\r\n    isInputValueEmpty( control.value )\r\n      ? null\r\n      : isCurrency( control.value ) ? null : { invalidCurrency: true };\r\n","import { Injectable } from \"@angular/core\";\r\n\r\nimport { isNotNullOrEmpty } from \"@lacera/ngx-toolbox/utilities\";\r\nimport {\r\n  TbxValidationControlMessages,\r\n  TbxValidationMessage\r\n} from \"./validation.interface\";\r\n\r\n/**\r\n * Provides form validation services to be shared in the application.\r\n */\r\n@Injectable()\r\nexport class TbxValidationService {\r\n  /**\r\n   * The messages for a form that are provided when the form is instantiated. These\r\n   * are used instead of the standard message for the various validators.\r\n   */\r\n  public static formMessages: TbxValidationControlMessages[] = [];\r\n\r\n  /**\r\n   * Gets the validation error message for the specified code.\r\n   * @param code The validator code.\r\n   * @param validatorValue The validator value.\r\n   * @param controlName The name of the control.\r\n   * @returns The validator error message if found.\r\n   */\r\n  public static getValidatorErrorMessage(\r\n    code: string, validatorValue: any, controlName?: string ): string | null {\r\n    const messages: TbxValidationMessage = {\r\n      required: \"This is a required field\",\r\n      minlength: `Minimum required length is ${validatorValue.requiredLength}`,\r\n      maxlength: `Maximum allowed length is ${validatorValue.requiredLength}`,\r\n      max: `The maximum range allowed is ${validatorValue.max}`,\r\n      min: `The minimum range allowed is ${validatorValue.min}`,\r\n      invalidCreditCard: \"Invalid credit card number\",\r\n      invalidDate: \"This is not a valid date\",\r\n      email: \"Invalid email address\",\r\n      invalidSSN: \"This SSN is not valid\",\r\n      equal: `This field must equal '${validatorValue.equalValue}'`,\r\n      notEqual: `This field must not equal '${validatorValue.notEqualValue}'`,\r\n      invalidNumber: \"This is not a valid number\",\r\n      invalidCurrency: \"This is not valid currency\"\r\n    };\r\n\r\n    // Check if we have a message to use from the back-end\r\n    const message = TbxValidationService.getControlMessage( code, controlName );\r\n    if( message !== null ) {\r\n      return message;\r\n    }\r\n\r\n    // No back-end message, check the array above and if none, return the\r\n    // validator value which is probably validator not handled by us\r\n    return isNotNullOrEmpty( messages[code] )\r\n      ? messages[code]\r\n      : validatorValue;\r\n  }\r\n\r\n  /**\r\n   * Gets the message if controlName is specified, and form control messages\r\n   * have been provided.\r\n   * @param code The validator code.\r\n   * @param controlName The control name to find.\r\n   * @returns The control message if found, null otherwise.\r\n   */\r\n  public static getControlMessage( code: string, controlName?: string ): string | null {\r\n    if( controlName === undefined || TbxValidationService.formMessages.length === 0 ) {\r\n      return null;\r\n    }\r\n\r\n    for( const messages of TbxValidationService.formMessages ) {\r\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n      if( messages[controlName] ) {\r\n        for( const message of messages[controlName] ) {\r\n          // tslint:disable-next-line: strict-boolean-expressions\r\n          if( message[code] ) {\r\n            return message[code];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import { Component, input, computed } from \"@angular/core\";\r\nimport { AbstractControl } from \"@angular/forms\";\r\n\r\nimport { isNotNullOrEmpty } from \"@lacera/ngx-toolbox/utilities\";\r\nimport { getControlName } from \"../form-helpers\";\r\nimport { TbxValidationService } from \"./validation.service\";\r\n\r\n/**\r\n * Displays error messages for the specified control.\r\n */\r\n@Component( {\r\n  selector: \"tbx-validation-message\",\r\n  standalone: false,\r\n  template: `\r\n    @if(errorMessage) {\r\n    <div class='invalid-feedback'\r\n         style=\"display:block\">\r\n      {{ errorMessage }}\r\n    </div>\r\n    }\r\n  `\r\n} )\r\nexport class TbxValidationComponent {\r\n  /** Gets or sets the control for which to check for errors. */\r\n  public readonly control = input.required<AbstractControl | null | undefined>();\r\n\r\n  /** Gets or sets an optional message to display when there is an error. */\r\n  public readonly message = input( \"\" );\r\n\r\n  /** Gets the error message for the control, or null if none. */\r\n  public get errorMessage(): string | null {\r\n    const ctrl = this.control();\r\n\r\n    if( !ctrl || !ctrl.touched ) {\r\n      return null;\r\n    }\r\n\r\n    const errors = ctrl.errors;\r\n    if( !errors ) {\r\n      return null;\r\n    }\r\n\r\n    for( const propName in errors ) {\r\n      if( Object.prototype.hasOwnProperty.call( errors, propName ) ) {\r\n        return isNotNullOrEmpty( this.message() )\r\n          ? this.message()\r\n          : TbxValidationService.getValidatorErrorMessage(\r\n            propName,\r\n            errors[propName],\r\n            getControlName( ctrl )\r\n          );\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import { Directive, Input, forwardRef } from \"@angular/core\";\r\nimport {\r\n  NG_VALIDATORS,\r\n  Validator,\r\n  AbstractControl,\r\n  ValidationErrors\r\n} from \"@angular/forms\";\r\n\r\nimport { currencyValidator } from \"../validators\";\r\n\r\n/**\r\n * Directive that requires a control value to be of currency format ($0.00).\r\n */\r\n@Directive( {\r\n  selector: \"[tbx-currency][formControlName],[tbx-currency][formControl],[tbx-currency][ngModel]\",\r\n  standalone: true,\r\n  providers: [\r\n    {\r\n      provide: NG_VALIDATORS,\r\n      useExisting: forwardRef( () => TbxCurrencyValidator ),\r\n      multi: true\r\n    }\r\n  ]\r\n} )\r\nexport class TbxCurrencyValidator implements Validator {\r\n  /** Indicates whether the validator is enabled. */\r\n  private enabled = false;\r\n\r\n  /** Stores the function to call when value changes. */\r\n  private onChange: ( () => void ) | undefined;\r\n\r\n  /**\r\n   * Sets the currency value when it changes.\r\n   * @param value The changed value.\r\n   */\r\n  @Input( \"tbx-currency\" )\r\n  public set currency( value: boolean | string ) {\r\n    this.enabled = value === \"\" || value === true || value === \"true\";\r\n\r\n    if( this.onChange !== undefined ) {\r\n      this.onChange();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called to validate the specified control value.\r\n   * @param c The control to validate.\r\n   * @returns The validation errors or null if validation succeeds.\r\n   */\r\n  public validate( c: AbstractControl ): ValidationErrors | null {\r\n    return this.enabled ? currencyValidator( c ) : null;\r\n  }\r\n\r\n  /**\r\n   * Called when the validator is changed.\r\n   * @param fn The function to be called when the validator changes.\r\n   */\r\n  public registerOnValidatorChange( fn: () => void ): void {\r\n    this.onChange = fn;\r\n  }\r\n}\r\n","import { Directive, HostListener, ElementRef, Attribute } from \"@angular/core\";\r\n\r\n/**\r\n * Directive that requires a control value to be uppercase.\r\n */\r\n@Directive( {\r\n  selector: \"[tbx-upper][formControlName],[tbx-upper][formControl],[tbx-upper][ngModel]\",\r\n  standalone: true\r\n} )\r\nexport class TbxUpperDirective {\r\n  private inputEl?: HTMLInputElement;\r\n\r\n  public constructor( public ref: ElementRef ) {\r\n  }\r\n\r\n  @HostListener( \"input\", [\"$event\"] )\r\n  public onInput( _: any ): void {\r\n    if( !this.inputEl ) {\r\n      this.inputEl = this.ref.nativeElement.querySelector( \".form-control\" );\r\n    }\r\n\r\n    if( this.inputEl != null ) {\r\n      const start = this.inputEl.selectionStart;\r\n      const end = this.inputEl.selectionEnd;\r\n      this.inputEl.value = this.inputEl.value.toUpperCase();\r\n      this.inputEl.setSelectionRange( start, end );\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  forwardRef,\r\n  OnInit,\r\n  SimpleChanges,\r\n  OnChanges\r\n} from \"@angular/core\";\r\n\r\nimport {\r\n  NG_VALIDATORS,\r\n  Validator,\r\n  ValidatorFn,\r\n  AbstractControl,\r\n  ValidationErrors\r\n} from \"@angular/forms\";\r\n\r\nimport { notEqualValidator } from \"../validators\";\r\n\r\n/**\r\n * Directive that requires a control value to be equal to a specified value.\r\n */\r\n@Directive( {\r\n  selector: \"[tbx-notEqual][formControlName],[tbx-notEqual][formControl],[tbx-notEqual][ngModel]\",\r\n  standalone: true,\r\n  providers: [\r\n    {\r\n      provide: NG_VALIDATORS,\r\n      useExisting: forwardRef( () => TbxNotEqualValidator ),\r\n      multi: true\r\n    }\r\n  ]\r\n} )\r\nexport class TbxNotEqualValidator implements Validator, OnInit, OnChanges {\r\n  /** Gets or sets the value the control value should not equal to. */\r\n  @Input( \"tbx-notEqual\" )\r\n  public equal: any;\r\n\r\n  /** Stores the validator function called when the control value changes. */\r\n  private validator!: ValidatorFn;\r\n\r\n  /** Stores the function to call when value changes. */\r\n  private onChange!: () => void;\r\n\r\n  public ngOnInit(): void {\r\n    this.validator = notEqualValidator( this.equal );\r\n  }\r\n\r\n  public ngOnChanges( changes: SimpleChanges ): void {\r\n    for( const key in changes ) {\r\n      if( key === \"notEqual\" ) {\r\n        this.validator = notEqualValidator( changes[key].currentValue );\r\n\r\n        // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n        if( this.onChange ) {\r\n          this.onChange();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called to validate the specified control value.\r\n   * @param c The control to validate.\r\n   * @returns The validation errors or null if validation succeeds.\r\n   */\r\n  public validate( c: AbstractControl ): ValidationErrors | null {\r\n    return this.validator( c );\r\n  }\r\n\r\n  /**\r\n   * Called when the validator is changed.\r\n   * @param fn The function to be called when the validator changes.\r\n   */\r\n  public registerOnValidatorChange( fn: () => void ): void {\r\n    this.onChange = fn;\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  forwardRef,\r\n  OnInit,\r\n  SimpleChanges,\r\n  OnChanges\r\n} from \"@angular/core\";\r\n\r\nimport {\r\n  NG_VALIDATORS,\r\n  Validator,\r\n  ValidatorFn,\r\n  AbstractControl,\r\n  ValidationErrors\r\n} from \"@angular/forms\";\r\n\r\nimport { equalValidator } from \"../validators\";\r\n\r\n/**\r\n * Directive that requires a control value to be equal to a specified value.\r\n */\r\n@Directive( {\r\n  selector: \"[tbx-equal][formControlName],[tbx-equal][formControl],[tbx-equal][ngModel]\",\r\n  standalone: true,\r\n  providers: [\r\n    {\r\n      provide: NG_VALIDATORS,\r\n      useExisting: forwardRef( () => TbxEqualValidator ),\r\n      multi: true\r\n    }\r\n  ]\r\n} )\r\nexport class TbxEqualValidator implements Validator, OnInit, OnChanges {\r\n  /** Gets or sets the value the control value should equal to. */\r\n  @Input( \"tbx-equal\" )\r\n  public equal: any;\r\n\r\n  /** Stores the validator function called when the control value changes. */\r\n  private validator!: ValidatorFn;\r\n\r\n  /** Stores the function to call when value changes. */\r\n  private onChange!: () => void;\r\n\r\n  /**\r\n   * Invoked only once when the directive is instantiated.\r\n   */\r\n  public ngOnInit(): void {\r\n    this.validator = equalValidator( this.equal );\r\n  }\r\n\r\n  /**\r\n   * Called when the content has changed.\r\n   * @param changes Contains the changed properties.\r\n   */\r\n  public ngOnChanges( changes: SimpleChanges ): void {\r\n    for( const key in changes ) {\r\n      if( key === \"equal\" ) {\r\n        this.validator = equalValidator( changes[key].currentValue );\r\n\r\n        // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n        if( this.onChange ) {\r\n          this.onChange();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called to validate the specified control value.\r\n   * @param c The control to validate.\r\n   * @returns The validation errors or null if validation succeeds.\r\n   */\r\n  public validate( c: AbstractControl ): ValidationErrors | null {\r\n    return this.validator( c );\r\n  }\r\n\r\n  /**\r\n   * Called when the validator is changed.\r\n   * @param fn The function to be called when the validator changes.\r\n   */\r\n  public registerOnValidatorChange( fn: () => void ): void {\r\n    this.onChange = fn;\r\n  }\r\n}\r\n","export { TbxValidationService } from \"./validation.service\";\r\n\r\nimport { TbxValidationComponent } from \"./validation.component\";\r\nimport { TbxCurrencyValidator } from \"./directives/currency.directive\";\r\nimport { TbxUpperDirective } from \"./directives/upper.directive\";\r\nimport { TbxNotEqualValidator } from \"./directives/not-equal.directive\";\r\nimport { TbxEqualValidator } from \"./directives/equal.directive\";\r\n\r\nexport const validation = [\r\n  TbxValidationComponent,\r\n];\r\n\r\nexport const standaloneValidation = [\r\n  TbxCurrencyValidator,\r\n  TbxUpperDirective,\r\n  TbxNotEqualValidator,\r\n  TbxEqualValidator\r\n];\r\n","import { formatDate } from \"@angular/common\";\r\nimport {\r\n  AbstractControl,\r\n  FormControl,\r\n  FormGroup,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  Validators\r\n} from \"@angular/forms\";\r\nimport {\r\n  isCurrency,\r\n  isNotNullOrEmpty,\r\n  isNumber,\r\n  toDate,\r\n  toFloat,\r\n  toNumber\r\n} from \"@lacera/ngx-toolbox/utilities\";\r\nimport {\r\n  currencyValidator,\r\n  dateValidator,\r\n  numericValidator\r\n} from \"./validation/validators\";\r\nimport {\r\n  TbxValidationCode,\r\n  TbxValidationMessage\r\n} from \"./validation/validation.interface\";\r\nimport { TbxMetadata, TbxModelMetadata } from \"@lacera/ngx-toolbox/http\";\r\nimport { TbxValidationService } from \"./validation\";\r\n\r\n/**\r\n * Gets the control name by querying the parent of the control.\r\n * @param control The control for which to get the name.\r\n * @exception control must be provided to the function.\r\n * @returns The control name or undefined\r\n */\r\nexport const getControlName = ( control?: AbstractControl ): string | undefined => {\r\n  if( control === undefined || control.parent === null ) {\r\n    throw new Error( \"Invalid control provided to the function.\" );\r\n  }\r\n\r\n  const parent = control.parent;\r\n\r\n  return Object.keys( parent.controls )\r\n    .find( name => control === parent.get( name ) );\r\n};\r\n\r\n/**\r\n * Gets the Bootstrap CSS classes to show errors for when a field is invalid.\r\n * @param fieldName The field to validate.\r\n * @param form The form that contains the field.\r\n * @param className The class name to apply to the control (defaults to 'is-invalid').\r\n * @returns The CSS classes.\r\n */\r\nexport const getFieldErrorCss = (\r\n  fieldName: string, form: FormGroup, className = \"is-invalid\" ): {} =>\r\n(\r\n  {\r\n    // eslint-disable-next-line @typescript-eslint/naming-convention\r\n    [className]: isFieldValid( fieldName, form )\r\n  }\r\n);\r\n\r\n/**\r\n * A shortcut to sets errors on a form control when running validations manually\r\n * instead of having to get the control and validate.\r\n * @param field The name of the field to set in the form.\r\n * @param errors The map of errors to set for the field control.\r\n * @param form The form to search for the field. If not specified,\r\n * the local form is searched.\r\n * @throws The field does not exist in the local form or the specified one.\r\n * @returns Nothing.\r\n */\r\nexport const setFieldErrors = (\r\n  field: string, errors: ValidationErrors | null, form: FormGroup ): void => {\r\n  const ctrl = form.get( field );\r\n  if( ctrl === null ) {\r\n    throw new Error( `The field \"${field}\" was not found in the form.` );\r\n  }\r\n\r\n  ctrl.setErrors( errors );\r\n  ctrl.markAsTouched();\r\n};\r\n\r\n/**\r\n * Checks if a field is valid by checking the control's Valid value and whether\r\n * the control has been touched.\r\n * @param fieldName The field to check.\r\n * @param form The form that contains the control.\r\n * @returns true if valid, false otherwise.\r\n */\r\nexport const isFieldValid = ( fieldName: string, form: FormGroup ): boolean => {\r\n  const control = form.get( fieldName );\r\n\r\n  if( control instanceof FormControl ) {\r\n    return !control.valid && control.touched;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\n/**\r\n * Validates all fields in the specified form, and causes validation messages.\r\n * @param  form The form to validate.\r\n * @returns The list of errors found in the fields, if any.\r\n */\r\nexport const validateAllFields = ( form: FormGroup ): string[] => {\r\n  const returnErrors: string[] = [];\r\n\r\n  Object.keys( form.controls ).forEach( ( field: string ) => {\r\n    const control = form.get( field );\r\n    if( control instanceof FormControl ) {\r\n      control.markAsTouched( { onlySelf: true } );\r\n\r\n      const errors = control.errors;\r\n      if( errors !== null ) {\r\n        Object.keys( errors ).forEach( key => {\r\n          const message = TbxValidationService.getValidatorErrorMessage(\r\n            key as TbxValidationCode,\r\n            errors[key],\r\n            getControlName( control )\r\n          );\r\n\r\n          returnErrors.push( message !== null ? message : errors[key] );\r\n        } );\r\n      }\r\n    }\r\n    else if( control instanceof FormGroup ) {\r\n      returnErrors.push( ...validateAllFields( control ) );\r\n    }\r\n  } );\r\n\r\n  return returnErrors;\r\n};\r\n\r\n/**\r\n * Determines if the given data type is a C# numeric type such as Int32,\r\n * Int32?, int, or int?.\r\n * @param type The C# data type to check.\r\n * @returns true if the data type is numeric, false otherwise.\r\n */\r\nexport const isNumberDataType = ( type: string | null ) =>\r\n  type != null && [\"Int32\", \"Int32?\", \"int\", \"int?\"].includes( type );\r\n\r\n/**\r\n * Determines if the given data type is a C# date type such as DateTime,\r\n * DateTime?, Date, or Date?.\r\n * @param type The C# data type to check.\r\n * @returns true if the data type is a DateTime, false otherwise.\r\n */\r\nexport const isDateDataType = ( type: string | null ) =>\r\n  type != null && [\"DateTime\", \"DateTime?\", \"Date\", \"Date?\"].includes( type );\r\n\r\n/**\r\n * Determines if the given data type is a C# float type such as Decimal,\r\n * Decimal?, Double, or Double?.\r\n * @param type The C# data type to check.\r\n * @returns true if the data type is numeric, false otherwise.\r\n */\r\nexport const isFloatDateType = ( type: string | null ) =>\r\n  type != null && [\"Decimal\", \"Decimal?\", \"Double\", \"Double?\"].includes( type );\r\n\r\n/**\r\n * Creates the form based on the specified model (received from the back-end).\r\n * @param model The model received from the server.\r\n * @param dateFormat The format for the dates if requested as string.\r\n * @param convertDates Indicates to convert the values to {@link Date}\r\n * @throws The model must be provided.\r\n */\r\nexport const createReactiveForm = (\r\n  model: TbxModelMetadata,\r\n  dateFormat = \"yyyy-MM-dd\",\r\n  convertDates = false\r\n): FormGroup => {\r\n  if( model == null || model.metadata == null ) {\r\n    throw new Error(\r\n      \"The model received from the server must be specified to build the form. \" +\r\n      \"It is also expected the model to include a metadata property.\" );\r\n  }\r\n\r\n  // Clear the validation form messages (and the form group to be safe)\r\n  TbxValidationService.formMessages = [];\r\n\r\n  // Create a new form for all controls and validation\r\n  const tempForm = new FormGroup( {} );\r\n\r\n  // Loop through all the received metadata and create the form\r\n  for( const meta of model.metadata ) {\r\n    if( meta.name === null ||\r\n      meta.dataType === null ||\r\n      meta.dataType.indexOf( \"Enumerable\" ) !== -1 ) {\r\n      continue;\r\n    }\r\n\r\n    const isNumberType = isNumberDataType( meta.dataType );\r\n    const isDateTimeType = isDateDataType( meta.dataType );\r\n    const isFloatType = isFloatDateType( meta.dataType );\r\n\r\n    // Convert the date to a real date if requested\r\n    let value = meta.value;\r\n    if( isDateTimeType && isNotNullOrEmpty( value ) ) {\r\n      value = convertDates\r\n        ? toDate( value )\r\n        : formatDate( value, dateFormat, \"en\" );\r\n    }\r\n\r\n    if( isNumberType && isNumber( value ) ) {\r\n      value = toNumber( value );\r\n    }\r\n\r\n    if( isFloatType && isCurrency( value ) ) {\r\n      value = toFloat( value );\r\n    }\r\n\r\n    // Configure the validators retrieved from the metadata\r\n    const { validators, messages } = getValidatorsFromMeta( meta );\r\n\r\n    // Add the control to the Angular form\r\n    tempForm.addControl( meta.name, new FormControl( value, validators ) );\r\n\r\n    // Add the custom validation messages to the validation service\r\n    TbxValidationService.formMessages.push( { [meta.name]: messages } );\r\n  }\r\n\r\n  tempForm.markAsPristine();\r\n\r\n  return tempForm;\r\n};\r\n\r\nexport const getValidatorsFromMeta = ( meta: TbxMetadata ): {\r\n  /** The validators for the form. */\r\n  validators: ValidatorFn[];\r\n\r\n  /** The validation messages to display on violations. */\r\n  messages: TbxValidationMessage[];\r\n} => {\r\n  const validators: ValidatorFn[] = [];\r\n  const messages: TbxValidationMessage[] = [{}];\r\n\r\n  if( meta.required ) {\r\n    validators.push( Validators.required );\r\n    messages.push( { required: meta.requiredMessage ?? \"\" } );\r\n  }\r\n\r\n  if( meta.maxLength != null && meta.maxLength > 0 ) {\r\n    validators.push( Validators.maxLength( meta.maxLength ) );\r\n    messages.push( { maxlength: meta.maxLenMessage ?? \"\" } );\r\n  }\r\n\r\n  if( meta.minLength != null && meta.minLength > 0 ) {\r\n    validators.push( Validators.minLength( meta.minLength ) );\r\n    messages.push( { minlength: meta.minLenMessage ?? \"\" } );\r\n  }\r\n\r\n  if( meta.maxRange != null && meta.maxRange > 0 ) {\r\n    validators.push( Validators.max( meta.maxRange ) );\r\n    messages.push( { max: meta.rangeMessage ?? \"\" } );\r\n  }\r\n\r\n  if( meta.minRange != null && meta.minRange > 0 ) {\r\n    validators.push( Validators.min( meta.minRange ) );\r\n    messages.push( { min: meta.rangeMessage ?? \"\" } );\r\n  }\r\n\r\n  if( isDateDataType( meta.dataType ) ) {\r\n    validators.push( dateValidator );\r\n  }\r\n\r\n  if( isNumberDataType( meta.dataType ) ) {\r\n    validators.push( numericValidator );\r\n  }\r\n\r\n  if( isFloatDateType( meta.dataType ) ) {\r\n    validators.push( currencyValidator );\r\n  }\r\n\r\n  return {\r\n    validators,\r\n    messages\r\n  };\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport {\r\n  FormGroup,\r\n  FormControl,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  AbstractControl\r\n} from \"@angular/forms\";\r\n\r\nimport { TbxError, TbxModelMetadata } from \"@lacera/ngx-toolbox/http\";\r\nimport { TbxBaseComponent } from \"@lacera/ngx-toolbox/components\";\r\n\r\nimport {\r\n  createReactiveForm,\r\n  getFieldErrorCss,\r\n  isFieldValid,\r\n  setFieldErrors,\r\n  validateAllFields\r\n} from \"./form-helpers\";\r\n\r\nimport { TbxCanDeactivate } from \"./guards/can-deactivate.interface\";\r\nimport { TbxValidationService } from \"./validation\";\r\n\r\n/**\r\n * Displays error messages for the specified control.\r\n */\r\n@Injectable()\r\nexport abstract class TbxBaseFormComponent\r\n  extends TbxBaseComponent implements TbxCanDeactivate {\r\n  /** Stores the form for the view. */\r\n  public form!: FormGroup;\r\n\r\n  /** Gets or sets a value indicating whether we're in edit mode. */\r\n  public editMode = false;\r\n\r\n  /**\r\n   * Let Angular know whether the user can navigate away from this component.\r\n   * @see TbxCanDeactivateGuard\r\n   * @returns true if navigation allowed, false otherwise.\r\n   */\r\n  public get canDeactivate(): boolean {\r\n    if( !this.form.dirty ) {\r\n      return true;\r\n    }\r\n\r\n    const title = \"You have unsaved changes\";\r\n    const msg = \"Are you sure you want to navigate away from this page?\";\r\n\r\n    return confirm( `${title}. ${msg}` );\r\n  }\r\n\r\n  /**\r\n   * Gets the Bootstrap CSS classes to show errors for when a field is invalid.\r\n   * @param fieldName The field to validate.\r\n   * @returns The CSS classes.\r\n   */\r\n  public getFieldErrorCss( fieldName: string ): {} {\r\n    return getFieldErrorCss( fieldName, this.form );\r\n  }\r\n\r\n  /**\r\n   * Checks if a field is valid by checking the control's Valid value and whether\r\n   * the control has been touched.\r\n   * @param fieldName - The field to check.\r\n   * @returns true if valid, false otherwise.\r\n   */\r\n  public isFieldValid( fieldName: string ): boolean {\r\n    TbxBaseFormComponent.ensureFormObject( this.form );\r\n\r\n    return isFieldValid( fieldName, this.form );\r\n  }\r\n\r\n  /**\r\n   * Validates the form and if not valid, it displays a message to the user.\r\n   * @param theForm The form to validate.\r\n   * @returns true if the form is valid, false otherwise.\r\n   */\r\n  public isFormValid( theForm?: FormGroup ): boolean {\r\n    const f = theForm ?? this.form;\r\n    TbxBaseFormComponent.ensureFormObject( f );\r\n\r\n    if( f.valid ) {\r\n      return true;\r\n    }\r\n\r\n    // Force the fields to validate so they can show errors\r\n    const errors = this.validateAllFields();\r\n\r\n    let message = \"Please correct the errors on the form and try again\\n\";\r\n    if( errors.length > 0 ) {\r\n      message += errors.join( \"\\n\" );\r\n    }\r\n\r\n    this.errorMessage.set( message );\r\n\r\n    // The form is not valid\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Validates all fields in the specified form, and causes validation messages.\r\n   * @returns The list of errors found in the fields, if any.\r\n   */\r\n  public validateAllFields(): string[] {\r\n    TbxBaseFormComponent.ensureFormObject( this.form );\r\n\r\n    return validateAllFields( this.form );\r\n  }\r\n\r\n  /**\r\n   * Creates the form based on the specified model (received from the back-end).\r\n   * @param model The model received from the server.\r\n   * @param dateFormat The format for the dates if requested as string.\r\n   * @param convertDates Indicates to convert the values to {@link Date}\r\n   * or leave as received/string.\r\n   * @throws The model must be provided.\r\n   */\r\n  public createForm(\r\n    model: TbxModelMetadata,\r\n    dateFormat = \"yyyy-MM-dd\",\r\n    convertDates = false ): void {\r\n    // Save the form in the base class\r\n    this.form = createReactiveForm( model, dateFormat, convertDates );\r\n  }\r\n\r\n  /**\r\n   * A shortcut to sets errors on a form control when running validations manually\r\n   * instead of having to get the control and validate.\r\n   * @param field The name of the field to set in the form.\r\n   * @param errors The map of errors to set for the field control.\r\n   * @throws The field does not exist in the local form or the specified one.\r\n   * @returns Nothing.\r\n   */\r\n  public setFieldErrors( field: string, errors: ValidationErrors | null ): void {\r\n    TbxBaseFormComponent.ensureFormObject( this.form );\r\n    setFieldErrors( field, errors, this.form );\r\n  }\r\n\r\n  /**\r\n   * Handles errors encountered while saving a record in the form.\r\n   * @param error The error received from the service.\r\n   * @param theForm The optional form to validate.\r\n   * @returns Nothing.\r\n   */\r\n  public handleSaveError( error: TbxError, theForm?: FormGroup ): void {\r\n    const f = theForm ?? this.form;\r\n    TbxBaseFormComponent.ensureFormObject( f );\r\n\r\n    for( const val of error.validationErrors ) {\r\n      const ctrl = f.get( val.key );\r\n\r\n      if( ctrl !== null ) {\r\n        ctrl.setErrors( { invalid: val.message } );\r\n        ctrl.markAsTouched( { onlySelf: true } );\r\n      }\r\n    }\r\n\r\n    this.errorMessage.set( error.message );\r\n    this.busy.set( false );\r\n  }\r\n\r\n  /**\r\n   * Adds a new control to the current form.\r\n   * @param name The name of the field that matches 'fieldControlName' in the form.\r\n   * @param value The initial value of the control.\r\n   * @param validators The validators to add to the form control.\r\n   * @param messages The messages to add to the {@link TbxValidationComponent} control.\r\n   * @returns The control added to the form.\r\n   */\r\n  public addFormField(\r\n    name: string,\r\n    value: any,\r\n    validators?: ValidatorFn[],\r\n    messages?: any ): AbstractControl {\r\n    TbxBaseFormComponent.ensureFormObject( this.form );\r\n\r\n    const control = new FormControl( value, validators );\r\n    this.form.addControl( name, control );\r\n\r\n    // Add the validations messages if any\r\n    if( messages !== undefined ) {\r\n      TbxValidationService.formMessages.push( { [name]: messages } );\r\n    }\r\n\r\n    return control;\r\n  }\r\n\r\n  /**\r\n   * Adds additional validators to the given control name and its messages.\r\n   * @param name The name of the field that matches 'fieldControlName' in the form.\r\n   * @param validators The validators to add to the form control.\r\n   * @param messages The messages to add to the {@link TbxValidationComponent} control.\r\n   * @returns The form control that was modified.\r\n   */\r\n  public addFormFieldValidators(\r\n    name: string,\r\n    validators: ValidatorFn[],\r\n    messages?: any ): AbstractControl {\r\n    TbxBaseFormComponent.ensureFormObject( this.form );\r\n\r\n    const control = this.form.get( name );\r\n    if( control === null ) {\r\n      throw new Error( `The control with name ${name} was not found in the form.` );\r\n    }\r\n\r\n    // Get the existing validators in the control\r\n    const currentValidators = control.validator;\r\n\r\n    // Start fresh\r\n    control.clearValidators();\r\n\r\n    // Add the additional validators including existing ones\r\n    control.setValidators(\r\n      currentValidators !== null\r\n        ? [currentValidators, ...validators]\r\n        : [...validators]\r\n    );\r\n\r\n    // Add the validations messages if any\r\n    if( messages !== undefined ) {\r\n      TbxValidationService.formMessages.push( {\r\n        [name]: messages\r\n      } );\r\n    }\r\n\r\n    this.form.updateValueAndValidity();\r\n\r\n    return control;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/member-ordering\r\n  private static ensureFormObject( form: FormGroup ): void {\r\n    if( form == null ) {\r\n      throw new Error( \"Form must be created first.\" );\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  input,\r\n  model,\r\n  OnChanges,\r\n  OnDestroy,\r\n  SimpleChanges,\r\n  ElementRef,\r\n  AfterContentInit\r\n} from \"@angular/core\";\r\n\r\n/**\r\n * Directive sets the focus on an element.\r\n */\r\n@Directive( {\r\n  selector: \"[autofocus], [tbxAutoFocus], [tbxAutofocus]\",\r\n  standalone: true\r\n} )\r\nexport class TbxAutofocusDirective implements AfterContentInit, OnChanges, OnDestroy {\r\n  /** Indicates whether to focus the element. */\r\n  public shouldFocusElement = input<boolean | string>( \"\" );\r\n\r\n  /** The delay before taking the focus. */\r\n  public timerDelay = model<number | string>( 10 );\r\n\r\n  /** The timer to know when to focus. */\r\n  private timer?: number;\r\n\r\n  /**\r\n   * Initializes a new instance of the {@link TbxAutofocusDirective} class.\r\n   * @param elementRef The element to set the focus to.\r\n   */\r\n  public constructor( private readonly elementRef: ElementRef ) {\r\n  }\r\n\r\n  /** Called once after the contents have been fully initialized. */\r\n  public ngAfterContentInit(): void {\r\n    // Because this directive can act on the stand-only \"autofocus\" attribute or\r\n    // the more specialized \"tbx-autofocus\" property, we need to check to see if the\r\n    // \"shouldFocusElement\" input property is the empty string. This will signify\r\n    // that the focus it not being data-driven and should be performed automatically.\r\n    if( this.shouldFocusElement() === \"\" ) {\r\n      this.startFocusWorkflow();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called every time the input bindings are updated.\r\n   * @param changes The changes that cause the update.\r\n   */\r\n  public ngOnChanges( changes: SimpleChanges ): void {\r\n    // If the timer delay is being passed-in as a string (ie, someone is using\r\n    // attribute-input syntax, not property-input syntax), let's coalesce the\r\n    // attribute to a numeric value so that our type-annotations are consistent.\r\n    if( typeof this.timerDelay() !== \"number\" ) {\r\n      // If coalesce fails, just fall-back to a same value.\r\n      if( isNaN( +this.timerDelay() ) ) {\r\n        this.timerDelay.set( 10 );\r\n      }\r\n    }\r\n\r\n    // If the focus input is being data-driven, then we either need to start the\r\n    // focus workflow if focus is required; or, clear any existing workflow if focus\r\n    // is no longer required (so that we don't steal focus from another element).\r\n    // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n    if( changes[\"shouldFocusElement\"] ) {\r\n      if( typeof this.shouldFocusElement() === \"string\" || this.shouldFocusElement() ) {\r\n        this.startFocusWorkflow();\r\n      }\r\n      else {\r\n        this.stopFocusWorkflow();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Called when the directive is destroyed. */\r\n  public ngOnDestroy(): void {\r\n    this.stopFocusWorkflow();\r\n  }\r\n\r\n  // I start the timer-based workflow that will focus the current element.\r\n  private startFocusWorkflow(): void {\r\n    // If there is already a timer running for this element, just let it play out -\r\n    // resetting it at this point will only push-out the time at which the focus is\r\n    // applied to the element.\r\n    if( this.timer !== undefined ) {\r\n      return;\r\n    }\r\n\r\n    this.timer = window.setTimeout(\r\n      (): void => {\r\n        console.log( \"setting focus\", this.elementRef.nativeElement );\r\n        this.timer = undefined;\r\n        this.elementRef.nativeElement.focus();\r\n      },\r\n      +this.timerDelay\r\n    );\r\n  }\r\n\r\n  // I stop the timer-based workflow, preventing focus from taking place.\r\n  private stopFocusWorkflow(): void {\r\n    window.clearTimeout( this.timer );\r\n    this.timer = undefined;\r\n  }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { TbxCanDeactivate } from \"./can-deactivate.interface\";\r\nimport {\r\n  ActivatedRouteSnapshot,\r\n  CanDeactivate,\r\n  GuardResult,\r\n  MaybeAsync,\r\n  RouterStateSnapshot\r\n} from \"@angular/router\";\r\n\r\n/**\r\n * Determines if a component can be deactivated. It calls the component's\r\n * implementation of the {@link TbxCanDeactivate} interface.\r\n */\r\nexport const tbxCanDeactivateFn =\r\n  ( component: TbxCanDeactivate ) => component.canDeactivate;\r\n\r\n/**\r\n * Determines if a component can be deactivated. It calls the component's\r\n * implementation of the {@link canDeactivate} function.\r\n */\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxCanDeactivateGuard implements CanDeactivate<TbxCanDeactivate>\r\n{\r\n  public canDeactivate(\r\n    component: TbxCanDeactivate,\r\n    _currentRoute: ActivatedRouteSnapshot,\r\n    _currentState: RouterStateSnapshot,\r\n    _nextState: RouterStateSnapshot\r\n  ): MaybeAsync<GuardResult>\r\n  {\r\n    return component.canDeactivate;\r\n  }\r\n}\r\n","import { distinctUntilChanged, Subscription } from \"rxjs\";\r\n\r\nimport {\r\n  Directive,\r\n  Inject,\r\n  Injector,\r\n  input,\r\n  linkedSignal,\r\n  OnDestroy,\r\n  OnInit\r\n} from \"@angular/core\";\r\n\r\nimport {\r\n  ControlValueAccessor,\r\n  FormControl,\r\n  FormControlDirective,\r\n  FormControlName,\r\n  FormGroupDirective,\r\n  NgControl,\r\n  Validators\r\n} from \"@angular/forms\";\r\n\r\n@Directive( {\r\n  selector: \"[tbxControlValueAccessor]\",\r\n  standalone: false\r\n} )\r\nexport class TbxAccessorBaseDirective<T>\r\n  implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n  public required = input<boolean | string>( false );\r\n  public requiredValue = linkedSignal( () => this.required() );\r\n\r\n  public formControl!: FormControl<T>;\r\n  public disabled = false;\r\n  public onTouched!: () => void;\r\n  public onChange!: ( val: T | null ) => T;\r\n\r\n  private changeSub?: Subscription;\r\n\r\n  public constructor( @Inject( Injector ) private readonly injector: Injector ) {}\r\n\r\n  public ngOnInit(): void {\r\n    this.setFormControl();\r\n\r\n    // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n    if( !this.required() ) {\r\n      this.requiredValue.set( this.formControl.hasValidator( Validators.required ) );\r\n    }\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.changeSub?.unsubscribe();\r\n  }\r\n\r\n  public registerOnChange( fn: ( val: T | null ) => T ): void {\r\n    this.changeSub =\r\n      this.formControl?.valueChanges\r\n          .pipe(\r\n            distinctUntilChanged() )\r\n          .subscribe( val => fn( val ) );\r\n  }\r\n\r\n  public writeValue( value: T ): void {\r\n    if( this.onChange != null ) {\r\n      this.onChange( value );\r\n    }\r\n  }\r\n\r\n  public registerOnTouched( fn: () => void ): void { this.onTouched = fn; }\r\n\r\n  public setDisabledState?( isDisabled: boolean ): void { this.disabled = isDisabled; }\r\n\r\n  private setFormControl() {\r\n    try {\r\n      const formControl = this.injector.get( NgControl );\r\n\r\n      switch( formControl.constructor ) {\r\n        case FormControlName:\r\n          this.formControl = this.injector\r\n                                 .get( FormGroupDirective )\r\n                                 .getControl( formControl as FormControlName );\r\n          break;\r\n        default:\r\n          this.formControl = (formControl as FormControlDirective).form;\r\n      }\r\n    }\r\n    catch( error ) {\r\n      console.error( \"error - control: \", error );\r\n      this.formControl = new FormControl();\r\n    }\r\n  }\r\n}\r\n","import { Directive, input } from \"@angular/core\";\r\nimport { TbxAccessorBaseDirective } from \"./accessor-base.directive\";\r\n\r\n@Directive( {\r\n  selector: \"[tbxInputBaseDirective]\",\r\n  standalone: false\r\n} )\r\nexport class TbxInputBaseDirective<T> extends TbxAccessorBaseDirective<T> {\r\n  /**\r\n   * The input ID (usually the form control name. This input is used\r\n   * for the {@link formControlName}, the ID of the HTML element and the \"for\"\r\n   * attribute of the label.\r\n   */\r\n  public inputId = input.required<string>();\r\n\r\n  /**\r\n  * The control name for a reactive form control.\r\n  */\r\n  public formControlName = input.required<string>();\r\n\r\n  /**\r\n   * The label caption to display on the control. If left blank, the label\r\n   * will not be displayed.\r\n   */\r\n  public label = input( \"\" );\r\n\r\n  /**\r\n   * Any additional classes to add to the div that contains the label, input,\r\n   * and validation message controls.\r\n   */\r\n  public class = input( \"\" );\r\n\r\n  /**\r\n   * Any additional classes to add to the Input element (defaults to form-control).\r\n   */\r\n  public inputClass = input( \"\" );\r\n\r\n  /**\r\n   * The error message to display when the control is invalid. If left blank,\r\n   * the default message will be used such as required message.\r\n   */\r\n  public errorMessage = input( \"\" );\r\n\r\n  /**\r\n   * Indicates to show the validation error messages (defaults to show).\r\n   */\r\n  public showValidationErrors = input( true );\r\n\r\n  /**\r\n   * Indicates whether the control is read-only (defaults to false).\r\n   */\r\n  public readonly = input<boolean | string>( false );\r\n\r\n  /**\r\n   * The text to display in the input element as a placeholder.\r\n   */\r\n  public placeholder = input( \"\" );\r\n\r\n  /**\r\n * The data list to attach to the input element.\r\n */\r\n  public dataList = input( \"\" );\r\n\r\n  public get internalClass(): string {\r\n    return [\r\n      \"form-control\",\r\n      this.inputClass\r\n    ].filter( Boolean ).join( \" \" );\r\n  }\r\n}\r\n","import { Component, input, output } from \"@angular/core\";\r\n\r\n@Component( {\r\n  selector: \"tbx-form-actions\",\r\n  standalone: true,\r\n  template: `\r\n    <button [type]=\"saveButtonType()\"\r\n            class=\"btn btn-primary btn-std\"\r\n            (click)=\"saveClick.emit()\"\r\n            [disabled]=\"disabled()\">\r\n      <i class=\"fa-solid fa-check\"></i>&nbsp; {{ saveText() }}\r\n    </button>\r\n\r\n    <ng-content></ng-content>\r\n\r\n    @if(showCancel()) {\r\n      <button type=\"button\"\r\n              class=\"btn btn-secondary btn-std\"\r\n              (click)=\"cancelClick.emit()\">\r\n        <i class=\"fa-solid fa-xmark\"></i>&nbsp; Cancel\r\n      </button>\r\n    }\r\n  `\r\n} )\r\nexport class TbxFormActionsComponent {\r\n  /** The type of button Save is (defaults to 'submit'). */\r\n  public saveButtonType = input( \"submit\" );\r\n\r\n  /** The text to display in the save button. */\r\n  public saveText = input( \"Save\" );\r\n\r\n  /** Indicates to show or hide the Cancel button. */\r\n  public showCancel = input( true );\r\n\r\n  /** Indicates to disable the controls. */\r\n  public disabled = input( false );\r\n\r\n  public saveClick = output();\r\n\r\n  public cancelClick = output();\r\n}\r\n","import { Component, input } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { TbxAccessorBaseDirective } from \"../accessor-base.directive\";\r\n\r\n@Component( {\r\n  selector: \"tbx-label\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: TbxLabelComponent,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: false,\r\n  template: `\r\n  @if(label()) {\r\n    <label [class]=\"internalClass\"\r\n           [for]=\"inputId()\"\r\n           [attr.data-required]=\"required() ? 'required' : null\">\r\n       {{ label() }}\r\n    </label>\r\n  }\r\n  `\r\n} )\r\nexport class TbxLabelComponent extends TbxAccessorBaseDirective<string> {\r\n  /**\r\n   * The input ID (usually the form control name. This input is used\r\n   * for the {@link formControlName}, the ID of the HTML element and the \"for\"\r\n   * attribute of the label.\r\n   */\r\n  public inputId = input.required<string>();\r\n\r\n  /**\r\n   * The label caption to display on the control. If left blank, the label\r\n   * will not be displayed.\r\n   */\r\n  public label = input( \"\" );\r\n\r\n  /**\r\n   * Any additional classes to add to the Input element (defaults to form-control).\r\n   */\r\n  public inputClass = input( \"\" );\r\n\r\n  public get internalClass(): string {\r\n    return [\r\n      \"form-label\",\r\n      this.inputClass\r\n    ].filter( Boolean ).join( \" \" );\r\n  }\r\n}\r\n","import { Component, input } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { TbxInputBaseDirective } from \"../input-base.directive\";\r\n\r\n@Component( {\r\n  selector: \"tbx-input\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: TbxInputComponent,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: false,\r\n  template: `\r\n    @if(formControl) {\r\n    <div [class]=\"class()\" class=\"mb-3\">\r\n\r\n      @if( label() ) {\r\n        <tbx-label [label]=\"label()\"\r\n                   [required]=\"requiredValue()\"\r\n                   [inputId]=\"formControlName()\"/>\r\n      }\r\n\r\n      <input [type]=\"type()\"\r\n             [id]=\"formControlName()\"\r\n             [class]=\"internalClass\"\r\n             [attr.readonly]=\"readonly() ? '' : null\"\r\n             [class.is-invalid]=\"formControl.touched && formControl.invalid\"\r\n             [placeholder]=\"placeholder()\"\r\n             [attr.list]=\"dataList()\"\r\n             (blur)=\"onTouched()\"\r\n             [formControl]=\"formControl\"/>\r\n\r\n      @if(showValidationErrors()) {\r\n        <tbx-validation-message [control]=\"formControl\"\r\n                                [message]=\"errorMessage()\"/>\r\n      }\r\n    </div>\r\n    }\r\n  `\r\n} )\r\nexport class TbxInputComponent extends TbxInputBaseDirective<string> {\r\n  /**\r\n   * The type of input HTML element to set such as text, phone, password,\r\n   * date, time, image, color, etc. (defaults to 'text').\r\n   */\r\n  public type = input( \"text\" );\r\n}\r\n","import { Component } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\r\n\r\nimport { TbxInputBaseDirective } from \"../input-base.directive\";\r\n\r\n@Component( {\r\n  selector: \"tbx-select\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: TbxSelectComponent,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: false,\r\n  template: `\r\n    <div [class]=\"class()\" class=\"mb-3\" *ngIf=\"formControl\">\r\n\r\n      @if( label() ) {\r\n        <tbx-label [label]=\"label()\"\r\n                   [required]=\"required()\"\r\n                   [inputId]=\"formControlName()\"/>\r\n      }\r\n\r\n      <select [id]=\"formControlName()\"\r\n              [class]=\"internalClass\"\r\n              class=\"form-select\"\r\n              [class.is-invalid]=\"formControl?.touched && formControl?.invalid\"\r\n              (blur)=\"onTouched()\"\r\n              [formControl]=\"formControl\">\r\n        <ng-content></ng-content>\r\n      </select>\r\n\r\n      @if(showValidationErrors()) {\r\n        <tbx-validation-message [control]=\"formControl\"\r\n                                [message]=\"errorMessage()\"/>\r\n      }\r\n    </div>\r\n  `\r\n} )\r\nexport class TbxSelectComponent extends TbxInputBaseDirective<string> {\r\n}\r\n","import { Component, } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { TbxInputBaseDirective } from \"../input-base.directive\";\r\n\r\n@Component( {\r\n  selector: \"tbx-switch\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: TbxSwitchComponent,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: false,\r\n  template: `\r\n    <div [class]=\"class()\" class=\"mb-3\" *ngIf=\"formControl\">\r\n\r\n      @if(formControl) {\r\n        <div [class]=\"class()\" class=\"\">\r\n          <div class=\"form-check form-switch\">\r\n            <input class=\"form-check-input\"\r\n                   type=\"checkbox\"\r\n                   role=\"switch\"\r\n                   [id]=\"inputId()\"\r\n                   [formControl]=\"formControl\"/>\r\n\r\n            @if(label()) {\r\n            <label class=\"form-check-label\"\r\n                   [for]=\"inputId()\">\r\n              {{ label() }}\r\n            </label>\r\n            }\r\n          </div>\r\n        </div>\r\n      }\r\n    </div>\r\n  `\r\n} )\r\nexport class TbxSwitchComponent extends TbxInputBaseDirective<boolean> {\r\n}\r\n","import { Component, input } from \"@angular/core\";\r\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\nimport { TbxInputBaseDirective } from \"../input-base.directive\";\r\n\r\n@Component( {\r\n  selector: \"tbx-text-area\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: TbxTextAreaComponent,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: false,\r\n  template: `\r\n    <div [class]=\"class()\" class=\"mb-3\" *ngIf=\"formControl\">\r\n      @if(label()) {\r\n        <tbx-label [label]=\"label()\"\r\n                   [required]=\"requiredValue()\"\r\n                   [inputId]=\"formControlName()\" />\r\n      }\r\n\r\n      <textarea [id]=\"formControlName()\"\r\n                [rows]=\"rows()\"\r\n                [class]=\"internalClass\"\r\n                [class.is-invalid]=\"formControl?.touched && formControl?.invalid\"\r\n                [attr.readonly]=\"readonly() ? '' : null\"\r\n                [placeholder]=\"placeholder()\"\r\n                (blur)=\"onTouched()\"\r\n                [formControl]=\"formControl\"\r\n      ></textarea>\r\n\r\n      @if(showValidationErrors()) {\r\n        <tbx-validation-message [control]=\"formControl\"\r\n                                [message]=\"errorMessage()\"/>\r\n      }\r\n    </div>\r\n  `\r\n} )\r\nexport class TbxTextAreaComponent extends TbxInputBaseDirective<string> {\r\n  /**\r\n   * The number of rows to display in the text-area component.\r\n   */\r\n  public rows = input( \"3\" );\r\n}\r\n","import { TbxAccessorBaseDirective } from \"./accessor-base.directive\";\r\nimport { TbxInputBaseDirective } from \"./input-base.directive\";\r\n\r\nimport { TbxLabelComponent } from \"./label/label.component\";\r\nimport { TbxInputComponent } from \"./input/input.component\";\r\nimport { TbxSelectComponent } from \"./select/select.component\";\r\nimport { TbxTextAreaComponent } from \"./text-area/text-area.component\";\r\nimport { TbxSwitchComponent } from \"./switch/switch.component\";\r\nimport { TbxFormActionsComponent } from \"./form-actions/form-actions.component\";\r\n\r\nexport const components = [\r\n  TbxAccessorBaseDirective,\r\n  TbxSelectComponent,\r\n  TbxTextAreaComponent,\r\n  TbxLabelComponent,\r\n  TbxInputComponent,\r\n  TbxInputBaseDirective,\r\n  TbxSwitchComponent\r\n];\r\n\r\nexport const standaloneComponents = [\r\n  TbxFormActionsComponent\r\n];\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ReactiveFormsModule } from \"@angular/forms\";\r\n\r\nimport { TbxAutofocusDirective } from \"./autofocus/autofocus.directive\";\r\n\r\nimport { components, standaloneComponents } from \"./controls\";\r\nimport { validation, standaloneValidation, TbxValidationService } from \"./validation\";\r\n\r\n@NgModule( {\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    standaloneComponents,\r\n    standaloneValidation,\r\n    TbxAutofocusDirective\r\n  ],\r\n  declarations: [\r\n    validation,\r\n    components\r\n  ],\r\n  exports: [\r\n    ReactiveFormsModule,\r\n    standaloneComponents,\r\n    standaloneValidation,\r\n    ...validation,\r\n    ...components,\r\n    TbxAutofocusDirective\r\n  ],\r\n  providers: [TbxValidationService]\r\n} )\r\nexport class TbxFormsModule\r\n{\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TbxValidationComponent","i3.TbxLabelComponent","i3.TbxValidationComponent","i4.TbxLabelComponent","i9.TbxFormActionsComponent","i10.TbxCurrencyValidator","i11.TbxUpperDirective","i12.TbxNotEqualValidator","i13.TbxEqualValidator"],"mappings":";;;;;;;;;;AAaA;;;;;AAKG;AACI,MAAM,aAAa,GAAG,CAAE,OAAwB;AACrD;AACA,iBAAiB,CAAE,OAAO,CAAC,KAAK;AAC9B,MAAE;AACF,MAAE,WAAW,CAAE,OAAO,CAAC,KAAK,CAAE,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,IAAI;AAG/D;;;;AAIG;AACI,MAAM,YAAY,GAAG,CAAE,OAAwB,KACpD,iBAAiB,CAAE,OAAO,CAAC,KAAK;AAC9B,MAAE;AACF,MAAE,KAAK,CAAE,OAAO,CAAC,KAAK,CAAE,GAAG,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI;AAExD;;;;;AAKG;MACU,cAAc,GAAG,CAAE,OAAwB,KACtD,CAAC,iBAAiB,CAAE,OAAO,CAAC,KAAK,CAAE,IAAI,OAAO,CAAE,OAAO,CAAC,KAAK;AAC3D,MAAE;AACF,MAAE,EAAE,mBAAmB,EAAE,IAAI;AAEjC;;;;;AAKG;AACI,MAAM,mBAAmB,GAC9B,CAAE,OAAwB;AACxB;AACA,CAAC,iBAAiB,CAAE,OAAO,CAAC,KAAK,CAAE,IAAI,YAAY,CAAE,OAAO,CAAC,KAAK;AAChE,MAAE;AACF,MAAE,EAAE,iBAAiB,EAAE,IAAI;AAEjC;;;;AAIG;AACI,MAAM,cAAc,GAAG,CAAE,KAAU,KACxC,CAAE,CAAkB,KAClB,iBAAiB,CAAE,CAAC,CAAC,KAAK;AACxB,MAAE;MACA,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;AAEjE;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,CAAE,KAAU,KAC3C,CAAE,CAAkB,KAClB,iBAAiB,CAAE,CAAC,CAAC,KAAK;AACxB,MAAE;MACA,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;AAEvE;;;;AAIG;AACI,MAAM,gBAAgB,GAC3B,CAAE,OAAwB,KACxB,iBAAiB,CAAE,OAAO,CAAC,KAAK;AAC9B,MAAE;AACF,MAAE,QAAQ,CAAE,OAAO,CAAC,KAAK,CAAE,GAAG,IAAI,GAAG,EAAE,aAAa,EAAE,IAAI;AAEhE;;;;AAIG;AACI,MAAM,iBAAiB,GAC5B,CAAE,OAAwB,KACxB,iBAAiB,CAAE,OAAO,CAAC,KAAK;AAC9B,MAAE;AACF,MAAE,UAAU,CAAE,OAAO,CAAC,KAAK,CAAE,GAAG,IAAI,GAAG,EAAE,eAAe,EAAE,IAAI;;AC9FpE;;AAEG;MAEU,oBAAoB,CAAA;AAC/B;;;AAGG;aACW,IAAA,CAAA,YAAY,GAAmC,EAAnC,CAAsC;AAEhE;;;;;;AAMG;AACI,IAAA,OAAO,wBAAwB,CACpC,IAAY,EAAE,cAAmB,EAAE,WAAoB,EAAA;AACvD,QAAA,MAAM,QAAQ,GAAyB;AACrC,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,SAAS,EAAE,CAAA,2BAAA,EAA8B,cAAc,CAAC,cAAc,CAAA,CAAE;AACxE,YAAA,SAAS,EAAE,CAAA,0BAAA,EAA6B,cAAc,CAAC,cAAc,CAAA,CAAE;AACvE,YAAA,GAAG,EAAE,CAAA,6BAAA,EAAgC,cAAc,CAAC,GAAG,CAAA,CAAE;AACzD,YAAA,GAAG,EAAE,CAAA,6BAAA,EAAgC,cAAc,CAAC,GAAG,CAAA,CAAE;AACzD,YAAA,iBAAiB,EAAE,4BAA4B;AAC/C,YAAA,WAAW,EAAE,0BAA0B;AACvC,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,KAAK,EAAE,CAAA,uBAAA,EAA0B,cAAc,CAAC,UAAU,CAAA,CAAA,CAAG;AAC7D,YAAA,QAAQ,EAAE,CAAA,2BAAA,EAA8B,cAAc,CAAC,aAAa,CAAA,CAAA,CAAG;AACvE,YAAA,aAAa,EAAE,4BAA4B;AAC3C,YAAA,eAAe,EAAE;SAClB;;QAGD,MAAM,OAAO,GAAG,oBAAoB,CAAC,iBAAiB,CAAE,IAAI,EAAE,WAAW,CAAE;AAC3E,QAAA,IAAI,OAAO,KAAK,IAAI,EAAG;AACrB,YAAA,OAAO,OAAO;;;;AAKhB,QAAA,OAAO,gBAAgB,CAAE,QAAQ,CAAC,IAAI,CAAC;AACrC,cAAE,QAAQ,CAAC,IAAI;cACb,cAAc;;AAGpB;;;;;;AAMG;AACI,IAAA,OAAO,iBAAiB,CAAE,IAAY,EAAE,WAAoB,EAAA;AACjE,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,oBAAoB,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAG;AAChF,YAAA,OAAO,IAAI;;AAGb,QAAA,KAAK,MAAM,QAAQ,IAAI,oBAAoB,CAAC,YAAY,EAAG;;AAEzD,YAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAG;gBAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAG;;AAE5C,oBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAG;AAClB,wBAAA,OAAO,OAAO,CAAC,IAAI,CAAC;;;;;AAM5B,QAAA,OAAO,IAAI;;8GArEF,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACJD;;AAEG;MAaU,sBAAsB,CAAA;AAZnC,IAAA,WAAA,GAAA;;AAckB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAsC;;AAG9D,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAE,EAAE,mDAAE;AA6BtC;;AA1BC,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAE3B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG;AAC3B,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,MAAM,EAAG;AACZ,YAAA,OAAO,IAAI;;AAGb,QAAA,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAG;AAC9B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAE,MAAM,EAAE,QAAQ,CAAE,EAAG;AAC7D,gBAAA,OAAO,gBAAgB,CAAE,IAAI,CAAC,OAAO,EAAE;AACrC,sBAAE,IAAI,CAAC,OAAO;AACd,sBAAE,oBAAoB,CAAC,wBAAwB,CAC7C,QAAQ,EACR,MAAM,CAAC,QAAQ,CAAC,EAChB,cAAc,CAAE,IAAI,CAAE,CACvB;;;AAIP,QAAA,OAAO,IAAI;;8GAhCF,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATvB,CAAA;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;AAOT,EAAA;AACF,iBAAA;;;ACXD;;AAEG;MAYU,oBAAoB,CAAA;AAXjC,IAAA,WAAA,GAAA;;QAaU,IAAA,CAAA,OAAO,GAAG,KAAK;AAkCxB;AA7BC;;;AAGG;IACH,IACW,QAAQ,CAAE,KAAuB,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM;AAEjE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAG;YAChC,IAAI,CAAC,QAAQ,EAAE;;;AAInB;;;;AAIG;AACI,IAAA,QAAQ,CAAE,CAAkB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAE,CAAC,CAAE,GAAG,IAAI;;AAGrD;;;AAGG;AACI,IAAA,yBAAyB,CAAE,EAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;8GAlCT,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,SAAA,EARpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAE,MAAM,oBAAoB,CAAE;AACrD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qFAAqF;AAC/F,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAE,0BAA0B,CAAE;AACrD,4BAAA,KAAK,EAAE;AACR;AACF;AACF,iBAAA;8BAaY,QAAQ,EAAA,CAAA;sBADlB,KAAK;uBAAE,cAAc;;;ACjCxB;;AAEG;MAKU,iBAAiB,CAAA;AAG5B,IAAA,WAAA,CAA2B,GAAe,EAAA;QAAf,IAAA,CAAA,GAAG,GAAH,GAAG;;AAIvB,IAAA,OAAO,CAAE,CAAM,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAE,eAAe,CAAE;;AAGxE,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAG;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAE,KAAK,EAAE,GAAG,CAAE;;;8GAhBrC,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4EAA4E;AACtF,oBAAA,UAAU,EAAE;AACb,iBAAA;+EAQQ,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAE,OAAO,EAAE,CAAC,QAAQ,CAAC;;;ACIpC;;AAEG;MAYU,oBAAoB,CAAA;IAWxB,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAE,IAAI,CAAC,KAAK,CAAE;;AAG3C,IAAA,WAAW,CAAE,OAAsB,EAAA;AACxC,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAG;AAC1B,YAAA,IAAI,GAAG,KAAK,UAAU,EAAG;AACvB,gBAAA,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAE,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAE;;AAG/D,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAG;oBAClB,IAAI,CAAC,QAAQ,EAAE;;;;;AAMvB;;;;AAIG;AACI,IAAA,QAAQ,CAAE,CAAkB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAE,CAAC,CAAE;;AAG5B;;;AAGG;AACI,IAAA,yBAAyB,CAAE,EAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;8GA1CT,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qFAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,EAAA,SAAA,EARpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAE,MAAM,oBAAoB,CAAE;AACrD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qFAAqF;AAC/F,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAE,0BAA0B,CAAE;AACrD,4BAAA,KAAK,EAAE;AACR;AACF;AACF,iBAAA;8BAIQ,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAE,cAAc;;;AChBxB;;AAEG;MAYU,iBAAiB,CAAA;AAW5B;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,SAAS,GAAG,cAAc,CAAE,IAAI,CAAC,KAAK,CAAE;;AAG/C;;;AAGG;AACI,IAAA,WAAW,CAAE,OAAsB,EAAA;AACxC,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAG;AAC1B,YAAA,IAAI,GAAG,KAAK,OAAO,EAAG;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,cAAc,CAAE,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAE;;AAG5D,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAG;oBAClB,IAAI,CAAC,QAAQ,EAAE;;;;;AAMvB;;;;AAIG;AACI,IAAA,QAAQ,CAAE,CAAkB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAE,CAAC,CAAE;;AAG5B;;;AAGG;AACI,IAAA,yBAAyB,CAAE,EAAc,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;8GAjDT,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAE,MAAM,iBAAiB,CAAE;AAClD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4EAA4E;AACtF,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAE,uBAAuB,CAAE;AAClD,4BAAA,KAAK,EAAE;AACR;AACF;AACF,iBAAA;8BAIQ,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAE,WAAW;;;AC3Bd,MAAM,UAAU,GAAG;IACxB,sBAAsB;CACvB;AAEM,MAAM,oBAAoB,GAAG;IAClC,oBAAoB;IACpB,iBAAiB;IACjB,oBAAoB;IACpB;CACD;;ACYD;;;;;AAKG;AACI,MAAM,cAAc,GAAG,CAAE,OAAyB,KAAyB;IAChF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAG;AACrD,QAAA,MAAM,IAAI,KAAK,CAAE,2CAA2C,CAAE;;AAGhE,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAE7B,IAAA,OAAO,MAAM,CAAC,IAAI,CAAE,MAAM,CAAC,QAAQ;AAChC,SAAA,IAAI,CAAE,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,GAAG,CAAE,IAAI,CAAE,CAAE;AACnD;AAEA;;;;;;AAMG;AACI,MAAM,gBAAgB,GAAG,CAC9B,SAAiB,EAAE,IAAe,EAAE,SAAS,GAAG,YAAY,MAE5D;;IAEE,CAAC,SAAS,GAAG,YAAY,CAAE,SAAS,EAAE,IAAI;AAC3C,CAAA;AAGH;;;;;;;;;AASG;AACI,MAAM,cAAc,GAAG,CAC5B,KAAa,EAAE,MAA+B,EAAE,IAAe,KAAW;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAE,KAAK,CAAE;AAC9B,IAAA,IAAI,IAAI,KAAK,IAAI,EAAG;AAClB,QAAA,MAAM,IAAI,KAAK,CAAE,cAAc,KAAK,CAAA,4BAAA,CAA8B,CAAE;;AAGtE,IAAA,IAAI,CAAC,SAAS,CAAE,MAAM,CAAE;IACxB,IAAI,CAAC,aAAa,EAAE;AACtB;AAEA;;;;;;AAMG;MACU,YAAY,GAAG,CAAE,SAAiB,EAAE,IAAe,KAAc;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAE,SAAS,CAAE;AAErC,IAAA,IAAI,OAAO,YAAY,WAAW,EAAG;QACnC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO;;AAG1C,IAAA,OAAO,KAAK;AACd;AAEA;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,CAAE,IAAe,KAAe;IAC/D,MAAM,YAAY,GAAa,EAAE;AAEjC,IAAA,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAE,CAAC,OAAO,CAAE,CAAE,KAAa,KAAK;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAE,KAAK,CAAE;AACjC,QAAA,IAAI,OAAO,YAAY,WAAW,EAAG;YACnC,OAAO,CAAC,aAAa,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AAE3C,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,YAAA,IAAI,MAAM,KAAK,IAAI,EAAG;gBACpB,MAAM,CAAC,IAAI,CAAE,MAAM,CAAE,CAAC,OAAO,CAAE,GAAG,IAAG;AACnC,oBAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,wBAAwB,CAC3D,GAAwB,EACxB,MAAM,CAAC,GAAG,CAAC,EACX,cAAc,CAAE,OAAO,CAAE,CAC1B;AAED,oBAAA,YAAY,CAAC,IAAI,CAAE,OAAO,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAE;AAC/D,iBAAC,CAAE;;;AAGF,aAAA,IAAI,OAAO,YAAY,SAAS,EAAG;YACtC,YAAY,CAAC,IAAI,CAAE,GAAG,iBAAiB,CAAE,OAAO,CAAE,CAAE;;AAExD,KAAC,CAAE;AAEH,IAAA,OAAO,YAAY;AACrB;AAEA;;;;;AAKG;AACI,MAAM,gBAAgB,GAAG,CAAE,IAAmB,KACnD,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAE,IAAI;AAEnE;;;;;AAKG;AACI,MAAM,cAAc,GAAG,CAAE,IAAmB,KACjD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAE,IAAI;AAE3E;;;;;AAKG;AACI,MAAM,eAAe,GAAG,CAAE,IAAmB,KAClD,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAE,IAAI;AAE7E;;;;;;AAMG;AACI,MAAM,kBAAkB,GAAG,CAChC,KAAuB,EACvB,UAAU,GAAG,YAAY,EACzB,YAAY,GAAG,KAAK,KACP;IACb,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAG;QAC5C,MAAM,IAAI,KAAK,CACb,0EAA0E;AAC1E,YAAA,+DAA+D,CAAE;;;AAIrE,IAAA,oBAAoB,CAAC,YAAY,GAAG,EAAE;;AAGtC,IAAA,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAE,EAAE,CAAE;;AAGpC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAG;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YACpB,IAAI,CAAC,QAAQ,KAAK,IAAI;YACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAE,YAAY,CAAE,KAAK,CAAC,CAAC,EAAG;YAC/C;;QAGF,MAAM,YAAY,GAAG,gBAAgB,CAAE,IAAI,CAAC,QAAQ,CAAE;QACtD,MAAM,cAAc,GAAG,cAAc,CAAE,IAAI,CAAC,QAAQ,CAAE;QACtD,MAAM,WAAW,GAAG,eAAe,CAAE,IAAI,CAAC,QAAQ,CAAE;;AAGpD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;AACtB,QAAA,IAAI,cAAc,IAAI,gBAAgB,CAAE,KAAK,CAAE,EAAG;AAChD,YAAA,KAAK,GAAG;AACN,kBAAE,MAAM,CAAE,KAAK;kBACb,UAAU,CAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAE;;AAG3C,QAAA,IAAI,YAAY,IAAI,QAAQ,CAAE,KAAK,CAAE,EAAG;AACtC,YAAA,KAAK,GAAG,QAAQ,CAAE,KAAK,CAAE;;AAG3B,QAAA,IAAI,WAAW,IAAI,UAAU,CAAE,KAAK,CAAE,EAAG;AACvC,YAAA,KAAK,GAAG,OAAO,CAAE,KAAK,CAAE;;;QAI1B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAE,IAAI,CAAE;;AAG9D,QAAA,QAAQ,CAAC,UAAU,CAAE,IAAI,CAAC,IAAI,EAAE,IAAI,WAAW,CAAE,KAAK,EAAE,UAAU,CAAE,CAAE;;AAGtE,QAAA,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAE;;IAGrE,QAAQ,CAAC,cAAc,EAAE;AAEzB,IAAA,OAAO,QAAQ;AACjB;AAEO,MAAM,qBAAqB,GAAG,CAAE,IAAiB,KAMpD;IACF,MAAM,UAAU,GAAkB,EAAE;AACpC,IAAA,MAAM,QAAQ,GAA2B,CAAC,EAAE,CAAC;AAE7C,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAG;AAClB,QAAA,UAAU,CAAC,IAAI,CAAE,UAAU,CAAC,QAAQ,CAAE;AACtC,QAAA,QAAQ,CAAC,IAAI,CAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,CAAE;;AAG3D,IAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAG;AACjD,QAAA,UAAU,CAAC,IAAI,CAAE,UAAU,CAAC,SAAS,CAAE,IAAI,CAAC,SAAS,CAAE,CAAE;AACzD,QAAA,QAAQ,CAAC,IAAI,CAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAE;;AAG1D,IAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAG;AACjD,QAAA,UAAU,CAAC,IAAI,CAAE,UAAU,CAAC,SAAS,CAAE,IAAI,CAAC,SAAS,CAAE,CAAE;AACzD,QAAA,QAAQ,CAAC,IAAI,CAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAE;;AAG1D,IAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAG;AAC/C,QAAA,UAAU,CAAC,IAAI,CAAE,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,QAAQ,CAAE,CAAE;AAClD,QAAA,QAAQ,CAAC,IAAI,CAAE,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAE;;AAGnD,IAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAG;AAC/C,QAAA,UAAU,CAAC,IAAI,CAAE,UAAU,CAAC,GAAG,CAAE,IAAI,CAAC,QAAQ,CAAE,CAAE;AAClD,QAAA,QAAQ,CAAC,IAAI,CAAE,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAE;;AAGnD,IAAA,IAAI,cAAc,CAAE,IAAI,CAAC,QAAQ,CAAE,EAAG;AACpC,QAAA,UAAU,CAAC,IAAI,CAAE,aAAa,CAAE;;AAGlC,IAAA,IAAI,gBAAgB,CAAE,IAAI,CAAC,QAAQ,CAAE,EAAG;AACtC,QAAA,UAAU,CAAC,IAAI,CAAE,gBAAgB,CAAE;;AAGrC,IAAA,IAAI,eAAe,CAAE,IAAI,CAAC,QAAQ,CAAE,EAAG;AACrC,QAAA,UAAU,CAAC,IAAI,CAAE,iBAAiB,CAAE;;IAGtC,OAAO;QACL,UAAU;QACV;KACD;AACH;;AChQA;;AAEG;AAEG,MAAgB,oBACpB,SAAQ,gBAAgB,CAAA;AAF1B,IAAA,WAAA,GAAA;;;QAOS,IAAA,CAAA,QAAQ,GAAG,KAAK;AA2MxB;AAzMC;;;;AAIG;AACH,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAG;AACrB,YAAA,OAAO,IAAI;;QAGb,MAAM,KAAK,GAAG,0BAA0B;QACxC,MAAM,GAAG,GAAG,wDAAwD;QAEpE,OAAO,OAAO,CAAE,CAAA,EAAG,KAAK,KAAK,GAAG,CAAA,CAAE,CAAE;;AAGtC;;;;AAIG;AACI,IAAA,gBAAgB,CAAE,SAAiB,EAAA;QACxC,OAAO,gBAAgB,CAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAE;;AAGjD;;;;;AAKG;AACI,IAAA,YAAY,CAAE,SAAiB,EAAA;AACpC,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAE;QAElD,OAAO,YAAY,CAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAE;;AAG7C;;;;AAIG;AACI,IAAA,WAAW,CAAE,OAAmB,EAAA;AACrC,QAAA,MAAM,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI;AAC9B,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,CAAC,CAAE;AAE1C,QAAA,IAAI,CAAC,CAAC,KAAK,EAAG;AACZ,YAAA,OAAO,IAAI;;;AAIb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAEvC,IAAI,OAAO,GAAG,uDAAuD;AACrE,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAG;AACtB,YAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAE,IAAI,CAAE;;AAGhC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,OAAO,CAAE;;AAGhC,QAAA,OAAO,KAAK;;AAGd;;;AAGG;IACI,iBAAiB,GAAA;AACtB,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAE;AAElD,QAAA,OAAO,iBAAiB,CAAE,IAAI,CAAC,IAAI,CAAE;;AAGvC;;;;;;;AAOG;IACI,UAAU,CACf,KAAuB,EACvB,UAAU,GAAG,YAAY,EACzB,YAAY,GAAG,KAAK,EAAA;;QAEpB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAE,KAAK,EAAE,UAAU,EAAE,YAAY,CAAE;;AAGnE;;;;;;;AAOG;IACI,cAAc,CAAE,KAAa,EAAE,MAA+B,EAAA;AACnE,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAE;QAClD,cAAc,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAE;;AAG5C;;;;;AAKG;IACI,eAAe,CAAE,KAAe,EAAE,OAAmB,EAAA;AAC1D,QAAA,MAAM,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI;AAC9B,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,CAAC,CAAE;AAE1C,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,gBAAgB,EAAG;YACzC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAE,GAAG,CAAC,GAAG,CAAE;AAE7B,YAAA,IAAI,IAAI,KAAK,IAAI,EAAG;gBAClB,IAAI,CAAC,SAAS,CAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAE;gBAC1C,IAAI,CAAC,aAAa,CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;;;QAI5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAE,KAAK,CAAC,OAAO,CAAE;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,KAAK,CAAE;;AAGxB;;;;;;;AAOG;AACI,IAAA,YAAY,CACjB,IAAY,EACZ,KAAU,EACV,UAA0B,EAC1B,QAAc,EAAA;AACd,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAE;QAElD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAE,KAAK,EAAE,UAAU,CAAE;QACpD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAE,IAAI,EAAE,OAAO,CAAE;;AAGrC,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAG;AAC3B,YAAA,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAE,EAAE,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAE;;AAGhE,QAAA,OAAO,OAAO;;AAGhB;;;;;;AAMG;AACI,IAAA,sBAAsB,CAC3B,IAAY,EACZ,UAAyB,EACzB,QAAc,EAAA;AACd,QAAA,oBAAoB,CAAC,gBAAgB,CAAE,IAAI,CAAC,IAAI,CAAE;QAElD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,CAAE;AACrC,QAAA,IAAI,OAAO,KAAK,IAAI,EAAG;AACrB,YAAA,MAAM,IAAI,KAAK,CAAE,yBAAyB,IAAI,CAAA,2BAAA,CAA6B,CAAE;;;AAI/E,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS;;QAG3C,OAAO,CAAC,eAAe,EAAE;;AAGzB,QAAA,OAAO,CAAC,aAAa,CACnB,iBAAiB,KAAK;AACpB,cAAE,CAAC,iBAAiB,EAAE,GAAG,UAAU;AACnC,cAAE,CAAC,GAAG,UAAU,CAAC,CACpB;;AAGD,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAG;AAC3B,YAAA,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAE;gBACtC,CAAC,IAAI,GAAG;AACT,aAAA,CAAE;;AAGL,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAElC,QAAA,OAAO,OAAO;;;IAIR,OAAO,gBAAgB,CAAE,IAAe,EAAA;AAC9C,QAAA,IAAI,IAAI,IAAI,IAAI,EAAG;AACjB,YAAA,MAAM,IAAI,KAAK,CAAE,6BAA6B,CAAE;;;8GA9MhC,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADzC;;;ACfD;;AAEG;MAKU,qBAAqB,CAAA;AAUhC;;;AAGG;AACH,IAAA,WAAA,CAAqC,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;;AAZxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAoB,EAAE,8DAAE;;AAGlD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAmB,EAAE,sDAAE;;;IAazC,kBAAkB,GAAA;;;;;AAKvB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAG;YACrC,IAAI,CAAC,kBAAkB,EAAE;;;AAI7B;;;AAGG;AACI,IAAA,WAAW,CAAE,OAAsB,EAAA;;;;QAIxC,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAG;;YAE1C,IAAI,KAAK,CAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAE,EAAG;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAE,EAAE,CAAE;;;;;;;AAQ7B,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAG;AAClC,YAAA,IAAI,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAG;gBAC/E,IAAI,CAAC,kBAAkB,EAAE;;iBAEtB;gBACH,IAAI,CAAC,iBAAiB,EAAE;;;;;IAMvB,WAAW,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;;;IAIlB,kBAAkB,GAAA;;;;AAIxB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAG;YAC7B;;QAGF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAC5B,MAAW;YACT,OAAO,CAAC,GAAG,CAAE,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAE;AAC7D,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;AACvC,SAAC,EACD,CAAC,IAAI,CAAC,UAAU,CACjB;;;IAIK,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,YAAY,CAAE,IAAI,CAAC,KAAK,CAAE;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;;8GApFb,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,6CAA6C;AACvD,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;;AAGG;AACI,MAAM,kBAAkB,GAC7B,CAAE,SAA2B,KAAM,SAAS,CAAC;AAE/C;;;AAGG;MAEU,qBAAqB,CAAA;AAEzB,IAAA,aAAa,CAClB,SAA2B,EAC3B,aAAqC,EACrC,aAAkC,EAClC,UAA+B,EAAA;QAG/B,OAAO,SAAS,CAAC,aAAa;;8GATrB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACpB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAE,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCKtB,wBAAwB,CAAA;AAanC,IAAA,WAAA,CAAyD,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAV1D,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAoB,KAAK,oDAAE;QAC3C,IAAA,CAAA,aAAa,GAAG,YAAY,CAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAE;QAGrD,IAAA,CAAA,QAAQ,GAAG,KAAK;;IAQhB,QAAQ,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;;AAGrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAG;AACrB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAE;;;IAI3E,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;;AAGxB,IAAA,gBAAgB,CAAE,EAA0B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS;YACZ,IAAI,CAAC,WAAW,EAAE;iBACb,IAAI,CACH,oBAAoB,EAAE;iBACvB,SAAS,CAAE,GAAG,IAAI,EAAE,CAAE,GAAG,CAAE,CAAE;;AAG/B,IAAA,UAAU,CAAE,KAAQ,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAG;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAE,KAAK,CAAE;;;IAInB,iBAAiB,CAAE,EAAc,EAAA,EAAW,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAEhE,gBAAgB,CAAG,UAAmB,EAAA,EAAW,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAE3E,cAAc,GAAA;AACpB,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,SAAS,CAAE;AAElD,YAAA,QAAQ,WAAW,CAAC,WAAW;AAC7B,gBAAA,KAAK,eAAe;AAClB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;yBACA,GAAG,CAAE,kBAAkB;yBACvB,UAAU,CAAE,WAA8B,CAAE;oBACpE;AACF,gBAAA;AACE,oBAAA,IAAI,CAAC,WAAW,GAAI,WAAoC,CAAC,IAAI;;;QAGnE,OAAO,KAAK,EAAG;AACb,YAAA,OAAO,CAAC,KAAK,CAAE,mBAAmB,EAAE,KAAK,CAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE;;;AA9D7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBAaN,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAb1B,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAcsB,MAAM;2BAAE,QAAQ;;;AChCjC,MAAO,qBAAyB,SAAQ,wBAA2B,CAAA;AAJzE,IAAA,WAAA,GAAA;;AAKE;;;;AAIG;AACI,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;AAEzC;;AAEE;AACK,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAAU;AAEjD;;;AAGG;AACI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAE,EAAE,iDAAE;AAE1B;;;AAGG;AACI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAE,EAAE,iDAAE;AAE1B;;AAEG;AACI,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAE,EAAE,sDAAE;AAE/B;;;AAGG;AACI,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAE,EAAE,wDAAE;AAEjC;;AAEG;AACI,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAE,IAAI,gEAAE;AAE3C;;AAEG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAoB,KAAK,oDAAE;AAElD;;AAEG;AACI,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAE,EAAE,uDAAE;AAEhC;;AAEC;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAE,EAAE,oDAAE;AAQ9B;AANC,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO;YACL,cAAc;AACd,YAAA,IAAI,CAAC;SACN,CAAC,MAAM,CAAE,OAAO,CAAE,CAAC,IAAI,CAAE,GAAG,CAAE;;8GA5DtB,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCkBY,uBAAuB,CAAA;AAtBpC,IAAA,WAAA,GAAA;;AAwBS,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAE,QAAQ,0DAAE;;AAGlC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAE,MAAM,oDAAE;;AAG1B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAE,IAAI,sDAAE;;AAG1B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAE,KAAK,oDAAE;QAEzB,IAAA,CAAA,SAAS,GAAG,MAAM,EAAE;QAEpB,IAAA,CAAA,WAAW,GAAG,MAAM,EAAE;AAC9B;8GAhBY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBxB,CAAA;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAtBnC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;AAiBT,EAAA;AACF,iBAAA;;;ACEK,MAAO,iBAAkB,SAAQ,wBAAgC,CAAA;AApBvE,IAAA,WAAA,GAAA;;AAqBE;;;;AAIG;AACI,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;AAEzC;;;AAGG;AACI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAE,EAAE,iDAAE;AAE1B;;AAEG;AACI,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAE,EAAE,sDAAE;AAQhC;AANC,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO;YACL,YAAY;AACZ,YAAA,IAAI,CAAC;SACN,CAAC,MAAM,CAAE,OAAO,CAAE,CAAC,IAAI,CAAE,GAAG,CAAE;;8GAvBtB,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAlBjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAES,CAAA;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApB7B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,iBAAmB;AAC9B,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;AAQT,EAAA;AACF,iBAAA;;;ACmBK,MAAO,iBAAkB,SAAQ,qBAA6B,CAAA;AAtCpE,IAAA,WAAA,GAAA;;AAuCE;;;AAGG;AACI,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAE,MAAM,gDAAE;AAC9B;8GANY,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EApCjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAES,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtC7B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,iBAAmB;AAC9B,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA;AACF,iBAAA;;;ACFK,MAAO,kBAAmB,SAAQ,qBAA6B,CAAA;8GAAxD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAjClB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAES,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnC9B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,kBAAoB;AAC/B,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA;AACF,iBAAA;;;ACAK,MAAO,kBAAmB,SAAQ,qBAA8B,CAAA;8GAAzD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAhClB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAES,CAAA;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlC9B,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,kBAAoB;AAC/B,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA;AACF,iBAAA;;;ACEK,MAAO,oBAAqB,SAAQ,qBAA6B,CAAA;AAnCvE,IAAA,WAAA,GAAA;;AAoCE;;AAEG;AACI,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAE,GAAG,gDAAE;AAC3B;8GALY,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAjCpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAES,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,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,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,sBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnChC,SAAS;AAAE,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,oBAAsB;AACjC,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA;AACF,iBAAA;;;AC7BM,MAAM,UAAU,GAAG;IACxB,wBAAwB;IACxB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;IACrB;CACD;AAEM,MAAM,oBAAoB,GAAG;IAClC;CACD;;MCSY,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,yMApBvB,YAAY;AACZ,YAAA,mBAAmB,EAAAC,uBAAA,EAAAC,oBAAA,EAAAC,iBAAA,EAAAC,oBAAA,EAAAC,iBAAA,EAGnB,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAOrB,mBAAmB,0RAKnB,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAIZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,SAAA,EAFd,CAAC,oBAAoB,CAAC,YAlB/B,YAAY;AACZ,YAAA,mBAAmB,EAUnB,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FASV,cAAc,EAAA,UAAA,EAAA,CAAA;kBAtB1B,QAAQ;AAAE,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB;AACD,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,UAAU;wBACV;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;AACpB,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG,UAAU;wBACb;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,oBAAoB;AACjC,iBAAA;;;AC9BD;;AAEG;;;;"}