use-transcript-viewer
elevenlabs/use-transcript-viewerFreeHook
shadcn/ui publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/elevenlabs/ui/main/apps/www/public/r/use-transcript-viewer.jsonSource
1"use client"23import {4 useCallback,5 useEffect,6 useMemo,7 useRef,8 useState,9 type RefObject,10} from "react"11import type { CharacterAlignmentResponseModel } from "@elevenlabs/elevenlabs-js/api/types/CharacterAlignmentResponseModel"1213type ComposeSegmentsOptions = {14 hideAudioTags?: boolean15}1617type BaseSegment = {18 segmentIndex: number19 text: string20}2122type TranscriptWord = BaseSegment & {23 kind: "word"24 wordIndex: number25 startTime: number26 endTime: number27}2829type GapSegment = BaseSegment & {30 kind: "gap"31}3233type TranscriptSegment = TranscriptWord | GapSegment3435type ComposeSegmentsResult = {36 segments: TranscriptSegment[]37 words: TranscriptWord[]38}3940type SegmentComposer = (41 alignment: CharacterAlignmentResponseModel42) => ComposeSegmentsResult4344function composeSegments(45 alignment: CharacterAlignmentResponseModel,46 options: ComposeSegmentsOptions = {}47): ComposeSegmentsResult {48 const {49 characters,50 characterStartTimesSeconds: starts,51 characterEndTimesSeconds: ends,52 } = alignment5354 const segments: TranscriptSegment[] = []55 const words: TranscriptWord[] = []5657 let wordBuffer = ""58 let whitespaceBuffer = ""59 let wordStart = 060 let wordEnd = 061 let segmentIndex = 062 let wordIndex = 063 let insideAudioTag = false6465 const hideAudioTags = options.hideAudioTags ?? false6667 const flushWhitespace = () => {68 if (!whitespaceBuffer) return69 segments.push({70 kind: "gap",71 segmentIndex: segmentIndex++,72 text: whitespaceBuffer,73 })74 whitespaceBuffer = ""75 }7677 const flushWord = () => {78 if (!wordBuffer) return79 const word: TranscriptWord = {80 kind: "word",81 segmentIndex: segmentIndex++,82 wordIndex: wordIndex++,83 text: wordBuffer,84 startTime: wordStart,85 endTime: wordEnd,86 }87 segments.push(word)88 words.push(word)89 wordBuffer = ""90 }9192 for (let i = 0; i < characters.length; i++) {93 const char = characters[i]94 const start = starts[i] ?? 095 const end = ends[i] ?? start9697 if (hideAudioTags) {98 if (char === "[") {99 flushWord()100 whitespaceBuffer = ""101 insideAudioTag = true102 continue103 }104105 if (insideAudioTag) {106 if (char === "]") insideAudioTag = false107 continue108 }109 }110111 if (/\s/.test(char)) {112 flushWord()113 whitespaceBuffer += char114 continue115 }116117 if (whitespaceBuffer) {118 flushWhitespace()119 }120121 if (!wordBuffer) {122 wordBuffer = char123// … truncated
Files it writes
More from shadcn/ui
All 50 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| use-mobileuse-mobile | shadcn/ui | Hooks | Free | no deps | |
| use-scribeuse-scribe | shadcn/ui | Hooks | Free | 1 dep |
