From a9a5f4a8b03ca9549d0b34c91bac6a3a7d24dd87 Mon Sep 17 00:00:00 2001 From: EugeniyKiyashko Date: Mon, 22 Jun 2026 19:27:02 +0400 Subject: [PATCH 1/2] chore (deps): remove unused cheerio, shx dependencies --- apps/demos/package.json | 1 + package.json | 11 +-- pnpm-lock.yaml | 184 +++------------------------------------- 3 files changed, 16 insertions(+), 180 deletions(-) diff --git a/apps/demos/package.json b/apps/demos/package.json index debc75d3f7c5..0c2ffc79b886 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -128,6 +128,7 @@ "gulp-clean": "0.4.0", "gulp-minify": "3.1.0", "gulp-replace": "1.1.4", + "http-server": "14.1.1", "jest": "29.7.0", "jest-environment-node": "29.7.0", "lodash": "4.17.21", diff --git a/package.json b/package.json index 1ccc79f72998..167ae4d15a41 100644 --- a/package.json +++ b/package.json @@ -35,27 +35,20 @@ "@types/jest": "29.5.12", "@types/node": "20.12.8", "@types/shelljs": "0.8.17", - "@types/tar-fs": "2.0.4", - "@types/yargs": "17.0.32", - "@vue/shared": "3.4.27", "axe-core": "catalog:", - "cheerio": "1.0.0-rc.10", + "@types/yargs": "17.0.35", "devextreme-internal-tools": "catalog:tools", "devextreme-metadata": "workspace:*", - "http-server": "14.1.1", "husky": "8.0.3", "jest": "29.7.0", - "jspdf-autotable": "3.8.3", "lint-staged": "14.0.1", "nx": "19.4.2", "postcss": "~8.5.10", "shelljs": "0.8.5", - "shx": "0.4.0", - "source-map": "0.7.4", "stylelint": "catalog:", "tar-fs": "3.1.1", + "http-server": "14.1.1", "ts-node": "10.9.2", - "vue": "3.4.27", "yargs": "17.7.2" }, "pre-commit": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b42f38a1e490..ddc622e6de87 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,21 +200,12 @@ importers: '@types/shelljs': specifier: 0.8.17 version: 0.8.17 - '@types/tar-fs': - specifier: 2.0.4 - version: 2.0.4 '@types/yargs': - specifier: 17.0.32 - version: 17.0.32 - '@vue/shared': - specifier: 3.4.27 - version: 3.4.27 + specifier: 17.0.35 + version: 17.0.35 axe-core: specifier: 'catalog:' version: 4.12.1 - cheerio: - specifier: 1.0.0-rc.10 - version: 1.0.0-rc.10 devextreme-internal-tools: specifier: catalog:tools version: 18.2.0 @@ -230,9 +221,6 @@ importers: jest: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.8)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.12.8)(typescript@5.9.3)) - jspdf-autotable: - specifier: 3.8.3 - version: 3.8.3(jspdf@4.2.1) lint-staged: specifier: 14.0.1 version: 14.0.1(enquirer@2.4.1) @@ -245,12 +233,6 @@ importers: shelljs: specifier: 0.8.5 version: 0.8.5 - shx: - specifier: 0.4.0 - version: 0.4.0 - source-map: - specifier: 0.7.4 - version: 0.7.4 stylelint: specifier: 'catalog:' version: 16.22.0(typescript@5.9.3) @@ -260,9 +242,6 @@ importers: ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.12.8)(typescript@5.9.3) - vue: - specifier: 3.4.27 - version: 3.4.27(typescript@5.9.3) yargs: specifier: 17.7.2 version: 17.7.2 @@ -697,6 +676,9 @@ importers: gulp-replace: specifier: 1.1.4 version: 1.1.4 + http-server: + specifier: 14.1.1 + version: 14.1.1 jest: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.8)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.12.8)(typescript@5.4.5)) @@ -5979,12 +5961,6 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/tar-fs@2.0.4': - resolution: {integrity: sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA==} - - '@types/tar-stream@3.1.4': - resolution: {integrity: sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg==} - '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -6009,6 +5985,9 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -6353,27 +6332,18 @@ packages: '@vue/reactivity@3.2.47': resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==} - '@vue/reactivity@3.4.27': - resolution: {integrity: sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==} - '@vue/reactivity@3.5.38': resolution: {integrity: sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==} '@vue/runtime-core@3.2.47': resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==} - '@vue/runtime-core@3.4.27': - resolution: {integrity: sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==} - '@vue/runtime-core@3.5.38': resolution: {integrity: sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==} '@vue/runtime-dom@3.2.47': resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==} - '@vue/runtime-dom@3.4.27': - resolution: {integrity: sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==} - '@vue/runtime-dom@3.5.38': resolution: {integrity: sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==} @@ -6382,11 +6352,6 @@ packages: peerDependencies: vue: 3.2.47 - '@vue/server-renderer@3.4.27': - resolution: {integrity: sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==} - peerDependencies: - vue: 3.4.27 - '@vue/server-renderer@3.5.38': resolution: {integrity: sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==} peerDependencies: @@ -9351,10 +9316,6 @@ packages: evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - execa@3.4.0: resolution: {integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==} engines: {node: ^8.12.0 || >=9.7.0} @@ -9810,10 +9771,6 @@ packages: resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} engines: {node: '>=0.10.0'} - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -10944,10 +10901,6 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -11381,11 +11334,6 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jspdf-autotable@3.8.3: - resolution: {integrity: sha512-PQFdljBt+ijm6ZWXYxhZ54A/awV63UKcipYoA2+YGsz0BXXiXTIL/FIg+V30j7wPdSdzClfbB3qKX9UeuFylPQ==} - peerDependencies: - jspdf: ^2.5.1 - jspdf-autotable@3.8.4: resolution: {integrity: sha512-rSffGoBsJYX83iTRv8Ft7FhqfgEL2nLpGAIiqruEQQ3e4r0qdLFbPUB7N9HAle0I3XgpisvyW751VHCqKUVOgQ==} peerDependencies: @@ -12589,10 +12537,6 @@ packages: engines: {node: '>= 4'} hasBin: true - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -12802,10 +12746,6 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - p-finally@2.0.1: resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} engines: {node: '>=8'} @@ -14495,19 +14435,9 @@ packages: engines: {node: '>=4'} hasBin: true - shelljs@0.9.2: - resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} - engines: {node: '>=18'} - hasBin: true - shellwords@0.1.1: resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - shx@0.4.0: - resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==} - engines: {node: '>=18'} - hasBin: true - side-channel-list@1.0.1: resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} @@ -14886,10 +14816,6 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -16079,14 +16005,6 @@ packages: vue@3.2.47: resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==} - vue@3.4.27: - resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - vue@3.5.38: resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} peerDependencies: @@ -19174,7 +19092,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 20.12.8 - '@types/yargs': 17.0.32 + '@types/yargs': 17.0.35 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': @@ -21759,15 +21677,6 @@ snapshots: '@types/stack-utils@2.0.3': {} - '@types/tar-fs@2.0.4': - dependencies: - '@types/node': 20.12.8 - '@types/tar-stream': 3.1.4 - - '@types/tar-stream@3.1.4': - dependencies: - '@types/node': 20.12.8 - '@types/tough-cookie@4.0.5': {} '@types/triple-beam@1.3.5': {} @@ -21792,6 +21701,10 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@types/yargs@17.0.35': + dependencies: + '@types/yargs-parser': 21.0.3 + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.12.8 @@ -22608,10 +22521,6 @@ snapshots: dependencies: '@vue/shared': 3.2.47 - '@vue/reactivity@3.4.27': - dependencies: - '@vue/shared': 3.4.27 - '@vue/reactivity@3.5.38': dependencies: '@vue/shared': 3.5.38 @@ -22621,11 +22530,6 @@ snapshots: '@vue/reactivity': 3.2.47 '@vue/shared': 3.2.47 - '@vue/runtime-core@3.4.27': - dependencies: - '@vue/reactivity': 3.4.27 - '@vue/shared': 3.4.27 - '@vue/runtime-core@3.5.38': dependencies: '@vue/reactivity': 3.5.38 @@ -22637,12 +22541,6 @@ snapshots: '@vue/shared': 3.2.47 csstype: 2.6.21 - '@vue/runtime-dom@3.4.27': - dependencies: - '@vue/runtime-core': 3.4.27 - '@vue/shared': 3.4.27 - csstype: 3.2.3 - '@vue/runtime-dom@3.5.38': dependencies: '@vue/reactivity': 3.5.38 @@ -22656,12 +22554,6 @@ snapshots: '@vue/shared': 3.2.47 vue: 3.2.47 - '@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.9.3))': - dependencies: - '@vue/compiler-ssr': 3.4.27 - '@vue/shared': 3.4.27 - vue: 3.4.27(typescript@5.9.3) - '@vue/server-renderer@3.5.38(vue@3.5.38(typescript@5.4.5))': dependencies: '@vue/compiler-ssr': 3.5.38 @@ -26735,16 +26627,6 @@ snapshots: md5.js: 1.3.5 safe-buffer: 5.2.1 - execa@1.0.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - execa@3.4.0: dependencies: cross-spawn: 7.0.6 @@ -27377,10 +27259,6 @@ snapshots: get-stdin@4.0.1: {} - get-stream@4.1.0: - dependencies: - pump: 3.0.4 - get-stream@5.2.0: dependencies: pump: 3.0.4 @@ -28821,8 +28699,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@1.1.0: {} - is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -29937,10 +29813,6 @@ snapshots: jsonparse@1.3.1: {} - jspdf-autotable@3.8.3(jspdf@4.2.1): - dependencies: - jspdf: 4.2.1 - jspdf-autotable@3.8.4(jspdf@4.2.1): dependencies: jspdf: 4.2.1 @@ -31469,10 +31341,6 @@ snapshots: shell-quote: 1.8.4 string.prototype.padend: 3.1.6 - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -31758,8 +31626,6 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - p-finally@1.0.0: {} - p-finally@2.0.1: {} p-limit@2.3.0: @@ -33602,20 +33468,8 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shelljs@0.9.2: - dependencies: - execa: 1.0.0 - fast-glob: 3.3.3 - interpret: 1.4.0 - rechoir: 0.6.2 - shellwords@0.1.1: {} - shx@0.4.0: - dependencies: - minimist: 1.2.8 - shelljs: 0.9.2 - side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 @@ -34128,8 +33982,6 @@ snapshots: strip-bom@4.0.0: {} - strip-eof@1.0.0: {} - strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -36011,16 +35863,6 @@ snapshots: '@vue/server-renderer': 3.2.47(vue@3.2.47) '@vue/shared': 3.2.47 - vue@3.4.27(typescript@5.9.3): - dependencies: - '@vue/compiler-dom': 3.4.27 - '@vue/compiler-sfc': 3.4.27 - '@vue/runtime-dom': 3.4.27 - '@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.9.3)) - '@vue/shared': 3.4.27 - optionalDependencies: - typescript: 5.9.3 - vue@3.5.38(typescript@5.4.5): dependencies: '@vue/compiler-dom': 3.5.38 From cd5d163fccae04cf8feead5af3c4ccb8658d8e69 Mon Sep 17 00:00:00 2001 From: EugeniyKiyashko Date: Tue, 23 Jun 2026 19:51:04 +0400 Subject: [PATCH 2/2] fix wrapper tests --- e2e/bundlers/vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/bundlers/vite.config.js b/e2e/bundlers/vite.config.js index 1da7c03f4b5b..10da3999755f 100644 --- a/e2e/bundlers/vite.config.js +++ b/e2e/bundlers/vite.config.js @@ -5,7 +5,7 @@ rollupConfig.plugins = rollupConfig.plugins.filter(p => p.name !== 'commonjs'); module.exports = { build: { - output: './dist/dist_vite/bundle_esm.js', + outDir: './dist/dist_vite', rollupOptions: rollupConfig } };