{"version":3,"file":"index-oCUQlvLH.js","sources":["../../Assets/Scripts/components/transpose/transposeUI/index.ts","../../Assets/Scripts/components/transpose/index.ts"],"sourcesContent":["import { Transpose, IGenerationOption } from '@lcp/transpose';\nimport { TransposeConfig, TransposeElements, SelectConfig } from '../models/elementConfig';\nimport UIState from '../models/uiState';\nimport UIElements from '../models/uiElements';\n\ninterface ITransposeUI {\n initialize(): void;\n}\n\ninterface ITransposeUIFactory {\n create(config: TransposeConfig): ITransposeUI;\n}\n\nclass TransposeUIImpl implements ITransposeUI {\n private options: IGenerationOption[];\n private defaultOptions: IGenerationOption[]\n private elements: UIElements;\n private state: UIState;\n private transpose: Transpose;\n private fileId: string;\n\n constructor(config: TransposeConfig) {\n this.options = config.options;\n this.defaultOptions = config.defaultOptions;\n this.transpose = config.transpose;\n this.fileId = config.fileId;\n\n const defaultGenerationType = config.defaultOptions[0].generationType;\n const defaultOption = config.defaultOptions.length == 1 ? this.options[this.getDefaultOptionIndex(defaultGenerationType)] || {} : this.options[this.getDefaultOptionIndex('Video')] || {};\n\n this.elements = this.initializeElements(config.elements);\n this.state = {\n type: defaultOption.generationType || 'Video',\n detail: defaultOption.contentDetail || '',\n language: defaultOption.language || ''\n };\n }\n\n private initializeElements(elements?: TransposeElements): UIElements {\n return {\n toggle: elements?.toggle || document.querySelector('#tsTypeToggle'),\n contentSelect: this.initializeSelect(\n elements?.contentSelect || {},\n {\n parent: elements?.contentSelect?.parent || document.querySelector('#groupContentDetail'),\n className: 'ts-selector__select',\n id: 'contentDetail',\n optionClassName: 'ts-selector__option',\n defaultValue: '',\n placeholder: 'Select style...'\n }\n ),\n languageSelect: this.initializeSelect(\n elements?.languageSelect || {},\n {\n parent: elements?.languageSelect?.parent || document.querySelector('#groupLanguage'),\n className: 'ts-selector__select',\n id: 'language',\n optionClassName: 'ts-selector__option',\n defaultValue: '',\n placeholder: 'Select language...'\n }\n ),\n modal: elements?.modal || document.querySelector('.ts-modal')\n };\n }\n\n private initializeSelect(config: SelectConfig, defaults: SelectConfig): HTMLSelectElement {\n if (config.element) return config.element;\n\n const select = this.createElement('select',\n config.className || defaults.className || null,\n { id: config.id || defaults.id || '' }\n );\n\n const option = this.createElement('option',\n config.optionClassName || defaults.optionClassName || null,\n { value: config.defaultValue || defaults.defaultValue || '' }\n );\n\n option.textContent = config.placeholder || defaults.placeholder || null;\n select.appendChild(option);\n const firstChild = (config.parent || defaults.parent)?.childNodes[1];\n firstChild?.parentNode?.insertBefore(select, firstChild.nextSibling);\n\n return select;\n }\n\n // initializes the UI elements and event listeners\n public initialize(): void {\n this.checkToggleVisibility();\n this.setupEventListeners();\n this.populateOptions();\n this.updateLanguageOptions();\n this.options.length === 1 && document.querySelector('.ts-controls')?.classList.add('ts-hidden');\n this.updateIframe();\n }\n\n // creates elements with classes and attributes\n private createElement(\n tag: string,\n classNames: string | string[] | null,\n attributes: Record = {}\n ): T {\n const element = document.createElement(tag) as T;\n\n if (classNames) {\n Array.isArray(classNames)\n ? element.classList.add(...classNames)\n : element.classList.add(classNames);\n }\n\n Object.entries(attributes).forEach(([key, value]) => element.setAttribute(key, value));\n\n return element;\n }\n\n // sets up event listeners for the UI elements\n private setupEventListeners(): void {\n const events = {\n toggle: (): void => {\n this.state.type = this.elements.toggle?.checked ? 'Podcast' : 'Video';\n const defaultOptionPodcast = this.options[this.getDefaultOptionIndex('Podcast')] || {};\n const defaultOptionVideo = this.options[this.getDefaultOptionIndex('Video')] || {};\n switch (this.state.type) {\n case \"Video\":\n this.state = {\n type: 'Video',\n detail: defaultOptionVideo.contentDetail || '',\n language: defaultOptionVideo.language || ''\n };\n break;\n default:\n this.state = {\n type: 'Podcast',\n detail: defaultOptionPodcast.contentDetail || '',\n language: defaultOptionPodcast.language || ''\n };\n break;\n }\n this.populateOptions();\n this.updateIframe();\n },\n contentSelect: (): void => {\n this.state.detail = this.elements.contentSelect.value as IGenerationOption['contentDetail'] | '';\n this.updateLanguageOptions();\n this.updateIframe();\n },\n languageSelect: (): void => {\n this.state.language = this.elements.languageSelect.value as IGenerationOption['language'] | '';\n if (this.elements.languageSelect.length > 2) {\n document.querySelector('.ts-controls__label')?.classList.remove('ts-hidden');\n }\n this.updateContentOptions();\n this.updateIframe();\n }\n };\n\n this.elements.toggle?.addEventListener('change', events.toggle);\n this.elements.contentSelect.addEventListener('change', events.contentSelect);\n this.elements.languageSelect.addEventListener('change', events.languageSelect);\n\n document.querySelector('.ts-modal__close')?.addEventListener('click', () => this.closeModal());\n document.querySelector('#transposeApp')?.addEventListener('click', (e: MouseEvent) => e.target === e.currentTarget && this.closeModal());\n }\n\n // hides the toggle if there is only one type of generation option\n private checkToggleVisibility(): void {\n const uniqueTypes = new Set(this.options.map(opt => opt.generationType));\n\n this.elements.toggle?.closest('.ts-toggle')?.classList.toggle('ts-hidden', uniqueTypes.size === 1);\n }\n\n // populates the content and language select elements with unique values\n private populateOptions(): void {\n const filtered = this.options.filter(opt => opt.generationType === this.state.type);\n const getUniqueValues = (key: K): IGenerationOption[K][] => [...new Set(filtered.map(opt => opt[key]))];\n const clearSelectOptions = (select: HTMLSelectElement): void => {\n const childNodes = Array.from(select.childNodes);\n childNodes.slice(1).forEach(node => {\n if (node.parentNode === select) {\n select.removeChild(node);\n }\n });\n };\n\n [this.elements.contentSelect, this.elements.languageSelect].forEach(clearSelectOptions)\n\n this.populateSelect(this.elements.contentSelect, getUniqueValues('contentDetail'));\n this.populateSelect(this.elements.languageSelect, getUniqueValues('language'));\n\n const selectValuePairs: Array<[HTMLSelectElement, string]> = [\n [this.elements.contentSelect, this.state.detail],\n [this.elements.languageSelect, this.state.language]\n ];\n\n selectValuePairs.forEach(([select, value]) => {\n const option = Array.from(select.options).find(opt => opt.value === value);\n option?.setAttribute('selected', 'true');\n });\n }\n\n // returns the options that match the default options\n private getDefaultOptionIndex(generationType?: 'Video' | 'Podcast'): number {\n return this.options.findIndex(option =>\n this.defaultOptions.some(defaultOption =>\n option.generationType === defaultOption.generationType &&\n option.contentDetail === defaultOption.contentDetail &&\n option.language === defaultOption.language\n ) && (!generationType || option.generationType === generationType)\n );\n }\n\n // updates the content select options based on the selected language\n private updateContentOptions(): void {\n const filtered = this.options.filter(opt => opt.generationType === this.state.type &&\n (!this.state.language || opt.language === this.state.language)\n );\n\n this.updateSelectOptions(this.elements.contentSelect,\n [...new Set(filtered.map(opt => opt.contentDetail))]);\n }\n\n // updates the language select options based on the selected content\n private updateLanguageOptions(): void {\n const filtered = this.options.filter(opt => opt.generationType === this.state.type &&\n (!this.state.detail || opt.contentDetail === this.state.detail)\n );\n\n this.updateSelectOptions(this.elements.languageSelect,\n [...new Set(filtered.map(opt => opt.language))]);\n }\n\n // populates the select element with options\n private populateSelect(select: HTMLSelectElement, options: T[]): void {\n options.forEach(option => {\n const opt = this.createElement('option', null, { value: option });\n opt.textContent = option;\n select.appendChild(opt);\n });\n }\n\n // disables options that are not available\n private updateSelectOptions(select: HTMLSelectElement, availableOptions: string[]): void {\n Array.from(select.options)\n .filter(option => option.value)\n .forEach(option => option.disabled = !availableOptions.includes(option.value));\n }\n\n // resets the select elements to their default values - no longer needed: to delete\n private resetSelections(): void {\n ['contentSelect', 'languageSelect'].forEach(key => {\n (this.elements[key as keyof Pick]).value = '';\n this.state[key.replace('Select', '') as keyof Pick] = '';\n });\n }\n\n // updates the iframe with the selected options\n private updateIframe(): void {\n const { type, detail, language } = this.state;\n const matchingOption = this.options.find(opt =>\n opt.generationType === type &&\n opt.contentDetail === detail &&\n opt.language === language\n );\n\n if (detail && language && matchingOption?.generationOptionId) {\n this.transpose.createIframe('modelContent', this.fileId, matchingOption.generationOptionId);\n }\n }\n\n // closes the modal and resets the selections\n private closeModal(): void {\n this.elements.modal?.classList.remove('ts-modal--visible');\n document.querySelector('.transpose')?.remove();\n document.querySelectorAll('.ts-selector__select').forEach(select => select.remove());\n this.resetSelections();\n }\n}\n\n// factory function to create an instance of TransposeUI\nexport const TransposeUI: ITransposeUIFactory = {\n create(config: TransposeConfig): ITransposeUI {\n return new TransposeUIImpl(config);\n }\n};\n","import { IGenerationOption, Transpose } from '@lcp/transpose';\nimport { TransposeUI } from './transposeUI';\nimport { TransposeConfig } from './models/elementConfig';\n\nexport default () => {\n const app = document.querySelector('#transposeApp');\n const clientId = app?.dataset.clientId as string;\n const fileId = app?.dataset.fileId as string;\n const apiKey = app?.dataset.apiKey as string;\n const base64String = app?.dataset.defaultOptions || '';\n const jsonString = atob(base64String);\n\n // Parse the JSON string into an array of IGenerationOption objects\n const defaultOptions: IGenerationOption[] = JSON.parse(jsonString);\n\n // Initialize Transpose\n Transpose.initialise({\n clientId,\n apiKey,\n }).then(async (transpose) => {\n // call transpose API and get generation options\n const fileOptions: IGenerationOption[] = await transpose.fetchFileOptions(fileId);\n\n // optional configuration - elements object can be omitted\n const config: TransposeConfig = {\n options: fileOptions,\n transpose,\n fileId,\n defaultOptions\n /* defaults\n elements: {\n contentSelect: { \n parent: undefined\n },\n languageSelect: {\n parent: undefined\n }\n }*/\n };\n\n // show the button and allow modal to be opened\n const button = document.querySelector('#openModal');\n button?.classList.remove('ts-button--hidden');\n document.querySelector('#openModal')?.addEventListener('click', () => {\n document.querySelector('.ts-modal')?.classList.add('ts-modal--visible');\n document.querySelector('#tsTypeToggle')!.checked = false;\n // create the UI\n const ui = TransposeUI.create(config);\n ui.initialize();\n });\n\n }).catch((error) => {\n console.warn(error.message);\n });\n};\n"],"names":["TransposeUIImpl","config","__publicField","defaultGenerationType","defaultOption","elements","_a","_b","defaults","select","option","firstChild","tag","classNames","attributes","element","key","value","events","defaultOptionPodcast","defaultOptionVideo","_c","e","uniqueTypes","opt","filtered","getUniqueValues","clearSelectOptions","node","generationType","options","availableOptions","type","detail","language","matchingOption","TransposeUI","index","app","clientId","fileId","apiKey","base64String","jsonString","defaultOptions","Transpose","transpose","button","error"],"mappings":"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"}