@window-splitter/state 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/index.ts CHANGED
@@ -25,7 +25,7 @@ export interface ParsedPixelUnit {
25
25
  value: Big.Big;
26
26
  }
27
27
 
28
- type ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;
28
+ export type ParsedUnit = ParsedPercentUnit | ParsedPixelUnit;
29
29
 
30
30
  export function makePercentUnit(value: number): ParsedPercentUnit {
31
31
  return { type: "percent", value: new Big(value) };
@@ -205,7 +205,7 @@ export type InitializePanelHandleData = Omit<
205
205
  interface RegisterPanelHandleEvent {
206
206
  /** Register a new panel handle with the state machine */
207
207
  type: "registerPanelHandle";
208
- data: InitializePanelHandleData;
208
+ data: PanelHandleData;
209
209
  }
210
210
 
211
211
  interface UnregisterPanelHandleEvent {
@@ -849,7 +849,7 @@ function getStaticWidth(context: GroupMachineContextValue) {
849
849
  return width;
850
850
  }
851
851
 
852
- function formatUnit(unit: ParsedUnit): Unit {
852
+ export function formatUnit(unit: ParsedUnit): Unit {
853
853
  if (unit.type === "pixel") {
854
854
  return `${unit.value.toNumber()}px`;
855
855
  }
@@ -1685,7 +1685,7 @@ export function groupMachine(
1685
1685
  let locked = false;
1686
1686
 
1687
1687
  const context: GroupMachineContextValue = {
1688
- size: { width: 0, height: 0 },
1688
+ size: input.size || { width: 0, height: 0 },
1689
1689
  items: input.items || [],
1690
1690
  orientation: input.orientation || "horizontal",
1691
1691
  dragOvershoot: new Big(0),
@@ -1776,11 +1776,15 @@ export function groupMachine(
1776
1776
  event.type === "collapsePanel"
1777
1777
  ? handle.direction * -1
1778
1778
  : handle.direction;
1779
+
1779
1780
  const newContext = updateLayout(context, {
1780
1781
  handleId: handle.item.id,
1781
1782
  type: "dragHandle",
1782
1783
  controlled: event.controlled,
1783
- value: dragHandlePayload({ delta, orientation: context.orientation }),
1784
+ value: dragHandlePayload({
1785
+ delta: delta,
1786
+ orientation: context.orientation,
1787
+ }),
1784
1788
  });
1785
1789
 
1786
1790
  assign(context, newContext);
@@ -1903,19 +1907,7 @@ export function groupMachine(
1903
1907
  actions.onAutosave();
1904
1908
  break;
1905
1909
  case "registerPanelHandle": {
1906
- const unit =
1907
- typeof event.data.size === "string"
1908
- ? parseUnit(event.data.size)
1909
- : event.data.size;
1910
-
1911
- context.items = addDeDuplicatedItems(context.items, {
1912
- type: "handle",
1913
- ...event.data,
1914
- size: {
1915
- type: "pixel",
1916
- value: new Big(unit.value),
1917
- },
1918
- });
1910
+ context.items = addDeDuplicatedItems(context.items, event.data);
1919
1911
  break;
1920
1912
  }
1921
1913
  case "unregisterPanelHandle":
@@ -2109,23 +2101,29 @@ export function groupMachine(
2109
2101
  if (guards.shouldNotifyCollapseToggle(event)) {
2110
2102
  actions.notifyCollapseToggle(event);
2111
2103
  } else {
2112
- transition("togglingCollapse");
2113
- abortController.abort();
2114
- animationActor(context, event, send, abortController).then(
2115
- (output) => {
2116
- actions.onAnimationEnd(output);
2117
- transition("idle");
2118
- }
2119
- );
2104
+ const panel = getPanelWithId(context, event.panelId);
2105
+
2106
+ if (!panel.collapsed) {
2107
+ transition("togglingCollapse");
2108
+ abortController.abort();
2109
+ animationActor(context, event, send, abortController).then(
2110
+ (output) => {
2111
+ actions.onAnimationEnd(output);
2112
+ transition("idle");
2113
+ }
2114
+ );
2115
+ }
2120
2116
  }
2121
2117
  break;
2122
2118
  case "expandPanel":
2123
2119
  if (guards.cannotExpandPanel(event)) {
2124
2120
  break;
2121
+ } else if (guards.shouldNotifyCollapseToggle(event)) {
2122
+ actions.notifyCollapseToggle(event);
2125
2123
  } else {
2126
- if (guards.shouldNotifyCollapseToggle(event)) {
2127
- actions.notifyCollapseToggle(event);
2128
- } else {
2124
+ const panel = getPanelWithId(context, event.panelId);
2125
+
2126
+ if (panel.collapsed) {
2129
2127
  transition("togglingCollapse");
2130
2128
  abortController.abort();
2131
2129
  animationActor(context, event, send, abortController).then(
@@ -17,7 +17,6 @@ import {
17
17
  prepareSnapshot,
18
18
  } from "./index.js";
19
19
  import { spring } from "framer-motion";
20
- import Big from "big.js";
21
20
  import * as Cookies from "tiny-cookie";
22
21
  import { Actor, createActor } from "./test-utils.js";
23
22
 
@@ -135,7 +134,7 @@ describe("constraints", () => {
135
134
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
136
135
  {
137
136
  type: "registerPanelHandle",
138
- data: { id: "resizer-1", size: "10px" },
137
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
139
138
  },
140
139
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
141
140
  ]);
@@ -186,8 +185,7 @@ describe("constraints", () => {
186
185
  },
187
186
  {
188
187
  type: "registerPanelHandle",
189
- // @ts-expect-error The types were hard and i wanted to keep the public API simple
190
- data: { id: "resizer-1", size: { type: "pixel", value: new Big(10) } },
188
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
191
189
  },
192
190
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
193
191
  ]);
@@ -231,8 +229,7 @@ describe("constraints", () => {
231
229
  },
232
230
  {
233
231
  type: "registerPanelHandle",
234
- // @ts-expect-error The types were hard and i wanted to keep the public API simple
235
- data: { id: "resizer-1", size: { type: "pixel", value: new Big(10) } },
232
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
236
233
  },
237
234
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
238
235
  ]);
@@ -259,7 +256,7 @@ describe("constraints", () => {
259
256
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
260
257
  {
261
258
  type: "registerPanelHandle",
262
- data: { id: "resizer-1", size: "10px" },
259
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
263
260
  },
264
261
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
265
262
  ]);
@@ -495,7 +492,7 @@ describe("constraints", () => {
495
492
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
496
493
  {
497
494
  type: "registerPanelHandle",
498
- data: { id: "resizer-1", size: "10px" },
495
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
499
496
  },
500
497
  {
501
498
  type: "registerPanel",
@@ -526,7 +523,7 @@ describe("constraints", () => {
526
523
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
527
524
  {
528
525
  type: "registerPanelHandle",
529
- data: { id: "resizer-1", size: "10px" },
526
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
530
527
  },
531
528
  {
532
529
  type: "registerPanel",
@@ -559,7 +556,7 @@ describe("constraints", () => {
559
556
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
560
557
  {
561
558
  type: "registerPanelHandle",
562
- data: { id: "resizer-1", size: "10px" },
559
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
563
560
  },
564
561
  {
565
562
  type: "registerPanel",
@@ -586,7 +583,7 @@ describe("constraints", () => {
586
583
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
587
584
  {
588
585
  type: "registerPanelHandle",
589
- data: { id: "resizer-1", size: "10px" },
586
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
590
587
  },
591
588
  {
592
589
  type: "registerPanel",
@@ -598,7 +595,7 @@ describe("constraints", () => {
598
595
  },
599
596
  {
600
597
  type: "registerPanelHandle",
601
- data: { id: "resizer-2", size: "10px" },
598
+ data: initializePanelHandleData({ id: "resizer-2", size: "10px" }),
602
599
  },
603
600
  {
604
601
  type: "registerPanel",
@@ -662,7 +659,7 @@ describe("constraints", () => {
662
659
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
663
660
  {
664
661
  type: "registerPanelHandle",
665
- data: { id: "resizer-1", size: "10px" },
662
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
666
663
  },
667
664
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
668
665
  ]);
@@ -708,7 +705,7 @@ describe("collapsible panel", () => {
708
705
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
709
706
  {
710
707
  type: "registerPanelHandle",
711
- data: { id: "resizer-1", size: "10px" },
708
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
712
709
  },
713
710
  {
714
711
  type: "registerPanel",
@@ -785,7 +782,7 @@ describe("collapsible panel", () => {
785
782
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
786
783
  {
787
784
  type: "registerPanelHandle",
788
- data: { id: "resizer-1", size: "10px" },
785
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
789
786
  },
790
787
  {
791
788
  type: "registerPanel",
@@ -842,7 +839,7 @@ describe("collapsible panel", () => {
842
839
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
843
840
  {
844
841
  type: "registerPanelHandle",
845
- data: { id: "resizer-1", size: "10px" },
842
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
846
843
  },
847
844
  {
848
845
  type: "registerPanel",
@@ -891,7 +888,7 @@ describe("collapsible panel", () => {
891
888
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
892
889
  {
893
890
  type: "registerPanelHandle",
894
- data: { id: "resizer-1", size: "10px" },
891
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
895
892
  },
896
893
  {
897
894
  type: "registerPanel",
@@ -932,7 +929,7 @@ describe("collapsible panel", () => {
932
929
  },
933
930
  {
934
931
  type: "registerPanelHandle",
935
- data: { id: "resizer-1", size: "10px" },
932
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
936
933
  },
937
934
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
938
935
  ]);
@@ -980,7 +977,7 @@ describe("collapsible panel", () => {
980
977
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
981
978
  {
982
979
  type: "registerPanelHandle",
983
- data: { id: "resizer-1", size: "10px" },
980
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
984
981
  },
985
982
  {
986
983
  type: "registerPanel",
@@ -1033,7 +1030,7 @@ describe("collapsible panel", () => {
1033
1030
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1034
1031
  {
1035
1032
  type: "registerPanelHandle",
1036
- data: { id: "resizer-1", size: "10px" },
1033
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1037
1034
  },
1038
1035
  {
1039
1036
  type: "registerPanel",
@@ -1107,7 +1104,7 @@ describe("collapsible panel", () => {
1107
1104
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1108
1105
  {
1109
1106
  type: "registerPanelHandle",
1110
- data: { id: "resizer-1", size: "10px" },
1107
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1111
1108
  },
1112
1109
  {
1113
1110
  type: "registerPanel",
@@ -1150,7 +1147,7 @@ describe("collapsible panel", () => {
1150
1147
  });
1151
1148
  });
1152
1149
 
1153
- test("panel collapse can be controlled ", async () => {
1150
+ test("panel collapse can be controlled", async () => {
1154
1151
  const actor = createActor({ groupId: "group" });
1155
1152
 
1156
1153
  const spy = vi.fn();
@@ -1159,7 +1156,7 @@ describe("collapsible panel", () => {
1159
1156
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1160
1157
  {
1161
1158
  type: "registerPanelHandle",
1162
- data: { id: "resizer-1", size: "10px" },
1159
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1163
1160
  },
1164
1161
  {
1165
1162
  type: "registerPanel",
@@ -1271,7 +1268,7 @@ describe("collapsible panel", () => {
1271
1268
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1272
1269
  {
1273
1270
  type: "registerPanelHandle",
1274
- data: { id: "resizer-1", size: "10px" },
1271
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1275
1272
  },
1276
1273
  {
1277
1274
  type: "registerPanel",
@@ -1354,7 +1351,7 @@ describe("collapsible panel", () => {
1354
1351
  },
1355
1352
  {
1356
1353
  type: "registerPanelHandle",
1357
- data: { id: "resizer-1", size: "10px" },
1354
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1358
1355
  },
1359
1356
  {
1360
1357
  type: "registerPanel",
@@ -1385,7 +1382,7 @@ describe("collapsible panel", () => {
1385
1382
  },
1386
1383
  {
1387
1384
  type: "registerPanelHandle",
1388
- data: { id: "resizer-1", size: "10px" },
1385
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1389
1386
  },
1390
1387
  {
1391
1388
  type: "registerPanel",
@@ -1427,7 +1424,7 @@ describe("collapsible panel", () => {
1427
1424
  },
1428
1425
  {
1429
1426
  type: "registerPanelHandle",
1430
- data: { id: "resizer-1", size: "10px" },
1427
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1431
1428
  },
1432
1429
  {
1433
1430
  type: "registerPanel",
@@ -1471,7 +1468,7 @@ describe("collapsible panel", () => {
1471
1468
  },
1472
1469
  {
1473
1470
  type: "registerPanelHandle",
1474
- data: { id: "resizer-1", size: "10px" },
1471
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1475
1472
  },
1476
1473
  {
1477
1474
  type: "registerPanel",
@@ -1513,7 +1510,7 @@ describe("conditional panel", () => {
1513
1510
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1514
1511
  {
1515
1512
  type: "registerPanelHandle",
1516
- data: { id: "resizer-1", size: "10px" },
1513
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1517
1514
  },
1518
1515
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
1519
1516
  ]);
@@ -1529,7 +1526,7 @@ describe("conditional panel", () => {
1529
1526
  sendAll(actor, [
1530
1527
  {
1531
1528
  type: "registerPanelHandle",
1532
- data: { id: "resizer-2", size: "10px" },
1529
+ data: initializePanelHandleData({ id: "resizer-2", size: "10px" }),
1533
1530
  },
1534
1531
  {
1535
1532
  type: "registerDynamicPanel",
@@ -1562,7 +1559,7 @@ describe("conditional panel", () => {
1562
1559
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1563
1560
  {
1564
1561
  type: "registerPanelHandle",
1565
- data: { id: "resizer-1", size: "10px" },
1562
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1566
1563
  },
1567
1564
  {
1568
1565
  type: "registerPanel",
@@ -1581,7 +1578,7 @@ describe("conditional panel", () => {
1581
1578
  sendAll(actor, [
1582
1579
  {
1583
1580
  type: "registerPanelHandle",
1584
- data: { id: "resizer-2", size: "10px" },
1581
+ data: initializePanelHandleData({ id: "resizer-2", size: "10px" }),
1585
1582
  },
1586
1583
  {
1587
1584
  type: "registerDynamicPanel",
@@ -1619,7 +1616,7 @@ describe("conditional panel", () => {
1619
1616
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1620
1617
  {
1621
1618
  type: "registerPanelHandle",
1622
- data: { id: "resizer-1", size: "10px" },
1619
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1623
1620
  },
1624
1621
  {
1625
1622
  type: "registerPanel",
@@ -1638,7 +1635,7 @@ describe("conditional panel", () => {
1638
1635
  sendAll(actor, [
1639
1636
  {
1640
1637
  type: "registerPanelHandle",
1641
- data: { id: "resizer-2", size: "10px" },
1638
+ data: initializePanelHandleData({ id: "resizer-2", size: "10px" }),
1642
1639
  },
1643
1640
  {
1644
1641
  type: "registerDynamicPanel",
@@ -1674,7 +1671,7 @@ describe("conditional panel", () => {
1674
1671
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1675
1672
  {
1676
1673
  type: "registerPanelHandle",
1677
- data: { id: "resizer-1", size: "10px" },
1674
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1678
1675
  },
1679
1676
  { type: "registerPanel", data: initializePanel({ id: "panel-2" }) },
1680
1677
  ]);
@@ -1690,7 +1687,11 @@ describe("conditional panel", () => {
1690
1687
  sendAll(actor, [
1691
1688
  {
1692
1689
  type: "registerPanelHandle",
1693
- data: { id: "resizer-2", size: "10px", order: 1 },
1690
+ data: initializePanelHandleData({
1691
+ id: "resizer-2",
1692
+ size: "10px",
1693
+ order: 1,
1694
+ }),
1694
1695
  },
1695
1696
  {
1696
1697
  type: "registerDynamicPanel",
@@ -1832,7 +1833,7 @@ describe("utils", async () => {
1832
1833
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1833
1834
  {
1834
1835
  type: "registerPanelHandle",
1835
- data: { id: "resizer-1", size: "10px" },
1836
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1836
1837
  },
1837
1838
  {
1838
1839
  type: "registerPanel",
@@ -1852,7 +1853,7 @@ describe("utils", async () => {
1852
1853
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1853
1854
  {
1854
1855
  type: "registerPanelHandle",
1855
- data: { id: "resizer-1", size: "10px" },
1856
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1856
1857
  },
1857
1858
  {
1858
1859
  type: "registerPanel",
@@ -1874,7 +1875,7 @@ describe("utils", async () => {
1874
1875
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1875
1876
  {
1876
1877
  type: "registerPanelHandle",
1877
- data: { id: "resizer-1", size: "10px" },
1878
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1878
1879
  },
1879
1880
  {
1880
1881
  type: "registerPanel",
@@ -1894,7 +1895,7 @@ describe("utils", async () => {
1894
1895
  { type: "registerPanel", data: initializePanel({ id: "panel-1" }) },
1895
1896
  {
1896
1897
  type: "registerPanelHandle",
1897
- data: { id: "resizer-1", size: "10px" },
1898
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1898
1899
  },
1899
1900
  {
1900
1901
  type: "registerPanel",
@@ -1917,7 +1918,7 @@ describe("utils", async () => {
1917
1918
  },
1918
1919
  {
1919
1920
  type: "registerPanelHandle",
1920
- data: { id: "resizer-1", size: "10px" },
1921
+ data: initializePanelHandleData({ id: "resizer-1", size: "10px" }),
1921
1922
  },
1922
1923
  {
1923
1924
  type: "registerPanel",
@@ -1,136 +0,0 @@
1
-
2
- 
3
- > @window-splitter/state@0.6.1 test /Users/andrew/Documents/react-window-splitter/packages/state
4
- > vitest
5
-
6
- [?25l Vitest  No browser "instances" were defined. Running tests in "chromium" browser. The "browser.name" field is deprecated since Vitest 3. Read more: https://vitest.dev/guide/browser/config#browser-instances
7
-  Vitest  "providerOptions" is ignored because it's overridden by the configs. To hide this warning, remove the "providerOptions" property from the browser configuration.
8
-
9
-  DEV  v3.1.2 /Users/andrew/Documents/react-window-splitter/packages/state
10
-
11
- [?2026h
12
-  Test Files 0 passed (2)
13
-  Tests 0 passed (0)
14
-  Start at 11:25:31
15
-  Duration 960ms
16
- [?2026l[?2026h
17
-  ❯  chromium  src/machine.test.ts [queued]
18
-
19
-  Test Files 0 passed (2)
20
-  Tests 0 passed (0)
21
-  Start at 11:25:31
22
-  Duration 1.58s
23
- [?2026l[?2026h
24
-  ❯  chromium  src/machine.test.ts 0/53
25
-
26
-  Test Files 0 passed (2)
27
-  Tests 0 passed (53)
28
-  Start at 11:25:31
29
-  Duration 1.78s
30
- [?2026l[?2026h
31
-  ❯  chromium  src/machine.test.ts 1/53
32
-
33
-  Test Files 0 passed (2)
34
-  Tests 1 passed (53)
35
-  Start at 11:25:31
36
-  Duration 1.89s
37
- [?2026l[?2026h
38
-  ❯  chromium  src/machine.test.ts 20/53
39
-
40
-  Test Files 0 passed (2)
41
-  Tests 20 passed (53)
42
-  Start at 11:25:31
43
-  Duration 2.19s
44
- [?2026l[?2026h
45
-  ❯  chromium  src/machine.test.ts 21/53
46
-
47
-  Test Files 0 passed (2)
48
-  Tests 21 passed (53)
49
-  Start at 11:25:31
50
-  Duration 2.49s
51
- [?2026l[?2026h
52
-  ❯  chromium  src/machine.test.ts 21/53
53
-
54
-  Test Files 0 passed (2)
55
-  Tests 21 passed (53)
56
-  Start at 11:25:31
57
-  Duration 2.90s
58
- [?2026l[?2026h
59
-  ❯  chromium  src/machine.test.ts 23/53
60
-
61
-  Test Files 0 passed (2)
62
-  Tests 23 passed (53)
63
-  Start at 11:25:31
64
-  Duration 3.60s
65
- [?2026l[?2026h
66
-  ❯  chromium  src/machine.test.ts 24/53
67
-
68
-  Test Files 0 passed (2)
69
-  Tests 24 passed (53)
70
-  Start at 11:25:31
71
-  Duration 3.70s
72
- [?2026l[?2026h
73
-  ❯  chromium  src/machine.test.ts 28/53
74
-
75
-  Test Files 0 passed (2)
76
-  Tests 28 passed (53)
77
-  Start at 11:25:31
78
-  Duration 3.91s
79
- [?2026l[?2026h
80
-  ❯  chromium  src/machine.test.ts 30/53
81
-
82
-  Test Files 0 passed (2)
83
-  Tests 30 passed (53)
84
-  Start at 11:25:31
85
-  Duration 4.11s
86
- [?2026l[?2026h
87
-  ❯  chromium  src/machine.test.ts 32/53
88
-
89
-  Test Files 0 passed (2)
90
-  Tests 32 passed (53)
91
-  Start at 11:25:31
92
-  Duration 4.41s
93
- [?2026l[?2026h
94
-  ❯  chromium  src/machine.test.ts 33/53
95
-
96
-  Test Files 0 passed (2)
97
-  Tests 33 passed (53)
98
-  Start at 11:25:31
99
-  Duration 4.82s
100
- [?2026l[?2026h
101
-  ❯  chromium  src/machine.test.ts 34/53
102
-
103
-  Test Files 0 passed (2)
104
-  Tests 34 passed (53)
105
-  Start at 11:25:31
106
-  Duration 4.92s
107
- [?2026l[?2026h
108
-  ❯  chromium  src/machine.test.ts 37/53
109
-
110
-  Test Files 0 passed (2)
111
-  Tests 37 passed (53)
112
-  Start at 11:25:31
113
-  Duration 5.02s
114
- [?2026l[?2026h
115
-  ❯  chromium  src/machine.test.ts 53/53
116
-
117
-  Test Files 0 passed (2)
118
-  Tests 53 passed (53)
119
-  Start at 11:25:31
120
-  Duration 5.12s
121
- [?2026l ✓  chromium  src/machine.test.ts (53 tests) 3384ms
122
- ✓ collapsible panel > panel can be collapsible: ease-in-out  305ms
123
- ✓ collapsible panel > panel can be collapsible: bounce  304ms
124
- ✓ collapsible panel > panel can be collapsible: { duration: 500, easing: 'linear' }  511ms
125
- ✓ collapsible panel > panel can be collapsible: { duration: 1000, easing: [Function springEasing] }  607ms
126
- ✓ collapsible panel > panel collapse can be controlled - event  419ms
127
- ✓  chromium  src/utils.test.ts (15 tests) 2ms
128
-
129
-  Test Files  2 passed (2)
130
-  Tests  68 passed (68)
131
-  Start at  11:25:31
132
-  Duration  5.27s (transform 0ms, setup 0ms, collect 121ms, tests 3.39s, environment 0ms, prepare 33ms)
133
-
134
-  PASS  Waiting for file changes...
135
- press h to show help, press q to quit
136
- [?25h[?25h ELIFECYCLE  Test failed. See above for more details.