diff --git a/packages/splitjs/karma.conf.js b/packages/splitjs/karma.conf.js deleted file mode 100644 index a05a16d5f2..0000000000 --- a/packages/splitjs/karma.conf.js +++ /dev/null @@ -1,51 +0,0 @@ -module.exports = config => { - config.set({ - customLaunchers: { - // latest firefox, chrome, safari - sl_firefox_latest: { - base: 'SauceLabs', - browserName: 'firefox', - platform: 'Windows 10', - version: 'latest', - }, - sl_chrome_latest: { - base: 'SauceLabs', - browserName: 'chrome', - platform: 'Windows 10', - version: 'latest', - }, - sl_safari: { - base: 'SauceLabs', - browserName: 'safari', - platform: 'macOS 10.15', - version: 'latest', - }, - - // latest edge - sl_edge: { - base: 'SauceLabs', - browserName: 'MicrosoftEdge', - platform: 'Windows 10', - version: 'latest', - }, - // ie 11 - sl_ie_11: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 10', - version: 'latest', - }, - // ie 10 - sl_ie_10: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 7', - version: '10.0', - }, - }, - frameworks: ['jasmine'], - browsers: ['FirefoxHeadless', 'ChromeHeadless'], - singleRun: true, - files: ['dist/split.js', 'test/split.spec.js'], - }) -} diff --git a/packages/splitjs/package.json b/packages/splitjs/package.json index f23cb22823..5e69a1de67 100644 --- a/packages/splitjs/package.json +++ b/packages/splitjs/package.json @@ -16,12 +16,10 @@ "license": "MIT", "homepage": "https://split.js.org/", "scripts": { - "test": "pnpm build && karma start", + "test": "vitest run", "prepublish": "rollup -c", - "build": "rollup -c && npm run size", - "watch": "rollup -cw", - "size": "echo \"gzip size: $(gzip-size --raw $npm_package_minified_main) bytes\"", - "saucelabs": "yarn run test --browsers sl_firefox_latest,sl_chrome_latest,sl_safari,sl_edge,sl_ie_11,sl_ie_10" + "build": "rollup -c", + "watch": "rollup -cw" }, "files": [ "index.d.ts", @@ -40,9 +38,7 @@ }, "devDependencies": { "@rollup/plugin-buble": "1.0.3", - "karma": "6.4.4", - "karma-chrome-launcher": "3.2.0", - "karma-firefox-launcher": "2.1.3", - "karma-jasmine": "5.1.0" + "happy-dom": "20.8.9", + "vitest": "4.1.2" } } diff --git a/packages/splitjs/test/split.spec.js b/packages/splitjs/test/split.spec.js deleted file mode 100644 index cba25d6d45..0000000000 --- a/packages/splitjs/test/split.spec.js +++ /dev/null @@ -1,190 +0,0 @@ -/* eslint-env jasmine */ -/* global Split */ -/* eslint-disable no-var, func-names, prefer-arrow-callback, object-shorthand, prefer-template */ - -function calcParts(expr) { - var re = /calc\(([\d]*\.?[\d]*?)%\s?-\s?([\d]+)px\)/ - var m = re.exec(expr) - - return { - percentage: parseFloat(m[1]), - pixels: parseInt(m[2], 10), - } -} - -describe('Split', function() { - beforeEach(function() { - document.body.style.width = '800px' - document.body.style.height = '600px' - - this.a = document.createElement('div') - this.b = document.createElement('div') - this.c = document.createElement('div') - - this.a.id = 'a' - this.b.id = 'b' - this.c.id = 'c' - - document.body.appendChild(this.a) - document.body.appendChild(this.b) - document.body.appendChild(this.c) - }) - - afterEach(function() { - document.body.removeChild(this.a) - document.body.removeChild(this.b) - document.body.removeChild(this.c) - }) - - it('splits in two when given two elements', function() { - Split(['#a', '#b']) - - expect(this.a.style.width).toContain('calc(50% - 5px)') - expect(this.b.style.width).toContain('calc(50% - 5px)') - }) - - it('splits in three when given three elements', function() { - Split(['#a', '#b', '#c']) - - expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33) - expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33) - expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33) - - expect(calcParts(this.a.style.width).pixels).toBe(5) - expect(calcParts(this.b.style.width).pixels).toBe(10) - expect(calcParts(this.c.style.width).pixels).toBe(5) - }) - - it('splits vertically when direction is vertical', function() { - Split(['#a', '#b'], { - direction: 'vertical', - }) - - expect(this.a.style.height).toContain('calc(50% - 5px)') - expect(this.b.style.height).toContain('calc(50% - 5px)') - }) - - it('splits in percentages when given sizes', function() { - Split(['#a', '#b'], { - sizes: [25, 75], - }) - - expect(this.a.style.width).toContain('calc(25% - 5px)') - expect(this.b.style.width).toContain('calc(75% - 5px)') - }) - - it('splits in percentages when given sizes', function() { - Split(['#a', '#b'], { - sizes: [25, 75], - }) - - expect(this.a.style.width).toContain('calc(25% - 5px)') - expect(this.b.style.width).toContain('calc(75% - 5px)') - }) - - it('accounts for gutter size', function() { - Split(['#a', '#b'], { - gutterSize: 20, - }) - - expect(this.a.style.width).toContain('calc(50% - 10px)') - expect(this.b.style.width).toContain('calc(50% - 10px)') - }) - - it('accounts for gutter size with more than two elements', function() { - Split(['#a', '#b', '#c'], { - gutterSize: 20, - }) - - expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33) - expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33) - expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33) - - expect(calcParts(this.a.style.width).pixels).toBe(10) - expect(calcParts(this.b.style.width).pixels).toBe(20) - expect(calcParts(this.c.style.width).pixels).toBe(10) - }) - - it('accounts for gutter size when direction is vertical', function() { - Split(['#a', '#b'], { - direction: 'vertical', - gutterSize: 20, - }) - - expect(this.a.style.height).toContain('calc(50% - 10px)') - expect(this.b.style.height).toContain('calc(50% - 10px)') - }) - - it('accounts for gutter size with more than two elements when direction is vertical', function() { - Split(['#a', '#b', '#c'], { - direction: 'vertical', - gutterSize: 20, - }) - - expect(calcParts(this.a.style.height).percentage).toBeCloseTo(33.33) - expect(calcParts(this.b.style.height).percentage).toBeCloseTo(33.33) - expect(calcParts(this.c.style.height).percentage).toBeCloseTo(33.33) - - expect(calcParts(this.a.style.height).pixels).toBe(10) - expect(calcParts(this.b.style.height).pixels).toBe(20) - expect(calcParts(this.c.style.height).pixels).toBe(10) - }) - - it('set size directly when given css values', function() { - Split(['#a', '#b'], { - sizes: ['150px', '640px'], - }) - - expect(this.a.style.width).toBe('150px') - expect(this.b.style.width).toBe('640px') - }) - - it('adjusts sizes using setSizes', function() { - var split = Split(['#a', '#b']) - - split.setSizes([70, 30]) - - expect(this.a.style.width).toContain('calc(70% - 5px)') - expect(this.b.style.width).toContain('calc(30% - 5px)') - }) - - it('collapse splits', function() { - var split = Split(['#a', '#b']) - - split.collapse(0) - - expect(this.a.getBoundingClientRect().width).toBeCloseTo(100, 0) - expect(this.b.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0) - - split.collapse(1) - - expect(this.a.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0) - expect(this.b.getBoundingClientRect().width).toBeCloseTo(100, 0) - }) - - it('returns sizes', function() { - var split = Split(['#a', '#b']) - var sizes = split.getSizes() - - expect(sizes).toEqual([50, 50]) - - split.setSizes([70, 30]) - - sizes = split.getSizes() - - expect(sizes).toEqual([70, 30]) - }) - - it('sets element styles using the elementStyle function', function() { - Split(['#a', '#b'], { - elementStyle: function(dimension, size) { - return { - width: size + '%', - } - }, - }) - - expect(this.a.style.width).toBe('50%') - expect(this.b.style.width).toBe('50%') - }) -}) diff --git a/packages/splitjs/test/split.spec.ts b/packages/splitjs/test/split.spec.ts new file mode 100644 index 0000000000..b28eaa88aa --- /dev/null +++ b/packages/splitjs/test/split.spec.ts @@ -0,0 +1,171 @@ +import { describe, it, expect, beforeEach, afterEach } from "vitest"; +import Split from "../src/split.js"; + +function calcParts(expr: string) { + const re = /calc\(([\d]*\.?[\d]*?)%\s?-\s?([\d]+)px\)/; + const m = re.exec(expr); + if (!m) throw new Error(`Could not parse calc expression: ${expr}`); + + return { + percentage: parseFloat(m[1]), + pixels: parseInt(m[2], 10), + }; +} + +describe("Split", () => { + let a: HTMLDivElement; + let b: HTMLDivElement; + let c: HTMLDivElement; + + beforeEach(() => { + document.body.style.width = "800px"; + document.body.style.height = "600px"; + + a = document.createElement("div"); + b = document.createElement("div"); + c = document.createElement("div"); + + a.id = "a"; + b.id = "b"; + c.id = "c"; + + document.body.appendChild(a); + document.body.appendChild(b); + document.body.appendChild(c); + }); + + afterEach(() => { + document.body.removeChild(a); + document.body.removeChild(b); + document.body.removeChild(c); + }); + + it("splits in two when given two elements", () => { + Split(["#a", "#b"]); + + expect(a.style.width).toContain("calc(50% - 5px)"); + expect(b.style.width).toContain("calc(50% - 5px)"); + }); + + it("splits in three when given three elements", () => { + Split(["#a", "#b", "#c"]); + + expect(calcParts(a.style.width).percentage).toBeCloseTo(33.33); + expect(calcParts(b.style.width).percentage).toBeCloseTo(33.33); + expect(calcParts(c.style.width).percentage).toBeCloseTo(33.33); + + expect(calcParts(a.style.width).pixels).toBe(5); + expect(calcParts(b.style.width).pixels).toBe(10); + expect(calcParts(c.style.width).pixels).toBe(5); + }); + + it("splits vertically when direction is vertical", () => { + Split(["#a", "#b"], { + direction: "vertical", + }); + + expect(a.style.height).toContain("calc(50% - 5px)"); + expect(b.style.height).toContain("calc(50% - 5px)"); + }); + + it("splits in percentages when given sizes", () => { + Split(["#a", "#b"], { + sizes: [25, 75], + }); + + expect(a.style.width).toContain("calc(25% - 5px)"); + expect(b.style.width).toContain("calc(75% - 5px)"); + }); + + it("accounts for gutter size", () => { + Split(["#a", "#b"], { + gutterSize: 20, + }); + + expect(a.style.width).toContain("calc(50% - 10px)"); + expect(b.style.width).toContain("calc(50% - 10px)"); + }); + + it("accounts for gutter size with more than two elements", () => { + Split(["#a", "#b", "#c"], { + gutterSize: 20, + }); + + expect(calcParts(a.style.width).percentage).toBeCloseTo(33.33); + expect(calcParts(b.style.width).percentage).toBeCloseTo(33.33); + expect(calcParts(c.style.width).percentage).toBeCloseTo(33.33); + + expect(calcParts(a.style.width).pixels).toBe(10); + expect(calcParts(b.style.width).pixels).toBe(20); + expect(calcParts(c.style.width).pixels).toBe(10); + }); + + it("accounts for gutter size when direction is vertical", () => { + Split(["#a", "#b"], { + direction: "vertical", + gutterSize: 20, + }); + + expect(a.style.height).toContain("calc(50% - 10px)"); + expect(b.style.height).toContain("calc(50% - 10px)"); + }); + + it("accounts for gutter size with more than two elements when direction is vertical", () => { + Split(["#a", "#b", "#c"], { + direction: "vertical", + gutterSize: 20, + }); + + expect(calcParts(a.style.height).percentage).toBeCloseTo(33.33); + expect(calcParts(b.style.height).percentage).toBeCloseTo(33.33); + expect(calcParts(c.style.height).percentage).toBeCloseTo(33.33); + + expect(calcParts(a.style.height).pixels).toBe(10); + expect(calcParts(b.style.height).pixels).toBe(20); + expect(calcParts(c.style.height).pixels).toBe(10); + }); + + it("set size directly when given css values", () => { + Split(["#a", "#b"], { + sizes: ["150px", "640px"], + }); + + expect(a.style.width).toBe("150px"); + expect(b.style.width).toBe("640px"); + }); + + it("adjusts sizes using setSizes", () => { + const split = Split(["#a", "#b"]); + + split.setSizes([70, 30]); + + expect(a.style.width).toContain("calc(70% - 5px)"); + expect(b.style.width).toContain("calc(30% - 5px)"); + }); + + it("returns sizes", () => { + const split = Split(["#a", "#b"]); + let sizes = split.getSizes(); + + expect(sizes).toEqual([50, 50]); + + split.setSizes([70, 30]); + + sizes = split.getSizes(); + + expect(sizes).toEqual([70, 30]); + }); + + it("sets element styles using the elementStyle function", () => { + Split(["#a", "#b"], { + elementStyle: (_dimension, size) => { + return { + width: size + "%", + }; + }, + }); + + expect(a.style.width).toBe("50%"); + expect(b.style.width).toBe("50%"); + }); +}); diff --git a/packages/splitjs/vitest.config.ts b/packages/splitjs/vitest.config.ts new file mode 100644 index 0000000000..39a58d6ae2 --- /dev/null +++ b/packages/splitjs/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "happy-dom", + include: ["test/**/*.spec.ts"], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d53e6e775..78d5b72399 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1555,18 +1555,12 @@ importers: '@rollup/plugin-buble': specifier: 1.0.3 version: 1.0.3(rollup@4.60.1) - karma: - specifier: 6.4.4 - version: 6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) - karma-chrome-launcher: - specifier: 3.2.0 - version: 3.2.0 - karma-firefox-launcher: - specifier: 2.1.3 - version: 2.1.3 - karma-jasmine: - specifier: 5.1.0 - version: 5.1.0(karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + happy-dom: + specifier: 20.8.9 + version: 20.8.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) + vitest: + specifier: 4.1.2 + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/browser-webdriverio@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.5(@types/node@24.12.0)(typescript@6.0.2))(vite@8.0.3(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(less@4.1.3)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.3)) packages/turndown-plugin-gfm: devDependencies: @@ -2201,10 +2195,6 @@ packages: '@codemirror/view@6.40.0': resolution: {integrity: sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg==} - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - '@cortex-js/compute-engine@0.30.2': resolution: {integrity: sha512-Zx+iisk9WWdbxjm8EYsneIBszvjfUs7BHNwf1jBtSINIgfWGpHrTTq9vW0J59iGCFt6bOFxbmWyxNMRSmksHMA==} engines: {node: '>=21.7.3', npm: '>=10.5.0'} @@ -5765,9 +5755,6 @@ packages: '@types/cookiejar@2.1.5': resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -7501,10 +7488,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - base64url@3.0.1: resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} engines: {node: '>=6.0.0'} @@ -8136,10 +8119,6 @@ packages: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} - connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} - consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -8391,9 +8370,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - custom-event@1.0.1: - resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} - cytoscape-cose-bilkent@4.1.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -8588,10 +8564,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - dayjs-plugin-utc@0.1.2: resolution: {integrity: sha512-ExERH5o3oo6jFOdkvMP3gytTCQ9Ksi5PtylclJWghr7k7m3o2U5QrwtdiJkOxLOH4ghr0EKhpqGefzGz1VvVJg==} @@ -8779,9 +8751,6 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - di@0.0.1: - resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} - diff@8.0.3: resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} engines: {node: '>=0.3.1'} @@ -8808,9 +8777,6 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dom-serialize@2.2.1: - resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} - dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} @@ -9006,10 +8972,6 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} - engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} @@ -9018,10 +8980,6 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} - ent@2.2.2: - resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==} - engines: {node: '>= 0.4'} - entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} @@ -9523,10 +9481,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - finalhandler@1.3.1: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} @@ -10739,9 +10693,6 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jasmine-core@4.6.1: - resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -10934,23 +10885,6 @@ packages: resolution: {integrity: sha512-4+5mNNf4vZDSwPhKprKwz3330iisPrb08JyMgbsdFrimBCKNHecua/WBwvVg3n7vwx0C1ARjfhwIpbrbd9n5wg==} engines: {node: '>=12'} - karma-chrome-launcher@3.2.0: - resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} - - karma-firefox-launcher@2.1.3: - resolution: {integrity: sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw==} - - karma-jasmine@5.1.0: - resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} - engines: {node: '>=12'} - peerDependencies: - karma: ^6.0.0 - - karma@6.4.4: - resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==} - engines: {node: '>= 10'} - hasBin: true - katex@0.16.44: resolution: {integrity: sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==} hasBin: true @@ -11274,10 +11208,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} - loglevel-plugin-prefix@0.8.4: resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} @@ -12202,10 +12132,6 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} - on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -13053,9 +12979,6 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -13075,10 +12998,6 @@ packages: resolution: {integrity: sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==} engines: {node: '>=20'} - qjobs@1.2.0: - resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} - engines: {node: '>=0.9'} - qs@6.15.0: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} @@ -14029,9 +13948,6 @@ packages: smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} - socket.io-client@4.7.0: resolution: {integrity: sha512-7Q8CeDrhuZzg4QLXl3tXlk5yb086oxYzehAVZRLiGCzCmtDneiHz1qHyyWcxhTgxXiokVpWQXoG/u60HoXSQew==} engines: {node: '>=10.0.0'} @@ -14040,10 +13956,6 @@ packages: resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} engines: {node: '>=10.0.0'} - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} - sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} @@ -14211,10 +14123,6 @@ packages: engines: {node: '>= 0.10.0'} hasBin: true - streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} - streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -14892,10 +14800,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ua-parser-js@0.7.41: - resolution: {integrity: sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==} - hasBin: true - uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -15362,10 +15266,6 @@ packages: jsdom: optional: true - void-elements@2.0.1: - resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} - engines: {node: '>=0.10.0'} - void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -15603,11 +15503,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - which@4.0.0: resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} engines: {node: ^16.13.0 || >=18.0.0} @@ -17433,8 +17328,6 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 - '@colors/colors@1.5.0': {} - '@cortex-js/compute-engine@0.30.2': dependencies: complex-esm: 2.1.1-esm1 @@ -21181,10 +21074,6 @@ snapshots: '@types/cookiejar@2.1.5': {} - '@types/cors@2.8.19': - dependencies: - '@types/node': 24.12.0 - '@types/d3-array@3.2.1': {} '@types/d3-axis@3.0.6': @@ -24046,8 +23935,6 @@ snapshots: base64-js@1.5.1: {} - base64id@2.0.0: {} - base64url@3.0.1: {} baseline-browser-mapping@2.10.7: {} @@ -24873,15 +24760,6 @@ snapshots: connect-history-api-fallback@2.0.0: {} - connect@3.7.0: - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: 1.3.3 - utils-merge: 1.0.1 - transitivePeerDependencies: - - supports-color - consola@3.4.2: {} content-disposition@0.5.4: @@ -25173,8 +25051,6 @@ snapshots: csstype@3.2.3: {} - custom-event@1.0.1: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): dependencies: cose-base: 1.0.3 @@ -25405,8 +25281,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - date-format@4.0.14: {} - dayjs-plugin-utc@0.1.2: {} dayjs@1.11.20: {} @@ -25553,8 +25427,6 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - di@0.0.1: {} - diff@8.0.3: {} diff@8.0.4: {} @@ -25581,13 +25453,6 @@ snapshots: '@babel/runtime': 7.29.2 csstype: 3.2.3 - dom-serialize@2.2.1: - dependencies: - custom-event: 1.0.1 - ent: 2.2.2 - extend: 3.0.2 - void-elements: 2.0.1 - dom-serializer@1.4.1: dependencies: domelementtype: 2.3.0 @@ -25867,22 +25732,6 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): - dependencies: - '@types/cors': 2.8.19 - '@types/node': 24.12.0 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.5 - debug: 4.3.7 - engine.io-parser: 5.2.3 - ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 @@ -25893,13 +25742,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.0 - ent@2.2.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - punycode: 1.4.1 - safe-regex-test: 1.1.0 - entities@2.2.0: {} entities@4.5.0: {} @@ -26705,18 +26547,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.1.2: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - finalhandler@1.3.1: dependencies: debug: 2.6.9 @@ -28056,8 +27886,6 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jasmine-core@4.6.1: {} - jest-worker@27.5.1: dependencies: '@types/node': 24.12.0 @@ -28291,52 +28119,6 @@ snapshots: dependencies: lodash-es: 4.18.1 - karma-chrome-launcher@3.2.0: - dependencies: - which: 1.3.1 - - karma-firefox-launcher@2.1.3: - dependencies: - is-wsl: 2.2.0 - which: 3.0.1 - - karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)): - dependencies: - jasmine-core: 4.6.1 - karma: 6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) - - karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): - dependencies: - '@colors/colors': 1.5.0 - body-parser: 1.20.3 - braces: 3.0.3 - chokidar: 3.6.0 - connect: 3.7.0 - di: 0.0.1 - dom-serialize: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - http-proxy: 1.18.1 - isbinaryfile: 4.0.10 - lodash: 4.18.1 - log4js: 6.9.1 - mime: 2.6.0 - minimatch: 3.1.5 - mkdirp: 0.5.6 - qjobs: 1.2.0 - range-parser: 1.2.1 - rimraf: 3.0.2 - socket.io: 4.8.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - source-map: 0.6.1 - tmp: 0.2.5 - ua-parser-js: 0.7.41 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - katex@0.16.44: dependencies: commander: 8.3.0 @@ -28655,16 +28437,6 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.2 - log4js@6.9.1: - dependencies: - date-format: 4.0.14 - debug: 4.4.3(supports-color@8.1.1) - flatted: 3.4.2 - rfdc: 1.4.1 - streamroller: 3.1.5 - transitivePeerDependencies: - - supports-color - loglevel-plugin-prefix@0.8.4: {} loglevel@1.9.2: {} @@ -29940,10 +29712,6 @@ snapshots: on-exit-leak-free@2.1.2: {} - on-finished@2.3.0: - dependencies: - ee-first: 1.1.1 - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -30830,8 +30598,6 @@ snapshots: punycode.js@2.3.1: {} - punycode@1.4.1: {} - punycode@2.3.1: {} pupa@3.1.0: @@ -30851,8 +30617,6 @@ snapshots: dependencies: hookified: 1.15.0 - qjobs@1.2.0: {} - qs@6.15.0: dependencies: side-channel: 1.1.0 @@ -32013,15 +31777,6 @@ snapshots: smob@1.5.0: {} - socket.io-adapter@2.5.5(bufferutil@4.0.9)(utf-8-validate@6.0.5): - dependencies: - debug: 4.3.7 - ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - socket.io-client@4.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@socket.io/component-emitter': 3.1.2 @@ -32040,20 +31795,6 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.8.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.5 - debug: 4.3.7 - engine.io: 6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) - socket.io-adapter: 2.5.5(bufferutil@4.0.9)(utf-8-validate@6.0.5) - socket.io-parser: 4.2.6 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 @@ -32231,14 +31972,6 @@ snapshots: commander: 2.20.3 limiter: 1.1.5 - streamroller@3.1.5: - dependencies: - date-format: 4.0.14 - debug: 4.4.3(supports-color@8.1.1) - fs-extra: 8.1.0 - transitivePeerDependencies: - - supports-color - streamsearch@1.1.0: {} streamx@2.23.0: @@ -33089,8 +32822,6 @@ snapshots: typescript@6.0.2: {} - ua-parser-js@0.7.41: {} - uc.micro@2.1.0: {} ufo@1.6.1: {} @@ -33530,8 +33261,6 @@ snapshots: transitivePeerDependencies: - msw - void-elements@2.0.1: {} - void-elements@3.1.0: {} vscode-jsonrpc@8.2.0: {} @@ -33923,10 +33652,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@3.0.1: - dependencies: - isexe: 2.0.0 - which@4.0.0: dependencies: isexe: 3.1.5 @@ -34143,6 +33868,7 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 + optional: true yargs@17.0.1: dependencies: