diff --git a/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php
new file mode 100644
index 000000000..e914ee1a2
--- /dev/null
+++ b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php
@@ -0,0 +1,30 @@
+jsonRequest(
+ 'POST',
+ '/api/plugin/system/psc/xmlcalc/product/design',
+ [
+ 'product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f',
+ 'jsonProduct' => '[{"uuid":"df2df718-b28e-482d-bf0c-67d246f05d32","name":"Test Artikel","options":[{"id":"auflage","name":"Auflage","default":"100","dependencys":[],"placeHolder":"Placeholder","required":false,"type":2},{"id":"seiten_umschlag","name":"Seiten Umschlag","default":"2","dependencys":[],"placeHolder":"Placeholder","required":false,"type":2},{"id":"seiten_anzahl_inhalt","name":"Seiten Anzahl Inhalt","default":"10","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*0.12","price":0,"value":"1-10","dependencys":[{"relation":"seiten_umschlag","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.24","price":0,"value":"1-2","dependencys":[]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.23","price":0,"value":"3-","dependencys":[]}]}]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*0.11","price":0,"value":"11-","dependencys":[{"relation":"seiten_umschlag","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.21","price":0,"value":"1-2","dependencys":[]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.20","price":0,"value":"3-","dependencys":[]}]}]}]}],"placeHolder":"Placeholder","required":true,"type":2},{"id":"farbigkeit","name":"Farbigkeit","default":"10","dependencys":[],"type":3,"options":[{"id":"10","name":"1\/0 farbig","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"","price":0,"value":"1-101","dependencys":[]}]}]},{"id":"11","name":"1\/1 farbig","dependencys":[]},{"id":"20","name":"2\/0 farbig","dependencys":[]},{"id":"21","name":"2\/1 farbig","dependencys":[]},{"id":"22","name":"2\/2 farbig","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"","price":0,"value":"11-50","dependencys":[]}]}]}],"mode":"normal"},{"id":"calc","name":"calc","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*$Vseiten_anzahl_inhalt$V","price":0,"value":"1-","dependencys":[]}]}],"type":1}]}]',
+ ],
+ [],
+ );
+ $this->assertResponseIsSuccessful();
+
+ self::assertJson($client->getResponse()->getContent());
+ }
+}
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock
index 46c76c19f..9fab97cc8 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock
@@ -21,6 +21,8 @@
"vue": "^3.5.13",
"vue-codemirror": "^6.1.1",
"vue-draggable-plus": "^0.6.0",
+ "vue-i18n": "^11.1.9",
+ "xml-beautify": "^1.2.3",
},
"devDependencies": {
"@types/node": "^24.0.1",
@@ -176,6 +178,12 @@
"@internationalized/number": ["@internationalized/number@3.6.3", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw=="],
+ "@intlify/core-base": ["@intlify/core-base@11.1.9", "", { "dependencies": { "@intlify/message-compiler": "11.1.9", "@intlify/shared": "11.1.9" } }, "sha512-Lrdi4wp3XnGhWmB/mMD/XtfGUw1Jt+PGpZI/M63X1ZqhTDjNHRVCs/i8vv8U1cwaj1A9fb0bkCQHLSL0SK+pIQ=="],
+
+ "@intlify/message-compiler": ["@intlify/message-compiler@11.1.9", "", { "dependencies": { "@intlify/shared": "11.1.9", "source-map-js": "^1.0.2" } }, "sha512-84SNs3Ikjg0rD1bOuchzb3iK1vR2/8nxrkyccIl5DjFTeMzE/Fxv6X+A7RN5ZXjEWelc1p5D4kHA6HEOhlKL5Q=="],
+
+ "@intlify/shared": ["@intlify/shared@11.1.9", "", {}, "sha512-H/83xgU1l8ox+qG305p6ucmoy93qyjIPnvxGWRA7YdOoHe1tIiW9IlEu4lTdsOR7cfP1ecrwyflQSqXdXBacXA=="],
+
"@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="],
@@ -610,12 +618,16 @@
"vue-draggable-plus": ["vue-draggable-plus@0.6.0", "", { "dependencies": { "@types/sortablejs": "^1.15.8" } }, "sha512-G5TSfHrt9tX9EjdG49InoFJbt2NYk0h3kgjgKxkFWr3ulIUays0oFObr5KZ8qzD4+QnhtALiRwIqY6qul4egqw=="],
+ "vue-i18n": ["vue-i18n@11.1.9", "", { "dependencies": { "@intlify/core-base": "11.1.9", "@intlify/shared": "11.1.9", "@vue/devtools-api": "^6.5.0" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-N9ZTsXdRmX38AwS9F6Rh93RtPkvZTkSy/zNv63FTIwZCUbLwwrpqlKz9YQuzFLdlvRdZTnWAUE5jMxr8exdl7g=="],
+
"vue-tsc": ["vue-tsc@2.2.10", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.10" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ=="],
"w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="],
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
+ "xml-beautify": ["xml-beautify@1.2.3", "", {}, "sha512-VsYpkqoVawIP84pi00XukPsgQHqOhgrpwTHlXqqRMAgYZ1u+Yw3KHIUhO1Igf19d5CQ5h6ExJT1hFCJRLmzADg=="],
+
"yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
"yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="],
@@ -642,6 +654,8 @@
"reka-ui/@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="],
+ "vue-i18n/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="],
+
"reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="],
}
}
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json
index 944130c36..bb5b91f34 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json
@@ -26,7 +26,9 @@
"uuid": "^11.1.0",
"vue": "^3.5.13",
"vue-codemirror": "^6.1.1",
- "vue-draggable-plus": "^0.6.0"
+ "vue-draggable-plus": "^0.6.0",
+ "vue-i18n": "^11.1.9",
+ "xml-beautify": "^1.2.3"
},
"devDependencies": {
"@types/node": "^24.0.1",
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue
index f89fca6e8..179e277c8 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue
@@ -8,7 +8,8 @@ onMounted(() => {
const params = new URLSearchParams(window.location.search);
const uuid = params.get('uuid');
if (uuid) {
- store.loadFromApi(uuid);
+ store.loadConfigFromProductApi(uuid);
+ store.loadFormulaAnalyserDataFromApi(uuid);
}
})
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue
index a8ee07409..316ec8199 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue
@@ -7,8 +7,7 @@ import {
import { Tabs, TabsContent, TabsList, TabsTrigger } from '../components/ui/tabs'
import { Library } from '../components/app/library'
-import { Debug } from '../components/app/debug'
-import { ElementProperties } from '../components/app/elementproperties'
+import { ElementProperties, SpecialElementProperties } from '../components/app/elementproperties'
import { ElementDependency } from '../components/app/elementdependency'
import { Main } from '../components/app/main'
import FormulaVisualizer from './app/FormulaVisualizer.vue'
@@ -26,7 +25,6 @@ import XmlView from './app/XmlView.vue'
-
@@ -35,16 +33,16 @@ import XmlView from './app/XmlView.vue'
- Designer
+ {{ $t('designer') }}
- Kalkulations Analyse
+ {{ $t('preview') }}
- XML Ansicht
+ {{ $t('xml_view') }}
- JSON Ansicht
+ {{ $t('json_view') }}
@@ -66,6 +64,7 @@ import XmlView from './app/XmlView.vue'
+
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue
index 1ba899e8d..30548ad70 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue
@@ -1,22 +1,8 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/debug/index.ts b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/debug/index.ts
deleted file mode 100644
index 62484f18d..000000000
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/debug/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default as Debug } from './Debug.vue'
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/SpecialProperties.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/SpecialProperties.vue
new file mode 100644
index 000000000..626a186a7
--- /dev/null
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/SpecialProperties.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/index.ts b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/index.ts
index 482600ee6..a041a47a7 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/index.ts
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/index.ts
@@ -1 +1,2 @@
export { default as ElementProperties } from './ElementProperties.vue'
+export { default as SpecialElementProperties } from './SpecialProperties.vue'
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elements/InputElementForm.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elements/InputElementForm.vue
index 84693ca81..edf231cc0 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elements/InputElementForm.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elements/InputElementForm.vue
@@ -19,7 +19,7 @@ const theModel = computed({
-
+
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/library/Library.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/library/Library.vue
index eb72d8eb8..c587912bb 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/library/Library.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/library/Library.vue
@@ -4,7 +4,9 @@ import { Image, SquareParking, SquareDot, SquareMenu, SquarePen, SquareChevronDo
import { Switch } from '../../../components/ui/switch'
import { Label } from '../../../components/ui/label'
import { ref, watch } from 'vue'
+import { useI18n } from 'vue-i18n'
+const { t, locale } = useI18n()
const store = useElementStore()
let previewMode = ref(false)
@@ -30,44 +32,50 @@ watch(previewMode, (newPreviewMode) => {
+
+
+
-
+
- Headline
+ {{ $t('headline') }}
- Text
+ {{ $t('text') }}
- Media
+ {{ $t('media') }}
- Textarea
+ {{ $t('textarea') }}
- Input
+ {{ $t('input') }}
- Select
+ {{ $t('select') }}
- Hidden
+ {{ $t('hidden') }}
- Row
+ {{ $t('row') }}
-
+
diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/properties/HeadlineElement.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/properties/HeadlineElement.vue
index 36c266fa1..9194146bf 100644
--- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/properties/HeadlineElement.vue
+++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/properties/HeadlineElement.vue
@@ -25,13 +25,13 @@ const theModel = computed({
-
+
-
+
-
+
-
+