diff --git a/react-fluent-ui/package-lock.json b/react-fluent-ui/package-lock.json index c832bb0..8a23ebd 100644 --- a/react-fluent-ui/package-lock.json +++ b/react-fluent-ui/package-lock.json @@ -11,22 +11,22 @@ "dependencies": { "@fluentui/react-components": "^9.74.9", "@fluentui/react-icons": "^2.0.343", - "@slickgrid-universal/common": "^10.11.3", - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", + "@slickgrid-universal/common": "^11.0.0-beta.0", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", "@slickgrid-universal/event-pub-sub": "^10.10.0", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/pdf-export": "^10.11.3", - "@slickgrid-universal/react-row-detail-plugin": "^10.11.3", - "@slickgrid-universal/row-detail-view-plugin": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/sql": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", - "dompurify": "^3.4.16", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/pdf-export": "^11.0.0-beta.0", + "@slickgrid-universal/react-row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/sql": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", + "dompurify": "^3.4.17", "react": "^19.3.0", "react-dom": "^19.3.0", "react-router": "^8.4.0", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", @@ -42,7 +42,7 @@ "rxjs": "^7.8.2", "sass": "^1.105.1", "typescript": "^6.0.3", - "vite": "^8.3.3", + "vite": "^8.3.5", "vite-tsconfig-paths": "^6.1.1" } }, @@ -1917,9 +1917,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.152.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz", - "integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==", + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", "dev": true, "license": "MIT", "funding": { @@ -2266,9 +2266,9 @@ "license": "MIT" }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz", - "integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", "cpu": [ "arm" ], @@ -2283,9 +2283,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz", - "integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", "cpu": [ "arm64" ], @@ -2300,9 +2300,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz", - "integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", "cpu": [ "arm64" ], @@ -2317,9 +2317,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz", - "integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", "cpu": [ "x64" ], @@ -2334,9 +2334,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz", - "integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", "cpu": [ "x64" ], @@ -2351,9 +2351,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz", - "integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", "cpu": [ "arm" ], @@ -2368,9 +2368,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz", - "integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", "cpu": [ "arm64" ], @@ -2388,9 +2388,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz", - "integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", "cpu": [ "arm64" ], @@ -2408,9 +2408,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz", - "integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", "cpu": [ "ppc64" ], @@ -2428,9 +2428,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz", - "integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", "cpu": [ "s390x" ], @@ -2448,9 +2448,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz", - "integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", "cpu": [ "x64" ], @@ -2468,9 +2468,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz", - "integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", "cpu": [ "x64" ], @@ -2488,9 +2488,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz", - "integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", "cpu": [ "arm64" ], @@ -2505,9 +2505,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz", - "integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", "cpu": [ "arm64" ], @@ -2522,9 +2522,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz", - "integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", "cpu": [ "x64" ], @@ -2552,22 +2552,20 @@ "license": "MIT" }, "node_modules/@slickgrid-universal/common": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-10.11.3.tgz", - "integrity": "sha512-vURyq55n8+/B4HKipq84FqW9DlkCTQ28JH7SX+KulMeLYxmzSTwwSYLMqB/UUBecaw5VBGDmDM2MUVOfhYw7qQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-11.0.0-beta.0.tgz", + "integrity": "sha512-x+3s2PJcKzOWO0xZEh5AEmciUqbEWwgbu+25BUNjCvkTELtsPKKI/O9d4RUiqGt47zHiPVyDTg6nEPsMRRvFUw==", "license": "MIT", "dependencies": { "@excel-builder-vanilla/types": "^5.3.1", "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/utils": "10.10.0", - "@types/sortablejs": "^1.15.9", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "@types/trusted-types": "^2.0.7", "autocompleter": "^10.0.0", "dequal": "^2.0.3", "multiple-select-vanilla": "^5.2.3", - "sortablejs": "^1.15.7", "vanilla-calendar-pro": "^3.4.0" }, "engines": { @@ -2578,46 +2576,73 @@ "url": "https://ko-fi.com/ghiscoding" } }, + "node_modules/@slickgrid-universal/common/node_modules/@slickgrid-universal/event-pub-sub": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-11.0.0-beta.0.tgz", + "integrity": "sha512-kpWOhdXL9n0R6dlKPgLSlfTYzGvwkOZxJnKBNQ+wfR16YosT7g/oFoxJXn1L/qtM9KLba17pMkLuvCuASLuAxQ==", + "license": "MIT", + "dependencies": { + "@slickgrid-universal/utils": "11.0.0-beta.0" + } + }, + "node_modules/@slickgrid-universal/common/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/composite-editor-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-10.11.3.tgz", - "integrity": "sha512-WYDwjp/vGIoFVbLbv5s0QToWwx/HodzlCA9DfiRHTiRfayCQJXB8oHjbEg+YsYvVe1dnEo6yCIccPv3va+Oovg==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-11.0.0-beta.0.tgz", + "integrity": "sha512-j41hSz9QHJi9HwZ52DpepGjBFvQ3946whHI7YRKO5LaL4lDIJpfHBV2el/sUMD6fwhiXaL+juZd+vzLGcKm7rQ==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, + "node_modules/@slickgrid-universal/composite-editor-component/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/custom-footer-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-10.11.3.tgz", - "integrity": "sha512-u4B344fYfhhsRYpwRiA4fKp9qj2tB7wQaHqlb7mS3f78DhJcsvTfi7ndBnChAshNkIkVlalf7gMQcqdN8zZWjw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-11.0.0-beta.0.tgz", + "integrity": "sha512-Pbar5mf5rxpx2JPkofHPzkTuNTddO3PQlBW0qD4KbZz+PuULcIx/DUXNchoTOwRQEUDTkwMZ/mEeqbmAKgC4Sg==", "license": "MIT", "dependencies": { "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/custom-tooltip-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-10.11.3.tgz", - "integrity": "sha512-3adnvQUQC/mPsHETMFO+COxmJ+TTbLSDXxMfXsO9xGLd0Y8GrULYFnGvznhvAjlMpxN8CJum+yFElrJpfqL1bQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-5NkEYRO2nMGwCX4YgzMjWl96CDXAd6pOnK/BSakEyCt0jWLPdNVFv8CQigv+opEFb/u/6B4fRlHYoQZtoj3ucA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, + "node_modules/@slickgrid-universal/custom-tooltip-plugin/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/empty-warning-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-10.11.3.tgz", - "integrity": "sha512-mtWUL6GuzT6O9eueb3HXgeY9LUIyPPfsoI2po2g81wegBQz4D9QNPJe5koeA6QPZG2xYhGxQGvcA61pnP8TtMw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-11.0.0-beta.0.tgz", + "integrity": "sha512-bAD5V7rgPV4gBhXAdKji5jxrahrSy3jn1RcYoxwIsiMjB+VCi3cPezz5W/6EoTjaPbY7VOp4ESfpQGwDmqGx9A==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/event-pub-sub": { @@ -2630,13 +2655,13 @@ } }, "node_modules/@slickgrid-universal/excel-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-10.11.3.tgz", - "integrity": "sha512-Zoh4NcdHHty7tZf7T/slR0jkLYlZP5FeanP8MX2GDEezONl1/Z+8PUVEqqT70XLT/3KMGuhX/DK2A2R1a9mYAQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-11.0.0-beta.0.tgz", + "integrity": "sha512-KrLDb5/lvupdGFL40a7NDifkGGkxuAUirhjhDYoEjEfTVAzyUIOIGi/jbkoTCWe5vscALRXmSqu3i9w6VLeVXg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "excel-builder-vanilla": "^5.3.1" }, "funding": { @@ -2644,24 +2669,30 @@ "url": "https://ko-fi.com/ghiscoding" } }, + "node_modules/@slickgrid-universal/excel-export/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/pagination-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-10.11.3.tgz", - "integrity": "sha512-3QTbRokIFZgpRONXP9MJfE4YKVsnXS4MVq6Avz1yKCey5XuFepq17MUcs+cUaQip3GHMeWQIorT2gtGrxzHSDw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-11.0.0-beta.0.tgz", + "integrity": "sha512-X1WszGgboOmRFoTiAFAIJ7bOJPxxqym0p3QfftTy684bO7DI9yFRFNfodm0kHn9KSjbg8Cnnqja8rIEEXqT7yA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/pdf-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pdf-export/-/pdf-export-10.11.3.tgz", - "integrity": "sha512-I/uHQAC0Q1xgtdhCYJsM+kZHZ3FfdBfpB8VJtmhYKL0oe94KtyNnShEx6T0/zfhp2KJIhYtfB+pBuvXBdDsJRw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pdf-export/-/pdf-export-11.0.0-beta.0.tgz", + "integrity": "sha512-tcpxZAc1AHx7LIhxFR+ECQaQQsNAPY/vx3aWa8S2AqGj3zxVho+OBy7KQN0NRML+8lbWkviyNLQyhvBZPz9EBg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "jspdf": "^4.2.1" }, "funding": { @@ -2669,69 +2700,108 @@ "url": "https://ko-fi.com/ghiscoding" } }, + "node_modules/@slickgrid-universal/pdf-export/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/react-row-detail-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/react-row-detail-plugin/-/react-row-detail-plugin-10.11.3.tgz", - "integrity": "sha512-l+Zn/0ICsFuVeHPaSWIdKL1hvVQE9ssmB0W+6XSJtSWJ0SluFwx53SfmIncR8LY0nPg+4Hal5grd32IoGiV9ag==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/react-row-detail-plugin/-/react-row-detail-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-LYGyp1ggT4LP3Ebr8iLZkoV97AEvBhnFuLne/khV3Y5BSSxwPRe8oaG6lZxyWcZOMqJoNuj0Ha4QtLFIgTzMKg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/row-detail-view-plugin": "10.11.3", - "react": "^19.3.0", - "react-dom": "^19.3.0", - "slickgrid-react": "10.11.3", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/row-detail-plugin": "11.0.0-beta.0", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "slickgrid-react": "11.0.0-beta.0", "tslib": "^2.8.1" } }, - "node_modules/@slickgrid-universal/row-detail-view-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-10.11.3.tgz", - "integrity": "sha512-nJhoCr0K1iYicHoJ21Uul9eMKAAxvm8KApu9nPIPgfLt5YraOFBXr/WkpGIbzxa4isXJze6IXC1296O+KtzxqQ==", + "node_modules/@slickgrid-universal/react-row-detail-plugin/node_modules/@slickgrid-universal/event-pub-sub": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-11.0.0-beta.0.tgz", + "integrity": "sha512-kpWOhdXL9n0R6dlKPgLSlfTYzGvwkOZxJnKBNQ+wfR16YosT7g/oFoxJXn1L/qtM9KLba17pMkLuvCuASLuAxQ==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, + "node_modules/@slickgrid-universal/react-row-detail-plugin/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, + "node_modules/@slickgrid-universal/row-detail-plugin": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-plugin/-/row-detail-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-cXxL0IXO80jBHC2v3UWjIaIuQfZmkeFgq0Zjr0EjTsu4vglLwLLrKmVeCDU8KIBAox3bIIZbJ4nN/6Re112rJA==", + "license": "MIT", + "dependencies": { + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" + } + }, + "node_modules/@slickgrid-universal/row-detail-plugin/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/rxjs-observable": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-10.11.3.tgz", - "integrity": "sha512-4OHNPuU4bL2BbTeOkeYGBiA5BSTNpsyuDo7IrelG96sMj7J3mZT9bCl4SZyzLkphVmjcvGmQ+iCWLWcOK6R1iw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-11.0.0-beta.0.tgz", + "integrity": "sha512-2X6GyJ9c9sKlzP/jZ3+iFRy8FqAu1q3ZKCZX3NOd69JEdsU8AF6GUR+MBrltbcq2wexXAz3JCTByAE69aSwPAA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", + "@slickgrid-universal/common": "11.0.0-beta.0", "rxjs": "^7.8.2" } }, "node_modules/@slickgrid-universal/sql": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/sql/-/sql-10.11.3.tgz", - "integrity": "sha512-0ke7FI/V0DeFk9aL/K9B15yhrOXXSs1wodTJIja0jpsPTY1PzrmRAZQCre7PHdW/Yxsl1ZfmBnEPruxuubJJeQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/sql/-/sql-11.0.0-beta.0.tgz", + "integrity": "sha512-T3wYvvsqEKBzJFxTEEh8cP8I22KxzToZ81UBrE0RVcgkiaBzJcvkHKipMuuczpmJuG3H7WbW9Vn9OojIAEaEOA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", "url": "https://ko-fi.com/ghiscoding" } }, + "node_modules/@slickgrid-universal/sql/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/text-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-10.11.3.tgz", - "integrity": "sha512-096ugLGyejxdURbUMna7Sf0kQshQTF6G+tI+BnYSVjoAyCfJoZ5iOVCJXcJ65rrk6OWCvtHuT7XLLZEsOKDIPw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-11.0.0-beta.0.tgz", + "integrity": "sha512-/RM8ckkYTevsP6njI8DKuj6/d703k80MWpon8+3wNXANpGH9bldjfrdvlirnSaGfrhzoBQ3QSA6HckR4oVheVg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", "url": "https://ko-fi.com/ghiscoding" } }, + "node_modules/@slickgrid-universal/text-export/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", + "license": "MIT" + }, "node_modules/@slickgrid-universal/utils": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-10.10.0.tgz", @@ -2797,12 +2867,6 @@ "@types/react": "^19.3.0" } }, - "node_modules/@types/sortablejs": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz", - "integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==", - "license": "MIT" - }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -2963,9 +3027,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.16", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.16.tgz", - "integrity": "sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -3447,9 +3511,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { @@ -3507,9 +3571,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", + "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", "dev": true, "funding": [ { @@ -3527,9 +3591,9 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3546,24 +3610,24 @@ } }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", - "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", "license": "MIT", "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { - "react": "^19.3.0" + "react": "^19.3.1" } }, "node_modules/react-router": { @@ -3620,13 +3684,13 @@ } }, "node_modules/rolldown": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz", - "integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.152.0", + "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -3636,21 +3700,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.12", - "@rolldown/binding-android-arm64": "1.2.12", - "@rolldown/binding-darwin-arm64": "1.2.12", - "@rolldown/binding-darwin-x64": "1.2.12", - "@rolldown/binding-freebsd-x64": "1.2.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", - "@rolldown/binding-linux-arm64-gnu": "1.2.12", - "@rolldown/binding-linux-arm64-musl": "1.2.12", - "@rolldown/binding-linux-ppc64-gnu": "1.2.12", - "@rolldown/binding-linux-s390x-gnu": "1.2.12", - "@rolldown/binding-linux-x64-gnu": "1.2.12", - "@rolldown/binding-linux-x64-musl": "1.2.12", - "@rolldown/binding-openharmony-arm64": "1.2.12", - "@rolldown/binding-win32-arm64-msvc": "1.2.12", - "@rolldown/binding-win32-x64-msvc": "1.2.12" + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" } }, "node_modules/rtl-css-js": { @@ -3699,33 +3763,42 @@ "license": "MIT" }, "node_modules/slickgrid-react": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-10.11.3.tgz", - "integrity": "sha512-ogDg/vX0aXwlfc1dnQ1ALLDJy3345h78HKrv3rzZfsQctGbWXNgphO5ut4KRAbW+z+03+Wb2WcGYYCdU8yJtzA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-11.0.0-beta.0.tgz", + "integrity": "sha512-FCAPobULSLOCX4mnavagncfxbBLOzUSOET+LCVJ5t61M48x6So9wN2H/rDCJgW1ppNKYdmQyiCtJl3J+Sy51Dg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/custom-footer-component": "10.11.3", - "@slickgrid-universal/empty-warning-component": "10.11.3", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/pagination-component": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/custom-footer-component": "11.0.0-beta.0", + "@slickgrid-universal/empty-warning-component": "11.0.0-beta.0", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/pagination-component": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=19.0.0" } }, - "node_modules/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==", + "node_modules/slickgrid-react/node_modules/@slickgrid-universal/event-pub-sub": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-11.0.0-beta.0.tgz", + "integrity": "sha512-kpWOhdXL9n0R6dlKPgLSlfTYzGvwkOZxJnKBNQ+wfR16YosT7g/oFoxJXn1L/qtM9KLba17pMkLuvCuASLuAxQ==", + "license": "MIT", + "dependencies": { + "@slickgrid-universal/utils": "11.0.0-beta.0" + } + }, + "node_modules/slickgrid-react/node_modules/@slickgrid-universal/utils": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", "license": "MIT" }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3858,16 +3931,16 @@ } }, "node_modules/vite": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.3.tgz", - "integrity": "sha512-cTAldKPImjg6c+gk48U19POPn3GCBzZwpdsN8ZMEEcbpes+6/wvfqUd0C2y3qYY4wsj8PwgFwrZ/1jBPVttMSg==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", - "postcss": "^8.5.28", - "rolldown": "~1.2.11", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", "tinyglobby": "^0.2.17" }, "bin": { @@ -3884,7 +3957,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.7.1", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", diff --git a/react-fluent-ui/package.json b/react-fluent-ui/package.json index e720a1e..93501bf 100644 --- a/react-fluent-ui/package.json +++ b/react-fluent-ui/package.json @@ -20,22 +20,22 @@ "dependencies": { "@fluentui/react-components": "^9.74.9", "@fluentui/react-icons": "^2.0.343", - "@slickgrid-universal/common": "^10.11.3", - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", + "@slickgrid-universal/common": "^11.0.0-beta.0", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", "@slickgrid-universal/event-pub-sub": "^10.10.0", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/pdf-export": "^10.11.3", - "@slickgrid-universal/react-row-detail-plugin": "^10.11.3", - "@slickgrid-universal/row-detail-view-plugin": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/sql": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", - "dompurify": "^3.4.16", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/pdf-export": "^11.0.0-beta.0", + "@slickgrid-universal/react-row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/sql": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", + "dompurify": "^3.4.17", "react": "^19.3.0", "react-dom": "^19.3.0", "react-router": "^8.4.0", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", @@ -51,7 +51,7 @@ "rxjs": "^7.8.2", "sass": "^1.105.1", "typescript": "^6.0.3", - "vite": "^8.3.3", + "vite": "^8.3.5", "vite-tsconfig-paths": "^6.1.1" }, "overrides": { diff --git a/react-fluent-ui/src/examples/slickgrid/Example01.tsx b/react-fluent-ui/src/examples/slickgrid/Example01.tsx index 47941a3..3811081 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example01.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example01.tsx @@ -1,7 +1,6 @@ import { Button } from '@fluentui/react-components'; import { useState } from 'react'; import { Formatters, SlickgridReact, type Column, type GridOption, type SlickgridReactInstance } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; const NB_ITEMS = 995; @@ -31,7 +30,7 @@ const Example1: React.FC = () => { gridWidth: 800, enableAutoResize: false, enableSorting: true, - ...baseFluentGridOption, + iconSet: 'fluent', }; // copy the same Grid Options and Column Definitions to 2nd grid @@ -47,7 +46,7 @@ const Example1: React.FC = () => { pageSizes: [5, 10, 20, 25, 50], pageSize: 5, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; function isBrowserDarkModeEnabled() { diff --git a/react-fluent-ui/src/examples/slickgrid/Example02.tsx b/react-fluent-ui/src/examples/slickgrid/Example02.tsx index 93e7710..e2747cf 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example02.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example02.tsx @@ -9,7 +9,6 @@ import { type OnEventArgs, type SlickgridReactInstance, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; const Example02: React.FC = () => { const [columns, setColumns] = useState([]); @@ -127,7 +126,7 @@ const Example02: React.FC = () => { dataContextIds: [1, 2, 6, 7], // (recommended) select by your data object IDs }, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); diff --git a/react-fluent-ui/src/examples/slickgrid/Example03.tsx b/react-fluent-ui/src/examples/slickgrid/Example03.tsx index 6295629..2111936 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example03.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example03.tsx @@ -16,7 +16,6 @@ import { type Grouping, type SlickgridReactInstance, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; const Example03: React.FC = () => { const [columns, setColumns] = useState([]); @@ -256,7 +255,7 @@ const Example03: React.FC = () => { // enableTextExport: true, // enablePdfExport: true, // enableExcelExport: true, - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); diff --git a/react-fluent-ui/src/examples/slickgrid/Example04.tsx b/react-fluent-ui/src/examples/slickgrid/Example04.tsx index 914c340..64e3597 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example04.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example04.tsx @@ -3,7 +3,6 @@ import { type EventPubSubService } from '@slickgrid-universal/event-pub-sub'; import { ReactRowDetailView } from '@slickgrid-universal/react-row-detail-plugin'; import React, { useEffect, useRef, useState } from 'react'; import { Editors, Filters, Formatters, SlickgridReact, type Column, type GridOption, type SlickgridReactInstance } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import { ExampleDetailPreload } from './Example-detail-preload.js'; import Example04DetailView from './Example04-detail-view.js'; @@ -161,7 +160,6 @@ const Example04: React.FC = () => { }, enableFiltering: true, enableRowDetailView: true, - // rowTopOffsetRenderType: 'top', // no longer necessary with v10.10.0 and above; otherwise, uncomment this line darkMode, datasetIdPropertyName: 'rowId', preRegisterExternalExtensions: (pubSubService) => { @@ -169,7 +167,6 @@ const Example04: React.FC = () => { return [{ name: 'rowDetailView', instance: rowDetail }]; }, rowDetailView: { - renderMode: 'overlay', process: (item) => simulateServerAsyncCall(item), loadOnce: true, singleRowExpand: false, @@ -188,7 +185,7 @@ const Example04: React.FC = () => { selectionOptions: { selectActiveRow: true, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; } diff --git a/react-fluent-ui/src/examples/slickgrid/Example05.tsx b/react-fluent-ui/src/examples/slickgrid/Example05.tsx index e5c9206..0fbf732 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example05.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example05.tsx @@ -1,3 +1,4 @@ +import { Button } from '@fluentui/react-components'; import React, { useEffect, useRef, useState } from 'react'; import { Editors, @@ -11,10 +12,6 @@ import { type GridOption, type SlickgridReactInstance, } from 'slickgrid-react'; -import './example05.scss'; // provide custom CSS/SASS styling - -import { Button } from '@fluentui/react-components'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import { showToast } from './utilities.js'; const Example05: React.FC = () => { @@ -22,9 +19,9 @@ const Example05: React.FC = () => { const [dataset] = useState(getData()); const [gridOptions, setGridOptions] = useState(undefined); const [darkModeGrid, setDarkModeGrid] = useState(false); - const [frozenColumnCount, setFrozenColumnCount] = useState(2); - const [frozenRowCount, setFrozenRowCount] = useState(3); - const [isFrozenBottom, setIsFrozenBottom] = useState(false); + const [pinnedColumnCount, setPinnedColumnCount] = useState(2); + const [pinnedRowCount, setPinnedRowCount] = useState(3); + const [isPinnedBottom, setIsPinnedBottom] = useState(false); const reactGridRef = useRef(null); const slickEventHandler = new SlickEventHandler(); @@ -41,8 +38,7 @@ const Example05: React.FC = () => { function reactGridReady(reactGrid: SlickgridReactInstance) { reactGridRef.current = reactGrid; - // with frozen (pinned) grid, in order to see the entire row being highlighted when hovering - // we need to do some extra tricks (that is because frozen grids use 2 separate div containers) + // With a pinned grid, the entire row is highlighted through its shared row regions. // the trick is to use row selection to highlight when hovering current row and remove selection once we're not slickEventHandler.subscribe(reactGridRef.current?.slickGrid.onMouseEnter, (event) => highlightRow(event, true)); slickEventHandler.subscribe(reactGridRef.current?.slickGrid.onMouseLeave, (event) => highlightRow(event, false)); @@ -253,14 +249,10 @@ const Example05: React.FC = () => { editable: true, autoEdit: true, enableExcelCopyBuffer: true, - frozenColumn: 2, - frozenRow: 3, - // frozenBottom: true, // if you want to freeze the bottom instead of the top, you can enable this property + pinning: { columns: { left: 2 }, rows: { top: [0, 1, 2] } }, - // show both Frozen Columns in HeaderMenu & GridMenu, these are opt-in commands so they're disabled by default - gridMenu: { hideClearFrozenColumnsCommand: false }, - headerMenu: { hideFreezeColumnsCommand: false }, - ...baseFluentGridOption, + // show both single-column and bulk pinning commands in HeaderMenu & GridMenu; these are opt-in commands + iconSet: 'fluent', }; setColumns(columns); @@ -290,26 +282,26 @@ const Example05: React.FC = () => { } /** change dynamically, through slickgrid "setOptions()" the number of pinned columns */ - function changeFrozenColumnCount(e: React.FormEvent) { - const frozenColumn = +((e.target as HTMLInputElement)?.value ?? 0); - setFrozenColumnCount(frozenColumn); + function changePinnedColumnCount(e: React.FormEvent) { + const pinnedColumn = +((e.target as HTMLInputElement)?.value ?? 0); + setPinnedColumnCount(pinnedColumn); } - function updateFrozenColumnCount() { + function updatePinnedColumnCount() { reactGridRef.current?.slickGrid?.setOptions({ - frozenColumn: frozenColumnCount, + pinning: { columns: { left: pinnedColumnCount } }, }); } /** change dynamically, through slickgrid "setOptions()" the number of pinned rows */ - function changeFrozenRowCount(e: React.FormEvent) { - const frozenRow = +((e.target as HTMLInputElement)?.value ?? 0); - setFrozenRowCount(frozenRow); + function changePinnedRowCount(e: React.FormEvent) { + const pinnedRow = +((e.target as HTMLInputElement)?.value ?? 0); + setPinnedRowCount(pinnedRow); } - function updateFrozenRowCount() { + function updatePinnedRowCount() { reactGridRef.current?.slickGrid?.setOptions({ - frozenRow: frozenRowCount, + pinning: { rows: { top: Array.from({ length: Math.max(0, pinnedRowCount) }, (_value, index) => index) } }, }); } @@ -330,8 +322,8 @@ const Example05: React.FC = () => { showToast(args.validationResults.msg, 'danger'); } - function setFrozenColumns(frozenCols: number) { - reactGridRef.current?.slickGrid.setOptions({ frozenColumn: frozenCols }); + function setPinnedColumns(pinnedCols: number) { + reactGridRef.current?.slickGrid.setOptions({ pinning: { columns: { left: pinnedCols } } }); const updatedGridOptions = reactGridRef.current?.slickGrid.getOptions(); setGridOptions(updatedGridOptions); } @@ -348,20 +340,20 @@ const Example05: React.FC = () => { } /** toggle dynamically, through slickgrid "setOptions()" the top/bottom pinned location */ - function toggleFrozenBottomRows() { + function togglePinnedBottomRows() { reactGridRef.current?.slickGrid.setOptions({ - frozenBottom: !isFrozenBottom, + pinning: { rows: { top: isPinnedBottom ? [0, 1, 2] : [], bottom: isPinnedBottom ? [] : [0, 1, 2] } }, }); - const newIsFrozenBottom = !isFrozenBottom; - setIsFrozenBottom(newIsFrozenBottom); + const newIsPinnedBottom = !isPinnedBottom; + setIsPinnedBottom(newIsPinnedBottom); } return !gridOptions ? ( '' ) : (
-

Example 5: Pinned (frozen) Columns/Rows

+

Example 5: Pinned Columns/Rows

@@ -369,11 +361,12 @@ const Example05: React.FC = () => { changeFrozenRowCount($event)} + defaultValue={pinnedRowCount} + onInput={($event) => changePinnedRowCount($event)} /> - @@ -381,11 +374,12 @@ const Example05: React.FC = () => { changeFrozenColumnCount($event)} + defaultValue={pinnedColumnCount} + onInput={($event) => changePinnedColumnCount($event)} /> - @@ -398,17 +392,17 @@ const Example05: React.FC = () => { Toggle Dark Mode - - - - : {isFrozenBottom ? 'Bottom' : 'Top'} + : {isPinnedBottom ? 'Bottom' : 'Top'}
diff --git a/react-fluent-ui/src/examples/slickgrid/Example06.tsx b/react-fluent-ui/src/examples/slickgrid/Example06.tsx index 83f541e..8c6343e 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example06.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example06.tsx @@ -13,7 +13,6 @@ import { import './example06.scss'; // provide custom CSS/SASS styling import { Button } from '@fluentui/react-components'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; const NB_ITEMS = 500; @@ -139,7 +138,7 @@ const Example06: React.FC = () => { enableExcelExport: true, excelExportOptions: { exportWithFormatter: true, sanitizeDataExport: true }, externalResources: [new ExcelExportService()], - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); diff --git a/react-fluent-ui/src/examples/slickgrid/Example07.tsx b/react-fluent-ui/src/examples/slickgrid/Example07.tsx index b015079..829d246 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example07.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example07.tsx @@ -15,7 +15,6 @@ import { type GridOption, type SlickgridReactInstance, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import './example07.scss'; const NB_ROWS = 200; @@ -284,7 +283,7 @@ const Example07: React.FC = () => { enableCellNavigation: true, enableFiltering: true, cellHighlightCssClass: 'changed', - ...baseFluentGridOption, + iconSet: 'fluent', }; columnsRef.current = columns; diff --git a/react-fluent-ui/src/examples/slickgrid/Example08.tsx b/react-fluent-ui/src/examples/slickgrid/Example08.tsx index 379fc78..1d6ec64 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example08.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example08.tsx @@ -18,7 +18,6 @@ import { type SlickgridReactInstance, type SlickGroupTotals, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import './example08.scss'; interface GroceryItem { @@ -356,7 +355,7 @@ const Example08: React.FC = () => { sheet.data.push([{ value: customTitle, metadata: { style: excelFormat.id } }]); }, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); diff --git a/react-fluent-ui/src/examples/slickgrid/Example09.tsx b/react-fluent-ui/src/examples/slickgrid/Example09.tsx index d28deb1..0f0c408 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example09.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example09.tsx @@ -11,7 +11,6 @@ import { type GridOption, type SlickgridReactInstance, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import { showToast } from './utilities.js'; import './example09.scss'; // provide custom CSS/SASS styling @@ -174,7 +173,7 @@ const Example09: React.FC = () => { }, serverWaitDelayRef.current); }, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); diff --git a/react-fluent-ui/src/examples/slickgrid/Example11.tsx b/react-fluent-ui/src/examples/slickgrid/Example11.tsx index 915d94a..4cb9ebb 100644 --- a/react-fluent-ui/src/examples/slickgrid/Example11.tsx +++ b/react-fluent-ui/src/examples/slickgrid/Example11.tsx @@ -26,7 +26,6 @@ import { type SliderOption, type VanillaCalendarOption, } from 'slickgrid-react'; -import { baseFluentGridOption } from './base-fluent-grid-options.js'; import { showToast } from './utilities.js'; import './example11.scss'; // provide custom CSS/SASS styling import COUNTRIES_COLLECTION from './data/countries.json'; @@ -429,21 +428,18 @@ const Example11: React.FC = () => { command: 'edit', title: 'Edit Row', iconCssClass: 'fi fi-edit', - positionOrder: 66, action: () => openCompositeModal('edit'), }, { command: 'clone', title: 'Clone Row', iconCssClass: 'fi fi-copy', - positionOrder: 66, action: () => openCompositeModal('clone'), }, 'divider', { command: 'delete-row', title: 'Delete Row', - positionOrder: 64, iconCssClass: 'fi fi-dismiss color-danger', cssClass: 'red', textCssClass: 'text-italic color-danger-light', @@ -539,7 +535,7 @@ const Example11: React.FC = () => { activateCellOnMenuClick: true, // this is important to know which row index to use for Composite Editor }, gridMenu: { - hideToggleDarkModeCommand: false, // hidden by default + showToggleDarkModeCommand: true, // hidden by default onCommand: (_, args) => { if (args.command === 'toggle-dark-mode') { const newDarkMode = !darkMode; @@ -548,7 +544,7 @@ const Example11: React.FC = () => { } }, }, - ...baseFluentGridOption, + iconSet: 'fluent', }; setColumns(columns); setGridOptions(gridOptions); diff --git a/react-fluent-ui/src/examples/slickgrid/base-fluent-grid-options.ts b/react-fluent-ui/src/examples/slickgrid/base-fluent-grid-options.ts deleted file mode 100644 index b6503ef..0000000 --- a/react-fluent-ui/src/examples/slickgrid/base-fluent-grid-options.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { GridOption } from 'slickgrid-react'; - -export const baseFluentGridOption: GridOption = { - contextMenu: { - iconCollapseAllGroupsCommand: 'fi fi-arrow-minimize', - iconExpandAllGroupsCommand: 'fi fi-arrow-maximize', - iconClearGroupingCommand: 'fi fi-dismiss', - iconCopyCellValueCommand: 'fi fi-copy', - iconExportCsvCommand: 'fi fi-arrow-download', - iconExportExcelCommand: 'fi fi-arrow-download', - iconExportPdfCommand: 'fi fi-arrow-download', - iconExportTextDelimitedCommand: 'fi fi-arrow-download', - subItemChevronClass: 'fi fi-chevron-right', - }, - gridMenu: { - iconCssClass: 'fi fi-navigation', - iconClearAllFiltersCommand: 'fi fi-filter-dismiss', - iconClearAllSortingCommand: 'fi fi-arrow-sort', - iconClearFrozenColumnsCommand: 'fi fi-pin-off', - iconExportCsvCommand: 'fi fi-arrow-download', - iconExportExcelCommand: 'fi fi-arrow-download', - iconExportPdfCommand: 'fi fi-arrow-download', - iconExportTextDelimitedCommand: 'fi fi-arrow-download', - iconRefreshDatasetCommand: 'fi fi-arrow-sync', - iconToggleDarkModeCommand: 'fi fi-dark-theme', - iconToggleFilterCommand: 'fi fi-split-horizontal', - iconTogglePreHeaderCommand: 'fi fi-split-horizontal', - subItemChevronClass: 'fi fi-chevron-right', - }, - headerMenu: { - iconClearFilterCommand: 'fi fi-filter-dismiss', - iconClearSortCommand: 'fi fi-arrow-sort', - iconFilterShortcutSubMenu: 'fi fi-filter', - iconFreezeColumns: 'fi fi-pin', - iconUnfreezeColumns: 'fi fi-pin-off', - iconSortAscCommand: 'fi fi-sort-arrow-up', - iconSortDescCommand: 'fi fi-sort-arrow-down', - iconColumnHideCommand: 'fi fi-dismiss', - iconColumnResizeByContentCommand: 'fi fi-arrow-bidirection', - subItemChevronClass: 'fi fi-chevron-right', - }, -}; diff --git a/react-fluent-ui/src/examples/slickgrid/example05.scss b/react-fluent-ui/src/examples/slickgrid/example05.scss deleted file mode 100644 index 6e31054..0000000 --- a/react-fluent-ui/src/examples/slickgrid/example05.scss +++ /dev/null @@ -1,11 +0,0 @@ -/** You can change the pinned/frozen border styling through this css override */ - -.slick-row .slick-cell.frozen:last-child, -.slick-headerrow-column.frozen:last-child, -.slick-footerrow-column.frozen:last-child { - border-right: 1px solid #969696 !important; -} - -.slick-pane-bottom { - border-top: 1px solid #969696 !important; -} diff --git a/react-fluent-ui/src/examples/slickgrid/fluent-icons.tsx b/react-fluent-ui/src/examples/slickgrid/fluent-icons.tsx index dc52b19..a3cd3ce 100644 --- a/react-fluent-ui/src/examples/slickgrid/fluent-icons.tsx +++ b/react-fluent-ui/src/examples/slickgrid/fluent-icons.tsx @@ -1,5 +1,7 @@ import React, { useState } from 'react'; +// Fluent icons subset picked from: +// https://storybooks.fluentui.dev/react/?path=/docs/fluent-system-icons_icons-catalog--docs const FluentIconExample: React.FC = () => { const [icons] = useState([ 'fi-arrow-download', @@ -12,6 +14,8 @@ const FluentIconExample: React.FC = () => { 'fi-arrow-minimize', 'fi-arrow-reply', 'fi-arrow-sort', + 'fi-arrow-sort-down', + 'fi-arrow-sort-up', 'fi-arrow-sync', 'fi-arrow-redo', 'fi-arrow-undo', diff --git a/react-fluent-ui/src/styles.scss b/react-fluent-ui/src/styles.scss index 806a4ea..e098404 100644 --- a/react-fluent-ui/src/styles.scss +++ b/react-fluent-ui/src/styles.scss @@ -12,6 +12,11 @@ $primary-color: #0e6cfa; $slick-primary-color: $primary-color // $slick-input-focus-box-shadow: 0 0 0 0.25rem rgba($primary-color, 0.25), ); +// optional packages styling, must be loaded after the theme to reuse its SASS variables +@use '@slickgrid-universal/composite-editor-component/dist/styles/sass/slick-composite-editor.scss'; +@use '@slickgrid-universal/custom-tooltip-plugin/dist/styles/sass/slick-custom-tooltip.scss'; +@use '@slickgrid-universal/row-detail-plugin/dist/styles/sass/slick-row-detail.scss'; + // -- 2. load with legacy `@import` // $slick-primary-color: red; // $slick-link-color: red; diff --git a/single-locale-without-i18n/package-lock.json b/single-locale-without-i18n/package-lock.json index d65a586..38b94ab 100644 --- a/single-locale-without-i18n/package-lock.json +++ b/single-locale-without-i18n/package-lock.json @@ -9,16 +9,16 @@ "version": "4.0.0", "license": "MIT", "dependencies": { - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", "bootstrap": "^5.3.8", - "dompurify": "^3.4.16", - "react": "^19.3.0", + "dompurify": "^3.4.17", + "react": "^19.3.1", "react-dom": "^19.3.0", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", @@ -1220,22 +1220,20 @@ "license": "MIT" }, "node_modules/@slickgrid-universal/common": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-10.11.3.tgz", - "integrity": "sha512-vURyq55n8+/B4HKipq84FqW9DlkCTQ28JH7SX+KulMeLYxmzSTwwSYLMqB/UUBecaw5VBGDmDM2MUVOfhYw7qQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-11.0.0-beta.0.tgz", + "integrity": "sha512-x+3s2PJcKzOWO0xZEh5AEmciUqbEWwgbu+25BUNjCvkTELtsPKKI/O9d4RUiqGt47zHiPVyDTg6nEPsMRRvFUw==", "license": "MIT", "dependencies": { "@excel-builder-vanilla/types": "^5.3.1", "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/utils": "10.10.0", - "@types/sortablejs": "^1.15.9", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "@types/trusted-types": "^2.0.7", "autocompleter": "^10.0.0", "dequal": "^2.0.3", "multiple-select-vanilla": "^5.2.3", - "sortablejs": "^1.15.7", "vanilla-calendar-pro": "^3.4.0" }, "engines": { @@ -1247,64 +1245,64 @@ } }, "node_modules/@slickgrid-universal/composite-editor-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-10.11.3.tgz", - "integrity": "sha512-WYDwjp/vGIoFVbLbv5s0QToWwx/HodzlCA9DfiRHTiRfayCQJXB8oHjbEg+YsYvVe1dnEo6yCIccPv3va+Oovg==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-11.0.0-beta.0.tgz", + "integrity": "sha512-j41hSz9QHJi9HwZ52DpepGjBFvQ3946whHI7YRKO5LaL4lDIJpfHBV2el/sUMD6fwhiXaL+juZd+vzLGcKm7rQ==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/custom-footer-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-10.11.3.tgz", - "integrity": "sha512-u4B344fYfhhsRYpwRiA4fKp9qj2tB7wQaHqlb7mS3f78DhJcsvTfi7ndBnChAshNkIkVlalf7gMQcqdN8zZWjw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-11.0.0-beta.0.tgz", + "integrity": "sha512-Pbar5mf5rxpx2JPkofHPzkTuNTddO3PQlBW0qD4KbZz+PuULcIx/DUXNchoTOwRQEUDTkwMZ/mEeqbmAKgC4Sg==", "license": "MIT", "dependencies": { "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/custom-tooltip-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-10.11.3.tgz", - "integrity": "sha512-3adnvQUQC/mPsHETMFO+COxmJ+TTbLSDXxMfXsO9xGLd0Y8GrULYFnGvznhvAjlMpxN8CJum+yFElrJpfqL1bQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-5NkEYRO2nMGwCX4YgzMjWl96CDXAd6pOnK/BSakEyCt0jWLPdNVFv8CQigv+opEFb/u/6B4fRlHYoQZtoj3ucA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/empty-warning-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-10.11.3.tgz", - "integrity": "sha512-mtWUL6GuzT6O9eueb3HXgeY9LUIyPPfsoI2po2g81wegBQz4D9QNPJe5koeA6QPZG2xYhGxQGvcA61pnP8TtMw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-11.0.0-beta.0.tgz", + "integrity": "sha512-bAD5V7rgPV4gBhXAdKji5jxrahrSy3jn1RcYoxwIsiMjB+VCi3cPezz5W/6EoTjaPbY7VOp4ESfpQGwDmqGx9A==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/event-pub-sub": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-10.10.0.tgz", - "integrity": "sha512-FKCTlV272lUNolIYeYYPggE3ducmmUeD+pxvHd+pCb1885080drQIr+k5wd+Q1eZj2P7BrlPKFEVF79ZL0QUmA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-11.0.0-beta.0.tgz", + "integrity": "sha512-kpWOhdXL9n0R6dlKPgLSlfTYzGvwkOZxJnKBNQ+wfR16YosT7g/oFoxJXn1L/qtM9KLba17pMkLuvCuASLuAxQ==", "license": "MIT", "dependencies": { - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/excel-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-10.11.3.tgz", - "integrity": "sha512-Zoh4NcdHHty7tZf7T/slR0jkLYlZP5FeanP8MX2GDEezONl1/Z+8PUVEqqT70XLT/3KMGuhX/DK2A2R1a9mYAQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-11.0.0-beta.0.tgz", + "integrity": "sha512-KrLDb5/lvupdGFL40a7NDifkGGkxuAUirhjhDYoEjEfTVAzyUIOIGi/jbkoTCWe5vscALRXmSqu3i9w6VLeVXg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "excel-builder-vanilla": "^5.3.1" }, "funding": { @@ -1313,33 +1311,33 @@ } }, "node_modules/@slickgrid-universal/pagination-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-10.11.3.tgz", - "integrity": "sha512-3QTbRokIFZgpRONXP9MJfE4YKVsnXS4MVq6Avz1yKCey5XuFepq17MUcs+cUaQip3GHMeWQIorT2gtGrxzHSDw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-11.0.0-beta.0.tgz", + "integrity": "sha512-X1WszGgboOmRFoTiAFAIJ7bOJPxxqym0p3QfftTy684bO7DI9yFRFNfodm0kHn9KSjbg8Cnnqja8rIEEXqT7yA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/rxjs-observable": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-10.11.3.tgz", - "integrity": "sha512-4OHNPuU4bL2BbTeOkeYGBiA5BSTNpsyuDo7IrelG96sMj7J3mZT9bCl4SZyzLkphVmjcvGmQ+iCWLWcOK6R1iw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-11.0.0-beta.0.tgz", + "integrity": "sha512-2X6GyJ9c9sKlzP/jZ3+iFRy8FqAu1q3ZKCZX3NOd69JEdsU8AF6GUR+MBrltbcq2wexXAz3JCTByAE69aSwPAA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", + "@slickgrid-universal/common": "11.0.0-beta.0", "rxjs": "^7.8.2" } }, "node_modules/@slickgrid-universal/text-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-10.11.3.tgz", - "integrity": "sha512-096ugLGyejxdURbUMna7Sf0kQshQTF6G+tI+BnYSVjoAyCfJoZ5iOVCJXcJ65rrk6OWCvtHuT7XLLZEsOKDIPw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-11.0.0-beta.0.tgz", + "integrity": "sha512-/RM8ckkYTevsP6njI8DKuj6/d703k80MWpon8+3wNXANpGH9bldjfrdvlirnSaGfrhzoBQ3QSA6HckR4oVheVg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", @@ -1347,9 +1345,9 @@ } }, "node_modules/@slickgrid-universal/utils": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-10.10.0.tgz", - "integrity": "sha512-Qwiv7Dl2O7qsV59WdSJjKpOzNZQpYwKJupJfdd/ru0gkEG3aD2Q0njA2hw0m+nhuQcLME+vbrMuMMnMsuQEwfw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", "license": "MIT" }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { @@ -1609,12 +1607,6 @@ "@types/react": "^19.3.0" } }, - "node_modules/@types/sortablejs": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz", - "integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==", - "license": "MIT" - }, "node_modules/@types/text-encoding-utf-8": { "version": "1.0.5", "dev": true, @@ -4141,9 +4133,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.16", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.16.tgz", - "integrity": "sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -9837,9 +9829,9 @@ "license": "MIT" }, "node_modules/multiple-select-vanilla": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-5.2.3.tgz", - "integrity": "sha512-2M8grjlGMEGY6ZsgFTgZhDrpCcoxdv8Bw+xAR647E2EPySTYLc+abSGfTx5A8ueTuyRyhw3gxFz499mv51PQJw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-5.2.4.tgz", + "integrity": "sha512-PIaLv+7gDTF67WeLkcpBOPuFw6DJOWWDU9CadEQiA+2lekF3qXg/dkA+65dMuUu3GuezB29OzEqsDfl23lzrLA==", "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.7" @@ -10531,9 +10523,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11838,17 +11830,17 @@ } }, "node_modules/slickgrid-react": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-10.11.3.tgz", - "integrity": "sha512-ogDg/vX0aXwlfc1dnQ1ALLDJy3345h78HKrv3rzZfsQctGbWXNgphO5ut4KRAbW+z+03+Wb2WcGYYCdU8yJtzA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-11.0.0-beta.0.tgz", + "integrity": "sha512-FCAPobULSLOCX4mnavagncfxbBLOzUSOET+LCVJ5t61M48x6So9wN2H/rDCJgW1ppNKYdmQyiCtJl3J+Sy51Dg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/custom-footer-component": "10.11.3", - "@slickgrid-universal/empty-warning-component": "10.11.3", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/pagination-component": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/custom-footer-component": "11.0.0-beta.0", + "@slickgrid-universal/empty-warning-component": "11.0.0-beta.0", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/pagination-component": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "dequal": "^2.0.3" }, "peerDependencies": { @@ -11864,12 +11856,6 @@ "tslib": "^2.0.3" } }, - "node_modules/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==", - "license": "MIT" - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/single-locale-without-i18n/package.json b/single-locale-without-i18n/package.json index 206154c..9acbee4 100644 --- a/single-locale-without-i18n/package.json +++ b/single-locale-without-i18n/package.json @@ -30,16 +30,16 @@ "lint": "eslint . --no-cache" }, "dependencies": { - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", "bootstrap": "^5.3.8", - "dompurify": "^3.4.16", - "react": "^19.3.0", + "dompurify": "^3.4.17", + "react": "^19.3.1", "react-dom": "^19.3.0", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", diff --git a/single-locale-without-i18n/src/examples/slickgrid/Example2.tsx b/single-locale-without-i18n/src/examples/slickgrid/Example2.tsx index 89a7ad2..594032d 100644 --- a/single-locale-without-i18n/src/examples/slickgrid/Example2.tsx +++ b/single-locale-without-i18n/src/examples/slickgrid/Example2.tsx @@ -132,16 +132,13 @@ const Example2: React.FC = () => { sheet.data.push(cols); } }, - gridMenu: { - hideExportCsvCommand: false, // false by default, so it's optional - hideExportTextDelimitedCommand: false // true by default, so if you want it, you will need to disable the flag - }, enableExcelExport: true, enableTextExport: true, textExportOptions: { // set at the grid option level, meaning all column will evaluate the Formatter (when it has a Formatter defined) exportWithFormatter: true, sanitizeDataExport: true, + menuFormats: ['csv', 'txt'] }, externalResources: [excelExportService, textExportService], }; diff --git a/single-locale-without-i18n/src/examples/slickgrid/locales/fr.ts b/single-locale-without-i18n/src/examples/slickgrid/locales/fr.ts index 0896bbf..d3c1fee 100644 --- a/single-locale-without-i18n/src/examples/slickgrid/locales/fr.ts +++ b/single-locale-without-i18n/src/examples/slickgrid/locales/fr.ts @@ -20,6 +20,11 @@ export const localeFrench = { TEXT_EXPORT_TO_TEXT_FORMAT: 'Exporter en format texte', TEXT_FILTER_SHORTCUTS: 'Raccourcis de filtre', TEXT_FORCE_FIT_COLUMNS: 'Ajustement forcé des colonnes', + TEXT_PIN_COLUMN: 'Épinglage de colonne', + TEXT_PIN_COLUMNS_LEFT: 'Épingler à gauche jusqu’ici', + TEXT_PIN_COLUMNS_RIGHT: 'Épingler à droite à partir d’ici', + TEXT_PIN_LEFT: 'Épingler à gauche', + TEXT_PIN_RIGHT: 'Épingler à droite', TEXT_GROUP_BY: 'Grouper par', TEXT_HIDE_COLUMN: 'Cacher la colonne', TEXT_LAST_UPDATE: 'Dernière mise à jour', @@ -33,10 +38,11 @@ export const localeFrench = { TEXT_SORT_ASCENDING: 'Trier par ordre croissant', TEXT_SORT_DESCENDING: 'Trier par ordre décroissant', TEXT_STARTS_WITH: 'Commence par', - TEXT_UNFREEZE_COLUMNS: 'Dégeler les colonnes', + TEXT_UNPIN_COLUMN: 'Désépingler la colonne', + TEXT_UNPIN_COLUMNS: 'Désépingler toutes les colonnes', TEXT_X_OF_Y_SELECTED: '# de % sélectionné', TEXT_X_OF_Y_MASS_SELECTED: '{{x}} de {{y}} sélectionnés', - TEXT_CLEAR_PINNING: 'Dégeler les colonnes/rangées', + TEXT_CLEAR_ALL_PINNING: 'Supprimer toutes les épingles', TEXT_EQUAL_TO: 'Égal à', TEXT_GREATER_THAN: 'Plus grand que', TEXT_GREATER_THAN_OR_EQUAL_TO: 'Plus grand ou égal à', diff --git a/with-i18n-translate/package-lock.json b/with-i18n-translate/package-lock.json index 23f87de..9ce5d51 100644 --- a/with-i18n-translate/package-lock.json +++ b/with-i18n-translate/package-lock.json @@ -9,24 +9,24 @@ "version": "4.0.0", "license": "MIT", "dependencies": { - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/graphql": "^10.11.3", - "@slickgrid-universal/odata": "^10.11.3", - "@slickgrid-universal/pdf-export": "^10.11.3", - "@slickgrid-universal/react-row-detail-plugin": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/sql": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", - "@slickgrid-universal/web-mcp": "^10.11.3", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/graphql": "^11.0.0-beta.0", + "@slickgrid-universal/odata": "^11.0.0-beta.0", + "@slickgrid-universal/pdf-export": "^11.0.0-beta.0", + "@slickgrid-universal/react-row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/sql": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", + "@slickgrid-universal/web-mcp": "^11.0.0-beta.0", "bootstrap": "^5.3.8", - "dompurify": "^3.4.16", + "dompurify": "^3.4.17", "i18next": "^26.4.2", "react": "^19.3.0", "react-dom": "^19.3.0", "react-i18next": "^17.0.16", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", @@ -1238,22 +1238,20 @@ "license": "MIT" }, "node_modules/@slickgrid-universal/common": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-10.11.3.tgz", - "integrity": "sha512-vURyq55n8+/B4HKipq84FqW9DlkCTQ28JH7SX+KulMeLYxmzSTwwSYLMqB/UUBecaw5VBGDmDM2MUVOfhYw7qQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/common/-/common-11.0.0-beta.0.tgz", + "integrity": "sha512-x+3s2PJcKzOWO0xZEh5AEmciUqbEWwgbu+25BUNjCvkTELtsPKKI/O9d4RUiqGt47zHiPVyDTg6nEPsMRRvFUw==", "license": "MIT", "dependencies": { "@excel-builder-vanilla/types": "^5.3.1", "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/utils": "10.10.0", - "@types/sortablejs": "^1.15.9", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "@types/trusted-types": "^2.0.7", "autocompleter": "^10.0.0", "dequal": "^2.0.3", "multiple-select-vanilla": "^5.2.3", - "sortablejs": "^1.15.7", "vanilla-calendar-pro": "^3.4.0" }, "engines": { @@ -1265,64 +1263,64 @@ } }, "node_modules/@slickgrid-universal/composite-editor-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-10.11.3.tgz", - "integrity": "sha512-WYDwjp/vGIoFVbLbv5s0QToWwx/HodzlCA9DfiRHTiRfayCQJXB8oHjbEg+YsYvVe1dnEo6yCIccPv3va+Oovg==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/composite-editor-component/-/composite-editor-component-11.0.0-beta.0.tgz", + "integrity": "sha512-j41hSz9QHJi9HwZ52DpepGjBFvQ3946whHI7YRKO5LaL4lDIJpfHBV2el/sUMD6fwhiXaL+juZd+vzLGcKm7rQ==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/custom-footer-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-10.11.3.tgz", - "integrity": "sha512-u4B344fYfhhsRYpwRiA4fKp9qj2tB7wQaHqlb7mS3f78DhJcsvTfi7ndBnChAshNkIkVlalf7gMQcqdN8zZWjw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-footer-component/-/custom-footer-component-11.0.0-beta.0.tgz", + "integrity": "sha512-Pbar5mf5rxpx2JPkofHPzkTuNTddO3PQlBW0qD4KbZz+PuULcIx/DUXNchoTOwRQEUDTkwMZ/mEeqbmAKgC4Sg==", "license": "MIT", "dependencies": { "@formkit/tempo": "^1.1.0", "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/custom-tooltip-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-10.11.3.tgz", - "integrity": "sha512-3adnvQUQC/mPsHETMFO+COxmJ+TTbLSDXxMfXsO9xGLd0Y8GrULYFnGvznhvAjlMpxN8CJum+yFElrJpfqL1bQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/custom-tooltip-plugin/-/custom-tooltip-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-5NkEYRO2nMGwCX4YgzMjWl96CDXAd6pOnK/BSakEyCt0jWLPdNVFv8CQigv+opEFb/u/6B4fRlHYoQZtoj3ucA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/empty-warning-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-10.11.3.tgz", - "integrity": "sha512-mtWUL6GuzT6O9eueb3HXgeY9LUIyPPfsoI2po2g81wegBQz4D9QNPJe5koeA6QPZG2xYhGxQGvcA61pnP8TtMw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/empty-warning-component/-/empty-warning-component-11.0.0-beta.0.tgz", + "integrity": "sha512-bAD5V7rgPV4gBhXAdKji5jxrahrSy3jn1RcYoxwIsiMjB+VCi3cPezz5W/6EoTjaPbY7VOp4ESfpQGwDmqGx9A==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/event-pub-sub": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-10.10.0.tgz", - "integrity": "sha512-FKCTlV272lUNolIYeYYPggE3ducmmUeD+pxvHd+pCb1885080drQIr+k5wd+Q1eZj2P7BrlPKFEVF79ZL0QUmA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/event-pub-sub/-/event-pub-sub-11.0.0-beta.0.tgz", + "integrity": "sha512-kpWOhdXL9n0R6dlKPgLSlfTYzGvwkOZxJnKBNQ+wfR16YosT7g/oFoxJXn1L/qtM9KLba17pMkLuvCuASLuAxQ==", "license": "MIT", "dependencies": { - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/excel-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-10.11.3.tgz", - "integrity": "sha512-Zoh4NcdHHty7tZf7T/slR0jkLYlZP5FeanP8MX2GDEezONl1/Z+8PUVEqqT70XLT/3KMGuhX/DK2A2R1a9mYAQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/excel-export/-/excel-export-11.0.0-beta.0.tgz", + "integrity": "sha512-KrLDb5/lvupdGFL40a7NDifkGGkxuAUirhjhDYoEjEfTVAzyUIOIGi/jbkoTCWe5vscALRXmSqu3i9w6VLeVXg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "excel-builder-vanilla": "^5.3.1" }, "funding": { @@ -1331,13 +1329,13 @@ } }, "node_modules/@slickgrid-universal/graphql": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/graphql/-/graphql-10.11.3.tgz", - "integrity": "sha512-3CjJLPTWEEarN1vfPleiUaESBkpHap01TCvuuWBXLQkmLh+yuK7vrVIsvXaYjEbE+M4BqwEdNfBcNFco2658PA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/graphql/-/graphql-11.0.0-beta.0.tgz", + "integrity": "sha512-8hYXNxwNfCwae2JEAvCOKRaQsXyztqhsfc6bMlPXVYVGacyj+2Qc05bIIAw1E6XxjVPgnSmbRHfEi+VAs0ii/w==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", @@ -1345,13 +1343,13 @@ } }, "node_modules/@slickgrid-universal/odata": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/odata/-/odata-10.11.3.tgz", - "integrity": "sha512-R2/Dk2GKbNSQM99jmiDu0zeDpBV59BaY2Xmrc5HaLkvLnu1uf1aFrKBgIcNflETM2tOchLbajrujq4NLDMCbsQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/odata/-/odata-11.0.0-beta.0.tgz", + "integrity": "sha512-JgIqId5kJzvFcNm+WrY9Hw8SlbN0P9R5z1W5VLt9m/c2hRnc82ZvHgqm6KXBV6cmJ/i/xoGMDFzWL2mpOwJ93Q==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", @@ -1359,23 +1357,23 @@ } }, "node_modules/@slickgrid-universal/pagination-component": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-10.11.3.tgz", - "integrity": "sha512-3QTbRokIFZgpRONXP9MJfE4YKVsnXS4MVq6Avz1yKCey5XuFepq17MUcs+cUaQip3GHMeWQIorT2gtGrxzHSDw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pagination-component/-/pagination-component-11.0.0-beta.0.tgz", + "integrity": "sha512-X1WszGgboOmRFoTiAFAIJ7bOJPxxqym0p3QfftTy684bO7DI9yFRFNfodm0kHn9KSjbg8Cnnqja8rIEEXqT7yA==", "license": "MIT", "dependencies": { "@slickgrid-universal/binding": "10.11.2", - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/pdf-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/pdf-export/-/pdf-export-10.11.3.tgz", - "integrity": "sha512-I/uHQAC0Q1xgtdhCYJsM+kZHZ3FfdBfpB8VJtmhYKL0oe94KtyNnShEx6T0/zfhp2KJIhYtfB+pBuvXBdDsJRw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/pdf-export/-/pdf-export-11.0.0-beta.0.tgz", + "integrity": "sha512-tcpxZAc1AHx7LIhxFR+ECQaQQsNAPY/vx3aWa8S2AqGj3zxVho+OBy7KQN0NRML+8lbWkviyNLQyhvBZPz9EBg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "jspdf": "^4.2.1" }, "funding": { @@ -1384,17 +1382,17 @@ } }, "node_modules/@slickgrid-universal/react-row-detail-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/react-row-detail-plugin/-/react-row-detail-plugin-10.11.3.tgz", - "integrity": "sha512-l+Zn/0ICsFuVeHPaSWIdKL1hvVQE9ssmB0W+6XSJtSWJ0SluFwx53SfmIncR8LY0nPg+4Hal5grd32IoGiV9ag==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/react-row-detail-plugin/-/react-row-detail-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-LYGyp1ggT4LP3Ebr8iLZkoV97AEvBhnFuLne/khV3Y5BSSxwPRe8oaG6lZxyWcZOMqJoNuj0Ha4QtLFIgTzMKg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/row-detail-view-plugin": "10.11.3", - "react": "^19.3.0", - "react-dom": "^19.3.0", - "slickgrid-react": "10.11.3", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/row-detail-plugin": "11.0.0-beta.0", + "react": "^19.3.1", + "react-dom": "^19.3.1", + "slickgrid-react": "11.0.0-beta.0", "tslib": "^2.8.1" } }, @@ -1402,34 +1400,34 @@ "version": "2.8.1", "license": "0BSD" }, - "node_modules/@slickgrid-universal/row-detail-view-plugin": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-view-plugin/-/row-detail-view-plugin-10.11.3.tgz", - "integrity": "sha512-nJhoCr0K1iYicHoJ21Uul9eMKAAxvm8KApu9nPIPgfLt5YraOFBXr/WkpGIbzxa4isXJze6IXC1296O+KtzxqQ==", + "node_modules/@slickgrid-universal/row-detail-plugin": { + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/row-detail-plugin/-/row-detail-plugin-11.0.0-beta.0.tgz", + "integrity": "sha512-cXxL0IXO80jBHC2v3UWjIaIuQfZmkeFgq0Zjr0EjTsu4vglLwLLrKmVeCDU8KIBAox3bIIZbJ4nN/6Re112rJA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" } }, "node_modules/@slickgrid-universal/rxjs-observable": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-10.11.3.tgz", - "integrity": "sha512-4OHNPuU4bL2BbTeOkeYGBiA5BSTNpsyuDo7IrelG96sMj7J3mZT9bCl4SZyzLkphVmjcvGmQ+iCWLWcOK6R1iw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/rxjs-observable/-/rxjs-observable-11.0.0-beta.0.tgz", + "integrity": "sha512-2X6GyJ9c9sKlzP/jZ3+iFRy8FqAu1q3ZKCZX3NOd69JEdsU8AF6GUR+MBrltbcq2wexXAz3JCTByAE69aSwPAA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", + "@slickgrid-universal/common": "11.0.0-beta.0", "rxjs": "^7.8.2" } }, "node_modules/@slickgrid-universal/sql": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/sql/-/sql-10.11.3.tgz", - "integrity": "sha512-0ke7FI/V0DeFk9aL/K9B15yhrOXXSs1wodTJIja0jpsPTY1PzrmRAZQCre7PHdW/Yxsl1ZfmBnEPruxuubJJeQ==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/sql/-/sql-11.0.0-beta.0.tgz", + "integrity": "sha512-T3wYvvsqEKBzJFxTEEh8cP8I22KxzToZ81UBrE0RVcgkiaBzJcvkHKipMuuczpmJuG3H7WbW9Vn9OojIAEaEOA==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", @@ -1437,13 +1435,13 @@ } }, "node_modules/@slickgrid-universal/text-export": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-10.11.3.tgz", - "integrity": "sha512-096ugLGyejxdURbUMna7Sf0kQshQTF6G+tI+BnYSVjoAyCfJoZ5iOVCJXcJ65rrk6OWCvtHuT7XLLZEsOKDIPw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/text-export/-/text-export-11.0.0-beta.0.tgz", + "integrity": "sha512-/RM8ckkYTevsP6njI8DKuj6/d703k80MWpon8+3wNXANpGH9bldjfrdvlirnSaGfrhzoBQ3QSA6HckR4oVheVg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/utils": "10.10.0" + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0" }, "funding": { "type": "ko_fi", @@ -1451,18 +1449,18 @@ } }, "node_modules/@slickgrid-universal/utils": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-10.10.0.tgz", - "integrity": "sha512-Qwiv7Dl2O7qsV59WdSJjKpOzNZQpYwKJupJfdd/ru0gkEG3aD2Q0njA2hw0m+nhuQcLME+vbrMuMMnMsuQEwfw==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/utils/-/utils-11.0.0-beta.0.tgz", + "integrity": "sha512-4/Cjj1UvVHPlnKXjV3YakOF1VAcIUyDutby7kQuC8AtoRnwk6BfLvbHJeEd0LlfpRgnSUH6VzF3Kuku6BFxD0A==", "license": "MIT" }, "node_modules/@slickgrid-universal/web-mcp": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/@slickgrid-universal/web-mcp/-/web-mcp-10.11.3.tgz", - "integrity": "sha512-uhrOnwCU8SFIVss8rl8EQHgs2ijNh13BaoN+ZUSVLO5dAvnCYOSi1n07Z9Alr2JOFRmtnEdpfFXpOcVTqfYGVA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@slickgrid-universal/web-mcp/-/web-mcp-11.0.0-beta.0.tgz", + "integrity": "sha512-IZJRbFpelI+gZCv09KMDhLsx8Hms8uAWHH4nK1rgpBDMmrtpcJZAwpvntPEZoUV2fotDahm8e11pWvytOiCI7w==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3" + "@slickgrid-universal/common": "11.0.0-beta.0" } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { @@ -1743,12 +1741,6 @@ "@types/react": "^19.3.0" } }, - "node_modules/@types/sortablejs": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz", - "integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==", - "license": "MIT" - }, "node_modules/@types/text-encoding-utf-8": { "version": "1.0.5", "dev": true, @@ -4327,9 +4319,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.16", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.16.tgz", - "integrity": "sha512-sqo+pNp3qRhCIpbgRi1y8Tgk27Bo2Ry7w0dC1NBeNTdZChWjz9Xb/KOoZbRP/R6pQZ80Qw8YhXw13hWWBbMRnQ==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -10116,9 +10108,9 @@ "license": "MIT" }, "node_modules/multiple-select-vanilla": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-5.2.3.tgz", - "integrity": "sha512-2M8grjlGMEGY6ZsgFTgZhDrpCcoxdv8Bw+xAR647E2EPySTYLc+abSGfTx5A8ueTuyRyhw3gxFz499mv51PQJw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/multiple-select-vanilla/-/multiple-select-vanilla-5.2.4.tgz", + "integrity": "sha512-PIaLv+7gDTF67WeLkcpBOPuFw6DJOWWDU9CadEQiA+2lekF3qXg/dkA+65dMuUu3GuezB29OzEqsDfl23lzrLA==", "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.7" @@ -10833,24 +10825,24 @@ } }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", - "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.1.tgz", + "integrity": "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==", "license": "MIT", "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { - "react": "^19.3.0" + "react": "^19.3.1" } }, "node_modules/react-i18next": { @@ -12184,17 +12176,17 @@ } }, "node_modules/slickgrid-react": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-10.11.3.tgz", - "integrity": "sha512-ogDg/vX0aXwlfc1dnQ1ALLDJy3345h78HKrv3rzZfsQctGbWXNgphO5ut4KRAbW+z+03+Wb2WcGYYCdU8yJtzA==", + "version": "11.0.0-beta.0", + "resolved": "https://registry.npmjs.org/slickgrid-react/-/slickgrid-react-11.0.0-beta.0.tgz", + "integrity": "sha512-FCAPobULSLOCX4mnavagncfxbBLOzUSOET+LCVJ5t61M48x6So9wN2H/rDCJgW1ppNKYdmQyiCtJl3J+Sy51Dg==", "license": "MIT", "dependencies": { - "@slickgrid-universal/common": "10.11.3", - "@slickgrid-universal/custom-footer-component": "10.11.3", - "@slickgrid-universal/empty-warning-component": "10.11.3", - "@slickgrid-universal/event-pub-sub": "10.10.0", - "@slickgrid-universal/pagination-component": "10.11.3", - "@slickgrid-universal/utils": "10.10.0", + "@slickgrid-universal/common": "11.0.0-beta.0", + "@slickgrid-universal/custom-footer-component": "11.0.0-beta.0", + "@slickgrid-universal/empty-warning-component": "11.0.0-beta.0", + "@slickgrid-universal/event-pub-sub": "11.0.0-beta.0", + "@slickgrid-universal/pagination-component": "11.0.0-beta.0", + "@slickgrid-universal/utils": "11.0.0-beta.0", "dequal": "^2.0.3" }, "peerDependencies": { @@ -12210,12 +12202,6 @@ "tslib": "^2.0.3" } }, - "node_modules/sortablejs": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", - "integrity": "sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==", - "license": "MIT" - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/with-i18n-translate/package.json b/with-i18n-translate/package.json index 200217d..e3fb80f 100644 --- a/with-i18n-translate/package.json +++ b/with-i18n-translate/package.json @@ -30,24 +30,24 @@ "lint": "eslint . --no-cache" }, "dependencies": { - "@slickgrid-universal/composite-editor-component": "^10.11.3", - "@slickgrid-universal/custom-tooltip-plugin": "^10.11.3", - "@slickgrid-universal/excel-export": "^10.11.3", - "@slickgrid-universal/graphql": "^10.11.3", - "@slickgrid-universal/odata": "^10.11.3", - "@slickgrid-universal/pdf-export": "^10.11.3", - "@slickgrid-universal/react-row-detail-plugin": "^10.11.3", - "@slickgrid-universal/rxjs-observable": "^10.11.3", - "@slickgrid-universal/sql": "^10.11.3", - "@slickgrid-universal/text-export": "^10.11.3", - "@slickgrid-universal/web-mcp": "^10.11.3", + "@slickgrid-universal/composite-editor-component": "^11.0.0-beta.0", + "@slickgrid-universal/custom-tooltip-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/excel-export": "^11.0.0-beta.0", + "@slickgrid-universal/graphql": "^11.0.0-beta.0", + "@slickgrid-universal/odata": "^11.0.0-beta.0", + "@slickgrid-universal/pdf-export": "^11.0.0-beta.0", + "@slickgrid-universal/react-row-detail-plugin": "^11.0.0-beta.0", + "@slickgrid-universal/rxjs-observable": "^11.0.0-beta.0", + "@slickgrid-universal/sql": "^11.0.0-beta.0", + "@slickgrid-universal/text-export": "^11.0.0-beta.0", + "@slickgrid-universal/web-mcp": "^11.0.0-beta.0", "bootstrap": "^5.3.8", - "dompurify": "^3.4.16", + "dompurify": "^3.4.17", "i18next": "^26.4.2", "react": "^19.3.0", "react-dom": "^19.3.0", "react-i18next": "^17.0.16", - "slickgrid-react": "^10.11.3" + "slickgrid-react": "^11.0.0-beta.0" }, "devDependencies": { "@faker-js/faker": "^10.6.0", diff --git a/with-i18n-translate/src/assets/locales/en/translation.json b/with-i18n-translate/src/assets/locales/en/translation.json index 17d3217..5d78162 100644 --- a/with-i18n-translate/src/assets/locales/en/translation.json +++ b/with-i18n-translate/src/assets/locales/en/translation.json @@ -7,7 +7,7 @@ "CLEAR_ALL_FILTERS": "Clear all Filters", "CLEAR_ALL_GROUPING": "Clear all Grouping", "CLEAR_ALL_SORTING": "Clear all Sorting", - "CLEAR_PINNING": "Unfreeze Columns/Rows", + "CLEAR_ALL_PINNING": "Clear all Pinning", "CLONE": "Clone", "COLLAPSE_ALL_GROUPS": "Collapse all Groups", "COLUMNS": "Columns", @@ -22,12 +22,17 @@ "EXPAND_ALL_GROUPS": "Expand all Groups", "EXPORT_TO_CSV": "Export in CSV format", "EXPORT_TO_EXCEL": "Export to Excel", + "EXPORT_TO_PDF": "Export to PDF", "EXPORT_TO_TAB_DELIMITED": "Export in Text format (Tab delimited)", "EXPORT_TO_TEXT_FORMAT": "Export in Text format", "FILTER_SHORTCUTS": "Filter Shortcuts", "FROM_TO_OF_TOTAL_ITEMS": "{{from}}-{{to}} of {{totalItems}} items", "FORCE_FIT_COLUMNS": "Force fit columns", - "FREEZE_COLUMNS": "Freeze Columns", + "PIN_COLUMN": "Column Pinning", + "PIN_COLUMNS_LEFT": "Pin Left Through Here", + "PIN_COLUMNS_RIGHT": "Pin From Here To Right", + "PIN_LEFT": "Pin to Left", + "PIN_RIGHT": "Pin to Right", "INVALID_FLOAT": "The number must be valid and have a maximum of {{maxDecimal}} decimals.", "GREATER_THAN": "Greater than", "GREATER_THAN_OR_EQUAL_TO": "Greater than or equal to", @@ -62,7 +67,8 @@ "SYNCHRONOUS_RESIZE": "Synchronous resize", "TOGGLE_FILTER_ROW": "Toggle Filter Row", "TOGGLE_PRE_HEADER_ROW": "Toggle Pre-Header Row", - "UNFREEZE_COLUMNS": "Unfreeze Columns", + "UNPIN_COLUMN": "Unpin Column", + "UNPIN_COLUMNS": "Unpin All Columns", "X_OF_Y_SELECTED": "# of % selected", "X_OF_Y_MASS_SELECTED": "{{x}} of {{y}} selected", "BILLING": { diff --git a/with-i18n-translate/src/assets/locales/fr/translation.json b/with-i18n-translate/src/assets/locales/fr/translation.json index 0792f9f..d15f4f8 100644 --- a/with-i18n-translate/src/assets/locales/fr/translation.json +++ b/with-i18n-translate/src/assets/locales/fr/translation.json @@ -7,7 +7,7 @@ "CLEAR_ALL_FILTERS": "Supprimer tous les filtres", "CLEAR_ALL_GROUPING": "Supprimer tous les groupes", "CLEAR_ALL_SORTING": "Supprimer tous les tris", - "CLEAR_PINNING": "Dégeler les colonnes/rangées", + "CLEAR_ALL_PINNING": "Supprimer toutes les épingles", "CLONE": "Cloner", "COLLAPSE_ALL_GROUPS": "Réduire tous les groupes", "COLUMNS": "Colonnes", @@ -22,12 +22,17 @@ "EXPAND_ALL_GROUPS": "Étendre tous les groupes", "EXPORT_TO_CSV": "Exporter en format CSV", "EXPORT_TO_EXCEL": "Exporter vers Excel", + "EXPORT_TO_PDF": "Exporter vers PDF", "EXPORT_TO_TAB_DELIMITED": "Exporter en format texte (délimité par tabulation)", "EXPORT_TO_TEXT_FORMAT": "Exporter en format texte", "FILTER_SHORTCUTS": "Raccourcis de filtre", "FROM_TO_OF_TOTAL_ITEMS": "{{from}}-{{to}} de {{totalItems}} éléments", "FORCE_FIT_COLUMNS": "Ajustement forcé des colonnes", - "FREEZE_COLUMNS": "Geler les colonnes", + "PIN_COLUMN": "Épinglage de colonne", + "PIN_COLUMNS_LEFT": "Épingler à gauche jusqu’ici", + "PIN_COLUMNS_RIGHT": "Épingler à droite à partir d’ici", + "PIN_LEFT": "Épingler à gauche", + "PIN_RIGHT": "Épingler à droite", "GREATER_THAN": "Plus grand que", "GREATER_THAN_OR_EQUAL_TO": "Plus grand ou égal à", "GROUP_BY": "Grouper par", @@ -62,7 +67,8 @@ "SYNCHRONOUS_RESIZE": "Redimension synchrone", "TOGGLE_FILTER_ROW": "Basculer la ligne des filtres", "TOGGLE_PRE_HEADER_ROW": "Basculer la ligne de pré-en-tête", - "UNFREEZE_COLUMNS": "Dégeler les colonnes", + "UNPIN_COLUMN": "Désépingler la colonne", + "UNPIN_COLUMNS": "Désépingler toutes les colonnes", "X_OF_Y_SELECTED": "# de % sélectionnés", "X_OF_Y_MASS_SELECTED": "{{x}} de {{y}} sélectionnés", "BILLING": { diff --git a/with-i18n-translate/src/examples/slickgrid/App.tsx b/with-i18n-translate/src/examples/slickgrid/App.tsx index f44e012..35e2c00 100644 --- a/with-i18n-translate/src/examples/slickgrid/App.tsx +++ b/with-i18n-translate/src/examples/slickgrid/App.tsx @@ -59,6 +59,7 @@ const routes = [ { path: 'example55', route: '/example55', element: lazy(() => import('./Example55.js')), title: '55- Variable Row Height (provider)' }, { path: 'example56', route: '/example56', element: lazy(() => import('./Example56.js')), title: '56- Variable Row Height (metadata)' }, { path: 'example57', route: '/example57', element: lazy(() => import('./Example57.js')), title: '57- RTL (Right-to-Left)' }, + { path: 'example58', route: '/example58', element: lazy(() => import('./Example58.js')), title: '58- Sticky Financial Report' }, ]; export default function Routes() { diff --git a/with-i18n-translate/src/examples/slickgrid/Example07.tsx b/with-i18n-translate/src/examples/slickgrid/Example07.tsx index 96db83d..71a44a2 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example07.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example07.tsx @@ -58,8 +58,6 @@ const Example7: React.FC = () => { ...gridOptions1, enableHeaderMenu: true, enableFiltering: true, - // frozenColumn: 2, - // frozenRow: 2, headerButton: { onCommand: (_e, args) => handleOnCommand(_e, args, 2), }, diff --git a/with-i18n-translate/src/examples/slickgrid/Example08.tsx b/with-i18n-translate/src/examples/slickgrid/Example08.tsx index d64ccf4..9a7199b 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example08.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example08.tsx @@ -33,6 +33,7 @@ const Example8: React.FC = () => { columnDef.header = { menu: { commandItems: [ + { divider: true, command: '' }, { iconCssClass: 'mdi mdi-help-circle', titleKey: 'HELP', @@ -40,7 +41,6 @@ const Example8: React.FC = () => { tooltip: 'Need assistance?', cssClass: 'bold', textCssClass: columnDef.id === 'title' || columnDef.id === 'completed' ? '' : 'blue', - positionOrder: 99, itemUsabilityOverride: (args) => { return !(args.column.id === 'title' || args.column.id === 'completed'); }, @@ -51,11 +51,9 @@ const Example8: React.FC = () => { console.log('execute an action on Help', args); }, }, - { divider: true, command: '', positionOrder: 98 }, { command: 'custom-actions', title: 'Hello', - positionOrder: 99, commandItems: [ { command: 'hello-world', title: 'Hello World' }, { command: 'hello-slickgrid', title: 'Hello SlickGrid' }, @@ -77,7 +75,6 @@ const Example8: React.FC = () => { { command: 'feedback', title: 'Feedback', - positionOrder: 100, commandItems: [ { command: 'request-update', @@ -118,8 +115,6 @@ const Example8: React.FC = () => { enableFiltering: false, enableCellNavigation: true, headerMenu: { - hideSortCommands: false, - hideColumnHideCommand: false, subItemChevronClass: 'mdi mdi-chevron-down mdi-rotate-270', onCommand: (_e, args) => { const command = args.item?.command; diff --git a/with-i18n-translate/src/examples/slickgrid/Example09.tsx b/with-i18n-translate/src/examples/slickgrid/Example09.tsx index b7729ae..5eb7be2 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example09.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example09.tsx @@ -125,32 +125,25 @@ const Example9: React.FC = () => { iconCssClass: 'mdi mdi-dots-vertical', // defaults to "mdi-menu" hideForceFitButton: true, hideSyncResizeButton: true, - hideToggleFilterCommand: false, // show/hide internal custom commands menuWidth: 17, resizeOnShowHeaderRow: true, subItemChevronClass: 'mdi mdi-chevron-down mdi-rotate-270', commandItems: [ + { divider: true, command: '' }, // add Custom Items Commands which will be appended to the existing internal custom items // you cannot override an internal items but you can hide them and create your own - // also note that the internal custom commands are in the positionOrder range of 50-60, - // if you want yours at the bottom then start with 61, below 50 will make your command(s) show on top { iconCssClass: 'mdi mdi-help-circle', titleKey: 'HELP', disabled: false, command: 'help', - positionOrder: 90, cssClass: 'bold', // container css class textCssClass: 'blue', // just the text css class }, - // you can pass divider as a string or an object with a boolean (if sorting by position, then use the object) - // note you should use the "divider" string only when items array is already sorted and positionOrder are not specified - { divider: true, command: '', positionOrder: 89 }, // 'divider', { title: 'Command 1', command: 'command1', - positionOrder: 91, cssClass: 'orange', iconCssClass: 'mdi mdi-alert', // you can use the "action" callback and/or use "onCallback" callback from the grid options, they both have the same arguments @@ -166,7 +159,6 @@ const Example9: React.FC = () => { { title: 'Command 2', command: 'command2', - positionOrder: 92, cssClass: 'red', // container css class textCssClass: 'italic', // just the text css class action: (_e: Event, args: any) => alert(args.command), @@ -182,14 +174,12 @@ const Example9: React.FC = () => { title: 'Disabled command', disabled: true, command: 'disabled-command', - positionOrder: 98, }, - { command: '', divider: true, positionOrder: 98 }, + { command: '', divider: true }, { // we can also have multiple nested sub-menus command: 'export', title: 'Exports', - positionOrder: 99, commandItems: [ { command: 'exports-txt', title: 'Text (tab delimited)' }, { @@ -208,7 +198,6 @@ const Example9: React.FC = () => { { command: 'feedback', title: 'Feedback', - positionOrder: 100, commandItems: [ { command: 'request-update', diff --git a/with-i18n-translate/src/examples/slickgrid/Example12.tsx b/with-i18n-translate/src/examples/slickgrid/Example12.tsx index d27182b..5e2e94f 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example12.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example12.tsx @@ -175,15 +175,12 @@ const Example12: React.FC = () => { hideTotalItemCount: false, hideLastUpdateTimestamp: false, }, - gridMenu: { - hideExportCsvCommand: false, // false by default, so it's optional - hideExportTextDelimitedCommand: false, // true by default, so if you want it, you will need to disable the flag - }, enableExcelExport: true, enableTextExport: true, textExportOptions: { // set at the grid option level, meaning all column will evaluate the Formatter (when it has a Formatter defined) exportWithFormatter: true, + menuFormats: ['csv', 'txt'], // also show "export-text-delimited" in the menus sanitizeDataExport: true, }, excelExportOptions: { exportWithFormatter: true, sanitizeDataExport: true }, diff --git a/with-i18n-translate/src/examples/slickgrid/Example14.tsx b/with-i18n-translate/src/examples/slickgrid/Example14.tsx index b0c88d9..d8fe10a 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example14.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example14.tsx @@ -2,7 +2,6 @@ import { ExcelExportService } from '@slickgrid-universal/excel-export'; import { PdfExportService } from '@slickgrid-universal/pdf-export'; import React, { useEffect, useRef, useState } from 'react'; import { SlickgridReact, type Column, type GridOption, type ItemMetadata, type SlickgridReactInstance } from 'slickgrid-react'; -import './example14.scss'; // provide custom CSS/SASS styling const Example14: React.FC = () => { const [gridOptions1, setGridOptions1] = useState(undefined); @@ -49,6 +48,7 @@ const Example14: React.FC = () => { createPreHeaderPanel: true, showPreHeaderPanel: true, preHeaderPanelHeight: 28, + rowHeight: 33, gridHeight: 275, gridWidth: 800, enableExcelExport: true, @@ -101,14 +101,13 @@ const Example14: React.FC = () => { explicitInitialization: true, gridHeight: 275, gridWidth: 800, - frozenColumn: 2, + rowHeight: 33, + pinning: { columns: { left: 2 } }, enableExcelExport: true, excelExportOptions: { exportWithFormatter: false, }, externalResources: [new ExcelExportService(), new PdfExportService()], - gridMenu: { hideClearFrozenColumnsCommand: false }, - headerMenu: { hideFreezeColumnsCommand: false }, }; setColumns2(columns2); @@ -123,7 +122,7 @@ const Example14: React.FC = () => { id: i, num: i, title: 'Task ' + i, - duration: '5 days', + duration: '5 days with some long text to test column span', percentComplete: Math.round(Math.random() * 100), start: '01/01/2009', finish: '01/05/2009', @@ -133,8 +132,8 @@ const Example14: React.FC = () => { return mockDataset; } - function setFrozenColumns2(frozenCols: number) { - reactGridRef2.current?.slickGrid.setOptions({ frozenColumn: frozenCols }); + function setPinnedColumns2(pinnedCols: number) { + reactGridRef2.current?.slickGrid.setOptions({ pinning: { columns: { left: pinnedCols } } }); const updatedGridOptions = reactGridRef2.current?.slickGrid.getOptions(); setGridOptions2(updatedGridOptions); } @@ -230,23 +229,23 @@ const Example14: React.FC = () => {

- Grid 2 (with Header Grouping & Frozen/Pinned Columns) + Grid 2 (with Header Grouping & Pinned Columns)

diff --git a/with-i18n-translate/src/examples/slickgrid/Example15.tsx b/with-i18n-translate/src/examples/slickgrid/Example15.tsx index 82c2889..0dabb69 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example15.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example15.tsx @@ -72,10 +72,6 @@ const Example15: React.FC = () => { }, gridMenu: { hideForceFitButton: true, - hideClearFrozenColumnsCommand: false, - }, - headerMenu: { - hideFreezeColumnsCommand: false, }, enablePagination: true, pagination: { diff --git a/with-i18n-translate/src/examples/slickgrid/Example16.tsx b/with-i18n-translate/src/examples/slickgrid/Example16.tsx index 7370b98..98964d3 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example16.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example16.tsx @@ -72,6 +72,7 @@ const Example16: React.FC = () => { container: '#demo-container', rightPadding: 10, }, + enableSorting: true, enableFiltering: true, enableCheckboxSelector: true, checkboxSelector: { diff --git a/with-i18n-translate/src/examples/slickgrid/Example18.tsx b/with-i18n-translate/src/examples/slickgrid/Example18.tsx index 12710c9..c9cbb71 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example18.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example18.tsx @@ -4,6 +4,7 @@ import { TextExportService } from '@slickgrid-universal/text-export'; import React, { useEffect, useRef, useState } from 'react'; import { Aggregators, + Editors, Filters, Formatters, GroupTotalFormatters, @@ -53,9 +54,6 @@ const Example18: React.FC = () => { name: 'Title', field: 'title', columnGroup: 'Common Factor', - width: 70, - minWidth: 50, - cssClass: 'cell-title', hidden: true, // column initially hidden filterable: true, sortable: true, @@ -72,10 +70,10 @@ const Example18: React.FC = () => { name: 'Duration', field: 'duration', columnGroup: 'Common Factor', - width: 70, sortable: true, filterable: true, filter: { model: Filters.slider, operator: '>=' }, + editor: { model: Editors.float }, type: 'number', groupTotalsFormatter: GroupTotalFormatters.sumTotals, grouping: { @@ -94,11 +92,11 @@ const Example18: React.FC = () => { name: 'Start', field: 'start', columnGroup: 'Period', - minWidth: 60, sortable: true, filterable: true, filter: { model: Filters.compoundDate }, formatter: Formatters.dateIso, + editor: { model: Editors.date }, type: 'dateUtc', outputType: 'dateIso', exportWithFormatter: true, @@ -115,11 +113,11 @@ const Example18: React.FC = () => { name: 'Finish', field: 'finish', columnGroup: 'Period', - minWidth: 60, sortable: true, filterable: true, filter: { model: Filters.compoundDate }, formatter: Formatters.dateIso, + editor: { model: Editors.date }, type: 'dateUtc', outputType: 'dateIso', exportWithFormatter: true, @@ -157,8 +155,6 @@ const Example18: React.FC = () => { name: '% Complete', field: 'percentComplete', columnGroup: 'Analysis', - minWidth: 70, - width: 90, formatter: Formatters.percentCompleteBar, type: 'number', filterable: true, @@ -201,6 +197,19 @@ const Example18: React.FC = () => { collapsed: false, }, }, + { + id: 'action', + name: 'Action', + field: 'action', + width: 90, + maxWidth: 90, + excludeFromExport: true, + formatter: () => '', + cellMenu: { + commandTitle: 'Commands', + commandItems: [{ command: 'help', title: 'Help' }], + }, + }, ]; const gridOptions: GridOption = { @@ -209,12 +218,21 @@ const Example18: React.FC = () => { rightPadding: 10, }, enableDraggableGrouping: true, + autoEdit: true, + autoCommitEdit: true, + editable: true, + enableCellNavigation: true, + enableSelection: true, + enableCheckboxSelector: true, + selectionOptions: { selectActiveRow: false }, + checkboxSelector: { hideInColumnTitleRow: true, hideInFilterHeaderRow: false }, + enableCellMenu: true, // pre-header will include our Header Grouping (i.e. "Common Factor") // Draggable Grouping could be located in either the Pre-Header OR the new Top-Header createPreHeaderPanel: true, showPreHeaderPanel: true, - preHeaderPanelHeight: 30, + preHeaderPanelHeight: 26, // when Top-Header is created, it will be used by the Draggable Grouping (otherwise the Pre-Header will be used) createTopHeaderPanel: true, @@ -264,24 +282,24 @@ const Example18: React.FC = () => { } function loadData(rowCount: number) { - // mock a dataset + // mock data const tmpData: any[] = []; + const currentYear = new Date().getFullYear(); + for (let i = 0; i < rowCount; i++) { - const randomYear = 2000 + Math.floor(Math.random() * 10); - const randomMonth = Math.floor(Math.random() * 11); + const randomFinishYear = currentYear - 3 + Math.floor(Math.random() * 10); + const randomMonth = Math.floor(Math.random() * 10); const randomDay = Math.floor(Math.random() * 29); - const randomPercent = Math.round(Math.random() * 100); + const randomFinish = new Date(randomFinishYear, randomMonth + 1, randomDay); const randomCost = Math.round(Math.random() * 10000) / 100; tmpData[i] = { - id: 'id_' + i, - num: i, + id: i, title: 'Task ' + i, duration: Math.round(Math.random() * 100) + '', - percentComplete: randomPercent, - percentCompleteNumber: randomPercent, - start: new Date(randomYear, randomMonth, randomDay), - finish: new Date(randomYear, randomMonth + 1, randomDay), + percentComplete: Math.round(Math.random() * 100), + start: new Date(currentYear - 2, randomMonth, randomDay), + finish: randomFinish < new Date() ? '' : randomFinish, cost: i % 33 === 0 ? -randomCost : randomCost, effortDriven: i % 5 === 0, }; @@ -495,8 +513,12 @@ const Example18: React.FC = () => { - - - - - changeFrozenColumnCount($event)} /> - - +
+
+ + + +
+
+ + +
@@ -414,20 +465,39 @@ const Example20: React.FC = () => {
+ + - + - - - : {isFrozenBottom ? 'Bottom' : 'Top'} -
diff --git a/with-i18n-translate/src/examples/slickgrid/Example24.tsx b/with-i18n-translate/src/examples/slickgrid/Example24.tsx index a0d4420..bf6acc7 100644 --- a/with-i18n-translate/src/examples/slickgrid/Example24.tsx +++ b/with-i18n-translate/src/examples/slickgrid/Example24.tsx @@ -83,14 +83,6 @@ const Example24: React.FC = () => { reactGridRef.current = reactGrid; } - function cellMenuInstance() { - return reactGridRef.current?.extensionService.getExtensionInstanceByName('cellMenu'); - } - - function contextMenuInstance() { - return reactGridRef.current?.extensionService.getExtensionInstanceByName('contextMenu'); - } - /* Define grid Options and Columns */ function defineGrid() { const columns: Column[] = [ @@ -202,11 +194,10 @@ const Example24: React.FC = () => { // else use title without the suffix, for example "commandTitle" (no translations) or "commandTitleKey" (with translations) commandTitleKey: 'COMMANDS', // optional title, use "commandTitle" when not using I18N commandItems: [ - // array of command item objects, you can also use the "positionOrder" that will be used to sort the items in the list + { command: 'command1', title: 'Command 1', cssClass: 'orange' }, { command: 'command2', title: 'Command 2', - positionOrder: 62, // you can use the "action" callback and/or use "onCallback" callback from the grid options, they both have the same arguments action: (_e, args) => { console.log(args.dataContext, args.column); @@ -217,11 +208,10 @@ const Example24: React.FC = () => { return !args.dataContext.completed; }, }, - { command: 'command1', title: 'Command 1', cssClass: 'orange', positionOrder: 61 }, + { divider: true, command: '' }, { command: 'delete-row', titleKey: 'DELETE_ROW', - positionOrder: 64, iconCssClass: 'mdi mdi-close', cssClass: 'red', textCssClass: 'bold', @@ -230,24 +220,19 @@ const Example24: React.FC = () => { return !args.dataContext.completed; }, }, - // you can pass divider as a string or an object with a boolean (if sorting by position, then use the object) - // note you should use the "divider" string only when items array is already sorted and positionOrder are not specified - { divider: true, command: '', positionOrder: 63 }, // 'divider', { command: 'help', titleKey: 'HELP', // use "title" without translation and "titleKey" with TranslateService iconCssClass: 'mdi mdi-help-circle', - positionOrder: 66, }, - { command: 'something', titleKey: 'DISABLED_COMMAND', disabled: true, positionOrder: 67 }, - { command: '', divider: true, positionOrder: 98 }, + { command: 'something', titleKey: 'DISABLED_COMMAND', disabled: true }, + { command: '', divider: true }, { // we can also have multiple nested sub-menus command: 'export', title: 'Exports', - positionOrder: 99, commandItems: [ { command: 'exports-txt', title: 'Text (tab delimited)' }, { @@ -266,7 +251,6 @@ const Example24: React.FC = () => { { command: 'feedback', title: 'Feedback', - positionOrder: 100, commandItems: [ { command: 'request-update', @@ -290,28 +274,6 @@ const Example24: React.FC = () => { ], }, ], - optionTitleKey: 'CHANGE_COMPLETED_FLAG', - optionItems: [ - { option: true, titleKey: 'TRUE', iconCssClass: 'mdi mdi-check-box-outline' }, - { option: false, titleKey: 'FALSE', iconCssClass: 'mdi mdi-checkbox-blank-outline' }, - { - option: null, - title: 'null', - cssClass: 'italic', - // you can use the "action" callback and/or use "onCallback" callback from the grid options, they both have the same arguments - action: () => { - // action callback.. do something - }, - // only enable Action menu when the Priority is set to High - itemUsabilityOverride: (args) => { - return args.dataContext.priority === 3; - }, - // only show command to 'Delete Row' when the task is not completed - itemVisibilityOverride: (args) => { - return !args.dataContext.completed; - }, - }, - ], }, }, ]; @@ -345,14 +307,6 @@ const Example24: React.FC = () => { // all the Cell Menu callback methods (except the action callback) // are available under the grid options as shown below onCommand: (_e, args) => executeCommand(_e, args), - onOptionSelected: (_e, args) => { - // change "Completed" property with new option selected from the Cell Menu - const dataContext = args?.dataContext; - if (dataContext && dataContext.hasOwnProperty('completed')) { - dataContext.completed = args.item.option; - reactGridRef.current?.gridService.updateItem(dataContext); - } - }, onBeforeMenuShow: (_e, args) => { // for example, you could select the row that the click originated // reactGridRef.current?.gridService.setSelectedRows([args.row]); @@ -435,24 +389,20 @@ const Example24: React.FC = () => { commandShownOverColumnIds: ['id', 'title', 'percentComplete', 'start', 'finish', 'completed' /* , 'priority', 'action' */], commandTitleKey: 'COMMANDS', // this title is optional, you could also use "commandTitle" when not using I18N commandItems: [ - { divider: true, command: '', positionOrder: 61 }, + { divider: true, command: '' }, { command: 'delete-row', titleKey: 'DELETE_ROW', iconCssClass: 'mdi mdi-close', cssClass: 'red', textCssClass: 'bold', - positionOrder: 62, }, - // you can pass divider as a string or an object with a boolean (if sorting by position, then use the object) - // note you should use the "divider" string only when items array is already sorted and positionOrder are not specified // 'divider', - { divider: true, command: '', positionOrder: 63 }, + { divider: true, command: '' }, { command: 'help', titleKey: 'HELP', iconCssClass: 'mdi mdi-help-circle', - positionOrder: 64, // you can use the 'action' callback and/or subscribe to the 'onCallback' event, they both have the same arguments action: () => { // action callback.. do something @@ -463,13 +413,12 @@ const Example24: React.FC = () => { return !dataContext.completed; }, }, - { command: 'something', titleKey: 'DISABLED_COMMAND', disabled: true, positionOrder: 65 }, - { command: '', divider: true, positionOrder: 98 }, + { command: 'something', titleKey: 'DISABLED_COMMAND', disabled: true }, + { command: '', divider: true }, { // we can also have multiple nested sub-menus command: 'export', title: 'Exports', - positionOrder: 99, commandItems: [ { command: 'exports-txt', title: 'Text (tab delimited)' }, { @@ -488,7 +437,6 @@ const Example24: React.FC = () => { { command: 'feedback', title: 'Feedback', - positionOrder: 100, commandItems: [ { command: 'request-update', @@ -512,57 +460,6 @@ const Example24: React.FC = () => { ], }, ], - - // Options allows you to edit a column from an option chose a list - // for example, changing the Priority value - // you can also optionally define an array of column ids that you wish to display this option list (when not defined it will show over all columns) - optionTitleKey: 'CHANGE_PRIORITY', - optionShownOverColumnIds: ['priority'], // optional, when defined it will only show over the columns (column id) defined in the array - optionItems: [ - { - option: 0, - title: 'n/a', - textCssClass: 'italic', - // only enable this option when the task is Not Completed - itemUsabilityOverride: (args) => { - const dataContext = args?.dataContext; - return !dataContext.completed; - }, - // you can use the 'action' callback and/or subscribe to the 'onCallback' event, they both have the same arguments - action: () => { - // action callback.. do something - }, - }, - { option: 1, iconCssClass: 'mdi mdi-star-outline yellow', titleKey: 'LOW' }, - { option: 2, iconCssClass: 'mdi mdi-star orange', titleKey: 'MEDIUM' }, - { option: 3, iconCssClass: 'mdi mdi-star red', titleKey: 'HIGH' }, - // you can pass divider as a string or an object with a boolean (if sorting by position, then use the object) - // note you should use the "divider" string only when items array is already sorted and positionOrder are not specified - 'divider', - // { divider: true, option: '', positionOrder: 3 }, - { - option: 4, - title: 'Extreme', - iconCssClass: 'mdi mdi-fire', - disabled: true, - // only shown when the task is Not Completed - itemVisibilityOverride: (args) => { - const dataContext = args?.dataContext; - return !dataContext.completed; - }, - }, - { - // we can also have multiple nested sub-menus - option: null, - title: 'Sub-Options (demo)', - subMenuTitleKey: 'CHANGE_PRIORITY', - optionItems: [ - { option: 1, iconCssClass: 'mdi mdi-star-outline yellow', titleKey: 'LOW' }, - { option: 2, iconCssClass: 'mdi mdi-star orange', titleKey: 'MEDIUM' }, - { option: 3, iconCssClass: 'mdi mdi-star red', titleKey: 'HIGH' }, - ], - }, - ], // subscribe to Context Menu onBeforeMenuShow: (_e, args) => { // for example, you could select the row it was clicked with @@ -574,40 +471,9 @@ const Example24: React.FC = () => { // subscribe to Context Menu onCommand event (or use the action callback on each command) onCommand: (_e, args) => executeCommand(_e, args), - - // subscribe to Context Menu onOptionSelected event (or use the action callback on each option) - onOptionSelected: (_e, args) => { - // change Priority - const dataContext = args?.dataContext; - if (dataContext && dataContext.hasOwnProperty('priority')) { - dataContext.priority = args.item.option; - reactGridRef.current?.gridService.updateItem(dataContext); - } - }, }; } - function showContextCommandsAndOptions(showBothList: boolean) { - // when showing both Commands/Options, we can just pass an empty array to show over all columns - // else show on all columns except Priority - const showOverColumnIds = showBothList ? [] : ['id', 'title', 'complete', 'start', 'finish', 'completed', 'action']; - contextMenuInstance()?.setOptions({ - commandShownOverColumnIds: showOverColumnIds, - // hideCommandSection: !showBothList - }); - } - - function showCellMenuCommandsAndOptions(showBothList: boolean) { - // change via the plugin setOptions - cellMenuInstance()?.setOptions({ - hideOptionSection: !showBothList, - }); - - // OR find the column, then change the same hide property - // var actionColumn = columns.find(function (column) { return column.id === 'action' }); - // actionColumn.cellMenu.hideOptionSection = !showBothList; - } - async function switchLanguage() { const nextLanguage = selectedLanguage === 'en' ? 'fr' : 'en'; await i18next.changeLanguage(nextLanguage); @@ -683,14 +549,11 @@ const Example24: React.FC = () => { )).
  • It will also "autoAdjustDrop" (bottom/top) and "autoAlignSide" (left/right) by default but could be turned off
  • -
  • - Both plugins have 2 sections, 1st section can have an array of Options (to change value of a field) and 2nd section an array of - Commands (execute a command) -
  • -
  • There are 2 ways to execute a Command/Option
  • +
  • Both plugins display an array of commands, with support for nested sub-menus.
  • +
  • There are 2 ways to execute a Command
    1. -
    2. via onCommand/onOptionSelected (use a switch/case to parse command/option and do something with it)
    3. -
    4. via action callback (that can be defined on each command/option)
    5. +
    6. via onCommand (use a switch/case to parse command and do something with it)
    7. +
    8. via action callback (that can be defined on each command)
  • Use override callback functions to change the properties of show/hide, enable/disable the menu or certain item(s) from the list @@ -705,44 +568,6 @@ const Example24: React.FC = () => { -
    - - Context Menu: - - - - - - Cell Menu: - - - -
    -
    + +
    - + reactGridReady(event.detail)} + />
    ); diff --git a/with-i18n-translate/src/examples/slickgrid/Example58.tsx b/with-i18n-translate/src/examples/slickgrid/Example58.tsx new file mode 100644 index 0000000..e65ac42 --- /dev/null +++ b/with-i18n-translate/src/examples/slickgrid/Example58.tsx @@ -0,0 +1,266 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { + SlickgridReact, + type Column, + type Formatter, + type GridOption, + type ItemMetadata, + type SlickgridReactInstance, +} from 'slickgrid-react'; +import './example58.scss'; + +const MONTH_FIELDS = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] as const; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const PERIOD_FIELDS = [...MONTH_FIELDS, 'q1', 'q2', 'q3', 'q4', 'ytd'] as const; + +type MonthField = (typeof MONTH_FIELDS)[number]; +type PeriodField = (typeof PERIOD_FIELDS)[number]; +type SummaryKind = 'revenue' | 'expenses' | 'profit'; + +interface FinancialRow extends Record { + account: string; + id: string; + summaryKind?: SummaryKind; +} + +const numberFormat = new Intl.NumberFormat('en-US'); +const numberFormatter: Formatter = (_row, _cell, value) => numberFormat.format(Number(value)); + +const summaryAccountFormatter: Formatter = (_row, _cell, value, _column, item) => + item.summaryKind ? `${value}` : value; + +const Example58: React.FC = () => { + const [columns, setColumns] = useState([]); + const [dataset, setDataset] = useState([]); + const [gridOptions, setGridOptions] = useState(undefined); + const [subTitleStyle, setSubTitleStyle] = useState('display: block'); + const reactGridRef = useRef(null); + + useEffect(() => { + defineGrid(); + setDataset(getData()); + }, []); + + function reactGridReady(reactGrid: SlickgridReactInstance) { + reactGridRef.current = reactGrid; + } + + function defineGrid() { + const createPeriodColumn = (id: PeriodField, name: string, sticky = false): Column => ({ + id, + name, + field: id, + cssClass: sticky ? 'financial-sticky-candidate' : 'financial-month-column', + headerCssClass: sticky ? 'financial-sticky-candidate-header' : '', + minWidth: 88, + resizable: true, + sortable: false, + ...(sticky ? { sticky: 'both' as const } : {}), + width: 96, + formatter: numberFormatter, + }); + + setColumns([ + { + id: 'account', + name: 'Account', + field: 'account', + cssClass: 'financial-account-column', + headerCssClass: 'financial-account-header', + minWidth: 160, + sticky: 'both', + resizable: true, + sortable: false, + width: 190, + formatter: summaryAccountFormatter, + }, + createPeriodColumn('jan', 'Jan'), + createPeriodColumn('feb', 'Feb'), + createPeriodColumn('mar', 'Mar'), + createPeriodColumn('q1', 'Q1', true), + createPeriodColumn('apr', 'Apr'), + createPeriodColumn('may', 'May'), + createPeriodColumn('jun', 'Jun'), + createPeriodColumn('q2', 'Q2', true), + createPeriodColumn('jul', 'Jul'), + createPeriodColumn('aug', 'Aug'), + createPeriodColumn('sep', 'Sep'), + createPeriodColumn('q3', 'Q3', true), + createPeriodColumn('oct', 'Oct'), + createPeriodColumn('nov', 'Nov'), + createPeriodColumn('dec', 'Dec'), + createPeriodColumn('q4', 'Q4', true), + { + ...createPeriodColumn('ytd', 'YTD'), + cssClass: 'financial-ytd-column financial-sticky-candidate', + headerCssClass: 'financial-ytd-header financial-sticky-candidate-header', + sticky: 'both', + }, + ]); + + setGridOptions({ + autoResize: { container: '#demo-container' }, + docking: { + maxColumnViewportWidthPercent: 60, + maxRowViewportHeightPercent: 45, + }, + enableAutoResize: true, + enableCellNavigation: true, + enableColumnReorder: false, + enableTextSelectionOnCells: true, + gridHeight: 510, + gridWidth: 1050, + rowHeight: 32, + stickyRows: { both: ['total-revenue', 'total-expenses', 'net-profit'] }, + dataView: { + globalItemMetadataProvider: { + getRowMetadata: (item: FinancialRow): ItemMetadata | null => + item.summaryKind ? { cssClasses: `financial-summary-row financial-summary-${item.summaryKind}` } : null, + }, + }, + }); + } + + function getData(): FinancialRow[] { + const accounts = [ + 'Product A sales', + 'Product B sales', + 'Product C sales', + 'License revenue', + 'Service revenue', + 'Support contracts', + 'Training income', + 'Consulting', + 'Hosting fees', + 'Hardware resale', + 'Royalties', + 'Interest income', + 'Partner rebates', + 'Marketplace sales', + 'Data subscriptions', + 'Maintenance renewals', + 'Professional services', + 'Implementation fees', + 'Usage overages', + 'Other operating income', + ]; + const detailRows = accounts.map((account, index) => createFinancialRow(`account-${index}`, account, 3800 + index * 1275, index)); + const totalRevenue = createSummaryRow('total-revenue', 'Total Revenue', detailRows, 1, 'revenue'); + const totalExpenses = createSummaryRow('total-expenses', 'Total Expenses', detailRows, 0.69, 'expenses'); + const netProfit = createSummaryRow('net-profit', 'Net Profit', [totalRevenue, totalExpenses], 1, 'profit', true); + const followOnDefinitions: Array<[string, string, number]> = [ + ['capex-memo', 'Capex (memo)', 5200], + ['headcount-cost', 'Headcount cost', 2850], + ['rnd-memo', 'R&D (memo)', 1900], + ['grants-memo', 'Grants (memo)', 1500], + ['fx-gain-loss', 'FX gain/loss', 4700], + ['provisions', 'Provisions', 5600], + ]; + const followOnRows = followOnDefinitions.map(([id, account, base], index) => + createFinancialRow(id, account, base, accounts.length + index) + ); + + return [...detailRows, totalRevenue, totalExpenses, netProfit, ...followOnRows]; + } + + function createFinancialRow(id: string, account: string, base: number, seed: number): FinancialRow { + const months = Object.fromEntries( + MONTH_FIELDS.map((month, monthIndex) => { + const seasonalFactor = 0.8 + ((seed * 19 + monthIndex * 13) % 43) / 100; + return [month, Math.round(base * seasonalFactor)]; + }) + ) as Record; + + return createRowFromMonths(id, account, months); + } + + function createSummaryRow( + id: string, + account: string, + source: FinancialRow[], + factor: number, + summaryKind: SummaryKind, + subtractExpenses = false + ): FinancialRow { + const months = Object.fromEntries( + MONTH_FIELDS.map((month) => { + const total = subtractExpenses ? source[0][month] - source[1][month] : source.reduce((sum, row) => sum + row[month], 0) * factor; + return [month, Math.round(total)]; + }) + ) as Record; + + return { ...createRowFromMonths(id, account, months), summaryKind }; + } + + function createRowFromMonths(id: string, account: string, months: Record): FinancialRow { + const q1 = months.jan + months.feb + months.mar; + const q2 = months.apr + months.may + months.jun; + const q3 = months.jul + months.aug + months.sep; + const q4 = months.oct + months.nov + months.dec; + + return { id, account, ...months, q1, q2, q3, q4, ytd: q1 + q2 + q3 + q4 }; + } + + function toggleSubTitle() { + setSubTitleStyle((style) => (style === 'display: block' ? 'display: none' : 'display: block')); + reactGridRef.current?.resizerService?.resizeGrid(); + } + + return !gridOptions ? null : ( +
    +

    + Example 58: Sticky Financial Report + + + code + + + +

    + +
    + Financial report fixture for the sticky rows/columns design. Account, Q1–Q4, and YTD dock to whichever edge is closest after normal + scrolling would clip them. Total Revenue, Total Expenses, and Net Profit also use two-sided stickiness and dock to whichever + vertical edge is closest after they have been seen. +
    + +
    + reactGridReady($event.detail)} + /> +
    + +
    + + left sticky column + + + bottom sticky row + + + sticky intersection + + + sticky quarter + +
    +
    + ); +}; + +export default Example58; diff --git a/with-i18n-translate/src/examples/slickgrid/example14.scss b/with-i18n-translate/src/examples/slickgrid/example14.scss deleted file mode 100644 index 6e31054..0000000 --- a/with-i18n-translate/src/examples/slickgrid/example14.scss +++ /dev/null @@ -1,11 +0,0 @@ -/** You can change the pinned/frozen border styling through this css override */ - -.slick-row .slick-cell.frozen:last-child, -.slick-headerrow-column.frozen:last-child, -.slick-footerrow-column.frozen:last-child { - border-right: 1px solid #969696 !important; -} - -.slick-pane-bottom { - border-top: 1px solid #969696 !important; -} diff --git a/with-i18n-translate/src/examples/slickgrid/example20.scss b/with-i18n-translate/src/examples/slickgrid/example20.scss index 6e31054..43a5213 100644 --- a/with-i18n-translate/src/examples/slickgrid/example20.scss +++ b/with-i18n-translate/src/examples/slickgrid/example20.scss @@ -1,11 +1,3 @@ -/** You can change the pinned/frozen border styling through this css override */ - -.slick-row .slick-cell.frozen:last-child, -.slick-headerrow-column.frozen:last-child, -.slick-footerrow-column.frozen:last-child { - border-right: 1px solid #969696 !important; -} - -.slick-pane-bottom { - border-top: 1px solid #969696 !important; +#grid20 .slick-cell.city-of-origin-column { + background-color: #e9e9e9 !important; } diff --git a/with-i18n-translate/src/examples/slickgrid/example58.scss b/with-i18n-translate/src/examples/slickgrid/example58.scss new file mode 100644 index 0000000..648e24f --- /dev/null +++ b/with-i18n-translate/src/examples/slickgrid/example58.scss @@ -0,0 +1,74 @@ +.financial-report-grid { + max-width: 1000px; + + .slick-cell.financial-account-column, + .slick-header-column.financial-account-header, + .slick-cell.financial-sticky-candidate, + .slick-header-column.financial-sticky-candidate-header { + background-color: #e4edf7 !important; + font-weight: 600; + } + + .slick-cell.financial-month-column, + .slick-cell.financial-sticky-candidate { + text-align: right; + } + + .slick-cell.slick-cell-sticky, + .slick-header-column.slick-column-sticky { + background-color: #e4edf7 !important; + } + + .slick-row.financial-summary-row .slick-cell { + background-color: #245486 !important; + border-color: #3d6994; + color: #fff !important; + font-weight: 700; + } + + .slick-row.financial-summary-profit .slick-cell { + background-color: #173e68 !important; + } + + .slick-row.financial-summary-row .financial-summary-label::before { + color: #f7a73f; + content: '↗'; + display: inline-block; + margin-right: 6px; + } +} + +.financial-report-legend { + display: flex; + flex-wrap: wrap; + gap: 14px; + margin-top: 10px; + max-width: 1000px; + font-size: 0.85rem; + + span { + align-items: center; + display: inline-flex; + gap: 5px; + } +} + +.financial-report-legend-swatch { + border: 1px solid #c8d5e2; + display: inline-block; + height: 13px; + width: 13px; +} + +.financial-report-legend-account, +.financial-report-legend-sticky { + background-color: #e4edf7; +} + +.financial-report-legend-total { + background-color: #245486; +} + +.financial-report-legend-intersection { + background-color: #173e68; +} diff --git a/with-i18n-translate/src/styles.scss b/with-i18n-translate/src/styles.scss index a2fe55d..49d6a4d 100644 --- a/with-i18n-translate/src/styles.scss +++ b/with-i18n-translate/src/styles.scss @@ -16,6 +16,11 @@ $primary-color: #0e6cfa; $slick-primary-color: $primary-color // $slick-input-focus-box-shadow: 0 0 0 0.25rem rgba($primary-color, 0.25), ); +// optional packages styling, must be loaded after the theme to reuse its SASS variables +@use '@slickgrid-universal/composite-editor-component/dist/styles/sass/slick-composite-editor.scss'; +@use '@slickgrid-universal/custom-tooltip-plugin/dist/styles/sass/slick-custom-tooltip.scss'; +@use '@slickgrid-universal/row-detail-plugin/dist/styles/sass/slick-row-detail.scss'; + // -- 2. load with legacy `@import` // $slick-primary-color: red; // $slick-link-color: red;