{"version":3,"file":"c8y-ngx-components-device-enrolment-modal.mjs","sources":["../../device-enrolment/modal/device-enrolment.service.ts","../../device-enrolment/modal/thin-edge-illustration.component.ts","../../device-enrolment/modal/device-enrolment-modal.component.ts","../../device-enrolment/modal/device-enrolment-modal.component.html","../../device-enrolment/modal/c8y-ngx-components-device-enrolment-modal.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { TrustedCertificateService, DeviceRegistrationService } from '@c8y/client';\nimport { FeatureCacheService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DeviceEnrolmentService {\n  private trustedCertificateService = inject(TrustedCertificateService);\n  private deviceRegistrationService = inject(DeviceRegistrationService);\n  private featureCacheService = inject(FeatureCacheService);\n\n  async getRegistrationCode(name: string) {\n    const available = await this.caAvailableAndConfigured();\n    if (available) {\n      const otp = this.generateSecurePassword();\n      const host = window.location.hostname;\n\n      const newDeviceReq: { id: string; [key: string]: string } = {\n        id: name,\n        name,\n        enrollmentToken: otp,\n        type: 'thin-edge.io'\n      };\n\n      try {\n        await this.deviceRegistrationService.create(newDeviceReq);\n      } catch (e: any) {\n        const statusCode = e?.status || e?.res?.status;\n        const errorType = e?.data?.error || e?.res?.error;\n\n        if (statusCode === 422) {\n          if (errorType === 'devicecontrol/Non Unique Result') {\n            return {\n              error: gettext('Device ID already exists. Please choose a different name.'),\n              statusCode,\n              errorType: 'duplicate'\n            };\n          }\n          if (errorType === 'undefined/validationError') {\n            return {\n              error: gettext(\n                'Device ID cannot contain whitespace, slashes or any of (+$:). Please choose a different name.'\n              ),\n              statusCode,\n              errorType: 'validation'\n            };\n          }\n        }\n        throw e;\n      }\n\n      return {\n        script: `curl -fsSL https://thin-edge.io/trial-linux.sh | sh -s -- --device-id \"${name}\" --c8y-url \"${host}\" --one-time-password '${otp}'`,\n        docker: `curl -fsSL https://thin-edge.io/trial-linux-docker.sh | sh -s -- --device-id \"${name}\" --c8y-url \"${host}\" --one-time-password '${otp}'`\n      };\n    }\n    return { error: gettext('Certificate authority not available.') };\n  }\n\n  generateSecurePassword(length = 32): string {\n    const charset =\n      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+;:,.<>?';\n    let password = '';\n    const crypto = window.crypto || (window as any).msCrypto;\n    const maxValidByte = 256 - (256 % charset.length);\n\n    while (password.length < length) {\n      const buffer = new Uint8Array(length - password.length);\n      crypto.getRandomValues(buffer);\n      for (let i = 0; i < buffer.length && password.length < length; i++) {\n        const byte = buffer[i];\n        if (byte < maxValidByte) {\n          password += charset[byte % charset.length];\n        }\n      }\n    }\n\n    return password;\n  }\n\n  async showQuicklink() {\n    return this.featureCacheService.getFeatureStatePromise('certificate-authority');\n  }\n\n  async caAvailableAndConfigured(): Promise<boolean> {\n    try {\n      const shouldShow =\n        await this.featureCacheService.getFeatureStatePromise('certificate-authority');\n\n      if (!shouldShow) {\n        return false;\n      }\n\n      const { data: certs } = await this.trustedCertificateService.list({\n        certificateAuthority: true\n      });\n\n      return (certs || []).some(c => c.status === 'ENABLED');\n    } catch (e) {\n      // ignore\n      return false;\n    }\n  }\n}\n","import { Component } from '@angular/core';\n\n/**\n * Thin-edge.io illustration component\n *\n * Uses Cumulocity design tokens for colors:\n * - Light green: --c8y-brand-60 (#A5DAA5)\n * - Green: --c8y-brand-primary (#119D11)\n * - Dark green: --c8y-brand-30 (#0f880f)\n * - Light gray: --c8y-palette-gray-70 (#E3E5E8)\n * - Gray: --c8y-palette-gray-60 (#D4D9DE)\n * - Dark gray: --c8y-palette-gray-50 (#8B96A0)\n * - Stroke: #212121 (hardcoded black)\n *\n * Colors can be customized by setting CSS variables:\n * --te-illustration-light-green, --te-illustration-green, --te-illustration-dark-green,\n * --te-illustration-light-gray, --te-illustration-gray, --te-illustration-dark-gray,\n * --te-illustration-stroke, --te-illustration-bg, --te-illustration-shadow, --te-illustration-blue\n */\n@Component({\n  selector: 'c8y-thin-edge-illustration',\n  template: `\n    <svg viewBox=\"0 0 326 362\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <rect height=\"362\" width=\"326\" />\n      <g opacity=\"0.05\" filter=\"url(#filter0_f_1482_34959)\">\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M204.841 265.5L98.959 326L75.5763 312.5L181.458 252L204.841 265.5Z\"\n          fill=\"var(--te-illustration-shadow, black)\"\n        />\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M264.224 230.5L158.342 291L134.959 277.5L240.841 217L264.224 230.5Z\"\n          fill=\"var(--te-illustration-shadow, black)\"\n        />\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M141.378 286.16L209.205 247L139.923 207L72.0957 246.16L141.378 286.16Z\"\n          fill=\"var(--te-illustration-shadow, black)\"\n        />\n      </g>\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M195.039 200.5L108.539 250.441L85.1562 236.941L171.656 187L195.039 200.5Z\"\n        fill=\"var(--te-illustration-light-gray, var(--c8y-palette-gray-70))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M120.519 208.223L83.3417 272.622L59.959 259.122L97.1361 194.723L120.519 208.223Z\"\n        fill=\"var(--te-illustration-gray, var(--c8y-palette-gray-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M120.519 294.089L83.3379 272.622L89.8738 261.302V261.217L89.9474 261.174L120.519 208.223L129.814 213.589L108.538 250.441L195.038 200.5V215.679L108.464 265.662L129.814 277.989L120.519 294.089Z\"\n        fill=\"var(--te-illustration-dark-gray, var(--c8y-palette-gray-50))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M232.862 107.5L223.566 123.6L200.184 110.1L209.479 94L232.862 107.5Z\"\n        fill=\"var(--te-illustration-gray, var(--c8y-palette-gray-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M232.861 193.366L263.433 140.414L240.05 126.914L209.479 179.866L232.861 193.366Z\"\n        fill=\"var(--te-illustration-gray, var(--c8y-palette-gray-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M270.042 128.966L232.861 107.5L223.565 123.6L244.915 135.926L158.342 185.91V201.089L244.842 151.148L223.565 187.999L232.861 193.366L263.432 140.415L263.506 140.372V140.287L270.042 128.966Z\"\n        fill=\"var(--te-illustration-dark-gray, var(--c8y-palette-gray-50))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M244.915 135.926L158.342 185.909L134.959 172.409L221.533 122.426L244.915 135.926Z\"\n        fill=\"var(--te-illustration-light-gray, var(--c8y-palette-gray-70))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M158.342 185.909V201.088L134.959 187.588V172.409L158.342 185.909Z\"\n        fill=\"var(--te-illustration-gray, var(--c8y-palette-gray-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M125.241 115.16L193.068 76L123.786 36L55.959 75.16L125.241 115.16Z\"\n        fill=\"var(--te-illustration-light-green, var(--c8y-brand-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"bevel\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M193.068 154.32L125.241 193.48L55.959 153.48L123.786 114.32L193.068 154.32Z\"\n        fill=\"var(--te-illustration-blue, #6580E1)\"\n        fill-opacity=\"0.6\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"bevel\"\n      />\n      <path\n        fill-rule=\"evenodd\"\n        clip-rule=\"evenodd\"\n        d=\"M125.241 193.48V115.16L55.959 75.1602V153.48L125.241 193.48Z\"\n        fill=\"var(--te-illustration-green, var(--c8y-brand-primary))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"bevel\"\n      />\n      <path\n        d=\"M125.24 115.16L193.067 76V154.32L125.24 193.48V115.16Z\"\n        fill=\"var(--te-illustration-dark-green, var(--c8y-brand-30))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"bevel\"\n      />\n      <path\n        d=\"M148.292 117.821V127.546L159.298 121.192V125.918L148.292 132.272V152.338L148.295 152.569C148.332 154.076 148.738 155.009 149.512 155.366C150.221 155.694 151.133 155.582 152.249 155.032L150.085 161.3C148.432 161.973 147.031 162.075 145.883 161.605C144.405 161 143.624 159.245 143.539 156.339L143.533 156.045V135.02L137.584 138.454V133.729L143.533 130.294V122.076L148.292 117.821ZM179.995 113.24C182.557 114.799 183.839 118.318 183.839 123.8C183.839 125.242 183.753 126.498 183.582 127.566L183.541 127.809L163.218 139.543L163.261 139.794C163.596 141.607 164.267 142.704 165.274 143.083C166.327 143.48 167.727 143.174 169.476 142.165C170.946 141.316 172.148 140.303 173.081 139.124C173.96 138.015 174.566 136.8 174.899 135.48L174.959 135.231L183.183 133.497L183.1 133.826C182.243 137.106 180.652 140.158 178.326 142.982C175.922 145.9 172.972 148.369 169.476 150.387C164.409 153.313 160.5 154.098 157.749 152.743L164.799 132.326L174.363 126.804C173.886 122.603 172.058 121.42 168.88 123.255C168.443 123.507 168.03 123.787 167.641 124.094L171.162 113.9C174.898 112.152 177.842 111.932 179.995 113.24ZM175.011 95.9238C176.313 95.9225 176.842 97.4425 176.194 99.3201L151.938 169.579C151.291 171.454 149.712 172.977 148.412 172.98L148.409 172.98C147.108 172.982 146.579 171.462 147.227 169.584L171.482 99.3251C172.13 97.4498 173.709 95.927 175.009 95.9238H175.011Z\"\n        fill=\"var(--te-illustration-light-green, var(--c8y-brand-60))\"\n        stroke=\"var(--te-illustration-stroke, #212121)\"\n        stroke-linejoin=\"bevel\"\n      />\n      <defs>\n        <filter\n          id=\"filter0_f_1482_34959\"\n          height=\"135\"\n          x=\"64.0957\"\n          y=\"199\"\n          width=\"208.129\"\n          filterUnits=\"userSpaceOnUse\"\n          color-interpolation-filters=\"sRGB\"\n        >\n          <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n          <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\n          <feGaussianBlur stdDeviation=\"4\" result=\"effect1_foregroundBlur_1482_34959\" />\n        </filter>\n      </defs>\n    </svg>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n    `\n  ]\n})\nexport class ThinEdgeIllustrationComponent {}\n","import { AfterViewInit, Component, DestroyRef, inject, Renderer2, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  C8yStepper,\n  ClipboardService,\n  CoreModule,\n  GainsightService,\n  InterAppService,\n  OperationResultComponent,\n  SupportedApps\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { throttleTime } from 'rxjs/operators';\nimport { CdkStep, STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { isEmpty } from 'lodash-es';\nimport { DeviceEnrolmentService } from './device-enrolment.service';\nimport { ThinEdgeIllustrationComponent } from './thin-edge-illustration.component';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-device-enrolment',\n  templateUrl: './device-enrolment-modal.component.html',\n  imports: [\n    CoreModule,\n    ReactiveFormsModule,\n    ThinEdgeIllustrationComponent,\n    OperationResultComponent,\n    TooltipDirective\n  ],\n  providers: [\n    {\n      provide: STEPPER_GLOBAL_OPTIONS,\n      useValue: { showError: true, displayDefaultIndicatorType: false }\n    }\n  ]\n})\nexport class DeviceEnrolmentModalComponent implements AfterViewInit {\n  @ViewChild(C8yStepper, { static: false })\n  stepper: C8yStepper;\n  success: boolean | undefined = undefined;\n  deviceId: string;\n  waitOrRetry: string = gettext('Waiting');\n  readonly connectSmartphoneTitle: string = gettext('Connect your device to our IoT platform');\n  readonly enterDeviceName: string = gettext('Name your Device');\n  readonly generateCodeTitle: string = gettext('Run the connection command');\n  readonly resultTitle: string = gettext('Result');\n  readonly gainsightStepName = ['WizardIntro', 'DeviceName', 'CodeGeneration'];\n  private destroyRef = inject(DestroyRef);\n  private interAppService = inject(InterAppService);\n\n  codeDevice = '';\n  codeContainer = '';\n  errorMessage = '';\n  externalId: string = this.generateDeviceId();\n  isCodeRequestPending = false;\n  isCAAvailable: Promise<boolean>;\n  hasDeviceIdError = false;\n\n  constructor(\n    private bsModalRef: BsModalRef,\n    private renderer: Renderer2,\n    private deviceEnrolmentService: DeviceEnrolmentService,\n    private clipboardService: ClipboardService,\n    private gainsightService: GainsightService\n  ) {\n    this.isCAAvailable = this.deviceEnrolmentService.caAvailableAndConfigured();\n  }\n\n  ngAfterViewInit() {\n    this.stepper.selectionChange\n      .pipe(throttleTime(100), takeUntilDestroyed(this.destroyRef))\n      .subscribe((stepper: Partial<C8yStepper>) => this.onStepperSelectionChange(stepper));\n\n    this.gainsightService.triggerEvent('thinEdge', {\n      result: 'viewingWizardStepOpen',\n      stepName: 'WizardOpened'\n    });\n  }\n\n  onStepperSelectionChange(stepper: Partial<C8yStepper>) {\n    const GENERATE_CODE_STEP_INDEX = 2;\n    if (stepper.selectedIndex === GENERATE_CODE_STEP_INDEX) {\n      if (isEmpty(this.codeDevice) && isEmpty(this.codeContainer)) {\n        this.generateCode();\n      }\n    }\n    this.gainsightService.triggerEvent('thinEdge', {\n      result: `viewingWizardStep${stepper.selectedIndex}`,\n      stepName: this.gainsightStepName[stepper.selectedIndex! - 1]\n    });\n  }\n\n  onComplete() {\n    this.stepper.setIndex(3);\n    this.success = true;\n  }\n\n  generateDeviceId() {\n    return 'iotgw' + Math.floor(Math.random() * 100000);\n  }\n\n  back() {\n    this.stepper.previous();\n  }\n\n  next($event: { stepper: C8yStepper; step: CdkStep }): void {\n    const { step } = $event;\n    step.completed = true;\n    this.stepper.next();\n  }\n\n  cancel() {\n    this.bsModalRef.hide();\n    this.gainsightService.triggerEvent('thinEdge', {\n      result: 'viewingWizardStepCancel',\n      stepName: 'Cancel'\n    });\n  }\n\n  close() {\n    this.bsModalRef.hide();\n    this.gainsightService.triggerEvent('thinEdge', {\n      result: 'viewingWizardStepClose',\n      stepName: 'Close'\n    });\n  }\n\n  retry() {\n    this.success = undefined;\n    this.errorMessage = '';\n    this.codeDevice = '';\n    this.codeContainer = '';\n    this.waitOrRetry = gettext('Retrying');\n\n    // If duplicate device ID error (422), go back to device name step\n    // Otherwise, navigate back to code generation step\n    if (this.hasDeviceIdError) {\n      this.hasDeviceIdError = false;\n      this.externalId = this.generateDeviceId();\n      this.stepper.setIndex(1);\n    } else {\n      // The onStepperSelectionChange will automatically call generateCode()\n      this.stepper.setIndex(2);\n    }\n  }\n\n  async generateCode() {\n    this.hasDeviceIdError = false;\n    try {\n      this.isCodeRequestPending = true;\n      const data = await this.deviceEnrolmentService.getRegistrationCode(this.externalId);\n      if (data?.error) {\n        this.errorMessage = data?.error;\n        this.hasDeviceIdError = data?.statusCode === 422;\n        this.success = false;\n        this.stepper.setIndex(3);\n      } else {\n        this.codeDevice = data?.script || '';\n        this.codeContainer = data?.docker || '';\n        this.errorMessage = '';\n      }\n    } catch (e) {\n      this.errorMessage = e.message || JSON.stringify(e);\n      this.success = false;\n      this.stepper.setIndex(3);\n    } finally {\n      this.isCodeRequestPending = false;\n    }\n  }\n\n  copyIt(text: string): void {\n    this.clipboardService.writeText(text);\n  }\n\n  manageCertificates() {\n    this.interAppService.navigateToApp(\n      SupportedApps.devicemanagement,\n      '#/trusted-certificates/certificates'\n    );\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header dialog-header\">\n    <i [c8yIcon]=\"'c8y-device-connect'\"></i>\n    <h4\n      id=\"modal-title\"\n      translate\n    >\n      Try thin-edge.io\n    </h4>\n  </div>\n\n  <c8y-stepper\n    class=\"inner-scroll\"\n    [disableDefaultIcons]=\"{ edit: true, done: false }\"\n    [useStepLabelsAsTitlesOnly]=\"true\"\n    id=\"modal-body\"\n    [customClasses]=\"['m-l-80', 'm-r-80', 'p-t-16 ', 'p-b-16']\"\n    [disableProgressButtons]=\"true\"\n    linear\n  >\n    <cdk-step [label]=\"connectSmartphoneTitle\">\n      <div\n        class=\"p-l-40 p-r-40\"\n        style=\"min-height: 420px\"\n      >\n        <h4\n          class=\"p-t-24 m-b-24 animated text-center fadeInUp\"\n          style=\"animation-delay: 0.3s\"\n        >\n          Connect your thin-edge.io Device\n        </h4>\n        <div class=\"row overflow-hidden d-flex\">\n          <div class=\"col-xs-7\">\n            <p\n              class=\"m-b-16 lead animated fadeInUp\"\n              style=\"animation-delay: 0.5s\"\n              translate\n            >\n              To get more from Cumulocity, connect a thin-edge.io device or a container on your\n              computer. This wizard will automatically connect it so you can use Cumulocity's device\n              management features.\n            </p>\n            <div\n              class=\"m-b-16 animated fadeInUp\"\n              style=\"animation-delay: 0.75s\"\n              translate\n            >\n              <p>Before you begin, please have one of the following ready:</p>\n              <ul class=\"p-l-16\">\n                <li>A computer with Docker installed (to simulate a device), or</li>\n                <li>A physical Linux IoT device.</li>\n              </ul>\n            </div>\n            @if ((isCAAvailable | async) === false) {\n              <div\n                class=\"alert alert-warning animated fadeInUp\"\n                style=\"animation-delay: 0.85s\"\n              >\n                <p\n                  class=\"m-b-16\"\n                  translate\n                >\n                  Additionally, a trusted CA certificate must be available and enabled.\n                </p>\n                <button\n                  class=\"btn btn-default btn-sm\"\n                  type=\"button\"\n                  (click)=\"manageCertificates()\"\n                  translate\n                >\n                  Manage certificates\n                </button>\n              </div>\n            } @else {\n              <p\n                class=\"m-b-16 animated fadeInUp\"\n                style=\"animation-delay: 1s\"\n                translate\n              >\n                Click\n                <strong>Next</strong>\n                to continue.\n              </p>\n            }\n          </div>\n          <div\n            class=\"col-xs-5 no-gutter animated zoomIn\"\n            style=\"animation-delay: 0.4s\"\n          >\n            <c8y-thin-edge-illustration />\n          </div>\n        </div>\n      </div>\n      <c8y-stepper-buttons\n        class=\"modal-footer d-block bg-component separator-top sticky-bottom\"\n        (onNext)=\"next($event)\"\n        (onCancel)=\"cancel()\"\n        [disabled]=\"(isCAAvailable | async) === false\"\n      ></c8y-stepper-buttons>\n    </cdk-step>\n    <cdk-step [label]=\"enterDeviceName\">\n      <div\n        class=\"p-l-24 p-r-24\"\n        style=\"min-height: 420px\"\n      >\n        <div class=\"p-l-40 p-r-40\">\n          <h4\n            class=\"p-t-24 m-b-24 text-center animated fadeInUp\"\n            style=\"animation-delay: 0.3s\"\n          >\n            {{ enterDeviceName | translate }}\n          </h4>\n          <p\n            class=\"p-b-24 animated fadeInUp\"\n            style=\"animation-delay: 0.5s\"\n            translate\n          >\n            Choose a unique name for your device. We've generated a suggestion, which you can change\n            if you like. This name identifies the device in your Cumulocity tenant.\n          </p>\n          <div\n            class=\"animated fadeInUp\"\n            style=\"animation-delay: 0.7s\"\n          >\n            <!-- Enter device name -->\n            <div class=\"form-group\">\n              <label translate>Device name</label>\n              <input\n                class=\"form-control\"\n                [(ngModel)]=\"externalId\"\n              />\n            </div>\n          </div>\n\n          <p\n            class=\"animated fadeInUp\"\n            style=\"animation-delay: 0.9s\"\n            translate\n          >\n            Enter the device name and click\n            <strong>Next</strong>\n            .\n          </p>\n        </div>\n      </div>\n      <c8y-stepper-buttons\n        class=\"modal-footer d-block bg-component separator-top sticky-bottom\"\n        (onBack)=\"back()\"\n        (onNext)=\"next($event)\"\n        (onCancel)=\"cancel()\"\n      ></c8y-stepper-buttons>\n    </cdk-step>\n\n    <cdk-step [label]=\"generateCodeTitle\">\n      @if (errorMessage?.length === 0) {\n        <div\n          class=\"p-l-24 p-r-24\"\n          style=\"min-height: 420px\"\n        >\n          <div class=\"p-l-40 p-r-40\">\n            <h4\n              class=\"text-center p-t-24 m-b-8 animated fadeInUp\"\n              style=\"animation-delay: 0.3s\"\n            >\n              {{ generateCodeTitle | translate }}\n            </h4>\n            <p\n              class=\"p-b-8 animated fadeInUp\"\n              style=\"animation-delay: 0.5s\"\n              translate\n            >\n              Choose the option that matches your setup. Copy the entire command and run it in the\n              appropriate terminal on your computer or device.\n            </p>\n            <fieldset\n              class=\"c8y-fieldset animated fadeInUp\"\n              style=\"animation-delay: 0.7s\"\n            >\n              <legend\n                class=\"d-flex a-i-center gap-4\"\n                title=\"Docker\"\n                data-cy=\"asset-properties-label\"\n              >\n                <svg\n                  class=\"max-width-fit\"\n                  style=\"max-height: 18px\"\n                  viewBox=\"0 0 512 512\"\n                >\n                  <path\n                    stroke=\"currentColor\"\n                    stroke-width=\"38\"\n                    d=\"M296 226h42m-92 0h42m-91 0h42m-91 0h41m-91 0h42m8-46h41m8 0h42m7 0h42m-42-46h42\"\n                  />\n                  <path\n                    fill=\"currentColor\"\n                    d=\"m472 228s-18-17-55-11c-4-29-35-46-35-46s-29 35-8 74c-6 3-16 7-31 7H68c-5 19-5 145 133 145 99 0 173-46 208-130 52 4 63-39 63-39\"\n                  />\n                </svg>\n                <span>Docker</span>\n              </legend>\n              <p\n                class=\"m-b-8\"\n                translate\n              >\n                For connecting a simulated device, run this command on your computer with\n                Docker`KEEP_ORIGINAL` installed. It will install the\n                <a\n                  href=\"https://github.com/thin-edge/tedge-demo-container\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                >\n                  tedge-demo-container\n                </a>\n                .\n              </p>\n              <div class=\"input-group m-b-16\">\n                <div class=\"form-control\">\n                  <code\n                    class=\"text-truncate\"\n                    title=\"{{ codeContainer || '-- code --' }}\"\n                  >\n                    {{ codeContainer || '-- code --' }}\n                  </code>\n                </div>\n                <div class=\"input-group-btn\">\n                  <button\n                    class=\"btn btn-default\"\n                    [attr.aria-label]=\"'Copy' | translate\"\n                    tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n                    placement=\"top\"\n                    type=\"button\"\n                    data-cy=\"asset-properties-edit-icon\"\n                    (click)=\"copyIt(codeContainer)\"\n                    [adaptivePosition]=\"false\"\n                    [delay]=\"500\"\n                  >\n                    <i c8yIcon=\"copy\"></i>\n                  </button>\n                </div>\n              </div>\n            </fieldset>\n            <fieldset\n              class=\"c8y-fieldset animated fadeInUp\"\n              style=\"animation-delay: 0.9s\"\n            >\n              <legend\n                class=\"d-flex a-i-center gap-4\"\n                title=\"{{ 'Device' | translate }}\"\n                data-cy=\"asset-properties-label\"\n              >\n                <i c8yIcon=\"exchange\"></i>\n                {{ 'Device' | translate }}\n              </legend>\n              <p\n                class=\"p-b-8\"\n                translate\n              >\n                For connecting a physical Linux IoT device, run this command in the device's\n                terminal.\n              </p>\n\n              <div class=\"input-group m-b-16\">\n                <div class=\"form-control\">\n                  <code\n                    class=\"text-truncate\"\n                    title=\"{{ codeDevice || '-- code --' }}\"\n                  >\n                    {{ codeDevice || '-- code --' }}\n                  </code>\n                </div>\n                <div class=\"input-group-btn\">\n                  <button\n                    class=\"btn btn-default\"\n                    [attr.aria-label]=\"'Copy' | translate\"\n                    tooltip=\"{{ 'Copy to clipboard' | translate }}\"\n                    placement=\"top\"\n                    type=\"button\"\n                    data-cy=\"asset-properties-edit-icon\"\n                    (click)=\"copyIt(codeDevice)\"\n                    [adaptivePosition]=\"false\"\n                    [delay]=\"500\"\n                  >\n                    <i c8yIcon=\"copy\"></i>\n                  </button>\n                </div>\n              </div>\n            </fieldset>\n          </div>\n        </div>\n        <div class=\"modal-footer d-block bg-component separator-top sticky-bottom animated fadeIn\">\n          @if (isCodeRequestPending) {\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Cancel' | translate }}\"\n              type=\"button\"\n              (click)=\"cancel()\"\n            >\n              {{ 'Cancel' | translate }}\n            </button>\n            <button\n              class=\"btn btn-primary btn-pending\"\n              title=\"{{ waitOrRetry | translate }}\"\n              type=\"button\"\n            >\n              {{ waitOrRetry | translate }}\n            </button>\n          }\n\n          @if (!isCodeRequestPending && (codeContainer.length || codeDevice.length)) {\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Complete' | translate }}\"\n              type=\"button\"\n              (click)=\"onComplete()\"\n            >\n              {{ 'Complete' | translate }}\n            </button>\n          }\n        </div>\n      }\n    </cdk-step>\n\n    <cdk-step [label]=\"resultTitle\">\n      <!-- SUCCESS STATE -->\n      @if (success) {\n        <div\n          class=\"p-t-24\"\n          style=\"min-height: 420px\"\n        >\n          <div class=\"p-l-24 p-r-24 text-center\">\n            <c8y-operation-result\n              type=\"success\"\n              text=\"Setup completed\"\n              [size]=\"96\"\n              [vertical]=\"true\"\n            ></c8y-operation-result>\n            <div class=\"p-l-40 p-r-40\">\n              <h4\n                class=\"m-b-16 animated fadeInUp\"\n                style=\"animation-delay: 0.5s\"\n              >\n                <strong translate>Device enrollment completed</strong>\n              </h4>\n              <p\n                class=\"p-b-8 lead animated fadeInUp text-balance\"\n                style=\"animation-delay: 0.75s\"\n                translate\n              >\n                Your device is now connected and sending data to your Cumulocity tenant.\n              </p>\n              <p\n                class=\"animated fadeInUp text-balance\"\n                style=\"animation-delay: 0.75s\"\n                translate\n              >\n                Click\n                <strong>Close</strong>\n                to view your newly registered device in the device list.\n              </p>\n            </div>\n          </div>\n        </div>\n        <div class=\"modal-footer d-block bg-component separator-top sticky-bottom text-center\">\n          <div\n            class=\"text-center animated fadeInUp\"\n            style=\"animation-delay: 1s\"\n          >\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Close' | translate }}\"\n              type=\"button\"\n              (click)=\"close()\"\n            >\n              {{ 'Close' | translate }}\n            </button>\n          </div>\n        </div>\n      }\n\n      <!-- ERROR STATE -->\n      @if (success === false && errorMessage?.length > 0) {\n        <div\n          class=\"p-t-24\"\n          style=\"min-height: 420px\"\n        >\n          <div class=\"p-l-24 p-r-24 text-center\">\n            <c8y-operation-result\n              type=\"error\"\n              text=\"Setup failed\"\n              [size]=\"96\"\n              [vertical]=\"true\"\n            ></c8y-operation-result>\n            <div class=\"p-l-40 p-r-40\">\n              <h4\n                class=\"m-b-16 animated fadeInUp\"\n                style=\"animation-delay: 0.5s\"\n              >\n                <strong>{{ 'Device enrollment failed' | translate }}</strong>\n              </h4>\n              @if (errorMessage?.length) {\n                <div\n                  class=\"animated fadeInUp\"\n                  style=\"animation-delay: 0.75s\"\n                >\n                  <div class=\"alert alert-danger\">\n                    <p class=\"p-b-16 text-medium\">\n                      {{ 'The following error occurred:' | translate }}\n                    </p>\n                    <pre class=\"inner-scroll\">{{ errorMessage }}</pre>\n                  </div>\n                </div>\n              }\n            </div>\n          </div>\n        </div>\n        <div class=\"modal-footer d-block bg-component separator-top sticky-bottom text-center\">\n          <div\n            class=\"animated fadeIn col-xs-4 text-center fit-w\"\n            style=\"animation-delay: 1s\"\n          >\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Close' | translate }}\"\n              type=\"button\"\n              (click)=\"cancel()\"\n            >\n              {{ 'Close' | translate }}\n            </button>\n            <button\n              class=\"btn btn-primary\"\n              title=\"{{ 'Retry' | translate }}\"\n              type=\"button\"\n              (click)=\"retry()\"\n            >\n              {{ 'Retry' | translate }}\n            </button>\n          </div>\n        </div>\n      }\n    </cdk-step>\n  </c8y-stepper>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.DeviceEnrolmentService"],"mappings":"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"}