{"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/cdRefresh.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, OnInit, inject, ChangeDetectionStrategy, Input } 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  imports: [IonIcon, IonButton, IonLabel, IonRow, IonCol, IonGrid, IonContent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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})\n/**\n * Note: this component is instantiated dynamically by `IDEAActionSheetController` through Ionic's\n * `PopoverController` (`componentProps`). With `useSetInputAPI` disabled (the default), Ionic assigns\n * those props via `Object.assign`, which would overwrite signal inputs (`InputSignal`) with plain values.\n * For this reason the inputs below must stay as classic `@Input()` properties.\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      statusFileURL?: string;\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","/**\n * The change-detection \"bridge\".\n *\n * WHAT IT IS\n *   A best-effort helper that forces change detection on the currently visible Ionic page after\n *   library async work that, by itself, does NOT trigger Angular change detection.\n *\n * THE PROBLEM IT SOLVES\n *   On Angular 22, Ionic's `StackController` detaches a page/overlay from the root change-detection\n *   tree, so `ApplicationRef.tick()` never reaches its view (verified empirically). A page/overlay is\n *   then only rendered when its OWN view is marked dirty — by a template event or a signal. So any\n *   state assigned to it from a non-template context stays unrendered until the next user interaction:\n *     - a native `fetch` (IDEAApiService, IDEAAttachmentsService S3 upload, IDEAAppStatusService,\n *       IDEATranslationsService) resolves OUTSIDE the Angular zone — no tick at all on a Zone app;\n *     - **data read from a CACHE / storage / any non-fetch async** (e.g. a service `getList()` that\n *       returns an already-loaded list, a `Promise.resolve`, a `setTimeout`) — even when a Zone tick\n *       DOES fire, it cannot reach the detached view, so the page/overlay still stays stale;\n *     - an Ionic overlay dismiss callback runs outside the template event flow;\n *     - a WebSocket message arrives from the native/socket layer.\n *   On a ZONELESS app the same holds for an even wider set (only a signal / markForCheck / DOM event\n *   schedules CD). The classic symptom: a page/modal stays on its skeletons — or a chained form does\n *   not advance — until you touch a control (whose event finally ticks the view).\n *\n *   Because the gap is the DETACHED VIEW, not the data source, the bridge is wired to two kinds of\n *   trigger: (a) the moment a view ENTERS / an overlay PRESENTS — which catches state populated around\n *   open time regardless of source (fetch, cache, storage); and (b) the late async events (fetch\n *   finally / websocket / overlay dismiss) — which catch data that lands well after open.\n *\n * WHAT IT DOES\n *   Finds the visible Ionic page(s) in the DOM and runs a LOCAL `detectChanges()` on each page's own\n *   component view (which a global tick can't reach). It ALSO refreshes the content of open Ionic\n *   popovers (whose projected component is NOT wrapped in an `.ion-page`, so the page selector misses\n *   it) — this covers an overlay that loads its own data via a native-fetch service in `ngOnInit`.\n *   Modals are already covered by the page pass: Ionic wraps modal content in an `.ion-page`.\n *   This makes the library render correctly on BOTH Zone and zoneless consumer apps WITHOUT any fix\n *   code in the apps themselves.\n *\n * WHAT IT DOES NOT (and structurally cannot) COVER\n *   The bridge runs a correct `detectChanges()` on a visible page/overlay view; it cannot cross two\n *   boundaries that are normal OnPush semantics, so these still need app-side care:\n *     - an object/array MUTATED IN PLACE and passed as `@Input` to an OnPush CHILD — the child is\n *       legitimately skipped because its input reference is unchanged (`Object.is`); rebuild the\n *       reference instead;\n *     - external/third-party mutable state read DIRECTLY in a template (e.g. a Swiper's `activeIndex`)\n *       — there is no view state to detect a change on; capture it into a field on the event.\n *   These bite a fully-migrated zoneless app identically; they are not bridge gaps.\n *\n * WHO CALLS IT (the bridge surface)\n *   - the global enter/present/dismiss Ionic listeners installed lazily below: `ionViewDidEnter` (a\n *     page entered), `didPresent` (an overlay opened), `didDismiss` (an overlay closed). These cover\n *     state populated around navigation/open time from ANY source, cache included;\n *   - the 4 native-fetch services, in a `finally`: api.service / attachments.service /\n *     appStatus.service / translations.service (for data that lands well after open);\n *   - webSocketApi.service, after each `onMessage` (opt out per connection with `refreshOnMessage:false`).\n *\n * IF / WHEN IT CAN BE REMOVED\n *   This is a TRANSITIONAL bridge for consumer apps whose page state is not (yet) signal-based. The\n *   library's OWN components are signal-based and do not depend on it. It becomes dead weight — and can\n *   be deleted — once EVERY consumer app is zoneless + signals, i.e. every template-read page state is\n *   a signal that self-renders. Removal = delete this file, the `refreshVisibleIonicPages()` calls in\n *   the 4 services + webSocketApi, and the `didDismiss` listener. (Keep it as long as any consumer is\n *   Zone-based, or has non-signal page state populated by an async library call.)\n *\n * IMPLEMENTATION NOTE\n *   Uses the published-but-internal `ɵViewRef`/`ɵgetLContext` plus numeric LView indexes (stable under\n *   minification). This couples the bridge to the Angular major the library targets — acceptable for an\n *   internal library, and it is the only way to reach a detached Ionic page view from outside it.\n */\nimport {\n  ɵViewRef as ViewRef,\n  ɵgetLContext as getLContext,\n  NgZone,\n  EnvironmentProviders,\n  makeEnvironmentProviders,\n  ENVIRONMENT_INITIALIZER,\n  inject\n} from '@angular/core';\n\n// LView layout indexes (stable array positions, safe under minification).\nconst HOST = 0;\nconst TYPE = 1;\n\nconst isLView = (v: any): boolean => Array.isArray(v) && v[TYPE] != null && typeof v[TYPE] === 'object';\n\nlet overlayListenerInstalled = false;\n\n/**\n * Force change detection on the currently visible Ionic page(s). See the file header for the why.\n * Best-effort: never throws.\n */\nexport function refreshVisibleIonicPages(): void {\n  installBridgeEventListeners();\n  try {\n    // 1) Visible pages — and modal content, which Ionic also wraps in an `.ion-page`.\n    document.querySelectorAll('ion-app .ion-page:not(.ion-page-hidden)').forEach(refreshElementOwnView);\n    // 2) Open popovers — their projected component is NOT an `.ion-page`, so the selector above misses\n    //    it. Refresh the rendered component's own view (covers a popover that self-loads data on open).\n    document.querySelectorAll('ion-popover:not(.overlay-hidden)').forEach(popover => {\n      const host = findRenderedComponentHost(popover);\n      if (host) refreshElementOwnView(host);\n    });\n  } catch {\n    // best-effort: a CD nudge must never break the request flow\n  }\n}\n\n/**\n * Run a local `detectChanges()` on the OWN component view of an element. `getLContext().lView` is the\n * host view that declares the element; descend into the element's own component view (where its\n * template/bindings live), which is the slot at `nodeIndex`.\n */\nfunction refreshElementOwnView(el: Element): void {\n  const ctx: any = getLContext(el);\n  let lView = ctx?.lView;\n  if (lView && ctx.nodeIndex != null) {\n    const slot = lView[ctx.nodeIndex];\n    const own = isLView(slot) ? slot : isLView(slot?.[HOST]) ? slot[HOST] : null;\n    if (own) lView = own;\n  }\n  if (lView) {\n    const ref = new (ViewRef as any)(lView);\n    ref.markForCheck();\n    ref.detectChanges();\n  }\n}\n\n/**\n * Find the Angular component host element rendered inside an Ionic overlay — the element Ionic's\n * framework delegate appended. It is the first descendant that carries an Angular context\n * (`__ngContext__`) and is an app/library custom element (a dashed tag that is not an `ion-*` element).\n */\nfunction findRenderedComponentHost(overlay: Element): Element | null {\n  for (const el of Array.from(overlay.querySelectorAll('*'))) {\n    if ((el as any).__ngContext__ !== undefined && el.localName.includes('-') && !el.localName.startsWith('ion-'))\n      return el;\n  }\n  return null;\n}\n\n/**\n * Install the global Ionic lifecycle listeners that drive the bridge. Installed once, lazily, the\n * first time the bridge runs.\n *   - `ionViewDidEnter` (a page finished entering) and `didPresent` (an overlay finished presenting):\n *     these fire AFTER the component's `ngOnInit`/`ionViewWillEnter` have run, so by then any state\n *     loaded synchronously or microtask-after — crucially, data read from a service CACHE that issues\n *     no `fetch` — is already set; a refresh on the next macrotask renders it. This is the trigger that\n *     covers the non-fetch / cached-load case a data-source hook can never see.\n *   - `didDismiss` (an overlay closed): its callback mutates page state outside the template event flow.\n * Listeners use the capture phase so they fire even if a given Ionic event does not bubble to document.\n */\nfunction installBridgeEventListeners(): void {\n  if (overlayListenerInstalled || typeof document === 'undefined') return;\n  overlayListenerInstalled = true;\n  const refreshNextTick = (): void => void setTimeout(refreshVisibleIonicPages);\n  document.addEventListener('ionViewDidEnter', refreshNextTick, true);\n  document.addEventListener('didPresent', refreshNextTick, true);\n  document.addEventListener('didDismiss', refreshNextTick, true);\n}\n\n// Install the enter/present/dismiss listeners as soon as the library loads — NOT lazily on the first\n// fetch. A page/overlay that populates purely from a service cache never calls a fetch service, so it\n// would otherwise never install them and the cached-load case (its whole point) would stay broken.\ninstallBridgeEventListeners();\n\nlet cdPumpStarted = false;\n\n/**\n * The change-detection PUMP — the complete, source-agnostic form of the bridge for ZONE consumers.\n *\n * Angular 20 rendered every Ionic page because the zone, on going stable after each async turn, ran\n * `ApplicationRef.tick()`, which reached every attached view. Angular 22 still goes stable after each\n * turn, but `tick()` no longer reaches the views Ionic's `StackController` detaches — so ANY state\n * assigned off the template-event path (a cached read, a fetch, a dynamic `import()`, a chained await)\n * stays unrendered until the next interaction. This is independent of the component's strategy: it bites\n * a plain CheckAlways page just as much as an OnPush one, and a simple page just as much as a complex one.\n *\n * The pump restores the old behavior: on `NgZone.onStable` — the SAME moment Angular 20 ticked — it runs\n * the bridge's LOCAL `detectChanges()` (which DOES reach detached views). Net effect: Angular 22 + Zone\n * renders like Angular 20 + Zone, for data from ANY source, on EVERY page, with no per-page work. Because\n * it is global and uniform, page complexity is irrelevant — Shifts/Planning/Sequencer are covered by the\n * same restoration as a trivial list, not case by case.\n *\n * Cost equals the CheckAlways these apps already run: one local CD of the visible page(s) per async turn,\n * coalesced to a single pass per animation frame, executed outside the Angular zone so it can never loop.\n * It is a NO-OP on a zoneless app (`onStable` does not fire there — zoneless consumers render via signals),\n * so it is dual-mode safe.\n */\nexport function startIonicCDPump(zone: NgZone): void {\n  if (cdPumpStarted || typeof requestAnimationFrame === 'undefined') return;\n  cdPumpStarted = true;\n  let scheduled = false;\n  zone.runOutsideAngular(() =>\n    zone.onStable.subscribe(() => {\n      if (scheduled) return;\n      scheduled = true;\n      requestAnimationFrame(() => {\n        scheduled = false;\n        refreshVisibleIonicPages();\n      });\n    })\n  );\n}\n\n/**\n * Starts the change-detection pump. Add ONE line to a Zone-based app's bootstrap providers:\n *   bootstrapApplication(AppComponent, { providers: [ ..., provideIDEAChangeDetectionBridge() ] });\n * Uniform across every project, no signals knowledge required, and a harmless no-op on a zoneless app.\n */\nexport function provideIDEAChangeDetectionBridge(): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    { provide: ENVIRONMENT_INITIALIZER, multi: true, useValue: () => startIonicCDPump(inject(NgZone)) }\n  ]);\n}\n","import { ApplicationRef, 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';\nimport { refreshVisibleIonicPages } from '../cdRefresh';\n\n/**\n * Translations service.\n */\n@Injectable({ providedIn: 'root' })\nexport class IDEATranslationsService {\n  protected _env = inject(IDEAEnvironment);\n  private _appRef = inject(ApplicationRef);\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)\n        .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        // the native `fetch` settles outside the Angular zone; on the next macrotask refresh the visible\n        // Ionic page(s) and tick the app shell so the new dictionaries render on Zone-based apps. See\n        // IDEAApiService.\n        .finally(() =>\n          setTimeout(() => {\n            refreshVisibleIonicPages();\n            this._appRef.tick();\n          })\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, new Date(value)) : 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 { ApplicationRef, Injectable, inject } from '@angular/core';\nimport { Platform } from '@ionic/angular/standalone';\n\nimport { IDEAEnvironment } from '../environment';\nimport { refreshVisibleIonicPages } from './cdRefresh';\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  private _appRef = inject(ApplicationRef);\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    try {\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    } finally {\n      // A native `fetch` settles outside the Angular zone, so on a Zone-based app the value the caller\n      // assigns after `await` would not trigger change detection (the UI stays stale until the next user\n      // interaction). On the next macrotask — after the caller's assignment has run — refresh the visible\n      // Ionic page(s) (a global tick can't reach them) and tick the app shell as a safety net.\n      setTimeout(() => {\n        refreshVisibleIonicPages();\n        this._appRef.tick();\n      });\n    }\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 { ApplicationRef, 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';\nimport { refreshVisibleIonicPages } from '../cdRefresh';\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  private _appRef = inject(ApplicationRef);\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 =\n      this._env.idea.app?.statusFileURL ??\n      `${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    let appStatus: AppStatus;\n    try {\n      appStatus = await this.getStatus(options.viaApi);\n    } catch (error) {\n      return new AppStatus({ version: this._env.idea.app.version, latestVersion: this._env.idea.app.version });\n    }\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    try {\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    } finally {\n      // The native `fetch` settles outside the Angular zone; on the next macrotask refresh the visible\n      // Ionic page(s) and tick the app shell so the caller's post-`await` state change renders on\n      // Zone-based apps. See IDEAApiService.\n      setTimeout(() => {\n        refreshVisibleIonicPages();\n        this._appRef.tick();\n      });\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, ChangeDetectionStrategy } from '@angular/core';\n\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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 { filter } from 'rxjs';\nimport { Injectable, inject } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\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  private _router = inject(Router, { optional: true });\n\n  private loadingElement: HTMLIonLoadingElement;\n\n  constructor() {\n    this.hideOnPageChange();\n  }\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   * Force-hide the loading animation when the page changes, to avoid leaving pending (infinite) loading.\n   */\n  private hideOnPageChange(): void {\n    this._router?.events.pipe(filter(e => e instanceof NavigationStart)).subscribe((): Promise<boolean> => this.hide());\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 (i18n key to translate, if `dontTranslate === false`)\n   * @param color among Ionic colors defined in the theme\n   * @param dontTranslate whether the message is already a translated text\n   * @param serverMessage some untranslatable text from the back-end, to add as detail after the message\n   */\n  private async show(\n    message: string,\n    options: { color: string; dontTranslate?: boolean; serverMessage?: string }\n  ): Promise<void> {\n    message = message || '';\n    const { color, dontTranslate, serverMessage } = options;\n\n    if (!dontTranslate) message = this._translate._(message);\n\n    const duration = serverMessage ? 5000 : 3000;\n    const position = 'bottom';\n    const buttons = [{ text: 'X', role: 'cancel' }];\n    const header = serverMessage ? message : undefined;\n    const cssClass = serverMessage ? 'toastWithServerMessage' : '';\n\n    const toast = await this._toast.create({\n      message: serverMessage || message,\n      header,\n      duration,\n      position,\n      color,\n      buttons,\n      cssClass\n    });\n    return await toast.present();\n  }\n\n  /**\n   * Show an info message toast.\n   * @param message message to show\n   * @param options for translations and additional text to show\n   */\n  async info(message: string, options?: { dontTranslate?: boolean; serverMessage?: string }): Promise<void> {\n    const { dontTranslate, serverMessage } = options || {};\n    return await this.show(message, { color: 'dark', dontTranslate, serverMessage });\n  }\n  /**\n   * Show a success message toast.\n   * @param message message to show\n   * @param options for translations and additional text to show\n   */\n  async success(message: string, options?: { dontTranslate?: boolean; serverMessage?: string }): Promise<void> {\n    const { dontTranslate, serverMessage } = options || {};\n    return await this.show(message, { color: 'success', dontTranslate, serverMessage });\n  }\n  /**\n   * Show an error message toast.\n   * @param message message to show\n   * @param options for translations and additional text to show\n   */\n  async error(message: string, options?: { dontTranslate?: boolean; serverMessage?: string }): Promise<void> {\n    const { dontTranslate, serverMessage } = options || {};\n    return await this.show(message, { color: 'danger', dontTranslate, serverMessage });\n  }\n  /**\n   * Show a warning message toast.\n   * @param message message to show\n   * @param options for translations and additional text to show\n   */\n  async warning(message: string, options?: { dontTranslate?: boolean; serverMessage?: string }): Promise<void> {\n    const { dontTranslate, serverMessage } = options || {};\n    return await this.show(message, { color: 'warning', dontTranslate, serverMessage });\n  }\n}\n","import { ApplicationRef, inject, Injectable } from '@angular/core';\nimport { Attachment } from 'idea-toolbox';\n\nimport { IDEAEnvironment } from '../../environment';\nimport { IDEAApiService } from '../api.service';\nimport { refreshVisibleIonicPages } from '../cdRefresh';\n\n@Injectable({ providedIn: 'root' })\nexport class IDEAAttachmentsService {\n  protected _env = inject(IDEAEnvironment);\n  protected _api = inject(IDEAApiService);\n  private _appRef = inject(ApplicationRef);\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    try {\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    } finally {\n      // The raw S3 `fetch` PUT settles outside the Angular zone; on the next macrotask refresh the\n      // visible Ionic page(s) and tick the app shell so the caller's post-`await` state change renders\n      // on Zone-based apps. See IDEAApiService.\n      setTimeout(() => {\n        refreshVisibleIonicPages();\n        this._appRef.tick();\n      });\n    }\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, inject, ChangeDetectionStrategy, output, viewChild, input, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly attachments = model<Attachment[]>([]);\n  /**\n   * The API path to the entity for which we want to manage the attachments.\n   */\n  readonly entityPath = input<string | string[]>();\n  /**\n   * The list of accepted formats.\n   */\n  readonly acceptedFormats = input(['image/*', '.pdf', '.doc', '.docx', '.xls', '.xlsx']);\n  /**\n   * Whether to accept multiple files as target for the browse function.\n   */\n  readonly multiple = input(false);\n  /**\n   * Whether we are viewing or editing the attachments.\n   */\n  readonly disabled = input(false);\n  /**\n   * The background color of the component.\n   */\n  readonly color = input<string>();\n  /**\n   * Trigger to download a file by URL.\n   */\n  readonly download = output<string>();\n\n  readonly attachmentPicker = viewChild<any>('filePicker');\n\n  uploadErrors = signal<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.set([]);\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.update(attachments => {\n        attachments.push(attachment);\n        return attachments;\n      });\n      attachment.attachmentId = await this._attachments.uploadAndGetId(file, this.entityPath());\n      // re-set a fresh array so the in-place attachmentId mutation is rendered (spinner removal)\n      this.attachments.update(attachments => [...attachments]);\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.update(uploadErrors => {\n        uploadErrors.push({ file: attachment.name, error: err.message });\n        return uploadErrors;\n      });\n      this.removeAttachment(attachment);\n      this._message.error(err.message, { dontTranslate: true });\n    }\n  }\n\n  removeAttachment(attachment: Attachment): void {\n    this.attachments.update(attachments => {\n      attachments.splice(attachments.indexOf(attachment), 1);\n      return [...attachments];\n    });\n  }\n  removeErrorFromList(err: UploadError): void {\n    this.uploadErrors.update(uploadErrors => {\n      const indexErr = uploadErrors.indexOf(err);\n      if (indexErr !== -1) uploadErrors.splice(indexErr, 1);\n      return [...uploadErrors];\n    });\n  }\n\n  reorderAttachments(ev: any): void {\n    this.attachments.set(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 { Component, Input, inject, ChangeDetectionStrategy, OnInit } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 implements OnInit {\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  ngOnInit(): 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 { Component, OnInit, inject, ChangeDetectionStrategy, Input } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 { Component, inject, ChangeDetectionStrategy, output, input } 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  imports: [\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IDEAAttachmentsComponent,\n    IonIcon,\n    IonButton,\n    IonReorder,\n    IonLabel,\n    IonItem,\n    IonReorderGroup,\n    IonAccordionGroup,\n    IonAccordion\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly attachmentSections = input<AttachmentSections>();\n  /**\n   * The API path to the entity for which we want to manage the attachments.\n   */\n  readonly entityPath = input<string | string[]>();\n  /**\n   * The list of accepted formats.\n   */\n  readonly acceptedFormats = input(['image/*', '.pdf', '.doc', '.docx', '.xls', '.xlsx']);\n  /**\n   * Whether to accept multiple files as target for the browse function.\n   */\n  readonly multiple = input(false);\n  /**\n   * Whether the component is disabled or not.\n   */\n  readonly disabled = input(false);\n  /**\n   * Lines preferences for the component.\n   */\n  readonly lines = input<string>();\n  /**\n   * The background color of the component.\n   */\n  readonly color = input<string>();\n  /**\n   * Trigger to download a file by URL.\n   */\n  readonly download = output<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    const disabled = this.disabled();\n    if (disabled) return;\n    const componentProps = {\n      section: this.attachmentSections().sections[s],\n      entityPath: this.entityPath(),\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        const attachmentSections = this.attachmentSections();\n        this.attachmentSections().sectionsLegend.splice(attachmentSections.sectionsLegend.indexOf(sectionKey), 1);\n        delete 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      const attachmentSections = this.attachmentSections();\n      if (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      attachmentSections.sections[key] = section;\n      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 {\n  Component,\n  HostListener,\n  Input,\n  OnInit,\n  inject,\n  ChangeDetectionStrategy,\n  viewChild,\n  signal\n} 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 = signal<Suggestion[]>([]);\n  currentPage: number;\n  activeCategories1 = signal<Set<string>>(null);\n  activeCategories2 = signal<Set<string>>(null);\n  readonly searchbar = viewChild(IonSearchbar);\n  shouldShowDetails = signal<boolean>(undefined);\n  detailsAreAvailable = signal<boolean>(undefined);\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.set(\n      this.data.some(x => (x.name && !this.hideIdFromUI) || x.category1 || x.category2 || x.description)\n    );\n\n    if (!this.detailsAreAvailable()) this.shouldShowDetails.set(false);\n    else {\n      try {\n        this.shouldShowDetails.set(!(await this._storage.get(SHOULD_HIDE_DETAILS_STORAGE_KEY)));\n      } catch (error) {\n        this.shouldShowDetails.set(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    const activeCategories1 = new Set<string>();\n    const activeCategories2 = new Set<string>();\n    this.data.forEach(a => {\n      if (a.category1) activeCategories1.add(a.category1);\n      if (a.category2) activeCategories2.add(a.category2);\n    });\n    this.activeCategories1.set(activeCategories1);\n    this.activeCategories2.set(activeCategories2);\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?: HTMLIonInfiniteScrollElement): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    let 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    suggestions = suggestions.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n    this.suggestions.set(suggestions);\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        const searchbar = this.searchbar();\n        this.search(searchbar ? 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    const searchbar = this.searchbar();\n    this.search(searchbar ? 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.set(!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, ChangeDetectionStrategy, 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  imports: [CommonModule, IonAvatar, IonImg],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly name = input('?');\n  /**\n   * The size of the avatar.\n   */\n  readonly size = input<'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    const nameValue = this.name();\n    if (!nameValue) this.initials = '?';\n    else {\n      const initials = nameValue\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 { Component, Input, OnInit, inject, ChangeDetectionStrategy, viewChild, signal } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 = signal<Check[]>(new Array<Check>());\n  currentPage: number;\n  activeCategories1: Set<string>;\n  activeCategories2: Set<string>;\n\n  readonly searchbar = viewChild<IonSearchbar>('searchbar');\n\n  ngOnInit(): void {\n    this.workingData = JSON.parse(JSON.stringify(this.data || new Array<Check>()));\n    this.filteredChecks.set(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?: HTMLIonInfiniteScrollElement): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    const category1 = this.category1;\n    const category2 = this.category2;\n    let filteredChecks = this.workingData\n      .filter(x => !category1 || x.category1 === category1)\n      .filter(x => !category2 || x.category2 === 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    filteredChecks = filteredChecks.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n    this.filteredChecks.set(filteredChecks);\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        const searchbar = this.searchbar();\n        this.search(searchbar ? 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    const searchbar = this.searchbar();\n    this.search(searchbar ? 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 { Component, Input, inject, ChangeDetectionStrategy, output, input, model, signal } 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  imports: [IonLabel, IonItem, IonButton, IonIcon, IonText],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly data = model<Check[]>([]);\n  /**\n   * @deprecated Alternative to the case above; function that returns a Promise<Array<Check>>.\n   */\n  readonly dataProvider = input<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  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<string>();\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  readonly noPreviewText = input<string>();\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  readonly noElementsFoundText = input<string>();\n  /**\n   * If true, no elements selected equals all the elements selected.\n   */\n  readonly noneEqualsAll = input<boolean>();\n  /**\n   * If no element is selected, set this custom text.\n   */\n  readonly noneText = input<string>();\n  /**\n   * If all the elements are selected, set this custom text.\n   */\n  readonly allText = input<string>();\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  readonly previewTextKey = input('IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED');\n  /**\n   * Lines preferences for the item.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color for the component.\n   */\n  readonly color = input<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  readonly tappableWhenDisabled = input<boolean>();\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  readonly obligatory = input<boolean>();\n  /**\n   * If true, sort alphabetically the data.\n   */\n  readonly sortData = input<boolean>();\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  readonly numMaxElementsInPreview = input(4);\n  /**\n   * Whether to show an avatar aside each element.\n   */\n  readonly showAvatars = input<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  readonly limitSelectionToNum = input<number>();\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  readonly allowSelectDeselectAll = input<boolean>();\n  /**\n   * A pre-filter for the category1.\n   */\n  readonly category1 = input<string>();\n  /**\n   * A pre-filter for the category2.\n   */\n  readonly category2 = input<string>();\n  /**\n   * Whether tho show the categories filters.\n   */\n  readonly showCategoriesFilters = input<boolean>();\n  /**\n   * On change event.\n   */\n  readonly change = output<void>();\n  /**\n   * Icon select.\n   */\n  readonly iconSelect = output<void>();\n\n  isOpening = signal<boolean>(false);\n\n  async fetchDataAndOpenModal(): Promise<void> {\n    if (this.disabled) return;\n    const dataProvider = this.dataProvider();\n    if (typeof dataProvider === 'function') {\n      try {\n        this.data.set(await dataProvider());\n        this.openChecker();\n      } catch (error) {\n        this.data.set([]);\n      }\n    } else this.openChecker();\n  }\n  private async openChecker(): Promise<void> {\n    if (this.disabled || this.isOpening()) return;\n    this.isOpening.set(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 => {\n      if (data) this.change.emit();\n      // the modal mutates the checks in place (same array reference), so set a fresh array\n      // to notify the signal and let the preview reflect the new selection\n      this.data.update(checks => [...checks]);\n    });\n    modal.present();\n    this.isOpening.set(false);\n  }\n\n  getPreview(): string {\n    const data = this.data();\n    if (!data || !data.length) return null;\n    const noPreviewText = this.noPreviewText();\n    if (noPreviewText) return noPreviewText;\n    const allText = this.allText();\n    if (allText && (data.every(x => x.checked) || (data.every(x => !x.checked) && this.noneEqualsAll())))\n      return allText;\n    else {\n      const checked = data.filter(x => x.checked);\n      const noneText = this.noneText();\n      if (noneText && checked.length === 0) return noneText;\n      if (checked.length <= this.numMaxElementsInPreview())\n        return 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 {\n  Component,\n  Input,\n  OnInit,\n  inject,\n  ChangeDetectionStrategy,\n  output,\n  viewChild,\n  input,\n  signal\n} 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  imports: [IonChip, IonIcon, IonLabel, IonText, IonButton],\n  selector: 'idea-chip-checker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @let active = someChecked();\n    <ion-chip\n      tabindex=\"0\"\n      class=\"chipChecker\"\n      [class.active]=\"active\"\n      [class.inactive]=\"!active\"\n      [color]=\"active ? 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() && active) {\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-chip.chipChecker {\n        height: 40px;\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  readonly data = input<Check[]>([]);\n  /**\n   * The label for the field.\n   */\n  readonly label = input<string>();\n  /**\n   * The icon for the field.\n   */\n  @Input() icon: string;\n  /**\n   * The color of the icon.\n   */\n  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<string>();\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  readonly noPreviewText = input<string>();\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  readonly noElementsFoundText = input<string>();\n  /**\n   * If true, no elements selected equals all the elements selected.\n   */\n  readonly noneEqualsAll = input<boolean>();\n  /**\n   * If no element is selected, set this custom text.\n   */\n  readonly noneText = input<string>();\n  /**\n   * If all the elements are selected, set this custom text.\n   */\n  readonly allText = input<string>();\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  readonly previewTextKey = input('IDEA_COMMON.CHECKER.NUM_ELEMENTS_SELECTED');\n  /**\n   * The color for the component.\n   */\n  readonly color = input('primary');\n  /**\n   * The color for the inactive component.\n   */\n  readonly inactiveColor = input('dark');\n  /**\n   * If true, the component is disabled.\n   */\n  readonly disabled = input<boolean>();\n  /**\n   * If true, sort alphabetically the data.\n   */\n  readonly sortData = input<boolean>();\n  /**\n   * Whether to always show the `value`, even when the `name` is set.\n   */\n  readonly alwaysShowValue = input(false);\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  readonly numMaxElementsInPreview = input(4);\n  /**\n   * Limit the number of selectable elements to the value provided.\n   */\n  readonly limitSelectionToNum = input<number>();\n  /**\n   * Whether to allow the select/deselect-all buttons.\n   */\n  readonly allowSelectDeselectAll = input<boolean>();\n  /**\n   * Whether to show the reset button.\n   */\n  readonly resetButton = input(true);\n  /**\n   * Whether to show the check list as a popover.\n   * If false, we show a centered modal.\n   */\n  readonly showAsPopover = input(true);\n  /**\n   * On change event.\n   */\n  readonly change = output<string[]>();\n\n  isOpening = signal<boolean>(false);\n\n  async openChecker(event: Event): Promise<void> {\n    if (this.disabled() || this.isOpening()) return;\n    this.isOpening.set(true);\n    const component = IDEAChipChecksComponent;\n    const componentProps = {\n      data: this.data(),\n      sortData: this.sortData(),\n      alwaysShowValue: this.alwaysShowValue(),\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()\n        .filter(x => x.checked)\n        .map(x => x.value as string);\n      this.change.emit(checkValues);\n    });\n    modal.present();\n    this.isOpening.set(false);\n  }\n\n  getPreview(): string {\n    const data = this.data();\n    if (!data || !data.length) return null;\n    const noPreviewText = this.noPreviewText();\n    if (noPreviewText) return noPreviewText;\n    const allText = this.allText();\n    if (allText && this.allChecked()) return allText;\n    else {\n      const checked = data.filter(x => x.checked);\n      const noneText = this.noneText();\n      if (noneText && checked.length === 0) return noneText;\n      if (checked.length && checked.length <= this.numMaxElementsInPreview())\n        return 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    const data = this.data();\n    return data?.every(x => x.checked) || (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  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  changeDetection: ChangeDetectionStrategy.OnPush,\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                [class.alwaysShowValue]=\"alwaysShowValue\"\n                [helperText]=\"alwaysShowValue ? check.value : undefined\"\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 [class.alwaysShowValue]=\"alwaysShowValue\">\n                @if (check.category1) {\n                  <strong>{{ check.category1 }}</strong>\n                }\n                {{ check.name }}\n                @if (alwaysShowValue) {\n                  <p>{{ check.value }}</p>\n                }\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          &.alwaysShowValue {\n            margin: 8px 0;\n            > p {\n              font-size: 0.8em;\n              margin: 0;\n            }\n          }\n        }\n        ion-checkbox {\n          margin: 0 12px;\n          &.alwaysShowValue {\n            margin: 2px 12px;\n          }\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   * Whether to always show the `value`, even when the `name` is set.\n   */\n  @Input() alwaysShowValue = false;\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  readonly searchbar = viewChild<IonSearchbar>('searchbar');\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?: HTMLIonInfiniteScrollElement): 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 {\n  Component,\n  inject,\n  Input,\n  OnInit,\n  ChangeDetectionStrategy,\n  output,\n  viewChild,\n  input,\n  signal\n} 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  IonHeader,\n  IonToolbar,\n  IonButtons,\n  IonButton,\n  IonSearchbar,\n  PopoverController,\n  IonInfiniteScroll,\n  IonInfiniteScrollContent,\n  IonLabel,\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  imports: [IonItem, IonInput, IonIcon],\n  selector: 'idea-inline-checker',\n  changeDetection: ChangeDetectionStrategy.OnPush,\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 and sort.\n   */\n  readonly data = input<Check[]>([]);\n  /**\n   * The label for the component.\n   */\n  readonly label = input<string>();\n  /**\n   * The label placement.\n   */\n  readonly labelPlacement = input<string>();\n  /**\n   * The placeholder for the component.\n   */\n  readonly placeholder = input<string>();\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<string>();\n  /**\n   * The text to show in case no element is found after a search.\n   */\n  readonly noElementsFoundText = input<string>();\n  /**\n   * The lines of the component.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color of the component.\n   */\n  readonly color = input<string>();\n  /**\n   * Whether the component is disabled.\n   */\n  readonly disabled = input(false);\n  /**\n   * Whether the checklist is reorderable or not.\n   */\n  readonly reorder = input(false);\n  /**\n   * If true, sort the checklist alphabetically.\n   */\n  readonly sortData = input<boolean>();\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  readonly numMaxElementsInPreview = input(4);\n  /**\n   * The translation key to get the preview text; it has a `num` variable available.\n   */\n  readonly previewTextKey = input('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   */\n  readonly limitSelectionToNum = input<number>();\n  /**\n   * If true, render the child component centered in the screen and show a header with a searchbar.\n   */\n  readonly withSearchbar = input(false);\n\n  /**\n   * On change event.\n   */\n  readonly change = output<void>();\n\n  isOpening = signal<boolean>(false);\n\n  async openChecker(theEvent: Event): Promise<void> {\n    if (this.disabled() || this.isOpening()) return;\n    this.isOpening.set(true);\n    const component = IDEAInlineChecksComponent;\n    const componentProps = {\n      data: this.data(),\n      reorder: this.reorder(),\n      sortData: this.sortData(),\n      withSearchbar: this.withSearchbar(),\n      searchPlaceholder: this.searchPlaceholder(),\n      noElementsFoundText: this.noElementsFoundText(),\n      previewTextKey: this.previewTextKey(),\n      limitSelectionToNum: this.limitSelectionToNum()\n    };\n    const event = this.withSearchbar() ? undefined : theEvent;\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.set(false);\n  }\n\n  getPreview(): string {\n    const data = this.data();\n    if (!data || !data.length) return null;\n    const checked = data.filter(x => x.checked);\n    const placeholder = this.placeholder();\n    if (placeholder && checked.length === 0) return placeholder;\n    else if (checked.length && checked.length <= this.numMaxElementsInPreview())\n      return 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  imports: [\n    FormsModule,\n    IDEATranslatePipe,\n    IonContent,\n    IonList,\n    IonReorderGroup,\n    IonItem,\n    IonLabel,\n    IonCheckbox,\n    IonReorder,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonSearchbar,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n    IonTitle\n  ],\n  selector: 'idea-inline-checks',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (withSearchbar) {\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          @if (limitSelectionToNum !== 1) {\n            <ion-buttons slot=\"end\">\n              <ion-button\n                [title]=\"'IDEA_COMMON.CHECKER.SHOW_ONLY_CHECKED' | translate\"\n                (click)=\"showOnlyChecked = !showOnlyChecked; search(searchbar?.value)\"\n              >\n                <ion-icon [icon]=\"showOnlyChecked ? 'eye-off-outline' : 'eye-outline'\" slot=\"icon-only\" />\n              </ion-button>\n            </ion-buttons>\n          }\n        </ion-toolbar>\n        @if (limitSelectionToNum !== 1) {\n          <ion-toolbar color=\"ideaToolbar\" class=\"secondary\">\n            <ion-title>\n              {{ previewTextKey | translate: { num: getNumChecked() } }}\n              @if (limitSelectionToNum) {\n                <span>{{ 'IDEA_COMMON.CHECKER.LIMIT_OF_NUM' | translate: { num: limitSelectionToNum } }}</span>\n              }\n            </ion-title>\n          </ion-toolbar>\n        }\n      </ion-header>\n    }\n    <ion-content>\n      <ion-list>\n        @if (limitSelectionToNum === 1) {\n          @for (check of filteredChecks; track check.value) {\n            <ion-item color=\"white\" button (click)=\"selectSingle(check)\">\n              <ion-label>{{ check.name }}</ion-label>\n            </ion-item>\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        } @else {\n          <ion-reorder-group [disabled]=\"!reorder\" (ionItemReorder)=\"handleReorder($event)\">\n            @for (check of filteredChecks; track check.value) {\n              <ion-item color=\"white\">\n                <ion-reorder slot=\"start\" />\n                <ion-checkbox\n                  [disabled]=\"!check.checked && limitSelectionToNum && getNumChecked() >= limitSelectionToNum\"\n                  [(ngModel)]=\"check.checked\"\n                >\n                  {{ check.name }}\n                </ion-checkbox>\n              </ion-item>\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-reorder-group>\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-list {\n        background: transparent;\n      }\n      ion-toolbar.secondary {\n        --min-height: 44px;\n        ion-title {\n          font-size: 0.8em;\n        }\n      }\n    `\n  ]\n})\nclass IDEAInlineChecksComponent implements OnInit {\n  private _popover = inject(PopoverController);\n\n  /**\n   * The checklist to show and sort.\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   * If true, render the component centered in the screen and show a header with a searchbar.\n   */\n  @Input() withSearchbar = false;\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   */\n  @Input() limitSelectionToNum?: number;\n\n  readonly searchbar = viewChild<IonSearchbar>('searchbar');\n\n  filteredChecks: Check[];\n  currentPage: number;\n  showOnlyChecked = false;\n\n  ngOnInit(): void {\n    if (this.sortData) {\n      const compareByLabel = (a: Check, b: Check): number =>\n        a.name && b.name ? a.name.localeCompare(b.name) : String(a.value).localeCompare(String(b.value));\n      if (this.reorder) {\n        const originalIndex = new Map<Check, number>();\n        for (let i = 0; i < this.data.length; i++) originalIndex.set(this.data[i], i);\n        this.data.sort((a, b): number => {\n          if (a.checked && b.checked) return (originalIndex.get(a) || 0) - (originalIndex.get(b) || 0);\n          if (a.checked !== b.checked) return a.checked ? -1 : 1;\n          return compareByLabel(a, b);\n        });\n      } else this.data.sort(compareByLabel);\n    }\n    this.search();\n  }\n\n  search(toSearch?: string, scrollToNextPage?: HTMLIonInfiniteScrollElement): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    this.filteredChecks = this.data.filter(\n      x =>\n        !x.hidden &&\n        (!this.showOnlyChecked || x.checked) &&\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\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  handleReorder(ev: CustomEvent<ItemReorderEventDetail>): void {\n    if (!this.reorder) return;\n    const reordered = ev.detail.complete(this.filteredChecks);\n    this.filteredChecks = reordered;\n    const visibleChecks = new Set(reordered);\n    const reorderedQueue = [...reordered];\n    const nextData = this.data.map(item => (visibleChecks.has(item) ? reorderedQueue.shift() : item));\n    this.data.splice(0, this.data.length, ...nextData);\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._popover.dismiss();\n  }\n\n  close(): void {\n    this._popover.dismiss();\n  }\n}\n","import {\n  Component,\n  Input,\n  SimpleChanges,\n  OnChanges,\n  inject,\n  ChangeDetectionStrategy,\n  output,\n  input,\n  signal\n} 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  imports: [IonLabel, IonItem, IonButton, IonLabel, IonText, IonIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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 = signal<string>(undefined);\n  get description(): string {\n    return this._description();\n  }\n  //  Accessor inputs cannot be migrated as they are too complex.\n  @Input() set description(description: string) {\n    this._description.set(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  readonly dataProvider = input<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  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the field.\n   */\n  readonly placeholder = input<string>();\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<string>();\n  /**\n   * Text to show when there isn't a result.\n   */\n  readonly noElementsFoundText = input<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  readonly tappableWhenDisabled = input<boolean>();\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  readonly obligatory = input<boolean>();\n  /**\n   * Lines preferences for the item.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color for the component.\n   */\n  readonly color = input<string>();\n  /**\n   * If true, allows to select a new custom value (outside the suggestions).\n   */\n  readonly allowUnlistedValues = input<boolean>();\n  /**\n   * If `allowUnlistedValues` is set, show this to help users understanding what happens by selecting the unlisted val.\n   */\n  readonly allowUnlistedValuesPrefix = input<string>();\n  /**\n   * If true, sort the suggestions alphabetically.\n   */\n  readonly sortData = input<boolean>();\n  /**\n   * If true, clear the value of the field after a selection.\n   */\n  readonly clearValueAfterSelection = input<boolean>();\n  /**\n   * If true, doesn't show the id in the UI.\n   */\n  readonly hideIdFromUI = input<boolean>();\n  /**\n   * If true, doesn't show the clear button in the header.\n   */\n  readonly hideClearButton = input<boolean>();\n  /**\n   * If true, the user doesn't have the option to cancel the selection: an option must be chosen.\n   */\n  readonly mustChoose = input<boolean>();\n  /**\n   * A pre-filter for the category1.\n   */\n  readonly category1 = input<string>();\n  /**\n   * A pre-filter for the category2.\n   */\n  readonly category2 = input<string>();\n  /**\n   * Whether tho show the categories filters in the suggestions component.\n   */\n  readonly showCategoriesFilters = input<boolean>();\n  /**\n   * If true, doesn't let the auto-selection in case there's only one element as possible selection.\n   */\n  readonly avoidAutoSelection = input<boolean>();\n  /**\n   * On select event.\n   */\n  readonly select = output<Suggestion>();\n  /**\n   * Icon select.\n   */\n  readonly iconSelect = output<void>();\n  /**\n   * On select (with the field disabled) event.\n   */\n  readonly selectWhenDisabled = output<void>();\n\n  isOpening = signal<boolean>(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 => {\n          const category1 = this.category1();\n          return !category1 || x.category1 === category1;\n        })\n        .filter(x => {\n          const category2 = this.category2();\n          return !category2 || x.category2 === category2;\n        });\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    const dataProvider = this.dataProvider();\n    if (typeof dataProvider === 'function') {\n      try {\n        this.data = await 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.set(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        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.set(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\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 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 { Component, inject, ChangeDetectionStrategy, input } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly sections = input<any>();\n  /**\n   * The CustomBlockMeta that describe the custom sections.\n   */\n  readonly blockMeta = input<CustomBlockMeta>();\n  /**\n   * Whether the component is enabled or not.\n   */\n  readonly disabled = input(false);\n  /**\n   * Lines preferences for the component.\n   */\n  readonly lines = input<string>();\n  /**\n   * Whether to hide the descriptions (buttons).\n   */\n  readonly hideDescriptions = input(false);\n  /**\n   * Show errors as reported from the parent component.\n   */\n  readonly errors = input(new Set<string>());\n  /**\n   * Add a custom prefix to the error string identifier.\n   */\n  readonly errorPrefix = input('');\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\n            [lines]=\"lines()\"\n            [class.fieldHasError]=\"hasFieldAnError(errorPrefix() + 'sections.' + s + '.' + f)\"\n          >\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 { Component, inject, ChangeDetectionStrategy, input, OnInit } 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  imports: [\n    IDEATranslatePipe,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonIcon,\n    IonSearchbar,\n    IonContent,\n    IonGrid,\n    IonRow,\n    IonCol\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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 implements OnInit {\n  private _modal = inject(ModalController);\n\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<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  ngOnInit(): void {\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 { Component, OnInit, inject, ChangeDetectionStrategy, Input, signal } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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  // the held instance is mutated in place (so [(ngModel)] keeps a stable reference); `equal: () => false`\n  // forces every update()/set() to notify, which is what schedules CD in both Zone and zoneless modes\n  _field = signal<CustomFieldMeta>(undefined, { equal: () => false });\n  errors = new Set<string>();\n  FIELD_TYPES: string[] = Object.keys(CustomFieldTypes);\n  CFT = CustomFieldTypes;\n\n  ngOnInit(): void {\n    this._field.set(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      this._field.update(f => {\n        if (data) f.icon = data;\n        return f;\n      });\n    });\n    await modal.present();\n  }\n\n  reorderOptions(ev: any): void {\n    this._field.update(f => {\n      f.enum = ev.detail.complete(f.enum);\n      return f;\n    });\n  }\n  async removeOptionByIndex(index: number): Promise<void> {\n    const doRemoveByIndex = (): void => {\n      this._field.update(f => {\n        const e = f.enum[index];\n        if (f.enumLabels) delete f.enumLabels[e];\n        f.enum.splice(index, 1);\n        return f;\n      });\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      this._field.update(f => {\n        // ensure backwards compatibility\n        if (!f.enumLabels) f.enumLabels = {};\n        f.enumLabels[data.enum] = label;\n        if (!f.enum) f.enum = new Array<string>();\n        // add the enum and configure the enumLabel\n        f.enum.push(data.enum);\n        return f;\n      });\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    const field = this._field();\n    // ensere backwards compatibility\n    if (!field.enumLabels) field.enumLabels = {};\n    if (!field.enumLabels[theEnum]) field.enumLabels[theEnum] = new Label(null, this._translate.languages());\n    // set the translation in the default (obligatory) language\n    const label = 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\">{{\n            'IDEA_COMMON.CUSTOM_FIELDS.FIELDS_TYPES.' + _field().type | translate\n          }}</ion-badge>\n          @if (\n            _field().default &&\n            (_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\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.MIN' | translate }}: {{ _field().min }}\n            </ion-badge>\n          }\n          @if (_field().type === CFT.NUMBER) {\n            <ion-badge color=\"medium\">\n              {{ 'IDEA_COMMON.CUSTOM_FIELDS.MAX' | translate }}: {{ _field().max }}\n            </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 { Component, OnInit, inject, ChangeDetectionStrategy, Input, signal } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 = signal<CustomSectionMeta>(null);\n  errors = new Set<string>();\n  DISPLAY_TEMPLATE_MAX_NUM_FIELD_PER_ROW = 3;\n\n  ngOnInit(): void {\n    const section = new CustomSectionMeta(this.section, this._translate.languages());\n    // ensure backwards compatibility\n    if (this.useDisplayTemplate && !section.displayTemplate) section.displayTemplate = [];\n    this._section.set(section);\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.update(section => {\n        section.name = new Label(null, this._translate.languages());\n        section.name[this._translate.getDefaultLang()] = '-';\n        return section;\n      });\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.update(section => {\n        section.description = new Label(null, this._translate.languages());\n        section.description[this._translate.getDefaultLang()] = '-';\n        return section;\n      });\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.update(section => {\n      section.fieldsLegend = ev.detail.complete(section.fieldsLegend);\n      return section;\n    });\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.update(section => {\n        section.fieldsLegend.splice(section.fieldsLegend.indexOf(f), 1);\n        delete section.fields[f];\n        // filter out of the displayTemplate the fields which aren't in the fieldsLegend\n        if (section.displayTemplate)\n          section.displayTemplate.forEach(\n            (row, i, arr): string[] => (arr[i] = row.filter(el => section.fieldsLegend.some(field => field === el)))\n          );\n        return section;\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.update(section => {\n        section.fields[key] = field;\n        section.fieldsLegend.push(key);\n        return section;\n      });\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.update(section => {\n      section.displayTemplate = ev.detail.complete(section.displayTemplate);\n      return section;\n    });\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.update(section => {\n      section.displayTemplate.push([]);\n      return section;\n    });\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)\n        this._section.update(section => {\n          section.displayTemplate[row].push(field);\n          return section;\n        });\n    });\n    await modal.present();\n  }\n\n  removeFieldToDisplayTemplateRow(row: number, field: string): void {\n    this._section.update(section => {\n      section.displayTemplate[row].splice(section.displayTemplate[row].indexOf(field), 1);\n      return section;\n    });\n  }\n  private cleanEmptyDisplayTemplateRows(): void {\n    this._section.update(section => {\n      section.displayTemplate = section.displayTemplate.filter(r => r.length);\n      return section;\n    });\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 { Component, inject, ChangeDetectionStrategy, input } 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  imports: [\n    IDEATranslatePipe,\n    IDEALocalizedLabelPipe,\n    IonCol,\n    IonRow,\n    IonIcon,\n    IonButton,\n    IonReorder,\n    IonLabel,\n    IonItem,\n    IonReorderGroup\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly block = input<CustomBlockMeta>();\n  /**\n   * Whether the custom sections should manage the display template or it should be hidden.\n   */\n  readonly useDisplayTemplate = input(false);\n  /**\n   * Whether the component is enabled or not.\n   */\n  readonly disabled = input(false);\n  /**\n   * Lines preferences for the component.\n   */\n  readonly lines = input<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      const block = this.block();\n      this.block().sectionsLegend.splice(block.sectionsLegend.indexOf(s), 1);\n      delete 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      const block = this.block();\n      if (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      block.sections[key] = section;\n      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 { Component, inject, ChangeDetectionStrategy, input } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly fields = input<any>();\n  /**\n   * The CustomSectionMeta that describe the custom fields.\n   */\n  readonly sectionMeta = input<CustomSectionMeta>();\n  /**\n   * Whether the component is enabled or not.\n   */\n  readonly disabled = input(false);\n  /**\n   * Lines preferences for the component.\n   */\n  readonly lines = input<string>();\n  /**\n   * Whether to hide the descriptions (buttons).\n   */\n  readonly hideDescriptions = input(false);\n  /**\n   * Show errors as reported from the parent component.\n   */\n  readonly errors = input(new Set<string>());\n  /**\n   * Add a custom prefix to the error string identifier.\n   */\n  readonly errorPrefix = input('');\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 { Component, OnInit, inject, ChangeDetectionStrategy, signal, viewChild, Input } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 = signal<(Label | string)[]>([]);\n  currentPage: number;\n\n  readonly searchbar = viewChild<IonSearchbar>('searchbar');\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?: HTMLIonInfiniteScrollElement): void {\n    toSearch = toSearch ? toSearch.toLowerCase() : '';\n\n    let filtered = (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    filtered = filtered.slice(0, (this.currentPage + 1) * MAX_PAGE_SIZE);\n    this.filteredList.set(filtered);\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    const searchbar = this.searchbar();\n    this.search(searchbar ? 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              const searchbar = this.searchbar();\n              this.search(searchbar ? 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 => {\n      const searchbar = this.searchbar();\n      this.search(searchbar ? searchbar.value : '');\n    });\n    modal.present();\n  }\n\n  close(save?: boolean): void {\n    // empty and refill the array without losing the reference\n    const data = this.data;\n    if (save) {\n      data.length = 0;\n      this.workingData.sort().forEach(x => this.data.push(x));\n    }\n    this._modal.dismiss(save ? data : null);\n  }\n}\n","import { Component, inject, ChangeDetectionStrategy, output, input, signal } 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  imports: [IonItem, IonButton, IonIcon, IonLabel, IonText],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly data = input<(Label | string)[]>([]);\n  /**\n   * Whether the elements are labels or simple strings.\n   */\n  readonly labelElements = input<boolean>();\n  /**\n   * The label for the field.\n   */\n  readonly label = input<string>();\n  /**\n   * The icon for the field.\n   */\n  readonly icon = input<string>();\n  /**\n   * The color of the icon.\n   */\n  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the searchbar.\n   */\n  readonly searchPlaceholder = input<string>();\n  /**\n   * Text to show when there isn't a result.\n   */\n  readonly noElementsFoundText = input<string>();\n  /**\n   * If true, show the string instead of the preview text.\n   */\n  readonly noPreviewText = input<string>();\n  /**\n   * A placeholder for the field.\n   */\n  readonly placeholder = input<string>();\n  /**\n   * Lines preferences for the item.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color for the component.\n   */\n  readonly color = input<string>();\n  /**\n   * If true, the component is disabled.\n   */\n  readonly disabled = input<boolean>();\n  /**\n   * If true, the obligatory dot is shown.\n   */\n  readonly obligatory = input<boolean>();\n  /**\n   * How many elements to show in the preview before to generalize on the number.\n   */\n  readonly numMaxElementsInPreview = input(4);\n  /**\n   * On change event.\n   */\n  readonly change = output<void>();\n  /**\n   * Icon select.\n   */\n  readonly iconSelect = output<void>();\n\n  isOpening = signal<boolean>(false);\n\n  async openList(): Promise<void> {\n    if (this.disabled() || this.isOpening()) return;\n    this.isOpening.set(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.set(false);\n  }\n\n  getPreview(): string {\n    const data = this.data();\n    if (!data || !data.length) return null;\n    const noPreviewText = this.noPreviewText();\n    if (noPreviewText) return noPreviewText;\n    if (data.length <= this.numMaxElementsInPreview())\n      return 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: 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 { Component, OnInit, inject, ChangeDetectionStrategy, Input } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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 { Component, OnInit, inject, ChangeDetectionStrategy, output, input, signal } 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  imports: [IDEATranslatePipe, IDEAHiglightedVariablesPipe, IonItem, IonLabel, IonButton, IonIcon, IonText],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly emailData = input<EmailData>();\n  /**\n   * The variables the user can use for subject and content.\n   */\n  readonly variables = input<StringVariable[]>();\n  /**\n   * The label for the field.\n   */\n  readonly label = input<string>();\n  /**\n   * The icon for the field.\n   */\n  readonly icon = input<string>();\n  /**\n   * The color of the icon.\n   */\n  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the field.\n   */\n  readonly placeholder = input<string>();\n  /**\n   * Lines preferences for the item.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color for the component.\n   */\n  readonly color = input<string>();\n  /**\n   * If true, the component is disabled.\n   */\n  readonly disabled = input<boolean>();\n  /**\n   * On change event.\n   */\n  readonly change = output<void>();\n  /**\n   * Icon select.\n   */\n  readonly iconSelect = output<void>();\n  /**\n   * The list of variables codes to use for substitutions.\n   */\n  variablesPlain: string[];\n\n  isOpening = signal<boolean>(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.set(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.set(false);\n  }\n\n  doIconSelect(event: any): void {\n    if (event) event.stopPropagation();\n    this.iconSelect.emit(event);\n  }\n}\n","import { Component, Input, OnInit, inject, ChangeDetectionStrategy, input, signal } 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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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          @if (!disableChangeOfAddresses()) {\n            <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC().to)\">\n              <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n            </ion-button>\n          }\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            @if (!disableChangeOfAddresses()) {\n              <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC().to, x)\">\n                <ion-icon slot=\"icon-only\" name=\"remove\" />\n              </ion-button>\n            }\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          @if (!disableChangeOfAddresses()) {\n            <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC().cc)\">\n              <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n            </ion-button>\n          }\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            @if (!disableChangeOfAddresses()) {\n              <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC().cc, x)\">\n                <ion-icon slot=\"icon-only\" name=\"remove\" />\n              </ion-button>\n            }\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          @if (!disableChangeOfAddresses()) {\n            <ion-button color=\"dark\" (click)=\"addAddressToList(emailWC().bcc)\">\n              <ion-icon slot=\"icon-only\" name=\"add-circle\" />\n            </ion-button>\n          }\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            @if (!disableChangeOfAddresses()) {\n              <ion-button fill=\"clear\" slot=\"start\" (click)=\"removeAddressFromList(emailWC().bcc, x)\">\n                <ion-icon slot=\"icon-only\" name=\"remove\" />\n              </ion-button>\n            }\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  readonly email = input<EmailData>();\n  /**\n   * Visual indicators of the attachments that will be sent.\n   */\n  readonly attachments = input<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  readonly contacts = input<Suggestion[]>();\n  /**\n   * Lines preferences for the items.\n   */\n  readonly lines = input<string>();\n  /**\n   * Whether we want to prevent the user to change the addresses pre-set.\n   */\n  readonly disableChangeOfAddresses = input(false);\n\n  emailWC = signal<EmailData>(undefined);\n\n  ngOnInit(): void {\n    const 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 (emailWC.subject)\n          emailWC.subject = emailWC.subject.replace(new RegExp(v.code, 'g'), String(this.values[v.code]));\n        if (emailWC.content)\n          emailWC.content = emailWC.content.replace(new RegExp(v.code, 'g'), String(this.values[v.code]));\n      }\n    });\n    this.emailWC.set(emailWC);\n  }\n\n  async addAddressToList(list: string[]): Promise<void> {\n    if (this.disableChangeOfAddresses()) return;\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      }\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      this.emailWC.set(new EmailData(this.emailWC()));\n    });\n    modal.present();\n  }\n  removeAddressFromList(list: string[], address: string): void {\n    if (this.disableChangeOfAddresses()) return;\n    list.splice(list.indexOf(address), 1);\n    this.emailWC.set(new EmailData(this.emailWC()));\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 { Component, Input, OnInit, inject, ChangeDetectionStrategy, output, input, signal } 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\n  imports: [IDEAHiglightedVariablesPipe, IonItem, IonLabel, IonButton, IonIcon, IonText],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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\n            class=\"innerContent\"\n            [class.md]=\"markdown()\"\n            [innerHTML]=\"htmlContent() | highlight: variableCodes\"\n          ></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  readonly content = input<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  readonly textarea = input<boolean>();\n  /**\n   * Whether the label supports markdown.\n   */\n  readonly markdown = input<boolean>();\n  /**\n   * The variables the user can use in the label.\n   */\n  readonly variables = input<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  readonly iconColor = input<string>();\n  /**\n   * A placeholder for the field.\n   */\n  readonly placeholder = input<string>();\n  /**\n   * Lines preferences for the item.\n   */\n  readonly lines = input<string>();\n  /**\n   * The color for the component.\n   */\n  readonly color = input<string>();\n  /**\n   * If true, the component is disabled.\n   */\n  readonly disabled = input<boolean>();\n  /**\n   * If true, the label is validated on save.\n   */\n  readonly obligatory = input<boolean>();\n\n  readonly change = output<void>();\n  readonly iconSelect = output<void>();\n\n  variableCodes: string[];\n  htmlContent = signal<string>(undefined);\n\n  isOpening = signal<boolean>(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.set(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.set(false);\n  }\n\n  private calcHTMLContent(): void {\n    const str = this.content().translate(this.languages.default, this.languages);\n    this.htmlContent.set(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 { Component, Input, OnInit, inject, ChangeDetectionStrategy, input } 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  imports: [\n    IonItem,\n    IonButtons,\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  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly blueprint = input<PDFTemplateBlueprint>();\n  /**\n   * The PDF template to manage, as list of sections.\n   */\n  readonly template = input<PDFTemplateSection[]>();\n  /**\n   * Language preferences.\n   */\n  readonly languages = input<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  imports: [IDEATranslatePipe, IonContent, IonGrid, IonRow, IonCol, IonButton, IonIcon, IonLabel],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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 = this.size + 1;\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 = this.size - 1;\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 { Component, Input, inject, ChangeDetectionStrategy, input } 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  imports: [IonButton, IonIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly hint = input<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  readonly message = input<string>();\n  /**\n   * The string to show as the alert's confirmation button.\n   */\n  readonly confirmationText = input('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  //  Accessor inputs cannot be migrated as they are too complex.\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  readonly cssClass = input('alertLongOptions');\n  /**\n   * The slots where to put the button.\n   */\n  readonly slot = input('start');\n  /**\n   * The fill attribute of the button.\n   */\n  readonly fill = input('clear');\n  /**\n   * The color of the button.\n   */\n  readonly color = input<string>();\n  /**\n   * The IonIcon to show for the button.\n   */\n  readonly icon = input('help-circle-outline');\n\n  async showHint(event?: any): Promise<void> {\n    if (event) event.stopPropagation();\n\n    const hint = this.hint();\n    if (!hint) return;\n\n    const header = this._shouldTranslate ? this._translate._(hint) : hint;\n    const message = this._shouldTranslate ? this._translate._(this.message() || hint.concat('_I')) : this.message();\n    const confirmationText = this.confirmationText();\n    const buttonText =\n      this._shouldTranslate && confirmationText !== 'OK' ? this._translate._(confirmationText) : 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, inject, ChangeDetectionStrategy, input, signal } from '@angular/core';\n\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  imports: [\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  changeDetection: ChangeDetectionStrategy.OnPush,\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            (ngModelChange)=\"setSignatory($event)\"\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  readonly existingSignature = input<Signature>();\n  /**\n   * Whether it is possible or not to edit an existing signature.\n   */\n  readonly preventEditing = input<boolean>();\n  /**\n   * A list of contacts that could be the signatory of this signature.\n   */\n  readonly contacts = input<string[]>();\n\n  signature = signal<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    const existingSignature = this.existingSignature();\n    if (existingSignature) {\n      this.signature.update(s => {\n        s.load(existingSignature);\n        return new Signature(s);\n      });\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    const contacts = this.contacts();\n    if (contacts.length && !this.signature().signatory)\n      this.signature.update(s => {\n        s.signatory = contacts[0];\n        return new Signature(s);\n      });\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)\n        this.signature.update(s => {\n          s.signatory = res.data.value;\n          return new Signature(s);\n        });\n    });\n    modal.present();\n  }\n\n  setSignatory(signatory: string): void {\n    this.signature.update(s => {\n      s.signatory = signatory;\n      return new Signature(s);\n    });\n  }\n\n  clear(): void {\n    this.pad.clear();\n  }\n\n  save(): Promise<void> {\n    const signature = this.signature();\n    // check whether the fields are empty\n    this.signatoryError = !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    signature.pngURL = this.pad.toDataURL('image/png');\n    // check whether the signature size is acceptable\n    this.signatureError = 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    signature.signatory = signature.signatory.trim();\n    // update the timestamp\n    signature.timestamp = Date.now();\n    this.signature.set(signature);\n    // close the modal\n    this._modal.dismiss(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, ChangeDetectionStrategy, output, input } from '@angular/core';\n\nimport { IDEATranslatePipe } from '../translations/translate.pipe';\n\n@Component({\n  selector: 'app-tooltip',\n  imports: [IDEATranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly title = input('');\n  /**\n   * The tooltip text.\n   */\n  readonly text = input('');\n  /**\n   * The tooltip link.\n   */\n  readonly link = input('');\n  /**\n   * The tooltip close event.\n   */\n  readonly closed = output<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  ComponentRef,\n  ViewContainerRef,\n  Injector,\n  HostListener,\n  inject,\n  OnDestroy,\n  input\n} from '@angular/core';\n\nimport { IDEATooltipComponent } from './tooltip.component';\n\nimport { IDEATranslationsService } from '../translations/translations.service';\n\n@Directive({ 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  readonly hint = input('', { alias: 'tooltip' });\n  /**\n   * The delay before showing the tooltip.\n   */\n  readonly tooltipDelay = input(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    this.tooltipRef.setInput('title', this._translate._(`${this.hint()}_T`));\n    this.tooltipRef.setInput('text', this._translate._(this.hint()));\n    this.tooltipRef.setInput('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, OnInit, inject, ChangeDetectionStrategy, input } 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  imports: [IonButton, IonPopover, IonList, IonListHeader, IonItem, IonLabel, IDEATranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  readonly fill = input<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';\nimport { refreshVisibleIonicPages } from './cdRefresh';\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) {\n          this.options.onMessage(data);\n          // A WebSocket message settles outside the Angular zone, so on a Zone-based (and zoneless) app\n          // the state the handler assigns wouldn't render. Refresh the visible Ionic page on the next\n          // macrotask — opt out with `refreshOnMessage: false` for high-frequency streams. See IDEAApiService.\n          if (this.options.refreshOnMessage !== false) setTimeout(refreshVisibleIonicPages);\n        }\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   * Whether to refresh the visible Ionic page after each message so the `onMessage` state renders on\n   * Zone-based and zoneless consumers without app-side change detection. Defaults to `true`; set to\n   * `false` for high-frequency streams where you handle rendering yourself (e.g. via signals).\n   */\n  refreshOnMessage?: boolean;\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":["getLContext","ViewRef","MAX_PAGE_SIZE","i1","PAGINATION_MAX_PAGE_SIZE"],"mappings":"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"}