Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/vue/components/SignIn/SignIn.vue
3855 views
<template>
  <section class="sign-in">
    <div class="sign-in__content">
      <div class="sign-in__content__hero">
        <div id="page-title" class="sign-in__content__hero-title">
          {{ $translate('Learn quantum computing with Qiskit.') }}
        </div>
        <p class="sign-in__content__hero-description">
          {{ $translate('Qiskit is the worlds most popular open source quantum computing toolkit. Get started with a personalized learning experience that tracks your progress.') }}
        </p>
      </div>
      <video class="sign-in__content__media" autoplay loop muted>
        <source :src="signinMediaPath" type="video/mp4">
      </video>
    </div>
    <div class="sign-in__form">
      <div class="sign-in__form__content">
        <h2 class="sign-in__form__title">
          {{ $translate('Sign Into Qiskit') }}
        </h2>
        <AppCta
          class="sign-in__cta"
          :label="$translate('IBM id')"
          :url="authenticationUrl"
          target="_self"
        />
        <AppCta
          :url="gmailAuthenticationLink.url"
          :label="$translate('Sign in with Gmail')"
          :segment="gmailAuthenticationLink.segment"
          kind="ghost"
          target="_self"
        />
      </div>
    </div>
  </section>
</template>

<script lang="ts">
import { Vue, Options } from 'vue-class-component'
import AppCta from '../common/AppCta.vue'
import BasicLink from '../common/BasicLink.vue'

@Options({
  components: {
    AppCta, BasicLink
  }
})

export default class SignIn extends Vue {
  authenticationUrl = '/auth/ibm'
  signinMediaPath = '/images/textbook_showcase.mp4'
  gmailAuthenticationLink = {
    url: '/auth/google',
    segment: {
      cta: 'auth-google',
      location: 'sign-in'
    }
  }
}
</script>

<style lang="scss" scoped>
@import 'carbon-components/scss/globals/scss/typography';
@import '~/../scss/variables/mq.scss';
@import '~/../scss/mixins/mixins.scss';
@import '~/../scss/variables/colors.scss';

.sign-in {
  position: fixed;
  top: 3.5rem;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 3;
  max-height: calc(100vh - 3.5rem);
  overflow: hidden;
  display: flex;

  @include mq($until: medium) {
    flex-direction: column;
    position: initial;
    max-height: initial;
  }

  &__content {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    overflow-y: auto;
    @include mq($from: medium) {
      width: 100%;
    }

    &__hero {
      padding: $spacing-11;
      flex-direction: column;
      background-color: $white-0;

      @include mq($until: large) {
        padding: $spacing-11 $spacing-07;
      }

      &-title {
        @include type-style('productive-heading-06', $fluid: true);
        font-weight: 400;
        margin-bottom: $spacing-05;
        max-width: 32rem;
      }

      &-description {
        max-width: 40rem;
      }
    }

    &__media {
      border-top: 1px solid $cool-gray-20;
      height: 100%;

      @include mq($until: medium) {
        display: none;
      }
    }
  }

  &__cta {
    margin-bottom: $spacing-03;
  }

  &__form {
    padding: $spacing-11;
    background-color: $cool-gray-20;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-width: 40rem;
    flex-grow: 1;

    @include mq($until: large) {
      padding: $spacing-11 $spacing-07;
      min-width: 28rem;
    }

    @include mq($until: medium) {
      min-width: initial;
    }

    @include mq($from: large) {
      min-width: 40rem;
    }

    &__title {
      @include type-style('expressive-heading-05');
      margin-top: initial;
      margin-bottom: $spacing-05;
      display: inline-block;
    }

    &__content {
      margin: 0 auto;
      @include mq($until: medium) {
        margin: initial;
      }
    }
  }
}
</style>