{"version":3,"file":"c8y-ngx-components-platform-configuration.mjs","sources":["../../platform-configuration/platform-configuration-form-provider.service.ts","../../platform-configuration/platform-configuration-form.component.ts","../../platform-configuration/platform-configuration-form.component.html","../../platform-configuration/platform-configuration.module.ts","../../platform-configuration/c8y-ngx-components-platform-configuration.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DatePipe } from '@c8y/ngx-components';\nimport { FormControl, Validators } from '@angular/forms';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PlatformConfigurationFormProviderService {\n  lineBreakHint = gettext('Use [Enter] or <br> tag to add a new line');\n\n  exampleTomorrowDate = (() => {\n    const tomorrow = new Date();\n    tomorrow.setDate(tomorrow.getDate() + 1);\n    return this.c8yDatePipe.transform(tomorrow, 'yyyy-MM-ddTHH:mm:ssZ');\n  })();\n\n  platformConfigurationFormDefinitions = {\n    'system.password.enforce.strength': {\n      formId: 'system.password.enforce.strength',\n      title: gettext('Enforce \"green\" passwords for all users'),\n      type: 'boolean',\n      control: new FormControl('')\n    },\n    'system.password.limit.validity': {\n      formId: 'system.password.limit.validity',\n      title: gettext('Password validity limit (days)'),\n      description: gettext(\n        'The number of days a password may be valid before it must be reset; minimum value is 0, maximum value is 999999. Leave empty to use the value from the tenant options.'\n      ),\n      type: 'number',\n      control: new FormControl('', [Validators.min(0), Validators.max(999999)])\n    },\n    'system.password.history.size': {\n      formId: 'system.password.history.size',\n      title: gettext('Password history size'),\n      description: gettext(\n        'The number of times before the current password can be reused. Minimum value is 0, preset value is 10.'\n      ),\n      type: 'number',\n      placeholder: `${gettext('e.g. {{ example }}')}`,\n      placeholderParams: { example: '10' },\n      control: new FormControl('', [Validators.min(0)])\n    },\n    'system.password.green.min-length': {\n      formId: 'system.password.green.min-length',\n      title: gettext('Minimal length of \"green\" password'),\n      description: gettext(\n        'The minimum number of characters which are required for a safe password. Minimum (and preset) value is 8, maximum value is 32. Leave empty to skip this constraint.'\n      ),\n      type: 'number',\n      control: new FormControl('', [Validators.min(8), Validators.max(32)])\n    },\n    'ui.email.protocolAndEncryption': {\n      formId: 'ui.email.protocolAndEncryption',\n      title: gettext('Protocol and encryption'),\n      type: 'select',\n      options: [\n        {\n          value: 'SMTP_PLAIN',\n          name: gettext('SMTP (no encryption)')\n        },\n        {\n          value: 'SMTP_ENCRYPTED',\n          name: gettext('SMTP (STARTTLS)')\n        },\n        {\n          value: 'SMTPS_ENCRYPTED',\n          name: gettext('SMTPS (SSL/TLS)')\n        }\n      ],\n      skipOnSave: true,\n      control: new FormControl('')\n    },\n    'email.protocol': {\n      formId: 'email.protocol',\n      title: gettext('Protocol'),\n      type: 'select',\n      options: [\n        {\n          value: 'smtp',\n          name: 'SMTP'\n        },\n        {\n          value: 'smtps',\n          name: 'SMTPS'\n        }\n      ],\n      control: new FormControl('')\n    },\n    'email.connection.encrypted': {\n      formId: 'email.connection.encrypted',\n      title: gettext('Connection encrypted'),\n      type: 'boolean',\n      control: new FormControl('')\n    },\n    'email.host': {\n      formId: 'email.host',\n      title: gettext('Host'),\n      type: 'string',\n      placeholder: `${gettext('e.g. {{ example }}')}`,\n      placeholderParams: { example: 'localhost' },\n      control: new FormControl('')\n    },\n    'email.port': {\n      formId: 'email.port',\n      title: gettext('Port'),\n      type: 'number',\n      placeholder: `${gettext('e.g. {{ example }}')}`,\n      placeholderParams: { example: '25' },\n      control: new FormControl('', [Validators.min(1), Validators.max(65535)])\n    },\n    'email.username': {\n      formId: 'email.username',\n      title: gettext('Username'),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'credentials.email.password': {\n      formId: 'credentials.email.password',\n      title: gettext('Password'),\n      type: 'password',\n      control: new FormControl('')\n    },\n    'email.from': {\n      formId: 'email.from',\n      title: gettext('Sender address'),\n      type: 'string',\n      control: new FormControl('', [Validators.email])\n    },\n    'passwordReset.sendNotificationToUnknownEmails': {\n      formId: 'passwordReset.sendNotificationToUnknownEmails',\n      title: gettext('Send notifications to unknown email addresses'),\n      type: 'boolean',\n      control: new FormControl('')\n    },\n    'passwordReset.email.subject': {\n      formId: 'passwordReset.email.subject',\n      title: gettext('Email subject'),\n      description: gettext('Subject used for all password reset related emails'),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'passwordReset.token.email.template': {\n      formId: 'passwordReset.token.email.template',\n      title: gettext('Password reset email template (when address is known)'),\n      description: `${gettext(\n        'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to reset password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}&email={email}'\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'passwordReset.user.not.found.email.template': {\n      formId: 'passwordReset.user.not.found.email.template',\n      title: gettext('Password reset email template (when address is not known)'),\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'passwordReset.success.email.template': {\n      formId: 'passwordReset.success.email.template',\n      title: gettext('Password change confirmation email template'),\n      description: `${gettext('Placeholders: {host}, {tenant-domain}, {username}')}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'passwordReset.invite.template': {\n      formId: 'passwordReset.invite.template',\n      title: gettext('Invitation email template'),\n      description: `${gettext(\n        'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to setup password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}'\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'export.data.mail.subject': {\n      formId: 'export.data.mail.subject',\n      title: gettext('Email subject'),\n      description: gettext(\n        'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}'\n      ),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'export.data.mail.text': {\n      formId: 'export.data.mail.text',\n      title: gettext('Email template'),\n      description: `${gettext(\n        'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}'\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'export.data.mail.text.userunauthorized': {\n      formId: 'export.data.mail.text.userunauthorized',\n      title: gettext('User unauthorized error message'),\n      description: gettext('Placeholders: {user}, {exportApi}'),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'two-factor-authentication.token.sms.template': {\n      formId: 'two-factor-authentication.token.sms.template',\n      title: gettext('Verification token SMS template'),\n      description: gettext('Placeholder: {token} - created token'),\n      type: 'string',\n      placeholder: gettext('e.g.: Verification code: {token}'),\n      control: new FormControl('')\n    },\n    'system.support.url': {\n      formId: 'system.support.url',\n      title: gettext('URL'),\n      type: 'string',\n      description: gettext(\n        'Possible values: URL string, \"false`KEEP_ORIGINAL`\" (hides the link) or leave empty (uses the default). Applications can override this setting by defining \"supportUrl`KEEP_ORIGINAL`\" application option.'\n      ),\n      control: new FormControl('')\n    },\n    'storageLimit.warning.email.subject': {\n      formId: 'storageLimit.warning.email.subject',\n      title: gettext('Warning email subject'),\n      description: gettext('Email which will be sent one day before data is deleted'),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'storageLimit.warning.email.template': {\n      formId: 'storageLimit.warning.email.template',\n      title: gettext('Warning email template'),\n      description: `${gettext(\n        'Email which will be sent one day before data is deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'storageLimit.process.email.subject': {\n      formId: 'storageLimit.process.email.subject',\n      title: gettext('Limit exceeded email subject'),\n      description: gettext('Email which will be sent after over-limit data has been deleted'),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'storageLimit.process.email.template': {\n      formId: 'storageLimit.process.email.template',\n      title: gettext('Limit exceeded email template'),\n      description: `${gettext(\n        'Email which will be sent after over-limit data has been deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'tenantSuspend.mail.sendtosuspended': {\n      formId: 'tenantSuspend.mail.sendtosuspended',\n      title: gettext(\"Send email to suspended tenant's administrator\"),\n      type: 'boolean',\n      control: new FormControl('')\n    },\n    'tenantSuspend.mail.additional.address': {\n      formId: 'tenantSuspend.mail.additional.address',\n      title: gettext('Tenant suspended email additional receiver'),\n      type: 'string',\n      control: new FormControl('', [Validators.email])\n    },\n    'tenantSuspend.mail.subject': {\n      formId: 'tenantSuspend.mail.subject',\n      title: gettext('Tenant suspended email subject'),\n      description: gettext(\n        \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n      ),\n      type: 'string',\n      control: new FormControl('')\n    },\n    'tenantSuspend.mail.text': {\n      formId: 'tenantSuspend.mail.text',\n      title: gettext('Tenant suspended email template'),\n      description: `${gettext(\n        \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n      )}`,\n      type: 'textarea',\n      control: new FormControl(''),\n      lineBreakHint: true\n    },\n    'system.support-user.enabled': {\n      formId: 'system.support-user.enabled',\n      title: gettext('Activate support user'),\n      description: gettext(\n        'Possible values: \"true`KEEP_ORIGINAL`\", \"false`KEEP_ORIGINAL`\", or a specific date until the user should remain active, for example, \"{{ exampleDate }}\". Leaving it blank, will set the value to \"true`KEEP_ORIGINAL`\".'\n      ),\n      descriptionTranslateParams: {\n        exampleDate: this.exampleTomorrowDate\n      },\n      type: 'string',\n      control: new FormControl(''),\n      placeholder: this.exampleTomorrowDate\n    },\n    'system.support-user.validity-limit': {\n      formId: 'system.support-user.validity-limit',\n      title: gettext('Validity limit'),\n      description: gettext(\n        'Each support user request from subtenant user will prolong support user access by the given number of hours (default: 24 hours). Leaving it blank, will set the value to \"24\".'\n      ),\n      type: 'number',\n      placeholder: `${gettext('e.g. {{ example }}')}`,\n      placeholderParams: { example: '24' },\n      control: new FormControl('', [Validators.min(0)])\n    }\n  };\n\n  optionsGroups = [\n    {\n      title: gettext('Passwords'),\n      id: 'passwordsOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['system.password.enforce.strength'],\n        this.platformConfigurationFormDefinitions['system.password.limit.validity'],\n        this.platformConfigurationFormDefinitions['system.password.history.size'],\n        this.platformConfigurationFormDefinitions['system.password.green.min-length']\n      ]\n    },\n    {\n      title: gettext('Two-factor authentication'),\n      id: 'twoFactorAuthenticationOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['two-factor-authentication.token.sms.template']\n      ]\n    },\n    {\n      title: gettext('Support link'),\n      id: 'supportLinkOptions',\n      items: [this.platformConfigurationFormDefinitions['system.support.url']]\n    },\n    {\n      title: gettext('Password reset'),\n      id: 'passwordResetOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['passwordReset.sendNotificationToUnknownEmails'],\n        this.platformConfigurationFormDefinitions['passwordReset.token.email.template'],\n        this.platformConfigurationFormDefinitions['passwordReset.user.not.found.email.template'],\n        this.platformConfigurationFormDefinitions['passwordReset.email.subject'],\n        this.platformConfigurationFormDefinitions['passwordReset.success.email.template'],\n        this.platformConfigurationFormDefinitions['passwordReset.invite.template']\n      ]\n    },\n    {\n      title: gettext('Support user'),\n      id: 'supportUserOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['system.support-user.enabled'],\n        this.platformConfigurationFormDefinitions['system.support-user.validity-limit']\n      ]\n    },\n    {\n      title: gettext('Email server'),\n      id: 'emailServerOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['ui.email.protocolAndEncryption'],\n        this.platformConfigurationFormDefinitions['email.host'],\n        this.platformConfigurationFormDefinitions['email.port'],\n        this.platformConfigurationFormDefinitions['email.username'],\n        this.platformConfigurationFormDefinitions['credentials.email.password'],\n        this.platformConfigurationFormDefinitions['email.from']\n      ]\n    },\n    {\n      title: gettext('Data export'),\n      id: 'dataExportOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['export.data.mail.subject'],\n        this.platformConfigurationFormDefinitions['export.data.mail.text'],\n        this.platformConfigurationFormDefinitions['export.data.mail.text.userunauthorized']\n      ]\n    },\n    {\n      title: gettext('Storage limit'),\n      id: 'storageLimitOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['storageLimit.warning.email.subject'],\n        this.platformConfigurationFormDefinitions['storageLimit.warning.email.template'],\n        this.platformConfigurationFormDefinitions['storageLimit.process.email.subject'],\n        this.platformConfigurationFormDefinitions['storageLimit.process.email.template']\n      ]\n    },\n    {\n      title: gettext('Suspending tenants'),\n      id: 'suspendingTenantsOptions',\n      items: [\n        this.platformConfigurationFormDefinitions['tenantSuspend.mail.sendtosuspended'],\n        this.platformConfigurationFormDefinitions['tenantSuspend.mail.additional.address'],\n        this.platformConfigurationFormDefinitions['tenantSuspend.mail.subject'],\n        this.platformConfigurationFormDefinitions['tenantSuspend.mail.text']\n      ]\n    }\n  ];\n\n  constructor(private c8yDatePipe: DatePipe) {}\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformConfigurationFormProviderService } from './platform-configuration-form-provider.service';\nimport { NgFor, NgSwitch, NgSwitchCase, NgTemplateOutlet, NgIf } from '@angular/common';\nimport {\n  C8yTranslateDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\n\n@Component({\n  selector: 'c8y-platform-configuration-form',\n  templateUrl: './platform-configuration-form.component.html',\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    NgFor,\n    NgSwitch,\n    NgSwitchCase,\n    NgTemplateOutlet,\n    C8yTranslateDirective,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    NgIf,\n    C8yTranslatePipe\n  ]\n})\nexport class PlatformConfigurationFormComponent {\n  @Input('optionsGroups')\n  set _optionsGroups(groupIds: string[]) {\n    if (groupIds === undefined) {\n      return;\n    }\n    this.optionsGroups = groupIds.map(groupId =>\n      this.formProviderService.optionsGroups.find(option => option.id === groupId)\n    );\n  }\n\n  @Input()\n  set readOnly(disabled: boolean) {\n    disabled ? this.form.disable() : this.form.enable();\n  }\n\n  @Input()\n  set formValue(value) {\n    if (value) {\n      const convertedValue = this.afterLoad(value);\n      this.form.patchValue(convertedValue, { emitEvent: false });\n      this.form.markAsUntouched();\n      this.form.markAsPristine();\n    }\n  }\n  optionsGroups = [];\n\n  @Output()\n  onSave = new EventEmitter();\n\n  form = new FormGroup({});\n\n  lineBreakHint = this.formProviderService.lineBreakHint;\n\n  constructor(private formProviderService: PlatformConfigurationFormProviderService) {\n    Object.keys(formProviderService.platformConfigurationFormDefinitions).forEach(fieldId => {\n      this.form.addControl(\n        fieldId,\n        formProviderService.platformConfigurationFormDefinitions[fieldId].control\n      );\n    });\n  }\n\n  /**\n   * Parses provided object's property values\n   * @param options\n   */\n  parseConfiguration(options: object): void {\n    const definitions: object = this.formProviderService.platformConfigurationFormDefinitions;\n    Object.entries(options).forEach(([key, rawValue]) => {\n      if (\n        definitions[key] &&\n        (definitions[key].type === 'number' || definitions[key].type === 'boolean')\n      ) {\n        try {\n          options[key] = JSON.parse(rawValue);\n        } catch {\n          options[key] = rawValue;\n        }\n      }\n    });\n  }\n\n  /**\n   * Parses incoming raw object before it is applied to FormGroup.\n   */\n  afterLoad(options: object): object {\n    this.parseConfiguration(options);\n\n    delete options['ui.email.protocolAndEncryption'];\n    const emailProtocol = options['email.protocol'];\n    const connectionEncrypted = options['email.connection.encrypted'] || false;\n    if (emailProtocol === 'smtp') {\n      if (connectionEncrypted) {\n        options['ui.email.protocolAndEncryption'] = 'SMTP_ENCRYPTED';\n      } else {\n        options['ui.email.protocolAndEncryption'] = 'SMTP_PLAIN';\n      }\n    } else if (emailProtocol === 'smtps') {\n      options['ui.email.protocolAndEncryption'] = 'SMTPS_ENCRYPTED';\n    } else {\n      options['ui.email.protocolAndEncryption'] = undefined;\n    }\n    return options;\n  }\n\n  /**\n   * Translates ui.email.protocolAndEncryption field into\n   * separate email.protocol and email.connection.encrypted\n   */\n  beforeSave(value): object {\n    const protocolAndEncryption = value['ui.email.protocolAndEncryption'];\n    if (protocolAndEncryption) {\n      //email.protocol\n      const protocol = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[1];\n      value['email.protocol'] = protocol ? protocol.toLowerCase() : protocol;\n\n      // email.connection.encrypted\n      const encryption = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[2];\n      value['email.connection.encrypted'] = encryption === 'ENCRYPTED';\n      delete value['ui.email.protocolAndEncryption'];\n    }\n\n    return value;\n  }\n\n  getDirtyValues() {\n    const dirtyValues = {};\n\n    Object.keys(this.form.controls).forEach(key => {\n      const currentControl = this.form.controls[key];\n\n      if (currentControl.dirty) {\n        dirtyValues[key] = currentControl.value;\n      }\n    });\n\n    return dirtyValues;\n  }\n\n  emitForm() {\n    if (this.form.valid) {\n      const changedValues = this.getDirtyValues();\n      const convertedValue = this.beforeSave(changedValues);\n      this.onSave.emit(convertedValue);\n    }\n  }\n}\n","<form [formGroup]=\"form\">\n  <div class=\"row\">\n    <div class=\"col-lg-12 col-lg-max\">\n      <div class=\"card card--fullpage\">\n        <div class=\"card-header separator\">\n          <div class=\"card-title\">\n            {{ 'Configuration' | translate }}\n          </div>\n        </div>\n        <div class=\"inner-scroll\">\n          <div class=\"card-block\">\n            <div>\n              <fieldset\n                class=\"row schema-form-fieldset separator-bottom p-t-24\"\n                *ngFor=\"let category of optionsGroups\"\n              >\n                <div class=\"col-sm-3 col-md-2 p-l-24 p-l-xs-8 p-b-8\">\n                  <div\n                    class=\"h4 text-normal text-right text-left-xs\"\n                    data-cy=\"fieldset--section-title\"\n                  >\n                    {{ category.title | translate }}\n                  </div>\n                </div>\n                <div class=\"col-sm-9 col-md-8\">\n                  <div\n                    class=\"form-group\"\n                    *ngFor=\"let field of category.items\"\n                  >\n                    <ng-container [ngSwitch]=\"field.type\">\n                      <ng-container *ngSwitchCase=\"'string'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"stringTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n                      <ng-container *ngSwitchCase=\"'number'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"numberTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n                      <ng-container *ngSwitchCase=\"'password'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"passwordTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n\n                      <ng-container *ngSwitchCase=\"'textarea'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"textareaTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n\n                      <ng-container *ngSwitchCase=\"'boolean'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"booleanTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n\n                      <ng-container *ngSwitchCase=\"'select'\">\n                        <ng-container\n                          *ngTemplateOutlet=\"selectTemplate; context: { $implicit: field }\"\n                        ></ng-container>\n                      </ng-container>\n                    </ng-container>\n                  </div>\n                </div>\n              </fieldset>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"card-footer separator\">\n          <button\n            class=\"btn btn-primary\"\n            [title]=\"'Save configuration' | translate\"\n            type=\"submit\"\n            (click)=\"emitForm()\"\n            [disabled]=\"!form.dirty || form.invalid || form.disabled\"\n          >\n            <span translate>Save</span>\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <ng-template\n    #stringTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        title=\"{{ field.title | translate }}\"\n        [for]=\"field.formId\"\n      >\n        {{ field.title | translate }}\n      </label>\n      <input\n        class=\"text-truncate form-control\"\n        [title]=\"field.title | translate\"\n        type=\"text\"\n        [id]=\"field.formId\"\n        [formControlName]=\"field.formId\"\n        [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n      />\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description\"\n      >\n        {{ field.description | translate : field.descriptionTranslateParams }}\n      </div>\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #passwordTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        title=\"{{ field.title | translate }}\"\n        [for]=\"field.formId\"\n      >\n        {{ field.title | translate }}\n      </label>\n      <input\n        class=\"text-truncate form-control\"\n        [title]=\"field.title | translate\"\n        type=\"password\"\n        autocomplete=\"new-password\"\n        [id]=\"field.formId\"\n        [formControlName]=\"field.formId\"\n        [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n      />\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description\"\n      >\n        {{ field.description | translate : field.descriptionTranslateParams }}\n      </div>\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #numberTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        title=\"{{ field.title | translate }}\"\n        [for]=\"field.formId\"\n      >\n        {{ field.title | translate }}\n      </label>\n      <input\n        class=\"text-truncate form-control\"\n        [title]=\"field.title | translate\"\n        type=\"number\"\n        [id]=\"field.formId\"\n        [formControlName]=\"field.formId\"\n        [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n      />\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description\"\n      >\n        {{ field.description | translate : field.descriptionTranslateParams }}\n      </div>\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #textareaTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        title=\"{{ field.title | translate }}\"\n        [for]=\"field.formId\"\n      >\n        {{ field.title | translate }}\n      </label>\n      <textarea\n        class=\"form-control\"\n        [title]=\"field.title | translate\"\n        [id]=\"field.formId\"\n        [formControlName]=\"field.formId\"\n        [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n        [rows]=\"10\"\n      ></textarea>\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description || field.lineBreakHint\"\n      >\n        <span *ngIf=\"field.description\">\n          {{ field.description | translate : field.descriptionTranslateParams }}\n        </span>\n        <span *ngIf=\"field.description && field.lineBreakHint\"><br /></span>\n        <span *ngIf=\"field.lineBreakHint\">{{ lineBreakHint | translate }}</span>\n      </div>\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #booleanTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        class=\"c8y-checkbox\"\n        title=\"{{ field.title | translate }}\"\n      >\n        <input\n          [title]=\"field.title | translate\"\n          type=\"checkbox\"\n          [formControlName]=\"field.formId\"\n        />\n        <span></span>\n        <span>{{ field.title | translate }}</span>\n      </label>\n\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description\"\n      >\n        {{ field.description | translate : field.descriptionTranslateParams }}\n      </div>\n    </c8y-form-group>\n  </ng-template>\n\n  <ng-template\n    #selectTemplate\n    let-field\n  >\n    <c8y-form-group>\n      <label\n        title=\"{{ field.title | translate }}\"\n        [for]=\"field.formId\"\n      >\n        <span>{{ field.title | translate }}</span>\n      </label>\n      <div class=\"c8y-select-wrapper\">\n        <select\n          class=\"form-control\"\n          [id]=\"field.formId\"\n          [formControlName]=\"field.formId\"\n        >\n          <option></option>\n          <option\n            *ngFor=\"let option of field.options\"\n            [value]=\"option.value\"\n          >\n            {{ option.name | translate }}\n          </option>\n        </select>\n        <span></span>\n      </div>\n\n      <div\n        class=\"help-block\"\n        *ngIf=\"field.description\"\n      >\n        {{ field.description | translate : field.descriptionTranslateParams }}\n      </div>\n    </c8y-form-group>\n  </ng-template>\n</form>\n","import { CommonModule, FormsModule } from '@c8y/ngx-components';\nimport { NgModule } from '@angular/core';\nimport { PlatformConfigurationFormComponent } from './platform-configuration-form.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, PlatformConfigurationFormComponent],\n  exports: [PlatformConfigurationFormComponent]\n})\nexport class PlatformConfigurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PlatformConfigurationFormProviderService","FormsModule"],"mappings":"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"}