{"version":3,"file":"idea-ionic-common.mjs","sources":["../../../modules/common/src/actionSheet/actionSheet.component.ts","../../../modules/common/src/actionSheet/actionSheetController.service.ts","../../../modules/common/environment.ts","../../../modules/common/src/translations/translations.service.ts","../../../modules/common/src/translations/translate.pipe.ts","../../../modules/common/src/api.service.ts","../../../modules/common/src/storage.service.ts","../../../modules/common/src/appStatus/appStatus.service.ts","../../../modules/common/src/appStatus/appStatus.page.ts","../../../modules/common/src/appStatus/appStatus.routes.ts","../../../modules/common/src/loading.service.ts","../../../modules/common/src/message.service.ts","../../../modules/common/src/attachments/attachments.service.ts","../../../modules/common/src/attachments/attachments.component.ts","../../../modules/common/src/labeler/labeler.component.ts","../../../modules/common/src/translations/label.pipe.ts","../../../modules/common/src/attachments/manageAttachmentsSection.component.ts","../../../modules/common/src/attachments/attachmentSections.component.ts","../../../modules/common/src/boldPrefix.pipe.ts","../../../modules/common/src/select/suggestions.component.ts","../../../modules/common/src/select/suggestions.component.html","../../../modules/common/src/userAvatar/userAvatar.component.ts","../../../modules/common/src/checker/checks.component.ts","../../../modules/common/src/checker/checker.component.ts","../../../modules/common/src/checker/chipChecker.component.ts","../../../modules/common/src/checker/inlineChecker.component.ts","../../../modules/common/src/select/select.component.ts","../../../modules/common/src/select/select.component.html","../../../modules/common/src/customFields/customBlock.component.ts","../../../modules/common/src/customFields/customBlock.component.html","../../../modules/common/src/icons/icons.component.ts","../../../modules/common/src/customFields/customFieldMeta.component.ts","../../../modules/common/src/customFields/customFieldMeta.component.html","../../../modules/common/src/customFields/customSectionMeta.component.ts","../../../modules/common/src/customFields/customSectionMeta.component.html","../../../modules/common/src/customFields/customBlockMeta.component.ts","../../../modules/common/src/customFields/customBlockMeta.component.html","../../../modules/common/src/customFields/customSection.component.ts","../../../modules/common/src/customFields/customSection.component.html","../../../modules/common/src/highlightedVariables.pipe.ts","../../../modules/common/src/list/listElements.component.ts","../../../modules/common/src/list/list.component.ts","../../../modules/common/src/email/emailDataConfiguration.component.ts","../../../modules/common/src/email/emailData.component.ts","../../../modules/common/src/email/sendEmail.component.ts","../../../modules/common/src/labeler/label.component.ts","../../../modules/common/src/pdfTemplate/pdfTemplate.component.ts","../../../modules/common/src/pdfTemplate/pdfTemplate.component.html","../../../modules/common/src/showHintButton/showHintButton.component.ts","../../../modules/common/src/signature/signature.component.ts","../../../modules/common/src/tooltip/tooltip.component.ts","../../../modules/common/src/tooltip/tooltip.directive.ts","../../../modules/common/src/translations/dateLocale.pipe.ts","../../../modules/common/src/translations/languagePicker.component.ts","../../../modules/common/src/translations/translations.module.ts","../../../modules/common/src/linkify.pipe.ts","../../../modules/common/src/webSocketApi.service.ts","../../../modules/common/idea-ionic-common.ts"],"sourcesContent":["import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ActionSheetButton } from '@ionic/core';\nimport {\n  IonContent,\n  IonGrid,\n  IonCol,\n  IonRow,\n  IonLabel,\n  IonButton,\n  IonIcon,\n  PopoverController\n} from '@ionic/angular/standalone';\n\n/**\n * It's an alternative for desktop devices to the traditional ActionSheet.\n * It shares (almost) the same inputs so they are interchangeable.\n */\n@Component({\n  selector: 'idea-action-sheet',\n  standalone: true,\n  imports: [IonIcon, IonButton, IonLabel, IonRow, IonCol, IonGrid, IonContent],\n  template: `\n    <ion-content [class]=\"cssClass\">\n      <ion-grid class=\"ion-padding\">\n        @if (header) {\n          <ion-row class=\"headerRow\">\n            <ion-col class=\"ion-text-center\">\n              <ion-label class=\"ion-text-wrap\">\n                {{ header }}\n                @if (subHeader) {\n                  <p>{{ subHeader }}</p>\n                }\n              </ion-label>\n            </ion-col>\n          </ion-row>\n        }\n        <ion-row class=\"ion-justify-content-center buttonsRow\">\n          @for (button of buttons; track button) {\n            <ion-col [size]=\"withIcons ? 6 : 12\">\n              <ion-button\n                fill=\"clear\"\n                expand=\"full\"\n                color=\"medium\"\n                [class.withIcon]=\"withIcons\"\n                [class.destructive]=\"button.role === 'destructive'\"\n                [class.cancel]=\"button.role === 'cancel'\"\n                (click)=\"buttonClicked(button)\"\n              >\n                <div>\n                  @if (withIcons) {\n                    <ion-icon [icon]=\"button.icon || 'flash'\" />\n                  }\n                  @if (withIcons) {\n                    <br />\n                  }\n                  <ion-label class=\"ion-text-wrap\">{{ button.text }}</ion-label>\n                </div>\n              </ion-button>\n            </ion-col>\n          }\n        </ion-row>\n      </ion-grid>\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-row.headerRow {\n        margin-top: 8px;\n        margin-bottom: 16px;\n        font-size: 1.2em;\n        font-weight: 500;\n      }\n      ion-row.buttonsRow {\n        margin-bottom: 8px;\n        ion-button {\n          text-transform: none;\n          --ion-color-base: var(--ion-text-color-step-350) !important;\n          &.destructive {\n            --ion-color-base: var(--ion-color-danger) !important;\n          }\n          &.cancel {\n            --ion-color-base: var(--ion-text-color-step-650) !important;\n          }\n          &.withIcon {\n            height: 100%;\n            div {\n              display: flex;\n              flex-flow: column nowrap;\n              align-items: center;\n              ion-icon {\n                font-size: 1.8em;\n              }\n              br {\n                content: '';\n                margin-bottom: 10px;\n              }\n            }\n          }\n        }\n      }\n      .action-sheet-cancel ion-icon {\n        opacity: 0.8;\n      }\n    `\n  ]\n})\nexport class IDEAActionSheetComponent implements OnInit {\n  private _popover = inject(PopoverController);\n\n  /**\n   * An array of buttons for the actions panel.\n   */\n  @Input() buttons: ActionSheetButton[] = [];\n  /**\n   * Additional classes to apply for custom CSS. If multiple classes are provided they should be separated by spaces.\n   */\n  @Input() cssClass: string;\n  /**\n   * Title for the actions panel.\n   */\n  @Input() header: string;\n  /**\n   * Subtitle for the actions panel.\n   */\n  @Input() subHeader: string;\n\n  withIcons: boolean;\n\n  ngOnInit(): void {\n    // based on the input, changes the way the UI behaves\n    this.withIcons = this.buttons.some(b => b.icon);\n  }\n\n  buttonClicked(button: ActionSheetButton): void {\n    if (button.handler) button.handler();\n    this._popover.dismiss();\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActionSheetButton } from '@ionic/core';\nimport { ActionSheetController, Platform, PopoverController } from '@ionic/angular/standalone';\n\nimport { IDEAActionSheetComponent } from './actionSheet.component';\n\n/**\n * It's an alternative to the traditional ActionSheetController.\n * It shares (almost) the same inputs, so they are interchangeable.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAActionSheetController {\n  private _platform = inject(Platform);\n  private _actions = inject(ActionSheetController);\n  private _popover = inject(PopoverController);\n\n  /**\n   * Based on the platform, open the traditional or the customised ActionSheet.\n   */\n  create(options: IDEAActionSheetOptions, forceCustom?: boolean): Promise<HTMLIonActionSheetElement> {\n    if ((this._platform.is('mobile') || this._platform.width() < 576) && !forceCustom)\n      return this._actions.create(options);\n    else\n      return (this._popover as any).create({\n        backdropDismiss: options.backdropDismiss,\n        component: IDEAActionSheetComponent,\n        componentProps: options,\n        cssClass: 'actionSheetPopover'\n      }) as Promise<HTMLIonActionSheetElement>;\n  }\n}\n\n/**\n * The options for the ActionSheet.\n */\nexport interface IDEAActionSheetOptions {\n  /**\n   * If true, the action sheet will be dismissed when the backdrop is clicked.\n   */\n  backdropDismiss?: boolean;\n  /**\n   * An array of buttons for the action sheet.\n   */\n  buttons: ActionSheetButton[];\n  /**\n   * Additional classes to apply for custom CSS. If multiple classes are provided they should be separated by spaces.\n   */\n  cssClass?: string;\n  /**\n   * Title for the action sheet.\n   */\n  header?: string;\n  /**\n   * Subtitle for the action sheet.\n   */\n  subHeader?: string;\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The token to inject the app configurations in the module.\n */\nexport const IDEAEnvironment = new InjectionToken<IDEAEnvironmentConfiguration | any>('IDEA environment configuration');\n\n/**\n * The environment variables used by IDEA Ionic Extra's modules.\n */\nexport interface IDEAEnvironmentConfiguration {\n  idea: {\n    project: string;\n    ionicExtraModules: string[];\n    app?: {\n      version: string;\n      bundle: string;\n      appleStoreURL?: string;\n      googleStoreURL?: string;\n      maxFileUploadSizeMB?: number;\n    };\n    api?: {\n      url: string;\n      stage?: string;\n    };\n    ideaApi?: {\n      url: string;\n      stage?: string;\n    };\n    socket?: {\n      url: string;\n      stage?: string;\n    };\n    auth?: {\n      title?: string;\n      website?: string;\n      hasIntroPage?: boolean;\n      registrationIsPossible: boolean;\n      singleSimultaneousSession: boolean;\n      forceLoginWithMFA: boolean;\n      // note: the passwordPolicy should be set matching the configuration of the Cognito User Pool\n      passwordPolicy?: {\n        minLength: number;\n        requireLowercase: boolean;\n        requireDigits: boolean;\n        requireSymbols: boolean;\n        requireUppercase: boolean;\n        advancedPasswordCheck?: boolean;\n      };\n    };\n  };\n  aws?: {\n    cognito?: {\n      userPoolId: string;\n      userPoolClientId: string;\n      domain?: string;\n      externalProviders?: { type: 'okta'; name: string; emailDomains: string[] }[];\n    };\n  };\n  google?: {\n    apiClientId: string;\n    apiScope: string;\n  };\n  microsoft?: {\n    apiClientId: string;\n    apiScope: string;\n  };\n  auth0?: {\n    domain: string;\n    clientId: string;\n    callbackUri: string;\n    storeRefreshToken: boolean;\n  };\n}\n","import { Injectable, EventEmitter, inject } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport {\n  getStringEnumKeyByValue,\n  Label,\n  Languages,\n  LanguagesISO639,\n  mdToHtml,\n  getTzOffsetMinutesString\n} from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\n\n/**\n * Translations service.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEATranslationsService {\n  protected _env = inject(IDEAEnvironment);\n\n  /**\n   * Base folder containing the translations.\n   */\n  protected basePath = 'assets/i18n/';\n  /**\n   * The modules for which to load the translations.\n   */\n  protected modulesPath: string[];\n\n  /**\n   * Template matcher to interpolate complex strings (e.g. `{{user}}`).\n   */\n  private templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n  /**\n   * The available languages.\n   */\n  private langs: string[];\n  /**\n   * The current language.\n   */\n  private currentLang: string;\n  /**\n   * The fallback language.\n   */\n  private defaultLang: string;\n  /**\n   * The translations.\n   */\n  private translations: any = {};\n  /**\n   * Some default interpolation parameters to add to istant translations.\n   */\n  private defaultInterpolations: Record<string, string> = {};\n  /**\n   * To subscribe to language changes.\n   */\n  onLangChange = new EventEmitter<string>();\n\n  constructor() {\n    this.modulesPath = [''].concat(this._env.idea.ionicExtraModules || []);\n  }\n\n  /**\n   * Initialize the service.\n   */\n  async init(languages: string[] = ['en'], defaultLang = 'en'): Promise<void> {\n    this.setLangs(languages);\n    this.setDefaultLang(defaultLang);\n    let lang = this.getBrowserLang();\n    if (!languages.includes(lang)) lang = this.getDefaultLang();\n    await this.use(lang, true);\n  }\n\n  /**\n   * Set the available languages.\n   */\n  setLangs(langs: string[]): void {\n    this.langs = langs.slice();\n  }\n  /**\n   * Returns an array of currently available languages.\n   */\n  getLangs(): string[] {\n    return this.langs;\n  }\n\n  /**\n   * Get the fallback language.\n   */\n  getDefaultLang(): string {\n    return this.defaultLang;\n  }\n  /**\n   * Sets the default language to use as a fallback.\n   */\n  setDefaultLang(lang: string): void {\n    if (this.langs.includes(lang)) this.defaultLang = lang;\n    else this.defaultLang = this.langs[0];\n  }\n\n  /**\n   * Get the languages in IdeaX format.\n   */\n  languages(): Languages {\n    return new Languages({ available: this.langs, default: this.defaultLang });\n  }\n\n  /**\n   * Returns the language code name from the browser, e.g. \"it\"\n   */\n  getBrowserLang(): string {\n    if (typeof window === 'undefined' || typeof window.navigator === 'undefined') return undefined;\n    let browserLang: any = window.navigator.languages ? window.navigator.languages[0] : null;\n    browserLang =\n      browserLang ||\n      window.navigator.language ||\n      (window.navigator as any).browserLanguage ||\n      (window.navigator as any).userLanguage;\n    if (typeof browserLang === 'undefined') return undefined;\n    if (browserLang.indexOf('-') !== -1) browserLang = browserLang.split('-')[0];\n    if (browserLang.indexOf('_') !== -1) browserLang = browserLang.split('_')[0];\n    return browserLang;\n  }\n\n  /**\n   * The lang currently used.\n   */\n  getCurrentLang(): string {\n    return this.currentLang;\n  }\n  /**\n   * Set a language to use.\n   */\n  use(lang: string, force?: boolean): Promise<void> {\n    return new Promise(resolve => {\n      const changed = lang !== this.currentLang;\n      if (!changed && !force) return;\n      // check whether the language is among the available ones; otherwise, fallback to default\n      if (!this.langs.includes(lang)) lang = this.defaultLang;\n      // load translations\n      this.loadTranlations(lang).then((): void => {\n        // set the lang\n        this.currentLang = lang;\n        // emit the change\n        if (changed) this.onLangChange.emit(lang);\n        // resolve\n        resolve();\n      });\n    });\n  }\n\n  /**\n   * Set some parameters to automatically provide to translation actions.\n   */\n  setDefaultInterpolations(defaultParams: Record<string, string>): void {\n    this.defaultInterpolations = defaultParams || {};\n  }\n\n  /**\n   * Get a translated term by key in the current language, optionally interpolating variables (e.g. `{{user}}`).\n   * If the term doesn't exist in the current language, it is searched in the default language.\n   */\n  instant(key: string, interpolateParams?: any): string {\n    return this.instantInLanguage(this.currentLang, key, interpolateParams);\n  }\n  /**\n   * Get a translated term by key in the selected language, optionally interpolating variables (e.g. `{{user}}`).\n   * If the term doesn't exist in the current language, it is searched in the default language.\n   */\n  instantInLanguage(language: string, key: string, interpolateParams?: any): string {\n    const params = { ...this.defaultInterpolations, ...(interpolateParams || {}) };\n    if (!this.isDefined(key) || !key.length) return;\n    let res = this.interpolate(this.getValue(this.translations[language], key), params);\n    if (res === undefined && this.defaultLang !== null && this.defaultLang !== language)\n      res = this.interpolate(this.getValue(this.translations[this.defaultLang], key), params);\n    return res;\n  }\n  /**\n   * Shortcut to instant.\n   */\n  _(key: string, interpolateParams?: any): string {\n    return this.instant(key, interpolateParams);\n  }\n  /**\n   * Translate (instant) and transform an expected markdown string into HTML.\n   */\n  _md(key: string, interpolateParams?: any): string {\n    return mdToHtml(this._(key, interpolateParams));\n  }\n\n  /**\n   * Return a Label containing all the available translations of a key.\n   */\n  getLabelByKey(key: string, interpolateParams?: any): Label {\n    const label = new Label(null, this.languages());\n    this.langs.forEach(lang => (label[lang] = this.instantInLanguage(lang, key, interpolateParams)));\n    return label;\n  }\n  /**\n   * Return the translation in the current language of a label.\n   */\n  translateLabel(label: Label): string {\n    return label.translate(this.getCurrentLang(), this.languages());\n  }\n  /**\n   * Shortcut to translateLabel.\n   */\n  _label(label: Label): string {\n    return this.translateLabel(label);\n  }\n\n  /**\n   * Load the translations from the files.\n   */\n  private loadTranlations(lang: string): Promise<void> {\n    return new Promise(resolve => {\n      this.translations = {};\n      this.translations[this.defaultLang] = {};\n      let promises = this.modulesPath.map(m =>\n        this.loadTranslationFileHelper(this.basePath.concat(m), this.defaultLang)\n      );\n      if (lang !== this.defaultLang) {\n        this.translations[lang] = {};\n        promises = promises.concat(\n          this.modulesPath.map(m => this.loadTranslationFileHelper(this.basePath.concat(m), lang))\n        );\n      }\n      Promise.all(promises).then((): void => resolve());\n    });\n  }\n  /**\n   * Load a file into the translations.\n   */\n  private async loadTranslationFileHelper(path: string, lang: string): Promise<void> {\n    const res = await fetch(`${path.slice(-1) === '/' ? path : path.concat('/')}${lang}.json`, {\n      method: 'GET',\n      cache: 'no-cache' // to avoid issues upon releases\n    });\n    if (res.status !== 200) return;\n\n    const obj = await res.json();\n    for (const key in obj) if (obj[key]) this.translations[lang][key] = obj[key];\n  }\n\n  /**\n   * Interpolates a string to replace parameters.\n   * \"This is a {{ key }}\" ==> \"This is a value\", with params = { key: \"value\" }\n   */\n  private interpolate(expr: string, params?: any): string {\n    if (!params || !expr) return expr;\n    return expr.replace(this.templateMatcher, (substring: string, b: string): any => {\n      const r = this.getValue(params, b);\n      return this.isDefined(r) ? r : substring;\n    });\n  }\n  /**\n   * Gets a value from an object by composed key.\n   * getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA') ==> 'valueI'\n   */\n  private getValue(target: any, key: string): any {\n    const keys = typeof key === 'string' ? key.split('.') : [key];\n    key = '';\n    do {\n      key += keys.shift();\n      if (this.isDefined(target) && this.isDefined(target[key]) && (typeof target[key] === 'object' || !keys.length)) {\n        target = target[key];\n        key = '';\n      } else if (!keys.length) target = undefined;\n      else key += '.';\n    } while (keys.length);\n    return target;\n  }\n\n  /**\n   * Helper to quicly check if the value is defined.\n   */\n  private isDefined(value: any): boolean {\n    return value !== undefined && value !== null;\n  }\n\n  /**\n   * Format a date in the current locale (optionally forcing a timeZone).\n   */\n  formatDate(value: any, pattern: string = 'mediumDate', timeZone?: string): string {\n    const timeZoneOffset = timeZone ? getTzOffsetMinutesString(timeZone) : undefined;\n    const datePipe = new DatePipe(this.getCurrentLang(), timeZoneOffset);\n    return datePipe.transform(value, pattern);\n  }\n\n  /**\n   * Get a readable string to represent the current language (standard ISO639).\n   */\n  getLanguageNameByKey(lang?: string): string {\n    return getStringEnumKeyByValue(LanguagesISO639, lang || this.getCurrentLang());\n  }\n}\n","import { ChangeDetectorRef, Injectable, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { Subscription } from 'rxjs'; // @todo replace rxjs with something else?\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Injectable()\n// NOT pure because we need to update the translations when the language change\n@Pipe({ name: 'translate', pure: false, standalone: true })\nexport class IDEATranslatePipe implements PipeTransform, OnDestroy {\n  private _translate = inject(IDEATranslationsService);\n  private _ref = inject(ChangeDetectorRef);\n\n  /**\n   * The value to display.\n   */\n  private value = '';\n  /**\n   * The last key requested.\n   */\n  private lastKey: string;\n  /**\n   * The last params requested.\n   */\n  private lastParams: any[];\n  /**\n   * Subscription to the (current) language changes.\n   */\n  private onLangChange: Subscription;\n\n  updateValue(key: string, interpolateParams?: any): void {\n    const res = this._translate.instant(key, interpolateParams);\n    this.value = res !== undefined ? res : key;\n    this.lastKey = key;\n    this._ref.markForCheck();\n  }\n\n  transform(query: string, ...args: any[]): any {\n    if (!query || !query.length) return query;\n    // if we ask another time for the same key, return the last value\n    if (equals(query, this.lastKey) && equals(args, this.lastParams)) return this.value;\n    let interpolateParams: any;\n    if (args[0] !== undefined && args[0] !== null && args.length) {\n      if (typeof args[0] === 'string' && args[0].length) {\n        // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n        // which is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n        const validArgs: string = args[0]\n          .replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n          .replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n        try {\n          interpolateParams = JSON.parse(validArgs);\n        } catch (e) {\n          throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\n        }\n      } else if (typeof args[0] === 'object' && !Array.isArray(args[0])) interpolateParams = args[0];\n    }\n    // store the query, in case it changes\n    this.lastKey = query;\n    // store the params, in case they change\n    this.lastParams = args;\n    // set the value\n    this.updateValue(query, interpolateParams);\n    // if there is a subscription to onLangChange, clean it\n    this._dispose();\n    // subscribe to onLangChange event, in case the language changes\n    if (!this.onLangChange) {\n      this.onLangChange = this._translate.onLangChange.subscribe((): void => {\n        if (this.lastKey) {\n          this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n          this.updateValue(query, interpolateParams);\n        }\n      }) as any as Subscription;\n    }\n    return this.value;\n  }\n\n  private _dispose(): void {\n    if (this.onLangChange !== undefined) {\n      this.onLangChange.unsubscribe();\n      this.onLangChange = undefined;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._dispose();\n  }\n}\n\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `equals`.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: any, o2: any): boolean {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  const t1 = typeof o1,\n    t2 = typeof o2;\n  let length: number, key: any, keySet: any;\n  if (t1 === t2 && t1 === 'object') {\n    if (Array.isArray(o1)) {\n      if (!Array.isArray(o2)) return false;\n      if ((length = o1.length) === o2.length) {\n        for (key = 0; key < length; key++) {\n          if (!equals(o1[key], o2[key])) return false;\n        }\n        return true;\n      }\n    } else {\n      if (Array.isArray(o2)) {\n        return false;\n      }\n      keySet = Object.create(null);\n      for (key in o1) {\n        if (o1[key]) {\n          if (!equals(o1[key], o2[key])) {\n            return false;\n          }\n          keySet[key] = true;\n        }\n      }\n      for (key in o2) {\n        if (o2[key])\n          if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n            return false;\n          }\n      }\n      return true;\n    }\n  }\n  return false;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Platform } from '@ionic/angular/standalone';\n\nimport { IDEAEnvironment } from '../environment';\n\n/**\n * To communicate with an AWS API Gateway istance.\n * Lighter, alternative version of _IDEAAWSAPIService_.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAApiService {\n  protected _env = inject(IDEAEnvironment);\n  private _platform = inject(Platform);\n\n  /**\n   * The base URL to which to make requests.\n   */\n  baseURL: string;\n  /**\n   * A reference to the current's app version.\n   */\n  appVersion: string;\n  /**\n   * A reference to the current's app package (bundle).\n   * It can be `undefined` in case the app doesn't have a (mobile) app bundle.\n   */\n  appBundle: string;\n\n  /**\n   * Passed as `Authorization` header.\n   */\n  authToken: string | (() => Promise<string>);\n  /**\n   * Passed as `X-API-Key` header.\n   */\n  apiKey: string;\n\n  /**\n   * Some custom headers to set so that they are used in any API request.\n   */\n  defaultHeaders: Record<string, string | number> = {};\n\n  constructor() {\n    this.baseURL = 'https://'.concat([this._env.idea.api?.url, this._env.idea.api?.stage].filter(x => x).join('/'));\n    this.appVersion = this._env.idea.app?.version || '?';\n    this.appBundle = this._env.idea.app?.bundle;\n  }\n\n  /**\n   * Execute an online API request.\n   * @param path resource path (e.g. `['users', userId]`)\n   * @param method HTTP method\n   * @param options the request options\n   */\n  protected async request(\n    path: string[] | string,\n    method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n    options: ApiRequestOptions = {}\n  ): Promise<any> {\n    const url = this.baseURL.concat('/', Array.isArray(path) ? path.join('/') : path);\n\n    const builtInHeaders: any = {};\n    if (this.authToken) {\n      if (typeof this.authToken === 'function') builtInHeaders.Authorization = await this.authToken();\n      else builtInHeaders.Authorization = this.authToken;\n    }\n    if (this.apiKey) builtInHeaders['X-API-Key'] = this.apiKey;\n\n    const headers: any = { ...builtInHeaders, ...this.defaultHeaders, ...options.headers };\n\n    const searchParams = new URLSearchParams();\n    searchParams.append('_v', this.appVersion);\n    searchParams.append('_p', this._platform.platforms().join(' '));\n    if (this.appBundle) searchParams.append('_b', this.appBundle);\n    if (options.params) {\n      for (const paramName in options.params) {\n        const param = options.params[paramName];\n        if (Array.isArray(param)) for (const arrayElement of param) searchParams.append(paramName, arrayElement);\n        else searchParams.append(paramName, param as string);\n      }\n    }\n\n    let body: any = null;\n    if (options.body) body = JSON.stringify(options.body);\n\n    const res = await fetch(url.concat('?', searchParams.toString()), { method, headers, body });\n    if (res.status === 200) return await res.json();\n\n    let errMessage: string;\n    try {\n      errMessage = (await res.json()).message;\n    } catch (err) {\n      errMessage = 'Operation failed';\n    }\n    throw new Error(errMessage);\n  }\n\n  /**\n   * GET request.\n   */\n  async getResource(path: string[] | string, options?: ApiRequestOptions): Promise<any> {\n    return await this.request(path, 'GET', options);\n  }\n\n  /**\n   * POST request.\n   */\n  async postResource(path: string[] | string, options?: ApiRequestOptions): Promise<any> {\n    return await this.request(path, 'POST', options);\n  }\n\n  /**\n   * PUT request.\n   */\n  async putResource(path: string[] | string, options?: ApiRequestOptions): Promise<any> {\n    return await this.request(path, 'PUT', options);\n  }\n\n  /**\n   * PATCH request.\n   */\n  async patchResource(path: string[] | string, options?: ApiRequestOptions): Promise<any> {\n    return await this.request(path, 'PATCH', options);\n  }\n\n  /**\n   * DELETE request.\n   */\n  async deleteResource(path: string[] | string, options?: ApiRequestOptions): Promise<any> {\n    return await this.request(path, 'DELETE', options);\n  }\n}\n\n/**\n * The options of an API request.\n */\ninterface ApiRequestOptions {\n  /**\n   * The additional headers of the request.\n   * The headers \"Authorization\" and \"X-API-Key\" are included by default, if set.\n   * The headers set in `defaultHeaders` are always added to any API request.\n   */\n  headers?: { [key: string]: string | number | boolean };\n  /**\n   * The query parameters of the request.\n   */\n  params?: { [key: string]: string | number | boolean };\n  /**\n   * The body of the request.\n   */\n  body?: any;\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Storage } from '@ionic/storage-angular';\n\n@Injectable({ providedIn: 'root' })\nexport class IDEAStorageService {\n  private _storage = inject(Storage);\n\n  private theStorage: Storage | null = null;\n\n  constructor() {\n    this.init();\n  }\n\n  async init(): Promise<void> {\n    const storage = await this._storage.create();\n    this.theStorage = storage;\n  }\n  async ready(): Promise<void> {\n    return new Promise(resolve => this.readyHelper(resolve));\n  }\n  private readyHelper(resolve: any): void {\n    if (this.theStorage) resolve();\n    else setTimeout((): void => this.readyHelper(resolve), 100);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    return await this.theStorage?.set(key, value);\n  }\n  async get(key: string): Promise<any> {\n    return await this.theStorage?.get(key);\n  }\n  async remove(key: string): Promise<void> {\n    return await this.theStorage?.remove(key);\n  }\n  async clear(): Promise<void> {\n    return await this.theStorage?.clear();\n  }\n  async keys(): Promise<string[]> {\n    return await this.theStorage?.keys();\n  }\n  async length(): Promise<number> {\n    return await this.theStorage?.length();\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { NavController, ToastController } from '@ionic/angular/standalone';\nimport { AppStatus, markdown } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEAApiService } from '../api.service';\nimport { IDEAStorageService } from '../storage.service';\n\n/**\n * Check whether the app has some status message or update to handle.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAAppStatusService {\n  protected _env = inject(IDEAEnvironment);\n  private _nav = inject(NavController);\n  private _toast = inject(ToastController);\n  private _translate = inject(IDEATranslationsService);\n  private _api = inject(IDEAApiService);\n  private _storage = inject(IDEAStorageService);\n\n  appStatus: AppStatus;\n\n  storageKey: string;\n  statusFileURL: string;\n\n  constructor() {\n    this.storageKey == (this._env.idea.project || 'app').concat('_LAST_MESSAGE');\n    this.statusFileURL = `${window.location.hostname === 'localhost' ? '' : window.location.origin}/assets/status.json`;\n  }\n\n  /**\n   * Check the app's status and take according actions.\n   */\n  async check(options: { viaApi?: boolean; toastColor?: string; toastPosition?: string } = {}): Promise<AppStatus> {\n    const appStatus = await this.getStatus(options.viaApi);\n    if (appStatus.inMaintenance || appStatus.mustUpdate) await this._nav.navigateRoot(['app-status']);\n    else await this.presentToast(appStatus, { color: options.toastColor, position: options.toastPosition });\n    return appStatus;\n  }\n  private async getStatus(viaApi = false): Promise<AppStatus> {\n    if (this.appStatus) return this.appStatus;\n    this.appStatus = await (viaApi ? this.getStatusFromApi() : this.getStatusFromAsset());\n    return this.appStatus;\n  }\n  private async getStatusFromApi(): Promise<AppStatus> {\n    return new AppStatus(await this._api.getResource(['status']));\n  }\n  private async getStatusFromAsset(): Promise<AppStatus> {\n    const res = await fetch(this.statusFileURL, { method: 'GET', cache: 'no-cache' });\n    if (res.status !== 200) throw new Error('Status not found');\n    const statusFromS3: InternalAppVersionStatusViaAsset = await res.json();\n    return new AppStatus({\n      version: this._env.idea.app.version,\n      inMaintenance: statusFromS3.maintenance,\n      mustUpdate: statusFromS3.minVersion ? statusFromS3.minVersion > this._env.idea.app.version : false,\n      content: statusFromS3.messages[this._env.idea.app.version],\n      latestVersion: statusFromS3.latestVersion\n    });\n  }\n  private async presentToast(appStatus: AppStatus, options: { color?: string; position?: string } = {}): Promise<void> {\n    let message = appStatus.content || '';\n    if (!message && this._env.idea.app.version < appStatus.latestVersion)\n      message = this._translate._('IDEA_COMMON.APP_STATUS.NEW_VERSION', { newVersion: appStatus.latestVersion });\n\n    if (!message) return;\n\n    const messageAlreadyRead = await this._storage.get(this.storageKey);\n    if (messageAlreadyRead === message) return; // user already saw this message\n\n    const dismissMessage = (): Promise<void> => this._storage.set(this.storageKey, message);\n    const buttons: any = [\n      { text: this._translate._('IDEA_COMMON.APP_STATUS.GOT_IT'), role: 'cancel', handler: dismissMessage }\n    ];\n    const color = options.color || 'dark';\n    const position: any = options.position || 'bottom';\n\n    const toast = await this._toast.create({ message, buttons, position, color });\n    await toast.present();\n  }\n}\n\ninterface InternalAppVersionStatusViaAsset {\n  /**\n   * Whether the app is in maintenance mode.\n   */\n  maintenance: boolean;\n  /**\n   * The latest version of the app.\n   */\n  latestVersion: string;\n  /**\n   * The minimum required version to access the app.\n   */\n  minVersion: string;\n  /**\n   * The optional messages for each of the app's versions.\n   */\n  messages: { [version: string]: markdown };\n}\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n  IonButton,\n  IonCard,\n  IonCardContent,\n  IonCardHeader,\n  IonCardTitle,\n  IonCol,\n  IonContent,\n  IonGrid,\n  IonIcon,\n  IonImg,\n  IonRow,\n  Platform\n} from '@ionic/angular/standalone';\nimport { Browser } from '@capacitor/browser';\nimport { mdToHtml, AppStatus } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEAAppStatusService } from './appStatus.service';\n\n/**\n * Handle blocking status messaging for the app.\n */\n@Component({\n  selector: 'idea-app-status',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IonContent,\n    IonCard,\n    IonCardHeader,\n    IonCardContent,\n    IonCardTitle,\n    IonImg,\n    IonGrid,\n    IonRow,\n    IonCol,\n    IonButton,\n    IonIcon,\n    IDEATranslatePipe\n  ],\n  template: `\n    @if (status) {\n      <ion-content class=\"ion-padding\">\n        <div class=\"maxWidthContainer\">\n          <ion-card color=\"dark\">\n            <ion-card-header>\n              <ion-card-title class=\"ion-text-center\">\n                <h3>{{ getTitle() }}</h3>\n              </ion-card-title>\n            </ion-card-header>\n            <ion-card-content class=\"ion-align-items-center\">\n              <ion-img class=\"logo\" [src]=\"appIconURI\" (ionError)=\"$event.target.style.display = 'none'\" />\n              @if (htmlContent) {\n                <p class=\"htmlContent\" [innerHTML]=\"htmlContent\"></p>\n              }\n              @if (status.mustUpdate) {\n                <ion-grid>\n                  <ion-row>\n                    <ion-col class=\"ion-text-center\">\n                      @if (isIOS() && appleStoreURL) {\n                        <ion-button (click)=\"opeAppleStoreLink()\">\n                          <ion-icon slot=\"start\" name=\"logo-apple-appstore\" />\n                          {{ 'IDEA_COMMON.APP_STATUS.UPDATE' | translate }}\n                        </ion-button>\n                      }\n                      @if (isAndroid() && googleStoreURL) {\n                        <ion-button (click)=\"openGoogleStoreLink()\">\n                          <ion-icon slot=\"start\" name=\"logo-google-playstore\" />\n                          {{ 'IDEA_COMMON.APP_STATUS.UPDATE' | translate }}\n                        </ion-button>\n                      }\n                    </ion-col>\n                  </ion-row>\n                </ion-grid>\n              }\n            </ion-card-content>\n          </ion-card>\n        </div>\n      </ion-content>\n    }\n  `,\n  styles: [\n    `\n      ion-img.logo {\n        width: 100px;\n        margin: 0 auto;\n        margin-bottom: 24px;\n      }\n      p.htmlContent {\n        margin: 0 0 24px 0;\n        padding: 20px;\n      }\n    `\n  ]\n})\nexport class IDEAAppStatusPage {\n  protected _env = inject(IDEAEnvironment);\n  private _platform = inject(Platform);\n  private _translate = inject(IDEATranslationsService);\n  private _appStatus = inject(IDEAAppStatusService);\n\n  status: AppStatus;\n  htmlContent: string;\n\n  appleStoreURL: string;\n  googleStoreURL: string;\n\n  appIconURI = '/assets/icons/icon.svg';\n\n  constructor() {\n    this.appleStoreURL = (this._env.idea.app as any)?.appleStoreURL;\n    this.googleStoreURL = (this._env.idea.app as any)?.googleStoreURL;\n  }\n\n  async ionViewWillEnter(): Promise<void> {\n    this.status = await this._appStatus.check();\n    if (this.status.content) this.htmlContent = mdToHtml(this.status.content);\n  }\n\n  getTitle(): string {\n    if (this.status.inMaintenance) return this._translate._('IDEA_COMMON.APP_STATUS.MAINTENANCE');\n    if (this.status.mustUpdate) return this._translate._('IDEA_COMMON.APP_STATUS.MUST_UPDATE');\n    return this._translate._('IDEA_COMMON.APP_STATUS.EVERYTHING_IS_OK');\n  }\n\n  isAndroid(): boolean {\n    return this._platform.is('android');\n  }\n  isIOS(): boolean {\n    return this._platform.is('ios');\n  }\n\n  async openGoogleStoreLink(): Promise<void> {\n    await Browser.open({ url: this.googleStoreURL });\n  }\n  async opeAppleStoreLink(): Promise<void> {\n    await Browser.open({ url: this.appleStoreURL });\n  }\n}\n","import { Routes } from '@angular/router';\n\nimport { IDEAAppStatusPage } from './appStatus.page';\n\nexport const ideaAppStatusRoutes: Routes = [{ path: '', component: IDEAAppStatusPage }];\n","import { Injectable, inject } from '@angular/core';\nimport { LoadingController } from '@ionic/angular/standalone';\n\nimport { IDEATranslationsService } from './translations/translations.service';\n\n@Injectable({ providedIn: 'root' })\nexport class IDEALoadingService {\n  private _loading = inject(LoadingController);\n  private _translate = inject(IDEATranslationsService);\n\n  private loadingElement: HTMLIonLoadingElement;\n\n  /**\n   * Show a loading animation.\n   * @param content loading message\n   */\n  async show(content?: string): Promise<void> {\n    const message = content || this._translate._('IDEA_COMMON.LOADING.PLEASE_WAIT');\n    this.loadingElement = await this._loading.create({ message });\n    return await this.loadingElement.present();\n  }\n  /**\n   * Change the content of the loading animation, while it's already on.\n   * @param content new loading message\n   */\n  setContent(content: string): void {\n    if (this.loadingElement) this.loadingElement.textContent = content;\n  }\n  /**\n   * Hide the loading animation.\n   */\n  async hide(): Promise<boolean> {\n    if (this.loadingElement) return await this.loadingElement.dismiss();\n    else return false;\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ToastController } from '@ionic/angular/standalone';\n\nimport { IDEATranslationsService } from './translations/translations.service';\n\n@Injectable({ providedIn: 'root' })\nexport class IDEAMessageService {\n  private _toast = inject(ToastController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * Show a generic message toast.\n   * @param message message to show\n   * @param color Ionic colors defined in the theme\n   */\n  private async show(message: string, color: string, dontTranslate: boolean): Promise<void> {\n    message = dontTranslate ? message : this._translate._(message);\n\n    const duration = 3000;\n    const position = 'bottom';\n    const buttons = [{ text: 'X', role: 'cancel' }];\n\n    const toast = await this._toast.create({ message, duration, position, color, buttons });\n    return await toast.present();\n  }\n\n  /**\n   * Show an info message toast.\n   * @param message message to show\n   */\n  async info(message: string, dontTranslate?: boolean): Promise<void> {\n    return await this.show(message, 'dark', dontTranslate);\n  }\n  /**\n   * Show a success message toast.\n   * @param message message to show\n   */\n  async success(message: string, dontTranslate?: boolean): Promise<void> {\n    return await this.show(message, 'success', dontTranslate);\n  }\n  /**\n   * Show an error message toast.\n   * @param message message to show\n   */\n  async error(message: string, dontTranslate?: boolean): Promise<void> {\n    return await this.show(message, 'danger', dontTranslate);\n  }\n  /**\n   * Show an warning message toast.\n   * @param message message to show\n   */\n  async warning(message: string, dontTranslate?: boolean): Promise<void> {\n    return await this.show(message, 'warning', dontTranslate);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Attachment } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\nimport { IDEAApiService } from '../api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class IDEAAttachmentsService {\n  protected _env = inject(IDEAEnvironment);\n  protected _api = inject(IDEAApiService);\n\n  /**\n   * Upload a new attachment related to an entity and return the `attachmentId`.\n   */\n  async uploadAndGetId(\n    file: File,\n    entityPath: string | string[],\n    options: { customAction?: string } = {}\n  ): Promise<string> {\n    const { maxFileUploadSizeMB } = this._env.idea.app;\n    if (maxFileUploadSizeMB && bytesToMegaBytes(file.size) > maxFileUploadSizeMB) throw new Error('File is too big');\n    const body = { action: options.customAction || 'GET_ATTACHMENT_UPLOAD_URL' };\n    const { url, id } = await this._api.patchResource(entityPath, { body });\n    await fetch(url, { method: 'PUT', body: file, headers: { 'Content-Type': file.type } });\n    return id;\n  }\n\n  /**\n   * Get the URL to download an attachment related to an entity.\n   */\n  async getDownloadURL(\n    attachment: Attachment | string,\n    entityPath: string | string[],\n    options: { customAction?: string } = {}\n  ): Promise<string> {\n    const body = {\n      action: options.customAction || 'GET_ATTACHMENT_DOWNLOAD_URL',\n      attachmentId: typeof attachment === 'string' ? attachment : attachment.attachmentId\n    };\n    const { url } = await this._api.patchResource(entityPath, { body });\n    return url;\n  }\n}\n\n/**\n * Approximate conversion of bytes in MB.\n */\nexport const bytesToMegaBytes = (bytes: number): number => bytes / 1024 ** 2;\n","import { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport {\n  IonButton,\n  IonIcon,\n  IonInput,\n  IonItem,\n  IonItemDivider,\n  IonLabel,\n  IonNote,\n  IonReorder,\n  IonReorderGroup,\n  IonSpinner\n} from '@ionic/angular/standalone';\nimport { Attachment } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALoadingService } from '../loading.service';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEAAttachmentsService } from './attachments.service';\n\n@Component({\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IonItem,\n    IonInput,\n    IonLabel,\n    IonNote,\n    IonSpinner,\n    IonButton,\n    IonIcon,\n    IonItemDivider,\n    IonReorderGroup,\n    IonReorder\n  ],\n  selector: 'idea-attachments',\n  template: `\n    <ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderAttachments($event)\">\n      @for (att of attachments; track att.attachmentId) {\n        <ion-item class=\"attachmentItem\" [color]=\"color\" [lines]=\"!disabled ? 'inset' : 'none'\">\n          @if (!disabled) {\n            <ion-reorder slot=\"start\" />\n            <ion-input [(ngModel)]=\"att.name\" />\n            <ion-note slot=\"end\">.{{ att.format }}</ion-note>\n            @if (!att.attachmentId) {\n              <ion-spinner\n                size=\"small\"\n                color=\"medium\"\n                slot=\"end\"\n                [title]=\"'IDEA_COMMON.ATTACHMENTS.UPLOADING' | translate\"\n              />\n            }\n            <ion-button\n              slot=\"end\"\n              color=\"danger\"\n              fill=\"clear\"\n              [title]=\"'IDEA_COMMON.ATTACHMENTS.REMOVE_ATTACHMENT' | translate\"\n              (click)=\"removeAttachment(att)\"\n            >\n              <ion-icon icon=\"remove\" slot=\"icon-only\" />\n            </ion-button>\n          } @else {\n            <ion-label class=\"ion-text-wrap\">{{ att.name }}.{{ att.format }}</ion-label>\n          }\n          @if (att.attachmentId) {\n            <ion-button\n              slot=\"end\"\n              color=\"medium\"\n              fill=\"clear\"\n              [title]=\"'IDEA_COMMON.ATTACHMENTS.DOWNLOAD_ATTACHMENT' | translate\"\n              (click)=\"downloadAttachment(att)\"\n            >\n              <ion-icon icon=\"cloud-download-outline\" slot=\"icon-only\" />\n            </ion-button>\n          }\n        </ion-item>\n      } @empty {\n        @if (disabled) {\n          <ion-item lines=\"none\" [color]=\"color\">\n            <ion-label>\n              <i>{{ 'IDEA_COMMON.ATTACHMENTS.NO_ATTACHMENTS' | translate }}</i>\n            </ion-label>\n          </ion-item>\n        }\n      }\n    </ion-reorder-group>\n    @if (!disabled) {\n      <ion-item button [color]=\"color\" (click)=\"browseFiles()\">\n        <input\n          #filePicker\n          type=\"file\"\n          style=\"display: none\"\n          [multiple]=\"multiple\"\n          [accept]=\"acceptedFormats.join(',')\"\n          (change)=\"addAttachmentsFromPicker($event.target)\"\n        />\n        <ion-label>\n          <i>{{ 'IDEA_COMMON.ATTACHMENTS.TAP_TO_ADD_ATTACHMENT' | translate }}</i>\n        </ion-label>\n      </ion-item>\n      @for (err of uploadErrors; track $index) {\n        <ion-item class=\"attachmentItem error\" [color]=\"color\">\n          <ion-label color=\"danger\" class=\"ion-text-wrap\">\n            {{ err.file }}\n            <p>{{ err.error || ('IDEA_COMMON.ATTACHMENTS.ERROR_UPLOADING_ATTACHMENT' | translate) }}</p>\n          </ion-label>\n          <ion-button\n            slot=\"end\"\n            color=\"danger\"\n            fill=\"clear\"\n            [title]=\"'IDEA_COMMON.ATTACHMENTS.HIDE_ERROR' | translate\"\n            (click)=\"removeErrorFromList(err)\"\n          >\n            <ion-icon name=\"close\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-item>\n      }\n      <ion-item-divider [color]=\"color\">\n        <ion-label>\n          {{\n            'IDEA_COMMON.ATTACHMENTS.ALLOWED_FORMATS_AND_SIZE'\n              | translate: { formats: acceptedFormats.join(', '), size: maxSize }\n          }}\n        </ion-label>\n      </ion-item-divider>\n    }\n  `,\n  styles: [\n    `\n      ion-item.attachmentItem {\n        --padding-start: 16px;\n        --padding-end: 0;\n      }\n      ion-item.attachmentItem.error ion-label {\n        font-size: 0.8em;\n        p {\n          font-size: 0.8em;\n        }\n      }\n      ion-item-divider ion-label {\n        font-size: 0.8em;\n      }\n    `\n  ]\n})\nexport class IDEAAttachmentsComponent {\n  protected _env = inject(IDEAEnvironment);\n  private _loading = inject(IDEALoadingService);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n  private _attachments = inject(IDEAAttachmentsService);\n\n  /**\n   * The array of attachments to display and manage.\n   */\n  @Input() attachments: Attachment[];\n  /**\n   * The API path to the entity for which we want to manage the attachments.\n   */\n  @Input() entityPath: string | string[];\n  /**\n   * The list of accepted formats.\n   */\n  @Input() acceptedFormats = ['image/*', '.pdf', '.doc', '.docx', '.xls', '.xlsx'];\n  /**\n   * Whether to accept multiple files as target for the browse function.\n   */\n  @Input() multiple = false;\n  /**\n   * Whether we are viewing or editing the attachments.\n   */\n  @Input() disabled = false;\n  /**\n   * The background color of the component.\n   */\n  @Input() color: string;\n  /**\n   * Trigger to download a file by URL.\n   */\n  @Output() download = new EventEmitter<string>();\n\n  @ViewChild('filePicker') attachmentPicker: any;\n\n  uploadErrors: UploadError[] = [];\n  maxSize = this._env.idea.app.maxFileUploadSizeMB;\n\n  async browseFiles(): Promise<void> {\n    this.attachmentPicker.nativeElement.click();\n  }\n  addAttachmentsFromPicker(target: HTMLInputElement): void {\n    this.uploadErrors = [];\n    for (let i = 0; i < target.files.length; i++) {\n      const file = target.files.item(i);\n      const fullName = file.name.split('.');\n      const format = fullName.pop();\n      const name = fullName.join('.');\n      this.addAttachmentToListAndUpload(new Attachment({ name, format }), file);\n    }\n    // empty the file picker to allow the upload of new files with the same name\n    target.value = null;\n  }\n  private async addAttachmentToListAndUpload(attachment: Attachment, file: File): Promise<void> {\n    try {\n      this.attachments.push(attachment);\n      attachment.attachmentId = await this._attachments.uploadAndGetId(file, this.entityPath);\n    } catch (err: any) {\n      if (err.message === 'File is too big')\n        err.message = this._translate._('IDEA_COMMON.ATTACHMENTS.FILE_IS_TOO_BIG', { maxSize: this.maxSize });\n      this.uploadErrors.push({ file: attachment.name, error: err.message });\n      this.removeAttachment(attachment);\n      this._message.error(err.message, true);\n    }\n  }\n\n  removeAttachment(attachment: Attachment): void {\n    this.attachments.splice(this.attachments.indexOf(attachment), 1);\n  }\n  removeErrorFromList(err: UploadError): void {\n    const indexErr = this.uploadErrors.indexOf(err);\n    if (indexErr !== -1) this.uploadErrors.splice(this.uploadErrors.indexOf(err), 1);\n  }\n\n  reorderAttachments(ev: any): void {\n    this.attachments = ev.detail.complete(this.attachments);\n  }\n\n  async downloadAttachment(attachment: Attachment): Promise<void> {\n    try {\n      await this._loading.show();\n      const url = await this._attachments.getDownloadURL(attachment, this.entityPath);\n      this.download.emit(url);\n    } catch (error) {\n      this._message.error('COMMON.OPERATION_FAILED');\n    } finally {\n      this._loading.hide();\n    }\n  }\n}\n\ninterface UploadError {\n  file: string;\n  error: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  Platform,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonTitle,\n  IonListHeader,\n  IonLabel,\n  IonList,\n  IonItem,\n  IonThumbnail,\n  IonTextarea,\n  IonText,\n  IonInput\n} from '@ionic/angular/standalone';\nimport { Label, LabelVariable, Languages, StringVariable } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEAMessageService } from '../message.service';\n\n/**\n * A component for filling in an Label.\n */\n@Component({\n  selector: 'idea-labeler',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IonTitle,\n    IonContent,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonList,\n    IonListHeader,\n    IonLabel,\n    IonItem,\n    IonInput,\n    IonThumbnail,\n    IonTextarea,\n    IonText\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CANCEL' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" name=\"close\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ title }}</ion-title>\n        @if (!disabled) {\n          <ion-buttons slot=\"end\">\n            <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n              <ion-icon slot=\"icon-only\" name=\"checkmark\" />\n            </ion-button>\n          </ion-buttons>\n        }\n      </ion-toolbar>\n    </ion-header>\n    <ion-content [class.ion-padding]=\"isLargeScreen()\">\n      @if (variables?.length && !disabled) {\n        <ion-list class=\"aList\">\n          <ion-list-header>\n            <ion-label>\n              <h2>{{ 'IDEA_COMMON.LABELER.VARIABLES_AVAILABLE' | translate }}</h2>\n              <p>{{ 'IDEA_COMMON.LABELER.VARIABLES_AVAILABLE_I' | translate }}</p>\n            </ion-label>\n          </ion-list-header>\n          <ul class=\"variablesList\">\n            @for (v of variables; track v) {\n              <li>\n                <small>{{ v.code }}</small> {{ getVariableDescription(v) }}\n              </li>\n            }\n          </ul>\n        </ion-list>\n      }\n      @if (!disabled) {\n        <p class=\"explanation\">\n          @if (obligatory) {\n            <span>{{ 'IDEA_COMMON.LABELER.EXPLANATION_OBLIGATORY' | translate }}</span>\n          }\n          {{ 'IDEA_COMMON.LABELER.EXPLANATION' | translate }}\n        </p>\n      }\n      @if (_label) {\n        <ion-list class=\"aList\" [class.viewMode]=\"disabled\">\n          @for (l of languages.available; track l) {\n            <ion-item lines=\"inset\" [class.fieldHasError]=\"hasFieldAnError(l)\">\n              <ion-thumbnail slot=\"start\"><img [src]=\"getFlagURL(l)\" /></ion-thumbnail>\n              <ion-label position=\"stacked\">\n                {{ l }}\n                @if (l === languages.default) {\n                  <ion-text>- {{ 'COMMON.DEFAULT' | translate }}</ion-text>\n                }\n              </ion-label>\n              @if (!textarea) {\n                <ion-input type=\"text\" [(ngModel)]=\"_label[l]\" [disabled]=\"disabled\" />\n              }\n              @if (textarea) {\n                <ion-textarea [(ngModel)]=\"_label[l]\" [disabled]=\"disabled\" [rows]=\"3\" [autoGrow]=\"true\" />\n              }\n            </ion-item>\n          }\n        </ion-list>\n      }\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-list.aList {\n        border-radius: 5px;\n        ion-item {\n          --border-color: var(--ion-color-light);\n          ion-thumbnail {\n            width: 20px;\n            height: 20px;\n            margin-top: 16px;\n            margin-right: 20px;\n            img {\n              border-radius: 8px;\n            }\n          }\n          ion-textarea {\n            --padding-top: 2px;\n            --padding-bottom: 16px;\n          }\n        }\n      }\n      ion-list.aList:first-of-type {\n        ion-list-header {\n          margin-top: 0;\n        }\n      }\n      p.explanation {\n        margin: 15px 12px 20px 12px;\n        font-size: 0.9em;\n        color: var(--ion-color-dark-tint);\n      }\n      .variablesList {\n        margin: 0;\n        li {\n          padding: 3px;\n          color: var(--ion-color-dark);\n          font-size: 0.9em;\n        }\n      }\n    `\n  ]\n})\nexport class IDEALabelerComponent {\n  private _platform = inject(Platform);\n  private _modal = inject(ModalController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The detail to highlight.\n   */\n  @Input() label: Label;\n  /**\n   * The languages preferences; if not set, it fallbacks to IDEATranslationsService's ones.\n   */\n  @Input() languages: Languages;\n  /**\n   * The optional title for the component.\n   */\n  @Input() title: string;\n  /**\n   * Whether to display the label in textareas instead of text fields.\n   */\n  @Input() textarea: boolean;\n  /**\n   * Whether the label supports markdown.\n   */\n  @Input() markdown: boolean;\n  /**\n   * The variables the user can use for the label content.\n   */\n  @Input() variables: (StringVariable | LabelVariable)[];\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, the label is validated on save.\n   */\n  @Input() obligatory: boolean;\n\n  _label: Label;\n  errors = new Set<string>();\n\n  ionViewDidEnter(): void {\n    this.title = this.title || this._translate._('IDEA_COMMON.LABELER.MANAGE_LABEL');\n    this.languages = this.languages || this._translate.languages();\n    this._label = new Label(this.label, this.languages);\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  getFlagURL(lang: string): string {\n    return `assets/flags/${lang}.png`;\n  }\n\n  getVariableDescription(v: StringVariable | LabelVariable): string {\n    const isLabel = Boolean((v as any).label);\n    if (isLabel) {\n      v = v as LabelVariable;\n      return v.label.translate(this.languages.default, this.languages);\n    } else {\n      v = v as StringVariable;\n      return v.description;\n    }\n  }\n\n  save(): Promise<void> {\n    if (this.obligatory) {\n      this.errors = new Set(this._label.validate(this.languages));\n      if (this.errors.size) return this._message.error('IDEA_COMMON.LABELER.FILL_IN_DEFAULT_LANGUAGE');\n    }\n    this.label.load(this._label, this.languages);\n    this._modal.dismiss(true);\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n\n  isLargeScreen(): boolean {\n    return this._platform.width() > 500;\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\n\nimport { IDEATranslationsService } from './translations.service';\n\n/**\n * Handle labels with the languages loaded from IDEA's translation service.\n */\n@Pipe({ name: 'label', pure: false, standalone: true })\nexport class IDEALocalizedLabelPipe implements PipeTransform {\n  private _translate = inject(IDEATranslationsService);\n\n  transform(label: any): any {\n    if (!label) return null;\n    return this._translate._label(label);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonList,\n  IonTitle,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonInput,\n  IonText\n} from '@ionic/angular/standalone';\nimport { AttachmentSection, Label } from 'idea-toolbox';\n\nimport { IDEALabelerComponent } from '../labeler/labeler.component';\nimport { IDEAAttachmentsComponent } from './attachments.component';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Component({\n  selector: 'idea-manage-attachments-section',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEAAttachmentsComponent,\n    IonText,\n    IonInput,\n    IonItem,\n    IonLabel,\n    IonListHeader,\n    IonList,\n    IonContent,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonTitle\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" icon=\"close\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ 'IDEA_COMMON.ATTACHMENTS.MANAGE_SECTION' | translate }}</ion-title>\n        <ion-buttons slot=\"end\">\n          <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n            <ion-icon slot=\"icon-only\" icon=\"checkmark-circle\" />\n          </ion-button>\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content class=\"editMode\">\n      <ion-list class=\"aList\">\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('name')\">\n          <ion-input\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [value]=\"_section.name | label\"\n            [placeholder]=\"'IDEA_COMMON.ATTACHMENTS.SECTION_NAME_P' | translate\"\n          >\n            <div slot=\"label\">\n              {{ 'IDEA_COMMON.ATTACHMENTS.SECTION_NAME' | translate }} <ion-text class=\"obligatoryDot\" />\n            </div>\n          </ion-input>\n          <ion-button\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'COMMON.EDIT' | translate\"\n            (click)=\"editName()\"\n          >\n            <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n          </ion-button>\n        </ion-item>\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('description')\">\n          <ion-input\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_COMMON.ATTACHMENTS.SECTION_DESCRIPTION' | translate\"\n            [value]=\"_section.description | label\"\n            [placeholder]=\"'IDEA_COMMON.ATTACHMENTS.SECTION_DESCRIPTION_P' | translate\"\n          />\n          <ion-button\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'COMMON.EDIT' | translate\"\n            (click)=\"editDescription()\"\n          >\n            <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n          </ion-button>\n        </ion-item>\n        <ion-list-header>\n          <ion-label>\n            <h3>{{ 'IDEA_COMMON.ATTACHMENTS.ATTACHMENTS' | translate }}</h3>\n          </ion-label>\n        </ion-list-header>\n        <idea-attachments\n          [entityPath]=\"entityPath\"\n          [attachments]=\"_section.attachments\"\n          [acceptedFormats]=\"acceptedFormats\"\n          [multiple]=\"multiple\"\n          [color]=\"color\"\n          [disabled]=\"false\"\n          (download)=\"downloadCallback($event)\"\n        />\n      </ion-list>\n    </ion-content>\n  `\n})\nexport class IDEAManageAttachmentsSectionComponent implements OnInit {\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The attachments section to manage.\n   */\n  @Input() section: AttachmentSection;\n  /**\n   * The API path to the entity for which we want to manage the attachments.\n   */\n  @Input() entityPath: string | string[];\n  /**\n   * The list of accepted formats.\n   */\n  @Input() acceptedFormats = ['image/*', '.pdf', '.doc', '.docx', '.xls', '.xlsx'];\n  /**\n   * Whether to accept multiple files as target for the browse function.\n   */\n  @Input() multiple = true;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n  /**\n   * The background color of the component.\n   */\n  @Input() color: string;\n  /**\n   * Trigger a callback in the parent component to download a file by URL.\n   */\n  @Input() downloadCallback: (url: string) => void;\n\n  _section: AttachmentSection;\n  errors = new Set<string>();\n\n  ngOnInit(): void {\n    this._section = new AttachmentSection(this.section, this._translate.languages());\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  async editName(): Promise<void> {\n    await this.editLabel(this._translate._('IDEA_COMMON.ATTACHMENTS.SECTION_NAME'), this._section.name, true);\n  }\n  async editDescription(): Promise<void> {\n    await this.editLabel(this._translate._('IDEA_COMMON.ATTACHMENTS.SECTION_DESCRIPTION'), this._section.description);\n  }\n  private async editLabel(title: string, label: Label, obligatory = false): Promise<void> {\n    const componentProps = { title, label, obligatory };\n    const modal = await this._modal.create({ component: IDEALabelerComponent, componentProps });\n    modal.present();\n  }\n\n  save(): void {\n    this.section.load(this._section, this._translate.languages());\n    this.close();\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport {\n  ModalController,\n  AlertController,\n  IonReorderGroup,\n  IonItem,\n  IonLabel,\n  IonReorder,\n  IonButton,\n  IonIcon,\n  IonAccordionGroup,\n  IonAccordion\n} from '@ionic/angular/standalone';\nimport { AttachmentSection, AttachmentSections, Label } from 'idea-toolbox';\n\nimport { IDEAManageAttachmentsSectionComponent } from './manageAttachmentsSection.component';\nimport { IDEAAttachmentsComponent } from './attachments.component';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Component({\n  selector: 'idea-attachment-sections',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEAAttachmentsComponent,\n    IonIcon,\n    IonButton,\n    IonReorder,\n    IonLabel,\n    IonItem,\n    IonReorderGroup,\n    IonAccordionGroup,\n    IonAccordion\n  ],\n  template: `\n    @if (!attachmentSections.sectionsLegend.length) {\n      <ion-item lines=\"none\" [color]=\"color\">\n        <ion-label>\n          <i>{{ 'IDEA_COMMON.ATTACHMENTS.NO_ELEMENTS' | translate }}</i>\n        </ion-label>\n      </ion-item>\n    }\n    <ion-accordion-group>\n      <ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderSectionsLegend($event)\">\n        @for (sectionKey of attachmentSections.sectionsLegend; track sectionKey) {\n          @if (disabled) {\n            <ion-accordion>\n              <ion-item\n                slot=\"header\"\n                [button]=\"!disabled\"\n                [detail]=\"!disabled\"\n                [lines]=\"lines\"\n                [color]=\"color\"\n                (click)=\"manageSection(sectionKey)\"\n              >\n                <ion-label>\n                  {{ attachmentSections.sections[sectionKey].name | label }}\n                  <p>{{ attachmentSections.sections[sectionKey].description | label }}</p>\n                </ion-label>\n              </ion-item>\n              <div\n                slot=\"content\"\n                class=\"ion-padding-start ion-padding-end\"\n                [style.background-color]=\"'var(--ion-color-' + color + ')'\"\n              >\n                <idea-attachments\n                  [disabled]=\"true\"\n                  [entityPath]=\"entityPath\"\n                  [attachments]=\"attachmentSections.sections[sectionKey].attachments\"\n                  [acceptedFormats]=\"acceptedFormats\"\n                  [multiple]=\"multiple\"\n                  [color]=\"color\"\n                  (download)=\"download.emit($event)\"\n                />\n              </div>\n            </ion-accordion>\n          } @else {\n            <ion-item\n              slot=\"header\"\n              [button]=\"!disabled\"\n              [detail]=\"!disabled\"\n              [lines]=\"lines\"\n              [color]=\"color\"\n              (click)=\"manageSection(sectionKey)\"\n            >\n              <ion-reorder slot=\"start\" />\n              <ion-label>\n                {{ attachmentSections.sections[sectionKey].name | label }}\n                <p>{{ attachmentSections.sections[sectionKey].description | label }}</p>\n              </ion-label>\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"danger\"\n                [title]=\"'COMMON.REMOVE' | translate\"\n                (click)=\"removeSection(sectionKey, $event)\"\n              >\n                <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n              </ion-button>\n            </ion-item>\n          }\n        }\n      </ion-reorder-group>\n    </ion-accordion-group>\n    @if (!disabled) {\n      <div class=\"ion-padding ion-text-center\">\n        <ion-button size=\"small\" color=\"primary\" (click)=\"addNewSection()\">\n          {{ 'IDEA_COMMON.ATTACHMENTS.ADD_SECTION' | translate }}\n        </ion-button>\n      </div>\n    }\n  `\n})\nexport class IDEAAttachmentSectionsComponent {\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The attachment sections to display and manage.\n   */\n  @Input() attachmentSections: AttachmentSections;\n  /**\n   * The API path to the entity for which we want to manage the attachments.\n   */\n  @Input() entityPath: string | string[];\n  /**\n   * The list of accepted formats.\n   */\n  @Input() acceptedFormats = ['image/*', '.pdf', '.doc', '.docx', '.xls', '.xlsx'];\n  /**\n   * Whether to accept multiple files as target for the browse function.\n   */\n  @Input() multiple = false;\n  /**\n   * Whether the component is disabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n  /**\n   * The background color of the component.\n   */\n  @Input() color: string;\n  /**\n   * Trigger to download a file by URL.\n   */\n  @Output() download = new EventEmitter<string>();\n\n  reorderSectionsLegend(ev: any): void {\n    this.attachmentSections.sectionsLegend = ev.detail.complete(this.attachmentSections.sectionsLegend);\n  }\n\n  async manageSection(s: string): Promise<void> {\n    if (this.disabled) return;\n    const componentProps = {\n      section: this.attachmentSections.sections[s],\n      entityPath: this.entityPath,\n      disabled: this.disabled,\n      lines: this.lines,\n      downloadCallback: (url: string): void => this.download.emit(url)\n    };\n    const modal = await this._modal.create({ component: IDEAManageAttachmentsSectionComponent, componentProps });\n    modal.present();\n  }\n\n  async removeSection(sectionKey: string, event: Event): Promise<void> {\n    if (event) event.stopPropagation();\n    let header: string, subHeader: string, buttons: any[];\n    if (this.attachmentSections.sections[sectionKey].attachments.length) {\n      header = this._translate._('COMMON.REMOVE');\n      subHeader = this._translate._('IDEA_COMMON.ATTACHMENTS.DELETE_EMPTY_SECTION');\n      buttons = [this._translate._('COMMON.GOT_IT')];\n    } else {\n      const doRemoveSection = (): void => {\n        this.attachmentSections.sectionsLegend.splice(this.attachmentSections.sectionsLegend.indexOf(sectionKey), 1);\n        delete this.attachmentSections.sections[sectionKey];\n      };\n      header = this._translate._('COMMON.REMOVE');\n      subHeader = this._translate._('COMMON.ARE_YOU_SURE');\n      buttons = [\n        { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n        { text: this._translate._('COMMON.CONFIRM'), role: 'destructive', handler: doRemoveSection }\n      ];\n    }\n    const alert = await this._alert.create({ header, subHeader, buttons });\n    alert.present();\n  }\n\n  async addNewSection(): Promise<void> {\n    const doAddNewSection = (data: any): Promise<void> => {\n      if (!data.name) return;\n      const name = data ? data.name.trim() : null;\n      if (!name) return;\n      const key = name.replace(/[^\\w]/g, ''); // clean the key to avoid weird chars in the JSON\n      if (!key.trim()) return;\n\n      if (this.attachmentSections.sectionsLegend.some(x => x === key))\n        return this._message.error('IDEA_COMMON.ATTACHMENTS.DUPLICATED_KEY');\n\n      const section = new AttachmentSection(null, this._translate.languages());\n      section.name = new Label(null, this._translate.languages());\n      section.name[this._translate.getDefaultLang()] = name;\n\n      this.attachmentSections.sections[key] = section;\n      this.attachmentSections.sectionsLegend.push(key);\n\n      this.manageSection(key);\n    };\n\n    const header = this._translate._('IDEA_COMMON.ATTACHMENTS.ADD_SECTION');\n    const message = this._translate._('IDEA_COMMON.ATTACHMENTS.ADD_SECTION_HINT');\n    const inputs: any = [{ name: 'name', type: 'text' }];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doAddNewSection }\n    ];\n\n    const alert = await this._alert.create({ header, message, inputs, buttons });\n    alert.present();\n  }\n}\n","import { Injectable, PipeTransform, Pipe } from '@angular/core';\n\n/**\n * Bolds the beggining of the matching string in the item.\n */\n@Pipe({ name: 'boldprefix', standalone: true })\n@Injectable()\nexport class IDEABoldPrefix implements PipeTransform {\n  transform(value: string, keyword: string): any {\n    if (!keyword) return value;\n    const escapedKeyword = keyword.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    return value.replace(new RegExp(escapedKeyword, 'gi'), str => str.bold());\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport {\n  IonInfiniteScroll,\n  ModalController,\n  IonSearchbar,\n  Platform,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonContent,\n  IonList,\n  IonInfiniteScrollContent,\n  IonText,\n  IonButton,\n  IonIcon,\n  IonItem,\n  IonLabel,\n  IonBadge\n} from '@ionic/angular/standalone';\nimport { Suggestion } from 'idea-toolbox';\n\nimport { IDEAStorageService } from '../storage.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEABoldPrefix } from '../boldPrefix.pipe';\n\nconst SHOULD_HIDE_DETAILS_STORAGE_KEY = 'ideaSelectShouldHideDetails';\n\nconst MAX_PAGE_SIZE = 24;\n\n@Component({\n  selector: 'idea-suggestions',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IonBadge,\n    IonLabel,\n    IonItem,\n    IonIcon,\n    IonButton,\n    IonText,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonList,\n    IonContent,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonSearchbar,\n    IDEATranslatePipe,\n    IDEABoldPrefix\n  ],\n  templateUrl: 'suggestions.component.html',\n  styleUrls: ['suggestions.component.scss']\n})\nexport class IDEASuggestionsComponent implements OnInit {\n  private _platform = inject(Platform);\n  private _modal = inject(ModalController);\n  private _storage = inject(IDEAStorageService);\n\n  /**\n   * The suggestions to show.\n   */\n  @Input() data: Suggestion[] = [];\n  /**\n   * If true, sort the suggestions alphabetically.\n   */\n  @Input() sortData: boolean;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * Text to show when there isn't a result.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * If true, allows to select a new custom value (outside the suggestions).\n   */\n  @Input() allowUnlistedValues: boolean;\n  /**\n   * If `allowUnlistedValues` is set, show this to help users understanding what happens by selecting the unlisted val.\n   */\n  @Input() allowUnlistedValuesPrefix: string;\n  /**\n   * If true, doesn't show the id in the UI.\n   */\n  @Input() hideIdFromUI: boolean;\n  /**\n   * If true, doesn't show the clear button in the header.\n   */\n  @Input() hideClearButton: boolean;\n  /**\n   * If true, the user doesn't have the option to cancel the selection: an option must be chosen.\n   */\n  @Input() mustChoose: boolean;\n  /**\n   * A pre-filter for the category1.\n   */\n  @Input() category1: string;\n  /**\n   * A pre-filter for the category2.\n   */\n  @Input() category2: string;\n  /**\n   * Whether tho show the categories filters.\n   */\n  @Input() showCategoriesFilters: boolean;\n  /**\n   * An arbitrary number of elements to show in each page; suggested: a multiple of 2, 3 and 4 (good for any UI size).\n   */\n  @Input() numPerPage: number;\n\n  suggestions: Suggestion[] = [];\n  currentPage: number;\n  activeCategories1: Set<string>;\n  activeCategories2: Set<string>;\n  @ViewChild(IonSearchbar) searchbar: IonSearchbar;\n  shouldShowDetails: boolean;\n  detailsAreAvailable: boolean;\n\n  async ngOnInit(): Promise<void> {\n    if (this.sortData)\n      this.data = this.data.sort((a, b): number =>\n        a.name && b.name ? a.name.localeCompare(b.name) : String(a.value).localeCompare(String(b.value))\n      );\n\n    this.loadActiveCategories();\n    this.detailsAreAvailable = this.data.some(\n      x => (x.name && !this.hideIdFromUI) || x.category1 || x.category2 || x.description\n    );\n\n    if (!this.detailsAreAvailable) this.shouldShowDetails = false;\n    else {\n      try {\n        this.shouldShowDetails = !(await this._storage.get(SHOULD_HIDE_DETAILS_STORAGE_KEY));\n      } catch (error) {\n        this.shouldShowDetails = false;\n      }\n    }\n    this.search();\n  }\n  ionViewDidEnter(): void {\n    if (this._platform.is('desktop')) this.searchbar.setFocus();\n  }\n\n  private loadActiveCategories(): void {\n    this.activeCategories1 = new Set<string>();\n    this.activeCategories2 = new Set<string>();\n    this.data.forEach(a => {\n      if (a.category1) this.activeCategories1.add(a.category1);\n      if (a.category2) this.activeCategories2.add(a.category2);\n    });\n  }\n  private mapIntoSuggestions(set: Set<string>): Suggestion[] {\n    return Array.from(set)\n      .sort()\n      .map(x => new Suggestion({ value: x }));\n  }\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.suggestions = (this.data || [])\n      .filter(x => !this.category1 || x.category1 === this.category1)\n      .filter(x => !this.category2 || x.category2 === this.category2)\n      .filter(x =>\n        toSearch\n          .split(' ')\n          .every(searchTerm =>\n            [String(x.value), x.name, x.description, x.category1, x.category2]\n              .filter(f => f)\n              .some(f => f.toLowerCase().includes(searchTerm))\n          )\n      );\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.suggestions = this.suggestions.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n\n  async setFilterCategoryN(whichCategory: number): Promise<void> {\n    const categories = whichCategory === 2 ? this.activeCategories2 : this.activeCategories1;\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: { data: this.mapIntoSuggestions(categories) }\n    });\n    modal.onDidDismiss().then(({ data }): void => {\n      if (data) {\n        if (whichCategory === 2) this.category2 = data.value;\n        else this.category1 = data.value;\n        this.search(this.searchbar ? this.searchbar.value : null);\n      }\n    });\n    modal.present();\n  }\n  resetFilterCategoryN(whichCategory: number): void {\n    if (whichCategory === 2) this.category2 = null;\n    else this.category1 = null;\n    this.search(this.searchbar ? this.searchbar.value : null);\n  }\n\n  /**\n   * Close the component propagating the choice:\n   *    - selection === undefined -> cancel\n   *    - selection === null -> clear\n   *    - otherwise, a suggestion was selected\n   */\n  select(selection?: Suggestion | any): void {\n    this._modal.dismiss(selection);\n  }\n\n  @HostListener('window:keydown', ['$event'])\n  navigateComponent(event: KeyboardEvent): void {\n    let suggestionsList: any;\n    if (document.getElementsByClassName('suggestionsList').length)\n      suggestionsList = document.getElementsByClassName('suggestionsList')[0];\n\n    switch (event.key) {\n      case 'Enter':\n        event.preventDefault();\n        // quick confirm of the selection, based on what is on in the component\n        if (suggestionsList && suggestionsList.getElementsByClassName('selected').length) {\n          if (suggestionsList.getElementsByClassName('selected')[0].getElementsByClassName('key').length)\n            this.select(\n              this.data.find(\n                x =>\n                  String(x.value) ===\n                  suggestionsList\n                    .getElementsByClassName('selected')[0]\n                    .getElementsByClassName('key')[0]\n                    .innerHTML.trim()\n              )\n            ); // selected || loose value\n        } else if (this.suggestions.length === 0) this.select();\n        // cancel\n        else this.select(this.suggestions[0]); // first element\n        break;\n      case 'ArrowUp':\n      case 'ArrowDown':\n        if (!suggestionsList) return;\n        // identify the currently selected suggestion or select the first one\n        let selected = null,\n          elements = suggestionsList.getElementsByClassName('selected');\n        if (elements.length) {\n          // a suggestion was already selected: go to the next/previous one\n          selected = elements[0];\n          if (selected) {\n            selected.classList.remove('selected');\n            if (event.key === 'ArrowDown') selected = selected.nextElementSibling;\n            else selected = selected.previousElementSibling;\n          }\n        } else {\n          // no suggestions selected yet: select the first one\n          elements = suggestionsList.getElementsByClassName('suggestion');\n          if (elements.length) selected = elements[0];\n        }\n        // execute the selection\n        if (selected) selected.classList.add('selected');\n        break;\n    }\n  }\n\n  toggleDetailsVisibilityPreference(): void {\n    if (!this.detailsAreAvailable) return;\n    this.shouldShowDetails = !this.shouldShowDetails;\n    this._storage.set(SHOULD_HIDE_DETAILS_STORAGE_KEY, !this.shouldShowDetails);\n  }\n}\n","<ion-header>\n  <ion-toolbar color=\"ideaToolbar\">\n    <ion-buttons slot=\"start\">\n      @if (!mustChoose) {\n        <ion-button [title]=\"'IDEA_COMMON.SELECT.CLOSE_WITHOUT_SELECTING' | translate\" (click)=\"select()\">\n          <ion-icon slot=\"icon-only\" icon=\"chevron-down\" />\n        </ion-button>\n      }\n    </ion-buttons>\n    <ion-searchbar\n      #searchbar\n      [placeholder]=\"searchPlaceholder || ('IDEA_COMMON.SELECT.SEARCH' | translate)\"\n      [debounce]=\"100\"\n      [class.withAdditionalToolbar]=\"showCategoriesFilters || detailsAreAvailable\"\n      (ionInput)=\"search($event.target.value)\"\n    />\n    @if (!hideClearButton) {\n      <ion-buttons slot=\"end\">\n        <ion-button [title]=\"'IDEA_COMMON.SELECT.CLEAR_SELECTION' | translate\" (click)=\"select({ value: '' })\">\n          <ion-icon slot=\"icon-only\" icon=\"backspace\" />\n        </ion-button>\n      </ion-buttons>\n    }\n    @if (showCategoriesFilters || detailsAreAvailable) {\n      <div class=\"additionalToolbar\">\n        @if (detailsAreAvailable) {\n          <ion-button color=\"light\" size=\"small\" (click)=\"toggleDetailsVisibilityPreference()\">\n            <ion-icon [icon]=\"shouldShowDetails ? 'eye-off' : 'eye'\" slot=\"start\" />\n            {{\n              (shouldShowDetails ? 'IDEA_COMMON.SELECT.HIDE_DETAILS' : 'IDEA_COMMON.SELECT.SHOW_DETAILS') | translate\n            }}\n          </ion-button>\n        }\n        @if (activeCategories1?.size) {\n          <ion-button\n            color=\"light\"\n            size=\"small\"\n            [class.strong]=\"category1\"\n            (click)=\"category1 ? resetFilterCategoryN(1) : setFilterCategoryN(1)\"\n          >\n            <ion-icon [icon]=\"category1 ? 'close' : 'filter'\" slot=\"start\" />\n            {{ category1 || ('IDEA_COMMON.SELECT.TAP_TO_FILTER' | translate) }}\n          </ion-button>\n        }\n        @if (activeCategories2?.size) {\n          <ion-button\n            color=\"light\"\n            size=\"small\"\n            [class.strong]=\"category2\"\n            (click)=\"category2 ? resetFilterCategoryN(2) : setFilterCategoryN(2)\"\n          >\n            <ion-icon [icon]=\"category2 ? 'close' : 'filter'\" slot=\"start\" />\n            {{ category2 || ('IDEA_COMMON.SELECT.TAP_TO_FILTER' | translate) }}\n          </ion-button>\n        }\n      </div>\n    }\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <ion-list class=\"suggestionsList\">\n    @if (!suggestions.length && !(allowUnlistedValues && searchbar.value)) {\n      <ion-item lines=\"none\">\n        <ion-label>\n          <i>\n            {{\n              noElementsFoundText ||\n                ((allowUnlistedValues\n                  ? 'IDEA_COMMON.SELECT.NO_ELEMENTS_FOUND_START_TYPING_TO_ADD_ONE'\n                  : 'IDEA_COMMON.SELECT.NO_ELEMENTS_FOUND'\n                ) | translate)\n            }}\n          </i>\n        </ion-label>\n      </ion-item>\n    }\n    @if (allowUnlistedValues && searchbar.value) {\n      <ion-item\n        class=\"suggestion\"\n        [button]=\"true\"\n        [title]=\"'IDEA_COMMON.SELECT.SELECT_' | translate: { suggestion: searchbar.value }\"\n        (click)=\"select({ value: searchbar.value })\"\n      >\n        @if (allowUnlistedValuesPrefix) {\n          <ion-badge slot=\"start\">{{ allowUnlistedValuesPrefix }}</ion-badge>\n        }\n        <!-- the \"key\" class is used for keyboard controls -->\n        <i class=\"key\">\n          {{ searchbar.value }}\n        </i>\n      </ion-item>\n    }\n    @for (suggestion of suggestions; track suggestion) {\n      <ion-item\n        class=\"suggestion\"\n        button\n        [title]=\"'IDEA_COMMON.SELECT.SELECT_' | translate: { suggestion: suggestion.name || suggestion.value }\"\n        (click)=\"select(suggestion)\"\n      >\n        <ion-label>\n          @if (shouldShowDetails && (suggestion.category1 || suggestion.category2)) {\n            <p class=\"categories\">\n              @if (suggestion.category1) {\n                <ion-text [innerHTML]=\"suggestion.category1 | boldprefix: searchbar.value\" />\n              }\n              @if (suggestion.category1 && suggestion.category2) {\n                <ion-text class=\"categoriesDivider\"> | </ion-text>\n              }\n              @if (suggestion.category2) {\n                <ion-text [innerHTML]=\"suggestion.category2 | boldprefix: searchbar.value\" />\n              }\n            </p>\n          }\n          <!-- the \"key\" div is used for keyboard controls -->\n          <div class=\"key\" style=\"display: none\">\n            {{ suggestion.value }}\n          </div>\n          <ion-text [innerHTML]=\"suggestion.name || suggestion.value | boldprefix: searchbar.value\" />\n          <ion-text color=\"medium\" class=\"ion-text-wrap\">\n            @if (suggestion.name && !hideIdFromUI && shouldShowDetails) {\n              <p [innerHTML]=\"suggestion.value | boldprefix: searchbar.value\"></p>\n            }\n            @if (suggestion.description && shouldShowDetails) {\n              <p\n                class=\"description\"\n                [innerHTML]=\"suggestion.description | boldprefix: searchbar.value\"\n                [class.marginTop]=\"suggestion.name && !hideIdFromUI && shouldShowDetails\"\n              ></p>\n            }\n          </ion-text>\n        </ion-label>\n      </ion-item>\n    }\n  </ion-list>\n  <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n    <ion-infinite-scroll-content />\n  </ion-infinite-scroll>\n</ion-content>\n","import { Component, OnInit, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonAvatar, IonImg } from '@ionic/angular/standalone';\nimport { COLORS } from 'idea-toolbox';\n\n@Component({\n  selector: 'idea-user-avatar',\n  standalone: true,\n  imports: [CommonModule, IonAvatar, IonImg],\n  template: `\n    <div class=\"container\">\n      @if (src) {\n        <ion-avatar style=\"height: var(--avatar-size); width: var(--avatar-size)\" [ngClass]=\"size\" [title]=\"name\">\n          <ion-img [src]=\"src\" (ionError)=\"fallbackToInitials()\" />\n        </ion-avatar>\n      }\n      @if (!src) {\n        <div\n          class=\"circle\"\n          style=\"height: var(--avatar-size); width: var(--avatar-size)\"\n          [ngClass]=\"size\"\n          [title]=\"name\"\n          [style.background]=\"'#' + color\"\n        >\n          <div\n            class=\"text\"\n            style=\"line-height: var(--avatar-size); font-size: var(--avatar-font-size)\"\n            [style.color]=\"'#' + fontColor\"\n          >\n            {{ initials }}\n          </div>\n        </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      div.container {\n        text-align: center;\n        padding: var(--avatar-container-padding, 0);\n        margin: var(--avatar-container-margin, 0);\n      }\n      ion-avatar,\n      div.circle {\n        border: 0.5px solid var(--ion-color-dark-tint);\n        margin: 0 auto;\n      }\n      div.circle {\n        border-radius: 50%;\n        display: inline-block;\n        text-align: center;\n        vertical-align: top;\n        div.text {\n          font-weight: bold;\n          letter-spacing: -0.5px;\n        }\n      }\n      .mini {\n        --avatar-size: 14px;\n        --avatar-font-size: 8px;\n      }\n      .small {\n        --avatar-size: 24px;\n        --avatar-font-size: 9px;\n      }\n      .default {\n        --avatar-size: 40px;\n        --avatar-font-size: 16px;\n      }\n      .large {\n        --avatar-size: 80px;\n        --avatar-font-size: 32px;\n      }\n      .extraLarge {\n        --avatar-size: 120px;\n        --avatar-font-size: 52px;\n      }\n    `\n  ]\n})\nexport class IDEAUserAvatarComponent implements OnInit {\n  /**\n   * The link to the avatar media to show.\n   */\n  @Input() src?: string;\n  /**\n   * The full name of the user (to use as fallback in case the media isn't available).\n   */\n  @Input() name = '?';\n  /**\n   * The size of the avatar.\n   */\n  @Input() size: 'mini' | 'small' | 'default' | 'large' | 'extraLarge' = 'default';\n  /**\n   * The HEX color of the avatar's background.\n   */\n  @Input() color?: string;\n\n  initials: string;\n  fontColor: string;\n  borderColor: string;\n\n  ngOnInit(): void {\n    this.setInitialsFromName();\n    if (!this.color) this.color = getHexColorFromString(this.name);\n    if (this.color.charAt(0) === '#') this.color = this.color.slice(1);\n    this.setFontColorBasedOnBackground();\n  }\n\n  private setInitialsFromName(): void {\n    if (!this.name) this.initials = '?';\n    else {\n      const initials = this.name\n        .split(' ')\n        .reduce((initials, name): string => initials + name.charAt(0), '')\n        .toUpperCase();\n\n      this.initials =\n        initials.length > 1 && this.size !== 'mini'\n          ? initials.charAt(0).concat(initials.charAt(initials.length - 1))\n          : initials.charAt(0);\n    }\n  }\n  fallbackToInitials(): void {\n    this.src = undefined;\n  }\n\n  setFontColorBasedOnBackground(): void {\n    this.fontColor = getBlackWhiteInvertedHexColor(this.color);\n  }\n}\n\n//\n// HELPERS\n//\n\nconst getHexColorFromString = (str: string): string => {\n  return COLORS[getNumericHashFromString(str) % COLORS.length].hex;\n};\n\nconst getNumericHashFromString = (str: string): number => {\n  let hash = 0;\n  if (str.length == 0) return hash;\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash = hash & hash; // convert to 32bit integer\n  }\n  return Math.abs(hash);\n};\n\nconst getBlackWhiteInvertedHexColor = (hexColor: string): string =>\n  getLumeOfHexColor(hexColor) >= 165 ? '000' : 'fff';\n\nconst getLumeOfHexColor = (hexColor: string): number => {\n  const rgb = hexColorToRGBArray(hexColor);\n  return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]; // SMPTE C, Rec. 709 weightings\n};\n\nconst hexColorToRGBArray = (hexColor: string): number[] => {\n  try {\n    if (hexColor.length === 3)\n      hexColor =\n        hexColor.charAt(0) +\n        hexColor.charAt(0) +\n        hexColor.charAt(1) +\n        hexColor.charAt(1) +\n        hexColor.charAt(2) +\n        hexColor.charAt(2);\n    else if (hexColor.length !== 6) throw 'Invalid hex color: ' + hexColor;\n    const rgb = [];\n    for (let i = 0; i <= 2; i++) rgb[i] = parseInt(hexColor.substr(i * 2, 2), 16);\n    return rgb;\n  } catch (error) {\n    return [255, 255, 255];\n  }\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  IonInfiniteScroll,\n  IonSearchbar,\n  ModalController,\n  IonHeader,\n  IonContent,\n  IonList,\n  IonInfiniteScrollContent,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonTitle,\n  IonItem,\n  IonLabel,\n  IonAvatar,\n  IonCheckbox\n} from '@ionic/angular/standalone';\nimport { Check, Suggestion } from 'idea-toolbox';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEASuggestionsComponent } from '../select/suggestions.component';\nimport { IDEAUserAvatarComponent } from '../userAvatar/userAvatar.component';\n\nconst MAX_PAGE_SIZE = 24;\n\n@Component({\n  selector: 'idea-checks',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEAUserAvatarComponent,\n    IonTitle,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonSearchbar,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonList,\n    IonContent,\n    IonHeader,\n    IonItem,\n    IonLabel,\n    IonAvatar,\n    IonCheckbox\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'IDEA_COMMON.CHECKER.CLOSE_WITHOUT_SELECTING' | translate\" (click)=\"cancel()\">\n            <ion-icon slot=\"icon-only\" name=\"chevron-down\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          #searchbar\n          [debounce]=\"100\"\n          [placeholder]=\"searchPlaceholder || ('IDEA_COMMON.CHECKER.SEARCH' | translate)\"\n          (ionInput)=\"search($event.target.value)\"\n        />\n        <ion-buttons slot=\"end\">\n          <ion-button [title]=\"'IDEA_COMMON.CHECKER.CONFIRM_SELECTION' | translate\" (click)=\"confirm()\">\n            {{ 'IDEA_COMMON.CHECKER.DONE' | translate }}\n          </ion-button>\n        </ion-buttons>\n      </ion-toolbar>\n      <ion-toolbar color=\"ideaToolbar\" class=\"secondary\">\n        <ion-title>\n          {{ previewTextKey | translate: { num: getNumChecked() } }}\n          @if (limitSelectionToNum) {\n            <span>\n              {{ 'IDEA_COMMON.CHECKER.LIMIT_OF_NUM' | translate: { num: limitSelectionToNum } }}\n            </span>\n          }\n        </ion-title>\n        @if (!limitSelectionToNum && allowSelectDeselectAll) {\n          <ion-buttons slot=\"end\">\n            <ion-button [title]=\"'IDEA_COMMON.CHECKER.DESELECT_ALL' | translate\" (click)=\"checkAll(false)\">\n              <ion-icon slot=\"icon-only\" name=\"square-outline\" />\n            </ion-button>\n            <ion-button [title]=\"'IDEA_COMMON.CHECKER.SELECT_ALL' | translate\" (click)=\"checkAll(true)\">\n              <ion-icon slot=\"icon-only\" name=\"checkbox-outline\" />\n            </ion-button>\n          </ion-buttons>\n        }\n        @if (limitSelectionToNum || !allowSelectDeselectAll) {\n          <ion-buttons slot=\"end\">\n            <ion-button [title]=\"'IDEA_COMMON.CHECKER.RESET' | translate\" (click)=\"checkAll(false)\">\n              {{ 'IDEA_COMMON.CHECKER.RESET' | translate }}\n            </ion-button>\n          </ion-buttons>\n        }\n      </ion-toolbar>\n      @if (showCategoriesFilters) {\n        <ion-toolbar color=\"ideaToolbar\" class=\"secondary\">\n          <div class=\"additionalToolbar\">\n            @if (activeCategories1?.size) {\n              <ion-button\n                color=\"light\"\n                size=\"small\"\n                [class.strong]=\"category1\"\n                (click)=\"category1 ? resetFilterCategoryN(1) : setFilterCategoryN(1)\"\n              >\n                <ion-icon [icon]=\"category1 ? 'close' : 'filter'\" slot=\"start\" />\n                {{ category1 || ('IDEA_COMMON.SELECT.TAP_TO_FILTER' | translate) }}\n              </ion-button>\n            }\n            @if (activeCategories2?.size) {\n              <ion-button\n                color=\"light\"\n                size=\"small\"\n                [class.strong]=\"category2\"\n                (click)=\"category2 ? resetFilterCategoryN(2) : setFilterCategoryN(2)\"\n              >\n                <ion-icon [icon]=\"category2 ? 'close' : 'filter'\" slot=\"start\" />\n                {{ category2 || ('IDEA_COMMON.SELECT.TAP_TO_FILTER' | translate) }}\n              </ion-button>\n            }\n          </div>\n        </ion-toolbar>\n      }\n    </ion-header>\n    <ion-content>\n      <ion-list class=\"checksList\">\n        @if (!filteredChecks.length) {\n          <ion-item lines=\"none\">\n            <ion-label>\n              <i>{{ noElementsFoundText || ('IDEA_COMMON.CHECKER.NO_ELEMENTS_FOUND' | translate) }}</i>\n            </ion-label>\n          </ion-item>\n        }\n        @for (check of filteredChecks; track check.value) {\n          <ion-item class=\"check\">\n            @if (showAvatars) {\n              <ion-avatar slot=\"start\">\n                @if (check.color) {\n                  <div class=\"circle\" [style.background-color]=\"check.color\"></div>\n                }\n                @if (!check.color) {\n                  <idea-user-avatar [src]=\"check.avatar\" [name]=\"check.name\" />\n                }\n              </ion-avatar>\n            }\n            <ion-checkbox\n              labelPlacement=\"end\"\n              justify=\"start\"\n              [disabled]=\"!check.checked && getNumChecked() >= limitSelectionToNum\"\n              [(ngModel)]=\"check.checked\"\n            >\n              {{ check.name }}\n              @if (check.description) {\n                <p>{{ check.description }}</p>\n              }\n            </ion-checkbox>\n          </ion-item>\n        }\n      </ion-list>\n      <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n        <ion-infinite-scroll-content />\n      </ion-infinite-scroll>\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-toolbar.secondary {\n        --min-height: 44px;\n        ion-title {\n          font-size: 0.8em;\n        }\n        ion-buttons ion-button {\n          height: auto;\n          font-size: 0.8em;\n          --padding-top: 6px;\n          --padding-end: 8px;\n          --padding-bottom: 6px;\n          --padding-start: 8px;\n        }\n        .additionalToolbar {\n          padding: 0px 5px 5px 15px;\n          text-align: left;\n          ion-button {\n            text-transform: none;\n            font-weight: normal;\n          }\n          ion-button.strong {\n            font-weight: bold;\n          }\n        }\n      }\n      .checksList {\n        .check {\n          --background: var(--ion-color-white);\n        }\n        .circle {\n          height: 100%;\n          width: 100%;\n          background-color: #555;\n          border-radius: 50%;\n        }\n      }\n    `\n  ]\n})\nexport class IDEAChecksComponent implements OnInit {\n  private _modal = inject(ModalController);\n\n  /**\n   * It should be read only until the component closure.\n   */\n  @Input() data: Check[];\n  /**\n   * If true, sort alphabetically the data (by name or, fallback, by value).\n   */\n  @Input() sortData: boolean;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * Whether to show an avatar aside each element.\n   */\n  @Input() showAvatars: boolean;\n  /**\n   * Limit the number of selectable elements to the value provided.\n   * Note: if this attribute is active, `allowSelectDeselectAll` will be ignored.\n   */\n  @Input() limitSelectionToNum: number;\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  @Input() allowSelectDeselectAll: boolean;\n  /**\n   * A pre-filter for the category1.\n   */\n  @Input() category1: string;\n  /**\n   * A pre-filter for the category2.\n   */\n  @Input() category2: string;\n  /**\n   * Whether tho show the categories filters.\n   */\n  @Input() showCategoriesFilters: boolean = false;\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  @Input() previewTextKey = 'IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED';\n\n  workingData: Check[];\n  filteredChecks: Check[];\n  currentPage: number;\n  activeCategories1: Set<string>;\n  activeCategories2: Set<string>;\n\n  @ViewChild('searchbar') searchbar: IonSearchbar;\n\n  ngOnInit(): void {\n    this.workingData = JSON.parse(JSON.stringify(this.data || new Array<Check>()));\n    this.filteredChecks = new Array<Check>();\n    if (this.sortData) this.workingData = this.workingData.sort((a, b): number => a.name.localeCompare(b.name));\n    this.loadActiveCategories();\n    this.search();\n  }\n  ionViewDidEnter(): void {\n    // set the focus / open the keyboard when entering the component\n    setTimeout((): Promise<void> => this.searchbar.setFocus(), 100);\n  }\n\n  private loadActiveCategories(): void {\n    this.activeCategories1 = new Set<string>();\n    this.activeCategories2 = new Set<string>();\n    this.data.forEach(a => {\n      if (a.category1) this.activeCategories1.add(a.category1);\n      if (a.category2) this.activeCategories2.add(a.category2);\n    });\n  }\n  private mapIntoSuggestions(set: Set<string>): Suggestion[] {\n    return Array.from(set)\n      .sort()\n      .map(x => new Suggestion({ value: x }));\n  }\n\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredChecks = this.workingData\n      .filter(x => !this.category1 || x.category1 === this.category1)\n      .filter(x => !this.category2 || x.category2 === this.category2)\n      .filter(x => !x.hidden)\n      .filter(x =>\n        toSearch\n          .split(' ')\n          .every(searchTerm =>\n            [x.name, String(x.value), x.description].filter(f => f).some(f => f.toLowerCase().includes(searchTerm))\n          )\n      );\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.filteredChecks = this.filteredChecks.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n\n  async setFilterCategoryN(whichCategory: number): Promise<void> {\n    const categories = whichCategory === 2 ? this.activeCategories2 : this.activeCategories1;\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: { data: this.mapIntoSuggestions(categories) }\n    });\n    modal.onDidDismiss().then(({ data }): void => {\n      if (data) {\n        if (whichCategory === 2) this.category2 = data.value;\n        else this.category1 = data.value;\n        this.search(this.searchbar ? this.searchbar.value : null);\n      }\n    });\n    modal.present();\n  }\n  resetFilterCategoryN(whichCategory: number): void {\n    if (whichCategory === 2) this.category2 = null;\n    else this.category1 = null;\n    this.search(this.searchbar ? this.searchbar.value : null);\n  }\n\n  getNumChecked(): number {\n    return this.workingData.filter(x => x.checked).length;\n  }\n  checkAll(check: boolean): void {\n    this.workingData.forEach(x => (x.checked = check));\n  }\n\n  cancel(): void {\n    this._modal.dismiss(false);\n  }\n  confirm(): void {\n    this.workingData.forEach(x => (this.data.find(y => x.value === y.value).checked = x.checked));\n    this._modal.dismiss(true);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { ModalController, IonItem, IonLabel, IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { Check } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\nimport { IDEAChecksComponent } from './checks.component';\n\n@Component({\n  selector: 'idea-checker',\n  standalone: true,\n  imports: [CommonModule, IonLabel, IonItem, IonButton, IonIcon, IonText],\n  template: `\n    <ion-item\n      class=\"checkerItem\"\n      [color]=\"color\"\n      [lines]=\"lines\"\n      [title]=\"searchPlaceholder || null\"\n      [button]=\"!disabled\"\n      [disabled]=\"isOpening\"\n      [class.withLabel]=\"label\"\n      (click)=\"fetchDataAndOpenModal()\"\n    >\n      @if (icon) {\n        <ion-button\n          fill=\"clear\"\n          slot=\"start\"\n          [color]=\"iconColor\"\n          [class.marginTop]=\"label\"\n          (click)=\"doIconSelect($event)\"\n        >\n          <ion-icon [icon]=\"icon\" slot=\"icon-only\" />\n        </ion-button>\n      }\n      @if (label) {\n        <ion-label position=\"stacked\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n          {{ label }}\n          @if (obligatory && !disabled) {\n            <ion-text class=\"obligatoryDot\" />\n          }\n        </ion-label>\n      }\n      <ion-label\n        class=\"description\"\n        [class.selectable]=\"!disabled || tappableWhenDisabled\"\n        [class.placeholder]=\"getPreview() === allText || getPreview() === noneText || noPreviewText\"\n      >\n        {{ getPreview() }}\n      </ion-label>\n      @if (!disabled) {\n        <ion-icon slot=\"end\" icon=\"caret-down\" class=\"selectIcon\" [class.selectable]=\"!disabled\" />\n      }\n    </ion-item>\n  `,\n  styles: [\n    `\n      .checkerItem {\n        min-height: 48px;\n        height: auto;\n        .description {\n          margin: 10px 0;\n          height: 20px;\n          line-height: 20px;\n          width: 100%;\n        }\n        .placeholder {\n          color: var(--ion-color-medium);\n        }\n        .selectIcon {\n          margin: 0;\n          padding-left: 4px;\n          font-size: 0.8em;\n          color: var(--ion-color-medium);\n        }\n      }\n      .checkerItem.withLabel {\n        min-height: 58px;\n        height: auto;\n        .selectIcon {\n          padding-top: 25px;\n        }\n        ion-button[slot='start'] {\n          margin-top: 16px;\n        }\n      }\n      .selectable {\n        cursor: pointer;\n      }\n    `\n  ]\n})\nexport class IDEACheckerComponent {\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The checks to show.\n   */\n  @Input() data: Check[] = [];\n  /**\n   * @deprecated Alternative to the case above; function that returns a Promise<Array<Check>>.\n   */\n  @Input() dataProvider: any;\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  @Input() noPreviewText: string;\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * If true, no elements selected equals all the elements selected.\n   */\n  @Input() noneEqualsAll: boolean;\n  /**\n   * If no element is selected, set this custom text.\n   */\n  @Input() noneText: string;\n  /**\n   * If all the elements are selected, set this custom text.\n   */\n  @Input() allText: string;\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  @Input() previewTextKey = 'IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED';\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * The color for the component.\n   */\n  @Input() color: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, the field has a tappable effect when disabled.\n   */\n  @Input() tappableWhenDisabled: boolean;\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  @Input() obligatory: boolean;\n  /**\n   * If true, sort alphabetically the data.\n   */\n  @Input() sortData: boolean;\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  @Input() numMaxElementsInPreview = 4;\n  /**\n   * Whether to show an avatar aside each element.\n   */\n  @Input() showAvatars: boolean;\n  /**\n   * Limit the number of selectable elements to the value provided.\n   * Note: if this attribute is active, `allowSelectDeselectAll` will be ignored.\n   */\n  @Input() limitSelectionToNum: number;\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  @Input() allowSelectDeselectAll: boolean;\n  /**\n   * A pre-filter for the category1.\n   */\n  @Input() category1: string;\n  /**\n   * A pre-filter for the category2.\n   */\n  @Input() category2: string;\n  /**\n   * Whether tho show the categories filters.\n   */\n  @Input() showCategoriesFilters: boolean;\n  /**\n   * On change event.\n   */\n  @Output() change = new EventEmitter<void>();\n  /**\n   * Icon select.\n   */\n  @Output() iconSelect = new EventEmitter<void>();\n\n  isOpening = false;\n\n  async fetchDataAndOpenModal(): Promise<void> {\n    if (this.disabled) return;\n    if (typeof this.dataProvider === 'function') {\n      try {\n        this.data = await this.dataProvider();\n        this.openChecker();\n      } catch (error) {\n        this.data = [];\n      }\n    } else this.openChecker();\n  }\n  private async openChecker(): Promise<void> {\n    if (this.disabled || this.isOpening) return;\n    this.isOpening = true;\n    const modal = await this._modal.create({\n      component: IDEAChecksComponent,\n      componentProps: {\n        data: this.data,\n        sortData: this.sortData,\n        searchPlaceholder: this.searchPlaceholder,\n        noElementsFoundText: this.noElementsFoundText,\n        showAvatars: this.showAvatars,\n        allowSelectDeselectAll: this.allowSelectDeselectAll,\n        limitSelectionToNum: this.limitSelectionToNum,\n        category1: this.category1,\n        category2: this.category2,\n        showCategoriesFilters: this.showCategoriesFilters,\n        previewTextKey: this.previewTextKey\n      }\n    });\n    modal.onDidDismiss().then(({ data }): void => (data ? this.change.emit() : null));\n    modal.present();\n    this.isOpening = false;\n  }\n\n  getPreview(): string {\n    if (!this.data || !this.data.length) return null;\n    if (this.noPreviewText) return this.noPreviewText;\n    if (this.allText && (this.data.every(x => x.checked) || (this.data.every(x => !x.checked) && this.noneEqualsAll)))\n      return this.allText;\n    else {\n      const checked = this.data.filter(x => x.checked);\n      if (this.noneText && checked.length === 0) return this.noneText;\n      if (checked.length <= this.numMaxElementsInPreview)\n        return this.data\n          .filter(x => x.checked)\n          .slice(0, this.numMaxElementsInPreview)\n          .map(x => x.name)\n          .join(', ');\n      else return this._translate._(this.previewTextKey, { num: checked.length });\n    }\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","import { Component, ViewChild, Input, OnInit, Output, EventEmitter, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  IonButton,\n  IonChip,\n  IonIcon,\n  IonLabel,\n  IonText,\n  IonInfiniteScroll,\n  IonSearchbar,\n  ModalController,\n  PopoverController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonContent,\n  IonList,\n  IonItem,\n  IonCheckbox,\n  IonInfiniteScrollContent,\n  IonTitle\n} from '@ionic/angular/standalone';\nimport { Check } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\n\nconst PAGINATION_MAX_PAGE_SIZE = 24;\n\n@Component({\n  standalone: true,\n  imports: [IonChip, IonIcon, IonLabel, IonText, IonButton],\n  selector: 'idea-chip-checker',\n  template: `\n    <ion-chip\n      class=\"chipChecker\"\n      tabindex=\"0\"\n      [color]=\"someChecked() ? color : inactiveColor\"\n      [disabled]=\"disabled || isOpening\"\n      (click)=\"openChecker($event)\"\n      (keyup.enter)=\"openChecker($event)\"\n    >\n      @if (icon) {\n        <ion-icon [icon]=\"icon\" [color]=\"iconColor\" />\n      }\n      <ion-label>\n        <ion-text class=\"chipCheckerLabel\">{{ label }}:</ion-text>\n        <ion-text class=\"chipCheckerText\">{{ getPreview() }}</ion-text>\n      </ion-label>\n      @if (resetButton && someChecked()) {\n        <ion-button size=\"small\" fill=\"clear\" (click)=\"resetChecks($event)\">\n          <ion-icon icon=\"close-circle\" slot=\"icon-only\" size=\"small\" />\n        </ion-button>\n      }\n    </ion-chip>\n  `,\n  styles: [\n    `\n      ion-text.chipCheckerLabel {\n        font-weight: 600;\n        padding-right: 4px;\n      }\n      ion-button {\n        margin-left: 8px;\n        --padding-start: 2px;\n        --padding-end: 2px;\n      }\n    `\n  ]\n})\nexport class IDEAChipCheckerComponent {\n  private _popover = inject(PopoverController);\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The checks to show.\n   */\n  @Input() data: Check[] = [];\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  @Input() noPreviewText: string;\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * If true, no elements selected equals all the elements selected.\n   */\n  @Input() noneEqualsAll: boolean;\n  /**\n   * If no element is selected, set this custom text.\n   */\n  @Input() noneText: string;\n  /**\n   * If all the elements are selected, set this custom text.\n   */\n  @Input() allText: string;\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  @Input() previewTextKey = 'IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED';\n  /**\n   * The color for the component.\n   */\n  @Input() color = 'primary';\n  /**\n   * The color for the inactive component.\n   */\n  @Input() inactiveColor = 'dark';\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, sort alphabetically the data.\n   */\n  @Input() sortData: boolean;\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  @Input() numMaxElementsInPreview = 4;\n  /**\n   * Limit the number of selectable elements to the value provided.\n   */\n  @Input() limitSelectionToNum: number;\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  @Input() allowSelectDeselectAll: boolean;\n  /**\n   * Whether to show the reset button.\n   */\n  @Input() resetButton = true;\n  /**\n   * Whether to show the check list as a popover.\n   * If false, we show a centered modal.\n   */\n  @Input() showAsPopover = true;\n  /**\n   * On change event.\n   */\n  @Output() change = new EventEmitter<string[]>();\n\n  isOpening = false;\n\n  async openChecker(event: Event): Promise<void> {\n    if (this.disabled || this.isOpening) return;\n    this.isOpening = true;\n    const component = IDEAChipChecksComponent;\n    const componentProps = {\n      data: this.data,\n      sortData: this.sortData,\n      searchPlaceholder: this.searchPlaceholder,\n      noElementsFoundText: this.noElementsFoundText,\n      limitSelectionToNum: this.limitSelectionToNum,\n      allowSelectDeselectAll: this.allowSelectDeselectAll,\n      showAsPopover: this.showAsPopover,\n      previewTextKey: this.previewTextKey\n    };\n    const cssClass = 'chipCheckerPopover';\n    const modal = this.showAsPopover\n      ? await this._popover.create({ component, componentProps, event, cssClass })\n      : await this._modal.create({ component, componentProps, cssClass });\n    modal.onDidDismiss().then((): void => {\n      const checkValues = this.data.filter(x => x.checked).map(x => x.value as string);\n      this.change.emit(checkValues);\n    });\n    modal.present();\n    this.isOpening = false;\n  }\n\n  getPreview(): string {\n    if (!this.data || !this.data.length) return null;\n    if (this.noPreviewText) return this.noPreviewText;\n    if (this.allText && this.allChecked()) return this.allText;\n    else {\n      const checked = this.data.filter(x => x.checked);\n      if (this.noneText && checked.length === 0) return this.noneText;\n      if (checked.length && checked.length <= this.numMaxElementsInPreview)\n        return this.data\n          .filter(x => x.checked)\n          .slice(0, this.numMaxElementsInPreview)\n          .map(x => x.name)\n          .join(', ');\n      return this._translate._(this.previewTextKey, { num: checked.length });\n    }\n  }\n  private allChecked(): boolean {\n    return this.data?.every(x => x.checked) || (this.data?.every(x => !x.checked) && this.noneEqualsAll);\n  }\n\n  someChecked(): boolean {\n    return this.data?.some(x => x.checked);\n  }\n\n  resetChecks(event: Event): void {\n    if (event) event.stopPropagation();\n    this.data?.forEach(x => (x.checked = false));\n    this.change.emit();\n  }\n}\n\n@Component({\n  standalone: true,\n  imports: [\n    FormsModule,\n    IDEATranslatePipe,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonSearchbar,\n    IonContent,\n    IonList,\n    IonItem,\n    IonTitle,\n    IonCheckbox,\n    IonLabel,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent\n  ],\n  selector: 'idea-chip-checks',\n  template: `\n    <ion-header class=\"ion-no-border\">\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon icon=\"chevron-down-outline\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          #searchbar\n          color=\"white\"\n          lines=\"none\"\n          [placeholder]=\"searchPlaceholder || ('IDEA_COMMON.CHECKER.SEARCH' | translate)\"\n          (ionInput)=\"search($event.target.value)\"\n        />\n      </ion-toolbar>\n      @if (allowSelectDeselectAll) {\n        <ion-toolbar color=\"ideaToolbar\" class=\"secondary\">\n          <ion-title>\n            {{ previewTextKey | translate: { num: getNumChecked() } }}\n            @if (limitSelectionToNum) {\n              <span>\n                {{ 'IDEA_COMMON.CHECKER.LIMIT_OF_NUM' | translate: { num: limitSelectionToNum } }}\n              </span>\n            }\n          </ion-title>\n          @if (!limitSelectionToNum) {\n            <ion-buttons slot=\"end\">\n              <ion-button [title]=\"'IDEA_COMMON.CHECKER.DESELECT_ALL' | translate\" (click)=\"checkAll(false)\">\n                <ion-icon slot=\"icon-only\" name=\"square-outline\" />\n              </ion-button>\n              <ion-button [title]=\"'IDEA_COMMON.CHECKER.SELECT_ALL' | translate\" (click)=\"checkAll(true)\">\n                <ion-icon slot=\"icon-only\" name=\"checkbox-outline\" />\n              </ion-button>\n            </ion-buttons>\n          }\n        </ion-toolbar>\n      }\n    </ion-header>\n    <ion-content>\n      <ion-list>\n        @for (check of filteredChecks; track check.value) {\n          @if (limitSelectionToNum !== 1) {\n            <ion-item color=\"white\" class=\"chipCheck\">\n              <ion-checkbox\n                labelPlacement=\"end\"\n                justify=\"start\"\n                [disabled]=\"!check.checked && getNumChecked() >= limitSelectionToNum\"\n                [(ngModel)]=\"check.checked\"\n              >\n                @if (check.category1) {\n                  <strong>{{ check.category1 }}</strong>\n                }\n                {{ check.name }}\n              </ion-checkbox>\n            </ion-item>\n          } @else {\n            <ion-item color=\"white\" class=\"chipCheck\" button (click)=\"selectSingle(check)\">\n              <ion-label>\n                @if (check.category1) {\n                  <strong>{{ check.category1 }}</strong>\n                }\n                {{ check.name }}\n              </ion-label>\n            </ion-item>\n          }\n        } @empty {\n          <ion-item color=\"white\" lines=\"none\">\n            <ion-label class=\"ion-text-center\">\n              <i>{{ noElementsFoundText ?? ('IDEA_COMMON.CHECKER.NO_ELEMENTS_FOUND' | translate) }}</i>\n            </ion-label>\n          </ion-item>\n        }\n      </ion-list>\n      <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n        <ion-infinite-scroll-content />\n      </ion-infinite-scroll>\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-toolbar.secondary {\n        --min-height: 44px;\n        ion-title {\n          font-size: 0.8em;\n        }\n        ion-buttons ion-button {\n          height: auto;\n          font-size: 0.8em;\n          --padding-top: 6px;\n          --padding-end: 8px;\n          --padding-bottom: 6px;\n          --padding-start: 8px;\n        }\n      }\n      ion-list {\n        background: transparent;\n      }\n      ion-searchbar {\n        --box-shadow: none;\n      }\n      ion-item {\n        ion-label {\n          margin: 0;\n          font-size: 0.9em;\n          strong {\n            font-weight: 600;\n            padding-right: 4px;\n          }\n        }\n        ion-checkbox {\n          margin: 0 12px;\n        }\n      }\n    `\n  ]\n})\nclass IDEAChipChecksComponent implements OnInit {\n  private _popover = inject(PopoverController);\n  private _modal = inject(ModalController);\n\n  /**\n   * The data to show.\n   */\n  @Input() data: Check[];\n  /**\n   * If true, sort alphabetically the data (by name or, fallback, by value).\n   */\n  @Input() sortData: boolean;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  @Input() previewTextKey = 'IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED';\n  /**\n   * Limit the number of selectable elements to the value provided.\n   * If this number is forced to `1`, the component turns into a single selection.\n   * Note: if this attribute is active, `allowSelectDeselectAll` will be ignored.\n   */\n  @Input() limitSelectionToNum: number;\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  @Input() allowSelectDeselectAll: boolean;\n  /**\n   * Whether to show the check list as a popover.\n   * If false, we show a centered modal.\n   */\n  @Input() showAsPopover: boolean;\n\n  filteredChecks: Check[];\n  currentPage: number;\n\n  @ViewChild('searchbar') searchbar: IonSearchbar;\n\n  ngOnInit(): void {\n    if (!this.data) this.data = [];\n    this.search();\n  }\n  ionViewDidEnter(): void {\n    // set the focus / open the keyboard when entering the component\n    setTimeout((): Promise<void> => this.searchbar.setFocus(), 100);\n  }\n\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredChecks = this.data\n      .filter(x => !x.hidden)\n      .filter(x =>\n        toSearch\n          .split(' ')\n          .every(searchTerm =>\n            [x.name, String(x.value), x.description, x.category1, x.category2]\n              .filter(f => f)\n              .some(f => f.toLowerCase().includes(searchTerm))\n          )\n      );\n    if (this.sortData) this.filteredChecks = this.filteredChecks.sort((a, b): number => a.name.localeCompare(b.name));\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.filteredChecks = this.filteredChecks.slice(0, (this.currentPage + 1) * PAGINATION_MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n\n  getNumChecked(): number {\n    return this.data.filter(x => x.checked).length;\n  }\n\n  selectSingle(check: Check): void {\n    this.data.forEach(x => (x.checked = false));\n    const index = this.data.indexOf(check);\n    if (index !== -1) this.data[index].checked = true;\n    this.showAsPopover ? this._popover.dismiss() : this._modal.dismiss();\n  }\n\n  checkAll(check: boolean): void {\n    this.data.forEach(x => (x.checked = check));\n  }\n\n  close(): void {\n    this.showAsPopover ? this._popover.dismiss() : this._modal.dismiss();\n  }\n}\n","import { Component, Input, Output, EventEmitter, inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  IonCheckbox,\n  IonContent,\n  IonIcon,\n  IonInput,\n  IonItem,\n  IonList,\n  IonReorder,\n  IonReorderGroup,\n  ItemReorderEventDetail,\n  PopoverController\n} from '@ionic/angular/standalone';\nimport { Check } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Component({\n  standalone: true,\n  imports: [IonItem, IonInput, IonIcon],\n  selector: 'idea-inline-checker',\n  template: `\n    <ion-item\n      [color]=\"color\"\n      [lines]=\"lines\"\n      [button]=\"!disabled\"\n      [disabled]=\"disabled || isOpening\"\n      [class.placeholder]=\"getPreview() === placeholder\"\n      (click)=\"openChecker($event)\"\n    >\n      @if (!disabled) {\n        <ion-icon slot=\"end\" icon=\"caret-down\" color=\"medium\" class=\"margin-top\" />\n      }\n      <ion-input readonly [labelPlacement]=\"labelPlacement\" [label]=\"label\" [value]=\"getPreview()\" />\n    </ion-item>\n  `,\n  styles: [\n    `\n      ion-icon[icon='caret-down'] {\n        font-size: 0.8em;\n      }\n      .placeholder ion-input {\n        -webkit-text-fill-color: var(--ion-color-medium);\n      }\n    `\n  ]\n})\nexport class IDEAInlineCheckerComponent {\n  private _popover = inject(PopoverController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The options to show.\n   */\n  @Input() data: Check[] = [];\n  /**\n   * The label for the component.\n   */\n  @Input() label: string;\n  /**\n   * The label placement.\n   */\n  @Input() labelPlacement: string;\n  /**\n   * The placeholder for the component.\n   */\n  @Input() placeholder: string;\n  /**\n   * The lines of the component.\n   */\n  @Input() lines: string;\n  /**\n   * The color of the component.\n   */\n  @Input() color: string;\n  /**\n   * Whether the component is disabled.\n   */\n  @Input() disabled = false;\n  /**\n   * Whether the checklist is reorderable or not.\n   */\n  @Input() reorder = false;\n  /**\n   * If true, sort the checklist alphabetically.\n   */\n  @Input() sortData: boolean;\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  @Input() numMaxElementsInPreview = 4;\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  @Input() previewTextKey = 'IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED';\n\n  /**\n   * On change event.\n   */\n  @Output() change = new EventEmitter<void>();\n\n  isOpening = false;\n\n  async openChecker(event: Event): Promise<void> {\n    if (this.disabled || this.isOpening) return;\n    this.isOpening = true;\n    const component = IDEAInlineChecksComponent;\n    const componentProps = { data: this.data, reorder: this.reorder, sortData: this.sortData };\n    const cssClass = 'popoverLarge';\n    const modal = await this._popover.create({ component, componentProps, event, cssClass });\n    modal.onDidDismiss().then((): void => this.change.emit());\n    modal.present();\n    this.isOpening = false;\n  }\n\n  getPreview(): string {\n    if (!this.data || !this.data.length) return null;\n    const checked = this.data.filter(x => x.checked);\n    if (this.placeholder && checked.length === 0) return this.placeholder;\n    else if (checked.length && checked.length <= this.numMaxElementsInPreview)\n      return this.data\n        .filter(x => x.checked)\n        .slice(0, this.numMaxElementsInPreview)\n        .map(x => x.name)\n        .join(', ');\n    else return this._translate._(this.previewTextKey, { num: checked.length });\n  }\n}\n\n@Component({\n  standalone: true,\n  imports: [FormsModule, IonContent, IonList, IonReorderGroup, IonItem, IonCheckbox, IonReorder],\n  selector: 'idea-inline-checks',\n  template: `\n    <ion-content>\n      <ion-list>\n        <ion-reorder-group [disabled]=\"!reorder\" (ionItemReorder)=\"handleReorder($event)\">\n          @for (check of data; track check.value) {\n            <ion-item color=\"white\">\n              <ion-reorder slot=\"start\" />\n              <ion-checkbox [(ngModel)]=\"check.checked\">{{ check.name }}</ion-checkbox>\n            </ion-item>\n          }\n        </ion-reorder-group>\n      </ion-list>\n    </ion-content>\n  `\n})\nclass IDEAInlineChecksComponent implements OnInit {\n  /**\n   * The checklist to show.\n   */\n  @Input() data: Check[];\n  /**\n   * Whether the checklist is reorderable or not.\n   */\n  @Input() reorder = false;\n  /**\n   * If true, sort the checklist alphabetically.\n   */\n  @Input() sortData: boolean;\n\n  ngOnInit(): void {\n    if (this.sortData)\n      this.data.sort((a, b): number =>\n        a.name && b.name ? a.name.localeCompare(b.name) : String(a.value).localeCompare(String(b.value))\n      );\n  }\n\n  handleReorder(ev: CustomEvent<ItemReorderEventDetail>): void {\n    if (!this.reorder) return;\n    this.data = ev.detail.complete(this.data);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, SimpleChanges, OnChanges, inject } from '@angular/core';\nimport { ModalController, IonItem, IonLabel, IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { Suggestion } from 'idea-toolbox';\n\nimport { IDEASuggestionsComponent } from './suggestions.component';\n\n@Component({\n  selector: 'idea-select',\n  standalone: true,\n  imports: [CommonModule, IonLabel, IonItem, IonButton, IonLabel, IonText, IonIcon],\n  templateUrl: 'select.component.html',\n  styleUrls: ['select.component.scss']\n})\nexport class IDEASelectComponent implements OnChanges {\n  private _modal = inject(ModalController);\n\n  /**\n   * The description to show in the field.\n   * Set the property so it detects changes.\n   */\n  protected _description: string;\n  get description(): string {\n    return this._description;\n  }\n  @Input() set description(description: string) {\n    this._description = description;\n  }\n\n  /**\n   * The suggestions to show.\n   */\n  @Input() data: Suggestion[] = [];\n  /**\n   * @deprecated Alternative to the case above; function that returns a Promise<Array<Suggestion>>.\n   */\n  @Input() dataProvider: any;\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the field.\n   */\n  @Input() placeholder: string;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * Text to show when there isn't a result.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, the field has a tappable effect when disabled.\n   */\n  @Input() tappableWhenDisabled: boolean;\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  @Input() obligatory: boolean;\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * The color for the component.\n   */\n  @Input() color: string;\n  /**\n   * If true, allows to select a new custom value (outside the suggestions).\n   */\n  @Input() allowUnlistedValues: boolean;\n  /**\n   * If `allowUnlistedValues` is set, show this to help users understanding what happens by selecting the unlisted val.\n   */\n  @Input() allowUnlistedValuesPrefix: string;\n  /**\n   * If true, sort the suggestions alphabetically.\n   */\n  @Input() sortData: boolean;\n  /**\n   * If true, clear the value of the field after a selection.\n   */\n  @Input() clearValueAfterSelection: boolean;\n  /**\n   * If true, doesn't show the id in the UI.\n   */\n  @Input() hideIdFromUI: boolean;\n  /**\n   * If true, doesn't show the clear button in the header.\n   */\n  @Input() hideClearButton: boolean;\n  /**\n   * If true, the user doesn't have the option to cancel the selection: an option must be chosen.\n   */\n  @Input() mustChoose: boolean;\n  /**\n   * A pre-filter for the category1.\n   */\n  @Input() category1: string;\n  /**\n   * A pre-filter for the category2.\n   */\n  @Input() category2: string;\n  /**\n   * Whether tho show the categories filters in the suggestions component.\n   */\n  @Input() showCategoriesFilters: boolean;\n  /**\n   * If true, doesn't let the auto-selection in case there's only one element as possible selection.\n   */\n  @Input() avoidAutoSelection: boolean;\n  /**\n   * On select event.\n   */\n  @Output() select = new EventEmitter<Suggestion>();\n  /**\n   * Icon select.\n   */\n  @Output() iconSelect = new EventEmitter<void>();\n  /**\n   * On select (with the field disabled) event.\n   */\n  @Output() selectWhenDisabled = new EventEmitter<void>();\n\n  isOpening = false;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.avoidAutoSelection && (changes['data'] || changes['category1'] || changes['category2'])) {\n      const filteredData = (this.data || [])\n        .filter(x => !this.category1 || x.category1 === this.category1)\n        .filter(x => !this.category2 || x.category2 === this.category2);\n      if (filteredData.length === 1) {\n        setTimeout((): void => {\n          this.select.emit(filteredData[0].value ? filteredData[0] : new Suggestion());\n        }, 500);\n      }\n    }\n  }\n\n  async fetchDataAndOpenModal(): Promise<void> {\n    if (this.disabled) return;\n    if (typeof this.dataProvider === 'function') {\n      try {\n        this.data = await this.dataProvider();\n        this.openSuggestions();\n      } catch (error) {\n        this.data = [];\n      }\n    } else this.openSuggestions();\n  }\n  private convertDataInSuggestions(): void {\n    this.data = this.data.map((x: any): any =>\n      x.value !== undefined && x.value !== null ? x : new Suggestion({ value: x })\n    );\n  }\n  private async openSuggestions(): Promise<void> {\n    if (this.disabled || this.isOpening) return;\n    this.isOpening = true;\n    this.convertDataInSuggestions();\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: {\n        data: this.data,\n        sortData: this.sortData,\n        searchPlaceholder: this.searchPlaceholder,\n        noElementsFoundText: this.noElementsFoundText,\n        allowUnlistedValues: this.allowUnlistedValues,\n        allowUnlistedValuesPrefix: this.allowUnlistedValuesPrefix,\n        clearValueAfterSelection: this.clearValueAfterSelection,\n        hideIdFromUI: this.hideIdFromUI,\n        hideClearButton: this.hideClearButton,\n        mustChoose: this.mustChoose,\n        category1: this.category1,\n        category2: this.category2,\n        showCategoriesFilters: this.showCategoriesFilters\n      },\n      backdropDismiss: !this.mustChoose\n    });\n    modal.onDidDismiss().then(({ data }): void => {\n      // manage a cancel option (modal dismission or cancel button)\n      if (data === undefined || data === null) return;\n      // manage a reset ('') or a selection\n      this.select.emit(String(data.value) ? data : new Suggestion());\n      // render the suggestion selected\n      if (this.clearValueAfterSelection) this.description = '';\n      else if (data.name) this.description = data.name;\n      else this.description = data.value;\n    });\n    modal.present();\n    this.isOpening = false;\n  }\n\n  doSelectWhenDisabled(): void {\n    if (this.disabled) this.selectWhenDisabled.emit();\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","<ion-item\n  class=\"selectItem\"\n  [color]=\"color\"\n  [lines]=\"lines\"\n  [button]=\"!disabled\"\n  [disabled]=\"isOpening\"\n  [title]=\"placeholder || description || ''\"\n  [class.withLabel]=\"label\"\n  (click)=\"disabled ? doSelectWhenDisabled() : fetchDataAndOpenModal()\"\n>\n  @if (icon) {\n    <ion-button fill=\"clear\" slot=\"start\" [color]=\"iconColor\" [class.marginTop]=\"label\" (click)=\"doIconSelect($event)\">\n      <ion-icon [icon]=\"icon\" slot=\"icon-only\" />\n    </ion-button>\n  }\n  @if (label) {\n    <ion-label position=\"stacked\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n      {{ label }}\n      @if (obligatory && !disabled) {\n        <ion-text class=\"obligatoryDot\" />\n      }\n    </ion-label>\n  }\n  <ion-label class=\"description\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n    @if (!description && !disabled) {\n      <ion-text class=\"placeholder\">\n        {{ placeholder }}\n      </ion-text>\n    }\n    {{ description }}\n  </ion-label>\n  @if (!disabled) {\n    <ion-icon slot=\"end\" icon=\"caret-down\" class=\"selectIcon\" [class.selectable]=\"!disabled\" />\n  }\n</ion-item>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  AlertController,\n  IonList,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonButton,\n  IonIcon,\n  IonText,\n  IonTextarea,\n  IonInput,\n  IonCheckbox\n} from '@ionic/angular/standalone';\nimport { CustomBlockMeta, CustomFieldTypes } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEASelectComponent } from '../select/select.component';\n\n@Component({\n  selector: 'idea-custom-block',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEASelectComponent,\n    IonText,\n    IonIcon,\n    IonButton,\n    IonItem,\n    IonLabel,\n    IonListHeader,\n    IonList,\n    IonInput,\n    IonTextarea,\n    IonCheckbox\n  ],\n  templateUrl: 'customBlock.component.html',\n  styleUrls: ['customBlock.component.scss']\n})\nexport class IDEACustomBlockComponent {\n  private _alert = inject(AlertController);\n  _translate = inject(IDEATranslationsService);\n\n  /**\n   * The custom sections to manage.\n   */\n  @Input() sections: any;\n  /**\n   * The CustomBlockMeta that describe the custom sections.\n   */\n  @Input() blockMeta: CustomBlockMeta;\n  /**\n   * Whether the component is enabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n  /**\n   * Whether to hide the descriptions (buttons).\n   */\n  @Input() hideDescriptions = false;\n  /**\n   * Show errors as reported from the parent component.\n   */\n  @Input() errors = new Set();\n  /**\n   * Add a custom prefix to the error string identifier.\n   */\n  @Input() errorPrefix = '';\n\n  CFT = CustomFieldTypes;\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  hasDescription(sectionKey: string, fieldKey: string): boolean {\n    return !!this._translate._label(this.blockMeta.sections[sectionKey].fields[fieldKey].description);\n  }\n  async openDescription(sectionKey: string, fieldKey: string, event: any): Promise<void> {\n    if (event) event.stopPropagation();\n    const message = this._translate._label(this.blockMeta.sections[sectionKey].fields[fieldKey].description);\n    if (!message) return;\n\n    const header = this._translate._label(this.blockMeta.sections[sectionKey].fields[fieldKey].name);\n    const alert = await this._alert.create({ header, message, buttons: ['OK'], cssClass: 'alertLongOptions' });\n    await alert.present();\n  }\n}\n","@for (s of blockMeta.sectionsLegend; track s) {\n  <ion-list class=\"aList customBlockList\">\n    <ion-list-header>\n      <ion-label>\n        <h2 [attr.toc]=\"blockMeta.sections[s].name | label\">{{ blockMeta.sections[s].name | label }}</h2>\n        <p>{{ blockMeta.sections[s].description | label }}</p>\n      </ion-label>\n    </ion-list-header>\n    @for (f of blockMeta.sections[s].fieldsLegend; track f) {\n      <div>\n        @if (blockMeta.sections[s].fields[f].type === CFT.ENUM) {\n          <idea-select\n            [data]=\"\n              blockMeta.sections[s].fields[f].getEnumAsSuggestion(_translate.getCurrentLang(), _translate.languages())\n            \"\n            [lines]=\"lines\"\n            [description]=\"\n              blockMeta.sections[s].fields[f].getEnumElement(\n                sections[s][f],\n                _translate.getCurrentLang(),\n                _translate.languages()\n              )\n            \"\n            [label]=\"blockMeta.sections[s].fields[f].name | label\"\n            [icon]=\"!hideDescriptions && !disabled ? 'help-circle-outline' : null\"\n            [iconColor]=\"(blockMeta.sections[s].fields[f].description | label) ? 'primary' : 'medium'\"\n            [placeholder]=\"'COMMON.TAP_TO_SELECT' | translate\"\n            [searchPlaceholder]=\"blockMeta.sections[s].fields[f].name | label\"\n            [hideIdFromUI]=\"true\"\n            [disabled]=\"disabled\"\n            [obligatory]=\"blockMeta.sections[s].fields[f].obligatory\"\n            [class.fieldHasError]=\"hasFieldAnError(errorPrefix + 'sections.' + s + '.' + f)\"\n            (select)=\"$event ? (sections[s][f] = $event?.value) : null\"\n            (iconSelect)=\"openDescription(s, f, $event)\"\n          />\n        }\n        @if (\n          blockMeta.sections[s].fields[f].type === CFT.STRING ||\n          blockMeta.sections[s].fields[f].type === CFT.NUMBER ||\n          blockMeta.sections[s].fields[f].type === CFT.TEXT\n        ) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError(errorPrefix + 'sections.' + s + '.' + f)\">\n            <ion-label position=\"stacked\" class=\"ion-text-wrap\">\n              {{ blockMeta.sections[s].fields[f].name | label }}\n              @if (blockMeta.sections[s].fields[f].obligatory && !disabled) {\n                <ion-text class=\"obligatoryDot\" />\n              }\n            </ion-label>\n            @if (!hideDescriptions && !disabled) {\n              <ion-button\n                fill=\"clear\"\n                slot=\"start\"\n                class=\"marginTop\"\n                [disabled]=\"!hasDescription(s, f)\"\n                [color]=\"(blockMeta.sections[s].fields[f].description | label) ? 'primary' : 'medium'\"\n                (click)=\"openDescription(s, f, $event)\"\n              >\n                <ion-icon name=\"help-circle-outline\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (blockMeta.sections[s].fields[f].type === CFT.STRING) {\n              <ion-input type=\"text\" [disabled]=\"disabled\" [(ngModel)]=\"sections[s][f]\" />\n            }\n            @if (blockMeta.sections[s].fields[f].type === CFT.NUMBER) {\n              <ion-input\n                type=\"number\"\n                [min]=\"blockMeta.sections[s].fields[f].min\"\n                [max]=\"blockMeta.sections[s].fields[f].max\"\n                [disabled]=\"disabled\"\n                [(ngModel)]=\"sections[s][f]\"\n              />\n            }\n            @if (blockMeta.sections[s].fields[f].type === CFT.TEXT) {\n              <ion-textarea [rows]=\"3\" [autoGrow]=\"true\" [disabled]=\"disabled\" [(ngModel)]=\"sections[s][f]\" />\n            }\n          </ion-item>\n        }\n        @if (blockMeta.sections[s].fields[f].type === CFT.BOOLEAN) {\n          <ion-item\n            [lines]=\"lines\"\n            [button]=\"!disabled\"\n            [class.fieldHasError]=\"hasFieldAnError(errorPrefix + 'sections.' + s + '.' + f)\"\n          >\n            @if (!hideDescriptions && !disabled) {\n              <ion-button\n                fill=\"clear\"\n                slot=\"start\"\n                [disabled]=\"!hasDescription(s, f)\"\n                [color]=\"(blockMeta.sections[s].fields[f].description | label) ? 'primary' : 'medium'\"\n                (click)=\"openDescription(s, f, $event)\"\n              >\n                <ion-icon name=\"help-circle-outline\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <ion-checkbox [disabled]=\"disabled\" [(ngModel)]=\"sections[s][f]\">\n              <span class=\"ion-text-wrap\">\n                {{ blockMeta.sections[s].fields[f].name | label }}\n                @if (blockMeta.sections[s].fields[f].obligatory && !disabled) {\n                  <ion-text class=\"obligatoryDot\" />\n                }\n              </span>\n            </ion-checkbox>\n          </ion-item>\n        }\n      </div>\n    }\n  </ion-list>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n  ModalController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonSearchbar,\n  IonContent,\n  IonGrid,\n  IonRow,\n  IonCol\n} from '@ionic/angular/standalone';\nimport { Ionicons, loopStringEnumValues } from 'idea-toolbox';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\n\n// @todo add pagination to grid\n@Component({\n  selector: 'idea-icons',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonSearchbar,\n    IonContent,\n    IonGrid,\n    IonRow,\n    IonCol\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" name=\"close\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          [placeholder]=\"searchPlaceholder || ('COMMON.SEARCH' | translate)\"\n          [debounce]=\"100\"\n          (ionInput)=\"search($event.target ? $event.target.value : '')\"\n        />\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-grid>\n        <ion-row class=\"ion-justify-content-center\">\n          @for (i of icons; track i) {\n            <ion-col class=\"ion-text-center\" [style.display]=\"shouldShowIcon[i] ? 'block' : 'none'\">\n              <ion-button size=\"large\" fill=\"clear\" color=\"dark\" (click)=\"select(i)\">\n                <ion-icon [name]=\"i\" />\n              </ion-button>\n            </ion-col>\n          }\n        </ion-row>\n      </ion-grid>\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-grid {\n        background: var(--ion-color-white);\n      }\n    `\n  ]\n})\nexport class IDEAIconsComponent {\n  private _modal = inject(ModalController);\n\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n\n  icons: Ionicons[];\n  /**\n   * Which icons to show, based on the current search. Note: this method is used instead of the usual, because the\n   * icons take a lot to redraw (so it's better to just hide them when not needed).\n   */\n  shouldShowIcon: { [icon: string]: boolean } = {};\n\n  ionViewDidEnter(): void {\n    // note: it will take a while for the icons to draw in the UI; @idea to improve\n    this.icons = loopStringEnumValues(Ionicons) as Ionicons[];\n    this.search();\n  }\n\n  search(toSearch?: string): void {\n    // acquire and clean the searchTerm\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n    // set visibility based on the search terms\n    this.shouldShowIcon = {};\n    this.icons.forEach(i => (this.shouldShowIcon[i] = i.toLowerCase().includes(toSearch)));\n  }\n\n  select(selection: Ionicons): void {\n    this._modal.dismiss(selection);\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  AlertController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonTitle,\n  IonContent,\n  IonList,\n  IonListHeader,\n  IonLabel,\n  IonText,\n  IonBadge,\n  IonItem,\n  IonInput,\n  IonReorderGroup,\n  IonReorder,\n  IonCol,\n  IonRow,\n  IonSelect,\n  IonSelectOption,\n  IonToggle\n} from '@ionic/angular/standalone';\nimport { CustomFieldMeta, CustomFieldTypes, Label } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEALabelerComponent } from '../labeler/labeler.component';\nimport { IDEAIconsComponent } from '../icons/icons.component';\n\n@Component({\n  selector: 'idea-custom-field-meta',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IonRow,\n    IonCol,\n    IonReorder,\n    IonReorderGroup,\n    IonInput,\n    IonItem,\n    IonBadge,\n    IonText,\n    IonLabel,\n    IonListHeader,\n    IonHeader,\n    IonList,\n    IonContent,\n    IonTitle,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonSelect,\n    IonSelectOption,\n    IonToggle\n  ],\n  templateUrl: 'customFieldMeta.component.html',\n  styleUrls: ['customFieldMeta.component.scss']\n})\nexport class IDEACustomFieldMetaComponent implements OnInit {\n  private _alert = inject(AlertController);\n  private _modal = inject(ModalController);\n  private _message = inject(IDEAMessageService);\n  _translate = inject(IDEATranslationsService);\n\n  /**\n   * The CustomFieldMeta to manage.\n   */\n  @Input() field: CustomFieldMeta;\n  /**\n   * Whether the component is enabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n\n  _field: CustomFieldMeta;\n  errors = new Set<string>();\n  FIELD_TYPES: string[] = Object.keys(CustomFieldTypes);\n  CFT = CustomFieldTypes;\n\n  ngOnInit(): void {\n    this._field = new CustomFieldMeta(this.field, this._translate.languages());\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  async editLabel(title: string, label: Label): Promise<void> {\n    const componentProps = { title, label, obligatory: true };\n    const modal = await this._modal.create({ component: IDEALabelerComponent, componentProps });\n    await modal.present();\n  }\n\n  async editIcon(): Promise<void> {\n    const modal = await this._modal.create({ component: IDEAIconsComponent });\n    modal.onDidDismiss().then(({ data }): void => {\n      if (data) this._field.icon = data;\n    });\n    await modal.present();\n  }\n\n  reorderOptions(ev: any): void {\n    this._field.enum = ev.detail.complete(this._field.enum);\n  }\n  async removeOptionByIndex(index: number): Promise<void> {\n    const doRemoveByIndex = (): void => {\n      const e = this._field.enum[index];\n      if (this._field.enumLabels) delete this._field.enumLabels[e];\n      this._field.enum.splice(index, 1);\n    };\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doRemoveByIndex }\n    ];\n    const header = this._translate._('COMMON.ARE_YOU_SURE');\n    const alert = await this._alert.create({ header, buttons });\n    await alert.present();\n  }\n  async addOption(): Promise<void> {\n    const doAddOption = (data: any): void => {\n      if (!data.enum) return;\n      // initialize the label\n      const label = new Label(null, this._translate.languages());\n      // set the translation in the default (obligatory) language\n      label[this._translate.getDefaultLang()] = data.enum;\n      // ensure backwards compatibility\n      if (!this._field.enumLabels) this._field.enumLabels = {};\n      this._field.enumLabels[data.enum] = label;\n      if (!this._field.enum) this._field.enum = new Array<string>();\n      // add the enum and configure the enumLabel\n      this._field.enum.push(data.enum);\n      this.editEnumLabel(data.enum);\n    };\n\n    const header = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_OPTION');\n    const message = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_OPTION_HINT');\n    const inputs: any = [{ name: 'enum', type: 'text' }];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doAddOption }\n    ];\n\n    const alert = await this._alert.create({ header, message, inputs, buttons });\n    await alert.present();\n\n    const firstInput: any = document.querySelector('ion-alert input');\n    firstInput.focus();\n  }\n\n  editEnumLabel(theEnum: string): void {\n    // ensere backwards compatibility\n    if (!this._field.enumLabels) this._field.enumLabels = {};\n    if (!this._field.enumLabels[theEnum])\n      this._field.enumLabels[theEnum] = new Label(null, this._translate.languages());\n    // set the translation in the default (obligatory) language\n    const label = this._field.enumLabels[theEnum];\n    if (!label[this._translate.getDefaultLang()]) label[this._translate.getDefaultLang()] = theEnum;\n\n    this.editLabel(theEnum, label);\n  }\n\n  save(): Promise<void> {\n    this.errors = new Set(this._field.validate(this._translate.languages()));\n    if (this.errors.size) return this._message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n    this.field.load(this._field, this._translate.languages());\n    this.close(true);\n  }\n\n  close(somethingChanged?: boolean): void {\n    this._modal.dismiss(somethingChanged);\n  }\n}\n","<ion-header>\n  <ion-toolbar color=\"ideaToolbar\">\n    <ion-buttons slot=\"start\">\n      <ion-button [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n        <ion-icon slot=\"icon-only\" icon=\"close\" />\n      </ion-button>\n    </ion-buttons>\n    <ion-title>{{ 'IDEA_COMMON.CUSTOM_FIELDS.MANAGE_FIELD' | translate }}</ion-title>\n    @if (!disabled) {\n      <ion-buttons slot=\"end\">\n        <ion-button [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.SAVE_CHANGES' | translate\" (click)=\"save()\">\n          <ion-icon slot=\"icon-only\" icon=\"checkmark-circle\" />\n        </ion-button>\n      </ion-buttons>\n    }\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <ion-list class=\"aList ion-padding\" [class.viewMode]=\"disabled\" [class.editMode]=\"!disabled\">\n    @if (disabled) {\n      <ion-list-header>\n        <ion-label>\n          <h2>\n            {{ _field.name | label }}\n            @if (_field.obligatory) {\n              <ion-text class=\"obligatoryDot\" />\n            }\n          </h2>\n          <ion-badge color=\"dark\">{{ 'IDEA_COMMON.CUSTOM_FIELDS.FIELDS_TYPES.' + _field.type | translate }}</ion-badge>\n          @if (\n            _field.default && (_field.type === CFT.STRING || _field.type === CFT.NUMBER || _field.type === CFT.ENUM)\n          ) {\n            <ion-badge color=\"medium\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.DEFAULT' | translate }}: {{ _field.default }}\n            </ion-badge>\n          }\n          @if (_field.type === CFT.NUMBER) {\n            <ion-badge color=\"medium\"> {{ 'IDEA_COMMON.CUSTOM_FIELDS.MIN' | translate }}: {{ _field.min }} </ion-badge>\n          }\n          @if (_field.type === CFT.NUMBER) {\n            <ion-badge color=\"medium\"> {{ 'IDEA_COMMON.CUSTOM_FIELDS.MAX' | translate }}: {{ _field.max }} </ion-badge>\n          }\n          <p>{{ _field.description | label }}</p>\n        </ion-label>\n        @if (_field.icon) {\n          <ion-icon [name]=\"_field.icon\" />\n        }\n      </ion-list-header>\n    }\n    @if (!disabled) {\n      <div>\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('name')\">\n          <ion-input\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [value]=\"_field.name | label\"\n            [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.NAME_HINT' | translate\"\n          >\n            <div slot=\"label\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.NAME' | translate }} <ion-text class=\"obligatoryDot\" />\n            </div>\n          </ion-input>\n          <ion-button\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'COMMON.EDIT' | translate\"\n            (click)=\"editLabel(_translate._('IDEA_COMMON.CUSTOM_FIELDS.NAME'), _field.name)\"\n          >\n            <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n          </ion-button>\n        </ion-item>\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('description')\">\n          <ion-input\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.DESCRIPTION' | translate\"\n            [value]=\"_field.description | label\"\n            [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.DESCRIPTION_HINT' | translate\"\n          />\n          <ion-button\n            slot=\"end\"\n            fill=\"clear\"\n            class=\"marginTop\"\n            [title]=\"'COMMON.EDIT' | translate\"\n            (click)=\"editLabel(_translate._('IDEA_COMMON.CUSTOM_FIELDS.DESCRIPTION'), _field.description)\"\n          >\n            <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n          </ion-button>\n        </ion-item>\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('icon')\">\n          <ion-input\n            type=\"text\"\n            readonly=\"true\"\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.ICON' | translate\"\n            [value]=\"_field.icon\"\n            [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.ICON_HINT' | translate\"\n          />\n          @if (_field.icon) {\n            <ion-badge slot=\"end\" color=\"dark\" class=\"marginTop\">\n              <ion-icon [name]=\"_field.icon\" />\n            </ion-badge>\n          }\n          <ion-button\n            fill=\"clear\"\n            slot=\"end\"\n            class=\"marginTop\"\n            [title]=\"'COMMON.EDIT' | translate\"\n            (click)=\"editIcon()\"\n          >\n            <ion-icon icon=\"pencil\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-item>\n        <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('type')\">\n          <ion-select\n            labelPlacement=\"stacked\"\n            [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.TYPE' | translate\"\n            [(ngModel)]=\"_field.type\"\n          >\n            @for (t of FIELD_TYPES; track t) {\n              <ion-select-option [value]=\"t\">\n                {{ 'IDEA_COMMON.CUSTOM_FIELDS.FIELDS_TYPES.' + t | translate }}\n              </ion-select-option>\n            }\n          </ion-select>\n        </ion-item>\n        @if (_field.type === CFT.STRING || _field.type === CFT.NUMBER) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('default')\">\n            <ion-input\n              type=\"text\"\n              labelPlacement=\"stacked\"\n              [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.DEFAULT' | translate\"\n              [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.DEFAULT_HINT' | translate\"\n              [(ngModel)]=\"_field.default\"\n            />\n          </ion-item>\n        }\n        @if (_field.type === CFT.ENUM) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('default')\">\n            <ion-select\n              labelPlacement=\"stacked\"\n              [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.DEFAULT_CHOICE' | translate\"\n              [(ngModel)]=\"_field.default\"\n            >\n              <ion-select-option [value]=\"null\">\n                {{ 'IDEA_COMMON.CUSTOM_FIELDS.NO_DEFAULT_CHOICE' | translate }}\n              </ion-select-option>\n              @for (e of _field.enum; track e) {\n                <ion-select-option [value]=\"e\">\n                  {{ _field.getEnumElement(e, _translate.getCurrentLang(), _translate.languages()) }}\n                </ion-select-option>\n              }\n            </ion-select>\n          </ion-item>\n        }\n        @if (_field.type === CFT.NUMBER) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('min')\">\n            <ion-input\n              type=\"number\"\n              labelPlacement=\"stacked\"\n              [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.MIN' | translate\"\n              [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.MIN_HINT' | translate\"\n              [(ngModel)]=\"_field.min\"\n            />\n          </ion-item>\n        }\n        @if (_field.type === CFT.NUMBER) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('max')\">\n            <ion-input\n              type=\"number\"\n              labelPlacement=\"stacked\"\n              [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.MAX' | translate\"\n              [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.MAX_HINT' | translate\"\n              [(ngModel)]=\"_field.max\"\n            />\n          </ion-item>\n        }\n      </div>\n    }\n  </ion-list>\n  @if (!disabled) {\n    <ion-list class=\"obligatoryToggleList\">\n      <ion-item lines=\"none\">\n        <ion-toggle justify=\"end\" [(ngModel)]=\"_field.obligatory\">\n          {{ 'IDEA_COMMON.CUSTOM_FIELDS.OBLIGATORY' | translate }}\n        </ion-toggle>\n      </ion-item>\n    </ion-list>\n  }\n  @if (_field.type === CFT.ENUM) {\n    <ion-list class=\"aList ion-padding\">\n      <ion-list-header>\n        <ion-label>\n          <h3>{{ 'IDEA_COMMON.CUSTOM_FIELDS.OPTIONS' | translate }}</h3>\n        </ion-label>\n      </ion-list-header>\n      @if (!_field.enum?.length) {\n        <ion-item lines=\"none\" [class.fieldHasError]=\"hasFieldAnError('enum')\">\n          <ion-label>\n            <i>{{ 'IDEA_COMMON.CUSTOM_FIELDS.NO_ELEMENTS' | translate }}</i>\n          </ion-label>\n        </ion-item>\n      }\n      <ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderOptions($event)\">\n        @for (e of _field.enum; track e; let index = $index) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('enum.' + index)\">\n            @if (!disabled) {\n              <ion-reorder slot=\"start\" />\n            }\n            <ion-label>{{ _field.getEnumElement(e, _translate.getCurrentLang(), _translate.languages()) }}</ion-label>\n            @if (!disabled) {\n              <ion-button slot=\"end\" fill=\"clear\" [title]=\"'COMMON.EDIT' | translate\" (click)=\"editEnumLabel(e)\">\n                <ion-icon icon=\"pencil\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (!disabled) {\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"danger\"\n                [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.REMOVE_OPTION' | translate\"\n                (click)=\"removeOptionByIndex(index)\"\n              >\n                <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n              </ion-button>\n            }\n          </ion-item>\n        }\n      </ion-reorder-group>\n      @if (!disabled) {\n        <ion-row>\n          <ion-col class=\"ion-padding ion-text-center\">\n            <ion-button\n              size=\"small\"\n              color=\"medium\"\n              [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.ADD_OPTION_HINT' | translate\"\n              (click)=\"addOption()\"\n            >\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.ADD_OPTION' | translate }}\n            </ion-button>\n          </ion-col>\n        </ion-row>\n      }\n    </ion-list>\n  }\n</ion-content>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  AlertController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonList,\n  IonReorderGroup,\n  IonTitle,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonInput,\n  IonText,\n  IonReorder,\n  IonBadge,\n  IonRow,\n  IonCol,\n  IonItemDivider\n} from '@ionic/angular/standalone';\nimport { CustomFieldMeta, CustomSectionMeta, Label, Suggestion } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEALabelerComponent } from '../labeler/labeler.component';\nimport { IDEASuggestionsComponent } from '../select/suggestions.component';\n\nimport { IDEACustomFieldMetaComponent } from './customFieldMeta.component';\n\n@Component({\n  selector: 'idea-custom-section-meta',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IonItemDivider,\n    IonCol,\n    IonRow,\n    IonBadge,\n    IonReorder,\n    IonText,\n    IonInput,\n    IonItem,\n    IonLabel,\n    IonListHeader,\n    IonReorderGroup,\n    IonList,\n    IonContent,\n    IonIcon,\n    IonButton,\n    IonButtons,\n    IonToolbar,\n    IonHeader,\n    IonTitle\n  ],\n  templateUrl: 'customSectionMeta.component.html',\n  styleUrls: ['customSectionMeta.component.scss']\n})\nexport class IDEACustomSectionMetaComponent implements OnInit {\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The CustomSectionMeta to manage.\n   */\n  @Input() section: CustomSectionMeta;\n  /**\n   * Whether to hide the headers of the section (in case we just want to display/manage the fields).\n   */\n  @Input() hideHeaders = false;\n  /**\n   * Whether the CustomSectionMeta should manage the display template or it should be hidden.\n   */\n  @Input() useDisplayTemplate = false;\n  /**\n   * Whether the compoent is enabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n\n  _section: CustomSectionMeta;\n  errors = new Set<string>();\n  DISPLAY_TEMPLATE_MAX_NUM_FIELD_PER_ROW = 3;\n\n  ngOnInit(): void {\n    this._section = new CustomSectionMeta(this.section, this._translate.languages());\n    // ensure backwards compatibility\n    if (this.useDisplayTemplate && !this._section.displayTemplate) this._section.displayTemplate = [];\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  async editName(): Promise<void> {\n    // since the name is optional, set it if it's requested but not set\n    if (!this._section.name) {\n      this._section.name = new Label(null, this._translate.languages());\n      this._section.name[this._translate.getDefaultLang()] = '-';\n    }\n    await this.editLabel(this._translate._('IDEA_COMMON.CUSTOM_FIELDS.NAME'), this._section.name);\n  }\n  async editDescription(): Promise<void> {\n    // since the description is optional, set it if it's requested but not set\n    if (!this._section.description) {\n      this._section.description = new Label(null, this._translate.languages());\n      this._section.description[this._translate.getDefaultLang()] = '-';\n    }\n    await this.editLabel(this._translate._('IDEA_COMMON.CUSTOM_FIELDS.DESCRIPTION'), this._section.description);\n  }\n  private async editLabel(title: string, label: Label): Promise<void> {\n    const componentProps = { title, label, obligatory: true };\n    const modal = await this._modal.create({ component: IDEALabelerComponent, componentProps });\n    await modal.present();\n  }\n  reorderFieldsLegend(ev: any): void {\n    this._section.fieldsLegend = ev.detail.complete(this._section.fieldsLegend);\n  }\n  async openField(f: string): Promise<void> {\n    const componentProps = { field: this._section.fields[f], disabled: this.disabled, lines: this.lines };\n    const modal = await this._modal.create({ component: IDEACustomFieldMetaComponent, componentProps });\n    await modal.present();\n  }\n  async removeField(f: string, ev: any): Promise<void> {\n    if (ev) ev.stopPropagation();\n\n    const doRemoveField = (): void => {\n      this._section.fieldsLegend.splice(this._section.fieldsLegend.indexOf(f), 1);\n      delete this._section.fields[f];\n      // filter out of the displayTemplate the fields which aren't in the fieldsLegend\n      if (this._section.displayTemplate)\n        this._section.displayTemplate.forEach(\n          (row, i, arr): string[] => (arr[i] = row.filter(el => this._section.fieldsLegend.some(field => field === el)))\n        );\n    };\n    const header = this._translate._('COMMON.ARE_YOU_SURE');\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doRemoveField }\n    ];\n\n    const alert = await this._alert.create({ header, buttons });\n    await alert.present();\n  }\n  async addNewField(): Promise<void> {\n    const doAddNewField = (data: any): Promise<void> => {\n      const name = data ? data.name.trim() : null;\n      if (!name) return;\n      // clean the key to avoid weird chars in the JSON\n      const key = name.replace(/[^\\w]/g, '');\n      if (!key.trim()) return;\n      // check wheter the key is unique\n      if (this._section.fieldsLegend.some(x => x === key))\n        return this._message.error('IDEA_COMMON.CUSTOM_FIELDS.DUPLICATED_KEY');\n      // initialize a new field\n      const field = new CustomFieldMeta(null, this._translate.languages());\n      // initialize the name of the field\n      field.name = new Label(null, this._translate.languages());\n      field.name[this._translate.getDefaultLang()] = name;\n      // add the field to the section\n      this._section.fields[key] = field;\n      this._section.fieldsLegend.push(key);\n      // open the field to configure it\n      this.openField(key);\n    };\n    const header = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_FIELD');\n    const message = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_FIELD_HINT');\n    const inputs: any = [{ name: 'name', type: 'text' }];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doAddNewField }\n    ];\n\n    const alert = await this._alert.create({ header, message, inputs, buttons });\n    await alert.present();\n\n    const firstInput: HTMLInputElement = document.querySelector('ion-alert input');\n    firstInput.focus();\n  }\n\n  reorderDisplayTemplateRows(ev: any): void {\n    this._section.displayTemplate = ev.detail.complete(this._section.displayTemplate);\n  }\n  isDisplayTemplateRowFull(row: number): boolean {\n    return this._section.displayTemplate[row].length === this.DISPLAY_TEMPLATE_MAX_NUM_FIELD_PER_ROW;\n  }\n  addNewDisplayTemplateRow(): void {\n    this._section.displayTemplate.push([]);\n  }\n  async addFieldToDisplayTemplateRow(row: number): Promise<void> {\n    const componentProps = {\n      data: this._section.fieldsLegend.map(\n        x => new Suggestion({ value: x, name: this._translate._label(this._section.fields[x].name) })\n      ),\n      searchPlaceholder: this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_FIELD'),\n      hideIdFromUI: true,\n      hideClearButton: true\n    };\n\n    const modal = await this._modal.create({ component: IDEASuggestionsComponent, componentProps });\n    modal.onDidDismiss().then(selection => {\n      const field = selection && selection.data ? selection.data.value : null;\n      if (field) this._section.displayTemplate[row].push(field);\n    });\n    await modal.present();\n  }\n\n  removeFieldToDisplayTemplateRow(row: number, field: string): void {\n    this._section.displayTemplate[row].splice(this._section.displayTemplate[row].indexOf(field), 1);\n  }\n  private cleanEmptyDisplayTemplateRows(): void {\n    this._section.displayTemplate = this._section.displayTemplate.filter(r => r.length);\n  }\n\n  save(): Promise<void> {\n    this.errors = new Set(this._section.validate(this._translate.languages()));\n    if (this.errors.size) return this._message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n\n    if (this.useDisplayTemplate) this.cleanEmptyDisplayTemplateRows();\n\n    this.section.load(this._section, this._translate.languages());\n    this.close();\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","<ion-header>\n  <ion-toolbar color=\"ideaToolbar\">\n    <ion-buttons slot=\"start\">\n      <ion-button [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n        <ion-icon slot=\"icon-only\" icon=\"close\" />\n      </ion-button>\n    </ion-buttons>\n    <ion-title>{{ 'IDEA_COMMON.CUSTOM_FIELDS.MANAGE_SECTION' | translate }}</ion-title>\n    @if (!disabled) {\n      <ion-buttons slot=\"end\">\n        <ion-button [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.SAVE_CHANGES' | translate\" (click)=\"save()\">\n          <ion-icon slot=\"icon-only\" icon=\"checkmark-circle\" />\n        </ion-button>\n      </ion-buttons>\n    }\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <div [class.viewMode]=\"disabled\" [class.editMode]=\"!disabled\">\n    <ion-list class=\"aList ion-padding\">\n      @if (!hideHeaders) {\n        @if (disabled) {\n          <ion-list-header>\n            <ion-label>\n              <h2>{{ _section.name | label }}</h2>\n              <p>{{ _section.description | label }}</p>\n            </ion-label>\n          </ion-list-header>\n        }\n        @if (!disabled) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('name')\">\n            <ion-input\n              type=\"text\"\n              readonly=\"true\"\n              labelPlacement=\"stacked\"\n              [value]=\"_section.name | label\"\n              [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.SECTION_NAME_HINT' | translate\"\n            >\n              <div slot=\"label\">\n                {{ 'IDEA_COMMON.CUSTOM_FIELDS.NAME' | translate }}\n                @if (!disabled) {\n                  <ion-text class=\"obligatoryDot\" />\n                }\n              </div>\n            </ion-input>\n            <ion-button\n              slot=\"end\"\n              fill=\"clear\"\n              class=\"marginTop\"\n              [title]=\"'COMMON.EDIT' | translate\"\n              (click)=\"editName()\"\n            >\n              <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n            </ion-button>\n          </ion-item>\n        }\n        @if (!disabled) {\n          <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError('description')\">\n            <ion-input\n              type=\"text\"\n              readonly=\"true\"\n              labelPlacement=\"stacked\"\n              [label]=\"'IDEA_COMMON.CUSTOM_FIELDS.DESCRIPTION' | translate\"\n              [value]=\"_section.description | label\"\n              [placeholder]=\"'IDEA_COMMON.CUSTOM_FIELDS.SECTION_DESCRIPTION_HINT' | translate\"\n            />\n            <ion-button\n              slot=\"end\"\n              fill=\"clear\"\n              class=\"marginTop\"\n              [title]=\"'COMMON.EDIT' | translate\"\n              (click)=\"editDescription()\"\n            >\n              <ion-icon slot=\"icon-only\" icon=\"pencil\" />\n            </ion-button>\n          </ion-item>\n        }\n        <ion-list-header>\n          <ion-label>\n            <h3>{{ 'IDEA_COMMON.CUSTOM_FIELDS.SECTION_FIELDS' | translate }}</h3>\n          </ion-label>\n        </ion-list-header>\n      }\n      @if (!_section.fieldsLegend.length) {\n        <ion-item lines=\"none\">\n          <ion-label>\n            <i>{{ 'IDEA_COMMON.CUSTOM_FIELDS.NO_ELEMENTS' | translate }}</i>\n          </ion-label>\n        </ion-item>\n      }\n      <ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderFieldsLegend($event)\">\n        @for (f of _section.fieldsLegend; track f) {\n          <ion-item [button]=\"true\" [lines]=\"lines\" (click)=\"openField(f)\">\n            @if (!disabled) {\n              <ion-reorder slot=\"start\" />\n            }\n            <ion-label>\n              {{ _section.fields[f].name | label }}\n              @if (_section.fields[f].obligatory) {\n                <ion-text class=\"obligatoryDot\" />\n              }\n              <p>{{ _section.fields[f].description | label }}</p>\n            </ion-label>\n            <ion-badge slot=\"end\" color=\"medium\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.FIELDS_TYPES.' + _section.fields[f].type | translate }}\n            </ion-badge>\n            @if (!disabled) {\n              <ion-button slot=\"end\" fill=\"clear\" color=\"danger\" (click)=\"removeField(f, $event)\">\n                <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n              </ion-button>\n            }\n          </ion-item>\n        }\n      </ion-reorder-group>\n      @if (!disabled) {\n        <ion-row>\n          <ion-col class=\"ion-padding ion-text-center\">\n            <ion-button size=\"small\" color=\"primary\" (click)=\"addNewField()\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.ADD_FIELD' | translate }}\n            </ion-button>\n          </ion-col>\n        </ion-row>\n      }\n    </ion-list>\n    @if (useDisplayTemplate) {\n      <ion-list class=\"aList ion-padding\">\n        <ion-list-header>\n          <ion-label>\n            <h3>{{ 'IDEA_COMMON.CUSTOM_FIELDS.DISPLAY_TEMPLATE' | translate }}</h3>\n            <p>{{ 'IDEA_COMMON.CUSTOM_FIELDS.DISPLAY_TEMPLATE_I' | translate }}</p>\n          </ion-label>\n        </ion-list-header>\n        @if (!_section.displayTemplate.length) {\n          <ion-item lines=\"none\">\n            <ion-label>\n              <i>{{ 'IDEA_COMMON.CUSTOM_FIELDS.NO_ELEMENTS' | translate }}</i>\n            </ion-label>\n          </ion-item>\n        }\n        <ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderDisplayTemplateRows($event)\">\n          @for (row of _section.displayTemplate; track row; let rowIndex = $index) {\n            <div class=\"displayTemplateRow\">\n              <ion-item-divider>{{ 'IDEA_COMMON.CUSTOM_FIELDS.ROW' | translate }} {{ rowIndex + 1 }} </ion-item-divider>\n              <ion-item [lines]=\"lines\">\n                @if (!disabled) {\n                  <ion-reorder slot=\"start\" />\n                }\n                <ion-label class=\"ion-text-wrap\">\n                  @for (field of row; track field) {\n                    <div>\n                      <ion-button\n                        size=\"small\"\n                        fill=\"outline\"\n                        color=\"medium\"\n                        [disabled]=\"disabled\"\n                        (click)=\"removeFieldToDisplayTemplateRow(rowIndex, field)\"\n                      >\n                        @if (!disabled) {\n                          <ion-icon icon=\"close\" slot=\"start\" />\n                        }\n                        {{ _section.fields[field].name | label }}\n                      </ion-button>\n                    </div>\n                  }\n                </ion-label>\n                @if (!disabled && !isDisplayTemplateRowFull(rowIndex)) {\n                  <ion-button\n                    slot=\"end\"\n                    fill=\"clear\"\n                    color=\"primary\"\n                    [title]=\"'IDEA_COMMON.CUSTOM_FIELDS.ADD_FIELD' | translate\"\n                    (click)=\"addFieldToDisplayTemplateRow(rowIndex)\"\n                  >\n                    <ion-icon icon=\"add-circle-outline\" />\n                  </ion-button>\n                }\n              </ion-item>\n            </div>\n          }\n        </ion-reorder-group>\n        @if (!disabled) {\n          <ion-row>\n            <ion-col class=\"ion-padding ion-text-center\">\n              <ion-button size=\"small\" color=\"medium\" (click)=\"addNewDisplayTemplateRow()\">\n                {{ 'IDEA_COMMON.CUSTOM_FIELDS.ADD_ROW' | translate }}\n              </ion-button>\n            </ion-col>\n          </ion-row>\n        }\n      </ion-list>\n    }\n  </div>\n</ion-content>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport {\n  ModalController,\n  AlertController,\n  IonReorderGroup,\n  IonItem,\n  IonLabel,\n  IonReorder,\n  IonButton,\n  IonIcon,\n  IonRow,\n  IonCol\n} from '@ionic/angular/standalone';\nimport { CustomBlockMeta, CustomSectionMeta, Label } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEAMessageService } from '../message.service';\n\nimport { IDEACustomSectionMetaComponent } from './customSectionMeta.component';\n\n@Component({\n  selector: 'idea-custom-block-meta',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IonCol,\n    IonRow,\n    IonIcon,\n    IonButton,\n    IonReorder,\n    IonLabel,\n    IonItem,\n    IonReorderGroup\n  ],\n  templateUrl: 'customBlockMeta.component.html',\n  styleUrls: ['customBlockMeta.component.scss']\n})\nexport class IDEACustomBlockMetaComponent {\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The CustomBlockMeta to manage.\n   */\n  @Input() block: CustomBlockMeta;\n  /**\n   * Whether the custom sections should manage the display template or it should be hidden.\n   */\n  @Input() useDisplayTemplate = false;\n  /**\n   * Whether the component is enabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n\n  reorderSectionsLegend(ev: any): void {\n    this.block.sectionsLegend = ev.detail.complete(this.block.sectionsLegend);\n  }\n\n  async openSection(s: string): Promise<void> {\n    const componentProps = {\n      section: this.block.sections[s],\n      useDisplayTemplate: this.useDisplayTemplate,\n      disabled: this.disabled,\n      lines: this.lines\n    };\n    const modal = await this._modal.create({ component: IDEACustomSectionMetaComponent, componentProps });\n    await modal.present();\n  }\n\n  async removeSection(s: string, ev: any): Promise<void> {\n    if (ev) ev.stopPropagation();\n\n    const doRemoveSection = (): void => {\n      this.block.sectionsLegend.splice(this.block.sectionsLegend.indexOf(s), 1);\n      delete this.block.sections[s];\n    };\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doRemoveSection }\n    ];\n    const header = this._translate._('COMMON.ARE_YOU_SURE');\n    const alert = await this._alert.create({ header, buttons });\n    await alert.present();\n  }\n\n  async addNewSection(): Promise<void> {\n    const doAddNewSection = (data: any): Promise<void> => {\n      if (!data.name) return;\n      const name = data ? data.name.trim() : null;\n      if (!name) return;\n      // clean the key to avoid weird chars in the JSON\n      const key = name.replace(/[^\\w]/g, '');\n      if (!key.trim()) return;\n      // check wheter the key is unique\n      if (this.block.sectionsLegend.some(x => x === key))\n        return this._message.error('IDEA_COMMON.CUSTOM_FIELDS.DUPLICATED_KEY');\n      // initialize a new section\n      const section = new CustomSectionMeta(null, this._translate.languages());\n      // initialize the name of the section\n      section.name = new Label(null, this._translate.languages());\n      section.name[this._translate.getDefaultLang()] = name;\n      // add the section to the block\n      this.block.sections[key] = section;\n      this.block.sectionsLegend.push(key);\n      // open the section to configure it\n      this.openSection(key);\n    };\n\n    const header = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_SECTION');\n    const message = this._translate._('IDEA_COMMON.CUSTOM_FIELDS.ADD_SECTION_HINT');\n    const inputs: any = [{ name: 'name', type: 'text' }];\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      { text: this._translate._('COMMON.CONFIRM'), handler: doAddNewSection }\n    ];\n\n    const alert = await this._alert.create({ header, message, inputs, buttons });\n    await alert.present();\n\n    const firstInput: any = document.querySelector('ion-alert input');\n    firstInput.focus();\n  }\n}\n","@if (!block.sectionsLegend.length) {\n  <ion-item lines=\"none\">\n    <ion-label>\n      <i>{{ 'IDEA_COMMON.CUSTOM_FIELDS.NO_ELEMENTS' | translate }}</i>\n    </ion-label>\n  </ion-item>\n}\n<ion-reorder-group [disabled]=\"disabled\" (ionItemReorder)=\"reorderSectionsLegend($event)\">\n  @for (s of block.sectionsLegend; track s) {\n    <ion-item button detail [lines]=\"lines\" (click)=\"openSection(s)\">\n      @if (!disabled) {\n        <ion-reorder slot=\"start\" />\n      }\n      <ion-label>\n        {{ block.sections[s].name | label }}\n        <p>{{ block.sections[s].description | label }}</p>\n      </ion-label>\n      @if (!disabled) {\n        <ion-button slot=\"end\" fill=\"clear\" color=\"danger\" (click)=\"removeSection(s, $event)\">\n          <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n        </ion-button>\n      }\n    </ion-item>\n  }\n</ion-reorder-group>\n@if (!disabled) {\n  <ion-row>\n    <ion-col class=\"ion-padding ion-text-center\">\n      <ion-button size=\"small\" color=\"primary\" (click)=\"addNewSection()\">\n        {{ 'IDEA_COMMON.CUSTOM_FIELDS.ADD_SECTION' | translate }}\n      </ion-button>\n    </ion-col>\n  </ion-row>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  AlertController,\n  IonItem,\n  IonLabel,\n  IonText,\n  IonButton,\n  IonIcon,\n  IonInput,\n  IonTextarea,\n  IonCheckbox\n} from '@ionic/angular/standalone';\nimport { CustomFieldTypes, CustomSectionMeta } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEASelectComponent } from '../select/select.component';\n\n@Component({\n  selector: 'idea-custom-section',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEASelectComponent,\n    IonIcon,\n    IonButton,\n    IonText,\n    IonLabel,\n    IonItem,\n    IonInput,\n    IonTextarea,\n    IonCheckbox\n  ],\n  templateUrl: 'customSection.component.html',\n  styleUrls: ['customSection.component.scss']\n})\nexport class IDEACustomSectionComponent {\n  private _alert = inject(AlertController);\n  _translate = inject(IDEATranslationsService);\n\n  /**\n   * The custom fields to manage.\n   */\n  @Input() fields: any;\n  /**\n   * The CustomSectionMeta that describe the custom fields.\n   */\n  @Input() sectionMeta: CustomSectionMeta;\n  /**\n   * Whether the component is enabled or not.\n   */\n  @Input() disabled = false;\n  /**\n   * Lines preferences for the component.\n   */\n  @Input() lines: string;\n  /**\n   * Whether to hide the descriptions (buttons).\n   */\n  @Input() hideDescriptions = false;\n  /**\n   * Show errors as reported from the parent component.\n   */\n  @Input() errors = new Set();\n  /**\n   * Add a custom prefix to the error string identifier.\n   */\n  @Input() errorPrefix = '';\n\n  CFT = CustomFieldTypes;\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n\n  async openDescription(fieldKey: string, event: any): Promise<void> {\n    if (event) event.stopPropagation();\n    const message = this._translate._label(this.sectionMeta.fields[fieldKey].description);\n    if (!message) return;\n\n    const header = this._translate._label(this.sectionMeta.fields[fieldKey].name);\n    const alert = await this._alert.create({ header, message, buttons: ['OK'], cssClass: 'alertLongOptions' });\n    await alert.present();\n  }\n}\n","@for (f of sectionMeta.fieldsLegend; track f) {\n  <div>\n    @if (sectionMeta.fields[f].type === CFT.ENUM) {\n      <idea-select\n        [data]=\"sectionMeta.fields[f].getEnumAsSuggestion(_translate.getCurrentLang(), _translate.languages())\"\n        [lines]=\"lines\"\n        [description]=\"\n          sectionMeta.fields[f].getEnumElement(fields[f], _translate.getCurrentLang(), _translate.languages())\n        \"\n        [label]=\"sectionMeta.fields[f].name | label\"\n        [icon]=\"!hideDescriptions && !disabled ? 'help-circle-outline' : null\"\n        [iconColor]=\"(sectionMeta.fields[f].description | label) ? 'primary' : 'medium'\"\n        [placeholder]=\"'COMMON.TAP_TO_SELECT' | translate\"\n        [searchPlaceholder]=\"sectionMeta.fields[f].name | label\"\n        [hideIdFromUI]=\"true\"\n        [disabled]=\"disabled\"\n        [obligatory]=\"sectionMeta.fields[f].obligatory\"\n        [class.fieldHasError]=\"hasFieldAnError(errorPrefix + f)\"\n        (select)=\"$event ? (fields[f] = $event?.value) : null\"\n        (iconSelect)=\"openDescription(f, $event)\"\n      />\n    }\n    @if (\n      sectionMeta.fields[f].type === CFT.STRING ||\n      sectionMeta.fields[f].type === CFT.NUMBER ||\n      sectionMeta.fields[f].type === CFT.TEXT\n    ) {\n      <ion-item [lines]=\"lines\" [class.fieldHasError]=\"hasFieldAnError(errorPrefix + f)\">\n        <ion-label position=\"stacked\" class=\"ion-text-wrap\">\n          {{ sectionMeta.fields[f].name | label }}\n          @if (sectionMeta.fields[f].obligatory && !disabled) {\n            <ion-text class=\"obligatoryDot\" />\n          }\n        </ion-label>\n        @if (!hideDescriptions && !disabled) {\n          <ion-button\n            fill=\"clear\"\n            slot=\"start\"\n            class=\"marginTop\"\n            [color]=\"(sectionMeta.fields[f].description | label) ? 'primary' : 'medium'\"\n            (click)=\"openDescription(f, $event)\"\n          >\n            <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\" />\n          </ion-button>\n        }\n        @if (sectionMeta.fields[f].type === CFT.STRING) {\n          <ion-input type=\"text\" [disabled]=\"disabled\" [(ngModel)]=\"fields[f]\" />\n        }\n        @if (sectionMeta.fields[f].type === CFT.NUMBER) {\n          <ion-input\n            type=\"number\"\n            [min]=\"sectionMeta.fields[f].min\"\n            [max]=\"sectionMeta.fields[f].max\"\n            [disabled]=\"disabled\"\n            [(ngModel)]=\"fields[f]\"\n          />\n        }\n        @if (sectionMeta.fields[f].type === CFT.TEXT) {\n          <ion-textarea [rows]=\"3\" [autoGrow]=\"true\" [disabled]=\"disabled\" [(ngModel)]=\"fields[f]\" />\n        }\n      </ion-item>\n    }\n    @if (sectionMeta.fields[f].type === CFT.BOOLEAN) {\n      <ion-item [lines]=\"lines\" [button]=\"!disabled\" [class.fieldHasError]=\"hasFieldAnError(errorPrefix + f)\">\n        @if (!hideDescriptions && !disabled) {\n          <ion-button\n            fill=\"clear\"\n            slot=\"start\"\n            [color]=\"(sectionMeta.fields[f].description | label) ? 'primary' : 'medium'\"\n            (click)=\"openDescription(f, $event)\"\n          >\n            <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\" />\n          </ion-button>\n        }\n        <ion-checkbox [disabled]=\"disabled\" [(ngModel)]=\"fields[f]\">\n          <span class=\"ion-text-wrap\">\n            {{ sectionMeta.fields[f].name | label }}\n            @if (sectionMeta.fields[f].obligatory && !disabled) {\n              <ion-text class=\"obligatoryDot\" />\n            }\n          </span>\n        </ion-checkbox>\n      </ion-item>\n    }\n  </div>\n}\n","import { Injectable, PipeTransform, Pipe } from '@angular/core';\n\n/**\n * Higlighted variables.\n */\n@Pipe({ name: 'highlight', standalone: true })\n@Injectable()\nexport class IDEAHiglightedVariablesPipe implements PipeTransform {\n  transform(value: string, variables: string[]): any {\n    if (variables && variables.length)\n      variables.forEach(v => (value = value.replace(new RegExp(v, 'g'), str => str.small())));\n    return value;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport {\n  AlertController,\n  ModalController,\n  IonSearchbar,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonList,\n  IonInfiniteScroll,\n  IonInfiniteScrollContent,\n  IonItem,\n  IonLabel\n} from '@ionic/angular/standalone';\nimport { Label } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALabelerComponent } from '../labeler/labeler.component';\n\nconst MAX_PAGE_SIZE = 24;\n\n@Component({\n  selector: 'idea-list-elements',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IonSearchbar,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonContent,\n    IonList,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonItem,\n    IonLabel\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'IDEA_COMMON.LIST.CANCEL_AND_CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" icon=\"chevron-down\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-searchbar\n          #searchbar\n          [placeholder]=\"searchPlaceholder || ('COMMON.SEARCH' | translate)\"\n          (ionInput)=\"search($event.target.value)\"\n        />\n        <ion-buttons slot=\"end\">\n          <ion-button [title]=\"'IDEA_COMMON.LIST.NEW_ELEMENT' | translate\" (click)=\"addElement()\">\n            <ion-icon icon=\"add\" slot=\"icon-only\" />\n          </ion-button>\n          <ion-button [title]=\"'IDEA_COMMON.LIST.SAVE_AND_CLOSE' | translate\" (click)=\"close(true)\">\n            <ion-icon icon=\"checkmark-circle\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-list class=\"listElements\">\n        @if (!filteredList.length) {\n          <ion-item lines=\"none\">\n            <ion-label>\n              <i>{{ noElementsFoundText || ('IDEA_COMMON.LIST.NO_ELEMENTS_FOUND' | translate) }}</i>\n            </ion-label>\n          </ion-item>\n        }\n        @for (element of filteredList; track element) {\n          <ion-item class=\"listElement\">\n            <ion-label>{{ getElementName(element) }}</ion-label>\n            @if (labelElements) {\n              <ion-button slot=\"end\" fill=\"clear\" (click)=\"editElement(element)\">\n                <ion-icon icon=\"pencil-sharp\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <ion-button\n              slot=\"end\"\n              fill=\"clear\"\n              color=\"danger\"\n              [title]=\"'IDEA_COMMON.LIST.DELETE_ELEMENT' | translate\"\n              (click)=\"removeElement(element)\"\n            >\n              <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-item>\n        }\n      </ion-list>\n      <ion-infinite-scroll (ionInfinite)=\"search(searchbar?.value, $event.target)\">\n        <ion-infinite-scroll-content />\n      </ion-infinite-scroll>\n    </ion-content>\n  `\n})\nexport class IDEAListElementsComponent implements OnInit {\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * It should be read only until the component closure.\n   */\n  @Input() data: (Label | string)[];\n  /**\n   * Whether the elements are labels or simple strings.\n   */\n  @Input() labelElements: boolean;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  @Input() noElementsFoundText: string;\n\n  workingData: (Label | string)[];\n  filteredList: (Label | string)[];\n  currentPage: number;\n\n  @ViewChild('searchbar') searchbar: IonSearchbar;\n\n  ngOnInit(): void {\n    this.workingData = Array.from(this.data || (this.labelElements ? new Array<Label>() : new Array<string>()));\n    this.search();\n  }\n\n  getElementName(x: Label | string): any {\n    return this.labelElements\n      ? (x as Label).translate(this._translate.getCurrentLang(), this._translate.languages())\n      : x;\n  }\n\n  search(toSearch?: string, scrollToNextPage?: IonInfiniteScroll): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredList = (this.workingData || [])\n      .filter(x =>\n        toSearch\n          .split(' ')\n          .every(searchTerm => [this.getElementName(x)].filter(f => f).some(f => f.toLowerCase().includes(searchTerm)))\n      )\n      .sort();\n\n    if (scrollToNextPage) this.currentPage++;\n    else this.currentPage = 0;\n    this.filteredList = this.filteredList.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n\n    if (scrollToNextPage) setTimeout((): Promise<void> => scrollToNextPage.complete(), 100);\n  }\n\n  addElement(): void {\n    if (this.labelElements) {\n      const l = new Label(null, this._translate.languages());\n      l[this._translate.getDefaultLang()] = '-';\n      this.workingData.push(l);\n      this.editLabel(l);\n    } else this.addStrElement();\n  }\n  editElement(element: Label | string): void {\n    if (this.labelElements) this.editLabel(element as Label);\n  }\n  removeElement(element: Label | string): void {\n    this.workingData.splice(this.workingData.indexOf(element), 1);\n    this.search(this.searchbar ? this.searchbar.value : '');\n  }\n\n  async addStrElement(): Promise<void> {\n    const alert = await this._alert.create({\n      header: this._translate._('IDEA_COMMON.LIST.NEW_ELEMENT'),\n      inputs: [{ type: 'text', name: 'element', placeholder: this._translate._('IDEA_COMMON.LIST.ELEMENT') }],\n      buttons: [\n        { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n        {\n          text: this._translate._('COMMON.SAVE'),\n          handler: ({ element }): void => {\n            if (element && element.trim()) {\n              this.workingData.push(element);\n              this.search(this.searchbar ? this.searchbar.value : '');\n            }\n          }\n        }\n      ]\n    });\n    await alert.present();\n    const firstInput: HTMLInputElement = document.querySelector('ion-alert input');\n    if (firstInput) firstInput.focus();\n  }\n  async editLabel(label: Label): Promise<void> {\n    const modal = await this._modal.create({\n      component: IDEALabelerComponent,\n      componentProps: { label, obligatory: true }\n    });\n    modal.onDidDismiss().then((): void => this.search(this.searchbar ? this.searchbar.value : ''));\n    modal.present();\n  }\n\n  close(save?: boolean): void {\n    // empty and refill the array without losing the reference\n    if (save) {\n      this.data.length = 0;\n      this.workingData.sort().forEach(x => this.data.push(x));\n    }\n    this._modal.dismiss(save ? this.data : null);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { ModalController, IonItem, IonButton, IonIcon, IonLabel, IonText } from '@ionic/angular/standalone';\nimport { Label } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\nimport { IDEAListElementsComponent } from './listElements.component';\n\n@Component({\n  selector: 'idea-list',\n  standalone: true,\n  imports: [CommonModule, IonItem, IonButton, IonIcon, IonLabel, IonText],\n  template: `\n    <ion-item\n      class=\"listItem\"\n      [color]=\"color\"\n      [lines]=\"lines\"\n      [button]=\"!disabled\"\n      [disabled]=\"isOpening\"\n      [title]=\"placeholder || ''\"\n      [class.withLabel]=\"label\"\n      (click)=\"openList()\"\n    >\n      @if (icon) {\n        <ion-button\n          fill=\"clear\"\n          slot=\"start\"\n          [color]=\"iconColor\"\n          [class.marginTop]=\"label\"\n          (click)=\"doIconSelect($event)\"\n        >\n          <ion-icon [icon]=\"icon\" slot=\"icon-only\" />\n        </ion-button>\n      }\n      @if (label) {\n        <ion-label position=\"stacked\" [class.selectable]=\"!disabled\">\n          {{ label }}\n          @if (obligatory && !disabled) {\n            <ion-text class=\"obligatoryDot\" />\n          }\n        </ion-label>\n      }\n      <ion-label\n        class=\"description\"\n        [class.selectable]=\"!disabled\"\n        [class.placeholder]=\"!getPreview() || noPreviewText\"\n      >\n        {{ getPreview() || placeholder }}\n      </ion-label>\n      @if (!disabled) {\n        <ion-icon slot=\"end\" icon=\"caret-down\" class=\"selectIcon\" [class.selectable]=\"!disabled\" />\n      }\n    </ion-item>\n  `,\n  styles: [\n    `\n      .listItem {\n        min-height: 48px;\n        height: auto;\n        .description {\n          margin: 10px 0;\n          height: 20px;\n          line-height: 20px;\n          width: 100%;\n        }\n        .placeholder {\n          color: var(--ion-color-medium);\n        }\n        .selectIcon {\n          margin: 0;\n          padding-left: 4px;\n          font-size: 0.8em;\n          color: var(--ion-color-medium);\n        }\n      }\n      .listItem.withLabel {\n        min-height: 58px;\n        height: auto;\n        .selectIcon {\n          padding-top: 25px;\n        }\n        ion-icon[slot='start'] {\n          margin-top: 16px;\n        }\n      }\n      .selectable {\n        cursor: pointer;\n      }\n    `\n  ]\n})\nexport class IDEAListComponent {\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The list to manage.\n   */\n  @Input() data: (Label | string)[] = [];\n  /**\n   * Whether the elements are labels or simple strings.\n   */\n  @Input() labelElements: boolean;\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the searchbar.\n   */\n  @Input() searchPlaceholder: string;\n  /**\n   * Text to show when there isn't a result.\n   */\n  @Input() noElementsFoundText: string;\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  @Input() noPreviewText: string;\n  /**\n   * A placeholder for the field.\n   */\n  @Input() placeholder: string;\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * The color for the component.\n   */\n  @Input() color: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  @Input() obligatory: boolean;\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  @Input() numMaxElementsInPreview = 4;\n  /**\n   * On change event.\n   */\n  @Output() change = new EventEmitter<void>();\n  /**\n   * Icon select.\n   */\n  @Output() iconSelect = new EventEmitter<void>();\n\n  isOpening = false;\n\n  async openList(): Promise<void> {\n    if (this.disabled || this.isOpening) return;\n    this.isOpening = true;\n    const modal = await this._modal.create({\n      component: IDEAListElementsComponent,\n      componentProps: {\n        data: this.data,\n        labelElements: this.labelElements,\n        searchPlaceholder: this.searchPlaceholder,\n        noElementsFoundText: this.noElementsFoundText\n      }\n    });\n    modal.onDidDismiss().then(({ data }): void => (data ? this.change.emit() : null));\n    modal.present();\n    this.isOpening = false;\n  }\n\n  getPreview(): string {\n    if (!this.data || !this.data.length) return null;\n    if (this.noPreviewText) return this.noPreviewText;\n    if (this.data.length <= this.numMaxElementsInPreview)\n      return this.data\n        .slice(0, this.numMaxElementsInPreview)\n        .map(x => this.getElementName(x))\n        .join(', ');\n    else return this._translate._('IDEA_COMMON.LIST.NUM_ELEMENTS_', { num: this.data.length });\n  }\n  getElementName(x: Label | string): any {\n    return this.labelElements\n      ? (x as Label).translate(this._translate.getCurrentLang(), this._translate.languages())\n      : x;\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonTitle,\n  IonContent,\n  IonList,\n  IonItem,\n  IonLabel,\n  IonListHeader,\n  IonTextarea,\n  IonInput\n} from '@ionic/angular/standalone';\nimport { EmailData, mdToHtml, StringVariable } from 'idea-toolbox';\n\nimport { IDEAHiglightedVariablesPipe } from '../highlightedVariables.pipe';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEAListComponent } from '../list/list.component';\n\n@Component({\n  selector: 'idea-email-data-configuration',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEAHiglightedVariablesPipe,\n    IDEAListComponent,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonTitle,\n    IonContent,\n    IonList,\n    IonItem,\n    IonInput,\n    IonLabel,\n    IonListHeader,\n    IonTextarea\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" name=\"close\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ title || 'IDEA_COMMON.EMAIL.EMAIL_DATA' | translate }}</ion-title>\n        @if (!disabled) {\n          <ion-buttons slot=\"end\">\n            <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n              <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-buttons>\n        }\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-list class=\"aList ion-padding\" [class.viewMode]=\"disabled\" [class.editMode]=\"!disabled\">\n        <idea-list\n          [data]=\"emailDataWC.to\"\n          [label]=\"'IDEA_COMMON.EMAIL.TO' | translate\"\n          [lines]=\"lines\"\n          [disabled]=\"disabled\"\n        />\n        <idea-list\n          [data]=\"emailDataWC.cc\"\n          [label]=\"'IDEA_COMMON.EMAIL.CC' | translate\"\n          [lines]=\"lines\"\n          [disabled]=\"disabled\"\n        />\n        <idea-list\n          [data]=\"emailDataWC.bcc\"\n          [label]=\"'IDEA_COMMON.EMAIL.BCC' | translate\"\n          [lines]=\"lines\"\n          [disabled]=\"disabled\"\n        />\n        <ion-item [lines]=\"lines\">\n          <ion-label position=\"stacked\">{{ 'IDEA_COMMON.EMAIL.SUBJECT' | translate }}</ion-label>\n          @if (disabled) {\n            <div class=\"innerContent\" [innerHTML]=\"emailDataWC.subject | highlight: variablesPlain\"></div>\n          }\n          @if (!disabled) {\n            <ion-input type=\"text\" [(ngModel)]=\"emailDataWC.subject\" />\n          }\n        </ion-item>\n        <ion-item [lines]=\"lines\">\n          <ion-label position=\"stacked\">{{ 'IDEA_COMMON.EMAIL.CONTENT' | translate }}</ion-label>\n          @if (disabled) {\n            <div class=\"innerContent md\" [innerHTML]=\"mdToHtml(emailDataWC.content) | highlight: variablesPlain\"></div>\n          }\n          @if (!disabled) {\n            <ion-textarea maxlength=\"1000\" [rows]=\"8\" [(ngModel)]=\"emailDataWC.content\" />\n          }\n        </ion-item>\n      </ion-list>\n      @if (!disabled) {\n        <ion-list class=\"aList ion-padding\">\n          <ion-list-header>\n            <ion-label>\n              <h2>{{ 'IDEA_COMMON.EMAIL.VARIABLES_AVAILABLE' | translate }}</h2>\n              <p>{{ 'IDEA_COMMON.EMAIL.VARIABLES_AVAILABLE_I' | translate }}</p>\n            </ion-label>\n          </ion-list-header>\n          <ul class=\"variablesList\">\n            @for (v of variables; track v) {\n              <li>\n                <small>{{ v.code }}</small> {{ v.description }}\n              </li>\n            }\n          </ul>\n        </ion-list>\n      }\n    </ion-content>\n  `,\n  styles: [\n    `\n      .content {\n        margin: 10px 0;\n        min-height: 20px;\n        height: auto;\n        line-height: 20px;\n        width: 100%;\n      }\n      .variablesList {\n        margin: 0;\n        li {\n          padding: 3px;\n          color: var(--ion-color-dark);\n          font-size: 0.9em;\n        }\n      }\n    `\n  ]\n})\nexport class IDEAEmailDataConfigurationComponent implements OnInit {\n  private _modal = inject(ModalController);\n\n  /**\n   * The emailData to configure.\n   */\n  @Input() emailData: EmailData;\n  /**\n   * The variables the user can use for subject and content.\n   */\n  @Input() variables: StringVariable[];\n  /**\n   * The title for the component.\n   */\n  @Input() title: string;\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  emailDataWC: EmailData;\n  variablesPlain: string[];\n\n  ngOnInit(): void {\n    this.emailDataWC = new EmailData(this.emailData);\n    this.variablesPlain = (this.variables || []).map(x => x.code);\n  }\n\n  mdToHtml(content: string): string {\n    return mdToHtml(content);\n  }\n\n  save(): void {\n    this.emailData.load(this.emailDataWC);\n    this.close();\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, inject } from '@angular/core';\nimport { ModalController, IonItem, IonButton, IonIcon, IonText, IonLabel } from '@ionic/angular/standalone';\nimport { EmailData, StringVariable } from 'idea-toolbox';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEAHiglightedVariablesPipe } from '../highlightedVariables.pipe';\n\nimport { IDEAEmailDataConfigurationComponent } from './emailDataConfiguration.component';\n\n/**\n * Configurator of EmailData.\n */\n@Component({\n  selector: 'idea-email-data',\n  standalone: true,\n  imports: [\n    CommonModule,\n    IDEATranslatePipe,\n    IDEAHiglightedVariablesPipe,\n    IonItem,\n    IonLabel,\n    IonButton,\n    IonIcon,\n    IonText\n  ],\n  template: `\n    <ion-item\n      class=\"emailDataItem\"\n      button\n      [disabled]=\"isOpening\"\n      [color]=\"color\"\n      [lines]=\"lines\"\n      [title]=\"placeholder || ''\"\n      [class.withLabel]=\"label\"\n      (click)=\"openEmailDataConfiguration()\"\n    >\n      @if (icon) {\n        <ion-button\n          fill=\"clear\"\n          slot=\"start\"\n          [color]=\"iconColor\"\n          [class.marginTop]=\"label\"\n          (click)=\"doIconSelect($event)\"\n        >\n          <ion-icon [name]=\"icon\" slot=\"icon-only\" />\n        </ion-button>\n      }\n      @if (label) {\n        <ion-label position=\"stacked\">{{ label }}</ion-label>\n      }\n      <div class=\"description\">\n        @if (!emailData.subject) {\n          <div class=\"placeholder\">{{ placeholder }}</div>\n        }\n        @if (emailData.subject) {\n          <div [innerHTML]=\"emailData.subject | highlight: variablesPlain\"></div>\n        }\n        @if (emailData.to.length) {\n          <p>\n            <ion-text>{{ 'IDEA_COMMON.EMAIL.TO' | translate }}:</ion-text> {{ emailData.to.join(', ') }}\n          </p>\n        }\n        @if (emailData.cc.length) {\n          <p>\n            <ion-text>{{ 'IDEA_COMMON.EMAIL.CC' | translate }}:</ion-text> {{ emailData.cc.join(', ') }}\n          </p>\n        }\n        @if (emailData.bcc.length) {\n          <p>\n            <ion-text>{{ 'IDEA_COMMON.EMAIL.BCC' | translate }}:</ion-text> {{ emailData.bcc.join(', ') }}\n          </p>\n        }\n      </div>\n      <ion-icon slot=\"end\" name=\"chevron-forward\" class=\"selectIcon\" />\n    </ion-item>\n  `,\n  styles: [\n    `\n      .emailDataItem {\n        min-height: 48px;\n        height: auto;\n        .description {\n          margin: 10px 0;\n          min-height: 20px;\n          height: auto;\n          line-height: 20px;\n          width: 100%;\n          p {\n            margin: 2px 10px;\n            font-size: 0.8em;\n            ion-text {\n              font-weight: bold;\n            }\n          }\n          p:first-of-type {\n            margin-top: 10px;\n          }\n        }\n        .placeholder {\n          color: var(--ion-color-medium);\n        }\n        .selectIcon {\n          color: var(--ion-text-color-step-500);\n          font-size: 1.3em;\n        }\n      }\n      .emailDataItem.withLabel {\n        min-height: 58px;\n        height: auto;\n        .selectIcon {\n          padding-top: 4px;\n        }\n        ion-button[slot='start'] {\n          margin-top: 16px;\n        }\n      }\n    `\n  ]\n})\nexport class IDEAEmailDataComponent implements OnInit {\n  private _modal = inject(ModalController);\n\n  /**\n   * The email data to manage.\n   */\n  @Input() emailData: EmailData;\n  /**\n   * The variables the user can use for subject and content.\n   */\n  @Input() variables: StringVariable[];\n  /**\n   * The label for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the field.\n   */\n  @Input() placeholder: string;\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * The color for the component.\n   */\n  @Input() color: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * On change event.\n   */\n  @Output() change = new EventEmitter<void>();\n  /**\n   * Icon select.\n   */\n  @Output() iconSelect = new EventEmitter<void>();\n  /**\n   * The list of variables codes to use for substitutions.\n   */\n  variablesPlain: string[];\n\n  isOpening = false;\n\n  ngOnInit(): void {\n    // create a plain list of variable codes\n    this.variablesPlain = (this.variables || []).map(x => x.code);\n  }\n\n  async openEmailDataConfiguration(): Promise<void> {\n    if (this.isOpening) return;\n    this.isOpening = true;\n    const modal = await this._modal.create({\n      component: IDEAEmailDataConfigurationComponent,\n      componentProps: {\n        emailData: this.emailData,\n        variables: this.variables,\n        title: this.label,\n        disabled: this.disabled,\n        lines: this.lines\n      }\n    });\n    modal.onDidDismiss().then(res => (res && res.data ? this.change.emit() : null));\n    modal.present();\n    this.isOpening = false;\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  ModalController,\n  IonHeader,\n  IonToolbar,\n  IonTitle,\n  IonButtons,\n  IonButton,\n  IonIcon,\n  IonContent,\n  IonList,\n  IonListHeader,\n  IonLabel,\n  IonItem,\n  IonTextarea,\n  IonInput\n} from '@ionic/angular/standalone';\nimport { EmailData, StringVariable, Suggestion } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEASuggestionsComponent } from '../select/suggestions.component';\n\n@Component({\n  selector: 'idea-send-email',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IonHeader,\n    IonToolbar,\n    IonTitle,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonContent,\n    IonList,\n    IonListHeader,\n    IonLabel,\n    IonItem,\n    IonTextarea,\n    IonInput\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n            <ion-icon slot=\"icon-only\" name=\"close\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ 'IDEA_COMMON.EMAIL.SEND_EMAIL' | translate }}</ion-title>\n        <ion-buttons slot=\"end\">\n          <ion-button [title]=\"'IDEA_COMMON.EMAIL.SEND_EMAIL' | translate\" [disabled]=\"!canSend()\" (click)=\"send()\">\n            <ion-icon slot=\"icon-only\" name=\"send\" />\n          </ion-button>\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-list class=\"aList sendEmailList\">\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.TO' | translate }}</h2>\n          </ion-label>\n          <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC.to)\">\n            <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n          </ion-button>\n        </ion-list-header>\n        @if (!emailWC.to.length) {\n          <ion-item>\n            <i>{{ 'IDEA_COMMON.EMAIL.NO_ADDRESSES' | translate }}</i>\n          </ion-item>\n        }\n        @for (x of emailWC.to; track x) {\n          <ion-item>\n            <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC.to, x)\">\n              <ion-icon slot=\"icon-only\" name=\"remove\" />\n            </ion-button>\n            <ion-label>{{ x }}</ion-label>\n          </ion-item>\n        }\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.CC' | translate }}</h2>\n          </ion-label>\n          <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC.cc)\">\n            <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n          </ion-button>\n        </ion-list-header>\n        @if (!emailWC.cc.length) {\n          <ion-item>\n            <i>{{ 'IDEA_COMMON.EMAIL.NO_ADDRESSES' | translate }}</i>\n          </ion-item>\n        }\n        @for (x of emailWC.cc; track x) {\n          <ion-item>\n            <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC.cc, x)\">\n              <ion-icon slot=\"icon-only\" name=\"remove\" />\n            </ion-button>\n            <ion-label>{{ x }}</ion-label>\n          </ion-item>\n        }\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.BCC' | translate }}</h2>\n          </ion-label>\n          <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC.bcc)\">\n            <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n          </ion-button>\n        </ion-list-header>\n        @if (!emailWC.bcc.length) {\n          <ion-item>\n            <i>{{ 'IDEA_COMMON.EMAIL.NO_ADDRESSES' | translate }}</i>\n          </ion-item>\n        }\n        @for (x of emailWC.bcc; track x) {\n          <ion-item>\n            <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC.bcc, x)\">\n              <ion-icon slot=\"icon-only\" name=\"remove\" />\n            </ion-button>\n            <ion-label>{{ x }}</ion-label>\n          </ion-item>\n        }\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.SUBJECT' | translate }}</h2>\n          </ion-label>\n        </ion-list-header>\n        <ion-item [lines]=\"lines\">\n          <ion-input type=\"text\" [(ngModel)]=\"emailWC.subject\" />\n        </ion-item>\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.CONTENT' | translate }}</h2>\n          </ion-label>\n        </ion-list-header>\n        <ion-item [lines]=\"lines\">\n          <ion-textarea [rows]=\"13\" [(ngModel)]=\"emailWC.content\" />\n        </ion-item>\n        <ion-list-header>\n          <ion-label>\n            <h2>{{ 'IDEA_COMMON.EMAIL.ATTACHMENTS' | translate }}</h2>\n          </ion-label>\n        </ion-list-header>\n        @if (!attachments.length) {\n          <ion-item>\n            <i>{{ 'IDEA_COMMON.EMAIL.NO_ATTACHMENTS' | translate }}</i>\n          </ion-item>\n        }\n        @for (a of attachments; track a) {\n          <ion-item><ion-icon slot=\"start\" name=\"attach\" />{{ a }}</ion-item>\n        }\n      </ion-list>\n    </ion-content>\n  `,\n  styles: [\n    `\n      .aList.sendEmailList {\n        ion-list-header ion-label {\n          margin: 25px 0 10px 0;\n        }\n      }\n    `\n  ]\n})\nexport class IDEASendEmailComponent implements OnInit {\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The content and receivers of the email.\n   */\n  @Input() email: EmailData;\n  /**\n   * Visual indicators of the attachments that will be sent.\n   */\n  @Input() attachments: string[];\n  /**\n   * The variables the user can use for subject and content.\n   */\n  @Input() variables: StringVariable[];\n  /**\n   * A map of the values to substitute to the variables.\n   */\n  @Input() values: { [variable: string]: string | number };\n  /**\n   * The suggested contacts for the email composer.\n   */\n  @Input() contacts: Suggestion[];\n  /**\n   * Lines preferences for the items.\n   */\n  @Input() lines: string;\n\n  emailWC: EmailData;\n\n  ngOnInit(): void {\n    this.emailWC = new EmailData(this.email);\n    if (!this.variables) this.variables = new Array<StringVariable>();\n    if (!this.values) this.values = {};\n    this.variables.forEach(v => {\n      if (this.values[v.code]) {\n        if (this.emailWC.subject)\n          this.emailWC.subject = this.emailWC.subject.replace(new RegExp(v.code, 'g'), String(this.values[v.code]));\n        if (this.emailWC.content)\n          this.emailWC.content = this.emailWC.content.replace(new RegExp(v.code, 'g'), String(this.values[v.code]));\n      }\n    });\n  }\n\n  async addAddressToList(list: string[]): Promise<void> {\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: {\n        data: this.contacts || [],\n        sortData: true,\n        searchPlaceholder: this._translate._('IDEA_COMMON.EMAIL.CHOOSE_OR_ADD_AN_ADDRESS'),\n        noElementsFoundText: this._translate._('IDEA_COMMON.EMAIL.NO_ADDRESS_FOUND_YOU_CAN_ADD_ONE'),\n        allowUnlistedValues: true,\n        lines: this.lines\n      }\n    });\n    modal.onDidDismiss().then(res => {\n      if (res && res.data && res.data.value && !list.includes(res.data.value)) list.push(res.data.value);\n    });\n    modal.present();\n  }\n  removeAddressFromList(list: string[], address: string): void {\n    list.splice(list.indexOf(address), 1);\n  }\n\n  canSend(): boolean {\n    return Boolean(this.emailWC.to.length && this.emailWC.subject && this.emailWC.content);\n  }\n  send(): void {\n    this.email.load(this.emailWC);\n    this._modal.dismiss(this.email);\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, inject } from '@angular/core';\nimport { ModalController, IonItem, IonLabel, IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { Label, Languages, mdToHtml, StringVariable } from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEAHiglightedVariablesPipe } from '../highlightedVariables.pipe';\n\nimport { IDEALabelerComponent } from './labeler.component';\n\n/**\n * Manage the content of a Label.\n */\n@Component({\n  selector: 'idea-label',\n  standalone: true,\n  imports: [CommonModule, IDEAHiglightedVariablesPipe, IonItem, IonLabel, IonButton, IonIcon, IonText],\n  template: `\n    <ion-item\n      class=\"labelItem\"\n      button\n      [disabled]=\"isOpening\"\n      [color]=\"color\"\n      [lines]=\"lines\"\n      [title]=\"placeholder || ''\"\n      [class.withLabel]=\"label\"\n      (click)=\"edit()\"\n    >\n      @if (icon) {\n        <ion-button\n          fill=\"clear\"\n          slot=\"start\"\n          [color]=\"iconColor\"\n          [class.marginTop]=\"label\"\n          (click)=\"doIconSelect($event)\"\n        >\n          <ion-icon [icon]=\"icon\" slot=\"icon-only\" />\n        </ion-button>\n      }\n      @if (label) {\n        <ion-label position=\"stacked\">\n          {{ label }}\n          @if (!disabled && obligatory) {\n            <ion-text class=\"obligatoryDot\" />\n          }\n        </ion-label>\n      }\n      <div class=\"description\">\n        @if (!htmlContent) {\n          <div class=\"placeholder\">{{ placeholder }}</div>\n        }\n        @if (htmlContent) {\n          <div class=\"innerContent\" [class.md]=\"markdown\" [innerHTML]=\"htmlContent | highlight: variableCodes\"></div>\n        }\n      </div>\n      <ion-icon slot=\"end\" icon=\"chevron-forward\" class=\"selectIcon\" />\n    </ion-item>\n  `,\n  styles: [\n    `\n      .labelItem {\n        min-height: 48px;\n        height: auto;\n        .description {\n          min-height: 20px;\n          height: auto;\n          line-height: 20px;\n          width: 100%;\n        }\n        .placeholder {\n          color: var(--ion-color-medium);\n          padding-bottom: 6px;\n        }\n        .selectIcon {\n          color: var(--ion-text-color-step-500);\n          font-size: 1.3em;\n        }\n      }\n      .labelItem.withLabel {\n        min-height: 58px;\n        height: auto;\n        .selectIcon {\n          padding-top: 4px;\n        }\n        ion-button[slot='start'] {\n          margin-top: 16px;\n        }\n      }\n    `\n  ]\n})\nexport class IDEALabelComponent implements OnInit {\n  private _modal = inject(ModalController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The label to manage.\n   * Note: the name is set to not overlap with IDEA's components typical use of the attribute `label`.\n   */\n  @Input() content: Label;\n  /**\n   * The languages preferences; if not set, it fallbacks to IDEATranslationsService's ones.\n   */\n  @Input() languages: Languages;\n  /**\n   * Whether to display the label in textareas instead of text fields.\n   */\n  @Input() textarea: boolean;\n  /**\n   * Whether the label supports markdown.\n   */\n  @Input() markdown: boolean;\n  /**\n   * The variables the user can use in the label.\n   */\n  @Input() variables: StringVariable[];\n  /**\n   * The title (label) for the field.\n   */\n  @Input() label: string;\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  @Input() iconColor: string;\n  /**\n   * A placeholder for the field.\n   */\n  @Input() placeholder: string;\n  /**\n   * Lines preferences for the item.\n   */\n  @Input() lines: string;\n  /**\n   * The color for the component.\n   */\n  @Input() color: string;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled: boolean;\n  /**\n   * If true, the label is validated on save.\n   */\n  @Input() obligatory: boolean;\n\n  @Output() change = new EventEmitter<void>();\n  @Output() iconSelect = new EventEmitter<void>();\n\n  variableCodes: string[];\n  htmlContent: string;\n\n  isOpening = false;\n\n  ngOnInit(): void {\n    this.languages = this.languages || this._translate.languages();\n    this.variableCodes = (this.variables || []).map(x => x.code);\n    this.calcHTMLContent();\n  }\n\n  async edit(): Promise<void> {\n    if (this.isOpening) return;\n    this.isOpening = true;\n    const componentProps = {\n      label: this.content,\n      languages: this.languages,\n      textarea: this.textarea,\n      markdown: this.markdown,\n      variables: this.variables,\n      title: this.label,\n      obligatory: this.obligatory,\n      disabled: this.disabled,\n      lines: this.lines\n    };\n    const modal = await this._modal.create({ component: IDEALabelerComponent, componentProps });\n    modal.onDidDismiss().then(({ data }): void => {\n      if (!data) return;\n      this.calcHTMLContent();\n      this.change.emit();\n    });\n    modal.present();\n    this.isOpening = false;\n  }\n\n  private calcHTMLContent(): void {\n    const str = this.content.translate(this.languages.default, this.languages);\n    this.htmlContent = str && this.markdown ? mdToHtml(str) : str;\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  AlertController,\n  ModalController,\n  PopoverController,\n  IonContent,\n  IonGrid,\n  IonRow,\n  IonCol,\n  IonButton,\n  IonIcon,\n  IonLabel,\n  IonHeader,\n  IonList,\n  IonToolbar,\n  IonTitle,\n  IonListHeader,\n  IonButtons,\n  IonItem,\n  IonChip\n} from '@ionic/angular/standalone';\nimport {\n  Label,\n  LabelVariable,\n  Languages,\n  PDFTemplateBlueprint,\n  PDFTemplateComplexField,\n  PDFTemplateSection,\n  PDFTemplateSectionBlueprint,\n  PDFTemplateSectionTypes,\n  PDFTemplateSimpleField,\n  Suggestion\n} from 'idea-toolbox';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEALocalizedLabelPipe } from '../translations/label.pipe';\nimport { IDEAHiglightedVariablesPipe } from '../highlightedVariables.pipe';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEAActionSheetController } from '../actionSheet/actionSheetController.service';\nimport { IDEALabelerComponent } from '../labeler/labeler.component';\nimport { IDEASuggestionsComponent } from '../select/suggestions.component';\n\n@Component({\n  selector: 'idea-pdf-template',\n  standalone: true,\n  imports: [\n    IonItem,\n    IonButtons,\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEAHiglightedVariablesPipe,\n    IonContent,\n    IonLabel,\n    IonListHeader,\n    IonTitle,\n    IonToolbar,\n    IonList,\n    IonHeader,\n    IonButton,\n    IonIcon,\n    IonRow,\n    IonCol,\n    IonChip\n  ],\n  templateUrl: 'pdfTemplate.component.html',\n  styleUrls: ['pdfTemplate.component.scss']\n})\nexport class IDEAPDFTemplateComponent implements OnInit {\n  private _popover = inject(PopoverController);\n  private _modal = inject(ModalController);\n  private _alert = inject(AlertController);\n  private _actions = inject(IDEAActionSheetController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The blueprint to define the allowed sections and fields for this PDF template.\n   */\n  @Input() blueprint: PDFTemplateBlueprint;\n  /**\n   * The PDF template to manage, as list of sections.\n   */\n  @Input() template: PDFTemplateSection[];\n  /**\n   * Language preferences.\n   */\n  @Input() languages: Languages;\n  /**\n   * If true, the component is disabled.\n   */\n  @Input() disabled = false;\n\n  /**\n   * The working copy of the PDF template to manage, to avoid touching the original until changes are saved.\n   */\n  _template: PDFTemplateSection[];\n  /**\n   * A stack of inner layers of the main template, to navigate and modify the inner sections, following a path.\n   */\n  stack: PDFTemplateLayer[] = [];\n\n  ST = PDFTemplateSectionTypes;\n  editSections = false;\n  moveMode: MoveModeData = null;\n  errors = new Set<string>();\n\n  ngOnInit(): void {\n    // work on a copy\n    this._template = (this.template || []).map(section => new PDFTemplateSection(section, this.languages));\n    // prepare the stack (base level, i.e. the main template), to view and manage inner sections\n    this.stack = [{ blueprint: this.blueprint, template: this._template }];\n  }\n\n  getCurrentLayer(): PDFTemplateLayer {\n    return this.stack[this.stack.length - 1];\n  }\n  getCurrentTemplate(): PDFTemplateSection[] {\n    return this.getCurrentLayer().template;\n  }\n  getCurrentVariables(): string[] {\n    return this.getCurrentLayer().blueprint.variables.map(v => v.code);\n  }\n  openInnerSection(section: PDFTemplateSection): void {\n    // skip if we are handling other operations\n    if (this.isViewLocked()) return;\n    // get the blueprint of the desired section\n    const blueprint = this.getCurrentLayer().blueprint.innerBlueprints.find(ib => ib.context === section.context);\n    // if a blueprint wasn't found, we can't go on\n    if (!blueprint) return;\n    this.stack.push({ blueprint, template: section.innerTemplate, title: section.title });\n    // check for errors, to highlight them right away\n    this.checkErrorsOnCurrentLayer();\n  }\n  getBreadcrumb(): string[] {\n    return this.stack.map(c => c.blueprint.description);\n  }\n  isInnerLayer(): boolean {\n    return this.stack.length > 1;\n  }\n  prevLayer(howMany?: number): void {\n    // skip if we are handling other operations\n    if (this.isViewLocked()) return;\n    howMany = howMany === undefined ? 1 : Number(howMany);\n    while (howMany-- > 0 && this.stack.length > 1) this.stack.pop();\n    // check for errors, to highlight them right away\n    this.checkErrorsOnCurrentLayer();\n  }\n\n  async addSection(): Promise<void> {\n    const buttons = [];\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.NORMAL_ROW'),\n      icon: 'apps',\n      handler: (): void => this.addSectionHelper(new PDFTemplateSection({ type: this.ST.ROW }, this.languages))\n    });\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.HEADER'),\n      icon: 'bookmark',\n      handler: (): void => this.addSectionHelper(new PDFTemplateSection({ type: this.ST.HEADER }, this.languages))\n    });\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.BLANK_ROW'),\n      icon: 'code',\n      handler: (): void => this.addSectionHelper(new PDFTemplateSection({ type: this.ST.BLANK_ROW }, this.languages))\n    });\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.PAGE_BREAK'),\n      icon: 'code-slash',\n      handler: (): void => this.addSectionHelper(new PDFTemplateSection({ type: this.ST.PAGE_BREAK }, this.languages))\n    });\n\n    // add the inner and repeated sections, based on the blueprint\n    if (this.getCurrentLayer().blueprint.innerBlueprints)\n      // identify each possible internal section by the inner blueprints\n      this.getCurrentLayer().blueprint.innerBlueprints.forEach(ib => {\n        buttons.push({\n          text: ib.description,\n          icon: ib.icon,\n          handler: (): void =>\n            this.addSectionHelper(\n              new PDFTemplateSection(\n                { type: ib.type, description: ib.description, context: ib.context },\n                this.languages\n              )\n            )\n        });\n      });\n\n    buttons.push({ text: this._translate._('COMMON.CANCEL'), role: 'cancel', icon: 'arrow-undo' });\n\n    const header = this._translate._('IDEA_COMMON.PDF_TEMPLATE.WHAT_DO_YOU_WANT_TO_INSERT');\n    const actions = await this._actions.create({ header, buttons });\n    actions.present();\n  }\n  private addSectionHelper(section: PDFTemplateSection): void {\n    // complete the section, based on its type\n    switch (section.type) {\n      case this.ST.HEADER:\n        section.title[this.languages.default] = this._translate._('IDEA_COMMON.PDF_TEMPLATE.NEW_HEADER');\n        break;\n    }\n    // add the new section to the current template\n    this.getCurrentTemplate().push(section);\n  }\n  async deleteSection(section: PDFTemplateSection): Promise<void> {\n    const header = this._translate._('IDEA_COMMON.PDF_TEMPLATE.REMOVE_SECTION');\n    const subHeader = this._translate._('COMMON.ARE_YOU_SURE');\n    const buttons = [\n      { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n      {\n        text: this._translate._('COMMON.CONFIRM'),\n        handler: (): PDFTemplateSection[] =>\n          this.getCurrentTemplate().splice(this.getCurrentTemplate().indexOf(section), 1)\n      }\n    ];\n\n    const alert = await this._alert.create({ header, subHeader, buttons });\n    await alert.present();\n  }\n  moveSectionUpInTemplate(section: PDFTemplateSection): void {\n    this.moveSectionInTemplateByNumPositions(section, -1);\n  }\n  moveSectionDownInTemplate(section: PDFTemplateSection): void {\n    this.moveSectionInTemplateByNumPositions(section, 1);\n  }\n  private moveSectionInTemplateByNumPositions(section: PDFTemplateSection, numPositions: number): void {\n    const fromIndex = this.getCurrentTemplate().indexOf(section);\n    const toIndex = fromIndex + numPositions;\n    if (toIndex >= 0 && toIndex <= this.getCurrentTemplate().length)\n      this.getCurrentTemplate().splice(toIndex, 0, this.getCurrentTemplate().splice(fromIndex, 1)[0]);\n  }\n  getInnerSectionIcon(section: PDFTemplateSection): string {\n    const bp = this.getCurrentLayer().blueprint.innerBlueprints.find(ib => ib.context === section.context);\n    return bp ? bp.icon : 'help';\n  }\n\n  async editHeaderLabel(label: Label): Promise<void> {\n    // skip if we are handling other operations\n    if (this.isViewLocked()) return;\n\n    const componentProps = {\n      label,\n      title: this._translate._('IDEA_COMMON.PDF_TEMPLATE.HEADER'),\n      obligatory: true,\n      variables: this.getCurrentLayer().blueprint.variables,\n      disabled: this.disabled\n    };\n    const modal = await this._modal.create({\n      component: IDEALabelerComponent,\n      componentProps,\n      cssClass: 'forceBackdrop' // needed, since this component is also fullscreen\n    });\n    await modal.present();\n  }\n\n  async editSectionTitleLabel(label: Label): Promise<void> {\n    // skip if we are handling other operations\n    if (this.isViewLocked()) return;\n\n    const componentProps = {\n      label,\n      title: this._translate._('IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION_TITLE'),\n      obligatory: false,\n      disabled: this.disabled\n    };\n    const modal = await this._modal.create({\n      component: IDEALabelerComponent,\n      componentProps,\n      cssClass: 'forceBackdrop' // needed, since this component is also fullscreen\n    });\n    await modal.present();\n  }\n\n  async addField(section: PDFTemplateSection, indexCol: number): Promise<void> {\n    // skip in case the section isn't of type ROW\n    if (section.type !== this.ST.ROW) return;\n    // skip in case the column is already occupied\n    if (!section.isColumnEmpty(indexCol)) return;\n    // let the user choose between simple and complex field\n    const buttons = [];\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.SIMPLE_FIELD'),\n      icon: 'at',\n      handler: (): void => this.addSimpleField(section, indexCol)\n    });\n    buttons.push({\n      text: this._translate._('IDEA_COMMON.PDF_TEMPLATE.COMPLEX_FIELD'),\n      icon: 'shapes',\n      handler: (): void => this.addComplexField(section, indexCol)\n    });\n\n    buttons.push({ text: this._translate._('COMMON.CANCEL'), role: 'cancel', icon: 'arrow-undo' });\n\n    const header = this._translate._('IDEA_COMMON.PDF_TEMPLATE.WHAT_DO_YOU_WANT_TO_INSERT');\n    const actions = await this._actions.create({ header, buttons });\n    await actions.present();\n  }\n  private addSimpleField(section: PDFTemplateSection, colIndex: number): void {\n    // let the user pick a variable from the list available on this layer, and add a simple field to the desired column\n    this.pickVariableFromList(\n      variable => (section.columns[colIndex] = new PDFTemplateSimpleField(variable, this.languages))\n    );\n  }\n  private addComplexField(section: PDFTemplateSection, colIndex: number): void {\n    // init the content of a new complex field\n    const content = new Label(null, this.languages);\n    content[this.languages.default] = '--';\n    // set the field in the chosen column of the section\n    section.columns[colIndex] = new PDFTemplateComplexField({ content }, this.languages);\n    // directly open the field\n    this.openField(section, colIndex);\n  }\n  private async pickVariableFromList(callback: (variable: LabelVariable) => void): Promise<void> {\n    const suggestions = this.getCurrentLayer().blueprint.variables.map(\n      v => new Suggestion({ value: v.code, name: this._translate._label(v.label) })\n    );\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: { data: suggestions, hideClearButton: true },\n      cssClass: 'forceBackdrop' // needed, since this component is also fullscreen\n    });\n    modal.onDidDismiss().then(({ data }): void => {\n      if (!data) return;\n      // if a suggestion was selected, find the original variable and return it\n      const variable = this.getCurrentLayer().blueprint.variables.find(v => v.code === data.value);\n      if (variable) callback(variable);\n    });\n    await modal.present();\n  }\n\n  isColumnComplex(field: string | PDFTemplateSimpleField | PDFTemplateComplexField): boolean {\n    if (typeof field === 'string') return false;\n    return field.isComplex();\n  }\n  displayField(section: PDFTemplateSection, colIndex: number, forceLabel?: boolean): string {\n    // skip in case the column doesn't contain a field\n    if (!section.doesColumnContainAField(colIndex)) return;\n    const field = section.columns[colIndex] as PDFTemplateComplexField | PDFTemplateSimpleField;\n    // recognize whether we are dealing with a complex or a simple field\n    if (field.isComplex()) return this._translate._label((field as PDFTemplateComplexField).content);\n    else\n      return forceLabel\n        ? this._translate._label((field as PDFTemplateSimpleField).label)\n        : (field as PDFTemplateSimpleField).code.slice(1);\n  }\n\n  async manageField(section: PDFTemplateSection, colIndex: number, event?: any): Promise<void> {\n    // skip if we are handling other operations\n    if (this.isViewLocked()) return;\n    // skip in case the column doesn't contain a field\n    if (!section.doesColumnContainAField(colIndex)) return;\n    // if in view mode, directly open the field\n    if (this.disabled) return this.openField(section, colIndex);\n\n    const buttons = [];\n    buttons.push({\n      text: this._translate._('COMMON.EDIT'),\n      icon: 'pencil',\n      handler: (): Promise<void> => this.openField(section, colIndex)\n    });\n    buttons.push({\n      text: this._translate._('COMMON.MOVE'),\n      icon: 'move',\n      handler: (): Promise<void> => this.moveField(section, colIndex)\n    });\n    buttons.push({\n      text: this._translate._('COMMON.RESIZE'),\n      icon: 'resize',\n      handler: (): Promise<void> => this.resizeField(section, colIndex, event)\n    });\n    buttons.push({\n      text: this._translate._('COMMON.DELETE'),\n      icon: 'trash',\n      role: 'destructive',\n      handler: (): Promise<void> => this.deleteField(section, colIndex)\n    });\n\n    buttons.push({ text: this._translate._('COMMON.CANCEL'), role: 'cancel', icon: 'arrow-undo' });\n\n    const header = this._translate._('IDEA_COMMON.PDF_TEMPLATE.WHAT_DO_YOU_WANT_TO_DO_WITH_FIELD');\n    const actions = await this._actions.create({ header, buttons });\n    await actions.present();\n  }\n  private async openField(section: PDFTemplateSection, colIndex: number): Promise<void> {\n    // identify the field\n    const field = section.columns[colIndex] as PDFTemplateComplexField | PDFTemplateSimpleField;\n    // open the labeler with different parameters, based on the type of field\n    const modal = await this._modal.create({\n      component: IDEALabelerComponent,\n      componentProps: {\n        label: field.isComplex() ? (field as PDFTemplateComplexField).content : (field as PDFTemplateSimpleField).label,\n        title: field.isComplex()\n          ? this._translate._('IDEA_COMMON.PDF_TEMPLATE.COMPLEX_FIELD')\n          : this._translate._('IDEA_COMMON.PDF_TEMPLATE.SIMPLE_FIELD'),\n        obligatory: field.isComplex(),\n        markdown: field.isComplex(),\n        textarea: field.isComplex(),\n        disabled: this.disabled,\n        variables: field.isComplex() ? this.getCurrentLayer().blueprint.variables : []\n      },\n      cssClass: 'forceBackdrop' // needed, since this component is also fullscreen\n    });\n    await modal.present();\n  }\n  private moveField(section: PDFTemplateSection, colIndex: number): Promise<void> {\n    // check whether the field has an empty column which it could move on this layer\n    if (!this.canFieldMoveAnywhere())\n      return this._message.error('IDEA_COMMON.PDF_TEMPLATE.NO_EMPTY_SLOT_WHERE_TO_MOVE_FIELD');\n    // hint the user that the field can now be moved and save the original position; the UI enter in \"move mode\"\n    this._message.info('IDEA_COMMON.PDF_TEMPLATE.CHOOSE_WHERE_TO_MOVE_FIELD');\n    this.disabled = true;\n    this.moveMode = { section, colIndex } as MoveModeData;\n  }\n  private canFieldMoveAnywhere(): boolean {\n    return (\n      this.getCurrentLayer()\n        // filter the sections containing fields\n        .template.filter(s => s.type === this.ST.ROW)\n        // search for at least one that contains at least a column which is empty\n        .some(s => s.columns.some((_, index): boolean => s.isColumnEmpty(index)))\n    );\n  }\n  completeMove(newSection: PDFTemplateSection, newColIndex: number): void {\n    const prev = this.moveMode;\n    // check whether we are moving at all\n    if (newSection !== prev.section || newColIndex !== prev.colIndex) {\n      // get the current size of the field\n      let size = prev.section.getColumnFieldSize(prev.colIndex);\n      // get the field\n      const field = prev.section.columns[prev.colIndex];\n      // insert the field in the new position (try to fill all the empty slots up to its space)\n      newSection.columns[newColIndex] = field;\n      let i = 1;\n      while (--size > 0 && newColIndex + i < 12 && !newSection.columns[newColIndex + i]) {\n        newSection.columns[newColIndex + i] = '-';\n        i++;\n      }\n      // remove the field from the previous position\n      prev.section.removeFieldFromOccupiedColumns(prev.colIndex);\n    }\n    // exit move mode\n    this.moveMode = null;\n    this.disabled = false;\n  }\n  private async resizeField(section: PDFTemplateSection, colIndex: number, event?: any): Promise<void> {\n    // calculate how much the field can grow\n    const fieldSize = section.getColumnFieldSize(colIndex);\n    let howMuchCanGrow = 0;\n    // search for the first occupied column after the field: until there, the field can grow\n    section.columns.slice(colIndex + fieldSize).some((_, index): boolean => {\n      if (section.isColumnEmpty(colIndex + fieldSize + index)) {\n        howMuchCanGrow++;\n        return false;\n      } else return true;\n    });\n    // open the popover to let the user grow or shrink the field\n    const popover = await this._popover.create({\n      component: IDEAPDFTemplateFieldResizeComponent,\n      componentProps: {\n        columns: section.columns,\n        colIndex,\n        size: fieldSize,\n        max: fieldSize + howMuchCanGrow\n      },\n      event\n    });\n    popover.present();\n  }\n  private async deleteField(section: PDFTemplateSection, colIndex: number): Promise<void> {\n    const alert = await this._alert.create({\n      header: this._translate._('COMMON.ARE_YOU_SURE'),\n      buttons: [\n        { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n        {\n          text: this._translate._('COMMON.DELETE'),\n          handler: (): void => section.removeFieldFromOccupiedColumns(colIndex)\n        }\n      ]\n    });\n    await alert.present();\n  }\n\n  isViewLocked(): boolean {\n    return this.editSections || !!this.moveMode;\n  }\n\n  hasFieldAnError(field: string): boolean {\n    return this.errors.has(field);\n  }\n  private checkErrorsOnCurrentLayer(): void {\n    this.errors = new Set<string>();\n    this.getCurrentLayer().template.forEach((s, i): void => {\n      s.validate(this.languages, this.getCurrentLayer().blueprint.variables).forEach(e => {\n        // highlight a specific column of a section of type ROW\n        if (e.startsWith('columns[')) this.errors.add(`s[${i}].${e}`);\n        // highlight the entire section\n        else this.errors.add(`s[${i}]`);\n      });\n    });\n  }\n\n  save(): Promise<void> {\n    // check for errors (on top layer, but recursively on inner layers as well)\n    this.checkErrorsOnCurrentLayer();\n    if (this.errors.size) return this._message.error('IDEA_COMMON.PDF_TEMPLATE.ONE_OR_MORE_SECTIONS_HAVE_ERRORS');\n    // save changes (without losing reference of the original array) and close\n    this.template.splice(0, this.template.length);\n    this._template.forEach(section => this.template.push(new PDFTemplateSection(section, this.languages)));\n    this.close();\n  }\n  close(): void {\n    this._modal.dismiss();\n  }\n}\n\n/**\n * It represents the layer (inner level) of a template.\n */\nexport interface PDFTemplateLayer {\n  /**\n   * The blueprint that the define the layer.\n   */\n  blueprint: PDFTemplateBlueprint | PDFTemplateSectionBlueprint;\n  /**\n   * The actual template, based on the blueprint.\n   */\n  template: PDFTemplateSection[];\n  /**\n   * The title of the level, in case of INNER_SECTION or REPEATED_INNER_SECTION.\n   */\n  title?: Label;\n}\n\n/**\n * Helper structure to move a field to another position.\n */\nexport interface MoveModeData {\n  /**\n   * The section (ROW) containing the field to move.\n   */\n  section: PDFTemplateSection;\n  /**\n   * The position of the field in the columns (index).\n   */\n  colIndex: number;\n}\n\n/**\n * Helper component to resize a field in the template.\n */\n@Component({\n  selector: 'idea-pdf-template-field-resize',\n  standalone: true,\n  imports: [CommonModule, IDEATranslatePipe, IonContent, IonGrid, IonRow, IonCol, IonButton, IonIcon, IonLabel],\n  template: `\n    <ion-content>\n      <ion-grid>\n        <ion-row class=\"ion-align-items-center\">\n          <ion-col class=\"ion-text-center\">\n            <ion-button size=\"small\" [disabled]=\"size === 1\" (click)=\"shrink()\">\n              <ion-icon name=\"remove\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-col>\n          <ion-col class=\"ion-text-center\">\n            <ion-label>\n              {{ 'IDEA_COMMON.PDF_TEMPLATE.SIZE' | translate }}: <b>{{ size }}</b>\n            </ion-label>\n          </ion-col>\n          <ion-col class=\"ion-text-center\">\n            <ion-button size=\"small\" [disabled]=\"size === max\" (click)=\"grow()\">\n              <ion-icon name=\"add\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-col>\n        </ion-row>\n        <ion-row class=\"ion-align-items-center\">\n          <ion-col class=\"ion-text-center\">\n            <ion-button size=\"small\" color=\"secondary\" [disabled]=\"size === 1\" (click)=\"shrinkToMin()\">\n              <ion-icon name=\"contract\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-col>\n          <ion-col class=\"ion-text-center\">\n            <ion-button size=\"small\" color=\"secondary\" [disabled]=\"size === max\" (click)=\"growToMax()\">\n              <ion-icon name=\"expand\" slot=\"icon-only\" />\n            </ion-button>\n          </ion-col>\n        </ion-row>\n      </ion-grid>\n    </ion-content>\n  `,\n  styles: [\n    `\n      ion-content {\n        --background: var(--ion-color-white);\n      }\n    `\n  ]\n})\nexport class IDEAPDFTemplateFieldResizeComponent {\n  /**\n   * The columns of the section containing the field.\n   */\n  @Input() columns: string[];\n  /**\n   * The current position of the field.\n   */\n  @Input() colIndex: number;\n  /**\n   * The current size of the field.\n   */\n  @Input() size: number;\n  /**\n   * The max size to which the field can grow.\n   */\n  @Input() max: number;\n\n  grow(): void {\n    if (this.size < this.max && !this.columns[this.colIndex + this.size]) {\n      this.columns[this.colIndex + this.size] = '-';\n      this.size++;\n    }\n  }\n  growToMax(): void {\n    while (this.size < this.max) this.grow();\n  }\n  shrink(): void {\n    if (this.size > 1 && this.columns[this.colIndex + this.size - 1] === '-') {\n      this.columns[this.colIndex + this.size - 1] = null;\n      this.size--;\n    }\n  }\n  shrinkToMin(): void {\n    while (this.size > 1) this.shrink();\n  }\n}\n","<ion-header>\n  <ion-toolbar color=\"ideaToolbar\">\n    @if (!isViewLocked()) {\n      <ion-buttons slot=\"start\">\n        @if (!isInnerLayer()) {\n          <ion-button [title]=\"'COMMON.CANCEL' | translate\" (click)=\"close()\">\n            <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n          </ion-button>\n        }\n        @if (isInnerLayer()) {\n          <ion-button [title]=\"'IDEA_COMMON.PDF_TEMPLATE.NAVIGATE_BACK' | translate\" (click)=\"prevLayer()\">\n            <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n          </ion-button>\n        }\n      </ion-buttons>\n    }\n    <ion-title>{{ 'IDEA_COMMON.PDF_TEMPLATE.EDIT_TEMPLATE' | translate }}</ion-title>\n    @if (!isViewLocked()) {\n      <ion-buttons slot=\"end\">\n        @if (!isInnerLayer() && !disabled) {\n          <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n            <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n          </ion-button>\n        }\n      </ion-buttons>\n    }\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <ion-list class=\"aList maxWidthContainer\">\n    <ion-list-header>\n      <ion-label>\n        <h2 class=\"breadcrumb\">\n          @for (c of getBreadcrumb(); track c; let len = $count; let index = $index; let last = $last) {\n            <span\n              [class.last]=\"last\"\n              [class.tappable]=\"!last && !isViewLocked()\"\n              [title]=\"'IDEA_COMMON.PDF_TEMPLATE.NAVIGATE_BACK' | translate\"\n              (click)=\"prevLayer(len - index - 1)\"\n            >\n              {{ c }}\n              @if (!last) {\n                <ion-icon name=\"chevron-forward\" />\n              }\n            </span>\n          }\n        </h2>\n        <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.BREADCRUMB_I' | translate }}</p>\n        <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.BREADCRUMB_II' | translate }}</p>\n        <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.INSERT_FIELDS_IN_NORMAL_SECTION' | translate }}</p>\n        <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.YOU_CAN_INSERT_SPECIAL_SECTIONS' | translate }}</p>\n      </ion-label>\n      @if (!disabled) {\n        @if (!editSections) {\n          <ion-button\n            color=\"dark\"\n            [title]=\"'IDEA_COMMON.PDF_TEMPLATE.EDIT_SECTIONS' | translate\"\n            (click)=\"editSections = true\"\n          >\n            {{ 'IDEA_COMMON.PDF_TEMPLATE.SECTIONS' | translate }}\n            <ion-icon name=\"pencil\" slot=\"end\" />\n          </ion-button>\n        }\n        @if (editSections) {\n          <ion-button [title]=\"'IDEA_COMMON.PDF_TEMPLATE.ADD_A_SECTION' | translate\" (click)=\"addSection()\">\n            {{ 'COMMON.ADD' | translate }}\n            <ion-icon name=\"add\" slot=\"end\" />\n          </ion-button>\n        }\n        @if (editSections) {\n          <ion-button color=\"dark\" (click)=\"editSections = false\">\n            {{ 'COMMON.DONE' | translate }}\n          </ion-button>\n        }\n      }\n    </ion-list-header>\n    <!-- (repeated) inner section header (title) -->\n    @if (getCurrentLayer().title) {\n      <div class=\"templateSection\">\n        <ion-item\n          [detail]=\"!isViewLocked()\"\n          [button]=\"!isViewLocked()\"\n          (click)=\"editSectionTitleLabel(getCurrentLayer().title)\"\n        >\n          <ion-icon name=\"bookmark-outline\" slot=\"start\" />\n          <ion-label [title]=\"'IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION_TITLE_I' | translate\">\n            @if (getCurrentLayer().title | label) {\n              <b>{{ getCurrentLayer().title | label }}</b>\n            }\n            @if (!(getCurrentLayer().title | label)) {\n              <i>\n                {{ 'IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION_TITLE_EMPTY_NOT_SHOWN' | translate }}\n              </i>\n            }\n            <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION_TITLE' | translate }}</p>\n          </ion-label>\n        </ion-item>\n      </div>\n    }\n    @if (!getCurrentTemplate().length) {\n      <ion-item>\n        <i>{{ 'IDEA_COMMON.PDF_TEMPLATE.NO_SECTION_DEFINED_YET_HERE' | translate }}</i>\n      </ion-item>\n    }\n    @for (section of getCurrentTemplate(); track section; let index = $index; let first = $first; let last = $last) {\n      <div class=\"templateSection\" [class.hasFieldAnError]=\"hasFieldAnError('s[' + index + ']')\">\n        @if (section.isEither(ST.PAGE_BREAK, ST.BLANK_ROW, ST.ROW)) {\n          <ion-item>\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"first\"\n                (click)=\"moveSectionUpInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-up\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"last\"\n                (click)=\"moveSectionDownInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-down\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <!---->\n            @if (section.type === ST.PAGE_BREAK) {\n              <ion-icon name=\"code-slash\" slot=\"start\" />\n              <ion-label class=\"specialRow\" [title]=\"'IDEA_COMMON.PDF_TEMPLATE.PAGE_BREAK_I' | translate\">\n                <b>{{ 'IDEA_COMMON.PDF_TEMPLATE.PAGE_BREAK' | translate }}</b>\n              </ion-label>\n            }\n            <!---->\n            @if (section.type === ST.BLANK_ROW) {\n              <ion-icon name=\"code\" slot=\"start\" />\n              <ion-label class=\"specialRow\" [title]=\"'IDEA_COMMON.PDF_TEMPLATE.BLANK_ROW_I' | translate\">\n                <i>{{ 'IDEA_COMMON.PDF_TEMPLATE.BLANK_ROW' | translate }}</i>\n              </ion-label>\n            }\n            <!---->\n            @if (section.type === ST.ROW) {\n              <ion-icon name=\"apps\" slot=\"start\" />\n              <ion-label class=\"ion-text-wrap normalRow\">\n                <ion-row class=\"ion-align-items-center\">\n                  @for (_ of section.columns; track $index; let i = $index) {\n                    @if (section.doesColumnContainAField(i)) {\n                      <ion-col\n                        [size]=\"12\"\n                        [sizeMd]=\"section.getColumnFieldSize(i)\"\n                        [class.hasFieldAnError]=\"hasFieldAnError('s[' + index + '].' + 'columns[' + i + ']')\"\n                      >\n                        @if (!isColumnComplex(section.columns[i])) {\n                          <ion-chip\n                            color=\"primary\"\n                            class=\"simpleField\"\n                            [title]=\"displayField(section, i, true)\"\n                            [class.notTappable]=\"isViewLocked()\"\n                            (click)=\"manageField(section, i, $event)\"\n                          >\n                            <ion-icon name=\"at\" />\n                            <ion-label>\n                              <small>{{ section.getColumnFieldSize(i) }}</small>\n                              {{ displayField(section, i) }}\n                            </ion-label>\n                          </ion-chip>\n                        }\n                        <!---->\n                        @if (isColumnComplex(section.columns[i])) {\n                          <ion-chip\n                            color=\"dark\"\n                            [title]=\"displayField(section, i, true)\"\n                            [class.notTappable]=\"isViewLocked()\"\n                            (click)=\"manageField(section, i, $event)\"\n                          >\n                            <ion-icon name=\"shapes\" />\n                            <ion-label>\n                              <small>{{ section.getColumnFieldSize(i) }}</small>\n                              <span\n                                class=\"hasHTMLContent\"\n                                [innerHtml]=\"displayField(section, i) | highlight: getCurrentVariables()\"\n                              ></span>\n                            </ion-label>\n                          </ion-chip>\n                        }\n                      </ion-col>\n                    }\n                    @if (section.isColumnEmpty(i)) {\n                      <ion-col [size]=\"12\" [sizeMd]=\"1\">\n                        <!-- empty column -->\n                        @if (!disabled && !isViewLocked()) {\n                          <ion-button fill=\"clear\" expand=\"block\" color=\"medium\" (click)=\"addField(section, i)\">\n                            <ion-icon name=\"add-circle\" slot=\"icon-only\" />\n                          </ion-button>\n                        }\n                        @if (moveMode) {\n                          <ion-button fill=\"clear\" expand=\"block\" color=\"medium\" (click)=\"completeMove(section, i)\">\n                            <ion-icon name=\"golf\" slot=\"icon-only\" />\n                          </ion-button>\n                        }\n                      </ion-col>\n                    }\n                  }\n                </ion-row>\n              </ion-label>\n            }\n            <!---->\n            @if (moveMode && section.type === ST.ROW) {\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"medium\"\n                [title]=\"'COMMON.CANCEL' | translate\"\n                (click)=\"completeMove(moveMode.section, moveMode.colIndex)\"\n              >\n                <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (editSections) {\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"danger\"\n                [title]=\"'IDEA_COMMON.PDF_TEMPLATE.REMOVE_SECTION' | translate\"\n                (click)=\"deleteSection(section)\"\n              >\n                <ion-icon name=\"trash\" slot=\"icon-only\" />\n              </ion-button>\n            }\n          </ion-item>\n        }\n        @if (section.type === ST.HEADER) {\n          <ion-item [detail]=\"!isViewLocked()\" [button]=\"!isViewLocked()\" (click)=\"editHeaderLabel(section.title)\">\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"first\"\n                (click)=\"moveSectionUpInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-up\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"last\"\n                (click)=\"moveSectionDownInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-down\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <ion-icon name=\"bookmark\" slot=\"start\" />\n            <ion-label [title]=\"'IDEA_COMMON.PDF_TEMPLATE.HEADER_I' | translate\">\n              <b class=\"hasHTMLContent\" [innerHtml]=\"section.title | label | highlight: getCurrentVariables()\"></b>\n              <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.HEADER' | translate }}</p>\n            </ion-label>\n            @if (editSections) {\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"danger\"\n                [title]=\"'IDEA_COMMON.PDF_TEMPLATE.REMOVE_SECTION' | translate\"\n                (click)=\"deleteSection(section)\"\n              >\n                <ion-icon name=\"trash\" slot=\"icon-only\" />\n              </ion-button>\n            }\n          </ion-item>\n        }\n        @if (section.isEither(ST.INNER_SECTION, ST.REPEATED_INNER_SECTION)) {\n          <ion-item [detail]=\"!isViewLocked()\" [button]=\"!isViewLocked()\" (click)=\"openInnerSection(section)\">\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"first\"\n                (click)=\"moveSectionUpInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-up\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            @if (editSections) {\n              <ion-button\n                slot=\"start\"\n                color=\"medium\"\n                fill=\"clear\"\n                [disabled]=\"last\"\n                (click)=\"moveSectionDownInTemplate(section)\"\n              >\n                <ion-icon name=\"arrow-down\" slot=\"icon-only\" />\n              </ion-button>\n            }\n            <ion-icon [name]=\"getInnerSectionIcon(section)\" slot=\"start\" />\n            <!---->\n            @if (section.type === ST.INNER_SECTION) {\n              <ion-label [title]=\"'IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION_I' | translate\">\n                {{ section.description }}\n                <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.INNER_SECTION' | translate }}</p>\n              </ion-label>\n            }\n            <!---->\n            @if (section.type === ST.REPEATED_INNER_SECTION) {\n              <ion-label [title]=\"'IDEA_COMMON.PDF_TEMPLATE.REPEATED_INNER_SECTION_I' | translate\">\n                {{ section.description }}\n                <p>{{ 'IDEA_COMMON.PDF_TEMPLATE.REPEATED_INNER_SECTION' | translate }}</p>\n              </ion-label>\n            }\n            <!---->\n            @if (editSections) {\n              <ion-button\n                slot=\"end\"\n                fill=\"clear\"\n                color=\"danger\"\n                [title]=\"'IDEA_COMMON.PDF_TEMPLATE.REMOVE_SECTION' | translate\"\n                (click)=\"deleteSection(section)\"\n              >\n                <ion-icon name=\"trash\" slot=\"icon-only\" />\n              </ion-button>\n            }\n          </ion-item>\n        }\n      </div>\n    }\n  </ion-list>\n</ion-content>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { AlertController, IonButton, IonIcon } from '@ionic/angular/standalone';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Component({\n  selector: 'idea-show-hint-button',\n  standalone: true,\n  imports: [CommonModule, IonButton, IonIcon],\n  template: `\n    <ion-button [slot]=\"slot\" [fill]=\"fill\" [color]=\"color\" (click)=\"showHint($event)\">\n      <ion-icon [icon]=\"icon\" slot=\"icon-only\" />\n    </ion-button>\n  `\n})\nexport class IDEAShowHintButtonComponent {\n  private _alert = inject(AlertController);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The string to show as title of the alert.\n   */\n  @Input() hint: string;\n  /**\n   * The string to show as content of the alert.\n   * If not specified, it's equal to `hint.concat('_I')`.\n   */\n  @Input() message?: string;\n  /**\n   * The string to show as the alert's confirmation button.\n   */\n  @Input() confirmationText = 'OK';\n  /**\n   * Whether the input strings need to be translated or they are already.\n   */\n  _shouldTranslate: boolean;\n  get translate(): boolean | string {\n    return this._shouldTranslate;\n  }\n  @Input() set translate(input: boolean | string) {\n    this._shouldTranslate = String(input) !== 'false';\n  }\n  /**\n   * A CSS class to apply to the alert box.\n   */\n  @Input() cssClass = 'alertLongOptions';\n  /**\n   * The slots where to put the button.\n   */\n  @Input() slot = 'start';\n  /**\n   * The fill attribute of the button.\n   */\n  @Input() fill = 'clear';\n  /**\n   * The color of the button.\n   */\n  @Input() color?: string;\n  /**\n   * The IonIcon to show for the button.\n   */\n  @Input() icon = 'help-circle-outline';\n\n  async showHint(event?: any): Promise<void> {\n    if (event) event.stopPropagation();\n\n    if (!this.hint) return;\n\n    const header = this._shouldTranslate ? this._translate._(this.hint) : this.hint;\n    const message = this._shouldTranslate ? this._translate._(this.message || this.hint.concat('_I')) : this.message;\n    const buttonText =\n      this._shouldTranslate && this.confirmationText !== 'OK'\n        ? this._translate._(this.confirmationText)\n        : this.confirmationText;\n    const buttons = [{ text: buttonText }];\n    const cssClass = this.cssClass;\n\n    const alert = await this._alert.create({ header, message, buttons, cssClass });\n    alert.present();\n  }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n  IonButton,\n  IonButtons,\n  IonCol,\n  IonContent,\n  IonHeader,\n  IonIcon,\n  IonInput,\n  IonItem,\n  IonLabel,\n  IonList,\n  IonListHeader,\n  IonRow,\n  IonTitle,\n  IonToolbar,\n  ModalController\n} from '@ionic/angular/standalone';\nimport SignaturePad from 'signature_pad';\nimport { Signature, Suggestion } from 'idea-toolbox';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\nimport { IDEASuggestionsComponent } from '../select/suggestions.component';\nimport { IDEAMessageService } from '../message.service';\nimport { IDEATranslationsService } from '../translations/translations.service';\n\nconst SIGNATURE_SIZE_LIMIT = 80 * 1000; // 80 K\n\n@Component({\n  selector: 'idea-signature',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    IDEATranslatePipe,\n    IonHeader,\n    IonToolbar,\n    IonButton,\n    IonButtons,\n    IonIcon,\n    IonTitle,\n    IonContent,\n    IonList,\n    IonListHeader,\n    IonLabel,\n    IonItem,\n    IonInput,\n    IonRow,\n    IonCol\n  ],\n  template: `\n    <ion-header>\n      <ion-toolbar color=\"ideaToolbar\">\n        <ion-buttons slot=\"start\">\n          <ion-button [title]=\"'IDEA_COMMON.SIGNATURE.CANCEL' | translate\" (click)=\"close()\">\n            <ion-icon icon=\"close\" slot=\"icon-only\" />\n          </ion-button>\n        </ion-buttons>\n        <ion-title>{{ 'IDEA_COMMON.SIGNATURE.SIGNATURE' | translate }}</ion-title>\n        <ion-buttons slot=\"end\">\n          @if (existingSignature) {\n            <ion-button [title]=\"'IDEA_COMMON.SIGNATURE.CLEAR_SIGNATURE' | translate\" (click)=\"undo()\">\n              <ion-icon icon=\"arrow-undo\" slot=\"icon-only\" />\n            </ion-button>\n          }\n          @if (canEdit()) {\n            <ion-button [title]=\"'IDEA_COMMON.SIGNATURE.SAVE_SIGNATURE' | translate\" (click)=\"save()\">\n              <ion-icon icon=\"checkmark\" slot=\"icon-only\" />\n            </ion-button>\n          }\n        </ion-buttons>\n      </ion-toolbar>\n    </ion-header>\n    <ion-content>\n      <ion-list class=\"aList\">\n        <ion-list-header>\n          <ion-label>{{ 'IDEA_COMMON.SIGNATURE.SIGNATORY' | translate }}</ion-label>\n        </ion-list-header>\n        <ion-item lines=\"none\">\n          <ion-input\n            type=\"text\"\n            [placeholder]=\"'IDEA_COMMON.SIGNATURE.NAME_AND_SURNAME' | translate\"\n            [disabled]=\"!canEdit()\"\n            [class.fieldHasError]=\"signatoryError\"\n            [(ngModel)]=\"signature.signatory\"\n          />\n          @if (contacts.length && canEdit()) {\n            <ion-button\n              fill=\"clear\"\n              color=\"dark\"\n              slot=\"end\"\n              [title]=\"'IDEA_COMMON.SIGNATURE.CHOOSE_FROM_CONTACTS' | translate\"\n              (click)=\"pickSignatory()\"\n            >\n              <ion-icon icon=\"person-circle\" slot=\"icon-only\" />\n            </ion-button>\n          }\n        </ion-item>\n      </ion-list>\n      <ion-list class=\"aList\">\n        <ion-list-header>\n          <ion-label>{{ 'IDEA_COMMON.SIGNATURE.SIGNATURE_EXPLANATION' | translate }}</ion-label>\n        </ion-list-header>\n        <div class=\"canvasContainer\" [class.fieldHasError]=\"signatureError\">\n          <canvas id=\"signatureCanvas\"></canvas>\n        </div>\n        @if (canEdit()) {\n          <ion-row>\n            <ion-col class=\"ion-text-right\">\n              <ion-button fill=\"clear\" [title]=\"'IDEA_COMMON.SIGNATURE.CLEAR_SIGNATURE' | translate\" (click)=\"clear()\">\n                <ion-icon icon=\"trash-outline\" slot=\"icon-only\" />\n              </ion-button>\n            </ion-col>\n          </ion-row>\n        }\n      </ion-list>\n    </ion-content>\n  `,\n  styles: [\n    `\n      .aList {\n        ion-list-header {\n          font-size: 0.7em;\n          font-weight: bold;\n          text-transform: uppercase;\n        }\n        .canvasContainer {\n          margin: 0 auto;\n          text-align: center;\n          background: white;\n          #signatureCanvas {\n            width: 100%;\n            height: 250px;\n          }\n        }\n        .canvasContainer.fieldHasError {\n          border-bottom: 2px solid var(--ion-color-danger) !important;\n        }\n        .fieldHasError {\n          --border-color: var(--ion-color-danger) !important;\n          --inner-border-width: 0 0 2px 0 !important;\n        }\n      }\n    `\n  ]\n})\nexport class IDEASignatureComponent {\n  private _modal = inject(ModalController);\n  private _message = inject(IDEAMessageService);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * An existing signature to use.\n   */\n  @Input() existingSignature: Signature;\n  /**\n   * Whether it is possible or not to edit an existing signature.\n   */\n  @Input() preventEditing: boolean;\n  /**\n   * A list of contacts that could be the signatory of this signature.\n   */\n  @Input() contacts: string[];\n\n  signature = new Signature();\n  canvas: HTMLCanvasElement | null = null;\n  pad: SignaturePad | null = null;\n  signatoryError: boolean;\n  signatureError: boolean;\n\n  ionViewDidEnter(): void {\n    // prepare the canvas area for the signature\n    this.canvas = document.getElementById('signatureCanvas') as HTMLCanvasElement;\n    this.pad = new SignaturePad(this.canvas);\n    this.resizeCanvas();\n    // in case a signature already exists, show it\n    if (this.existingSignature) {\n      this.signature.load(this.existingSignature);\n      this.pad.fromDataURL(this.signature.pngURL);\n      if (this.canEdit()) this.pad.on();\n      else this.pad.off();\n    }\n    // pre-load the first contact, if any (and the signatory isn't already filled out)\n    if (this.contacts.length && !this.signature.signatory) this.signature.signatory = this.contacts[0];\n  }\n\n  canEdit(): boolean {\n    return !this.existingSignature || !this.preventEditing;\n  }\n\n  async pickSignatory(): Promise<void> {\n    const modal = await this._modal.create({\n      component: IDEASuggestionsComponent,\n      componentProps: {\n        data: (this.contacts || []).map(c => new Suggestion({ value: c })),\n        searchPlaceholder: this._translate._('IDEA_COMMON.SIGNATURE.CHOOSE_A_SIGNATORY'),\n        hideClearButton: true\n      }\n    });\n    modal.onDidDismiss().then(res => {\n      if (res && res.data && res.data.value) this.signature.signatory = res.data.value;\n    });\n    modal.present();\n  }\n\n  clear(): void {\n    this.pad.clear();\n  }\n\n  save(): Promise<void> {\n    // check whether the fields are empty\n    this.signatoryError = !this.signature.signatory?.trim();\n    this.signatureError = this.pad.isEmpty();\n    if (this.signatoryError || this.signatureError)\n      return this._message.warning('IDEA_COMMON.SIGNATURE.VERIFY_SIGNATORY_AND_SIGNATURE');\n    // load the signature URL\n    this.signature.pngURL = this.pad.toDataURL('image/png');\n    // check whether the signature size is acceptable\n    this.signatureError = this.signature.pngURL.length > SIGNATURE_SIZE_LIMIT;\n    if (this.signatureError) return this._message.warning('IDEA_COMMON.SIGNATURE.SIGNATURE_IS_TOO_COMPLEX');\n    // clean the signatory string\n    this.signature.signatory = this.signature.signatory.trim();\n    // update the timestamp\n    this.signature.timestamp = Date.now();\n    // close the modal\n    this._modal.dismiss(this.signature);\n  }\n\n  undo(): void {\n    this._modal.dismiss(true);\n  }\n\n  close(): void {\n    this._modal.dismiss();\n  }\n\n  resizeCanvas(): void {\n    const ratio = Math.max(window.devicePixelRatio || 1, 1);\n    this.canvas.width = this.canvas.offsetWidth * ratio;\n    this.canvas.height = this.canvas.offsetHeight * ratio;\n    this.canvas.getContext('2d').scale(ratio, ratio);\n    this.pad.clear();\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\n\n@Component({\n  standalone: true,\n  selector: 'app-tooltip',\n  imports: [IDEATranslatePipe],\n  template: `\n    <div class=\"tooltipContainer\" (mouseleave)=\"onTooltipMouseLeave()\">\n      <span class=\"closeButton\" (click)=\"onClose()\">×</span>\n      @if (title) {\n        <div class=\"tooltipTitle\">{{ title }}</div>\n      }\n      <div class=\"tooltipText\">{{ text }}</div>\n      @if (link) {\n        <a [href]=\"link\" target=\"_blank\" class=\"tooltipLink\">{{ 'IDEA_COMMON.TOOLTIP.LEARN_MORE' | translate }}</a>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      .tooltipContainer {\n        position: absolute;\n        background-color: #333;\n        color: #fff;\n        padding: 10px;\n        border-radius: 5px;\n        z-index: 1000;\n        white-space: normal;\n        overflow-y: auto;\n      }\n      .tooltipTitle {\n        font-weight: bold;\n        margin-bottom: 5px;\n      }\n      .tooltipLink {\n        display: block;\n        margin-top: 10px;\n        text-align: center;\n        background-color: var(--ion-color-primary);\n        color: #fff;\n        padding: 5px 10px;\n        border-radius: 3px;\n        text-decoration: none;\n      }\n      .closeButton {\n        position: absolute;\n        top: 5px;\n        right: 5px;\n        cursor: pointer;\n        font-weight: bold;\n        color: #fff;\n        font-size: 14px;\n      }\n    `\n  ]\n})\nexport class IDEATooltipComponent {\n  /**\n   * The tooltip title.\n   */\n  @Input() title = '';\n  /**\n   * The tooltip text.\n   */\n  @Input() text = '';\n  /**\n   * The tooltip link.\n   */\n  @Input() link = '';\n  /**\n   * The tooltip close event.\n   */\n  @Output() closed = new EventEmitter<void>();\n\n  onTooltipMouseLeave(): void {\n    this.onClose();\n  }\n\n  onClose(): void {\n    this.closed.emit();\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  ComponentRef,\n  ViewContainerRef,\n  Injector,\n  HostListener,\n  inject,\n  OnDestroy\n} from '@angular/core';\n\nimport { IDEATooltipComponent } from './tooltip.component';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Directive({ standalone: true, selector: '[tooltip]' })\nexport class IDEATooltipDirective implements OnDestroy {\n  private _injector = inject(Injector);\n  private _elementRef = inject(ElementRef);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * The key in the translations for the tooltip.\n   * From this keys we also get the link (\"_L\") and title (\"_T\"), if any.\n   */\n  @Input('tooltip') hint = '';\n  /**\n   * The delay before showing the tooltip.\n   */\n  @Input() tooltipDelay = 1000;\n\n  private tooltipRef: ComponentRef<IDEATooltipComponent> | null = null;\n  private showTimeout: any;\n\n  @HostListener('mouseover') onMouseOver(): void {\n    this.showTooltip(this.tooltipDelay);\n  }\n  @HostListener('mouseout') onMouseOut(): void {\n    clearTimeout(this.showTimeout);\n  }\n\n  private showTooltip(delay: number): void {\n    this.clearTooltip();\n    this.showTimeout = setTimeout((): void => {\n      this.createTooltip();\n    }, delay);\n  }\n\n  private createTooltip(): void {\n    if (this.tooltipRef) return;\n\n    this.tooltipRef = this._viewContainerRef.createComponent(IDEATooltipComponent, { injector: this._injector });\n\n    const instance = this.tooltipRef.instance;\n    instance.title = this._translate._(`${this.hint}_T`);\n    instance.text = this._translate._(this.hint);\n    instance.link = this._translate._(`${this.hint}_L`);\n    instance.closed.subscribe((): void => {\n      this.hideTooltip();\n    });\n\n    const rect = this._elementRef.nativeElement.getBoundingClientRect();\n    const tooltipElement = this.tooltipRef.location.nativeElement;\n\n    const tooltipWidth = 300;\n    const viewportWidth = window.innerWidth;\n\n    let top = rect.top - 50;\n    let left = rect.left;\n    if (top < 0) top = rect.bottom + 10;\n    if (left + tooltipWidth > viewportWidth) left = viewportWidth - tooltipWidth - 10;\n    if (left < 0) left = 10;\n\n    tooltipElement.style.position = 'absolute';\n    tooltipElement.style.top = `${top}px`;\n    tooltipElement.style.left = `${left}px`;\n    tooltipElement.style.width = `${tooltipWidth}px`;\n    tooltipElement.style['max-height'] = `${tooltipWidth}px`;\n\n    document.body.appendChild(tooltipElement);\n  }\n\n  private clearTooltip(): void {\n    clearTimeout(this.showTimeout);\n    this.hideTooltip();\n  }\n\n  private hideTooltip(): void {\n    if (this.tooltipRef) {\n      this.tooltipRef.destroy();\n      this.tooltipRef = null;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearTooltip();\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\n\nimport { IDEATranslationsService } from './translations.service';\n\n/**\n * Handle dates with the locale loaded from IDEA's translation service.\n */\n@Pipe({ name: 'dateLocale', pure: false, standalone: true })\nexport class IDEALocalizedDatePipe implements PipeTransform {\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * Pipe function to format the date in the correct locale (optionally forcing a timeZone).\n   */\n  transform(value: any, pattern: string = 'mediumDate', timeZone?: string): any {\n    return this._translate.formatDate(value, pattern, timeZone);\n  }\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { Suggestion } from 'idea-toolbox';\nimport { IonButton, IonItem, IonLabel, IonList, IonListHeader, IonPopover } from '@ionic/angular/standalone';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\nimport { IDEATranslatePipe } from './translate.pipe';\n\n// requires two assets folders:\n//   1. flags, containing the pngs of each country's flags\n//   2. i18n, containing the json of each country's translation\n\n@Component({\n  selector: 'idea-language-picker',\n  standalone: true,\n  imports: [IonButton, IonPopover, IonList, IonListHeader, IonItem, IonLabel, IDEATranslatePipe],\n  template: `\n    <ion-button id=\"click-trigger\" [fill]=\"fill\" [title]=\"'IDEA_COMMON.LANGUAGE_PICKER.CHANGE_LANGUAGE' | translate\">\n      <img [src]=\"getFlagURL()\" />\n    </ion-button>\n    <ion-popover #popover trigger=\"click-trigger\" triggerAction=\"click\">\n      <ng-template>\n        <ion-list>\n          <ion-list-header>\n            <ion-label>{{ 'IDEA_COMMON.LANGUAGE_PICKER.CHANGE_LANGUAGE' | translate }}</ion-label>\n          </ion-list-header>\n          @for (language of languages; track language.value) {\n            <ion-item button (click)=\"pickLanguage(language.value, popover)\">\n              <img slot=\"start\" [src]=\"getFlagURL(language.value)\" />\n              <ion-label>{{ language.name }}</ion-label>\n            </ion-item>\n          }\n        </ion-list>\n      </ng-template>\n    </ion-popover>\n  `,\n  styles: [\n    `\n      img {\n        border: 1px solid transparent;\n        border-radius: 20px;\n        width: 25px;\n      }\n    `\n  ]\n})\nexport class IDEALanguagePickerComponent implements OnInit {\n  private _translate = inject(IDEATranslationsService);\n\n  /**\n   * Button fill preference.\n   */\n  @Input() fill: string;\n\n  languages: { value: string; name: string }[] = [];\n\n  ngOnInit(): void {\n    this.languages = this._translate\n      .getLangs()\n      .map(l => new Suggestion({ value: l, name: this._translate.getLanguageNameByKey(l) }));\n  }\n\n  getFlagURL(languageCode?: string): string {\n    return `assets/flags/${languageCode || this._translate.getCurrentLang()}.png`;\n  }\n\n  pickLanguage(languageCode: string, popover: IonPopover): void {\n    if (languageCode) this._translate.use(languageCode);\n    if (popover) popover.dismiss();\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { IDEATranslatePipe } from './translate.pipe';\nimport { IDEALocalizedDatePipe } from './dateLocale.pipe';\nimport { IDEALocalizedLabelPipe } from './label.pipe';\n\nimport { IDEALanguagePickerComponent } from './languagePicker.component';\n\n/**\n * @deprecated use standalone imports instead\n * @todo to remove in future releases\n */\n@NgModule({\n  imports: [IDEATranslatePipe, IDEALocalizedDatePipe, IDEALocalizedLabelPipe, IDEALanguagePickerComponent],\n  exports: [IDEATranslatePipe, IDEALocalizedDatePipe, IDEALocalizedLabelPipe, IDEALanguagePickerComponent]\n})\nexport class IDEATranslationsModule {}\n","import { Pipe, PipeTransform, SecurityContext, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * Checks a string for URLs and if so, makes them clickable and returns the sanitized html.\n */\n@Pipe({ name: 'linkify', pure: true, standalone: true })\nexport class IDEALinkifyPipe implements PipeTransform {\n  private _sanitizer = inject(DomSanitizer);\n\n  transform(text: string): string {\n    if (!text) return text;\n\n    const urlRegex = /(\\b(https?:\\/\\/|www\\.)[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/gi;\n\n    const result = text.replace(urlRegex, url => {\n      let href = url;\n      if (url.startsWith('www.')) href = 'https://' + url;\n      return `<a href=\"${href}\" target=\"_blank\">${url}</a>`;\n    });\n\n    return this._sanitizer.sanitize(SecurityContext.HTML, result);\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { epochDateTime } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../environment';\n\n/**\n * To communicate with an AWS API Gateway websocket istance.\n * Lighter, alternative version of _IDEAAWSAPISocketService_.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEAWebSocketApiService {\n  protected _env = inject(IDEAEnvironment);\n\n  /**\n   * The URL to connect for socket communication.\n   */\n  apiURL: string;\n  /**\n   * Passed as `Authorization` header.\n   */\n  authToken: string;\n  /**\n   * The maximum amount of minutes of inactivity after which we ping the connection to keep it alive.\n   */\n  MAX_INACTIVITY_MINUTES = 7;\n  /**\n   * The amount of minutes after which we check if the connection needs to be pinged to be kept alive.\n   */\n  KEEP_ALIVE_MINUTES_INTERVAL = 2;\n  /**\n   * In case we are offline, the amount of minutes after which we check if we are online, so we can re-connect.\n   */\n  TRY_AGAIN_OFFLINE_MINUTES = 3;\n\n  /**\n   * The current websocket connection.\n   */\n  protected connection: WebSocket;\n  /**\n   * The options with which we opened a connection, to re-open it if needed.\n   */\n  protected options: IDEAWebSocketApiServiceOpenOptions;\n  /**\n   * A timeout to ping the connection every once in a while, to keep it alive.\n   */\n  protected pingTimeout: any;\n  /**\n   * The timestamp of last activity for the connection, to make sure to ping it in case it's almost dead.\n   */\n  protected lastActivityAt: epochDateTime;\n  /**\n   * A timeout to re-try to open a connection later on, hoping we are online again.\n   */\n  protected offlineTimeout: any;\n  /**\n   * Whether the connection was correctly opened at least once.\n   */\n  protected wasOpenAtLeastOnce: boolean;\n\n  constructor() {\n    this.apiURL = 'wss://'.concat([this._env.idea.socket?.url, this._env.idea.socket?.stage].filter(x => x).join('/'));\n  }\n\n  /**\n   * Open a connection to the websocket API.\n   */\n  open(options?: IDEAWebSocketApiServiceOpenOptions): void {\n    this.options = options || this.options || {};\n\n    if (this.connection && this.isOpen()) return;\n\n    let qp = '';\n    Object.entries(this.options.openParams || {}).forEach(([key, value]): string => (qp += `&${key}=${String(value)}`));\n\n    const auth = this.authToken ? '?authorization='.concat(this.authToken) : '?noAuth=';\n    this.connection = new WebSocket(this.apiURL.concat(auth, qp));\n\n    this.connection.onopen = (event: any): void => {\n      if (this.options.debug) console.log('WEBSOCKET IS OPEN', event);\n      // reset the try-again-when-offline mechanism, since we are online and connected\n      if (this.offlineTimeout) clearTimeout(this.offlineTimeout);\n      this.offlineTimeout = null;\n      // mark the start of the connection as the first activity time\n      this.lastActivityAt = Date.now();\n      // set a timer that every N minutes checks if we need to ping the connection to keep it alive\n      this.pingTimeout = setTimeout((): void => this.keepItAlive(), this.minutesToMS(this.KEEP_ALIVE_MINUTES_INTERVAL));\n      // set the connection as correctly opened at least once (for re-connecting scenarios)\n      this.wasOpenAtLeastOnce = true;\n      // run the user-defined onOpen actions\n      if (this.options.onOpen) this.options.onOpen(event);\n    };\n    this.connection.onclose = (event: any): void => {\n      if (this.options.debug) console.log('WEBSOCKET WAS CLOSED BY EXTERNAL EVENTS', event);\n      // run the user-defined onClose actions\n      if (this.options.onClose) this.options.onClose(event);\n      // in case the connection was closed by other events (e.g. offline) reset the data and try to re-open the socket\n      this.close(this.wasOpenAtLeastOnce);\n    };\n    this.connection.onerror = (event: any): void => {\n      if (this.options.debug) console.log('WEBSOCKET HAD AN ERROR', event);\n      // run the user-defined onError actions\n      if (this.options.onError) this.options.onError(event);\n    };\n    this.connection.onmessage = (event: any): void => {\n      if (this.options.debug) console.log('WEBSOCKET INCOMING MESSAGE', event);\n      try {\n        const data = JSON.parse(event.data || {});\n        if (this.options.onMessage) this.options.onMessage(data);\n      } catch (err) {\n        // IGNORE: it probably comes from a keep-alive ping-pong message\n      }\n      this.lastActivityAt = Date.now();\n    };\n  }\n\n  /**\n   * Close the current connection to the web socket API.\n   * @param itShouldReopen in case the connection was forcibly closed, try to re-open it (with offline mechanism).\n   */\n  close(itShouldReopen?: boolean): void {\n    if (!this.connection) return;\n\n    // reset the events listener\n    this.connection.onopen = null;\n    this.connection.onclose = null;\n    this.connection.onmessage = null;\n    this.connection.onerror = null;\n    // in case the connection was closed by a manual action, reset the initial parameters\n    if (!itShouldReopen) {\n      this.options = null;\n      this.wasOpenAtLeastOnce = false;\n    }\n    // reset the keep-alive mechanism\n    if (this.pingTimeout) clearTimeout(this.pingTimeout);\n    this.pingTimeout = null;\n    this.lastActivityAt = null;\n    // reset the try-again-when-offline mechanism\n    if (this.offlineTimeout) clearTimeout(this.offlineTimeout);\n    this.offlineTimeout = null;\n    // close the connection and empty the reference\n    this.connection.close();\n    this.connection = null;\n    // in case the connection was forcibly closed, try to re-open it\n    if (itShouldReopen) this.reOpen();\n  }\n  /**\n   * Try to-reopen a closed connection, if we are online.\n   */\n  protected async reOpen(): Promise<void> {\n    // in case we are online, reopen the connection right away\n    const isOnline = navigator.onLine;\n    if (this.options.debug) console.log('WEBSOCKET WILL TRY TO RE-OPEN', isOnline, new Date());\n    if (isOnline) return this.open();\n    // if we are offline, set a timer to try to re-open the connection later on\n    this.offlineTimeout = setTimeout(\n      (): Promise<void> => this.reOpen(),\n      this.minutesToMS(this.TRY_AGAIN_OFFLINE_MINUTES)\n    );\n  }\n\n  /**\n   * Whether the socket connection is currently open.\n   */\n  isOpen(): boolean {\n    return this.connection && this.connection.readyState === WebSocket.OPEN;\n  }\n\n  /**\n   * A simple message delivered to the server to keep the connection alive.\n   */\n  protected ping(): void {\n    if (this.options.debug) console.log('WEBSOCKET IS PINGING THE SERVER', new Date());\n    this.connection.send('ping');\n  }\n\n  /**\n   * Helper to keep the connection alive, if needed.\n   */\n  protected keepItAlive(): void {\n    if (this.options.debug) console.log('WEBSOCKET KEEP-IT-ALIVE', new Date());\n    // if there wasn't an acivity in the last MAX_INACTIVITY_MINUTES, ping the connection\n    if (!this.lastActivityAt || this.lastActivityAt + this.minutesToMS(this.MAX_INACTIVITY_MINUTES) < Date.now())\n      this.ping();\n    // set again the timer to keep the connection alive\n    if (this.pingTimeout) clearTimeout(this.pingTimeout);\n    this.pingTimeout = setTimeout((): void => this.keepItAlive(), this.minutesToMS(this.KEEP_ALIVE_MINUTES_INTERVAL));\n  }\n\n  /**\n   * Convert minutes to milliseconds.\n   */\n  protected minutesToMS(minutes: number): number {\n    return minutes * 60 * 1000;\n  }\n}\n\n/**\n * The options to open a socket connection and handle its events.\n */\nexport interface IDEAWebSocketApiServiceOpenOptions {\n  /**\n   * Optional parameters needed to be passed to the socket's authorizer to open the connection.\n   */\n  openParams?: { [key: string]: any };\n  /**\n   * Action to execute when the connection is confirmed \"open\" by the server.\n   */\n  onOpen?: (event: any) => void;\n  /**\n   * Action to execute when the connection closes (for external events).\n   */\n  onClose?: (event: any) => void;\n  /**\n   * Action to execute when a message is delivered from the server.\n   */\n  onMessage?: (event: any) => void;\n  /**\n   * Action to execute when an error occurs.\n   */\n  onError?: (event: any) => void;\n  /**\n   * Whether to show debug messages.\n   */\n  debug?: boolean;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MAX_PAGE_SIZE","i1"],"mappings":"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"}