From 59e7dae678696c9b3aca6a21e52d98b448b4522b Mon Sep 17 00:00:00 2001
From: Benedikt Seeger <benedikt.seeger@ptb.de>
Date: Mon, 24 Feb 2025 08:09:25 +0100
Subject: [PATCH] changed to plain javaScript

---
 dcc-viewer/.idea/.gitignore                   |  8 -----
 dcc-viewer/.idea/dcc-viewer.iml               | 12 --------
 .../inspectionProfiles/Project_Default.xml    | 15 ----------
 dcc-viewer/.idea/modules.xml                  |  8 -----
 dcc-viewer/.idea/vcs.xml                      |  6 ----
 dcc-viewer/public/index.html                  |  4 +--
 dcc-viewer/src/components/BaseViewer.js       |  8 +++++
 dcc-viewer/src/components/BaseViewer.ts       |  7 -----
 .../{JSONTreeViewer.ts => JSONTreeViewer.js}  |  4 +--
 dcc-viewer/src/globalData.js                  |  1 +
 dcc-viewer/src/globalData.ts                  |  1 -
 .../{globalOptions.ts => globalOptions.js}    |  0
 dcc-viewer/src/idRegistry.js                  |  1 +
 dcc-viewer/src/idRegistry.ts                  |  1 -
 dcc-viewer/src/{main.ts => main.js}           | 12 ++++----
 dcc-viewer/src/ui/languageSelector.js         |  6 ++++
 dcc-viewer/src/ui/languageSelector.ts         |  6 ----
 .../ui/{themeSwitcher.ts => themeSwitcher.js} |  2 +-
 dcc-viewer/src/{utils.ts => utils.js}         |  2 +-
 dcc-viewer/src/viewerRegistry.js              |  5 ++++
 dcc-viewer/src/viewerRegistry.ts              |  5 ----
 dcc-viewer/src/{xmlToJson.ts => xmlToJson.js} |  2 +-
 dcc-viewer/tsconfig.json                      |  1 -
 files.json                                    | 27 -----------------
 project_structure.json                        | 29 +++++++++----------
 25 files changed, 48 insertions(+), 125 deletions(-)
 delete mode 100644 dcc-viewer/.idea/.gitignore
 delete mode 100644 dcc-viewer/.idea/dcc-viewer.iml
 delete mode 100644 dcc-viewer/.idea/inspectionProfiles/Project_Default.xml
 delete mode 100644 dcc-viewer/.idea/modules.xml
 delete mode 100644 dcc-viewer/.idea/vcs.xml
 create mode 100644 dcc-viewer/src/components/BaseViewer.js
 delete mode 100644 dcc-viewer/src/components/BaseViewer.ts
 rename dcc-viewer/src/components/{JSONTreeViewer.ts => JSONTreeViewer.js} (75%)
 create mode 100644 dcc-viewer/src/globalData.js
 delete mode 100644 dcc-viewer/src/globalData.ts
 rename dcc-viewer/src/{globalOptions.ts => globalOptions.js} (100%)
 create mode 100644 dcc-viewer/src/idRegistry.js
 delete mode 100644 dcc-viewer/src/idRegistry.ts
 rename dcc-viewer/src/{main.ts => main.js} (50%)
 create mode 100644 dcc-viewer/src/ui/languageSelector.js
 delete mode 100644 dcc-viewer/src/ui/languageSelector.ts
 rename dcc-viewer/src/ui/{themeSwitcher.ts => themeSwitcher.js} (54%)
 rename dcc-viewer/src/{utils.ts => utils.js} (58%)
 create mode 100644 dcc-viewer/src/viewerRegistry.js
 delete mode 100644 dcc-viewer/src/viewerRegistry.ts
 rename dcc-viewer/src/{xmlToJson.ts => xmlToJson.js} (64%)
 delete mode 100644 dcc-viewer/tsconfig.json
 delete mode 100644 files.json

diff --git a/dcc-viewer/.idea/.gitignore b/dcc-viewer/.idea/.gitignore
deleted file mode 100644
index 13566b8..0000000
--- a/dcc-viewer/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/dcc-viewer/.idea/dcc-viewer.iml b/dcc-viewer/.idea/dcc-viewer.iml
deleted file mode 100644
index 24643cc..0000000
--- a/dcc-viewer/.idea/dcc-viewer.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
-      <excludeFolder url="file://$MODULE_DIR$/temp" />
-      <excludeFolder url="file://$MODULE_DIR$/tmp" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml b/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index 798a81f..0000000
--- a/dcc-viewer/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<component name="InspectionProjectProfileManager">
-  <profile version="1.0">
-    <option name="myName" value="Project Default" />
-    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
-    <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
-      <option name="ignoredPackages">
-        <value>
-          <list size="1">
-            <item index="0" class="java.lang.String" itemvalue="bokeh" />
-          </list>
-        </value>
-      </option>
-    </inspection_tool>
-  </profile>
-</component>
\ No newline at end of file
diff --git a/dcc-viewer/.idea/modules.xml b/dcc-viewer/.idea/modules.xml
deleted file mode 100644
index 7342473..0000000
--- a/dcc-viewer/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/dcc-viewer.iml" filepath="$PROJECT_DIR$/.idea/dcc-viewer.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/dcc-viewer/.idea/vcs.xml b/dcc-viewer/.idea/vcs.xml
deleted file mode 100644
index 6c0b863..0000000
--- a/dcc-viewer/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/dcc-viewer/public/index.html b/dcc-viewer/public/index.html
index e363a2d..0c36cb1 100644
--- a/dcc-viewer/public/index.html
+++ b/dcc-viewer/public/index.html
@@ -3,8 +3,8 @@
 <head>
     <meta charset='UTF-8'>
     <title>DCC Viewer</title>
-    <script type='module' src='dist/main.js'></script>
-    <link rel='stylesheet' href='styles.css'>
+    <script type='module' src='/src/main.js'></script>
+    <link rel='stylesheet' href='/styles.css'>
 </head>
 <body>
     <input type='file' id='file-input' accept='.xml'>
diff --git a/dcc-viewer/src/components/BaseViewer.js b/dcc-viewer/src/components/BaseViewer.js
new file mode 100644
index 0000000..11d24a9
--- /dev/null
+++ b/dcc-viewer/src/components/BaseViewer.js
@@ -0,0 +1,8 @@
+export class BaseViewer {
+    constructor(sectionData) {
+        this.sectionData = sectionData;
+    }
+    render() {
+        throw new Error('render() must be implemented in subclasses');
+    }
+}
\ No newline at end of file
diff --git a/dcc-viewer/src/components/BaseViewer.ts b/dcc-viewer/src/components/BaseViewer.ts
deleted file mode 100644
index 9837734..0000000
--- a/dcc-viewer/src/components/BaseViewer.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export abstract class BaseViewer {
-    protected sectionData: any;
-    constructor(sectionData: any) {
-        this.sectionData = sectionData;
-    }
-    abstract render(): HTMLElement;
-}
\ No newline at end of file
diff --git a/dcc-viewer/src/components/JSONTreeViewer.ts b/dcc-viewer/src/components/JSONTreeViewer.js
similarity index 75%
rename from dcc-viewer/src/components/JSONTreeViewer.ts
rename to dcc-viewer/src/components/JSONTreeViewer.js
index ef06785..4fcd426 100644
--- a/dcc-viewer/src/components/JSONTreeViewer.ts
+++ b/dcc-viewer/src/components/JSONTreeViewer.js
@@ -1,7 +1,7 @@
-import { BaseViewer } from './BaseViewer';
+import { BaseViewer } from './BaseViewer.js';
 
 export class JSONTreeViewer extends BaseViewer {
-    render(): HTMLElement {
+    render() {
         const container = document.createElement('pre');
         container.textContent = JSON.stringify(this.sectionData, null, 2);
         return container;
diff --git a/dcc-viewer/src/globalData.js b/dcc-viewer/src/globalData.js
new file mode 100644
index 0000000..c15978e
--- /dev/null
+++ b/dcc-viewer/src/globalData.js
@@ -0,0 +1 @@
+export const globalData = {};
\ No newline at end of file
diff --git a/dcc-viewer/src/globalData.ts b/dcc-viewer/src/globalData.ts
deleted file mode 100644
index 8bc8fad..0000000
--- a/dcc-viewer/src/globalData.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const globalData: { [key: string]: any } = {};
\ No newline at end of file
diff --git a/dcc-viewer/src/globalOptions.ts b/dcc-viewer/src/globalOptions.js
similarity index 100%
rename from dcc-viewer/src/globalOptions.ts
rename to dcc-viewer/src/globalOptions.js
diff --git a/dcc-viewer/src/idRegistry.js b/dcc-viewer/src/idRegistry.js
new file mode 100644
index 0000000..d61c792
--- /dev/null
+++ b/dcc-viewer/src/idRegistry.js
@@ -0,0 +1 @@
+export const idRegistry = {};
\ No newline at end of file
diff --git a/dcc-viewer/src/idRegistry.ts b/dcc-viewer/src/idRegistry.ts
deleted file mode 100644
index e98ebab..0000000
--- a/dcc-viewer/src/idRegistry.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const idRegistry: { [id: string]: any } = {};
\ No newline at end of file
diff --git a/dcc-viewer/src/main.ts b/dcc-viewer/src/main.js
similarity index 50%
rename from dcc-viewer/src/main.ts
rename to dcc-viewer/src/main.js
index 76059c7..8b19e28 100644
--- a/dcc-viewer/src/main.ts
+++ b/dcc-viewer/src/main.js
@@ -1,16 +1,16 @@
-import { convertXMLToJSON } from './xmlToJson';
-import { JSONTreeViewer } from './components/JSONTreeViewer';
+import { convertXMLToJSON } from './xmlToJson.js';
+import { JSONTreeViewer } from './components/JSONTreeViewer.js';
 
-const fileInput = document.getElementById('file-input') as HTMLInputElement;
-const container = document.getElementById('json-container') as HTMLElement;
+const fileInput = document.getElementById('file-input');
+const container = document.getElementById('json-container');
 
 fileInput.addEventListener('change', async (event) => {
-    const file = (event.target as HTMLInputElement).files?.[0];
+    const file = event.target.files?.[0];
     if (!file) return;
 
     const reader = new FileReader();
     reader.onload = async () => {
-        const xmlString = reader.result as string;
+        const xmlString = reader.result;
         const jsonData = await convertXMLToJSON(xmlString);
         const viewer = new JSONTreeViewer(jsonData);
         container.innerHTML = '';
diff --git a/dcc-viewer/src/ui/languageSelector.js b/dcc-viewer/src/ui/languageSelector.js
new file mode 100644
index 0000000..98b697e
--- /dev/null
+++ b/dcc-viewer/src/ui/languageSelector.js
@@ -0,0 +1,6 @@
+import { globalOptions } from '../globalOptions.js';
+
+const languageSelect = document.getElementById('language-select');
+languageSelect.addEventListener('change', (event) => {
+    globalOptions.preferredLanguage = event.target.value;
+});
\ No newline at end of file
diff --git a/dcc-viewer/src/ui/languageSelector.ts b/dcc-viewer/src/ui/languageSelector.ts
deleted file mode 100644
index 0854c83..0000000
--- a/dcc-viewer/src/ui/languageSelector.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { globalOptions } from '../globalOptions';
-
-const languageSelect = document.getElementById('language-select') as HTMLSelectElement;
-languageSelect.addEventListener('change', (event) => {
-    globalOptions.preferredLanguage = (event.target as HTMLSelectElement).value;
-});
\ No newline at end of file
diff --git a/dcc-viewer/src/ui/themeSwitcher.ts b/dcc-viewer/src/ui/themeSwitcher.js
similarity index 54%
rename from dcc-viewer/src/ui/themeSwitcher.ts
rename to dcc-viewer/src/ui/themeSwitcher.js
index 931533f..2996ddc 100644
--- a/dcc-viewer/src/ui/themeSwitcher.ts
+++ b/dcc-viewer/src/ui/themeSwitcher.js
@@ -1,4 +1,4 @@
-const themeToggle = document.getElementById('theme-toggle') as HTMLButtonElement;
+const themeToggle = document.getElementById('theme-toggle');
 themeToggle.addEventListener('click', () => {
     document.body.classList.toggle('dark-mode');
 });
\ No newline at end of file
diff --git a/dcc-viewer/src/utils.ts b/dcc-viewer/src/utils.js
similarity index 58%
rename from dcc-viewer/src/utils.ts
rename to dcc-viewer/src/utils.js
index fb95467..aaaf614 100644
--- a/dcc-viewer/src/utils.ts
+++ b/dcc-viewer/src/utils.js
@@ -1,4 +1,4 @@
-export function getLocalizedText(elements: any[]): string {
+export function getLocalizedText(elements) {
     if (!Array.isArray(elements)) return elements;
     return elements[0]._ || '';
 }
\ No newline at end of file
diff --git a/dcc-viewer/src/viewerRegistry.js b/dcc-viewer/src/viewerRegistry.js
new file mode 100644
index 0000000..8de1bf6
--- /dev/null
+++ b/dcc-viewer/src/viewerRegistry.js
@@ -0,0 +1,5 @@
+import { JSONTreeViewer } from './components/JSONTreeViewer.js';
+
+export function getViewerForElement() {
+    return JSONTreeViewer;
+}
\ No newline at end of file
diff --git a/dcc-viewer/src/viewerRegistry.ts b/dcc-viewer/src/viewerRegistry.ts
deleted file mode 100644
index 6e6b15a..0000000
--- a/dcc-viewer/src/viewerRegistry.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { JSONTreeViewer } from './components/JSONTreeViewer';
-
-export function getViewerForElement(): any {
-    return JSONTreeViewer;
-}
\ No newline at end of file
diff --git a/dcc-viewer/src/xmlToJson.ts b/dcc-viewer/src/xmlToJson.js
similarity index 64%
rename from dcc-viewer/src/xmlToJson.ts
rename to dcc-viewer/src/xmlToJson.js
index 03506aa..b308fc3 100644
--- a/dcc-viewer/src/xmlToJson.ts
+++ b/dcc-viewer/src/xmlToJson.js
@@ -1,5 +1,5 @@
 import { parseStringPromise } from 'xml2js';
 
-export async function convertXMLToJSON(xmlString: string): Promise<any> {
+export async function convertXMLToJSON(xmlString) {
     return parseStringPromise(xmlString, { explicitArray: false, mergeAttrs: true });
 }
\ No newline at end of file
diff --git a/dcc-viewer/tsconfig.json b/dcc-viewer/tsconfig.json
deleted file mode 100644
index ff383c8..0000000
--- a/dcc-viewer/tsconfig.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "compilerOptions": { "target": "ES6", "module": "ES6", "outDir": "dist" } }
\ No newline at end of file
diff --git a/files.json b/files.json
deleted file mode 100644
index 854fa90..0000000
--- a/files.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "dcc-viewer": {
-    "src": {
-      "main.ts": "import { convertXMLToJSON } from './xmlToJson';\nimport { JSONTreeViewer } from './components/JSONTreeViewer';\n\nconst fileInput = document.getElementById('file-input') as HTMLInputElement;\nconst container = document.getElementById('json-container') as HTMLElement;\n\nfileInput.addEventListener('change', async (event) => {\n    const file = (event.target as HTMLInputElement).files?.[0];\n    if (!file) return;\n\n    const reader = new FileReader();\n    reader.onload = async () => {\n        const xmlString = reader.result as string;\n        const jsonData = await convertXMLToJSON(xmlString);\n        const viewer = new JSONTreeViewer(jsonData);\n        container.innerHTML = '';\n        container.appendChild(viewer.render());\n    };\n    reader.readAsText(file);\n});",
-      "xmlToJson.ts": "import { parseStringPromise } from 'xml2js';\n\nexport async function convertXMLToJSON(xmlString: string): Promise<any> {\n    return parseStringPromise(xmlString, { explicitArray: false, mergeAttrs: true });\n}",
-      "idRegistry.ts": "export const idRegistry: { [id: string]: any } = {};",
-      "globalData.ts": "export const globalData: { [key: string]: any } = {};",
-      "globalOptions.ts": "export const globalOptions = { preferredLanguage: 'en' };",
-      "viewerRegistry.ts": "import { JSONTreeViewer } from './components/JSONTreeViewer';\n\nexport function getViewerForElement(): any {\n    return JSONTreeViewer;\n}",
-      "utils.ts": "export function getLocalizedText(elements: any[]): string {\n    if (!Array.isArray(elements)) return elements;\n    return elements[0]._ || '';\n}",
-      "components": {
-        "BaseViewer.ts": "export abstract class BaseViewer {\n    protected sectionData: any;\n    constructor(sectionData: any) {\n        this.sectionData = sectionData;\n    }\n    abstract render(): HTMLElement;\n}",
-        "JSONTreeViewer.ts": "import { BaseViewer } from './BaseViewer';\n\nexport class JSONTreeViewer extends BaseViewer {\n    render(): HTMLElement {\n        const container = document.createElement('pre');\n        container.textContent = JSON.stringify(this.sectionData, null, 2);\n        return container;\n    }\n}"
-      },
-      "ui": {
-        "languageSelector.ts": "import { globalOptions } from '../globalOptions';\n\nconst languageSelect = document.getElementById('language-select') as HTMLSelectElement;\nlanguageSelect.addEventListener('change', (event) => {\n    globalOptions.preferredLanguage = (event.target as HTMLSelectElement).value;\n});",
-        "themeSwitcher.ts": "const themeToggle = document.getElementById('theme-toggle') as HTMLButtonElement;\nthemeToggle.addEventListener('click', () => {\n    document.body.classList.toggle('dark-mode');\n});"
-      }
-    },
-    "public": {
-      "index.html": "<!DOCTYPE html>\n<html lang='en'>\n<head>\n    <meta charset='UTF-8'>\n    <title>DCC Viewer</title>\n    <script type='module' src='dist/main.js'></script>\n    <link rel='stylesheet' href='styles.css'>\n</head>\n<body>\n    <input type='file' id='file-input' accept='.xml'>\n    <button id='theme-toggle'>Toggle Theme</button>\n    <select id='language-select'>\n        <option value='en'>English</option>\n        <option value='de'>German</option>\n    </select>\n    <div id='json-container'></div>\n</body>\n</html>",
-      "styles.css": "body { font-family: Arial, sans-serif; }\n.dark-mode { background-color: black; color: white; }"
-    },
-    "package.json": "{\n    \"name\": \"dcc-viewer\",\n    \"version\": \"1.0.0\",\n    \"scripts\": { \"dev\": \"vite\" },\n    \"dependencies\": { \"xml2js\": \"^0.4.23\" }\n}",
-    "tsconfig.json": "{ \"compilerOptions\": { \"target\": \"ES6\", \"module\": \"ES6\", \"outDir\": \"dist\" } }",
-   }
-}
diff --git a/project_structure.json b/project_structure.json
index ec74642..a567036 100644
--- a/project_structure.json
+++ b/project_structure.json
@@ -1,27 +1,26 @@
 {
   "dcc-viewer": {
     "src": {
-      "main.ts": "import { convertXMLToJSON } from './xmlToJson';\nimport { JSONTreeViewer } from './components/JSONTreeViewer';\n\nconst fileInput = document.getElementById('file-input') as HTMLInputElement;\nconst container = document.getElementById('json-container') as HTMLElement;\n\nfileInput.addEventListener('change', async (event) => {\n    const file = (event.target as HTMLInputElement).files?.[0];\n    if (!file) return;\n\n    const reader = new FileReader();\n    reader.onload = async () => {\n        const xmlString = reader.result as string;\n        const jsonData = await convertXMLToJSON(xmlString);\n        const viewer = new JSONTreeViewer(jsonData);\n        container.innerHTML = '';\n        container.appendChild(viewer.render());\n    };\n    reader.readAsText(file);\n});",
-      "xmlToJson.ts": "import { parseStringPromise } from 'xml2js';\n\nexport async function convertXMLToJSON(xmlString: string): Promise<any> {\n    return parseStringPromise(xmlString, { explicitArray: false, mergeAttrs: true });\n}",
-      "idRegistry.ts": "export const idRegistry: { [id: string]: any } = {};",
-      "globalData.ts": "export const globalData: { [key: string]: any } = {};",
-      "globalOptions.ts": "export const globalOptions = { preferredLanguage: 'en' };",
-      "viewerRegistry.ts": "import { JSONTreeViewer } from './components/JSONTreeViewer';\n\nexport function getViewerForElement(): any {\n    return JSONTreeViewer;\n}",
-      "utils.ts": "export function getLocalizedText(elements: any[]): string {\n    if (!Array.isArray(elements)) return elements;\n    return elements[0]._ || '';\n}",
+      "main.js": "import { convertXMLToJSON } from './xmlToJson.js';\nimport { JSONTreeViewer } from './components/JSONTreeViewer.js';\n\nconst fileInput = document.getElementById('file-input');\nconst container = document.getElementById('json-container');\n\nfileInput.addEventListener('change', async (event) => {\n    const file = event.target.files?.[0];\n    if (!file) return;\n\n    const reader = new FileReader();\n    reader.onload = async () => {\n        const xmlString = reader.result;\n        const jsonData = await convertXMLToJSON(xmlString);\n        const viewer = new JSONTreeViewer(jsonData);\n        container.innerHTML = '';\n        container.appendChild(viewer.render());\n    };\n    reader.readAsText(file);\n});",
+      "xmlToJson.js": "import { parseStringPromise } from 'xml2js';\n\nexport async function convertXMLToJSON(xmlString) {\n    return parseStringPromise(xmlString, { explicitArray: false, mergeAttrs: true });\n}",
+      "idRegistry.js": "export const idRegistry = {};",
+      "globalData.js": "export const globalData = {};",
+      "globalOptions.js": "export const globalOptions = { preferredLanguage: 'en' };",
+      "viewerRegistry.js": "import { JSONTreeViewer } from './components/JSONTreeViewer.js';\n\nexport function getViewerForElement() {\n    return JSONTreeViewer;\n}",
+      "utils.js": "export function getLocalizedText(elements) {\n    if (!Array.isArray(elements)) return elements;\n    return elements[0]._ || '';\n}",
       "components": {
-        "BaseViewer.ts": "export abstract class BaseViewer {\n    protected sectionData: any;\n    constructor(sectionData: any) {\n        this.sectionData = sectionData;\n    }\n    abstract render(): HTMLElement;\n}",
-        "JSONTreeViewer.ts": "import { BaseViewer } from './BaseViewer';\n\nexport class JSONTreeViewer extends BaseViewer {\n    render(): HTMLElement {\n        const container = document.createElement('pre');\n        container.textContent = JSON.stringify(this.sectionData, null, 2);\n        return container;\n    }\n}"
+        "BaseViewer.js": "export class BaseViewer {\n    constructor(sectionData) {\n        this.sectionData = sectionData;\n    }\n    render() {\n        throw new Error('render() must be implemented in subclasses');\n    }\n}",
+        "JSONTreeViewer.js": "import { BaseViewer } from './BaseViewer.js';\n\nexport class JSONTreeViewer extends BaseViewer {\n    render() {\n        const container = document.createElement('pre');\n        container.textContent = JSON.stringify(this.sectionData, null, 2);\n        return container;\n    }\n}"
       },
       "ui": {
-        "languageSelector.ts": "import { globalOptions } from '../globalOptions';\n\nconst languageSelect = document.getElementById('language-select') as HTMLSelectElement;\nlanguageSelect.addEventListener('change', (event) => {\n    globalOptions.preferredLanguage = (event.target as HTMLSelectElement).value;\n});",
-        "themeSwitcher.ts": "const themeToggle = document.getElementById('theme-toggle') as HTMLButtonElement;\nthemeToggle.addEventListener('click', () => {\n    document.body.classList.toggle('dark-mode');\n});"
+        "languageSelector.js": "import { globalOptions } from '../globalOptions.js';\n\nconst languageSelect = document.getElementById('language-select');\nlanguageSelect.addEventListener('change', (event) => {\n    globalOptions.preferredLanguage = event.target.value;\n});",
+        "themeSwitcher.js": "const themeToggle = document.getElementById('theme-toggle');\nthemeToggle.addEventListener('click', () => {\n    document.body.classList.toggle('dark-mode');\n});"
       }
     },
     "public": {
-      "index.html": "<!DOCTYPE html>\n<html lang='en'>\n<head>\n    <meta charset='UTF-8'>\n    <title>DCC Viewer</title>\n    <script type='module' src='dist/main.js'></script>\n    <link rel='stylesheet' href='styles.css'>\n</head>\n<body>\n    <input type='file' id='file-input' accept='.xml'>\n    <button id='theme-toggle'>Toggle Theme</button>\n    <select id='language-select'>\n        <option value='en'>English</option>\n        <option value='de'>German</option>\n    </select>\n    <div id='json-container'></div>\n</body>\n</html>",
+      "index.html": "<!DOCTYPE html>\n<html lang='en'>\n<head>\n    <meta charset='UTF-8'>\n    <title>DCC Viewer</title>\n    <script type='module' src='/src/main.js'></script>\n    <link rel='stylesheet' href='/styles.css'>\n</head>\n<body>\n    <input type='file' id='file-input' accept='.xml'>\n    <button id='theme-toggle'>Toggle Theme</button>\n    <select id='language-select'>\n        <option value='en'>English</option>\n        <option value='de'>German</option>\n    </select>\n    <div id='json-container'></div>\n</body>\n</html>",
       "styles.css": "body { font-family: Arial, sans-serif; }\n.dark-mode { background-color: black; color: white; }"
     },
-    "package.json": "{\n    \"name\": \"dcc-viewer\",\n    \"version\": \"1.0.0\",\n    \"scripts\": { \"dev\": \"vite\" },\n    \"dependencies\": { \"xml2js\": \"^0.4.23\" }\n}",
-    "tsconfig.json": "{ \"compilerOptions\": { \"target\": \"ES6\", \"module\": \"ES6\", \"outDir\": \"dist\" } }"
-   }
+    "package.json": "{\n    \"name\": \"dcc-viewer\",\n    \"version\": \"1.0.0\",\n    \"scripts\": { \"dev\": \"vite\" },\n    \"dependencies\": { \"xml2js\": \"^0.4.23\" }\n}"
+  }
 }
-- 
GitLab