UNPKG

dt-translate-angular

Version:

An Angular component/library for translating and rendering sign language gestures.

1 lines 51.2 kB
{"version":3,"file":"dt-translate-angular.mjs","sources":["../../src/lib/translate-controller.ts","../../src/lib/translate.service.ts","../../src/lib/translate.module.ts","../../src/dt-translate-angular.ts"],"sourcesContent":["// src/translate-controller.ts\n\nimport type { InitData, PoseData } from './types';\n\nexport class TranslateController {\n private appMode: 3 | 4 = 4;\n private apiKey = '';\n private initialized = false;\n private requestedText = '';\n private unityInstance: any = null;\n private character = 0;\n private speed = 0.025;\n private backgroundColor: string | null = null;\n private characterClothColor: string | null = null;\n private selectedLanguage = 'en';\n private baseUrl = 'https://translateai.deaftawk.com:3001';\n private poseWorldLandmarks = 'false';\n private totalCharacters = 3;\n private showLangDd = false;\n private enableCharacterChange = true;\n private unityCallback: ((message: string) => void) | null | undefined = null;\n private windowVisible = true;\n private windowWidth = 275;\n private windowHeight = 155;\n private isWindowVisible=true;\n private appVersion = '1.0.0';\n private CHARACTER_POS_TEXT = 'standstill';\n private languages = ['en', 'da'];\n private shouldShowLogs: boolean = true;\n\n constructor() {\n window.addEventListener('focus', () => {\n this.showLogs('WINDOW FOCUS CALLED ============>')\n if (this.requestedText === this.CHARACTER_POS_TEXT) return;\n const lastSentText = this.requestedText;\n this.requestedText = '';\n if (lastSentText) {\n this.playPose({ text: lastSentText }, undefined, false);\n }\n });\n }\n\n public init(data: InitData): void {\n \n this.showLogs('INIT CALLED ============>')\n if (this.initialized) return;\n this.initialized = true;\n\n if (!data.key) throw new Error('API key is required');\n\n this.apiKey = data.key;\n this.character = data.character || 0;\n this.appMode = [3, 4].indexOf(data.appMode!) > -1 ? data.appMode! : 4;\n this.backgroundColor = data.backgroundColor || null;\n this.characterClothColor = data.characterClothColor || null;\n this.speed = data.speed || 0.025;\n this.enableCharacterChange = data.chanageCharacter ?? true;\n this.showLangDd = data.showLanguageChangeOptions ?? false;\n this.selectedLanguage = 'en';\n this.baseUrl = data.baseUrl || \"https://translateai.deaftawk.com:3001\";\n this.poseWorldLandmarks = data.poseWorldLandmarks || 'false';\n\n const dims = this.checkDimensions(data.width ? data.width : 0);\n this.showLogs(`DATA WIDTH ${data.width }`)\n this.showLogs(`WINDOW WIDTH HEIGHT ${dims.valid}`)\n if (dims.valid) {\n this.windowWidth = data.width!;\n this.windowHeight = dims.height;\n }\n\n this.buildUI();\n\n this.appMode === 4 ? this.initializeUnityWebGL() : this.playVideoMode(this.CHARACTER_POS_TEXT);\n }\n\n private async buildUI(): Promise<void> {\n /* ==========>> CONTAINER ELEMENT UI METHODS CALL <<============= */\n\n this.showLogs('BUILDING UI ============>')\n const characterContainer = await this.createCharacterChangeBtns();\n const crossButton = await this.createCrossButton();\n const versionContainer = await this.createVersionContainer();\n const miniBtn = await this.createMiniButton();\n const loader = await this.createLoader();\n const slider = await this.createSlider();\n\n const container = document.createElement('div');\n container.id = 'webgl_m_c';\n container.style.position = 'absolute';\n container.style.top = '50px';\n container.style.left = '50px';\n container.style.width = `${this.windowWidth}px`;\n container.style.height = `${this.windowHeight}px`;\n container.style.border = '1px solid #ccc';\n container.style.borderRadius = '5px';\n container.style.cursor = 'grab';\n container.style.display = 'flex';\n container.style.zIndex = '99999';\n container.style.background = '#fff';\n\n container.addEventListener('mouseover', () => this.toggleControls(true));\n container.addEventListener('mouseout', () => this.toggleControls(false));\n\n /* ==========>> CONTAINER UI <<============= */\n\n document.body.appendChild(container);\n document.body.appendChild(miniBtn);\n this.makeCanvasDraggable(container);\n \n /* ==========>> CONTAINER ELEMENT UI APPEND <<============= */\n\n container.append(characterContainer);\n container.append(crossButton);\n container.append(versionContainer);\n container.append(loader);\n container.append(slider);\n\n /* ----------------------*******---------------------- */\n this.showLogs(`MODE ============>${this.appMode}`)\n if (this.appMode === 3) {\n const video = document.createElement('video');\n video.id = 'signLanguagePlayer';\n video.style.width = `${this.windowWidth}px`;\n video.style.height = `${this.windowHeight}px`;\n video.style.borderRadius = '5px';\n video.style.objectFit = 'cover';\n video.muted = true;\n video.autoplay = true;\n video.loop = true;\n video.playsInline = true;\n container.appendChild(video);\n } else {\n const canvas = document.createElement('canvas');\n canvas.id = 'unityCanvas';\n canvas.style.width = `${this.windowWidth}px`;\n canvas.style.height = `${this.windowHeight}px`;\n canvas.style.borderRadius = '5px';\n canvas.style.display = 'none';\n container.appendChild(canvas);\n }\n }\n\n private initializeUnityWebGL(): void {\n const buildUrl = 'https://d1g156dmclqesu.cloudfront.net/vanilla/Build';\n const loaderUrl = `${buildUrl}/webglbuild.loader.js`;\n\n const config = {\n dataUrl: `${buildUrl}/webglbuild.data`,\n frameworkUrl: `${buildUrl}/webglbuild.framework.js`,\n codeUrl: `${buildUrl}/webglbuild.wasm`,\n streamingAssetsUrl: 'StreamingAssets',\n companyName: 'DeafTawk',\n productName: 'Translate',\n productVersion: '1.0.2',\n };\n\n const script = document.createElement('script');\n script.src = loaderUrl;\n script.onload = () => {\n //@ts-ignore\n createUnityInstance(document.getElementById('unityCanvas'), config, () => {}).then(instance => {\n this.unityInstance = instance;\n this.playPose({ text: this.CHARACTER_POS_TEXT });\n });\n };\n document.body.appendChild(script);\n }\n\n public playPose(data: PoseData, callback?: (message: string) => void, showLoader: boolean = true): void {\n this.showLogs(`PLSY PODR CALLED ============>`)\n if (!data.text || data.text === this.requestedText) {\n callback?.(\"No text provided to play pose\");\n return;\n }\n this.showLogs(`PLAYING POSE ============>${data.text}`)\n this.requestedText = data.text;\n callback ? this.unityCallback = callback : '';\n if(showLoader) this.toggleLoader(true);\n this.showLogs(`PLAYING POSE 1============>${data.text}`)\n if (data.language && ['en', 'da'].indexOf(data.language)> -1) {\n this.selectedLanguage = data.language;\n }\n\n this.showLogs(`PLAYING POSE 2============>this.appMode${this.appMode}`)\n if (this.appMode === 3) {\n this.playVideoMode(data.text);\n } else {\n this.showLogs(`INSIDE MODE 4 CHECING UNITY INSTANCE`)\n if (this.unityInstance) {\n const payload = {\n text: data.text,\n baseUrl: this.baseUrl,\n poseWorldLandmarks: this.poseWorldLandmarks,\n character: this.character,\n nextFrameTime: this.speed,\n apiKey: this.apiKey,\n backgroundColor: this.backgroundColor,\n characterClothColor: this.characterClothColor,\n language: this.selectedLanguage,\n };\n this.showLogs(`DATA FOR UNITY REQ ${JSON.stringify(payload)}`);\n this.unityInstance.SendMessage('NetworkManager', 'RecievePoseText', JSON.stringify(payload));\n } else {\n this.showLogs(`NO UNITY INSTANCE RETRYING...`)\n setTimeout(() => this.playPose(data, callback), 1000);\n }\n }\n }\n\n private async playVideoMode(text: string, showLoader: boolean = true) {\n const signed = this.selectedLanguage === 'en' ? 'ase' : 'dsl';\n if(showLoader) this.toggleLoader(true);\n const baseUrl = this.baseUrl;\n const url = `${baseUrl}/spoken_text_to_signed_pose?text=${encodeURIComponent(\n text\n )}&spoken=${this.selectedLanguage}&signed=${signed}&myown=3&character=${this.character}&apikey=${this.apiKey}`;\n\n try {\n const res = await fetch(url);\n const blob = await res.blob();\n const video = document.getElementById('signLanguagePlayer') as HTMLVideoElement;\n if (video) {\n video.src = URL.createObjectURL(blob);\n }\n this.toggleLoader(false);\n this.unityCallback?.('');\n } catch (err) {\n this.toggleLoader(false);\n console.error(err);\n this.unityCallback?.('');\n }\n }\n\n public showWindow(): void {\n const mainWindow = document.getElementById('webgl_m_c');\n const minibtn = document.getElementById('sw_btn');\n if (mainWindow) mainWindow.style.display = 'flex';\n if(minibtn) minibtn.style.display = 'none';\n }\n\n public hideWindow(): void {\n const mainWindow = document.getElementById('webgl_m_c');\n const minibtn = document.getElementById('sw_btn');\n if (mainWindow) mainWindow.style.display = 'none';\n if(minibtn) minibtn.style.display = 'flex';\n }\n\n private toggleControls(show: boolean) {\n const header = document.getElementById('webgl_header');\n const version = document.getElementById('versionContainer');\n const charContainer = document.getElementById('characterContainer');\n if (!header || !version || !charContainer) return;\n if (show) {\n header.style.display = 'flex';\n version.style.display = 'none';\n if (this.requestedText && this.enableCharacterChange) {\n charContainer.style.display = 'flex';\n }\n } else {\n header.style.display = 'none';\n version.style.display = 'flex';\n charContainer.style.display = 'none';\n }\n }\n\n public handleWebglError(error: string) {\n this.showLogs('ERROR RECIEVED FROM UNITY');\n if (typeof this.unityCallback === 'function') {\n this.unityCallback(error);\n }\n console.error('WEBGL-ERROR ----> ', error);\n }\n\n public onDataReceived(message: any) {\n this.showLogs('DATA RECIEVED FROM UNITY');\n this.toggleLoader(false);\n const unityCanvas = document.getElementById('unityCanvas') as HTMLElement;\n const loader = document.getElementById('webgl_loader');\n if(loader) loader.style.display = 'none';\n if (unityCanvas) {\n unityCanvas.style.display = 'flex';\n unityCanvas.style.cursor = 'grab';\n }\n const langDropdown = document.getElementById('webgl-lang-dd') as HTMLElement;\n if (langDropdown) {\n langDropdown.style.display = this.showLangDd ? 'block' : 'none';\n }\n if (!this.requestedText || this.requestedText === this.CHARACTER_POS_TEXT) return;\n const textContainer = document.getElementById('t_c_slider') as HTMLElement;\n if (textContainer) {\n textContainer.textContent = this.requestedText;\n }\n const slider = document.getElementById('webgl_slider') as HTMLElement;\n if (slider) {\n slider.style.display = 'flex';\n }\n if (typeof this.unityCallback === 'function') {\n this.unityCallback('');\n }\n const banner = document.getElementById('webgl_bnr') as HTMLElement;\n if (banner) {\n banner.style.display = 'none';\n }\n }\n\n\n private checkDimensions(width: number): { valid: boolean; height: number } {\n const minWidth = 275;\n const maxWidth = 500;\n const baseHeight = 155;\n const ratio = baseHeight / minWidth;\n if(width <= 0) {\n return { valid: false, height: baseHeight }\n }\n if (width < minWidth || width > maxWidth) return { valid: false, height: baseHeight };\n\n return { valid: true, height: Math.round(width * ratio) };\n }\n\n private createCharacterChangeBtns(){\n const characterContainer = document.createElement(\"div\");\n characterContainer.id = \"characterContainer\";\n characterContainer.style.position = \"absolute\";\n characterContainer.style.width = `${this.windowWidth}px`;\n characterContainer.style.textAlign = \"center\";\n characterContainer.style.display = \"none\";\n characterContainer.style.justifyContent = \"center\";\n characterContainer.style.top = \"40%\";\n \n const btnsParent = document.createElement(\"div\");\n btnsParent.style.width = `${this.windowWidth}px`;\n btnsParent.style.textAlign = \"center\";\n btnsParent.style.display = \"flex\";\n btnsParent.style.justifyContent = \"space-between\";\n\n const prevCharacter = document.createElement(\"div\");\n prevCharacter.className = \"round-btn\";\n prevCharacter.id = \"prevCharacter\";\n prevCharacter.textContent = \"◀\";\n prevCharacter.title = \"Previous character\";\n\n const nextCharacter = document.createElement(\"div\");\n nextCharacter.className = \"round-btn\";\n nextCharacter.id = \"nextCharacter\";\n nextCharacter.textContent = \"▶\";\n nextCharacter.title = \"Next character\";\n const roundButtonStyle = `\n width: 28px;\n height: 28px;\n border-radius: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid navajowhite;\n background-color: #d4dceb;\n font-size: 11px;\n color: gray;\n cursor: pointer;\n `;\n prevCharacter.style.cssText = roundButtonStyle;\n nextCharacter.style.cssText = roundButtonStyle;\n btnsParent.appendChild(prevCharacter);\n btnsParent.appendChild(nextCharacter);\n characterContainer.appendChild(btnsParent);\n nextCharacter.addEventListener(\"click\", ()=>{\n this.handleCharacterChange('next');\n });\n prevCharacter.addEventListener(\"click\", ()=>{\n this.handleCharacterChange('prev');\n });\n return characterContainer;\n }\n \n private handleCharacterChange(action: string){\n const data = {text: this.requestedText};\n switch (action) {\n case 'next':\n this.character = (this.character + 1) % this.totalCharacters\n this.requestedText = '';\n this.playPose(data);\n break;\n \n default:\n this.character = (this.character - 1 + this.totalCharacters) % this.totalCharacters;\n this.requestedText = '';\n this.playPose(data);\n break;\n }\n }\n\n private createCrossButton() {\n const div = document.createElement('div');\n div.id = 'webgl_header';\n div.style.position = 'absolute';\n div.style.width = \"24px\";\n div.style.height = \"24px\";\n div.style.display = \"none\";\n div.style.justifyContent = \"center\";\n div.style.alignItems = \"center\";\n div.style.right = '5px';\n div.style.cursor = 'pointer';\n const crossSymbol = document.createElement('span');\n crossSymbol.textContent = '×';\n crossSymbol.style.fontSize = '20px';\n crossSymbol.style.color = '#000';\n crossSymbol.style.userSelect = 'none';\n div.appendChild(crossSymbol);\n div.addEventListener('click', () => {\n this.handleWindowToggle();\n });\n return div;\n }\n\n private handleWindowToggle() {\n if(this.isWindowVisible) {\n this.isWindowVisible = false;\n this.hideWindow();\n this.toggleLoader(false);\n return;\n }\n this.isWindowVisible = true;\n this.showWindow();\n }\n\n private createVersionContainer() {\n const versionContainer = document.createElement('span');\n versionContainer.id = 'versionContainer';\n versionContainer.textContent = `V-${this.appVersion}`;\n versionContainer.style.display = \"flex\";\n versionContainer.style.position = \"absolute\";\n versionContainer.style.zIndex = \"9\";\n versionContainer.style.right = \"10px\";\n versionContainer.style.top = \"6px\";\n versionContainer.style.color = \"#d7d1d1\";\n versionContainer.style.fontSize = \"12px\";\n return versionContainer;\n }\n\n private makeCanvasDraggable(canvas: HTMLDivElement) {\n let offsetX: number, offsetY: number, isDragging: boolean = false;\n\n canvas.addEventListener('mousedown', (event) => {\n isDragging = true;\n offsetX = event.clientX - canvas.offsetLeft;\n offsetY = event.clientY - canvas.offsetTop;\n canvas.style.cursor = \"grabbing\";\n });\n\n document.addEventListener('mousemove', (event) => {\n if (isDragging) {\n canvas.style.left = event.clientX - offsetX + 'px';\n canvas.style.top = event.clientY - offsetY + 'px';\n }\n });\n\n document.addEventListener('mouseup', () => {\n isDragging = false;\n canvas.style.cursor = \"grab\";\n });\n }\n\n private createMiniButton() {\n const div = document.createElement('div');\n div.id = 'sw_btn';\n div.style.position = 'absolute';\n div.style.bottom = '5px';\n div.style.right = '5px';\n div.style.width = \"34px\";\n div.style.height = \"34px\";\n div.style.border = \"1px solid #cec6c6\";\n div.style.cursor = 'pointer';\n div.style.display = \"none\";\n div.style.justifyContent = \"center\";\n div.style.alignItems = \"center\";\n div.style.animation = 'bounce 3s infinite';\n div.style.backgroundColor='#aba3a3'\n div.style.borderRadius='50%'\n div.title='Show Translate window'\n const arrowUp = document.createElement('span');\n arrowUp.textContent = '↑';\n arrowUp.style.fontSize = '20px';\n arrowUp.style.color = '#000';\n arrowUp.style.userSelect = 'none';\n div.appendChild(arrowUp);\n div.addEventListener('click', () => {\n this.handleWindowToggle();\n });\n const style = document.createElement('style');\n style.textContent = `\n @keyframes bounce {\n 0%, 20%, 50%, 80%, 100% {\n transform: translateY(0);\n }\n 40% {\n transform: translateY(-10px);\n }\n 60% {\n transform: translateY(-5px);\n }\n }\n `;\n document.head.appendChild(style);\n return div;\n }\n\n private createLoader() {\n let loader = document.createElement('div');\n loader.id = 'webgl_loader';\n loader.style.position = 'absolute';\n loader.style.width = `${this.windowWidth}px`;\n loader.style.height = `${this.windowHeight}px`;\n loader.style.cursor = 'grab';\n loader.style.display = 'flex';\n loader.style.justifyContent = 'center';\n loader.style.alignItems = 'center';\n loader.style.zIndex = '1';\n let spinner = document.createElement('div');\n spinner.style.border = '4px solid #f3f3f3';\n spinner.style.borderTop = '4px solid #3498db';\n spinner.style.borderRadius = '50%';\n spinner.style.width = '28px';\n spinner.style.height = '28px';\n spinner.style.animation = 'spin 1s linear infinite';\n spinner.style.borderColor='#2a4b8d #2a4b8d rgb(255, 255, 255)'\n loader.appendChild(spinner);\n const styleSheet = document.createElement('style');\n styleSheet.type = 'text/css';\n styleSheet.innerText = `\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `;\n document.head.appendChild(styleSheet);\n return loader;\n }\n\n private createSlider() {\n const div = document.createElement('div');\n div.id = 'webgl_slider';\n Object.assign(div.style, {\n position: 'absolute',\n width: `${this.windowWidth-11}px`,\n height: \"24px\",\n display: \"none\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n overflow: 'hidden',\n padding: '3px 6px',\n backgroundColor: '#000',\n fontSize: '12px',\n textAlign: 'center',\n bottom: '-1px',\n borderBottomRightRadius: '5px',\n borderBottomLeftRadius: '5px',\n color: '#fff'\n });\n const text = document.createElement('span');\n text.id = \"t_c_slider\";\n text.textContent = '';\n Object.assign(text.style, {\n display: 'inline-block',\n whiteSpace: 'nowrap',\n position: 'relative',\n paddingLeft: '100%',\n animation: 'slideLeft linear infinite'\n });\n div.appendChild(text);\n const style = document.createElement('style');\n style.textContent = `\n @keyframes slideLeft {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100%);\n }\n }\n `;\n document.head.appendChild(style);\n const resizeObserver = new ResizeObserver(() => {\n this.updateSliderAnimation(div, text);\n });\n resizeObserver.observe(text);\n\n return div;\n }\n private updateSliderAnimation(container: HTMLDivElement, textElement: HTMLSpanElement, pixelsPerSecond: number = 50) {\n textElement.style.animation = 'none';\n void textElement.offsetWidth;\n const containerWidth = container.offsetWidth;\n const textWidth = textElement.scrollWidth;\n const distance = containerWidth + textWidth;\n const duration = distance / pixelsPerSecond;\n textElement.style.animation = `slideLeft ${duration}s linear infinite`;\n }\n private toggleLoader(show: boolean){\n const loader = document.getElementById('webgl_loader');\n if(!loader) return;\n if(show) {\n loader.style.display = 'flex';\n } else {\n loader.style.display = 'none';\n }\n }\n private createLanguageDropdown() {\n const style = document.createElement('style');\n style.textContent = `\n .dropdown-container {\n position: relative;\n width: 65px;\n font-family: sans-serif;\n font-size: 12px;\n top: 2px;\n left: 3px;\n display: none;\n }\n \n .dropdown-selected {\n padding: 3px;\n background: #f0f0f0;\n border: 1px solid #ccc;\n cursor: pointer;\n border-radius: 2px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: #424a9f;\n }\n \n .dropdown-list {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: white;\n border: 1px solid #ccc;\n height: 56px;\n max-height: 130px;\n overflow-y: auto;\n margin-top: 4px;\n border-radius: 6px;\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n z-index: 100;\n }\n \n .dropdown-item {\n padding: 6px;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n \n .dropdown-item:hover {\n background-color: #424a9f;\n color: #fff\n }\n \n .hidden {\n display: none;\n }\n \n .dropdown-list::-webkit-scrollbar {\n width: 6px;\n }\n \n .dropdown-list::-webkit-scrollbar-thumb {\n background-color: #888;\n border-radius: 3px;\n }\n \n .dropdown-list::-webkit-scrollbar-thumb:hover {\n background-color: #555;\n }\n `;\n document.head.appendChild(style);\n\n const container = document.createElement('div');\n container.className = 'dropdown-container';\n container.id = 'webgl-lang-dd'\n const selected = document.createElement('div');\n selected.className = 'dropdown-selected';\n selected.textContent = this.languages[0].toUpperCase();\n const list = document.createElement('div');\n list.className = 'dropdown-list hidden';\n \n this.languages.forEach(lang => {\n const item = document.createElement('div');\n item.className = 'dropdown-item';\n item.textContent = lang.toUpperCase();\n item.addEventListener('click', () => {\n selected.textContent = lang.toUpperCase();\n this.selectedLanguage = lang;\n list.classList.add('hidden');\n });\n list.appendChild(item);\n });\n \n selected.addEventListener('click', () => {\n list.classList.toggle('hidden');\n });\n \n container.appendChild(selected);\n container.appendChild(list);\n document.addEventListener('click', (e) => {\n const target = e.target as Node;\n if (container && !container.contains(target)) {\n list.classList.add('hidden');\n }\n });\n return container;\n }\n\n private showLogs(message: string) {\n if(!this.shouldShowLogs) return;\n console.log('DT ANGUALR SDK:', message);\n }\n\n \n}\n\nexport const Translate = new TranslateController();\n(window as any).onDataRecieved = (message: any) => {\n Translate.onDataReceived(message);\n};","import { Injectable } from '@angular/core';\nimport { TranslateController, Translate } from './translate-controller';\nimport type { InitData, PoseData } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslateService {\n private controller!: TranslateController;\n\n init(options: InitData) {\n this.controller = new TranslateController();\n this.controller.init(options);\n }\n\n playPose(data: PoseData, callback?: (message: string) => void) {\n this.controller?.playPose(data, callback);\n }\n\n showWindow(text: string) {\n this.controller?.showWindow();\n }\n\n hideWindow(text: string) {\n this.controller?.hideWindow();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TranslateService } from './translate.service';\n\n@NgModule({\n providers: [TranslateService]\n})\nexport class TranslateModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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