chromium/ash/webui/shimless_rma/resources/reimaging_device_information_page.html

<style include="cr-shared-style shimless-rma-shared shimless-fonts">
  :host {
    --device-info-input-width: 336px;
    /* Height of the shadows that are added by CrContainerShadowMixin. */
    --shadow-height: 20px;
    /* This inverted margin "pulls" in the content below/above it, so the shadow
     * overlaps the content. The 2px is an optical adjustment. */
    --shadow-negative-margin: calc(2px + calc(-1 * var(--shadow-height)));
  }

  hr {
    border: 0;
    border-top: 1px solid var(--cros-separator-color);
    display: block;
    height: 1px;
    margin-bottom: 16px;
    margin-inline-start: 0;
    margin-top: 0;
    transition: opacity 250ms ease;
    /* 90px is the width (including margins) of the revert button to the right
     * of each input. */
    width: calc(var(--device-info-input-width) + 90px);
  }

  .wrapper #cr-container-shadow-top,
  .wrapper #cr-container-shadow-bottom {
    background: linear-gradient(180deg, rgba(0,0,0,0.05), transparent);
    box-shadow: none;
    height: var(--shadow-height);
  }

  .wrapper #cr-container-shadow-top {
    margin-bottom: var(--shadow-negative-margin);
  }

  .wrapper #cr-container-shadow-bottom {
    margin-top: var(--shadow-negative-margin);
  }

  /* Hide the compliance info horizontal line when the bottom shadow is present
   * to avoid unsightly overlap. */
  .wrapper:has(#cr-container-shadow-bottom.has-shadow) hr {
    opacity: 0;
  }

  /* Show the compliance info horizontal line when the bottom shadow is gone. */
  .wrapper:not(:has(#cr-container-shadow-bottom.has-shadow)) hr {
    opacity: 1;
  }

  .input-wrapper {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    overflow-y: auto;
    /* Add padding on the left so the inputs don't get visually cropped. */
    padding-inline-start: 2px;
  }

  /*
   * This CSS block is necessary for the correct functioning of the
   * CrContainerShadowMixin intersection probe: that mixin uses an empty div
   * with the IntersectionObserver API to track when the scroll container is
   * scrolled all the way to the bottom (to hide/show the bottom shadow).
   * When the scroll container has height 100%, the intersection probe div will
   * never trigger, causing the bottom shadow to never disappear. This block
   * of CSS moves the element up slightly so that it works correctly.
   */
  .input-wrapper > div:last-of-type {
    position: relative;
    top: -1px;
  }

  .input-row {
    margin-bottom: 30px;
  }

  .input-holder {
    align-items: center;
    display: flex;
  }

  cr-button {
    border: 0;
    margin-top: auto;
  }

  .sku-warning {
    color: var(--shimless-warning-text-color);
    display: flex;
    font-family: var(--shimless-warning-font-family);
    font-size: var(--shimless-warning-font-size);
    font-weight: var(--shimless-regular-font-weight);
    line-height: var(--shimless-warning-line-height);
    max-width: 400px;
  }

  cr-input {
    --cr-input-error-display: none;
    --cr-form-field-label-color: var(--shimless-hint-text-color);
    margin-inline-end: 20px;
  }

  select {
    margin-inline-end: 20px;
  }

  .cr-form-field-label {
    color: var(--shimless-hint-text-color);
    font-family: var(--shimless-hint-font-family);
    font-size: var(--shimless-hint-font-size);
    font-weight: var(--shimless-medium-font-weight);
    line-height: var(--shimless-hint-line-height);
  }

  cr-input,
  .md-select {
    width: var(--device-info-input-width);
  }

  .label-wrapper {
    align-items: center;
    display: inline-flex;
    vertical-align: middle;
  }

  .info-icon {
    color: var(--shimless-hint-text-color);
    display: inline-block;
    height: 18px;
    margin-inline-start: 6px;
    position: relative;
    top: -5px;
    width: 18px;
  }

  .tooltip-content {
    line-height: var(--shimless-instructions-line-height);
  }

  #complianceWarning {
    align-items: center;
    /* We're using this hex color, which corresponds to google_orange_900 in
     * cros_palette.json5, because there is no shared variable for the color. */
    color: #b06000;
    display: flex;
    margin-top: 2px;
  }

  #complianceWarning iron-icon {
    display: inline-block;
    height: 18px;
    margin-inline-end: 6px;
    width: 18px;
  }

  .required-field-asterisk {
    color: var(--cros-text-color-alert);
    margin-inline-start: 3px;
  }

  .wrapper {
    display: flex;
    flex-direction: column;
    height: 100%;
  }
</style>

<base-page>
  <div slot="left-pane">
    <h1 tabindex="-1">[[i18n('confirmDeviceInfoTitle')]]</h1>
    <div class="instructions">
      [[i18n('confirmDeviceInfoInstructions')]]
    </div>
  </div>
  <div slot="right-pane">
    <div class="wrapper">
      <!-- The #container ID is necessary for the CrContainerShadowMixin to work. -->
      <div id="container" class="input-wrapper"
          show-bottom-shadow>
        <div hidden="[[!shouldShowComplianceSection(featureLevel)]]">
          <div hidden="[[isComplianceStatusKnown(featureLevel)]]">
            <div class="input-row">
              <div class="label-wrapper">
                <label id="isChassisBrandedLabel" class="cr-form-field-label">
                  [[i18n('confirmDeviceInfoDeviceQuestionIsBranded')]]
                </label>
                <span class="required-field-asterisk cr-form-field-label"
                    aria-hidden="true">
                  *
                </span>
              </div>
              <div class="input-holder">
                <select id="isChassisBranded" class="md-select"
                    on-change="onIsChassisBrandedChange"
                    aria-labelledby="isChassisBrandedLabel"
                    disabled="[[allButtonsDisabled]]">
                  <option value="[[booleanOrDefaultOptions.DEFAULT]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerDefault')]]
                  </option>
                  <option value="[[booleanOrDefaultOptions.NO]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerNo')]]
                  </option>
                  <option value="[[booleanOrDefaultOptions.YES]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerYes')]]
                  </option>
                </select>
              </div>
            </div>
            <div class="input-row">
              <div class="label-wrapper">
                <label id="doesMeetRequirementsLabel" class="cr-form-field-label">
                  [[i18n('confirmDeviceInfoDeviceQuestionDoesMeetRequirements')]]
                </label>
                <span class="required-field-asterisk cr-form-field-label"
                    aria-hidden="true">
                  *
                </span>
                <iron-icon icon="shimless-icon:info" class="info-icon"
                  id="requirements-icon">
                </iron-icon>
                <paper-tooltip for="requirements-icon" aria-hidden="true">
                  <div class="tooltip-content">
                    [[i18n('confirmDeviceInfoDeviceQuestionDoesMeetRequirementsTooltip')]]
                  </div>
                </paper-tooltip>
              </div>
              <div class="input-holder">
                <select id="doesMeetRequirements" class="md-select"
                    on-change="onDoesMeetRequirementsChange"
                    aria-labelledby="doesMeetRequirementsLabel"
                    disabled="[[allButtonsDisabled]]">
                  <option value="[[booleanOrDefaultOptions.DEFAULT]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerDefault')]]
                  </option>
                  <option value="[[booleanOrDefaultOptions.NO]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerNo')]]
                  </option>
                  <option value="[[booleanOrDefaultOptions.YES]]">
                    [[i18n('confirmDeviceInfoDeviceAnswerYes')]]
                  </option>
                </select>
              </div>
            </div>
          </div>
        </div>
        <div class="input-row">
          <div class="input-holder">
            <cr-input id="serialNumber" value="{{serialNumber}}"
                label="[[i18n('confirmDeviceInfoSerialNumberLabel')]]"
                disabled="[[allButtonsDisabled]]">
            </cr-input>
            <cr-button id="resetSerialNumber"
                on-click="onResetSerialNumberButtonClicked"
                disabled="[[disableResetSerialNumber]]"
                aria-description="[[i18n('confirmDeviceInfoSerialNumberLabel')]]">
              [[i18n('confirmDeviceInfoResetButtonLabel')]]
            </cr-button>
          </div>
        </div>
        <div class="input-row">
          <div class="input-holder">
            <cr-input id="dramPartNumber" value="{{dramPartNumber}}"
                label="[[i18n('confirmDeviceInfoDramPartNumberLabel')]]"
                disabled="[[allButtonsDisabled]]">
            </cr-input>
            <cr-button id="resetDramPartNumber"
                on-click="onResetDramPartNumberButtonClicked"
                disabled="[[disableResetDramPartNumber]]"
                aria-description="[[i18n('confirmDeviceInfoDramPartNumberLabel')]]">
              [[i18n('confirmDeviceInfoResetButtonLabel')]]
            </cr-button>
          </div>
        </div>
        <div class="input-row">
          <label id="regionLabel" class="cr-form-field-label">
            [[i18n('confirmDeviceInfoRegionLabel')]]
          </label>
          <div class="input-holder">
            <select id="regionSelect" class="md-select"
                on-change="onSelectedRegionChange" aria-labelledby="regionLabel"
                disabled="[[allButtonsDisabled]]">
              <template is="dom-repeat" items="[[regions]]" as="region">
                <option value="[[region]]">
                  [[region]]
                </option>
              </template>
            </select>
            <cr-button id="resetRegion" on-click="onResetRegionButtonClicked"
                disabled="[[disableResetRegion]]"
                aria-describedby="regionLabel">
              [[i18n('confirmDeviceInfoResetButtonLabel')]]
            </cr-button>
          </div>
        </div>
        <div class="input-row">
          <label id="customLabelLabel" class="cr-form-field-label">
            [[i18n('confirmDeviceInfoCustomLabelLabel')]]
          </label>
          <div class="input-holder">
            <select id="customLabelSelect" class="md-select"
                on-change="onSelectedCustomLabelChange"
                aria-labelledby="customLabelLabel"
                disabled="[[allButtonsDisabled]]">
              <template is="dom-repeat" items="[[customLabels]]" as="customLabel">
                <option value="[[customLabel]]">
                  [[customLabel]]
                </option>
              </template>
            </select>
            <cr-button id="resetCustomLabel"
                on-click="onResetCustomLabelButtonClicked"
                disabled="[[disableResetCustomLabel]]"
                aria-describedby="customLabelLabel">
              [[i18n('confirmDeviceInfoResetButtonLabel')]]
            </cr-button>
          </div>
        </div>
        <div class="label-wrapper">
          <label id="skuLabel" class="cr-form-field-label">
            [[i18n('confirmDeviceInfoSkuLabel')]]
          </label>
          <iron-icon id="skuIcon" icon="shimless-icon:info" class="info-icon">
          </iron-icon>
          <paper-tooltip for="skuIcon" aria-hidden="true">
            <div class="tooltip-content">
              [[i18n('confirmDeviceInfoSkuWarning')]]
            </div>
          </paper-tooltip>
        </div>
        <div class="input-holder input-row">
          <select id="skuSelect" class="md-select"
              on-change="onSelectedSkuChange" aria-labelledby="skuLabel"
              disabled="[[allButtonsDisabled]]">
            <template is="dom-repeat" items="[[skus]]" as="sku">
              <option value="[[sku]]">
                [[sku]]
              </option>
            </template>
          </select>
          <cr-button id="resetSku" on-click="onResetSkuButtonClicked"
              disabled="[[disableResetSku]]"
              aria-describedby="skuLabel">
            [[i18n('confirmDeviceInfoResetButtonLabel')]]
          </cr-button>
        </div>
      </div>
      <div hidden="[[!shouldShowComplianceSection(featureLevel)]]">
        <div hidden="[[!isComplianceStatusKnown(featureLevel)]]">
          <hr aria-hidden="true">
          <div class="input-row">
            <div class="compliance-status-string">
              [[getComplianceStatusString(featureLevel)]]
            </div>
            <div id="complianceWarning">
              <iron-icon icon="shimless-icon:info"></iron-icon>
              <span>
                [[i18n('confirmDeviceInfoDeviceComplianceWarning')]]
              </span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</base-page>