Vue Integration
WriteTrack provides a Vue 3 composable for easy integration with Vue applications.
Installation
Section titled “Installation”npm i writetrackpnpm add writetrackyarn add writetrackbun add writetrackVue is an optional peer dependency - non-Vue users won’t have it in their bundle.
Basic Usage
Section titled “Basic Usage”<script setup lang="ts">import { ref } from 'vue';import { useWriteTrack } from 'writetrack/vue';
const textareaRef = ref<HTMLTextAreaElement | null>(null);const { tracker, isTracking } = useWriteTrack(textareaRef);
function handleSubmit() { if (tracker.value) { const data = tracker.value.getData(); console.log('Session data:', data); }}</script>
<template> <form @submit.prevent="handleSubmit"> <textarea ref="textareaRef" placeholder="Type your response..." /> <p v-if="isTracking">Tracking keystrokes...</p> <button type="submit">Submit</button> </form></template>API Reference
Section titled “API Reference”useWriteTrack
Section titled “useWriteTrack”function useWriteTrack( elementRef: Ref<HTMLElement | null>, options?: UseWriteTrackOptions): UseWriteTrackReturn;Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
elementRef | Ref<HTMLElement> | Vue ref attached to the input element |
options.license | string | WriteTrack license key |
options.userId | string | User identifier included in metadata |
options.contentId | string | Content identifier included in metadata |
options.metadata | Record<string, unknown> | Additional metadata |
options.autoStart | boolean | Auto-start tracking when element mounts (default: true) |
options.wasmUrl | string | URL to WASM binary for analysis |
options.persist | boolean | Enable IndexedDB session persistence (requires contentId) |
Return Value
Section titled “Return Value”| Property | Type | Description |
|---|---|---|
start | () => void | Start tracking (if autoStart was false) |
stop | () => void | Stop tracking |
reset | () => void | Reset tracker and clear state |
isTracking | Ref<boolean> | Whether tracker is active |
tracker | ShallowRef<WriteTrack | null> | Underlying WriteTrack instance |
Examples
Section titled “Examples”Manual Start/Stop
Section titled “Manual Start/Stop”<script setup lang="ts">import { ref } from 'vue';import { useWriteTrack } from 'writetrack/vue';
const inputRef = ref<HTMLInputElement | null>(null);const { start, stop, tracker, isTracking } = useWriteTrack(inputRef, { autoStart: false,});
function toggleTracking() { if (isTracking.value) { stop(); } else { start(); }}</script>
<template> <div> <input ref="inputRef" type="text" />
<button @click="toggleTracking"> {{ isTracking ? 'Stop' : 'Start' }} Tracking </button>
<button @click="() => tracker && console.log(tracker.getData())"> Get Data </button> </div></template>With Multiple Inputs
Section titled “With Multiple Inputs”<script setup lang="ts">import { ref } from 'vue';import { useWriteTrack } from 'writetrack/vue';
const nameRef = ref<HTMLInputElement | null>(null);const emailRef = ref<HTMLInputElement | null>(null);const messageRef = ref<HTMLTextAreaElement | null>(null);
// Track the main content fieldconst { tracker } = useWriteTrack(messageRef);
function handleSubmit() { if (tracker.value) { const data = tracker.value.getData(); console.log('Session:', data.quality); }}</script>
<template> <form @submit.prevent="handleSubmit"> <input ref="nameRef" placeholder="Name" /> <input ref="emailRef" placeholder="Email" /> <textarea ref="messageRef" placeholder="Message (tracked)" /> <button type="submit">Send</button> </form></template>TypeScript
Section titled “TypeScript”import type { UseWriteTrackReturn, UseWriteTrackOptions } from 'writetrack/vue';