Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/website/src/components/SearchForm.vue
1030 views
<template>
  <form :id="id" class="header-search">
    <label>
      <input
          ref="input"
          :id="`${id}-input`"
          class="header-search__input"
          placeholder="Search documentation..."
          title="Search documentation"
          type="search"
          @focus="onFocus"
      />
      <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="search-icon feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
    </label>
  </form>
</template>

<script>
  export default {
    props: {
      id: { type: String, default: 'search' }
    },

    data () {
      return {
        isLoaded: false
      }
    },

    methods: {
      onFocus () {
        if (this.isLoaded) return;

        import('docsearch.js').then(({ default: docsearch }) => {
          docsearch({
            indexName: 'secretagent',
            inputSelector: `#${this.id}-input`,
            apiKey: 'b975ccd9d9a93db63dd14f8d0baee5eb',
            debug: process.env.NODE_ENV === 'development'
          });

          this.isLoaded = true;

          this.$nextTick(() => this.$refs.input.focus());
        })
      }
    }
  }
</script>

<style lang="scss">
  @import '~docsearch.js/dist/cdn/docsearch.min.css';

  .header-search {
    display: block;
    margin-bottom: 0;
    font-size: 0.9rem;
    flex: 1;
    width: 100%;
    position: relative;
    top: 1px;

    label {
      display: flex;
      align-items: center;
    }

    .search-icon {
      margin-left: -1.66rem;
      width: 1rem;
      pointer-events: none;
      opacity: .6;
    }

    @media screen and (max-width: 550px) {
      & { margin: 0 3px 0 -15px; }

      .algolia-autocomplete .ds-dropdown-menu {
        position: fixed!important;
        left:0!important;
        top: var(--header-height)!important;
        right:50px!important;
        &:before {
          display: none!important;
        }
      }
    }

    .algolia-autocomplete {
      width: 100%;
    }
  }

  .algolia-autocomplete .algolia-docsearch-suggestion--wrapper {
    padding-top: 0;
  }
</style>