From 616522f2f13b9b8d40824f3a18eaf4b16a2d5813 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:41:13 -0500 Subject: [PATCH 01/21] update vuetify --- packages/vue-vuetify/package.json | 4 +- pnpm-lock.yaml | 67 ++++++++++++++++++++++++------- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/packages/vue-vuetify/package.json b/packages/vue-vuetify/package.json index 13f5a537d..cd0fd4d7e 100644 --- a/packages/vue-vuetify/package.json +++ b/packages/vue-vuetify/package.json @@ -69,7 +69,7 @@ "lodash": "^4.17.21", "maska": "^2.1.11", "vue": "^3.5.0", - "vuetify": "^3.9.0" + "vuetify": "^3.11.6" }, "devDependencies": { "@fortawesome/fontawesome-free": "^6.5.2", @@ -119,6 +119,6 @@ "vue": "^3.5.17", "vue-eslint-parser": "^9.4.2", "vue-tsc": "^2.0.11", - "vuetify": "^3.9.0" + "vuetify": "^3.11.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34feb768d..e0d31d4d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1376,7 +1376,7 @@ importers: version: 2.3.2(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0)) vite-plugin-vuetify: specifier: ^2.1.1 - version: 2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.9.0) + version: 2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.11.6) vitest: specifier: ^1.4.0 version: 1.6.0(@types/node@22.13.8)(jsdom@27.2.0)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0) @@ -1390,8 +1390,8 @@ importers: specifier: ^2.0.11 version: 2.0.29(typescript@5.5.4) vuetify: - specifier: ^3.9.0 - version: 3.9.0(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) + specifier: ^3.11.6 + version: 3.11.6(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) packages: @@ -4271,42 +4271,49 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-arm64-musl@1.1.1': resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/nice-linux-ppc64-gnu@1.1.1': resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-riscv64-gnu@1.1.1': resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-s390x-gnu@1.1.1': resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-x64-gnu@1.1.1': resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-x64-musl@1.1.1': resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/nice-openharmony-arm64@1.1.1': resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} @@ -4483,21 +4490,25 @@ packages: resolution: {integrity: sha512-2jvS8MYYOI8eUBRTmE8HKm5mRVLqS5Cvlj06tEAjxrmH5d7Bv8BG5Ps9yZzT0qswfVKChpzIliwPZomUjLTxmA==} cpu: [arm64] os: [linux] + libc: [glibc] '@nx/nx-linux-arm64-musl@22.0.4': resolution: {integrity: sha512-IK9gf8/AOtTW6rZajmGAFCN7EBzjmkIevt9MtOehQGlNXlMXydvUYKE5VU7d4oglvYs8aJJyayihfiZbFnTS8g==} cpu: [arm64] os: [linux] + libc: [musl] '@nx/nx-linux-x64-gnu@22.0.4': resolution: {integrity: sha512-CdALjMqqNgiffQQIlyxx6mrxJCOqDzmN6BW3w9msCPHVSPOPp4AenlT0kpC7ALvmNEUm0lC4r093QbN2t6a/wA==} cpu: [x64] os: [linux] + libc: [glibc] '@nx/nx-linux-x64-musl@22.0.4': resolution: {integrity: sha512-2GPy+mAQo4JnfjTtsgGrHhZbTmmGy4RqaGowe0qMYCMuBME33ChG9iiRmArYmVtCAhYZVn26rK76/Vn3tK7fgg==} cpu: [x64] os: [linux] + libc: [musl] '@nx/nx-win32-arm64-msvc@22.0.4': resolution: {integrity: sha512-jnZCCnTXoqOIrH0L31+qHVHmJuDYPoN6sl37/S1epP9n4fhcy9tjSx4xvx/WQSd417lU9saC+g7Glx2uFdgcTw==} @@ -4596,36 +4607,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.1': resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} @@ -4800,106 +4817,127 @@ packages: resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-gnueabihf@4.52.4': resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.34.8': resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm-musleabihf@4.52.4': resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.34.8': resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-gnu@4.52.4': resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.34.8': resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-musl@4.52.4': resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.4': resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loongarch64-gnu@4.34.8': resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.4': resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.34.8': resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.4': resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.4': resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.34.8': resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.52.4': resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.34.8': resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.4': resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.34.8': resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-linux-x64-musl@4.52.4': resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.4': resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} @@ -13969,9 +14007,8 @@ packages: typescript: optional: true - vuetify@3.9.0: - resolution: {integrity: sha512-vjqyHP5gBFH4x0BAjdRAcS3FXY5OfHaKnC6Hhgln8tePZtKc3AUhF7BEJtcrD3l6XwL8gaYx/wMt+UP7X5EZJw==} - engines: {node: ^12.20 || >=14.13} + vuetify@3.11.6: + resolution: {integrity: sha512-vaWvEpDSeldRoib1tCKNVBp60paTD2/n0a0TmrVLF9BN4CJJn6/A4VKG2Sg+DE8Yc+SNOtFtipChxSlQxjcUvw==} peerDependencies: typescript: '>=4.7' vite-plugin-vuetify: '>=2.1.0' @@ -14536,7 +14573,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.17(chokidar@4.0.1) - '@angular-devkit/build-webpack': 0.1902.17(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.98.0(esbuild@0.25.4)))(webpack@5.98.0(esbuild@0.25.4)) + '@angular-devkit/build-webpack': 0.1902.17(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.91.0))(webpack@5.98.0(esbuild@0.25.4)) '@angular-devkit/core': 19.2.17(chokidar@4.0.1) '@angular/build': 19.2.17(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.5.4))(@angular/compiler@19.2.15)(@types/node@22.13.8)(chokidar@4.0.1)(jiti@1.21.0)(karma@6.4.3)(less@4.2.2)(ng-packagr@19.2.2(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.5.4))(tslib@2.6.2)(typescript@5.5.4))(postcss@8.5.2)(stylus@0.57.0)(terser@5.39.0)(typescript@5.5.4)(yaml@2.8.1) '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.5.4) @@ -14621,7 +14658,7 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-webpack@0.1902.17(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.98.0(esbuild@0.25.4)))(webpack@5.98.0(esbuild@0.25.4))': + '@angular-devkit/build-webpack@0.1902.17(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.91.0))(webpack@5.98.0(esbuild@0.25.4))': dependencies: '@angular-devkit/architect': 0.1902.17(chokidar@4.0.1) rxjs: 7.8.1 @@ -19837,11 +19874,11 @@ snapshots: '@vue/web-component-wrapper@1.3.0': {} - '@vuetify/loader-shared@2.1.0(vue@3.5.17(typescript@5.5.4))(vuetify@3.9.0)': + '@vuetify/loader-shared@2.1.0(vue@3.5.17(typescript@5.5.4))(vuetify@3.11.6)': dependencies: upath: 2.0.1 vue: 3.5.17(typescript@5.5.4) - vuetify: 3.9.0(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) + vuetify: 3.11.6(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) '@webassemblyjs/ast@1.12.1': dependencies: @@ -29624,14 +29661,14 @@ snapshots: picocolors: 1.1.1 vite: 5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0) - vite-plugin-vuetify@2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.9.0): + vite-plugin-vuetify@2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.11.6): dependencies: - '@vuetify/loader-shared': 2.1.0(vue@3.5.17(typescript@5.5.4))(vuetify@3.9.0) + '@vuetify/loader-shared': 2.1.0(vue@3.5.17(typescript@5.5.4))(vuetify@3.11.6) debug: 4.3.7 upath: 2.0.1 vite: 5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0) vue: 3.5.17(typescript@5.5.4) - vuetify: 3.9.0(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) + vuetify: 3.11.6(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)) transitivePeerDependencies: - supports-color @@ -29847,12 +29884,12 @@ snapshots: optionalDependencies: typescript: 5.5.4 - vuetify@3.9.0(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)): + vuetify@3.11.6(typescript@5.5.4)(vite-plugin-vuetify@2.1.1)(vue@3.5.17(typescript@5.5.4)): dependencies: vue: 3.5.17(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 - vite-plugin-vuetify: 2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.9.0) + vite-plugin-vuetify: 2.1.1(vite@5.4.21(@types/node@22.13.8)(less@4.2.2)(sass@1.93.2)(stylus@0.57.0)(terser@5.39.0))(vue@3.5.17(typescript@5.5.4))(vuetify@3.11.6) w3c-hr-time@1.0.2: dependencies: From a6a3a6c620a81d64e77b2669972df6e968a79dac Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:41:32 -0500 Subject: [PATCH 02/21] add new example for layouts --- .../src/examples/employee-registration.ts | 648 ++++++++++++++++++ packages/examples/src/index.ts | 2 + 2 files changed, 650 insertions(+) create mode 100644 packages/examples/src/examples/employee-registration.ts diff --git a/packages/examples/src/examples/employee-registration.ts b/packages/examples/src/examples/employee-registration.ts new file mode 100644 index 000000000..7f0d08ae9 --- /dev/null +++ b/packages/examples/src/examples/employee-registration.ts @@ -0,0 +1,648 @@ +/* + The MIT License + + Copyright (c) 2017-2019 EclipseSource Munich + https://github.com/eclipsesource/jsonforms + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +import { registerExamples } from '../register'; + +export const schema = { + type: 'object', + description: + 'Demonstrates deeply nested vertical, horizontal, and group layouts with conditional visibility', + properties: { + showPersonalInfo: { + type: 'boolean', + default: true, + }, + showAddress: { + type: 'boolean', + default: true, + }, + showEmployment: { + type: 'boolean', + default: true, + }, + showEmergencyContact: { + type: 'boolean', + default: true, + }, + showBenefits: { + type: 'boolean', + default: true, + }, + person: { + type: 'object', + properties: { + firstName: { + type: 'string', + title: 'First Name', + }, + middleName: { + type: 'string', + title: 'Middle Name', + }, + lastName: { + type: 'string', + title: 'Last Name', + }, + dateOfBirth: { + type: 'string', + format: 'date', + title: 'Date of Birth', + }, + email: { + type: 'string', + format: 'email', + title: 'Email', + }, + phone: { + type: 'string', + title: 'Phone Number', + }, + showIdDetails: { + type: 'boolean', + title: 'Include ID Details', + default: true, + }, + ssn: { + type: 'string', + title: 'Social Security Number', + }, + driversLicense: { + type: 'string', + title: "Driver's License", + }, + }, + }, + address: { + type: 'object', + properties: { + street: { + type: 'string', + title: 'Street Address', + }, + apartment: { + type: 'string', + title: 'Apt/Suite', + }, + city: { + type: 'string', + title: 'City', + }, + state: { + type: 'string', + title: 'State', + }, + zipCode: { + type: 'string', + title: 'ZIP Code', + }, + country: { + type: 'string', + title: 'Country', + default: 'USA', + }, + }, + }, + employment: { + type: 'object', + properties: { + department: { + type: 'string', + title: 'Department', + enum: ['Engineering', 'Sales', 'Marketing', 'HR', 'Finance'], + }, + position: { + type: 'string', + title: 'Position', + }, + startDate: { + type: 'string', + format: 'date', + title: 'Start Date', + }, + employmentType: { + type: 'string', + title: 'Employment Type', + enum: ['Full-time', 'Part-time', 'Contract', 'Intern'], + }, + salary: { + type: 'number', + title: 'Annual Salary', + }, + showManagerInfo: { + type: 'boolean', + title: 'Assign Manager', + default: true, + }, + managerName: { + type: 'string', + title: 'Manager Name', + }, + managerEmail: { + type: 'string', + format: 'email', + title: 'Manager Email', + }, + }, + }, + emergencyContact: { + type: 'object', + properties: { + name: { + type: 'string', + title: 'Contact Name', + }, + relationship: { + type: 'string', + title: 'Relationship', + }, + primaryPhone: { + type: 'string', + title: 'Primary Phone', + }, + showSecondaryContact: { + type: 'boolean', + title: 'Add Secondary Phone', + default: false, + }, + secondaryPhone: { + type: 'string', + title: 'Secondary Phone', + }, + address: { + type: 'string', + title: 'Address', + }, + }, + }, + benefits: { + type: 'object', + properties: { + healthInsurance: { + type: 'boolean', + title: 'Health Insurance', + }, + dentalInsurance: { + type: 'boolean', + title: 'Dental Insurance', + }, + visionInsurance: { + type: 'boolean', + title: 'Vision Insurance', + }, + show401k: { + type: 'boolean', + title: 'Enroll in 401(k)', + default: false, + }, + contribution401k: { + type: 'number', + title: '401(k) Contribution %', + minimum: 0, + maximum: 100, + }, + }, + }, + }, +}; + +export const uischema = { + type: 'VerticalLayout', + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/showPersonalInfo', + label: 'Show Personal Info', + }, + { + type: 'Control', + scope: '#/properties/showAddress', + label: 'Show Address', + }, + { + type: 'Control', + scope: '#/properties/showEmployment', + label: 'Show Employment', + }, + { + type: 'Control', + scope: '#/properties/showEmergencyContact', + label: 'Show Emergency Contact', + }, + { + type: 'Control', + scope: '#/properties/showBenefits', + label: 'Show Benefits', + }, + ], + }, + { + type: 'Group', + label: 'Personal Information', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/showPersonalInfo', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/person/properties/firstName', + }, + { + type: 'Control', + scope: '#/properties/person/properties/middleName', + }, + { + type: 'Control', + scope: '#/properties/person/properties/lastName', + }, + ], + }, + { + type: 'VerticalLayout', + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/person/properties/dateOfBirth', + }, + { + type: 'Control', + scope: '#/properties/person/properties/email', + }, + { + type: 'Control', + scope: '#/properties/person/properties/phone', + }, + ], + }, + { + type: 'Control', + scope: '#/properties/person/properties/showIdDetails', + }, + { + type: 'HorizontalLayout', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/person/properties/showIdDetails', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'Control', + scope: '#/properties/person/properties/ssn', + }, + { + type: 'Control', + scope: '#/properties/person/properties/driversLicense', + }, + ], + }, + ], + }, + ], + }, + { + type: 'VerticalLayout', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/showAddress', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'Group', + label: 'Address', + elements: [ + { + type: 'Control', + scope: '#/properties/address/properties/street', + }, + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/address/properties/apartment', + }, + { + type: 'Control', + scope: '#/properties/address/properties/city', + }, + ], + }, + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/address/properties/state', + }, + { + type: 'Control', + scope: '#/properties/address/properties/zipCode', + }, + { + type: 'Control', + scope: '#/properties/address/properties/country', + }, + ], + }, + ], + }, + ], + }, + { + type: 'HorizontalLayout', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/showEmployment', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'Group', + label: 'Employment Details', + elements: [ + { + type: 'VerticalLayout', + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/employment/properties/department', + }, + { + type: 'Control', + scope: '#/properties/employment/properties/position', + }, + ], + }, + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/employment/properties/startDate', + }, + { + type: 'Control', + scope: + '#/properties/employment/properties/employmentType', + }, + { + type: 'Control', + scope: '#/properties/employment/properties/salary', + }, + ], + }, + ], + }, + ], + }, + { + type: 'VerticalLayout', + elements: [ + { + type: 'Group', + label: 'Manager Information', + elements: [ + { + type: 'Control', + scope: '#/properties/employment/properties/showManagerInfo', + }, + { + type: 'VerticalLayout', + rule: { + effect: 'SHOW', + condition: { + scope: + '#/properties/employment/properties/showManagerInfo', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'Control', + scope: '#/properties/employment/properties/managerName', + }, + { + type: 'Control', + scope: '#/properties/employment/properties/managerEmail', + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + type: 'Group', + label: 'Emergency Contact', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/showEmergencyContact', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'VerticalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/emergencyContact/properties/name', + }, + { + type: 'Control', + scope: + '#/properties/emergencyContact/properties/relationship', + }, + ], + }, + { + type: 'Group', + label: 'Contact Numbers', + elements: [ + { + type: 'VerticalLayout', + elements: [ + { + type: 'Control', + scope: + '#/properties/emergencyContact/properties/primaryPhone', + }, + { + type: 'Control', + scope: + '#/properties/emergencyContact/properties/showSecondaryContact', + }, + { + type: 'Control', + scope: + '#/properties/emergencyContact/properties/secondaryPhone', + rule: { + effect: 'SHOW', + condition: { + scope: + '#/properties/emergencyContact/properties/showSecondaryContact', + schema: { const: true }, + }, + }, + }, + ], + }, + ], + }, + ], + }, + { + type: 'Control', + scope: '#/properties/emergencyContact/properties/address', + }, + ], + }, + { + type: 'VerticalLayout', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/showBenefits', + schema: { const: true }, + }, + }, + elements: [ + { + type: 'HorizontalLayout', + elements: [ + { + type: 'Group', + label: 'Insurance Options', + elements: [ + { + type: 'VerticalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/benefits/properties/healthInsurance', + }, + { + type: 'Control', + scope: '#/properties/benefits/properties/dentalInsurance', + }, + { + type: 'Control', + scope: '#/properties/benefits/properties/visionInsurance', + }, + ], + }, + ], + }, + { + type: 'Group', + label: 'Retirement', + elements: [ + { + type: 'VerticalLayout', + elements: [ + { + type: 'Control', + scope: '#/properties/benefits/properties/show401k', + }, + { + type: 'Control', + scope: + '#/properties/benefits/properties/contribution401k', + rule: { + effect: 'SHOW', + condition: { + scope: '#/properties/benefits/properties/show401k', + schema: { const: true }, + }, + }, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], +}; + +export const data = { + showPersonalInfo: true, + showAddress: true, + showEmployment: true, + showEmergencyContact: true, + showBenefits: true, + person: { + showIdDetails: true, + }, + employment: { + showManagerInfo: true, + }, + emergencyContact: { + showSecondaryContact: true, + }, + benefits: { + show401k: true, + }, +}; + +registerExamples([ + { + name: 'employee-registration', + label: 'Employee Registration', + data, + schema, + uischema, + }, +]); diff --git a/packages/examples/src/index.ts b/packages/examples/src/index.ts index e200dc8e3..047468720 100644 --- a/packages/examples/src/index.ts +++ b/packages/examples/src/index.ts @@ -72,6 +72,7 @@ import * as readonly from './examples/readonly'; import * as listWithDetailPrimitives from './examples/list-with-detail-primitives'; import * as conditionalSchemaComposition from './examples/conditional-schema-compositions'; import * as additionalErrors from './examples/additional-errors'; +import * as employeeRegistration from './examples/employee-registration'; import * as multiEnumWithLabelAndDesc from './examples/enum-multi-with-label-and-desc'; import * as additionalProperties from './examples/additional-properties'; import * as login from './examples/login'; @@ -133,6 +134,7 @@ export { enumExample, radioGroupExample, multiEnum, + employeeRegistration, multiEnumWithLabelAndDesc, enumInArray, readonly, From c58de82e893dadce9e73da08a8c5a54cc28d6de4 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:41:54 -0500 Subject: [PATCH 03/21] update the unknown render to show the message in red similar to react renderers --- packages/vue/src/components/UnknownRenderer.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue/src/components/UnknownRenderer.vue b/packages/vue/src/components/UnknownRenderer.vue index 18c880180..56b9074eb 100644 --- a/packages/vue/src/components/UnknownRenderer.vue +++ b/packages/vue/src/components/UnknownRenderer.vue @@ -1,5 +1,5 @@ From 3d14b16f111597a6a4162a1854d35c716fd44267 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:43:21 -0500 Subject: [PATCH 05/21] use expansion-panels so that we can collaps the whole additional properties section --- .../components/AdditionalProperties.vue | 212 ++++++++++-------- 1 file changed, 122 insertions(+), 90 deletions(-) diff --git a/packages/vue-vuetify/src/complex/components/AdditionalProperties.vue b/packages/vue-vuetify/src/complex/components/AdditionalProperties.vue index 5d93c8037..521fe3704 100644 --- a/packages/vue-vuetify/src/complex/components/AdditionalProperties.vue +++ b/packages/vue-vuetify/src/complex/components/AdditionalProperties.vue @@ -1,92 +1,107 @@ + + From 5501ceaca0c2bd03e7f49c3e6becffd6eabccd50 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:44:06 -0500 Subject: [PATCH 06/21] add default density to match other vuetify text fields as hight --- packages/vue-vuetify/src/controls/IntegerControlRenderer.vue | 3 ++- packages/vue-vuetify/src/controls/NumberControlRenderer.vue | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vue-vuetify/src/controls/IntegerControlRenderer.vue b/packages/vue-vuetify/src/controls/IntegerControlRenderer.vue index 42b9c380e..729ff8c5c 100644 --- a/packages/vue-vuetify/src/controls/IntegerControlRenderer.vue +++ b/packages/vue-vuetify/src/controls/IntegerControlRenderer.vue @@ -20,7 +20,8 @@ :error-messages="control.errors" :model-value="value" :clearable="clearable" - v-bind="vuetifyProps('v-text-field')" + density="comfortable" + v-bind="vuetifyProps('v-number-input')" @update:model-value="onChange" @focus="handleFocus" @blur="handleBlur" diff --git a/packages/vue-vuetify/src/controls/NumberControlRenderer.vue b/packages/vue-vuetify/src/controls/NumberControlRenderer.vue index 796f066d3..f0b35ae91 100644 --- a/packages/vue-vuetify/src/controls/NumberControlRenderer.vue +++ b/packages/vue-vuetify/src/controls/NumberControlRenderer.vue @@ -21,6 +21,7 @@ :error-messages="control.errors" :model-value="value" :clearable="clearable" + density="comfortable" v-bind="vuetifyProps('v-number-input')" @update:model-value="onChange" @focus="handleFocus" From 194282906777639f5711187244ea9df3e2226066 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Mon, 19 Jan 2026 16:44:51 -0500 Subject: [PATCH 07/21] use collapsable panels for group layout --- .../vue-vuetify/src/layouts/GroupRenderer.vue | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/packages/vue-vuetify/src/layouts/GroupRenderer.vue b/packages/vue-vuetify/src/layouts/GroupRenderer.vue index c65bd1b14..f7a1eeccf 100644 --- a/packages/vue-vuetify/src/layouts/GroupRenderer.vue +++ b/packages/vue-vuetify/src/layouts/GroupRenderer.vue @@ -1,34 +1,36 @@