diff --git a/README.md b/README.md
index eda152b..dad8473 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,5 @@
# yvan-rcs-web
-This template should help get you started developing with Vue 3 in Vite.
-
-## Recommended IDE Setup
-
-[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
-
-## Type Support for `.vue` Imports in TS
-
-TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
-
-## Customize configuration
-
-See [Vite Configuration Reference](https://vite.dev/config/).
-
## Project Setup
```sh
diff --git a/package.json b/package.json
index dbb0ae0..a3d6e86 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,18 @@
"three": "^0.176.0",
"vue": "^3.5.13",
"vue-router": "^4.5.0",
- "less": "^4.2.1"
+ "less": "^4.2.1",
+ "split.js": "^1.6.5",
+ "localforage": "^1.10.0",
+ "rimraf": "^3.0.2",
+ "vue-i18n": "9.2.2",
+ "codemirror": "^5.65.19",
+ "vue3-menus": "^1.1.2",
+ "jquery": "^3.6.0",
+ "ag-grid-enterprise": "^28.2.1",
+ "sortablejs": "1.15.6",
+ "ag-grid-vue3": "^28.2.1",
+ "decimal.js": "^10.5.0"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.1",
@@ -30,6 +41,7 @@
"@vue/tsconfig": "^0.7.0",
"@types/lodash-es": "^4.17.7",
"@types/three": "^0.176.0",
+ "@vicons/fa": "^0.12.0",
"npm-run-all2": "^7.0.2",
"prettier": "3.5.3",
"typescript": "~5.8.0",
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
new file mode 100644
index 0000000..21b271e
Binary files /dev/null and b/src/assets/images/logo.png differ
diff --git a/src/components/ag_grid_license.js b/src/components/ag_grid_license.js
new file mode 100644
index 0000000..0aea0f1
--- /dev/null
+++ b/src/components/ag_grid_license.js
@@ -0,0 +1,130 @@
+import {LicenseManager} from "ag-grid-enterprise"
+
+var a = [
+ 'QBPDn8KZAMK+QkJGRiN+acK9woEbwq' +
+ 'HDs8OYHhDCsCLDpA5FX8KSw5DDs8Oc' +
+ 'aXnDocOkw7VKfMKEw47DnHYew4QFw7' +
+ '7CrQDDg1I3wqDDl8Kow41fH33CpTLC' +
+ 'ocO9CsKbw53CvsK6XTDCncKbwplJw7' +
+ 'UsHU4ffcOfYMKdwo19dALCm8KCwq15' +
+ 'wrfDjgTDosOZw4rDk8KrBQJgHxw+dM' +
+ 'KHwrzCtUQ8PsOMNMKvf8OrwojDuXDC' +
+ 'ssOxOcKswqbDnMOewpEmw6Ncw4oLw7' +
+ 'Y/MRXCmcKMdsKTw4rDiXHCv0NyPTx0' +
+ 'wqhKdw/CmcOqw5V2ZsOOwrk+wr4UOs' +
+ 'KmccORd8KEXWh0KDjCgm3DgcOtwq05' +
+ 'w7FgKDljZwrCiHPCpHsZwo0GwrdWw5' +
+ 'rDpMOYKcOoJGtZw4jCpkIjwq/CrMOL' +
+ 'wr9UPMKlMcObWxXDlTHClmvCqsOiwp' +
+ 'XDmTZKNBnDvMODwrfDuUDCrgXDgWFm' +
+ 'w7zDnWFNwpgawqQ9LsK9wpwhdcK3Vs' +
+ 'OnUMOiLRAwwrgvw5fCoxLClcOzw7vD' +
+ 'tcOVUMONwqfDrjtZEcOnwrwLO3DCpc' +
+ 'Khwp3ChcOCwrt8w642w4nChEDDqMOi' +
+ 'w5/Dg3R9w43DqlrDvmjCoT3DmC8vb8' +
+ 'KiwqkWw5PCtMKCwrcbw4TCq0sPwrIS' +
+ 'w6EwDHnDtCnCg2AxwpMnI8OCC8OFw7' +
+ '7Csxhow5oBHXHCnmvDrA/DhivDvMOK' +
+ 'ecOvw75CRVzDnlc3w7TDm8O5BnfDos' +
+ 'KhwrU/w4bDnsKHei4Uw5JZw5zDpsKA' +
+ 'W8Oiw4jCg3UWD8O3chR7bCfCoTTCns' +
+ 'OCV8KeJ2pnJ2NvwosEdxLCnnEsDMOH' +
+ 'wpF/RFprwoUzCVHDvFbCgcOtFzVICM' +
+ 'OJbcK4w4LDjMKofsOLH8KCwrfDhGzC' +
+ 'hMOAw5fChX/CqsO3w4Jaw4jCrz3DrM' +
+ 'KLCcOhw5lVwojDlsKrw63DoxJmwodM' +
+ 'wp7DmcO8wr9COSXDtcKrwrpcw5IRec' +
+ 'OwWMOSFMOBFCYBwrkew5VEwrIUIcO7' +
+ 'Fzl1w4TCjcKufMO6AcKUwqjCtnbCum' +
+ '89AwBtwqPDgn3DsMK8w5jCssOxw7fC' +
+ 'iHsgIwLDtsKNPwjCmMK+HcKowoZjw6' +
+ 'F/wqpEwrsjw6zDp0VjflPCgcO0JMOO' +
+ 'w5Aww6FTBTpJf1vCmXwvcsKfRmk2dC' +
+ 'zDnMK7Fhkpwq7DvMKFNsOqZ0/Cl3cZ' +
+ 'dsKUwr5+w5rCl27Cj1g0HMOywr/Cq8' +
+ 'KxZgrDhsKOw5bCiFIKwp7DjcOJwpU1' +
+ 'CcKaT3rDhS9xwoY1wokFwqTDncKLw7' +
+ 'gKasKHwqNbbBJRIhB+TMOvGcKzF1HD' +
+ 'o8OAwp4FEHjDvng5wrx7wobCtw==',
+ 'wrPDoXXCm8KDJw5wwqQSCy/Dlg=='
+];
+(function (b, e) {
+ var f = function (g) {
+ while (--g) {
+ b['push'](b['shift']());
+ }
+ };
+ f(++e);
+}(a, 0x1bf));
+var b = function (c, d) {
+ c = c - 0x0;
+ var e = a[c];
+ if (b['ngETWK'] === undefined) {
+ (function () {
+ var h = function () {
+ var k;
+ try {
+ k = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();
+ } catch (l) {
+ k = window;
+ }
+ return k;
+ };
+ var i = h();
+ var j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+ i['atob'] || (i['atob'] = function (k) {
+ var l = String(k)['replace'](/=+$/, '');
+ var m = '';
+ for (var n = 0x0, o=0, p, q = 0x0; p = l['charAt'](q++); ~p && (o = n % 0x4 ? o * 0x40 + p : p, n++ % 0x4) ? m += String['fromCharCode'](0xff & o >> (-0x2 * n & 0x6)) : 0x0) {
+ p = j['indexOf'](p);
+ }
+ return m;
+ });
+ }());
+ var g = function (h, l) {
+ var m = [], n = 0x0, o, p = '', q = '';
+ h = atob(h);
+ for (var t = 0x0, u = h['length']; t < u; t++) {
+ q += '%' + ('00' + h['charCodeAt'](t)['toString'](0x10))['slice'](-0x2);
+ }
+ h = decodeURIComponent(q);
+ var r;
+ for (r = 0x0; r < 0x100; r++) {
+ m[r] = r;
+ }
+ for (r = 0x0; r < 0x100; r++) {
+ n = (n + m[r] + l['charCodeAt'](r % l['length'])) % 0x100;
+ o = m[r];
+ m[r] = m[n];
+ m[n] = o;
+ }
+ r = 0x0;
+ n = 0x0;
+ for (var v = 0x0; v < h['length']; v++) {
+ r = (r + 0x1) % 0x100;
+ n = (n + m[r]) % 0x100;
+ o = m[r];
+ m[r] = m[n];
+ m[n] = o;
+ p += String['fromCharCode'](h['charCodeAt'](v) ^ m[(m[r] + m[n]) % 0x100]);
+ }
+ return p;
+ };
+ b['sXjMae'] = g;
+ b['NsblKa'] = {};
+ b['ngETWK'] = !![];
+ }
+ var f = b['NsblKa'][c];
+ if (f === undefined) {
+ if (b['Fwjnqi'] === undefined) {
+ b['Fwjnqi'] = !![];
+ }
+ e = b['sXjMae'](e, d);
+ b['NsblKa'][c] = e;
+ } else {
+ e = f;
+ }
+ return e;
+};
+LicenseManager[b('0x0', '!ZqR')](b('0x1', '%xiU'));
+
diff --git a/src/components/split/split-area.vue b/src/components/split/split-area.vue
new file mode 100644
index 0000000..c9d6099
--- /dev/null
+++ b/src/components/split/split-area.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/split/split.vue b/src/components/split/split.vue
new file mode 100644
index 0000000..bdf528b
--- /dev/null
+++ b/src/components/split/split.vue
@@ -0,0 +1,188 @@
+
+