diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml
index 6230a90..00f4e1d 100644
--- a/.github/workflows/benchmark.yaml
+++ b/.github/workflows/benchmark.yaml
@@ -28,13 +28,13 @@ jobs:
- name: Install bun
uses: oven-sh/setup-bun@v1
with:
- bun-version: canary
+ # Cannot upgrade due to https://github.com/oven-sh/bun/issues/8314
+ bun-version: 1.0.23
- name: Run
run: |
hyperfine --warmup 1 \
'yarn workspace jasmine test' \
'yarn workspace jest test' \
- 'yarn workspace vitest test' \
- 'yarn workspace vitest test --pool=vmThreads' \
- 'yarn workspace vitest test --poolOptions.threads.isolate=false'
\ No newline at end of file
+ 'yarn workspace vitest test --poolOptions.threads.isolate=false' \
+ 'yarn workspace tape test'
\ No newline at end of file
diff --git a/README.md b/README.md
index 9077dd7..02d9c11 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,15 @@ This repo is setup to test the performance of various test runners. Specially to
- Help the **Jest** team with https://github.com/facebook/jest/issues/6694.
- Help the **Vitest** team with https://github.com/vitest-dev/vitest/issues/229 & https://github.com/vitest-dev/vitest/issues/579
-![](results.png?raw=true)
+## Results
+
+### Single-thread (on GitHub Actions CI)
+
+![](result-single-thread.png?raw=true)
+
+### Multi-thread (12 core PC)
+
+![](result-multi-thread.png?raw=true)
## Setup
@@ -19,12 +27,11 @@ Then you can run benchmarks via:
```sh
hyperfine --warmup 1 \
+ 'yarn workspace bun test' \
'yarn workspace jasmine test' \
'yarn workspace jest test' \
- 'yarn workspace vitest test' \
- 'yarn workspace vitest test --pool=vmThreads' \
- 'yarn workspace vitest test --poolOptions.threads.isolate=false' \
- 'yarn workspace bun test'
+ 'yarn workspace tape test' \
+ 'yarn workspace vitest test --poolOptions.threads.isolate=false'
```
> [!NOTE]
@@ -33,9 +40,12 @@ hyperfine --warmup 1 \
## Suites
- `jasmine`: This is our baseline, using Jasmine and happy-dom.
-- `jest`: Same test suite, but running using Jest.
-- `vitest`: Same test suite, but running using Vitest. NOTE: That benchmarks include vitest with the `--poolOptions.threads.isolate` setting both enabled and disabled due to [this issue](https://github.com/vitest-dev/vitest/issues/229#issuecomment-1003235680)
+ - *NOTE*: Jasmine doesn't support shapshot testing so those tests do a basic comparison
- `bun`: Same test suite, but running using Bun.
+- `jest`: Same test suite, but running using Jest.
+- `tape`: Same test suite, but running using Tape and ts-node.
+ - *NOTE*: Tape doesn't support shapshot testing so those tests do a basic comparison
+- `vitest`: Same test suite, but running using Vitest. *NOTE*: That benchmarks use `--poolOptions.threads.isolate=false` as it has the best performance (see [this comment](https://github.com/vitest-dev/vitest/issues/579#issuecomment-1946462435))
## Results
@@ -46,7 +56,7 @@ Benchmarks are run via GitHub Actions. You can check the latest run results [her
- Use `hyperfine` for consistent and reproducible benchmark collection
- Discard the first run (via `--warmup 1`) to let various caches build up
- Use minimal configurations (ie. stock configurations)
-- Tests should represent real-world scenarios (in this case, they are copies of real files used in real projects)
+- Tests should represent a modern real-world scenario (in this case, they are copies of real files used in a real TypeScript React project)
- Tests should be updated for each test runner's best practices and APIs to give them the best chance possible to be optimized (eg. Jasmine uses APIs like `createSpy()` whereas Jest has `jest.fn()` and Vitest has `vi.fn()`)
## Other Suites
diff --git a/benchmarks/bun/package.json b/benchmarks/bun/package.json
index f029fbd..f7e73de 100644
--- a/benchmarks/bun/package.json
+++ b/benchmarks/bun/package.json
@@ -8,16 +8,16 @@
"author": "",
"license": "MIT",
"dependencies": {
- "@blueprintjs/icons": "4.6.3",
- "@floating-ui/react-dom-interactions": "0.10.1",
- "clsx": "1.2.1",
+ "@blueprintjs/icons": "4.16.0",
+ "@floating-ui/react-dom-interactions": "0.10.3",
+ "clsx": "2.1.0",
"date-fns": "2.29.3",
"framer-motion": "7.5.3",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"devDependencies": {
- "@happy-dom/global-registrator": "12.10.3",
- "happy-dom": "12.0.1"
+ "@happy-dom/global-registrator": "13.6.2",
+ "happy-dom": "13.6.2"
}
}
diff --git a/benchmarks/jasmine/package.json b/benchmarks/jasmine/package.json
index 178ed4d..6338581 100644
--- a/benchmarks/jasmine/package.json
+++ b/benchmarks/jasmine/package.json
@@ -8,18 +8,18 @@
"author": "",
"license": "MIT",
"dependencies": {
- "@blueprintjs/icons": "4.6.3",
- "@floating-ui/react-dom-interactions": "0.10.1",
- "clsx": "1.2.1",
+ "@blueprintjs/icons": "4.16.0",
+ "@floating-ui/react-dom-interactions": "0.10.3",
+ "clsx": "2.1.0",
"date-fns": "2.29.3",
"framer-motion": "7.5.3",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"devDependencies": {
- "@types/jasmine": "4.3.0",
+ "@types/jasmine": "5.1.4",
"css-modules-require-hook": "4.2.3",
- "happy-dom": "12.0.1",
+ "happy-dom": "13.6.2",
"jasmine": "5.1.0",
"ts-node": "10.9.2"
}
diff --git a/benchmarks/jasmine/spec/helpers/happydom.ts b/benchmarks/jasmine/spec/helpers/happydom.ts
index ed4e92c..ecfc539 100644
--- a/benchmarks/jasmine/spec/helpers/happydom.ts
+++ b/benchmarks/jasmine/spec/helpers/happydom.ts
@@ -9,10 +9,7 @@ global.window = window;
'document',
'Element',
'getComputedStyle',
- 'HTMLCanvasElement',
'HTMLElement',
- 'HTMLInputElement',
- 'navigator',
'SVGElement'
].forEach((key) => {
global[key] = global.window[key];
diff --git a/benchmarks/jasmine/tests/original/StatusBadge/StatusBadge.test.tsx b/benchmarks/jasmine/tests/original/StatusBadge/StatusBadge.test.tsx
index 7fc3395..4df48e0 100644
--- a/benchmarks/jasmine/tests/original/StatusBadge/StatusBadge.test.tsx
+++ b/benchmarks/jasmine/tests/original/StatusBadge/StatusBadge.test.tsx
@@ -5,7 +5,7 @@ import StatusBadge from '.';
describe('', () => {
it('should render without failure', () => {
const {asFragment} = render();
- // Jasmine doesn't support shapshot testing, so we just check for Object
+ // Jasmine doesn't support shapshot testing, so we just check for Object
expect(asFragment()).toEqual(jasmine.any(Object));
});
});
diff --git a/benchmarks/jest/package.json b/benchmarks/jest/package.json
index 812b194..979331f 100644
--- a/benchmarks/jest/package.json
+++ b/benchmarks/jest/package.json
@@ -8,22 +8,22 @@
"author": "",
"license": "MIT",
"dependencies": {
- "@blueprintjs/icons": "4.6.3",
- "@floating-ui/react-dom-interactions": "0.10.1",
- "clsx": "1.2.1",
+ "@blueprintjs/icons": "4.16.0",
+ "@floating-ui/react-dom-interactions": "0.10.3",
+ "clsx": "2.1.0",
"date-fns": "2.29.3",
"framer-motion": "7.5.3",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"devDependencies": {
- "@happy-dom/jest-environment": "12.0.1",
- "@testing-library/react": "13.4.0",
- "@testing-library/user-event": "14.4.3",
+ "@happy-dom/jest-environment": "13.6.2",
+ "@testing-library/react": "14.2.1",
+ "@testing-library/user-event": "14.5.2",
"identity-obj-proxy": "3.0.0",
"jest": "29.7.0",
"ts-jest": "29.1.2",
- "typescript": "4.8.4"
+ "typescript": "5.3.3"
},
"jest": {
"moduleNameMapper": {
diff --git a/benchmarks/tape/helpers/css.ts b/benchmarks/tape/helpers/css.ts
new file mode 100644
index 0000000..7a0ec3d
--- /dev/null
+++ b/benchmarks/tape/helpers/css.ts
@@ -0,0 +1,6 @@
+import hook from 'css-modules-require-hook';
+
+// Support for CSS modules
+hook({
+ generateScopedName: '[name]__[local]___[hash:base64:5]',
+});
\ No newline at end of file
diff --git a/benchmarks/tape/helpers/happydom.ts b/benchmarks/tape/helpers/happydom.ts
new file mode 100644
index 0000000..ecfc539
--- /dev/null
+++ b/benchmarks/tape/helpers/happydom.ts
@@ -0,0 +1,16 @@
+import { Window } from 'happy-dom';
+
+// Setup happy-dom
+const window = new Window();
+global.window = window;
+
+// Register global window extensions
+[
+ 'document',
+ 'Element',
+ 'getComputedStyle',
+ 'HTMLElement',
+ 'SVGElement'
+].forEach((key) => {
+ global[key] = global.window[key];
+});
\ No newline at end of file
diff --git a/benchmarks/tape/helpers/wrapper.ts b/benchmarks/tape/helpers/wrapper.ts
new file mode 100644
index 0000000..1f249cc
--- /dev/null
+++ b/benchmarks/tape/helpers/wrapper.ts
@@ -0,0 +1,11 @@
+import {cleanup} from '@testing-library/react';
+
+const withAsyncAndTeardown = (test) => {
+ return async (t) => {
+ t.teardown(cleanup);
+ await test(t);
+ t.end();
+ };
+}
+
+export default withAsyncAndTeardown;
\ No newline at end of file
diff --git a/benchmarks/tape/package.json b/benchmarks/tape/package.json
new file mode 100644
index 0000000..51651cf
--- /dev/null
+++ b/benchmarks/tape/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "tape",
+ "version": "0.2.0",
+ "description": "",
+ "scripts": {
+ "test": "TZ=UTC ts-node --esm -P tsconfig.json ../../node_modules/.bin/tape -r ./helpers/css.ts -r ./helpers/happydom.ts tests/**/*.test.tsx"
+ },
+ "author": "",
+ "license": "MIT",
+ "dependencies": {
+ "@blueprintjs/icons": "4.16.0",
+ "@floating-ui/react-dom-interactions": "0.10.3",
+ "clsx": "2.1.0",
+ "date-fns": "2.29.3",
+ "framer-motion": "7.5.3",
+ "react": "18.2.0",
+ "react-dom": "18.2.0"
+ },
+ "devDependencies": {
+ "@testing-library/react": "14.2.1",
+ "@testing-library/user-event": "14.5.2",
+ "css-modules-require-hook": "4.2.3",
+ "happy-dom": "13.6.2",
+ "sinon": "17.0.1",
+ "tape": "5.7.5",
+ "tape-describe": "1.0.3",
+ "ts-node": "10.9.2",
+ "typescript": "5.3.3"
+ }
+}
diff --git a/benchmarks/tape/tests/.gitignore b/benchmarks/tape/tests/.gitignore
new file mode 100644
index 0000000..66b5310
--- /dev/null
+++ b/benchmarks/tape/tests/.gitignore
@@ -0,0 +1 @@
+replica*
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Alert/Alert.module.css b/benchmarks/tape/tests/original/Alert/Alert.module.css
new file mode 100644
index 0000000..49bc942
--- /dev/null
+++ b/benchmarks/tape/tests/original/Alert/Alert.module.css
@@ -0,0 +1,60 @@
+.main {
+ border: 1px solid transparent;
+ border-radius: 8px;
+ display: flex;
+ font-size: 14px;
+ padding: 16px;
+}
+
+.error {
+ background: var(--R50);
+ border-color: var(--R400);
+ color: var(--R400);
+}
+
+/* stylelint-disable-next-line selector-max-type, selector-max-combinators */
+.error a, .error strong { color: inherit }
+
+.info {
+ background: var(--N50);
+ border-color: var(--N400);
+ color: var(--N400);
+}
+
+/* stylelint-disable-next-line selector-max-type, selector-max-combinators */
+.info a, .info strong { color: inherit }
+
+.success {
+ background: var(--G50);
+ border-color: var(--G400);
+ color: var(--G400);
+}
+
+/* stylelint-disable-next-line selector-max-type, selector-max-combinators */
+.success a, .success strong { color: inherit }
+
+.warning {
+ background: var(--Y50);
+ border-color: var(--Y400);
+ color: var(--Y500);
+}
+
+/* stylelint-disable-next-line selector-max-type, selector-max-combinators */
+.warning a, .warning strong { color: inherit }
+
+.icon {
+ margin-right: 16px;
+}
+
+.title {
+ color: inherit;
+ font-weight: bold;
+ margin: 0 0 8px;
+}
+
+.text {
+ display: flex;
+ flex-direction: column;
+}
+
+.children { color: var(--COLOR-GRAY-800) }
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Alert/Alert.test.tsx b/benchmarks/tape/tests/original/Alert/Alert.test.tsx
new file mode 100644
index 0000000..171a3da
--- /dev/null
+++ b/benchmarks/tape/tests/original/Alert/Alert.test.tsx
@@ -0,0 +1,28 @@
+import describe from 'tape-describe';
+import Alert from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the given message', withAsyncAndTeardown((t) => {
+ const {getByText} = render(Hello World);
+ t.ok(getByText('Hello World'));
+ }));
+
+ test('should render with only a title', withAsyncAndTeardown((t) => {
+ const {getByText} = render();
+ t.ok(getByText('Hello World'));
+ }));
+
+ test('should support all the different icons', withAsyncAndTeardown((t) => {
+ const {getByLabelText, rerender} = render();
+ t.ok(getByLabelText('warning-sign'));
+
+ rerender()
+ t.ok(getByLabelText('info-sign'));
+
+ rerender()
+ t.ok(getByLabelText('tick-circle'));
+ }));
+});
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Alert/Alert.tsx b/benchmarks/tape/tests/original/Alert/Alert.tsx
new file mode 100644
index 0000000..e5bf66d
--- /dev/null
+++ b/benchmarks/tape/tests/original/Alert/Alert.tsx
@@ -0,0 +1,48 @@
+import Icon, {IconNames} from '../Icon';
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Alert.module.css';
+
+type IntentType = 'error' | 'info' | 'success' | 'warning';
+
+type PropsType = {
+ className?: string | null,
+ children?: React.ReactNode,
+ intent?: IntentType,
+ title?: string | null,
+}
+
+const getIcon = (intent: IntentType) => {
+ switch (intent) {
+ case 'info': return IconNames.InfoSign;
+ case 'success': return IconNames.TickCircle;
+ case 'warning': return IconNames.WarningSign;
+ case 'error': return IconNames.Error;
+ }
+ return IconNames.Error;
+};
+
+const Alert = ({
+ className,
+ children,
+ intent = 'error',
+ title,
+}: PropsType) => {
+ const classes = clsx(styles.main, styles[intent], className);
+
+ return (
+
+
+
+ {title ?
{title}
: null}
+ {children ? (
+
{children}
+ ) : null}
+
+
+ );
+};
+
+export default Alert;
diff --git a/benchmarks/tape/tests/original/Alert/index.ts b/benchmarks/tape/tests/original/Alert/index.ts
new file mode 100644
index 0000000..d2b7f86
--- /dev/null
+++ b/benchmarks/tape/tests/original/Alert/index.ts
@@ -0,0 +1 @@
+export {default} from './Alert';
diff --git a/benchmarks/tape/tests/original/Avatar/Avatar.module.css b/benchmarks/tape/tests/original/Avatar/Avatar.module.css
new file mode 100644
index 0000000..2722b15
--- /dev/null
+++ b/benchmarks/tape/tests/original/Avatar/Avatar.module.css
@@ -0,0 +1,9 @@
+.main {
+ align-items: center;
+ border-radius: 100%;
+ display: inline-flex;
+ font-size: 15px;
+ height: 40px;
+ justify-content: center;
+ width: 40px;
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Avatar/Avatar.test.tsx b/benchmarks/tape/tests/original/Avatar/Avatar.test.tsx
new file mode 100644
index 0000000..09dc502
--- /dev/null
+++ b/benchmarks/tape/tests/original/Avatar/Avatar.test.tsx
@@ -0,0 +1,12 @@
+import describe from 'tape-describe';
+import Avatar from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the avatar with the initials of the title', withAsyncAndTeardown((t) => {
+ const {getByText} = render();
+ t.ok(getByText('HW'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Avatar/Avatar.tsx b/benchmarks/tape/tests/original/Avatar/Avatar.tsx
new file mode 100644
index 0000000..bb087e1
--- /dev/null
+++ b/benchmarks/tape/tests/original/Avatar/Avatar.tsx
@@ -0,0 +1,60 @@
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Avatar.module.css';
+
+type PropsType = {
+ className?: string | null,
+ colorKey?: SupportedColorsType | null,
+ title?: string | null,
+}
+
+type SupportedColorsType = typeof SUPPORTED_COLORS[number];
+
+const SUPPORTED_COLORS = [
+ 'N', 'B', 'G', 'Y', 'R', 'V', 'T', 'P', 'O',
+] as const;
+
+const stringToColorIndex = (str: string) => {
+ // This gives us a number between 0 and 41
+ const chr = (str.length ? str.charCodeAt(0) : 0) - 49;
+
+ // This gives us an index in our supported color range
+ return Math.floor(chr / (41 / SUPPORTED_COLORS.length));
+};
+
+const getColor = (initials: string, colorKey?: string | null) => {
+ const colorIndex = stringToColorIndex(initials);
+ const key = colorKey || SUPPORTED_COLORS[colorIndex];
+ const background = `var(--${key}100)`;
+ const color = `var(--${key}600)`;
+ return {background, color};
+};
+
+const Avatar = ({
+ className,
+ colorKey,
+ title,
+}: PropsType) => {
+ const classes = clsx(styles.main, className);
+ const initials = title?.length ?
+ title
+ .trim()
+ .split(' ')
+ .map((word) => word[0].toUpperCase())
+ .slice(0, 2)
+ .join('') :
+ null;
+ const {background, color} = getColor(initials || '', colorKey);
+ const style = {background, color};
+
+ return (
+
+ {initials}
+
+ );
+};
+
+export default Avatar;
diff --git a/benchmarks/tape/tests/original/Avatar/index.ts b/benchmarks/tape/tests/original/Avatar/index.ts
new file mode 100644
index 0000000..e1fdf1e
--- /dev/null
+++ b/benchmarks/tape/tests/original/Avatar/index.ts
@@ -0,0 +1 @@
+export {default} from './Avatar';
diff --git a/benchmarks/tape/tests/original/Badge/Badge.module.css b/benchmarks/tape/tests/original/Badge/Badge.module.css
new file mode 100644
index 0000000..5c4b0ea
--- /dev/null
+++ b/benchmarks/tape/tests/original/Badge/Badge.module.css
@@ -0,0 +1,53 @@
+.main {
+ align-items: center;
+ border-radius: 4px;
+ display: inline-flex;
+ font-size: 11px;
+ height: 16px;
+ padding: 0 6px;
+}
+
+.blue {
+ background: var(--B200);
+ color: var(--B600);
+}
+
+.green {
+ background: var(--G300);
+ color: var(--G600);
+}
+
+.neutral {
+ background: var(--N300);
+ color: var(--N800);
+}
+
+.orange {
+ background: var(--O200);
+ color: var(--O600);
+}
+
+.purple {
+ background: var(--P200);
+ color: var(--P600);
+}
+
+.red {
+ background: var(--R200);
+ color: var(--R600);
+}
+
+.turquoise {
+ background: var(--T200);
+ color: var(--T600);
+}
+
+.violet {
+ background: var(--V200);
+ color: var(--V600);
+}
+
+.yellow {
+ background: var(--Y200);
+ color: var(--Y600);
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Badge/Badge.test.tsx b/benchmarks/tape/tests/original/Badge/Badge.test.tsx
new file mode 100644
index 0000000..2f68117
--- /dev/null
+++ b/benchmarks/tape/tests/original/Badge/Badge.test.tsx
@@ -0,0 +1,12 @@
+import describe from 'tape-describe';
+import Badge from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the given badge', withAsyncAndTeardown((t) => {
+ const {getByText} = render(Hello World);
+ t.ok(getByText('Hello World'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Badge/Badge.tsx b/benchmarks/tape/tests/original/Badge/Badge.tsx
new file mode 100644
index 0000000..e36e6f6
--- /dev/null
+++ b/benchmarks/tape/tests/original/Badge/Badge.tsx
@@ -0,0 +1,23 @@
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Badge.module.css';
+
+type PropsType = {
+ className?: string | null,
+ children: string,
+ color?: 'blue' | 'green' | 'neutral' | 'orange' | 'purple' | 'red' | 'turquoise' | 'violet' | 'yellow',
+}
+
+const Badge = ({
+ className,
+ children,
+ color = 'neutral',
+}: PropsType) => (
+
+ {children}
+
+);
+
+export default Badge;
diff --git a/benchmarks/tape/tests/original/Badge/index.ts b/benchmarks/tape/tests/original/Badge/index.ts
new file mode 100644
index 0000000..1cacee3
--- /dev/null
+++ b/benchmarks/tape/tests/original/Badge/index.ts
@@ -0,0 +1 @@
+export {default} from './Badge';
diff --git a/benchmarks/tape/tests/original/Button/Button.module.css b/benchmarks/tape/tests/original/Button/Button.module.css
new file mode 100644
index 0000000..37c4206
--- /dev/null
+++ b/benchmarks/tape/tests/original/Button/Button.module.css
@@ -0,0 +1,170 @@
+.main {
+ align-items: center;
+ background: transparent;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ color: inherit;
+ cursor: pointer;
+ display: flex;
+ font-size: 12px;
+ font-weight: bold;
+ height: 32px;
+ justify-content: center;
+ outline: none;
+ padding: 0 16px;
+ transition:
+ background 150ms ease-in-out,
+ border-color 150ms ease-in-out,
+ color 150ms ease-in-out;
+ user-select: none;
+ white-space: nowrap;
+}
+
+.iconOnly { padding: 0 8px }
+
+.disabled { cursor: default }
+
+.default {
+ background: var(--N0);
+ border-color: var(--N400);
+ color: var(--N700);
+}
+
+.default:active,
+.default:focus-visible,
+.default:hover {
+ color: var(--N800);
+}
+
+.default:focus-visible {
+ border-color: var(--N500);
+ box-shadow: 0 0 0 2px var(--B200);
+}
+
+.default:hover {
+ border-color: var(--N600);
+}
+
+.default:active {
+ background: var(--N100);
+ border-color: var(--N500);
+}
+
+.defaultDisabled,
+.defaultDisabled:focus-visible,
+.defaultDisabled:hover {
+ border-color: var(--N300);
+ color: var(--N300);
+}
+
+.primaryG {
+ background: var(--G400);
+ border-color: var(--G400);
+ color: var(--N0);
+}
+
+.primaryG:focus-visible,
+.primaryR:focus-visible,
+.primaryV:focus-visible {
+ box-shadow: 0 0 0 2px var(--B200);
+}
+
+.primaryG:focus-visible,
+.primaryG:hover {
+ background: var(--G500);
+ border-color: var(--G500);
+}
+
+.primaryG:active {
+ background: var(--G600);
+ border-color: var(--G600);
+}
+
+.primaryV {
+ background: var(--V400);
+ border-color: var(--V400);
+ color: var(--N0);
+}
+
+.primaryV:focus-visible,
+.primaryV:hover {
+ background: var(--V500);
+ border-color: var(--v500);
+}
+
+.primaryV:active {
+ background: var(--V600);
+ border-color: var(--V600);
+}
+
+.primaryR {
+ background: var(--R400);
+ border-color: var(--R400);
+ color: var(--N0);
+}
+
+.primaryR:focus-visible,
+.primaryR:hover {
+ background: var(--R500);
+ border-color: var(--R500);
+}
+
+.primaryR:active {
+ background: var(--R600);
+ border-color: var(--R600);
+}
+
+.primaryGDisabled,
+.primaryGDisabled:focus-visible,
+.primaryGDisabled:hover {
+ background: var(--G200);
+ border-color: var(--G200);
+}
+
+.primaryVDisabled,
+.primaryVDisabled:focus-visible,
+.primaryVDisabled:hover {
+ background: var(--V200);
+ border-color: var(--V200);
+}
+
+.primaryRDisabled,
+.primaryRDisabled:focus-visible,
+.primaryRDisabled:hover {
+ background: var(--R200);
+ border-color: var(--R200);
+}
+
+.minimal:focus-visible {
+ box-shadow: 0 0 0 2px var(--B200);
+}
+
+.minimal:hover {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+.minimalGDisabled,
+.minimalGDisabled:focus-visible,
+.minimalGDisabled:hover {
+ background: transparent;
+ color: var(--N400);
+}
+
+.iconWithText { margin-right: 8px }
+
+/*
+ * Ensures that outlines always show up on top of selected items
+ * when buttons are used in ToggleGroup/ToggleButton components
+ */
+.main:focus { z-index: 1 }
+
+/*
+ * TODO: This only works for 'minimal' appearance right now.
+ * Add the others when/if needed.
+ */
+.isSelected,
+.isSelected:focus-visible,
+.isSelected:hover {
+ background: var(--G100);
+ color: var(--G400);
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Button/Button.tsx b/benchmarks/tape/tests/original/Button/Button.tsx
new file mode 100644
index 0000000..accc322
--- /dev/null
+++ b/benchmarks/tape/tests/original/Button/Button.tsx
@@ -0,0 +1,102 @@
+import clsx from 'clsx';
+import Icon from '../Icon';
+import {type IconName} from '@blueprintjs/icons';
+import React from 'react';
+import Spinner from '../Spinner';
+import styles from './Button.module.css';
+
+export type PropsType = {
+ appearance?: 'default' | 'minimal' | 'primary',
+ ariaLabel?: string,
+ className?: string | null,
+ children?: React.ReactNode,
+ colorKey?: 'G' | 'R' | 'V',
+ icon?: IconName,
+ isDisabled?: boolean,
+ isLoading?: boolean,
+ isSelected?: boolean,
+ onBlur?: (event: React.FocusEvent) => unknown,
+ onClick?: (event: React.MouseEvent) => unknown,
+ onFocus?: (event: React.FocusEvent) => unknown,
+ onKeyDown?: (event: React.KeyboardEvent) => unknown,
+ onPointerDown?: (event: React.PointerEvent) => unknown,
+ onPointerEnter?: (event: React.PointerEvent) => unknown,
+ onPointerLeave?: (event: React.PointerEvent) => unknown,
+ role?: 'tab',
+ tabIndex?: number,
+ type?: 'button' | 'submit',
+}
+
+type RefType = HTMLButtonElement;
+
+const Button = React.forwardRef(({
+ appearance = 'default',
+ ariaLabel,
+ className,
+ children,
+ colorKey = 'G',
+ icon,
+ isDisabled = false,
+ isLoading = false,
+ isSelected = false,
+ onBlur,
+ onClick,
+ onFocus,
+ onKeyDown,
+ onPointerDown,
+ onPointerEnter,
+ onPointerLeave,
+ role,
+ tabIndex,
+ type = 'button',
+}, ref) => {
+ const classes = clsx(
+ styles.main,
+ styles[appearance],
+ !children && icon ? styles.iconOnly : null,
+ isDisabled ? styles.disabled : null,
+ isDisabled ? styles[`${appearance}${colorKey}Disabled`] : null,
+ styles[`${appearance}${colorKey}`],
+ isSelected ? styles.isSelected : null,
+ className
+ );
+
+ return (
+
+ );
+});
+
+Button.displayName = 'Button';
+
+export default Button;
diff --git a/benchmarks/tape/tests/original/Button/index.ts b/benchmarks/tape/tests/original/Button/index.ts
new file mode 100644
index 0000000..20cd824
--- /dev/null
+++ b/benchmarks/tape/tests/original/Button/index.ts
@@ -0,0 +1 @@
+export {default} from './Button';
diff --git a/benchmarks/tape/tests/original/Card/Card.module.css b/benchmarks/tape/tests/original/Card/Card.module.css
new file mode 100644
index 0000000..1e03bf6
--- /dev/null
+++ b/benchmarks/tape/tests/original/Card/Card.module.css
@@ -0,0 +1,7 @@
+.main {
+ background: var(--N0);
+ border-radius: 8px;
+ box-shadow: 0 4px 8px rgba(16, 24, 64, 0.08);
+ display: flex;
+ padding: 32px;
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Card/Card.test.tsx b/benchmarks/tape/tests/original/Card/Card.test.tsx
new file mode 100644
index 0000000..cfbb3b5
--- /dev/null
+++ b/benchmarks/tape/tests/original/Card/Card.test.tsx
@@ -0,0 +1,12 @@
+import describe from 'tape-describe';
+import Card from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the given children', withAsyncAndTeardown((t) => {
+ const {getByText} = render(Hello World);
+ t.ok(getByText('Hello World'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Card/Card.tsx b/benchmarks/tape/tests/original/Card/Card.tsx
new file mode 100644
index 0000000..d4f0095
--- /dev/null
+++ b/benchmarks/tape/tests/original/Card/Card.tsx
@@ -0,0 +1,19 @@
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Card.module.css';
+
+type PropsType = {
+ className?: string | null,
+ children?: React.ReactNode,
+}
+
+const Card = ({
+ className,
+ children,
+}: PropsType) => (
+
+ {children}
+
+);
+
+export default Card;
diff --git a/benchmarks/tape/tests/original/Card/index.ts b/benchmarks/tape/tests/original/Card/index.ts
new file mode 100644
index 0000000..324373e
--- /dev/null
+++ b/benchmarks/tape/tests/original/Card/index.ts
@@ -0,0 +1 @@
+export {default} from './Card';
diff --git a/benchmarks/tape/tests/original/Checkbox/Checkbox.module.css b/benchmarks/tape/tests/original/Checkbox/Checkbox.module.css
new file mode 100644
index 0000000..10c559b
--- /dev/null
+++ b/benchmarks/tape/tests/original/Checkbox/Checkbox.module.css
@@ -0,0 +1,54 @@
+.main {
+ color: var(--N800);
+ cursor: pointer;
+ position: relative;
+}
+
+.input { display: none }
+
+.checkbox {
+ align-items: center;
+ background: var(--N0);
+ border: 1px solid var(--N400);
+ border-radius: 4px;
+ display: flex;
+ height: 16px;
+ justify-content: center;
+ position: relative;
+ transition:
+ background 100ms ease-in-out,
+ border-color 100ms ease-in-out,
+ color 100ms ease-in-out;
+ width: 16px;
+}
+
+.checkboxChecked {
+ background: var(--G400);
+ border-color: var(--G400);
+ color: var(--N0);
+}
+
+/* stylelint-disable selector-max-combinators */
+.main:focus-visible .checkbox,
+.main:hover .checkbox {
+ border-color: var(--N600);
+}
+
+.main:active .checkbox {
+ border-color: var(--N500);
+}
+
+.main:focus-visible .checkboxChecked,
+.main:hover .checkboxChecked {
+ background: var(--G500);
+ border-color: var(--G500);
+}
+
+.main:active .checkboxChecked {
+ background: var(--G600);
+ border-color: var(--G600);
+}
+/* stylelint-enable selector-max-combinators */
+
+/* Needed to avoid layout shift when checkbox is an inline block */
+.icon { position: absolute }
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Checkbox/Checkbox.test.tsx b/benchmarks/tape/tests/original/Checkbox/Checkbox.test.tsx
new file mode 100644
index 0000000..0fce838
--- /dev/null
+++ b/benchmarks/tape/tests/original/Checkbox/Checkbox.test.tsx
@@ -0,0 +1,19 @@
+import describe from 'tape-describe';
+import Checkbox from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the checkbox', withAsyncAndTeardown((t) => {
+ const {getByRole} = render( {}} />);
+ t.ok(getByRole('checkbox'));
+ }));
+
+ test('should support the indeterminate state', withAsyncAndTeardown((t) => {
+ const {getByLabelText} = render(
+ {}} />
+ );
+ t.ok(getByLabelText('indeterminate'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Checkbox/Checkbox.tsx b/benchmarks/tape/tests/original/Checkbox/Checkbox.tsx
new file mode 100644
index 0000000..aeb93c0
--- /dev/null
+++ b/benchmarks/tape/tests/original/Checkbox/Checkbox.tsx
@@ -0,0 +1,67 @@
+import clsx from 'clsx';
+import Icon from '../Icon';
+import React from 'react';
+import styles from './Checkbox.module.css';
+
+type PropsType = {
+ checked?: boolean,
+ className?: string | null,
+ indeterminate?: boolean,
+ label?: string,
+ onChange?: ((e: React.ChangeEvent) => unknown) | undefined,
+ title?: string,
+}
+
+const getIcon = ({
+ checked,
+ indeterminate,
+}: {
+ checked: boolean,
+ indeterminate: boolean,
+}) => {
+ if (indeterminate) return (
+
+ );
+ if (checked) return ;
+ return null;
+};
+
+const Checkbox = ({
+ className,
+ checked = false,
+ indeterminate = false,
+ label,
+ onChange,
+ title,
+}: PropsType) => {
+ const classes = clsx(styles.main, className);
+ const checkboxClasses = clsx(
+ styles.checkbox,
+ checked || indeterminate ? styles.checkboxChecked : null
+ );
+
+ return (
+
+ );
+};
+
+export default Checkbox;
diff --git a/benchmarks/tape/tests/original/Checkbox/index.ts b/benchmarks/tape/tests/original/Checkbox/index.ts
new file mode 100644
index 0000000..b03c7a9
--- /dev/null
+++ b/benchmarks/tape/tests/original/Checkbox/index.ts
@@ -0,0 +1 @@
+export {default} from './Checkbox';
diff --git a/benchmarks/tape/tests/original/Collapsible/Collapsible.module.css b/benchmarks/tape/tests/original/Collapsible/Collapsible.module.css
new file mode 100644
index 0000000..3a5a53e
--- /dev/null
+++ b/benchmarks/tape/tests/original/Collapsible/Collapsible.module.css
@@ -0,0 +1,30 @@
+.main {
+ display: flex;
+ flex-direction: column;
+}
+
+.headerButton {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: 4px;
+ color: var(--N800);
+ cursor: pointer;
+ display: flex;
+ font-size: 14px;
+ font-weight: bold;
+ height: 32px;
+ justify-content: space-between;
+ outline: none;
+ padding: 0 8px;
+}
+
+.headerButton:hover {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+.headerButton:focus-visible {
+ box-shadow: 0 0 0 2px var(--B200);
+}
+
+.content { overflow: hidden }
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Collapsible/Collapsible.test.tsx b/benchmarks/tape/tests/original/Collapsible/Collapsible.test.tsx
new file mode 100644
index 0000000..ff460b4
--- /dev/null
+++ b/benchmarks/tape/tests/original/Collapsible/Collapsible.test.tsx
@@ -0,0 +1,31 @@
+import describe from 'tape-describe';
+import {render, waitForElementToBeRemoved} from '@testing-library/react';
+import Collapsible from '.';
+import React from 'react';
+import userEvent from '@testing-library/user-event';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render the children for the element', withAsyncAndTeardown((t) => {
+ const {getByText} = render(
+
+ Hello World
+
+ );
+ t.ok(getByText('Hello World'));
+ }));
+
+ test('should be able to toggle the collapsible content', withAsyncAndTeardown(async (t) => {
+ const user = userEvent.setup();
+ const {getByText, queryByText} = render(
+
+ Hello World
+
+ );
+ t.ok(getByText('Hello World'));
+
+ await user.click(getByText('My Title'))
+
+ await waitForElementToBeRemoved(queryByText('Hello World'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Collapsible/Collapsible.tsx b/benchmarks/tape/tests/original/Collapsible/Collapsible.tsx
new file mode 100644
index 0000000..da9705a
--- /dev/null
+++ b/benchmarks/tape/tests/original/Collapsible/Collapsible.tsx
@@ -0,0 +1,62 @@
+import {AnimatePresence, motion} from 'framer-motion';
+import React, {useState} from 'react';
+import clsx from 'clsx';
+import Icon from '../Icon';
+import styles from './Collapsible.module.css';
+
+type PropsType = {
+ className?: string | null,
+ children?: React.ReactNode,
+ contentClassName?: string,
+ initiallyCollapsed?: boolean,
+ title: React.ReactNode,
+}
+
+const TRANSITION = {
+ duration: 0.5,
+ type: 'spring',
+};
+
+const VARIANTS = {
+ open: {height: 'auto', marginTop: 16},
+ collapsed: {height: 0, marginTop: 0},
+};
+
+const Collapsible = ({
+ className,
+ children,
+ contentClassName,
+ initiallyCollapsed = false,
+ title,
+}: PropsType) => {
+ const [isCollapsed, setIsCollapsed] = useState(initiallyCollapsed);
+
+ const handleToggleClick = () => setIsCollapsed(!isCollapsed);
+
+ return (
+
+
+
+ {!isCollapsed ? (
+
+ {children}
+
+ ) : null}
+
+
+ );
+};
+
+export default Collapsible;
diff --git a/benchmarks/tape/tests/original/Collapsible/index.ts b/benchmarks/tape/tests/original/Collapsible/index.ts
new file mode 100644
index 0000000..1d44d8e
--- /dev/null
+++ b/benchmarks/tape/tests/original/Collapsible/index.ts
@@ -0,0 +1 @@
+export {default} from './Collapsible';
diff --git a/benchmarks/tape/tests/original/DateString/DateString.module.css b/benchmarks/tape/tests/original/DateString/DateString.module.css
new file mode 100644
index 0000000..a8ede42
--- /dev/null
+++ b/benchmarks/tape/tests/original/DateString/DateString.module.css
@@ -0,0 +1 @@
+.main { text-transform: capitalize }
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/DateString/DateString.test.tsx b/benchmarks/tape/tests/original/DateString/DateString.test.tsx
new file mode 100644
index 0000000..baba399
--- /dev/null
+++ b/benchmarks/tape/tests/original/DateString/DateString.test.tsx
@@ -0,0 +1,35 @@
+import describe from 'tape-describe';
+import DateString from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render nothing if nothing is given', withAsyncAndTeardown((t) => {
+ const {container} = render();
+ t.equal(container.innerHTML, '');
+ }));
+
+ test('should support Date objects as children', withAsyncAndTeardown((t) => {
+ const {getByText} = render(
+ {new Date(2022, 1, 1)}
+ );
+ t.ok(getByText('2022-02-01'));
+ }));
+
+ test('should support strings as children', withAsyncAndTeardown((t) => {
+ const {getByText} = render(
+ 2022-02-01T01:02:03Z
+ );
+ t.ok(getByText('2022-02-01'));
+ }));
+
+ test('should show yesterday as long form text', withAsyncAndTeardown((t) => {
+ const today = new Date();
+ const yesterday = new Date(today.setDate(today.getDate() - 1)).toISOString();
+ const {getByText} = render(
+ {yesterday}
+ );
+ t.ok(getByText(/yesterday/u));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/DateString/DateString.tsx b/benchmarks/tape/tests/original/DateString/DateString.tsx
new file mode 100644
index 0000000..e95fc2a
--- /dev/null
+++ b/benchmarks/tape/tests/original/DateString/DateString.tsx
@@ -0,0 +1,40 @@
+import buildFormatLongFn from 'date-fns/locale/_lib/buildFormatLongFn';
+import type {FormatLong} from 'date-fns/locale/types';
+import {formatRelative} from 'date-fns';
+import React from 'react';
+import styles from './DateString.module.css';
+import usLocale from 'date-fns/locale/en-US';
+
+type PropsType = {
+ children?: Date | string | null,
+}
+
+const DateString = ({children}: PropsType) => {
+ if (!children) return null;
+
+ const locale = {
+ ...usLocale,
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ formatLong: {
+ ...usLocale.formatLong,
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
+ date: buildFormatLongFn({
+ formats: {
+ full: 'EEEE, MMMM do, y',
+ long: 'MMMM do, y',
+ medium: 'MMM d, y',
+ short: 'yyyy-MM-dd',
+ },
+ defaultWidth: 'full',
+ }) as unknown,
+ } as FormatLong,
+ };
+
+ return (
+
+ {formatRelative(new Date(children), new Date(), {locale})}
+
+ );
+};
+
+export default DateString;
diff --git a/benchmarks/tape/tests/original/DateString/index.ts b/benchmarks/tape/tests/original/DateString/index.ts
new file mode 100644
index 0000000..aac16ec
--- /dev/null
+++ b/benchmarks/tape/tests/original/DateString/index.ts
@@ -0,0 +1 @@
+export {default} from './DateString';
diff --git a/benchmarks/tape/tests/original/Icon/Icon.module.css b/benchmarks/tape/tests/original/Icon/Icon.module.css
new file mode 100644
index 0000000..dd0a0ee
--- /dev/null
+++ b/benchmarks/tape/tests/original/Icon/Icon.module.css
@@ -0,0 +1 @@
+.main { fill: currentColor }
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Icon/Icon.tsx b/benchmarks/tape/tests/original/Icon/Icon.tsx
new file mode 100644
index 0000000..252ddf9
--- /dev/null
+++ b/benchmarks/tape/tests/original/Icon/Icon.tsx
@@ -0,0 +1,48 @@
+import {type IconName, iconNameToPathsRecordKey, IconSvgPaths16, IconSvgPaths20} from '@blueprintjs/icons';
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Icon.module.css';
+
+type PropsType = {
+ className?: string | null,
+ name: IconName,
+ size?: number,
+}
+
+type RefType = SVGSVGElement;
+
+const renderSvgPaths = (pixelGridSize: 16 | 20, name: IconName) => {
+ const svgPathsRecord = pixelGridSize === 16 ? IconSvgPaths16 : IconSvgPaths20;
+ const paths = svgPathsRecord[iconNameToPathsRecordKey(name)];
+ return paths.map((path, i) => (
+
+ ));
+};
+
+const Icon = React.forwardRef(({
+ className,
+ name,
+ size = 16,
+}, ref) => {
+ const pixelGridSize = size >= 20 ? 20 : 16;
+ const paths = renderSvgPaths(pixelGridSize, name);
+ const classes = clsx(styles.main, className);
+ const viewBox = `0 0 ${pixelGridSize} ${pixelGridSize}`;
+
+ return (
+
+ );
+});
+
+Icon.displayName = 'Icon';
+
+export default Icon;
diff --git a/benchmarks/tape/tests/original/Icon/index.ts b/benchmarks/tape/tests/original/Icon/index.ts
new file mode 100644
index 0000000..ea4b464
--- /dev/null
+++ b/benchmarks/tape/tests/original/Icon/index.ts
@@ -0,0 +1,2 @@
+export {default} from './Icon';
+export {IconNames} from '@blueprintjs/icons';
diff --git a/benchmarks/tape/tests/original/Pagination/Pagination.module.css b/benchmarks/tape/tests/original/Pagination/Pagination.module.css
new file mode 100644
index 0000000..75a1e1f
--- /dev/null
+++ b/benchmarks/tape/tests/original/Pagination/Pagination.module.css
@@ -0,0 +1,12 @@
+.main {
+ align-items: center;
+ display: flex;
+ gap: 4px;
+}
+
+.ellipsis {
+ align-items: center;
+ display: flex;
+ height: 32px;
+ justify-content: center;
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Pagination/Pagination.test.tsx b/benchmarks/tape/tests/original/Pagination/Pagination.test.tsx
new file mode 100644
index 0000000..bb60e64
--- /dev/null
+++ b/benchmarks/tape/tests/original/Pagination/Pagination.test.tsx
@@ -0,0 +1,61 @@
+import describe from 'tape-describe';
+import Pagination from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import sinon from 'sinon';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ const DEFAULT_PROPS = {
+ onNextPage: () => {},
+ onPageChange: () => {},
+ onPreviousPage: () => {},
+ }
+
+ test('should render a button for each page', withAsyncAndTeardown((t) => {
+ const {getByText} = render(
+
+ );
+ t.ok(getByText(1));
+ t.ok(getByText(2));
+ t.ok(getByText(3));
+ t.ok(getByText(4));
+ t.ok(getByText(5));
+ }));
+
+ test('should render two ellipses if current page is far from both ends', withAsyncAndTeardown((t) => {
+ const {getAllByText} = render(
+
+ );
+ t.equal(getAllByText('...').length, 2);
+ }));
+
+ test('should render an ellipsis if current page is far the end', withAsyncAndTeardown((t) => {
+ const {getAllByText} = render(
+
+ );
+ t.equal(getAllByText('...').length, 1);
+ }));
+
+ test('should render an ellipsis if current page is far the start', withAsyncAndTeardown((t) => {
+ const {getAllByText} = render(
+
+ );
+ t.equal(getAllByText('...').length, 1);
+ }));
+
+ test('should navigate to the page when clicking on that specific page', withAsyncAndTeardown(async (t) => {
+ const onPageChange = sinon.fake();
+ const user = userEvent.setup()
+ const {getByText} = render(
+
+ );
+ await user.click(getByText(2));
+ t.ok(onPageChange.calledWith(2));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Pagination/Pagination.tsx b/benchmarks/tape/tests/original/Pagination/Pagination.tsx
new file mode 100644
index 0000000..7e6e22c
--- /dev/null
+++ b/benchmarks/tape/tests/original/Pagination/Pagination.tsx
@@ -0,0 +1,84 @@
+import Button from '../Button';
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Pagination.module.css';
+
+type PropsType = {
+ className?: string | null,
+ onNextPage: () => unknown,
+ onPageChange: (page: number) => unknown,
+ onPreviousPage: () => unknown,
+ page: number,
+ totalPages: number,
+}
+
+const MAX_OPTIONS_SHOWN = 7;
+
+const range = (start: number, stop: number) => {
+ const output = []
+ for (let i = start; i <= stop; i++) {
+ output.push(i)
+ }
+ return output
+}
+
+const getPaginationButtonContent = ({ page, totalPages }: {
+ page: number,
+ totalPages: number,
+}): Array => {
+ if (totalPages <= MAX_OPTIONS_SHOWN) {
+ return range(1, totalPages)
+ }
+
+ if (totalPages > MAX_OPTIONS_SHOWN && page <= 4) {
+ return [...range(1, 5), '...', totalPages]
+ }
+
+ if (totalPages - page < 4) {
+ return [1, '...', ...range(totalPages - 4, totalPages)]
+ }
+
+ return [1, '...', ...range(page - 1, page + 1), '...', totalPages]
+}
+
+const Pagination = ({
+ className,
+ onNextPage,
+ onPageChange,
+ onPreviousPage,
+ page,
+ totalPages,
+}: PropsType) => {
+ const isPrevEnabled = page > 1;
+ const isNextEnabled = page < totalPages;
+
+ return (
+
+
+ {getPaginationButtonContent({page, totalPages}).map((option, i) => (
+ option === '...' ? (
+
...
+ ) : (
+
+ )
+ ))}
+
+
+ );
+};
+
+export default Pagination;
diff --git a/benchmarks/tape/tests/original/Pagination/index.ts b/benchmarks/tape/tests/original/Pagination/index.ts
new file mode 100644
index 0000000..c7f7668
--- /dev/null
+++ b/benchmarks/tape/tests/original/Pagination/index.ts
@@ -0,0 +1 @@
+export {default} from './Pagination';
diff --git a/benchmarks/tape/tests/original/Spinner/Spinner.module.css b/benchmarks/tape/tests/original/Spinner/Spinner.module.css
new file mode 100644
index 0000000..0d609f2
--- /dev/null
+++ b/benchmarks/tape/tests/original/Spinner/Spinner.module.css
@@ -0,0 +1,39 @@
+@keyframes spinner {
+ 0% {
+ transform: rotate(0)
+ }
+
+ 100% {
+ transform: rotate(360deg)
+ }
+}
+
+@keyframes spinnerCircle {
+ 0% {
+ stroke-dashoffset: 600
+ }
+
+ 100% {
+ stroke-dashoffset: 0
+ }
+}
+
+.main { display: inline-flex }
+
+.default { color: rgba(67, 90, 111, 0.47) }
+.white { color: rgba(239, 242, 245, 0.87) }
+
+.svg {
+ animation: 2s linear 0s infinite normal none running spinner;
+}
+
+.circle {
+ animation: spinnerCircle 1.6s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite;
+ fill: transparent;
+ stroke: currentColor;
+ stroke-dasharray: 300;
+ stroke-dashoffset: 600;
+ stroke-linecap: round;
+ stroke-miterlimit: 10;
+ stroke-width: 12;
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/Spinner/Spinner.test.tsx b/benchmarks/tape/tests/original/Spinner/Spinner.test.tsx
new file mode 100644
index 0000000..ef43465
--- /dev/null
+++ b/benchmarks/tape/tests/original/Spinner/Spinner.test.tsx
@@ -0,0 +1,12 @@
+import describe from 'tape-describe';
+import Spinner from '.';
+import React from 'react';
+import {render} from '@testing-library/react';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render a spinner image', withAsyncAndTeardown((t) => {
+ const {getByRole} = render();
+ t.ok(getByRole('img'));
+ }));
+});
diff --git a/benchmarks/tape/tests/original/Spinner/Spinner.tsx b/benchmarks/tape/tests/original/Spinner/Spinner.tsx
new file mode 100644
index 0000000..8511adb
--- /dev/null
+++ b/benchmarks/tape/tests/original/Spinner/Spinner.tsx
@@ -0,0 +1,45 @@
+import clsx from 'clsx';
+import React from 'react';
+import styles from './Spinner.module.css';
+
+type PropsType = {
+ className?: string | null,
+ color?: 'default' | 'white',
+ size?: number,
+}
+
+const Spinner = ({
+ className,
+ color = 'default',
+ size = 16,
+}: PropsType) => {
+ const style = {
+ height: size,
+ width: size,
+ };
+
+ const classes = clsx(
+ styles.main,
+ styles[color],
+ className
+ );
+
+ return (
+
+
+
+ );
+};
+
+export default Spinner;
diff --git a/benchmarks/tape/tests/original/Spinner/index.ts b/benchmarks/tape/tests/original/Spinner/index.ts
new file mode 100644
index 0000000..e3881ab
--- /dev/null
+++ b/benchmarks/tape/tests/original/Spinner/index.ts
@@ -0,0 +1 @@
+export {default} from './Spinner';
diff --git a/benchmarks/tape/tests/original/StatusBadge/StatusBadge.test.tsx b/benchmarks/tape/tests/original/StatusBadge/StatusBadge.test.tsx
new file mode 100644
index 0000000..2c9b5ce
--- /dev/null
+++ b/benchmarks/tape/tests/original/StatusBadge/StatusBadge.test.tsx
@@ -0,0 +1,13 @@
+import describe from 'tape-describe';
+import React from 'react';
+import {render} from '@testing-library/react';
+import StatusBadge from '.';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render without failure', withAsyncAndTeardown((t) => {
+ const {asFragment} = render();
+ // Tape doesn't support shapshot testing, so we just check for Object
+ t.equal(typeof asFragment(), 'object');
+ }));
+});
diff --git a/benchmarks/tape/tests/original/StatusBadge/StatusBadge.tsx b/benchmarks/tape/tests/original/StatusBadge/StatusBadge.tsx
new file mode 100644
index 0000000..72b5a9c
--- /dev/null
+++ b/benchmarks/tape/tests/original/StatusBadge/StatusBadge.tsx
@@ -0,0 +1,25 @@
+import Badge from '../Badge';
+import React from 'react';
+
+type PropsType = {
+ status: 'DRAFTED' | 'COMPLETED',
+};
+
+const STATUSES = [
+ {color: 'green' as const, value: 'DRAFTED'},
+ {color: 'orange' as const, value: 'COMPLETED'}
+]
+
+const StatusBadge = ({
+ status,
+}: PropsType) => {
+ const record = STATUSES.find(({value}) => value === status);
+
+ return (
+
+ {status}
+
+ );
+};
+
+export default StatusBadge;
diff --git a/benchmarks/tape/tests/original/StatusBadge/index.ts b/benchmarks/tape/tests/original/StatusBadge/index.ts
new file mode 100644
index 0000000..ce69851
--- /dev/null
+++ b/benchmarks/tape/tests/original/StatusBadge/index.ts
@@ -0,0 +1 @@
+export {default} from './StatusBadge';
diff --git a/benchmarks/tape/tests/original/WithTooltip/WithTooltip.module.css b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.module.css
new file mode 100644
index 0000000..f83de95
--- /dev/null
+++ b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.module.css
@@ -0,0 +1,25 @@
+.main {
+ background: var(--N900);
+ border-radius: 4px;
+ box-shadow:
+ rgba(67, 90, 111, 0) 0 0 1px,
+ rgba(67, 90, 111, 0) 0 8px 10px -4px;
+ color: var(--N100);
+ font-size: 12px;
+ max-width: 320px;
+ min-height: 16px;
+ padding: 8px;
+ pointer-events: none;
+ position: relative;
+ text-align: center;
+ user-select: none;
+ z-index: 1000;
+}
+
+.arrow {
+ background: var(--N900);
+ height: 8px;
+ position: absolute;
+ transform: rotate(45deg);
+ width: 8px;
+}
\ No newline at end of file
diff --git a/benchmarks/tape/tests/original/WithTooltip/WithTooltip.test.tsx b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.test.tsx
new file mode 100644
index 0000000..6be756f
--- /dev/null
+++ b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.test.tsx
@@ -0,0 +1,15 @@
+import describe from 'tape-describe';
+import React from 'react';
+import {render} from '@testing-library/react';
+import WithTooltip from '.';
+import withAsyncAndTeardown from '../../../helpers/wrapper';
+
+describe('', (test) => {
+ test('should render render nothing if no tooltip was given', withAsyncAndTeardown((t) => {
+ const {asFragment} = render(
+ Howdy
+ );
+ // Tape doesn't support shapshot testing, so we just check for Object
+ t.equal(typeof asFragment(), 'object');
+ }));
+});
diff --git a/benchmarks/tape/tests/original/WithTooltip/WithTooltip.tsx b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.tsx
new file mode 100644
index 0000000..e80f24d
--- /dev/null
+++ b/benchmarks/tape/tests/original/WithTooltip/WithTooltip.tsx
@@ -0,0 +1,165 @@
+/* eslint-disable react/jsx-props-no-spreading */
+
+import {AnimatePresence, motion} from 'framer-motion';
+import {
+ arrow,
+ autoPlacement,
+ autoUpdate,
+ FloatingPortal,
+ offset,
+ shift,
+ useDismiss,
+ useFloating,
+ useHover,
+ useInteractions,
+ useRole,
+} from '@floating-ui/react-dom-interactions';
+import type {Coords, Placement} from '@floating-ui/react-dom-interactions';
+import React, {cloneElement, forwardRef, useRef, useState} from 'react';
+import clsx from 'clsx';
+import styles from './WithTooltip.module.css';
+
+type PropsType = {
+ children: JSX.Element,
+ // Force placement
+ placement?: Placement,
+ // This is the body of the tooltip
+ tooltip?: React.ReactNode | null,
+};
+
+const ARROW_SIZE = 4;
+
+const getArrowStyle = (arrow: Partial | undefined, placement: Placement) => {
+ const arrowX = arrow?.x || 0;
+ const arrowY = arrow?.y || 0;
+
+ switch (placement) {
+ case 'left':
+ return {
+ right: arrowX - ARROW_SIZE,
+ top: arrowY,
+ };
+ case 'right':
+ return {
+ left: arrowX - ARROW_SIZE,
+ top: arrowY,
+ };
+ case 'bottom':
+ return {
+ left: arrowX,
+ top: arrowY - ARROW_SIZE,
+ };
+ default:
+ return {
+ left: arrowX,
+ bottom: arrowY - ARROW_SIZE,
+ };
+ }
+};
+
+const WithTooltip = forwardRef(({
+ children,
+ placement: forcedPlacement,
+ tooltip,
+ ...parentProps
+}, parentRef) => {
+ const [isOpen, setIsOpen] = useState(false);
+ const arrowRef = useRef(null);
+
+ const {
+ context,
+ floating,
+ placement: calculatedPlacement,
+ reference,
+ strategy,
+ x,
+ y,
+ middlewareData: md,
+ } = useFloating({
+ middleware: [
+ offset(8),
+ autoPlacement({
+ allowedPlacements: forcedPlacement ?
+ [forcedPlacement] :
+ ['top', 'bottom'],
+ }),
+ shift({padding: 8}),
+ arrow({element: arrowRef, padding: 8}),
+ ],
+ onOpenChange: setIsOpen,
+ open: isOpen,
+ whileElementsMounted: autoUpdate,
+ });
+
+ const placement = forcedPlacement ? forcedPlacement : calculatedPlacement;
+
+ const ref = reference;
+
+ const {getReferenceProps, getFloatingProps} = useInteractions([
+ // TODO: Form elements are auto-focused in the app for some reason.
+ // Until we can figure out, keep this off.
+ // useFocus(context),
+ useHover(context, {move: false}),
+ useRole(context, {role: 'tooltip'}),
+ useDismiss(context, {referencePress: true}),
+ ]);
+
+ const arrowStyle = getArrowStyle(md.arrow, placement);
+ // eslint-disable-next-line no-nested-ternary
+ const translateY = placement === 'bottom' ? 10 : placement === 'top' ? -10 : 0;
+ // eslint-disable-next-line no-nested-ternary
+ const translateX = placement === 'right' ? 10 : placement === 'left' ? -10 : 0;
+
+ return (
+ <>
+ {cloneElement(
+ children,
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
+ getReferenceProps({
+ ref,
+ ...children.props,
+ ...parentProps,
+ onKeyDown: (event) => {
+ // Dismiss if pressing Spacebar or Enter
+ if (event.keyCode === 32 || event.keyCode === 13) {
+ setIsOpen(false);
+ }
+ },
+ })
+ )}
+
+ {isOpen && tooltip != null ? (
+
+
+ {tooltip}
+
+
+
+ ) : null}
+
+ >
+ );
+});
+
+WithTooltip.displayName = 'WithTooltip';
+
+export default WithTooltip;
diff --git a/benchmarks/tape/tests/original/WithTooltip/index.ts b/benchmarks/tape/tests/original/WithTooltip/index.ts
new file mode 100644
index 0000000..84ad64f
--- /dev/null
+++ b/benchmarks/tape/tests/original/WithTooltip/index.ts
@@ -0,0 +1 @@
+export {default} from './WithTooltip';
diff --git a/benchmarks/tape/tsconfig.json b/benchmarks/tape/tsconfig.json
new file mode 100644
index 0000000..96ae5b8
--- /dev/null
+++ b/benchmarks/tape/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "esModuleInterop": true,
+ "jsx": "react"
+ },
+ "ts-node": {
+ "transpileOnly": true
+ }
+}
\ No newline at end of file
diff --git a/benchmarks/vitest/package.json b/benchmarks/vitest/package.json
index 2fd047c..9ab6fa5 100644
--- a/benchmarks/vitest/package.json
+++ b/benchmarks/vitest/package.json
@@ -8,18 +8,18 @@
"author": "",
"license": "MIT",
"dependencies": {
- "@blueprintjs/icons": "4.6.3",
- "@floating-ui/react-dom-interactions": "0.10.1",
- "clsx": "1.2.1",
+ "@blueprintjs/icons": "4.16.0",
+ "@floating-ui/react-dom-interactions": "0.10.3",
+ "clsx": "2.1.0",
"date-fns": "2.29.3",
"framer-motion": "7.5.3",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"devDependencies": {
- "@testing-library/react": "13.4.0",
- "@testing-library/user-event": "14.4.3",
- "happy-dom": "12.0.1",
- "vitest": "1.3.1"
+ "@testing-library/react": "14.2.1",
+ "@testing-library/user-event": "14.5.2",
+ "happy-dom": "13.6.2",
+ "vitest": "1.1.3"
}
}
diff --git a/bun.lockb b/bun.lockb
index cac10e0..0a3a179 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/result-multi-thread.png b/result-multi-thread.png
new file mode 100644
index 0000000..c5d7e16
Binary files /dev/null and b/result-multi-thread.png differ
diff --git a/result-single-thread.png b/result-single-thread.png
new file mode 100644
index 0000000..748b232
Binary files /dev/null and b/result-single-thread.png differ
diff --git a/results.png b/results.png
deleted file mode 100644
index 7dea0a5..0000000
Binary files a/results.png and /dev/null differ
diff --git a/yarn.lock b/yarn.lock
index 1a3b127..462511e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -417,14 +417,14 @@ __metadata:
languageName: node
linkType: hard
-"@blueprintjs/icons@npm:4.6.3":
- version: 4.6.3
- resolution: "@blueprintjs/icons@npm:4.6.3"
+"@blueprintjs/icons@npm:4.16.0":
+ version: 4.16.0
+ resolution: "@blueprintjs/icons@npm:4.16.0"
dependencies:
change-case: "npm:^4.1.2"
- classnames: "npm:^2.3.2"
- tslib: "npm:~2.3.1"
- checksum: 10c0/f8e29d6ac8afb94fef79d100eb6e074b1b3b2f6e0d3f44107ddfd539a2f7c3c2e9b40f726ff829bd17e5477fecea77e61c63118e30f54a68a55c0c29b4414481
+ classnames: "npm:^2.3.1"
+ tslib: "npm:~2.5.0"
+ checksum: 10c0/12d7bd545966058f86c2f5b30c7d3758182a4d351af2c406bb0533f0fe78b14ed3cd1cf6c3c5b832e00f59e8dafe646ab2194d8a1e1e7425cf4719e34c7c9613
languageName: node
linkType: hard
@@ -633,16 +633,16 @@ __metadata:
languageName: node
linkType: hard
-"@floating-ui/react-dom-interactions@npm:0.10.1":
- version: 0.10.1
- resolution: "@floating-ui/react-dom-interactions@npm:0.10.1"
+"@floating-ui/react-dom-interactions@npm:0.10.3":
+ version: 0.10.3
+ resolution: "@floating-ui/react-dom-interactions@npm:0.10.3"
dependencies:
"@floating-ui/react-dom": "npm:^1.0.0"
aria-hidden: "npm:^1.1.3"
peerDependencies:
react: ">=16.8.0"
react-dom: ">=16.8.0"
- checksum: 10c0/8780915a37b338a21f88359a0b14b54fd50cd63b77e1a24ae6cd3689790ca07cdc06b675cf066de52da8b17dc00fbfabb967e5446cb9dd1d64b9ac68f4d899c5
+ checksum: 10c0/01e4dbb93bde171bea173fe4d1690f1945889931df8c8e4dc0b64c3591c1c2ab169b3eee6b1e640778d3fafe12fa7b25b463ffe8624101c9f4c75280f2627254
languageName: node
linkType: hard
@@ -665,26 +665,26 @@ __metadata:
languageName: node
linkType: hard
-"@happy-dom/global-registrator@npm:12.10.3":
- version: 12.10.3
- resolution: "@happy-dom/global-registrator@npm:12.10.3"
+"@happy-dom/global-registrator@npm:13.6.2":
+ version: 13.6.2
+ resolution: "@happy-dom/global-registrator@npm:13.6.2"
dependencies:
- happy-dom: "npm:12.10.3"
- checksum: 10c0/974fc27227a5f05a19ba32743ee4a4c985afa05e8290fab779c7acd22bff06b65bb53709fd7fd2405750c52f9d8cbe8fe727297f5cb5073541d81cba62313605
+ happy-dom: "npm:^13.6.2"
+ checksum: 10c0/5e075b583988a2c0f7c78fc00d6a9a2adfe25010b070ce1d2dfd57138a83ff6fcc077849c715a0bf48b1509f0412eddf6105ec7326d58df00687db145dbd50af
languageName: node
linkType: hard
-"@happy-dom/jest-environment@npm:12.0.1":
- version: 12.0.1
- resolution: "@happy-dom/jest-environment@npm:12.0.1"
+"@happy-dom/jest-environment@npm:13.6.2":
+ version: 13.6.2
+ resolution: "@happy-dom/jest-environment@npm:13.6.2"
dependencies:
"@jest/environment": "npm:^29.4.0"
"@jest/fake-timers": "npm:^29.4.0"
"@jest/types": "npm:^29.4.0"
- happy-dom: "npm:12.0.1"
+ happy-dom: "npm:^13.6.2"
jest-mock: "npm:^29.4.0"
jest-util: "npm:^29.4.0"
- checksum: 10c0/643066f5e854b5f368d63d0441aa644af0c1150ea6a7d83f0e82470bec40f3a4e43a4c9577bdab53f1caeae475ba82551eb19af7722207839a3ffb434bfd9d48
+ checksum: 10c0/e0e8af3b4e1100bc72584cfb43f35f3d5cd0b5a07da7723b7f3e4564a48b117e2e136b45db5365efb761bbe9023bf2a3113a287ae61bb39d54c17ca30c3f4b1f
languageName: node
linkType: hard
@@ -1004,6 +1004,24 @@ __metadata:
languageName: node
linkType: hard
+"@ljharb/resumer@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "@ljharb/resumer@npm:0.1.2"
+ dependencies:
+ "@ljharb/through": "npm:^2.3.12"
+ checksum: 10c0/a350fc449a4796d8d89c8ab8ddd34569fabd11a6b9e9df7b65126ca41f0c4cca27f952f080856ec91d9e8ea496b105bab4c888b8c222bfa185a56ae831433496
+ languageName: node
+ linkType: hard
+
+"@ljharb/through@npm:^2.3.12":
+ version: 2.3.12
+ resolution: "@ljharb/through@npm:2.3.12"
+ dependencies:
+ call-bind: "npm:^1.0.5"
+ checksum: 10c0/7560aaef7b6ef88c16783ffde37278e2177c7f0f5427400059a8a7687b144dc711bf5b2347ab27e858a29f25e4b868d77c915c9614bc399b82b8123430614653
+ languageName: node
+ linkType: hard
+
"@motionone/animation@npm:^10.13.1":
version: 10.17.0
resolution: "@motionone/animation@npm:10.17.0"
@@ -1196,6 +1214,15 @@ __metadata:
languageName: node
linkType: hard
+"@sinonjs/commons@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@sinonjs/commons@npm:2.0.0"
+ dependencies:
+ type-detect: "npm:4.0.8"
+ checksum: 10c0/babe3fdfc7dfb810f6918f2ae055032a1c7c18910595f1c6bfda87bb1737c1a57268d4ca78c3d8ad2fa4aae99ff79796fad76be735a5a38ab763c0b3cfad1ae7
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^3.0.0":
version: 3.0.1
resolution: "@sinonjs/commons@npm:3.0.1"
@@ -1214,9 +1241,36 @@ __metadata:
languageName: node
linkType: hard
-"@testing-library/dom@npm:^8.5.0":
- version: 8.20.1
- resolution: "@testing-library/dom@npm:8.20.1"
+"@sinonjs/fake-timers@npm:^11.2.2":
+ version: 11.2.2
+ resolution: "@sinonjs/fake-timers@npm:11.2.2"
+ dependencies:
+ "@sinonjs/commons": "npm:^3.0.0"
+ checksum: 10c0/a4218efa6fdafda622d02d4c0a6ab7df3641cb038bb0b14f0a3ee56f50c95aab4f1ab2d7798ce928b40c6fc1839465a558c9393a77e4dca879e1b2f8d60d8136
+ languageName: node
+ linkType: hard
+
+"@sinonjs/samsam@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "@sinonjs/samsam@npm:8.0.0"
+ dependencies:
+ "@sinonjs/commons": "npm:^2.0.0"
+ lodash.get: "npm:^4.4.2"
+ type-detect: "npm:^4.0.8"
+ checksum: 10c0/c1654ad72ecd9efd4a57d756c492c1c17a197c3138da57b75ba1729562001ed1b3b9c656cce1bd1d91640bc86eb4185a72eced528d176fff09a3a01de28cdcc6
+ languageName: node
+ linkType: hard
+
+"@sinonjs/text-encoding@npm:^0.7.2":
+ version: 0.7.2
+ resolution: "@sinonjs/text-encoding@npm:0.7.2"
+ checksum: 10c0/583a45bf3643169e313ff9d4395aff28b0c4f330d3697e252c3effc13d4303ee30f83df542732c1a68617720e4ea6fc08d48a3d9151c9b354a7fc356a8e9b162
+ languageName: node
+ linkType: hard
+
+"@testing-library/dom@npm:^9.0.0":
+ version: 9.3.4
+ resolution: "@testing-library/dom@npm:9.3.4"
dependencies:
"@babel/code-frame": "npm:^7.10.4"
"@babel/runtime": "npm:^7.12.5"
@@ -1226,30 +1280,30 @@ __metadata:
dom-accessibility-api: "npm:^0.5.9"
lz-string: "npm:^1.5.0"
pretty-format: "npm:^27.0.2"
- checksum: 10c0/614013756706467f2a7f3f693c18377048c210ec809884f0f9be866f7d865d075805ad15f5d100e8a699467fdde09085bf79e23a00ea0a6ab001d9583ef15e5d
+ checksum: 10c0/147da340e8199d7f98f3a4ad8aa22ed55b914b83957efa5eb22bfea021a979ebe5a5182afa9c1e5b7a5f99a7f6744a5a4d9325ae46ec3b33b5a15aed8750d794
languageName: node
linkType: hard
-"@testing-library/react@npm:13.4.0":
- version: 13.4.0
- resolution: "@testing-library/react@npm:13.4.0"
+"@testing-library/react@npm:14.2.1":
+ version: 14.2.1
+ resolution: "@testing-library/react@npm:14.2.1"
dependencies:
"@babel/runtime": "npm:^7.12.5"
- "@testing-library/dom": "npm:^8.5.0"
+ "@testing-library/dom": "npm:^9.0.0"
"@types/react-dom": "npm:^18.0.0"
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: 10c0/371bf982dd0deb27da004f368b06904353eac0f23f9c08ff0f24443c3f51a6d647009e366034417565d2484c40f1c7eff74413738abf4ec55209da9bd3253b0e
+ checksum: 10c0/83b35cf8bf5640f1b63b32223ebc75799dc1a8e034d819120b26838fba0b0ab10bdbe6ad07dd8ae8287365f2b0c52dc9892a6fa11bb24d3e63ad97dfb7f2f296
languageName: node
linkType: hard
-"@testing-library/user-event@npm:14.4.3":
- version: 14.4.3
- resolution: "@testing-library/user-event@npm:14.4.3"
+"@testing-library/user-event@npm:14.5.2":
+ version: 14.5.2
+ resolution: "@testing-library/user-event@npm:14.5.2"
peerDependencies:
"@testing-library/dom": ">=7.21.4"
- checksum: 10c0/28e1e4ed2fdaa9486e203c6789386be228e305abd3fa41f38c828af415fd4a4e80f4de88de0e502ff11c4b4926f221b874a2a45bcc8170d30714e12dad2c1bd0
+ checksum: 10c0/68a0c2aa28a3c8e6eb05cafee29705438d7d8a9427423ce5064d44f19c29e89b5636de46dd2f28620fb10abba75c67130185bbc3aa23ac1163a227a5f36641e1
languageName: node
linkType: hard
@@ -1370,10 +1424,10 @@ __metadata:
languageName: node
linkType: hard
-"@types/jasmine@npm:4.3.0":
- version: 4.3.0
- resolution: "@types/jasmine@npm:4.3.0"
- checksum: 10c0/6618059a559546e66537c085a2a75b096b2913f93deaf6b2c1586314836ecc0626968b395e0d2afb73f19869ae87a612e83648cbfd1c57ba28f1170e19d78978
+"@types/jasmine@npm:5.1.4":
+ version: 5.1.4
+ resolution: "@types/jasmine@npm:5.1.4"
+ checksum: 10c0/4b8d27182e62f5003db1f1f174a810ace704e411cbfd0bc41edbaacf307246aec1f9bd20812846700198fc881268834ffde1d5301f819b1ba7caac9662534ceb
languageName: node
linkType: hard
@@ -1443,57 +1497,57 @@ __metadata:
languageName: node
linkType: hard
-"@vitest/expect@npm:1.3.1":
- version: 1.3.1
- resolution: "@vitest/expect@npm:1.3.1"
+"@vitest/expect@npm:1.1.3":
+ version: 1.1.3
+ resolution: "@vitest/expect@npm:1.1.3"
dependencies:
- "@vitest/spy": "npm:1.3.1"
- "@vitest/utils": "npm:1.3.1"
+ "@vitest/spy": "npm:1.1.3"
+ "@vitest/utils": "npm:1.1.3"
chai: "npm:^4.3.10"
- checksum: 10c0/ea66a1e912d896a481a27631b68089b885af7e8ed62ba8aaa119c37a9beafe6c094fd672775a20e6e23460af66e294f9ca259e6e0562708d1b7724eaaf53c7bb
+ checksum: 10c0/fe5c9eade516a754efc26d4b6378a250f0c3b668fa15b3e6b6042190b64a65c4459b7fd67bfca72fb1fbf215feb838b68da4ab224a2a10137d8828ca6af70516
languageName: node
linkType: hard
-"@vitest/runner@npm:1.3.1":
- version: 1.3.1
- resolution: "@vitest/runner@npm:1.3.1"
+"@vitest/runner@npm:1.1.3":
+ version: 1.1.3
+ resolution: "@vitest/runner@npm:1.1.3"
dependencies:
- "@vitest/utils": "npm:1.3.1"
+ "@vitest/utils": "npm:1.1.3"
p-limit: "npm:^5.0.0"
pathe: "npm:^1.1.1"
- checksum: 10c0/d732de2368d2bc32cbc27f0bbc5477f6e36088ddfb873c036935a45b1b252ebc529b932cf5cd944eed9b692243acebef828f6d3218583cb8a6817a8270712050
+ checksum: 10c0/544455f7d7d3e04e8b6df18dfc8dec0ca5a90dd6c39ce72685de4383d4b2f77e907e6cf225df12af5127293344256056021d3d39b8c8960e943a518c30196801
languageName: node
linkType: hard
-"@vitest/snapshot@npm:1.3.1":
- version: 1.3.1
- resolution: "@vitest/snapshot@npm:1.3.1"
+"@vitest/snapshot@npm:1.1.3":
+ version: 1.1.3
+ resolution: "@vitest/snapshot@npm:1.1.3"
dependencies:
magic-string: "npm:^0.30.5"
pathe: "npm:^1.1.1"
pretty-format: "npm:^29.7.0"
- checksum: 10c0/cad0844270852c6d53c1ca6b7ca279034880d2140837ff245d5bd2376f4356cc924929c58dc69bcf9fad83ba934d4a06000c908971cc24b5d7a9ec2656b72d29
+ checksum: 10c0/bf841693c0210a12b96060e5bc5d3eeda36d6d96f3446c789ccaf22c68d13c41d868d0e76dddcd298cd7c08564f0bed75ad26fb2e94e4909d83f60b5ec9c8904
languageName: node
linkType: hard
-"@vitest/spy@npm:1.3.1":
- version: 1.3.1
- resolution: "@vitest/spy@npm:1.3.1"
+"@vitest/spy@npm:1.1.3":
+ version: 1.1.3
+ resolution: "@vitest/spy@npm:1.1.3"
dependencies:
tinyspy: "npm:^2.2.0"
- checksum: 10c0/efc42f679d2a51fc6583ca3136ccd47581cb27c923ed3cb0500f5dee9aac99b681bfdd400c16ef108f2e0761daa642bc190816a6411931a2aba99ebf8b213dd4
+ checksum: 10c0/d1692582afb7b665ec283723b15bbb7da95896cbfd7befaad9fdac6b64a8250fd918781263d43e8e10ee4874cdd18646224f6d993749c3751296dced8095a9ed
languageName: node
linkType: hard
-"@vitest/utils@npm:1.3.1":
- version: 1.3.1
- resolution: "@vitest/utils@npm:1.3.1"
+"@vitest/utils@npm:1.1.3":
+ version: 1.1.3
+ resolution: "@vitest/utils@npm:1.1.3"
dependencies:
diff-sequences: "npm:^29.6.3"
estree-walker: "npm:^3.0.3"
loupe: "npm:^2.3.7"
pretty-format: "npm:^29.7.0"
- checksum: 10c0/d604c8ad3b1aee30d4dcd889098f591407bfe18547ff96485b1d1ed54eff58219c756a9544a7fbd4e37886863abacd7a89a76334cb3ea7f84c3d496bb757db23
+ checksum: 10c0/86f48a7722927741449f40f33584dd9857629782f6661654225b5dd3c039d61cc60806c5dfe419bd793f2a231ba91fe708cbdec5d99b62a1f6f819b6f2121fc3
languageName: node
linkType: hard
@@ -1504,14 +1558,14 @@ __metadata:
languageName: node
linkType: hard
-"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.2":
+"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.1":
version: 8.3.2
resolution: "acorn-walk@npm:8.3.2"
checksum: 10c0/7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52
languageName: node
linkType: hard
-"acorn@npm:^8.11.3, acorn@npm:^8.4.1":
+"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.4.1":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
bin:
@@ -1638,7 +1692,7 @@ __metadata:
languageName: node
linkType: hard
-"array-buffer-byte-length@npm:^1.0.0":
+"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1":
version: 1.0.1
resolution: "array-buffer-byte-length@npm:1.0.1"
dependencies:
@@ -1648,6 +1702,34 @@ __metadata:
languageName: node
linkType: hard
+"array.prototype.every@npm:^1.1.5":
+ version: 1.1.5
+ resolution: "array.prototype.every@npm:1.1.5"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ define-properties: "npm:^1.2.0"
+ es-abstract: "npm:^1.22.1"
+ is-string: "npm:^1.0.7"
+ checksum: 10c0/390174d30706cc13629de9cb75a1d5776b1ce87038c3bfdf30fcefe82c0736e4dac7a11019518fa48c1ed6b96755220f5d5b358aa08126c1aa6a3dc1b2a6fecb
+ languageName: node
+ linkType: hard
+
+"arraybuffer.prototype.slice@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "arraybuffer.prototype.slice@npm:1.0.3"
+ dependencies:
+ array-buffer-byte-length: "npm:^1.0.1"
+ call-bind: "npm:^1.0.5"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.22.3"
+ es-errors: "npm:^1.2.1"
+ get-intrinsic: "npm:^1.2.3"
+ is-array-buffer: "npm:^3.0.4"
+ is-shared-array-buffer: "npm:^1.0.2"
+ checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36
+ languageName: node
+ linkType: hard
+
"assertion-error@npm:^1.1.0":
version: 1.1.0
resolution: "assertion-error@npm:1.1.0"
@@ -1655,7 +1737,7 @@ __metadata:
languageName: node
linkType: hard
-"available-typed-arrays@npm:^1.0.6":
+"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7":
version: 1.0.7
resolution: "available-typed-arrays@npm:1.0.7"
dependencies:
@@ -1825,13 +1907,13 @@ __metadata:
version: 0.0.0-use.local
resolution: "bun@workspace:benchmarks/bun"
dependencies:
- "@blueprintjs/icons": "npm:4.6.3"
- "@floating-ui/react-dom-interactions": "npm:0.10.1"
- "@happy-dom/global-registrator": "npm:12.10.3"
- clsx: "npm:1.2.1"
+ "@blueprintjs/icons": "npm:4.16.0"
+ "@floating-ui/react-dom-interactions": "npm:0.10.3"
+ "@happy-dom/global-registrator": "npm:13.6.2"
+ clsx: "npm:2.1.0"
date-fns: "npm:2.29.3"
framer-motion: "npm:7.5.3"
- happy-dom: "npm:12.0.1"
+ happy-dom: "npm:13.6.2"
react: "npm:18.2.0"
react-dom: "npm:18.2.0"
languageName: unknown
@@ -1864,7 +1946,7 @@ __metadata:
languageName: node
linkType: hard
-"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6":
+"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
version: 1.0.7
resolution: "call-bind@npm:1.0.7"
dependencies:
@@ -2019,7 +2101,7 @@ __metadata:
languageName: node
linkType: hard
-"classnames@npm:^2.3.2":
+"classnames@npm:^2.3.1":
version: 2.5.1
resolution: "classnames@npm:2.5.1"
checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69
@@ -2044,10 +2126,10 @@ __metadata:
languageName: node
linkType: hard
-"clsx@npm:1.2.1":
- version: 1.2.1
- resolution: "clsx@npm:1.2.1"
- checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27
+"clsx@npm:2.1.0":
+ version: 2.1.0
+ resolution: "clsx@npm:2.1.0"
+ checksum: 10c0/c09c00ad14f638366ca814097e6cab533dfa1972a358da5b557be487168acbb25b4c1395e89ffa842a8a61ba87a462d2b4885bc9d4f8410b598f3cb339599cdb
languageName: node
linkType: hard
@@ -2187,13 +2269,6 @@ __metadata:
languageName: node
linkType: hard
-"css.escape@npm:^1.5.1":
- version: 1.5.1
- resolution: "css.escape@npm:1.5.1"
- checksum: 10c0/5e09035e5bf6c2c422b40c6df2eb1529657a17df37fda5d0433d722609527ab98090baf25b13970ca754079a0f3161dd3dfc0e743563ded8cfa0749d861c1525
- languageName: node
- linkType: hard
-
"cssesc@npm:^3.0.0":
version: 3.0.0
resolution: "cssesc@npm:3.0.0"
@@ -2259,7 +2334,7 @@ __metadata:
languageName: node
linkType: hard
-"deep-equal@npm:^2.0.5":
+"deep-equal@npm:^2.0.5, deep-equal@npm:^2.2.3":
version: 2.2.3
resolution: "deep-equal@npm:2.2.3"
dependencies:
@@ -2292,7 +2367,7 @@ __metadata:
languageName: node
linkType: hard
-"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4":
+"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4":
version: 1.1.4
resolution: "define-data-property@npm:1.1.4"
dependencies:
@@ -2303,7 +2378,7 @@ __metadata:
languageName: node
linkType: hard
-"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1":
+"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1":
version: 1.2.1
resolution: "define-properties@npm:1.2.1"
dependencies:
@@ -2314,6 +2389,13 @@ __metadata:
languageName: node
linkType: hard
+"defined@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "defined@npm:1.0.1"
+ checksum: 10c0/357212c95fd69c3b431f4766440f1b10a8362d2663b86e3d7c139fe7fc98a1d5a4996b8b55ca62e97fb882f9887374b76944d29f9650a07993d98e7be86a804a
+ languageName: node
+ linkType: hard
+
"detect-newline@npm:^3.0.0":
version: 3.1.0
resolution: "detect-newline@npm:3.1.0"
@@ -2335,6 +2417,13 @@ __metadata:
languageName: node
linkType: hard
+"diff@npm:^5.1.0":
+ version: 5.2.0
+ resolution: "diff@npm:5.2.0"
+ checksum: 10c0/aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4
+ languageName: node
+ linkType: hard
+
"dom-accessibility-api@npm:^0.5.9":
version: 0.5.16
resolution: "dom-accessibility-api@npm:0.5.16"
@@ -2352,6 +2441,17 @@ __metadata:
languageName: node
linkType: hard
+"dotignore@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "dotignore@npm:0.1.2"
+ dependencies:
+ minimatch: "npm:^3.0.4"
+ bin:
+ ignored: bin/ignored
+ checksum: 10c0/71f25a507cbe88a7dbf07d5108bb0924af39c71a3c5fd83045fc42d5dc1605a23113ba29999b94d964555e6e6be2980caa8da3711cfa31a6b6d88c184b1ab181
+ languageName: node
+ linkType: hard
+
"eastasianwidth@npm:^0.2.0":
version: 0.2.0
resolution: "eastasianwidth@npm:0.2.0"
@@ -2433,6 +2533,55 @@ __metadata:
languageName: node
linkType: hard
+"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3":
+ version: 1.22.5
+ resolution: "es-abstract@npm:1.22.5"
+ dependencies:
+ array-buffer-byte-length: "npm:^1.0.1"
+ arraybuffer.prototype.slice: "npm:^1.0.3"
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.7"
+ es-define-property: "npm:^1.0.0"
+ es-errors: "npm:^1.3.0"
+ es-set-tostringtag: "npm:^2.0.3"
+ es-to-primitive: "npm:^1.2.1"
+ function.prototype.name: "npm:^1.1.6"
+ get-intrinsic: "npm:^1.2.4"
+ get-symbol-description: "npm:^1.0.2"
+ globalthis: "npm:^1.0.3"
+ gopd: "npm:^1.0.1"
+ has-property-descriptors: "npm:^1.0.2"
+ has-proto: "npm:^1.0.3"
+ has-symbols: "npm:^1.0.3"
+ hasown: "npm:^2.0.1"
+ internal-slot: "npm:^1.0.7"
+ is-array-buffer: "npm:^3.0.4"
+ is-callable: "npm:^1.2.7"
+ is-negative-zero: "npm:^2.0.3"
+ is-regex: "npm:^1.1.4"
+ is-shared-array-buffer: "npm:^1.0.3"
+ is-string: "npm:^1.0.7"
+ is-typed-array: "npm:^1.1.13"
+ is-weakref: "npm:^1.0.2"
+ object-inspect: "npm:^1.13.1"
+ object-keys: "npm:^1.1.1"
+ object.assign: "npm:^4.1.5"
+ regexp.prototype.flags: "npm:^1.5.2"
+ safe-array-concat: "npm:^1.1.0"
+ safe-regex-test: "npm:^1.0.3"
+ string.prototype.trim: "npm:^1.2.8"
+ string.prototype.trimend: "npm:^1.0.7"
+ string.prototype.trimstart: "npm:^1.0.7"
+ typed-array-buffer: "npm:^1.0.2"
+ typed-array-byte-length: "npm:^1.0.1"
+ typed-array-byte-offset: "npm:^1.0.2"
+ typed-array-length: "npm:^1.0.5"
+ unbox-primitive: "npm:^1.0.2"
+ which-typed-array: "npm:^1.1.14"
+ checksum: 10c0/4bca5a60f0dff6c0a5690d8e51374cfcb8760d5dbbb1069174b4d41461cf4e0c3e0c1993bccbc5aa0799ff078199f1bcde2122b8709e0d17c2beffafff01010a
+ languageName: node
+ linkType: hard
+
"es-define-property@npm:^1.0.0":
version: 1.0.0
resolution: "es-define-property@npm:1.0.0"
@@ -2442,7 +2591,7 @@ __metadata:
languageName: node
linkType: hard
-"es-errors@npm:^1.3.0":
+"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0":
version: 1.3.0
resolution: "es-errors@npm:1.3.0"
checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85
@@ -2466,6 +2615,28 @@ __metadata:
languageName: node
linkType: hard
+"es-set-tostringtag@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "es-set-tostringtag@npm:2.0.3"
+ dependencies:
+ get-intrinsic: "npm:^1.2.4"
+ has-tostringtag: "npm:^1.0.2"
+ hasown: "npm:^2.0.1"
+ checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a
+ languageName: node
+ linkType: hard
+
+"es-to-primitive@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "es-to-primitive@npm:1.2.1"
+ dependencies:
+ is-callable: "npm:^1.1.4"
+ is-date-object: "npm:^1.0.1"
+ is-symbol: "npm:^1.0.2"
+ checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1
+ languageName: node
+ linkType: hard
+
"esbuild@npm:^0.19.3":
version: 0.19.12
resolution: "esbuild@npm:0.19.12"
@@ -2789,6 +2960,18 @@ __metadata:
languageName: node
linkType: hard
+"function.prototype.name@npm:^1.1.6":
+ version: 1.1.6
+ resolution: "function.prototype.name@npm:1.1.6"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ define-properties: "npm:^1.2.0"
+ es-abstract: "npm:^1.22.1"
+ functions-have-names: "npm:^1.2.3"
+ checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b
+ languageName: node
+ linkType: hard
+
"functions-have-names@npm:^1.2.3":
version: 1.2.3
resolution: "functions-have-names@npm:1.2.3"
@@ -2860,6 +3043,17 @@ __metadata:
languageName: node
linkType: hard
+"get-symbol-description@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "get-symbol-description@npm:1.0.2"
+ dependencies:
+ call-bind: "npm:^1.0.5"
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.4"
+ checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc
+ languageName: node
+ linkType: hard
+
"glob-to-regexp@npm:^0.3.0":
version: 0.3.0
resolution: "glob-to-regexp@npm:0.3.0"
@@ -2882,7 +3076,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^7.1.3, glob@npm:^7.1.4":
+"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.3":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -2903,6 +3097,15 @@ __metadata:
languageName: node
linkType: hard
+"globalthis@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "globalthis@npm:1.0.3"
+ dependencies:
+ define-properties: "npm:^1.1.3"
+ checksum: 10c0/0db6e9af102a5254630351557ac15e6909bc7459d3e3f6b001e59fe784c96d31108818f032d9095739355a88467459e6488ff16584ee6250cd8c27dec05af4b0
+ languageName: node
+ linkType: hard
+
"gopd@npm:^1.0.1":
version: 1.0.1
resolution: "gopd@npm:1.0.1"
@@ -2919,31 +3122,14 @@ __metadata:
languageName: node
linkType: hard
-"happy-dom@npm:12.0.1":
- version: 12.0.1
- resolution: "happy-dom@npm:12.0.1"
+"happy-dom@npm:13.6.2, happy-dom@npm:^13.6.2":
+ version: 13.6.2
+ resolution: "happy-dom@npm:13.6.2"
dependencies:
- css.escape: "npm:^1.5.1"
entities: "npm:^4.5.0"
- iconv-lite: "npm:^0.6.3"
webidl-conversions: "npm:^7.0.0"
- whatwg-encoding: "npm:^2.0.0"
whatwg-mimetype: "npm:^3.0.0"
- checksum: 10c0/fa8da240a22f672fb2673acdf6ffdeb6f87667ee6b4d9e4a91908e3203a90fbb2f0da2f043ad78b53de1ff73fc4f64db7b5f7f2f76e27f277f2a9c481512e9d5
- languageName: node
- linkType: hard
-
-"happy-dom@npm:12.10.3":
- version: 12.10.3
- resolution: "happy-dom@npm:12.10.3"
- dependencies:
- css.escape: "npm:^1.5.1"
- entities: "npm:^4.5.0"
- iconv-lite: "npm:^0.6.3"
- webidl-conversions: "npm:^7.0.0"
- whatwg-encoding: "npm:^2.0.0"
- whatwg-mimetype: "npm:^3.0.0"
- checksum: 10c0/fbf8647e17c4af5c166d7c4b6963f4bbc9d1c279e94a4c77234b1fecca98c59989b894c7b186f5107e1062d40ffd84f12350b757f51330a5fc1c5228eb199517
+ checksum: 10c0/0e76ab3948c454809ea3f9ca02e492881ab0c52a0e5c9e774c6a8885ba7ff03905777a043306e949fc4bb57159ee15d51231be587c7600096e1a9d396877d61c
languageName: node
linkType: hard
@@ -2954,13 +3140,23 @@ __metadata:
languageName: node
linkType: hard
-"has-bigints@npm:^1.0.1":
+"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2":
version: 1.0.2
resolution: "has-bigints@npm:1.0.2"
checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b
languageName: node
linkType: hard
+"has-dynamic-import@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "has-dynamic-import@npm:2.1.0"
+ dependencies:
+ call-bind: "npm:^1.0.5"
+ get-intrinsic: "npm:^1.2.2"
+ checksum: 10c0/28faf3ae3538a198202c9e5b6c9a1071f0a16df2ff748440525fd30f6485e8532a4d205e2c21f4013d6663730f9d3b44dcae1519d20f946a223b3763118db653
+ languageName: node
+ linkType: hard
+
"has-flag@npm:^3.0.0":
version: 3.0.0
resolution: "has-flag@npm:3.0.0"
@@ -2984,7 +3180,7 @@ __metadata:
languageName: node
linkType: hard
-"has-proto@npm:^1.0.1":
+"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3":
version: 1.0.3
resolution: "has-proto@npm:1.0.3"
checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205
@@ -2998,7 +3194,7 @@ __metadata:
languageName: node
linkType: hard
-"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1":
+"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2":
version: 1.0.2
resolution: "has-tostringtag@npm:1.0.2"
dependencies:
@@ -3007,7 +3203,7 @@ __metadata:
languageName: node
linkType: hard
-"hasown@npm:^2.0.0":
+"hasown@npm:^2.0.0, hasown@npm:^2.0.1":
version: 2.0.1
resolution: "hasown@npm:2.0.1"
dependencies:
@@ -3081,7 +3277,7 @@ __metadata:
languageName: node
linkType: hard
-"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
+"iconv-lite@npm:^0.6.2":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
dependencies:
@@ -3151,14 +3347,14 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2":
+"inherits@npm:2, inherits@npm:^2.0.4":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
languageName: node
linkType: hard
-"internal-slot@npm:^1.0.4":
+"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7":
version: 1.0.7
resolution: "internal-slot@npm:1.0.7"
dependencies:
@@ -3225,7 +3421,7 @@ __metadata:
languageName: node
linkType: hard
-"is-callable@npm:^1.1.3":
+"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7":
version: 1.2.7
resolution: "is-callable@npm:1.2.7"
checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f
@@ -3241,7 +3437,7 @@ __metadata:
languageName: node
linkType: hard
-"is-date-object@npm:^1.0.5":
+"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5":
version: 1.0.5
resolution: "is-date-object@npm:1.0.5"
dependencies:
@@ -3278,6 +3474,13 @@ __metadata:
languageName: node
linkType: hard
+"is-negative-zero@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-negative-zero@npm:2.0.3"
+ checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e
+ languageName: node
+ linkType: hard
+
"is-number-object@npm:^1.0.4":
version: 1.0.7
resolution: "is-number-object@npm:1.0.7"
@@ -3320,6 +3523,15 @@ __metadata:
languageName: node
linkType: hard
+"is-shared-array-buffer@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "is-shared-array-buffer@npm:1.0.3"
+ dependencies:
+ call-bind: "npm:^1.0.7"
+ checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7
+ languageName: node
+ linkType: hard
+
"is-stream@npm:^2.0.0":
version: 2.0.1
resolution: "is-stream@npm:2.0.1"
@@ -3343,7 +3555,7 @@ __metadata:
languageName: node
linkType: hard
-"is-symbol@npm:^1.0.3":
+"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3":
version: 1.0.4
resolution: "is-symbol@npm:1.0.4"
dependencies:
@@ -3352,6 +3564,15 @@ __metadata:
languageName: node
linkType: hard
+"is-typed-array@npm:^1.1.13":
+ version: 1.1.13
+ resolution: "is-typed-array@npm:1.1.13"
+ dependencies:
+ which-typed-array: "npm:^1.1.14"
+ checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca
+ languageName: node
+ linkType: hard
+
"is-weakmap@npm:^2.0.1":
version: 2.0.1
resolution: "is-weakmap@npm:2.0.1"
@@ -3359,6 +3580,15 @@ __metadata:
languageName: node
linkType: hard
+"is-weakref@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "is-weakref@npm:1.0.2"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1
+ languageName: node
+ linkType: hard
+
"is-weakset@npm:^2.0.1":
version: 2.0.2
resolution: "is-weakset@npm:2.0.2"
@@ -3491,14 +3721,14 @@ __metadata:
version: 0.0.0-use.local
resolution: "jasmine@workspace:benchmarks/jasmine"
dependencies:
- "@blueprintjs/icons": "npm:4.6.3"
- "@floating-ui/react-dom-interactions": "npm:0.10.1"
- "@types/jasmine": "npm:4.3.0"
- clsx: "npm:1.2.1"
+ "@blueprintjs/icons": "npm:4.16.0"
+ "@floating-ui/react-dom-interactions": "npm:0.10.3"
+ "@types/jasmine": "npm:5.1.4"
+ clsx: "npm:2.1.0"
css-modules-require-hook: "npm:4.2.3"
date-fns: "npm:2.29.3"
framer-motion: "npm:7.5.3"
- happy-dom: "npm:12.0.1"
+ happy-dom: "npm:13.6.2"
jasmine: "npm:5.1.0"
react: "npm:18.2.0"
react-dom: "npm:18.2.0"
@@ -3949,12 +4179,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "jest@workspace:benchmarks/jest"
dependencies:
- "@blueprintjs/icons": "npm:4.6.3"
- "@floating-ui/react-dom-interactions": "npm:0.10.1"
- "@happy-dom/jest-environment": "npm:12.0.1"
- "@testing-library/react": "npm:13.4.0"
- "@testing-library/user-event": "npm:14.4.3"
- clsx: "npm:1.2.1"
+ "@blueprintjs/icons": "npm:4.16.0"
+ "@floating-ui/react-dom-interactions": "npm:0.10.3"
+ "@happy-dom/jest-environment": "npm:13.6.2"
+ "@testing-library/react": "npm:14.2.1"
+ "@testing-library/user-event": "npm:14.5.2"
+ clsx: "npm:2.1.0"
date-fns: "npm:2.29.3"
framer-motion: "npm:7.5.3"
identity-obj-proxy: "npm:3.0.0"
@@ -3962,7 +4192,7 @@ __metadata:
react: "npm:18.2.0"
react-dom: "npm:18.2.0"
ts-jest: "npm:29.1.2"
- typescript: "npm:4.8.4"
+ typescript: "npm:5.3.3"
languageName: unknown
linkType: soft
@@ -3973,13 +4203,6 @@ __metadata:
languageName: node
linkType: hard
-"js-tokens@npm:^8.0.2":
- version: 8.0.3
- resolution: "js-tokens@npm:8.0.3"
- checksum: 10c0/b50ba7d926b087ad31949d8155c7bc84374e0785019b17bdddeb2c4f98f5dea04ba464651fe23a8be4f7d15f50d06ce8bb536087b24ce3ebfbaea4a1dc5869f0
- languageName: node
- linkType: hard
-
"js-yaml@npm:^3.13.1":
version: 3.14.1
resolution: "js-yaml@npm:3.14.1"
@@ -4040,6 +4263,13 @@ __metadata:
languageName: node
linkType: hard
+"just-extend@npm:^6.2.0":
+ version: 6.2.0
+ resolution: "just-extend@npm:6.2.0"
+ checksum: 10c0/d41cbdb6d85b986d4deaf2144d81d4f7266cd408fc95189d046d63f610c2dc486b141aeb6ef319c2d76fe904d45a6bb31f19b098ff0427c35688e0c383fc0511
+ languageName: node
+ linkType: hard
+
"kleur@npm:^3.0.3":
version: 3.0.3
resolution: "kleur@npm:3.0.3"
@@ -4092,6 +4322,13 @@ __metadata:
languageName: node
linkType: hard
+"lodash.get@npm:^4.4.2":
+ version: 4.4.2
+ resolution: "lodash.get@npm:4.4.2"
+ checksum: 10c0/48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e
+ languageName: node
+ linkType: hard
+
"lodash.memoize@npm:4.x":
version: 4.1.2
resolution: "lodash.memoize@npm:4.1.2"
@@ -4271,7 +4508,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:^1.2.0":
+"minimist@npm:^1.2.0, minimist@npm:^1.2.8":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6
@@ -4383,6 +4620,20 @@ __metadata:
languageName: node
linkType: hard
+"mock-property@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "mock-property@npm:1.0.3"
+ dependencies:
+ define-data-property: "npm:^1.1.1"
+ functions-have-names: "npm:^1.2.3"
+ gopd: "npm:^1.0.1"
+ has-property-descriptors: "npm:^1.0.0"
+ hasown: "npm:^2.0.0"
+ isarray: "npm:^2.0.5"
+ checksum: 10c0/faab39ef1f90fe52367f5173bf8aa2d795fb13998eea2f028f94d4d822809fdfe880627f79c39b759a265697fa88b659bef0fd9593926db6c265f3d9566bd89b
+ languageName: node
+ linkType: hard
+
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -4420,6 +4671,19 @@ __metadata:
languageName: node
linkType: hard
+"nise@npm:^5.1.5":
+ version: 5.1.9
+ resolution: "nise@npm:5.1.9"
+ dependencies:
+ "@sinonjs/commons": "npm:^3.0.0"
+ "@sinonjs/fake-timers": "npm:^11.2.2"
+ "@sinonjs/text-encoding": "npm:^0.7.2"
+ just-extend: "npm:^6.2.0"
+ path-to-regexp: "npm:^6.2.1"
+ checksum: 10c0/a44318e6de738b34a1f51b4b478f97f5b40a5a27175be4bf13f6e5b8e67aa70d0b3f51c77a966d6617fccdc3b436c675a89be57424833e6d8a290367faa66b28
+ languageName: node
+ linkType: hard
+
"no-case@npm:^3.0.4":
version: 3.0.4
resolution: "no-case@npm:3.0.4"
@@ -4531,7 +4795,7 @@ __metadata:
languageName: node
linkType: hard
-"object.assign@npm:^4.1.4":
+"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5":
version: 4.1.5
resolution: "object.assign@npm:4.1.5"
dependencies:
@@ -4709,6 +4973,13 @@ __metadata:
languageName: node
linkType: hard
+"path-to-regexp@npm:^6.2.1":
+ version: 6.2.1
+ resolution: "path-to-regexp@npm:6.2.1"
+ checksum: 10c0/7a73811ca703e5c199e5b50b9649ab8f6f7b458a37f7dff9ea338815203f5b1f95fe8cb24d4fdfe2eab5d67ce43562d92534330babca35cdf3231f966adb9360
+ languageName: node
+ linkType: hard
+
"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2":
version: 1.1.2
resolution: "pathe@npm:1.1.2"
@@ -4955,7 +5226,7 @@ __metadata:
languageName: node
linkType: hard
-"regexp.prototype.flags@npm:^1.5.1":
+"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2":
version: 1.5.2
resolution: "regexp.prototype.flags@npm:1.5.2"
dependencies:
@@ -5010,6 +5281,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@npm:^2.0.0-next.5":
+ version: 2.0.0-next.5
+ resolution: "resolve@npm:2.0.0-next.5"
+ dependencies:
+ is-core-module: "npm:^2.13.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a
+ languageName: node
+ linkType: hard
+
"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin":
version: 1.22.8
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
@@ -5023,6 +5307,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin":
+ version: 2.0.0-next.5
+ resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d"
+ dependencies:
+ is-core-module: "npm:^2.13.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355
+ languageName: node
+ linkType: hard
+
"retry@npm:^0.12.0":
version: 0.12.0
resolution: "retry@npm:0.12.0"
@@ -5084,6 +5381,29 @@ __metadata:
languageName: node
linkType: hard
+"safe-array-concat@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "safe-array-concat@npm:1.1.0"
+ dependencies:
+ call-bind: "npm:^1.0.5"
+ get-intrinsic: "npm:^1.2.2"
+ has-symbols: "npm:^1.0.3"
+ isarray: "npm:^2.0.5"
+ checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af
+ languageName: node
+ linkType: hard
+
+"safe-regex-test@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "safe-regex-test@npm:1.0.3"
+ dependencies:
+ call-bind: "npm:^1.0.6"
+ es-errors: "npm:^1.3.0"
+ is-regex: "npm:^1.1.4"
+ checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603
+ languageName: node
+ linkType: hard
+
"safer-buffer@npm:>= 2.1.2 < 3.0.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
@@ -5213,6 +5533,20 @@ __metadata:
languageName: node
linkType: hard
+"sinon@npm:17.0.1":
+ version: 17.0.1
+ resolution: "sinon@npm:17.0.1"
+ dependencies:
+ "@sinonjs/commons": "npm:^3.0.0"
+ "@sinonjs/fake-timers": "npm:^11.2.2"
+ "@sinonjs/samsam": "npm:^8.0.0"
+ diff: "npm:^5.1.0"
+ nise: "npm:^5.1.5"
+ supports-color: "npm:^7.2.0"
+ checksum: 10c0/63e678bd58a959ebf69ddadb5410e9c31bd161b848b9dbec5f34f7e1485a8681810cd27d37bde072b68915b41b498f30bb5fb890c73e7a51dc281d1b1d573cfb
+ languageName: node
+ linkType: hard
+
"sisteransi@npm:^1.0.5":
version: 1.0.5
resolution: "sisteransi@npm:1.0.5"
@@ -5376,6 +5710,39 @@ __metadata:
languageName: node
linkType: hard
+"string.prototype.trim@npm:^1.2.8":
+ version: 1.2.8
+ resolution: "string.prototype.trim@npm:1.2.8"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ define-properties: "npm:^1.2.0"
+ es-abstract: "npm:^1.22.1"
+ checksum: 10c0/4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34
+ languageName: node
+ linkType: hard
+
+"string.prototype.trimend@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "string.prototype.trimend@npm:1.0.7"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ define-properties: "npm:^1.2.0"
+ es-abstract: "npm:^1.22.1"
+ checksum: 10c0/53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57
+ languageName: node
+ linkType: hard
+
+"string.prototype.trimstart@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "string.prototype.trimstart@npm:1.0.7"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ define-properties: "npm:^1.2.0"
+ es-abstract: "npm:^1.22.1"
+ checksum: 10c0/0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f
+ languageName: node
+ linkType: hard
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
version: 6.0.1
resolution: "strip-ansi@npm:6.0.1"
@@ -5422,12 +5789,12 @@ __metadata:
languageName: node
linkType: hard
-"strip-literal@npm:^2.0.0":
- version: 2.0.0
- resolution: "strip-literal@npm:2.0.0"
+"strip-literal@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "strip-literal@npm:1.3.0"
dependencies:
- js-tokens: "npm:^8.0.2"
- checksum: 10c0/63a6e4224ac7088ff93fd19fc0f6882705020da2f0767dbbecb929cbf9d49022e72350420f47be635866823608da9b9a5caf34f518004721895b6031199fc3c8
+ acorn: "npm:^8.10.0"
+ checksum: 10c0/3c0c9ee41eb346e827eede61ef288457f53df30e3e6ff8b94fa81b636933b0c13ca4ea5c97d00a10d72d04be326da99ac819f8769f0c6407ba8177c98344a916
languageName: node
linkType: hard
@@ -5450,7 +5817,7 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^7.1.0":
+"supports-color@npm:^7.1.0, supports-color@npm:^7.2.0":
version: 7.2.0
resolution: "supports-color@npm:7.2.0"
dependencies:
@@ -5475,6 +5842,77 @@ __metadata:
languageName: node
linkType: hard
+"tape-decorate@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "tape-decorate@npm:1.0.2"
+ checksum: 10c0/ce72b3a2d249f4b9d77d8ca910c8aafc95e77a02d76e85c5349554af0a7e2c898151016e9d418ac28cd48fcd544e50360f0e15c20b5dde8b6fa8f0d4f71f639c
+ languageName: node
+ linkType: hard
+
+"tape-describe@npm:1.0.3":
+ version: 1.0.3
+ resolution: "tape-describe@npm:1.0.3"
+ dependencies:
+ tape-decorate: "npm:^1.0.2"
+ checksum: 10c0/3bd38626ce10002e24ea788fb03f93e1c81a91727400c24c2622c9c873130a64947201c70929c695ac7f4fcbfb78cd3d2d722b11096352d7a8d344dfa2b4135a
+ languageName: node
+ linkType: hard
+
+"tape@npm:5.7.5":
+ version: 5.7.5
+ resolution: "tape@npm:5.7.5"
+ dependencies:
+ "@ljharb/resumer": "npm:^0.1.2"
+ "@ljharb/through": "npm:^2.3.12"
+ array.prototype.every: "npm:^1.1.5"
+ call-bind: "npm:^1.0.7"
+ deep-equal: "npm:^2.2.3"
+ defined: "npm:^1.0.1"
+ dotignore: "npm:^0.1.2"
+ for-each: "npm:^0.3.3"
+ get-package-type: "npm:^0.1.0"
+ glob: "npm:^7.2.3"
+ has-dynamic-import: "npm:^2.1.0"
+ hasown: "npm:^2.0.1"
+ inherits: "npm:^2.0.4"
+ is-regex: "npm:^1.1.4"
+ minimist: "npm:^1.2.8"
+ mock-property: "npm:^1.0.3"
+ object-inspect: "npm:^1.13.1"
+ object-is: "npm:^1.1.5"
+ object-keys: "npm:^1.1.1"
+ object.assign: "npm:^4.1.5"
+ resolve: "npm:^2.0.0-next.5"
+ string.prototype.trim: "npm:^1.2.8"
+ bin:
+ tape: bin/tape
+ checksum: 10c0/59a883ba3b8ceb62f78cf3f254d510f6434b7a7020007713e557c9be74c44242cb37e5921389022f3d3edb97482e5de1b6bcaf60f5959cc1eec878e45c841b49
+ languageName: node
+ linkType: hard
+
+"tape@workspace:benchmarks/tape":
+ version: 0.0.0-use.local
+ resolution: "tape@workspace:benchmarks/tape"
+ dependencies:
+ "@blueprintjs/icons": "npm:4.16.0"
+ "@floating-ui/react-dom-interactions": "npm:0.10.3"
+ "@testing-library/react": "npm:14.2.1"
+ "@testing-library/user-event": "npm:14.5.2"
+ clsx: "npm:2.1.0"
+ css-modules-require-hook: "npm:4.2.3"
+ date-fns: "npm:2.29.3"
+ framer-motion: "npm:7.5.3"
+ happy-dom: "npm:13.6.2"
+ react: "npm:18.2.0"
+ react-dom: "npm:18.2.0"
+ sinon: "npm:17.0.1"
+ tape: "npm:5.7.5"
+ tape-describe: "npm:1.0.3"
+ ts-node: "npm:10.9.2"
+ typescript: "npm:5.3.3"
+ languageName: unknown
+ linkType: soft
+
"tar@npm:^6.1.11, tar@npm:^6.1.2":
version: 6.2.0
resolution: "tar@npm:6.2.0"
@@ -5513,7 +5951,7 @@ __metadata:
languageName: node
linkType: hard
-"tinypool@npm:^0.8.2":
+"tinypool@npm:^0.8.1":
version: 0.8.2
resolution: "tinypool@npm:0.8.2"
checksum: 10c0/8998626614172fc37c394e9a14e701dc437727fc6525488a4d4fd42044a4b2b59d6f076d750cbf5c699f79c58dd4e40599ab09e2f1ae0df4b23516b98c9c3055
@@ -5635,10 +6073,10 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:~2.3.1":
- version: 2.3.1
- resolution: "tslib@npm:2.3.1"
- checksum: 10c0/4efd888895bdb3b987086b2b7793ad1013566f882b0eb7a328384e5ecc0d71cafb16bbeab3196200cbf7f01a73ccc25acc2f131d4ea6ee959be7436a8a306482
+"tslib@npm:~2.5.0":
+ version: 2.5.3
+ resolution: "tslib@npm:2.5.3"
+ checksum: 10c0/4cb1817d34fae5b27d146e6c4a468d4155097d95c1335d0bc9690f11f33e63844806bf4ed6d97c30c72b8d85261b66cbbe16d871d9c594ac05701ec83e62a607
languageName: node
linkType: hard
@@ -5656,23 +6094,75 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:4.8.4":
- version: 4.8.4
- resolution: "typescript@npm:4.8.4"
+"typed-array-buffer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "typed-array-buffer@npm:1.0.2"
+ dependencies:
+ call-bind: "npm:^1.0.7"
+ es-errors: "npm:^1.3.0"
+ is-typed-array: "npm:^1.1.13"
+ checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-length@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "typed-array-byte-length@npm:1.0.1"
+ dependencies:
+ call-bind: "npm:^1.0.7"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.0.1"
+ has-proto: "npm:^1.0.3"
+ is-typed-array: "npm:^1.1.13"
+ checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-offset@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "typed-array-byte-offset@npm:1.0.2"
+ dependencies:
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.7"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.0.1"
+ has-proto: "npm:^1.0.3"
+ is-typed-array: "npm:^1.1.13"
+ checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f
+ languageName: node
+ linkType: hard
+
+"typed-array-length@npm:^1.0.5":
+ version: 1.0.5
+ resolution: "typed-array-length@npm:1.0.5"
+ dependencies:
+ call-bind: "npm:^1.0.7"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.0.1"
+ has-proto: "npm:^1.0.3"
+ is-typed-array: "npm:^1.1.13"
+ possible-typed-array-names: "npm:^1.0.0"
+ checksum: 10c0/5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5
+ languageName: node
+ linkType: hard
+
+"typescript@npm:5.3.3":
+ version: 5.3.3
+ resolution: "typescript@npm:5.3.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/663bf455b21ac024e719bb8c6a07bcaaa027a9943abfb58a694b59789e7d08578badb5556170267ad480e31786b8b4c8ab3c9c0e597d3b8df39af800e43c6ed5
+ checksum: 10c0/e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A4.8.4#optional!builtin":
- version: 4.8.4
- resolution: "typescript@patch:typescript@npm%3A4.8.4#optional!builtin::version=4.8.4&hash=1a91c8"
+"typescript@patch:typescript@npm%3A5.3.3#optional!builtin":
+ version: 5.3.3
+ resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/eecab597a5a8c6e7f14804f1447cfce02e214e32c02efcfe5219c94290e3d572490e8a0d8033fd075ac429d35babf85182541a50c50bfb0c21df33c59fb9bf82
+ checksum: 10c0/1d0a5f4ce496c42caa9a30e659c467c5686eae15d54b027ee7866744952547f1be1262f2d40de911618c242b510029d51d43ff605dba8fb740ec85ca2d3f9500
languageName: node
linkType: hard
@@ -5683,6 +6173,18 @@ __metadata:
languageName: node
linkType: hard
+"unbox-primitive@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "unbox-primitive@npm:1.0.2"
+ dependencies:
+ call-bind: "npm:^1.0.2"
+ has-bigints: "npm:^1.0.2"
+ has-symbols: "npm:^1.0.3"
+ which-boxed-primitive: "npm:^1.0.2"
+ checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66
+ languageName: node
+ linkType: hard
+
"undici-types@npm:~5.26.4":
version: 5.26.5
resolution: "undici-types@npm:5.26.5"
@@ -5758,9 +6260,9 @@ __metadata:
languageName: node
linkType: hard
-"vite-node@npm:1.3.1":
- version: 1.3.1
- resolution: "vite-node@npm:1.3.1"
+"vite-node@npm:1.1.3":
+ version: 1.1.3
+ resolution: "vite-node@npm:1.1.3"
dependencies:
cac: "npm:^6.7.14"
debug: "npm:^4.3.4"
@@ -5769,13 +6271,13 @@ __metadata:
vite: "npm:^5.0.0"
bin:
vite-node: vite-node.mjs
- checksum: 10c0/b50665ef224f3527f856ab88a0cfabab36dd6e2dd1e3edca8f8f25d5d33754e1050495472c2c82147d0dcf7c5280971dae2f37a531c10f3941d8d3344e34ce0b
+ checksum: 10c0/011346c156c4df7cb49fc1de357ff7dc6316011faeb00855aca7ecab24ed19aac4c03c0bc921923d13c37870f2954c3fcbf975c5eeee3a03d675831a60556dfb
languageName: node
linkType: hard
"vite@npm:^5.0.0":
- version: 5.1.3
- resolution: "vite@npm:5.1.3"
+ version: 5.1.4
+ resolution: "vite@npm:5.1.4"
dependencies:
esbuild: "npm:^0.19.3"
fsevents: "npm:~2.3.3"
@@ -5809,20 +6311,21 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: 10c0/d3b19607d736de60b660f7daf4c0f86589edcbbc1fcb09f8aa36630f99518cc8a063062bb952899b8ccaed62f1314fac22c1df492dd035de3c65998ab27e2d2a
+ checksum: 10c0/8f04c8bed33f266bde27f432412456a3b893b51fe1857f0b8cd259100b376c1393a7927db1dd6344a4376baed72ed179ec5b0428aef2ae8508f1f28f95acb908
languageName: node
linkType: hard
-"vitest@npm:1.3.1":
- version: 1.3.1
- resolution: "vitest@npm:1.3.1"
- dependencies:
- "@vitest/expect": "npm:1.3.1"
- "@vitest/runner": "npm:1.3.1"
- "@vitest/snapshot": "npm:1.3.1"
- "@vitest/spy": "npm:1.3.1"
- "@vitest/utils": "npm:1.3.1"
- acorn-walk: "npm:^8.3.2"
+"vitest@npm:1.1.3":
+ version: 1.1.3
+ resolution: "vitest@npm:1.1.3"
+ dependencies:
+ "@vitest/expect": "npm:1.1.3"
+ "@vitest/runner": "npm:1.1.3"
+ "@vitest/snapshot": "npm:1.1.3"
+ "@vitest/spy": "npm:1.1.3"
+ "@vitest/utils": "npm:1.1.3"
+ acorn-walk: "npm:^8.3.1"
+ cac: "npm:^6.7.14"
chai: "npm:^4.3.10"
debug: "npm:^4.3.4"
execa: "npm:^8.0.1"
@@ -5831,17 +6334,17 @@ __metadata:
pathe: "npm:^1.1.1"
picocolors: "npm:^1.0.0"
std-env: "npm:^3.5.0"
- strip-literal: "npm:^2.0.0"
+ strip-literal: "npm:^1.3.0"
tinybench: "npm:^2.5.1"
- tinypool: "npm:^0.8.2"
+ tinypool: "npm:^0.8.1"
vite: "npm:^5.0.0"
- vite-node: "npm:1.3.1"
+ vite-node: "npm:1.1.3"
why-is-node-running: "npm:^2.2.2"
peerDependencies:
"@edge-runtime/vm": "*"
"@types/node": ^18.0.0 || >=20.0.0
- "@vitest/browser": 1.3.1
- "@vitest/ui": 1.3.1
+ "@vitest/browser": ^1.0.0
+ "@vitest/ui": ^1.0.0
happy-dom: "*"
jsdom: "*"
peerDependenciesMeta:
@@ -5859,7 +6362,7 @@ __metadata:
optional: true
bin:
vitest: vitest.mjs
- checksum: 10c0/66d312a3dc12e67bba22d31332d939e89cd17d38531893c7b13b8826704564031c1dde795df2799b855660572c19a595301e920710c7775d072ee6332502efc5
+ checksum: 10c0/5dc6010b14ab069f6483e343724bd4b6ff72c0ea1cca52b2f5d2ea2b0b7acc9584887b2d428af309c855b731d081dc32ec370032d2d40a20492ced5695950acb
languageName: node
linkType: hard
@@ -5867,17 +6370,17 @@ __metadata:
version: 0.0.0-use.local
resolution: "vitest@workspace:benchmarks/vitest"
dependencies:
- "@blueprintjs/icons": "npm:4.6.3"
- "@floating-ui/react-dom-interactions": "npm:0.10.1"
- "@testing-library/react": "npm:13.4.0"
- "@testing-library/user-event": "npm:14.4.3"
- clsx: "npm:1.2.1"
+ "@blueprintjs/icons": "npm:4.16.0"
+ "@floating-ui/react-dom-interactions": "npm:0.10.3"
+ "@testing-library/react": "npm:14.2.1"
+ "@testing-library/user-event": "npm:14.5.2"
+ clsx: "npm:2.1.0"
date-fns: "npm:2.29.3"
framer-motion: "npm:7.5.3"
- happy-dom: "npm:12.0.1"
+ happy-dom: "npm:13.6.2"
react: "npm:18.2.0"
react-dom: "npm:18.2.0"
- vitest: "npm:1.3.1"
+ vitest: "npm:1.1.3"
languageName: unknown
linkType: soft
@@ -5897,15 +6400,6 @@ __metadata:
languageName: node
linkType: hard
-"whatwg-encoding@npm:^2.0.0":
- version: 2.0.0
- resolution: "whatwg-encoding@npm:2.0.0"
- dependencies:
- iconv-lite: "npm:0.6.3"
- checksum: 10c0/91b90a49f312dc751496fd23a7e68981e62f33afe938b97281ad766235c4872fc4e66319f925c5e9001502b3040dd25a33b02a9c693b73a4cbbfdc4ad10c3e3e
- languageName: node
- linkType: hard
-
"whatwg-mimetype@npm:^3.0.0":
version: 3.0.0
resolution: "whatwg-mimetype@npm:3.0.0"
@@ -5938,7 +6432,7 @@ __metadata:
languageName: node
linkType: hard
-"which-typed-array@npm:^1.1.13":
+"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14":
version: 1.1.14
resolution: "which-typed-array@npm:1.1.14"
dependencies: