diff --git a/.changeset/cold-groups-search.md b/.changeset/cold-groups-search.md new file mode 100644 index 0000000..079d964 --- /dev/null +++ b/.changeset/cold-groups-search.md @@ -0,0 +1,5 @@ +--- +"sqlseal": minor +--- + +added ability to manually define column types diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 961e3a5..6615491 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -37,6 +37,7 @@ export default defineConfig({ { text: 'Links and Images', link: '/links-and-images' }, { text: 'CSV Viewer', link: '/csv-viewer' }, { text: 'Query Configuration', link: '/query-configuration' }, + { text: 'Define Column Types', link: '/define-column-types' }, { text: 'Troubleshooting', link: '/troubleshooting' }, { text: 'Future Plans', link: '/future-plans' }, { text: 'Changelog', link: '/changelog' } diff --git a/docs/define-column-types.md b/docs/define-column-types.md new file mode 100644 index 0000000..beb3cfc --- /dev/null +++ b/docs/define-column-types.md @@ -0,0 +1,7 @@ +# Define Column Types (CSV files) + +SQLSeal sets types of your data automatically. This is the mechanism which for most of the cases works perfectly, but for more advanced use-cases, you might want to force specific type of the column (for example you might have ids which you want to treat like text, even if they consist of just the numbers). To enforce a specific type, you can set individual types inside the CSV Viewer: + +![Setting Column Type](./setting-column-type.png) + +Changing data type enables corresponding controls. \ No newline at end of file diff --git a/docs/setting-column-type.png b/docs/setting-column-type.png new file mode 100644 index 0000000..1b632a3 Binary files /dev/null and b/docs/setting-column-type.png differ diff --git a/package.json b/package.json index 0bdcff5..85485aa 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,11 @@ "@types/estraverse": "^5.1.7", "@types/jest": "^29.5.14", "@types/lodash": "^4.17.16", - "@types/node": "^22.15.12", - "@types/papaparse": "^5.3.15", + "@types/node": "^22.15.18", + "@types/papaparse": "^5.3.16", "@types/sql.js": "^1.4.9", - "@typescript-eslint/eslint-plugin": "8.32.0", - "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/eslint-plugin": "8.32.1", + "@typescript-eslint/parser": "8.32.1", "builtin-modules": "5.0.0", "electron-rebuild": "^3.2.9", "esbuild": "0.25.4", @@ -43,23 +43,23 @@ "jest": "^29.7.0", "obsidian": "^1.8.7", "prettier": "3.5.3", - "ts-jest": "^29.3.2", + "ts-jest": "^29.3.4", "tslib": "2.8.1", "typescript": "5.8.3", "vitepress": "^1.6.3", - "vue": "^3.5.13" + "vue": "^3.5.14" }, "dependencies": { "@ag-grid-community/theming": "^32.3.5", "@codemirror/language": "^6.11.0", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.36.7", + "@codemirror/view": "^6.36.8", "@hypersphere/omnibus": "^0.1.6", "@jlongster/sql.js": "^1.6.7", "@types/jsonpath": "^0.2.4", "@vanakat/plugin-api": "^0.2.1", "absurd-sql": "^0.0.54", - "ag-grid-community": "^33.2.4", + "ag-grid-community": "^33.3.0", "comlink": "^4.4.2", "esbuild-plugin-polyfill-node": "^0.3.0", "esprima": "^4.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88bf579..959cbff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^6.5.2 version: 6.5.2 '@codemirror/view': - specifier: ^6.36.7 - version: 6.36.7 + specifier: ^6.36.8 + version: 6.36.8 '@hypersphere/omnibus': specifier: ^0.1.6 version: 0.1.6 @@ -31,13 +31,13 @@ importers: version: 0.2.4 '@vanakat/plugin-api': specifier: ^0.2.1 - version: 0.2.1(@codemirror/state@6.5.2)(@codemirror/view@6.36.7)(eslint@9.15.0) + version: 0.2.1(@codemirror/state@6.5.2)(@codemirror/view@6.36.8)(eslint@9.15.0) absurd-sql: specifier: ^0.0.54 version: 0.0.54 ag-grid-community: - specifier: ^33.2.4 - version: 33.2.4 + specifier: ^33.3.0 + version: 33.3.0 comlink: specifier: ^4.4.2 version: 4.4.2 @@ -100,20 +100,20 @@ importers: specifier: ^4.17.16 version: 4.17.16 '@types/node': - specifier: ^22.15.12 - version: 22.15.12 + specifier: ^22.15.18 + version: 22.15.18 '@types/papaparse': - specifier: ^5.3.15 - version: 5.3.15 + specifier: ^5.3.16 + version: 5.3.16 '@types/sql.js': specifier: ^1.4.9 version: 1.4.9 '@typescript-eslint/eslint-plugin': - specifier: 8.32.0 - version: 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.15.0)(typescript@5.8.3))(eslint@9.15.0)(typescript@5.8.3) + specifier: 8.32.1 + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.15.0)(typescript@5.8.3))(eslint@9.15.0)(typescript@5.8.3) '@typescript-eslint/parser': - specifier: 8.32.0 - version: 8.32.0(eslint@9.15.0)(typescript@5.8.3) + specifier: 8.32.1 + version: 8.32.1(eslint@9.15.0)(typescript@5.8.3) builtin-modules: specifier: 5.0.0 version: 5.0.0 @@ -128,16 +128,16 @@ importers: version: 1.4.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.12) + version: 29.7.0(@types/node@22.15.18) obsidian: specifier: ^1.8.7 - version: 1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.7) + version: 1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.8) prettier: specifier: 3.5.3 version: 3.5.3 ts-jest: - specifier: ^29.3.2 - version: 29.3.2(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@22.15.12))(typescript@5.8.3) + specifier: ^29.3.4 + version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@22.15.18))(typescript@5.8.3) tslib: specifier: 2.8.1 version: 2.8.1 @@ -146,10 +146,10 @@ importers: version: 5.8.3 vitepress: specifier: ^1.6.3 - version: 1.6.3(@algolia/client-search@5.24.0)(@types/node@22.15.12)(postcss@8.5.3)(search-insights@2.17.3)(typescript@5.8.3) + version: 1.6.3(@algolia/client-search@5.25.0)(@types/node@22.15.18)(postcss@8.5.3)(search-insights@2.17.3)(typescript@5.8.3) vue: - specifier: ^3.5.13 - version: 3.5.13(typescript@5.8.3) + specifier: ^3.5.14 + version: 3.5.14(typescript@5.8.3) packages: @@ -179,56 +179,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.24.0': - resolution: {integrity: sha512-pNTIB5YqVVwu6UogvdX8TqsRZENaflqMMjdY7/XIPMNGrBoNH9tewINLI7+qc9tIaOLcAp3ZldqoEwAihZZ3ig==} + '@algolia/client-abtesting@5.25.0': + resolution: {integrity: sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.24.0': - resolution: {integrity: sha512-IF+r9RRQsIf0ylIBNFxo7c6hDxxuhIfIbffhBXEF1HD13rjhP5AVfiaea9RzbsAZoySkm318plDpH/nlGIjbRA==} + '@algolia/client-analytics@5.25.0': + resolution: {integrity: sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.24.0': - resolution: {integrity: sha512-p8K6tiXQTebRBxbrzWIfGCvfkT+Umml+2lzI92acZjHsvl6KYH6igOfVstKqXJRei9pvRzEEvVDNDLXDVleGTA==} + '@algolia/client-common@5.25.0': + resolution: {integrity: sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.24.0': - resolution: {integrity: sha512-jOHF0+tixR3IZJMhZPquFNdCVPzwzzXoiqVsbTvfKojeaY6ZXybgUiTSB8JNX+YpsUT8Ebhu3UvRy4mw2PbEzw==} + '@algolia/client-insights@5.25.0': + resolution: {integrity: sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.24.0': - resolution: {integrity: sha512-Fx/Fp6d8UmDBHecTt0XYF8C9TAaA3qeCQortfGSZzWp4gVmtrUCFNZ1SUwb8ULREnO9DanVrM5hGE8R8C4zZTQ==} + '@algolia/client-personalization@5.25.0': + resolution: {integrity: sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.24.0': - resolution: {integrity: sha512-F8ypOedSMhz6W7zuT5O1SXXsdXSOVhY2U6GkRbYk/mzrhs3jWFR3uQIfeQVWmsJjUwIGZmPoAr9E+T/Zm2M4wA==} + '@algolia/client-query-suggestions@5.25.0': + resolution: {integrity: sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.24.0': - resolution: {integrity: sha512-k+nuciQuq7WERNNE+hsx3DX636zIy+9R4xdtvW3PANT2a2BDGOv3fv2mta8+QUMcVTVcGe/Mo3QCb4pc1HNoxA==} + '@algolia/client-search@5.25.0': + resolution: {integrity: sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.24.0': - resolution: {integrity: sha512-/lqVxmrvwoA+OyVK4XLMdz/PJaCTW4qYchX1AZ+98fdnH3K6XM/kMydQLfP0bUNGBQbmVrF88MqhqZRnZEn/MA==} + '@algolia/ingestion@1.25.0': + resolution: {integrity: sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.24.0': - resolution: {integrity: sha512-cRisDXQJhvfZCXL4hD22qca2CmW52TniOx6L7pvkaBDx0oQk1k9o+3w11fgfcCG+47OndMeNx5CMpu+K+COMzg==} + '@algolia/monitoring@1.25.0': + resolution: {integrity: sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.24.0': - resolution: {integrity: sha512-JTMz0JqN2gidvKa2QCF/rMe8LNtdHaght03px2cluZaZfBRYy8TgHgkCeBspKKvV/abWJwl7J0FzWThCshqT3w==} + '@algolia/recommend@5.25.0': + resolution: {integrity: sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.24.0': - resolution: {integrity: sha512-B2Gc+iSxct1WSza5CF6AgfNgmLvVb61d5bqmIWUZixtJIhyAC6lSQZuF+nvt+lmKhQwuY2gYjGGClil8onQvKQ==} + '@algolia/requester-browser-xhr@5.25.0': + resolution: {integrity: sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.24.0': - resolution: {integrity: sha512-6E5+hliqGc5w8ZbyTAQ+C3IGLZ/GiX623Jl2bgHA974RPyFWzVSj4rKqkboUAxQmrFY7Z02ybJWVZS5OhPQocA==} + '@algolia/requester-fetch@5.25.0': + resolution: {integrity: sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.24.0': - resolution: {integrity: sha512-zM+nnqZpiQj20PyAh6uvgdSz+hD7Rj7UfAZwizqNP+bLvcbGXZwABERobuilkCQqyDBBH4uv0yqIcPRl8dSBEg==} + '@algolia/requester-node-http@5.25.0': + resolution: {integrity: sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -239,8 +239,8 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.1': - resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} '@babel/core@7.27.1': @@ -251,8 +251,8 @@ packages: resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.1': - resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.27.1': @@ -285,8 +285,8 @@ packages: resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.1': - resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true @@ -385,8 +385,8 @@ packages: resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.1': - resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.27.1': @@ -461,8 +461,8 @@ packages: '@codemirror/state@6.5.2': resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - '@codemirror/view@6.36.7': - resolution: {integrity: sha512-kCWGW/chWGPgZqfZ36Um9Iz0X2IVpmCjg1P/qY6B6a2ecXtWRRAigmpJ6YgUQ5lTWXMyyVdfmpzhLZmsZQMbtg==} + '@codemirror/view@6.36.8': + resolution: {integrity: sha512-yoRo4f+FdnD01fFt4XpfpMCcCAo9QvZOtbrXExn4SqzH32YC6LgzqxfLZw/r6Ge65xyY03mK/UfUqrVw1gFiFg==} '@docsearch/css@3.8.2': resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} @@ -832,15 +832,15 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@hypersphere/omnibus@0.1.6': resolution: {integrity: sha512-agZuKyhdW0n1JoLYZUuA6Du1QoQn39/LapFgRtbJs7fyRM62C9O2PWISHUCwAKnC1Splshpd8glQgx5pA2zkCg==} - '@iconify-json/simple-icons@1.2.33': - resolution: {integrity: sha512-nL5/UmI9x5PQ/AHv6bOaL2pH6twEdEz4pI89efB/K7HFn5etQnxMtGx9DFlOg/sRA2/yFpX8KXvc95CSDv5bJA==} + '@iconify-json/simple-icons@1.2.34': + resolution: {integrity: sha512-1FRWEA94hSl5zmBogRh6lQL36l7bVTfrl0n5+QJ+WmXmw70RccPT5phqeiSynwo3IhUWKoW2LiajyUMeweXW8g==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -1209,11 +1209,11 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.15.12': - resolution: {integrity: sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==} + '@types/node@22.15.18': + resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} - '@types/papaparse@5.3.15': - resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==} + '@types/papaparse@5.3.16': + resolution: {integrity: sha512-T3VuKMC2H0lgsjI9buTB3uuKj3EMD2eap1MOuEQuBQ44EnDx/IkGhU6EwiTf9zG3za4SKlmwKAImdDKdNnCsXg==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -1250,8 +1250,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.32.0': - resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==} + '@typescript-eslint/eslint-plugin@8.32.1': + resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1268,8 +1268,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.32.0': - resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==} + '@typescript-eslint/parser@8.32.1': + resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1279,8 +1279,8 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.32.0': - resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==} + '@typescript-eslint/scope-manager@8.32.1': + resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@7.18.0': @@ -1293,8 +1293,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.32.0': - resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==} + '@typescript-eslint/type-utils@8.32.1': + resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1304,8 +1304,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.32.0': - resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==} + '@typescript-eslint/types@8.32.1': + resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -1317,8 +1317,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.32.0': - resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==} + '@typescript-eslint/typescript-estree@8.32.1': + resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -1329,8 +1329,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.32.0': - resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==} + '@typescript-eslint/utils@8.32.1': + resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1340,8 +1340,8 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.32.0': - resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==} + '@typescript-eslint/visitor-keys@8.32.1': + resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -1350,24 +1350,24 @@ packages: '@vanakat/plugin-api@0.2.1': resolution: {integrity: sha512-m2gVJFTPoIG+fUDAWYPPW/XoywBXrGtYOZFZdQHZmL62Zoc9NntCID76/Wu17DAanQ4aiZN8yRHHXlfq6sPvsQ==} - '@vitejs/plugin-vue@5.2.3': - resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@3.5.14': + resolution: {integrity: sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@3.5.14': + resolution: {integrity: sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@3.5.14': + resolution: {integrity: sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@3.5.14': + resolution: {integrity: sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==} '@vue/devtools-api@7.7.6': resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==} @@ -1378,22 +1378,22 @@ packages: '@vue/devtools-shared@7.7.6': resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==} - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + '@vue/reactivity@3.5.14': + resolution: {integrity: sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==} - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + '@vue/runtime-core@3.5.14': + resolution: {integrity: sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==} - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + '@vue/runtime-dom@3.5.14': + resolution: {integrity: sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==} - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + '@vue/server-renderer@3.5.14': + resolution: {integrity: sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==} peerDependencies: - vue: 3.5.13 + vue: 3.5.14 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.14': + resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==} '@vueuse/core@12.8.2': resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} @@ -1464,11 +1464,11 @@ packages: ag-charts-types@10.3.5: resolution: {integrity: sha512-DtvV+IS4RlocGV2IcaQOe/eM6eBGGCvkLnwxGkDxKa8ddxivv90fwlfPxK0O5XnVectiKtWFfOw35Cm0k+4vMw==} - ag-charts-types@11.2.4: - resolution: {integrity: sha512-a1aQjtQ9ZH+J8BF3YcWAIHUt9ZLiL9IVZ8R5h7z2CkTNu2TPq5UlsCcF0/YZKc1M8CM0CdSNLSGQuWUwDNxAcA==} + ag-charts-types@11.3.0: + resolution: {integrity: sha512-FXyk24PizYS4QoPTk7FVaFDgvmZYBQo6sgl5n3lkHugTNTZBtwBmN3i4JnBXgNjGDB6Q05MRkoBA2rvW8rPBag==} - ag-grid-community@33.2.4: - resolution: {integrity: sha512-7XT1+wxmMlMVXB27BJOzlft9ATB0C5HOJcCGMc8dCO2W17JXbNknVEEDGTBKoSvA4Cei8sARrRDxmPgY8mWopQ==} + ag-grid-community@33.3.0: + resolution: {integrity: sha512-Nr7Wd3Qc0tbR+BWZ4y8LgEwLkHTvrtJ4f4k5eb4zuoNZFM52MyLfu+m4OAplIm9nOVBdp5tg/ALWvu13jak+Nw==} agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -1485,8 +1485,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - algoliasearch@5.24.0: - resolution: {integrity: sha512-CkaUygzZ91Xbw11s0CsHMawrK3tl+Ue57725HGRgRzKgt2Z4wvXVXRCtQfvzh8K7Tp4Zp7f1pyHAtMROtTJHxg==} + algoliasearch@5.25.0: + resolution: {integrity: sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -1647,8 +1647,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001717: - resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==} + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1753,8 +1753,8 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1837,8 +1837,8 @@ packages: deprecated: Please use @electron/rebuild moving forward. There is no API change, just a package name change hasBin: true - electron-to-chromium@1.5.150: - resolution: {integrity: sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==} + electron-to-chromium@1.5.155: + resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -2199,8 +2199,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -2240,6 +2240,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + engines: {node: '>= 4'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2954,8 +2958,8 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.5: - resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==} + preact@10.26.6: + resolution: {integrity: sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g==} prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} @@ -2995,8 +2999,8 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -3117,8 +3121,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true @@ -3305,8 +3309,8 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-jest@29.3.2: - resolution: {integrity: sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==} + ts-jest@29.3.4: + resolution: {integrity: sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3480,8 +3484,8 @@ packages: postcss: optional: true - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + vue@3.5.14: + resolution: {integrity: sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -3564,110 +3568,110 @@ snapshots: '@ag-grid-community/core': 32.3.5 tslib: 2.8.1 - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) - '@algolia/client-search': 5.24.0 - algoliasearch: 5.24.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0) + '@algolia/client-search': 5.25.0 + algoliasearch: 5.25.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)': dependencies: - '@algolia/client-search': 5.24.0 - algoliasearch: 5.24.0 + '@algolia/client-search': 5.25.0 + algoliasearch: 5.25.0 - '@algolia/client-abtesting@5.24.0': + '@algolia/client-abtesting@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/client-analytics@5.24.0': + '@algolia/client-analytics@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/client-common@5.24.0': {} + '@algolia/client-common@5.25.0': {} - '@algolia/client-insights@5.24.0': + '@algolia/client-insights@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/client-personalization@5.24.0': + '@algolia/client-personalization@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/client-query-suggestions@5.24.0': + '@algolia/client-query-suggestions@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/client-search@5.24.0': + '@algolia/client-search@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/ingestion@1.24.0': + '@algolia/ingestion@1.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/monitoring@1.24.0': + '@algolia/monitoring@1.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/recommend@5.24.0': + '@algolia/recommend@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-common': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 - '@algolia/requester-browser-xhr@5.24.0': + '@algolia/requester-browser-xhr@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 + '@algolia/client-common': 5.25.0 - '@algolia/requester-fetch@5.24.0': + '@algolia/requester-fetch@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 + '@algolia/client-common': 5.25.0 - '@algolia/requester-node-http@5.24.0': + '@algolia/requester-node-http@5.25.0': dependencies: - '@algolia/client-common': 5.24.0 + '@algolia/client-common': 5.25.0 '@ampproject/remapping@2.3.0': dependencies: @@ -3680,22 +3684,22 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.1': {} + '@babel/compat-data@7.27.2': {} '@babel/core@7.27.1': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) '@babel/helpers': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.1 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3704,15 +3708,15 @@ snapshots: '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.27.1': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/helper-validator-option': 7.27.1 browserslist: 4.24.5 lru-cache: 5.1.1 @@ -3744,10 +3748,10 @@ snapshots: '@babel/helpers@7.27.1': dependencies: - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 - '@babel/parser@7.27.1': + '@babel/parser@7.27.2': dependencies: '@babel/types': 7.27.1 @@ -3838,20 +3842,20 @@ snapshots: '@babel/runtime@7.27.1': {} - '@babel/template@7.27.1': + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@babel/traverse@7.27.1': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.0 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3877,7 +3881,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 '@changesets/assemble-release-plan@6.0.8': dependencies: @@ -3886,7 +3890,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@changesets/changelog-git@0.2.1': dependencies: @@ -3919,7 +3923,7 @@ snapshots: package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 spawndamnit: 3.0.1 term-size: 2.2.1 @@ -3942,7 +3946,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.1 + semver: 7.7.2 '@changesets/get-release-plan@4.0.12': dependencies: @@ -4008,7 +4012,7 @@ snapshots: '@codemirror/language@6.11.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.7 + '@codemirror/view': 6.36.8 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -4018,7 +4022,7 @@ snapshots: dependencies: '@marijn/find-cluster-break': 1.0.2 - '@codemirror/view@6.36.7': + '@codemirror/view@6.36.8': dependencies: '@codemirror/state': 6.5.2 style-mod: 4.1.2 @@ -4026,10 +4030,10 @@ snapshots: '@docsearch/css@3.8.2': {} - '@docsearch/js@3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3)': + '@docsearch/js@3.8.2(@algolia/client-search@5.25.0)(search-insights@2.17.3)': dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3) - preact: 10.26.5 + '@docsearch/react': 3.8.2(@algolia/client-search@5.25.0)(search-insights@2.17.3) + preact: 10.26.6 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -4037,12 +4041,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3)': + '@docsearch/react@3.8.2(@algolia/client-search@5.25.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.24.0)(algoliasearch@5.24.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.25.0)(algoliasearch@5.25.0) '@docsearch/css': 3.8.2 - algoliasearch: 5.24.0 + algoliasearch: 5.25.0 optionalDependencies: search-insights: 2.17.3 transitivePeerDependencies: @@ -4202,7 +4206,7 @@ snapshots: '@eslint/config-array@0.19.2': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4218,7 +4222,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -4251,11 +4255,11 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} '@hypersphere/omnibus@0.1.6': {} - '@iconify-json/simple-icons@1.2.33': + '@iconify-json/simple-icons@1.2.34': dependencies: '@iconify/types': 2.0.0 @@ -4274,7 +4278,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4287,14 +4291,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.15.12) + jest-config: 29.7.0(@types/node@22.15.18) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4319,7 +4323,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4337,7 +4341,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.15.12 + '@types/node': 22.15.18 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4359,7 +4363,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4429,7 +4433,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -4501,7 +4505,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@npmcli/move-file@2.0.1': dependencies: @@ -4628,7 +4632,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -4640,7 +4644,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@types/babel__traverse@7.20.7': @@ -4651,7 +4655,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/responselike': 1.0.3 '@types/codemirror@5.60.8': @@ -4672,7 +4676,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/hast@3.0.4': dependencies: @@ -4701,7 +4705,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/linkify-it@5.0.0': {} @@ -4720,22 +4724,22 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.15.12': + '@types/node@22.15.18': dependencies: undici-types: 6.21.0 - '@types/papaparse@5.3.15': + '@types/papaparse@5.3.16': dependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/responselike@1.0.3': dependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/sql.js@1.4.9': dependencies: '@types/emscripten': 1.40.1 - '@types/node': 22.15.12 + '@types/node': 22.15.18 '@types/stack-utils@2.0.3': {} @@ -4771,17 +4775,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.15.0)(typescript@5.8.3))(eslint@9.15.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.15.0)(typescript@5.8.3))(eslint@9.15.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.0(eslint@9.15.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.0 - '@typescript-eslint/type-utils': 8.32.0(eslint@9.15.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.0(eslint@9.15.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.0 + '@typescript-eslint/parser': 8.32.1(eslint@9.15.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.15.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.15.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 eslint: 9.15.0 graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.4 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 @@ -4794,20 +4798,20 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0 + debug: 4.4.1 eslint: 9.15.0 optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.0(eslint@9.15.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.15.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.32.0 - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.0 - debug: 4.4.0 + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 eslint: 9.15.0 typescript: 5.8.3 transitivePeerDependencies: @@ -4818,16 +4822,16 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.32.0': + '@typescript-eslint/scope-manager@8.32.1': dependencies: - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/visitor-keys': 8.32.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 '@typescript-eslint/type-utils@7.18.0(eslint@9.15.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) '@typescript-eslint/utils': 7.18.0(eslint@9.15.0)(typescript@5.4.5) - debug: 4.4.0 + debug: 4.4.1 eslint: 9.15.0 ts-api-utils: 1.4.3(typescript@5.4.5) optionalDependencies: @@ -4835,11 +4839,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.32.0(eslint@9.15.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.15.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.0(eslint@9.15.0)(typescript@5.8.3) - debug: 4.4.0 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.15.0)(typescript@5.8.3) + debug: 4.4.1 eslint: 9.15.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 @@ -4848,32 +4852,32 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.32.0': {} + '@typescript-eslint/types@8.32.1': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 1.4.3(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/visitor-keys': 8.32.0 - debug: 4.4.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -4890,12 +4894,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.32.0(eslint@9.15.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.15.0)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.15.0) - '@typescript-eslint/scope-manager': 8.32.0 - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) eslint: 9.15.0 typescript: 5.8.3 transitivePeerDependencies: @@ -4906,18 +4910,18 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.32.0': + '@typescript-eslint/visitor-keys@8.32.1': dependencies: - '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.3.0': {} - '@vanakat/plugin-api@0.2.1(@codemirror/state@6.5.2)(@codemirror/view@6.36.7)(eslint@9.15.0)': + '@vanakat/plugin-api@0.2.1(@codemirror/state@6.5.2)(@codemirror/view@6.36.8)(eslint@9.15.0)': dependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0)(typescript@5.4.5))(eslint@9.15.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.18.0(eslint@9.15.0)(typescript@5.4.5) - obsidian: 1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.7) + obsidian: 1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.8) typescript: 5.4.5 transitivePeerDependencies: - '@codemirror/state' @@ -4925,40 +4929,40 @@ snapshots: - eslint - supports-color - '@vitejs/plugin-vue@5.2.3(vite@5.4.19(@types/node@22.15.12))(vue@3.5.13(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.19(@types/node@22.15.18))(vue@3.5.14(typescript@5.8.3))': dependencies: - vite: 5.4.19(@types/node@22.15.12) - vue: 3.5.13(typescript@5.8.3) + vite: 5.4.19(@types/node@22.15.18) + vue: 3.5.14(typescript@5.8.3) - '@vue/compiler-core@3.5.13': + '@vue/compiler-core@3.5.14': dependencies: - '@babel/parser': 7.27.1 - '@vue/shared': 3.5.13 + '@babel/parser': 7.27.2 + '@vue/shared': 3.5.14 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.13': + '@vue/compiler-dom@3.5.14': dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.14 + '@vue/shared': 3.5.14 - '@vue/compiler-sfc@3.5.13': + '@vue/compiler-sfc@3.5.14': dependencies: - '@babel/parser': 7.27.1 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@babel/parser': 7.27.2 + '@vue/compiler-core': 3.5.14 + '@vue/compiler-dom': 3.5.14 + '@vue/compiler-ssr': 3.5.14 + '@vue/shared': 3.5.14 estree-walker: 2.0.2 magic-string: 0.30.17 postcss: 8.5.3 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.13': + '@vue/compiler-ssr@3.5.14': dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.14 + '@vue/shared': 3.5.14 '@vue/devtools-api@7.7.6': dependencies: @@ -4978,36 +4982,36 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.13': + '@vue/reactivity@3.5.14': dependencies: - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.14 - '@vue/runtime-core@3.5.13': + '@vue/runtime-core@3.5.14': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.14 + '@vue/shared': 3.5.14 - '@vue/runtime-dom@3.5.13': + '@vue/runtime-dom@3.5.14': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.14 + '@vue/runtime-core': 3.5.14 + '@vue/shared': 3.5.14 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.3))': + '@vue/server-renderer@3.5.14(vue@3.5.14(typescript@5.8.3))': dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.8.3) + '@vue/compiler-ssr': 3.5.14 + '@vue/shared': 3.5.14 + vue: 3.5.14(typescript@5.8.3) - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.14': {} '@vueuse/core@12.8.2(typescript@5.8.3)': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 12.8.2 '@vueuse/shared': 12.8.2(typescript@5.8.3) - vue: 3.5.13(typescript@5.8.3) + vue: 3.5.14(typescript@5.8.3) transitivePeerDependencies: - typescript @@ -5015,7 +5019,7 @@ snapshots: dependencies: '@vueuse/core': 12.8.2(typescript@5.8.3) '@vueuse/shared': 12.8.2(typescript@5.8.3) - vue: 3.5.13(typescript@5.8.3) + vue: 3.5.14(typescript@5.8.3) optionalDependencies: focus-trap: 7.6.4 transitivePeerDependencies: @@ -5025,7 +5029,7 @@ snapshots: '@vueuse/shared@12.8.2(typescript@5.8.3)': dependencies: - vue: 3.5.13(typescript@5.8.3) + vue: 3.5.14(typescript@5.8.3) transitivePeerDependencies: - typescript @@ -5043,15 +5047,15 @@ snapshots: ag-charts-types@10.3.5: {} - ag-charts-types@11.2.4: {} + ag-charts-types@11.3.0: {} - ag-grid-community@33.2.4: + ag-grid-community@33.3.0: dependencies: - ag-charts-types: 11.2.4 + ag-charts-types: 11.3.0 agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -5071,21 +5075,21 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - algoliasearch@5.24.0: + algoliasearch@5.25.0: dependencies: - '@algolia/client-abtesting': 5.24.0 - '@algolia/client-analytics': 5.24.0 - '@algolia/client-common': 5.24.0 - '@algolia/client-insights': 5.24.0 - '@algolia/client-personalization': 5.24.0 - '@algolia/client-query-suggestions': 5.24.0 - '@algolia/client-search': 5.24.0 - '@algolia/ingestion': 1.24.0 - '@algolia/monitoring': 1.24.0 - '@algolia/recommend': 5.24.0 - '@algolia/requester-browser-xhr': 5.24.0 - '@algolia/requester-fetch': 5.24.0 - '@algolia/requester-node-http': 5.24.0 + '@algolia/client-abtesting': 5.25.0 + '@algolia/client-analytics': 5.25.0 + '@algolia/client-common': 5.25.0 + '@algolia/client-insights': 5.25.0 + '@algolia/client-personalization': 5.25.0 + '@algolia/client-query-suggestions': 5.25.0 + '@algolia/client-search': 5.25.0 + '@algolia/ingestion': 1.25.0 + '@algolia/monitoring': 1.25.0 + '@algolia/recommend': 5.25.0 + '@algolia/requester-browser-xhr': 5.25.0 + '@algolia/requester-fetch': 5.25.0 + '@algolia/requester-node-http': 5.25.0 ansi-colors@4.1.3: {} @@ -5152,7 +5156,7 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.7 @@ -5213,8 +5217,8 @@ snapshots: browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001717 - electron-to-chromium: 1.5.150 + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.155 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) @@ -5264,7 +5268,7 @@ snapshots: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 @@ -5293,7 +5297,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001717: {} + caniuse-lite@1.0.30001718: {} ccount@2.0.1: {} @@ -5362,13 +5366,13 @@ snapshots: dependencies: is-what: 4.1.16 - create-jest@29.7.0(@types/node@22.15.12): + create-jest@29.7.0(@types/node@22.15.18): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.15.12) + jest-config: 29.7.0(@types/node@22.15.18) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5385,7 +5389,7 @@ snapshots: csstype@3.1.3: {} - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 @@ -5445,7 +5449,7 @@ snapshots: dependencies: '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.0 + debug: 4.4.1 detect-libc: 2.0.4 fs-extra: 10.1.0 got: 11.8.6 @@ -5454,14 +5458,14 @@ snapshots: node-api-version: 0.1.4 node-gyp: 9.4.1 ora: 5.4.1 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: - bluebird - supports-color - electron-to-chromium@1.5.150: {} + electron-to-chromium@1.5.155: {} emittery@0.13.1: {} @@ -5600,13 +5604,13 @@ snapshots: '@eslint/plugin-kit': 0.2.8 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 + '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -5909,7 +5913,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -5924,13 +5928,13 @@ snapshots: html-void-elements@3.0.0: {} - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -5942,7 +5946,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -5967,6 +5971,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.4: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -6063,7 +6069,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.27.1 - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -6073,10 +6079,10 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.1 - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -6088,7 +6094,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6118,7 +6124,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 co: 4.6.0 dedent: 1.6.0 @@ -6138,16 +6144,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.15.12): + jest-cli@29.7.0(@types/node@22.15.18): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.15.12) + create-jest: 29.7.0(@types/node@22.15.18) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.15.12) + jest-config: 29.7.0(@types/node@22.15.18) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6157,7 +6163,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.15.12): + jest-config@29.7.0(@types/node@22.15.18): dependencies: '@babel/core': 7.27.1 '@jest/test-sequencer': 29.7.0 @@ -6182,7 +6188,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6211,7 +6217,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6221,7 +6227,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.12 + '@types/node': 22.15.18 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6260,7 +6266,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6295,7 +6301,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6323,7 +6329,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -6362,14 +6368,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6388,7 +6394,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.12 + '@types/node': 22.15.18 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6397,17 +6403,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.15.12): + jest@29.7.0(@types/node@22.15.18): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.15.12) + jest-cli: 29.7.0(@types/node@22.15.18) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6520,7 +6526,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 make-error@1.3.6: {} @@ -6528,7 +6534,7 @@ snapshots: dependencies: agentkeepalive: 4.6.0 cacache: 16.1.3 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 @@ -6671,13 +6677,13 @@ snapshots: node-abi@3.75.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-addon-api@3.2.1: {} node-api-version@0.1.4: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-gyp-build@4.8.4: {} @@ -6691,7 +6697,7 @@ snapshots: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -6721,10 +6727,10 @@ snapshots: gauge: 4.0.4 set-blocking: 2.0.0 - obsidian@1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.7): + obsidian@1.8.7(@codemirror/state@6.5.2)(@codemirror/view@6.36.8): dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.7 + '@codemirror/view': 6.36.8 '@types/codemirror': 5.60.8 moment: 2.29.4 @@ -6857,7 +6863,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.5: {} + preact@10.26.6: {} prelude-ls@1.1.2: {} @@ -6885,7 +6891,7 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - property-information@7.0.0: {} + property-information@7.1.0: {} pump@3.0.2: dependencies: @@ -7012,7 +7018,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} + semver@7.7.2: {} set-blocking@2.0.0: {} @@ -7055,7 +7061,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -7190,17 +7196,17 @@ snapshots: dependencies: typescript: 5.8.3 - ts-jest@29.3.2(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@22.15.12))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@22.15.18))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.15.12) + jest: 29.7.0(@types/node@22.15.18) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.1 + semver: 7.7.2 type-fest: 4.41.0 typescript: 5.8.3 yargs-parser: 21.1.1 @@ -7313,35 +7319,35 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.19(@types/node@22.15.12): + vite@5.4.19(@types/node@22.15.18): dependencies: esbuild: 0.21.5 postcss: 8.5.3 rollup: 4.40.2 optionalDependencies: - '@types/node': 22.15.12 + '@types/node': 22.15.18 fsevents: 2.3.3 - vitepress@1.6.3(@algolia/client-search@5.24.0)(@types/node@22.15.12)(postcss@8.5.3)(search-insights@2.17.3)(typescript@5.8.3): + vitepress@1.6.3(@algolia/client-search@5.25.0)(@types/node@22.15.18)(postcss@8.5.3)(search-insights@2.17.3)(typescript@5.8.3): dependencies: '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.24.0)(search-insights@2.17.3) - '@iconify-json/simple-icons': 1.2.33 + '@docsearch/js': 3.8.2(@algolia/client-search@5.25.0)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.34 '@shikijs/core': 2.5.0 '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.3(vite@5.4.19(@types/node@22.15.12))(vue@3.5.13(typescript@5.8.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.19(@types/node@22.15.18))(vue@3.5.14(typescript@5.8.3)) '@vue/devtools-api': 7.7.6 - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.14 '@vueuse/core': 12.8.2(typescript@5.8.3) '@vueuse/integrations': 12.8.2(focus-trap@7.6.4)(typescript@5.8.3) focus-trap: 7.6.4 mark.js: 8.11.1 minisearch: 7.1.2 shiki: 2.5.0 - vite: 5.4.19(@types/node@22.15.12) - vue: 3.5.13(typescript@5.8.3) + vite: 5.4.19(@types/node@22.15.18) + vue: 3.5.14(typescript@5.8.3) optionalDependencies: postcss: 8.5.3 transitivePeerDependencies: @@ -7371,13 +7377,13 @@ snapshots: - typescript - universal-cookie - vue@3.5.13(typescript@5.8.3): + vue@3.5.14(typescript@5.8.3): dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.3)) - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.14 + '@vue/compiler-sfc': 3.5.14 + '@vue/runtime-dom': 3.5.14 + '@vue/server-renderer': 3.5.14(vue@3.5.14(typescript@5.8.3)) + '@vue/shared': 3.5.14 optionalDependencies: typescript: 5.8.3 diff --git a/src/database/database.ts b/src/database/database.ts index 5d08eba..987b695 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -4,6 +4,7 @@ import * as Comlink from 'comlink' import workerCode from 'virtual:worker-code' import { WorkerDatabase } from "./worker/database"; import { sanitise } from "../utils/sanitiseColumn"; +import { ColumnDefinition } from "../utils/types"; export class SqlSealDatabase { db: Comlink.Remote @@ -83,6 +84,10 @@ export class SqlSealDatabase { await this.db.createTableNoTypes(name, columns, noDrop) } + async createTable(name: string, columns: ColumnDefinition[], noDrop?: boolean) { + this.db.createTable(name, columns, noDrop) + } + async createIndex(indexName: string, tableName: string, columns: string[]) { await this.db.createIndex(indexName, tableName, columns) } diff --git a/src/database/worker/database.ts b/src/database/worker/database.ts index ef7b920..e5915d4 100644 --- a/src/database/worker/database.ts +++ b/src/database/worker/database.ts @@ -9,7 +9,8 @@ import { SQLiteFS } from 'absurd-sql'; import IndexedDBBackend from '../../../node_modules/absurd-sql/dist/indexeddb-backend.js'; import type { BindParams, Database, Statement } from "sql.js"; import { sanitise } from "../../utils/sanitiseColumn"; -import { uniq } from "lodash"; +import { uniq, uniqBy } from "lodash"; +import { ColumnDefinition } from "../../utils/types"; function toObjectArray(stmt: Statement) { @@ -131,6 +132,22 @@ export class WorkerDatabase { this.db.run(createStmt) } + async createTable(tableName: string, columns: ColumnDefinition[], noDrop: boolean = false) { + const fields = uniqBy(columns.map(c => ({ + ...c, + name: sanitise(c.name) + })), 'name') + + if (!noDrop) { + await this.dropTable(tableName) + } + + const fieldDefinitions = fields.map(c => c.name) // Setting type inside engine changes nothing for SQLite + + const createStmt = `CREATE TABLE IF NOT EXISTS ${tableName}(${fieldDefinitions.join(', ')})` + this.db.run(createStmt) + } + async clearTable(tableName: string) { this.db.run(`DELETE FROM ${tableName}`) diff --git a/src/datamodel/sync.ts b/src/datamodel/sync.ts index 3a86f77..d7422ee 100644 --- a/src/datamodel/sync.ts +++ b/src/datamodel/sync.ts @@ -92,7 +92,7 @@ export class Sync { const { data, columns } = await syncObject.returnData() const tableName = entry.table_name - await this.db.createTableNoTypes(tableName, columns) + await this.db.createTable(tableName, columns) await this.db.insertData(tableName, data) await this.tableDefinitionsRepo.update(entry.id, { file_hash: file.stat.mtime.toString() }) this.bus.trigger('change::' + tableName) diff --git a/src/datamodel/syncStrategy/CsvFileSyncStrategy.ts b/src/datamodel/syncStrategy/CsvFileSyncStrategy.ts index baf00a4..186e41b 100644 --- a/src/datamodel/syncStrategy/CsvFileSyncStrategy.ts +++ b/src/datamodel/syncStrategy/CsvFileSyncStrategy.ts @@ -5,6 +5,7 @@ import { FilepathHasher } from "../../utils/hasher"; import { TableDefinitionExternal } from "../repository/tableDefinitions"; import { ParserTableDefinition } from "./types"; import { App } from "obsidian"; +import { loadConfig } from "../../utils/csvConfig"; const DEFAULT_FILE_HASH = '' @@ -60,12 +61,12 @@ export class CsvFileSyncStrategy extends ISyncStrategy { skipEmptyLines: true, transformHeader: sanitise }) - // const typeStatements = toTypeStatements(parsed.meta.fields ?? [], parsed.data) - // const columns = Object.entries(typeStatements.types).map(([key, value]) => ({ - // name: key, - // type: value as FieldTypes - // })); - return { data: parsed.data, columns: parsed.meta.fields ?? [] } + const config = await loadConfig(file, this.app.vault) + + return { data: parsed.data, columns: parsed.meta.fields?.map(f => ({ + name: f, + type: config.columnDefinitions[f]?.type ?? 'auto' as const + })) ?? [] } } } \ No newline at end of file diff --git a/src/datamodel/syncStrategy/JSONFileSyncStrategy.ts b/src/datamodel/syncStrategy/JSONFileSyncStrategy.ts index a547339..b11fc1e 100644 --- a/src/datamodel/syncStrategy/JSONFileSyncStrategy.ts +++ b/src/datamodel/syncStrategy/JSONFileSyncStrategy.ts @@ -53,7 +53,7 @@ export class JsonFileSyncStrategy extends ISyncStrategy { throw new Error('Resulting data is not an array') } - const columns = uniq(data.map(d => Object.keys(d)).flat()) + const columns = uniq(data.map(d => Object.keys(d)).flat()).map(c => ({ name: c, type: 'auto' as const })) return { columns, data: data } } diff --git a/src/datamodel/syncStrategy/MarkdownTableSyncStrategy.ts b/src/datamodel/syncStrategy/MarkdownTableSyncStrategy.ts index f60b99a..6316d5c 100644 --- a/src/datamodel/syncStrategy/MarkdownTableSyncStrategy.ts +++ b/src/datamodel/syncStrategy/MarkdownTableSyncStrategy.ts @@ -171,7 +171,7 @@ export class MarkdownTableSyncStrategy extends ISyncStrategy { return { data, - columns: headers ?? [] + columns: headers.map(c => ({ name: c, type: 'auto' as const })) ?? [] }; } } \ No newline at end of file diff --git a/src/datamodel/syncStrategy/abstractSyncStrategy.ts b/src/datamodel/syncStrategy/abstractSyncStrategy.ts index d56ad57..d54172e 100644 --- a/src/datamodel/syncStrategy/abstractSyncStrategy.ts +++ b/src/datamodel/syncStrategy/abstractSyncStrategy.ts @@ -1,6 +1,7 @@ import { App } from "obsidian"; import { TableDefinitionExternal } from "../repository/tableDefinitions"; import { ParserTableDefinition } from "./types"; +import { ColumnDefinition } from "../../utils/types"; export abstract class ISyncStrategy { constructor(protected def: TableDefinitionExternal, protected app: App) { @@ -11,7 +12,7 @@ export abstract class ISyncStrategy { } abstract returnData(): Promise<{ data: Record[], - columns: string[] + columns: ColumnDefinition[] }>; static async fromParser(def: ParserTableDefinition, app: App): Promise { diff --git a/src/renderer/GridRenderer.ts b/src/renderer/GridRenderer.ts index bf0eaab..c21953e 100644 --- a/src/renderer/GridRenderer.ts +++ b/src/renderer/GridRenderer.ts @@ -26,13 +26,13 @@ const getAgGridTheme = (theme: 'dark' | 'light') => { } as const } -class GridRendererCommunicator { +export class GridRendererCommunicator { constructor( private el: HTMLElement, private config: Partial, private plugin: SqlSealPlugin | null, private app: App, - private cellParser: ModernCellParser + private cellParser?: ModernCellParser ) { this.initialize() this.setupLayoutObservers() @@ -105,11 +105,11 @@ class GridRendererCommunicator { theme: myTheme, defaultColDef: { resizable: false, - cellRendererSelector: () => { + cellRendererSelector: this.cellParser ? () => { return { - component: ({ value }: { value: string }) => this.cellParser.render(value) + component: ({ value }: { value: string }) => this.cellParser!.render(value) } - }, + } : undefined, autoHeight: true }, autoSizeStrategy: { @@ -137,10 +137,6 @@ class GridRendererCommunicator { if (!this.gridApi) { throw new Error('Grid has not been initiated') } - this.gridApi.setGridOption('columnDefs', columns.map((c: any) => ({ - headerName: c, - valueGetter: (params) => params.data[c] - }))) this.gridApi.setGridOption('rowData', data) this.gridApi.setGridOption('loading', false) } @@ -194,7 +190,8 @@ export class GridRenderer implements RendererConfig { cleanup: () => { communicator.cleanup() communicator.gridApi.destroy() - } + }, + communicator } } } \ No newline at end of file diff --git a/src/renderer/ListRenderer.ts b/src/renderer/ListRenderer.ts index 8db8067..4c72949 100644 --- a/src/renderer/ListRenderer.ts +++ b/src/renderer/ListRenderer.ts @@ -57,7 +57,7 @@ export class ListRenderer implements RendererConfig { text: createEl('span', { text: c, cls: 'sqlseal-column-name' }) as any, // FIXME: this should be properly typed cls: singleCol ? ['sqlseal-list-element', 'sqlseal-list-element-single'] : ['sqlseal-list-element-single'] }) - const val: any = cellParser.render(d[c]) + const val: any = cellParser!.render(d[c]) el.append(val) el.dataset.sqlsealColumn = c }) diff --git a/src/renderer/MarkdownRenderer.ts b/src/renderer/MarkdownRenderer.ts index a0bccb0..725a9c1 100644 --- a/src/renderer/MarkdownRenderer.ts +++ b/src/renderer/MarkdownRenderer.ts @@ -5,7 +5,6 @@ import { RendererConfig, RendererContext } from "../renderer/rendererRegistry"; import { displayError } from "../utils/ui"; import { ViewDefinition } from "../grammar/parser"; import { ParseResults } from "../cellParser/parseResults"; -import { ModernCellParser } from "../cellParser/ModernCellParser"; const mapDataFromHeaders = (columns: string[], data: Record[]) => { return data.map(d => columns.map(c => String(d[c]))) @@ -31,7 +30,7 @@ export class MarkdownRenderer implements RendererConfig { } render(config: ReturnType, el: HTMLElement, { cellParser } : RendererContext) { - const parseResult = new ParseResults(cellParser) + const parseResult = new ParseResults(cellParser!) return { render: ({ columns, data }: any) => { const tab = getMarkdownTable({ diff --git a/src/renderer/TableRenderer.ts b/src/renderer/TableRenderer.ts index 992e931..05eb9c4 100644 --- a/src/renderer/TableRenderer.ts +++ b/src/renderer/TableRenderer.ts @@ -3,7 +3,6 @@ import { App } from "obsidian"; import { RendererConfig, RendererContext } from "../renderer/rendererRegistry"; import { displayError } from "../utils/ui"; import { ViewDefinition } from "../grammar/parser"; -import { ModernCellParser } from "../cellParser/ModernCellParser"; interface HTMLRendererConfig { classNames: string[] @@ -73,7 +72,7 @@ export class TableRenderer implements RendererConfig { data.forEach((d: any) => { const row = body.createEl("tr") columns.forEach((c: any) => { - const parsed = cellParser.render(d[c]) as string + const parsed = cellParser!.render(d[c]) as string if (adjustLayout) { const td = row.createEl("td") td.createSpan({ text: parsed }) diff --git a/src/renderer/TemplateRenderer.ts b/src/renderer/TemplateRenderer.ts index 70286fd..157b1ef 100644 --- a/src/renderer/TemplateRenderer.ts +++ b/src/renderer/TemplateRenderer.ts @@ -42,7 +42,7 @@ export class TemplateRenderer implements RendererConfig { render: ({ columns, data, frontmatter }: any) => { el.empty() - const parser = new ParseResults(cellParser, (el) => new Handlebars.SafeString(el.outerHTML)) + const parser = new ParseResults(cellParser!, (el) => new Handlebars.SafeString(el.outerHTML)) // Seems to be the only way to render handlebars into DOM. Don't like it but what can we do. el.innerHTML = config.template({ diff --git a/src/renderer/rendererRegistry.ts b/src/renderer/rendererRegistry.ts index 016e24b..f853c8b 100644 --- a/src/renderer/rendererRegistry.ts +++ b/src/renderer/rendererRegistry.ts @@ -7,7 +7,7 @@ export interface DataFormat { } export interface RendererContext { - cellParser: ModernCellParser, + cellParser?: ModernCellParser, sourcePath: string } diff --git a/src/utils/csvConfig.ts b/src/utils/csvConfig.ts new file mode 100644 index 0000000..dc5a014 --- /dev/null +++ b/src/utils/csvConfig.ts @@ -0,0 +1,46 @@ +import { TFile, Vault } from "obsidian" +import { parse as jsonParse, stringify as jsonStringify } from 'json5' + + +// export type ColumnType = 'auto' | 'number' | 'text' +export type ColumnType = string + +interface ColumnDefinition { + type: ColumnType +} + +export interface ConfigObject { + columnDefinitions: {[key: string]: ColumnDefinition } +} + +export const loadConfig = async (file: TFile, vault: Vault): Promise => { + const config = { + columnDefinitions: {} + } + + // Now loading saved one + const configPath = file!.path + '.sqlsealconfig' + const configFile = vault.getFileByPath(configPath) + if (!configFile) { + return config + } + const loadedConfig = await vault.read(configFile) + // decode + const decoded = jsonParse(loadedConfig) + return decoded +} + +export const saveConfig = async (file: TFile, content: Object, vault: Vault) => { + const serialised = jsonStringify(content, null, 2) + + // Check if exists + const configPath = file!.path + '.sqlsealconfig' + const configFile = vault.getFileByPath(configPath) + if (!configFile) { + // CREATE NEW + await vault.create(configPath, serialised) + return + } + + await vault.modify(configFile, serialised) +} \ No newline at end of file diff --git a/src/utils/types.ts b/src/utils/types.ts new file mode 100644 index 0000000..c5b16ba --- /dev/null +++ b/src/utils/types.ts @@ -0,0 +1,7 @@ +// export type ColumnType = 'auto' | 'text' | 'number' +export type ColumnType = string + +export interface ColumnDefinition { + name: string; + type: ColumnType +} \ No newline at end of file diff --git a/src/view/CSVView.ts b/src/view/CSVView.ts index 459c9d5..e1576b3 100644 --- a/src/view/CSVView.ts +++ b/src/view/CSVView.ts @@ -1,11 +1,15 @@ -import { WorkspaceLeaf, TextFileView, Menu, Notice } from 'obsidian'; +import { WorkspaceLeaf, TextFileView, Menu, Notice, MenuItem } from 'obsidian'; import { parse, unparse } from 'papaparse'; import { DeleteConfirmationModal } from '../modal/deleteConfirmationModal'; import { RenameColumnModal } from '../modal/renameColumnModal'; import { CodeSampleModal } from '../modal/showCodeSample'; -import { GridRenderer } from '../renderer/GridRenderer'; +import { GridRenderer, GridRendererCommunicator } from '../renderer/GridRenderer'; import { errorNotice } from '../utils/notice'; import { ModernCellParser } from '../cellParser/ModernCellParser'; +import { ConfigObject, loadConfig, saveConfig } from 'src/utils/csvConfig'; +import { ColumnType } from '../utils/types'; + +const delay = (n: number) => new Promise(resolve => setTimeout(resolve, n)) export const CSV_VIEW_TYPE = "csv-viewer" as const; export const CSV_VIEW_EXTENSIONS = ['csv']; @@ -13,6 +17,7 @@ export const CSV_VIEW_EXTENSIONS = ['csv']; export class CSVView extends TextFileView { private content: string; private table: HTMLTableElement; + private config: ConfigObject; constructor( leaf: WorkspaceLeaf, @@ -60,7 +65,7 @@ export class CSVView extends TextFileView { private result: any; updateRow(newRowData: Record) { this.result.data[parseInt(newRowData.__index, 10)] = newRowData; - this.saveData() + this.saveData(true) } deleteRow(idx: number) { @@ -102,6 +107,7 @@ export class CSVView extends TextFileView { return d }) this.saveData() + this.loadDataIntoGrid() } setIsEditable(newValue: boolean) { @@ -109,9 +115,25 @@ export class CSVView extends TextFileView { // FIXME: if there already rendered view, use this to rerender it? } - saveData() { - const output = unparse(this.result) + saveData(noRefresh: boolean = false) { + if (noRefresh) { + this.refreshSkip = Date.now() + 500 + } + + // Map results + const res = [...this.result.data].map(r => { + const r2 = {...r} + Object.keys(r).forEach(k => { + if (typeof r[k] === 'boolean') { + r2[k] = r[k] ? 1 : 0 + } + }) + return r2 + }) + + const output = unparse({ ...this.result, data: res }) this.app.vault.modify(this.file!, output) + this.refreshTypes() } createRow() { @@ -120,6 +142,66 @@ export class CSVView extends TextFileView { } + getColumnType(columnName: string) { + if (this.config.columnDefinitions[columnName]) { + return this.config.columnDefinitions[columnName].type + } + return 'auto' + } + + async changeColumnType(columnName: string, type: ColumnType) { + const prev = this.config.columnDefinitions[columnName] ?? {} + this.config.columnDefinitions[columnName] = { + ...prev, + type: type + } + await this.saveConfig() + } + + async loadConfig() { + while (!this.file) { + await delay(100) + } + this.config = await loadConfig(this.file, this.app.vault) + } + + async saveConfig() { + await saveConfig(this.file!, this.config, this.app.vault) + } + + private getColumnConfigurations(columns: string[]) { + return columns.map(f => { + if (!this.config) { + return { + field: f + } + } + const def = this.config.columnDefinitions[f]?.type + if (!def || def === 'auto') { + return { field: f } + } + if (def === 'date') { + return { + field: f, + cellDataType: 'dateString' + } + } + return { + field: f, + cellDataType: def + } + }) + } + + refreshTypes() { + if (this.gridCommunicator) { + const columns = this.result.fields + if (columns && columns.length) { + this.gridCommunicator.gridApi.setGridOption('columnDefs', this.getColumnConfigurations(columns)) + } + } + } + moveColumn(name: string, toIndex: number) { let fields = this.result.fields as Array fields = fields.filter(f => f !== name) @@ -133,42 +215,82 @@ export class CSVView extends TextFileView { } api: any = null; + gridCommunicator: GridRendererCommunicator | null = null + refreshSkip: number = 0 + + formatWithTypes(d: Record) { + Object.entries(this.config.columnDefinitions).forEach(([key, value]) => { + if (!d[key]) { + return + } + if (value.type === 'boolean') { + if (d[key] === 'false' || d[key] === '0') { + d[key] = false + } + d[key] = !!d[key] + } + if (value.type === 'number') { + if (d[key] === null || d[key] === '') { + d[key] = '' + } else { + d[key] = parseFloat(d[key] as string) + } + } + if (value.type === 'date') { + // try parsing + const val = d[key] as string + const date = new Date(val) + d[key] = date.toISOString().split('T')[0] + } + }) + return d + } + + prepareData() { + const result = parse(this.content, { + header: true, + skipEmptyLines: true, + }); + const data = result.data.map((d: any, i) => ({ + ...this.formatWithTypes(d), + __index: i.toString() + })) + return { + data: data, + fields: result.meta.fields + } + } loadDataIntoGrid() { + if (this.refreshSkip > Date.now()) { + return + } requestAnimationFrame(() => { - const result = parse(this.content, { - header: true, - skipEmptyLines: true, - }); - const data = result.data.map((d: any, i) => ({ - ...d, - __index: i.toString() - })) - this.result = { - data: data, - fields: result.meta.fields - } - - - this.api!.render({ - data: data, - columns: result.meta.fields - }) - + const result = this.prepareData() + this.result = result + this.refreshTypes() + this.api!.render(result) }) + } + isLoading: boolean = false + private async renderCSV() { - if (this.api) { - this.loadDataIntoGrid() + if (this.isLoading) { + if (this.api) { + this.loadDataIntoGrid() + } return } + this.isLoading = true this.contentEl.empty() const csvEditorDiv = this.contentEl.createDiv({ cls: 'sql-seal-csv-editor' }) const buttonsRow = csvEditorDiv.createDiv({ cls: 'sql-seal-csv-viewer-buttons' }) + await this.loadConfig() if (this.enableEditing) { const createColumn = buttonsRow.createEl('button', { text: 'Add Column' }) const createRow = buttonsRow.createEl('button', { text: 'Add Row' }) @@ -199,16 +321,14 @@ export class CSVView extends TextFileView { modal.open() }) - const grid = new GridRenderer(this.app, null) const csvView = this; + const data = this.prepareData() + this.result = data const api = grid.render({ + columnDefs: this.getColumnConfigurations(data.fields ?? []), defaultColDef: { editable: this.enableEditing, - valueSetter: (e) => { - e.data[e.column.getUserProvidedColDef()?.headerName!] = e.newValue - return e.newValue - }, headerComponentParams: { enableMenu: this.enableEditing, showColumnMenu: function (e: any) { @@ -219,7 +339,7 @@ export class CSVView extends TextFileView { item.onClick(() => { const modal = new RenameColumnModal(csvView.app, (res) => { csvView.renameColumn( - this.column.userProvidedColDef.headerName, res) + this.column.userProvidedColDef.field, res) }) modal.open() }) @@ -228,7 +348,7 @@ export class CSVView extends TextFileView { menu.addItem(item => { item.setTitle('Delete Column') item.onClick(() => { - const colName = this.column.userProvidedColDef.headerName + const colName = this.column.userProvidedColDef.field const modal = new DeleteConfirmationModal(csvView.app, `column ${colName}`, () => { csvView.deleteColumn(colName) }) @@ -236,7 +356,34 @@ export class CSVView extends TextFileView { }) }) - + + // FIXME: rework it to submenus. + menu.addSeparator() + menu.addItem(item => { + // item.setDisabled(true) + item.setTitle('Data Type') + // item.setIsLabel(true) + const ipfSubmenu = (item as any).setSubmenu(); + const types = ['auto', 'text', 'number', 'boolean', 'date'] as ColumnType[] + + + + const colName = this.column.userProvidedColDef.field + + const current = csvView.getColumnType(colName) + types.forEach(type => { + ipfSubmenu.addItem((subItem: MenuItem) => { + const checkbox = type === current ? '✓ ' : '' + subItem.setTitle(checkbox + type) + subItem.onClick(() => { + csvView.changeColumnType(colName, type) + csvView.refreshTypes() + csvView.loadDataIntoGrid() + }) + }) + }) + }) + const pos = e.getBoundingClientRect(); menu.showAtPosition({ x: pos.x, y: pos.y + 20 }) } @@ -254,7 +401,7 @@ export class CSVView extends TextFileView { if (!columnName) { return } - csvView.moveColumn(columnName?.headerName!, e.toIndex!) + csvView.moveColumn(columnName?.field!, e.toIndex!) }, domLayout: 'normal', getRowId: (p) => p.data.__index, @@ -280,9 +427,9 @@ export class CSVView extends TextFileView { }) menu.showAtMouseEvent(e.event as any) } - }, gridEl, { cellParser: this.cellParser, sourcePath: this.file?.path || '' }) - + }, gridEl, { sourcePath: this.file?.path || '' }) this.api = api; - this.loadDataIntoGrid() + this.gridCommunicator = api.communicator + api.render(data) } } \ No newline at end of file diff --git a/styles.css b/styles.css index 6eaf31a..86fbd52 100644 --- a/styles.css +++ b/styles.css @@ -295,4 +295,10 @@ .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>:has(>.block-language-sqlseal table.dataview) { width: var(--container-dataview-table-width); max-width: var(--container-table-max-width); +} + + +/* AG GRID CUSTOMS */ +.ag-checkbox-input { + opacity: 1 !important; } \ No newline at end of file