Skip to content

Basic Usage Example

This example demonstrates basic usage of the BGC Viewer components.

Simple Track Viewer

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>BGC Viewer - Basic Example</title>
  <script type="module" src="https://unpkg.com/bgc-viewer@latest/dist/web-components.js"></script>
  <style>
    body {
      font-family: Arial, sans-serif;
      max-width: 1200px;
      margin: 0 auto;
      padding: 20px;
    }
    
    h1 {
      color: #333;
    }
    
    .viewer-container {
      border: 1px solid #ddd;
      border-radius: 8px;
      padding: 20px;
      margin: 20px 0;
    }
  </style>
</head>
<body>
  <h1>BGC Viewer - Basic Example</h1>
  
  <div class="viewer-container">
    <h2>Track Viewer</h2>
    <bgc-track-viewer
      data-url="/api/data/NC_003888"
      width="1000"
      height="400"
      show-domains="true">
    </bgc-track-viewer>
  </div>

  <script>
    // Add event listeners
    const viewer = document.querySelector('bgc-track-viewer');
    
    viewer.addEventListener('gene-click', (event) => {
      const gene = event.detail;
      alert(`Gene clicked: ${gene.name}\nStart: ${gene.start}\nEnd: ${gene.end}`);
    });
  </script>
</body>
</html>

With Vue.js

vue
<template>
  <div class="bgc-app">
    <h1>BGC Viewer Example</h1>
    
    <div class="controls">
      <button @click="zoomIn">Zoom In</button>
      <button @click="zoomOut">Zoom Out</button>
      <button @click="reset">Reset</button>
    </div>

    <TrackViewer
      ref="viewerRef"
      :data="bgcData"
      :options="viewerOptions"
      @gene-click="handleGeneClick"
      @domain-click="handleDomainClick"
    />

    <div v-if="selectedFeature" class="feature-info">
      <h3>{{ selectedFeature.type }}: {{ selectedFeature.name }}</h3>
      <pre>{{ JSON.stringify(selectedFeature, null, 2) }}</pre>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { TrackViewer } from 'bgc-viewer';

const viewerRef = ref(null);
const bgcData = ref(null);
const selectedFeature = ref(null);

const viewerOptions = ref({
  width: 1000,
  height: 400,
  showDomains: true,
  showLabels: true,
  colorScheme: 'default'
});

onMounted(async () => {
  // Load BGC data
  const response = await fetch('/api/data/NC_003888');
  bgcData.value = await response.json();
});

const handleGeneClick = (gene) => {
  selectedFeature.value = { type: 'Gene', ...gene };
};

const handleDomainClick = (domain) => {
  selectedFeature.value = { type: 'Domain', ...domain };
};

const zoomIn = () => {
  viewerRef.value?.zoomIn();
};

const zoomOut = () => {
  viewerRef.value?.zoomOut();
};

const reset = () => {
  viewerRef.value?.reset();
};
</script>

<style scoped>
.bgc-app {
  padding: 20px;
}

.controls {
  margin: 20px 0;
}

.controls button {
  margin-right: 10px;
  padding: 8px 16px;
  background: #4a90e2;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.controls button:hover {
  background: #357abd;
}

.feature-info {
  margin-top: 20px;
  padding: 15px;
  background: #f5f5f5;
  border-radius: 4px;
}

.feature-info pre {
  background: white;
  padding: 10px;
  border-radius: 4px;
  overflow: auto;
}
</style>

Programmatic Usage

javascript
import { TrackViewer } from 'bgc-viewer';

// Create viewer instance
const viewer = new TrackViewer({
  container: '#viewer-container',
  data: bgcData,
  width: 1000,
  height: 400,
  options: {
    showDomains: true,
    showLabels: true,
    colorScheme: 'default'
  }
});

// Render
viewer.render();

// Add event listeners
viewer.on('gene-click', (gene) => {
  console.log('Gene clicked:', gene);
});

// Zoom to region
viewer.zoomTo({ start: 1000, end: 5000 });

// Export as SVG
const svg = viewer.exportSVG();
console.log('SVG:', svg);

Next Steps

Released under the MIT License.