simvyn 2.6.2 → 2.6.4

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.
@@ -677,6 +677,14 @@
677
677
  height: calc(var(--spacing) * 48);
678
678
  }
679
679
 
680
+ .h-\[14px\] {
681
+ height: 14px;
682
+ }
683
+
684
+ .h-\[18px\] {
685
+ height: 18px;
686
+ }
687
+
680
688
  .h-\[calc\(100vh-240px\)\] {
681
689
  height: calc(100vh - 240px);
682
690
  }
@@ -793,10 +801,18 @@
793
801
  width: calc(var(--spacing) * 84);
794
802
  }
795
803
 
804
+ .w-\[14px\] {
805
+ width: 14px;
806
+ }
807
+
796
808
  .w-\[30\%\] {
797
809
  width: 30%;
798
810
  }
799
811
 
812
+ .w-\[32px\] {
813
+ width: 32px;
814
+ }
815
+
800
816
  .w-\[56px\] {
801
817
  width: 56px;
802
818
  }
@@ -886,11 +902,29 @@
886
902
  translate: var(--tw-translate-x) var(--tw-translate-y);
887
903
  }
888
904
 
905
+ .translate-x-\[2px\] {
906
+ --tw-translate-x: 2px;
907
+ translate: var(--tw-translate-x) var(--tw-translate-y);
908
+ }
909
+
910
+ .translate-x-\[16px\] {
911
+ --tw-translate-x: 16px;
912
+ translate: var(--tw-translate-x) var(--tw-translate-y);
913
+ }
914
+
889
915
  .-translate-y-1\/2 {
890
916
  --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
891
917
  translate: var(--tw-translate-x) var(--tw-translate-y);
892
918
  }
893
919
 
920
+ .-rotate-90 {
921
+ rotate: -90deg;
922
+ }
923
+
924
+ .rotate-90 {
925
+ rotate: 90deg;
926
+ }
927
+
894
928
  .rotate-180 {
895
929
  rotate: 180deg;
896
930
  }
@@ -1307,6 +1341,16 @@
1307
1341
  border-color: var(--color-text-secondary);
1308
1342
  }
1309
1343
 
1344
+ .border-white\/5 {
1345
+ border-color: #ffffff0d;
1346
+ }
1347
+
1348
+ @supports (color: color-mix(in lab, red, red)) {
1349
+ .border-white\/5 {
1350
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
1351
+ }
1352
+ }
1353
+
1310
1354
  .border-white\/8 {
1311
1355
  border-color: #ffffff14;
1312
1356
  }
@@ -1373,6 +1417,16 @@
1373
1417
  }
1374
1418
  }
1375
1419
 
1420
+ .bg-accent-blue\/40 {
1421
+ background-color: #4fa8e166;
1422
+ }
1423
+
1424
+ @supports (color: color-mix(in lab, red, red)) {
1425
+ .bg-accent-blue\/40 {
1426
+ background-color: color-mix(in oklab, var(--color-accent-blue) 40%, transparent);
1427
+ }
1428
+ }
1429
+
1376
1430
  .bg-amber-500\/15 {
1377
1431
  background-color: #f99c0026;
1378
1432
  }
@@ -1519,6 +1573,16 @@
1519
1573
  background-color: var(--color-text-muted);
1520
1574
  }
1521
1575
 
1576
+ .bg-text-muted\/20 {
1577
+ background-color: #54555833;
1578
+ }
1579
+
1580
+ @supports (color: color-mix(in lab, red, red)) {
1581
+ .bg-text-muted\/20 {
1582
+ background-color: color-mix(in oklab, var(--color-text-muted) 20%, transparent);
1583
+ }
1584
+ }
1585
+
1522
1586
  .bg-text-muted\/50 {
1523
1587
  background-color: #54555880;
1524
1588
  }
@@ -1529,6 +1593,16 @@
1529
1593
  }
1530
1594
  }
1531
1595
 
1596
+ .bg-text-muted\/60 {
1597
+ background-color: #54555899;
1598
+ }
1599
+
1600
+ @supports (color: color-mix(in lab, red, red)) {
1601
+ .bg-text-muted\/60 {
1602
+ background-color: color-mix(in oklab, var(--color-text-muted) 60%, transparent);
1603
+ }
1604
+ }
1605
+
1532
1606
  .bg-transparent {
1533
1607
  background-color: #0000;
1534
1608
  }
@@ -1914,6 +1988,16 @@
1914
1988
  }
1915
1989
  }
1916
1990
 
1991
+ .text-text-muted\/60 {
1992
+ color: #54555899;
1993
+ }
1994
+
1995
+ @supports (color: color-mix(in lab, red, red)) {
1996
+ .text-text-muted\/60 {
1997
+ color: color-mix(in oklab, var(--color-text-muted) 60%, transparent);
1998
+ }
1999
+ }
2000
+
1917
2001
  .text-text-primary {
1918
2002
  color: var(--color-text-primary);
1919
2003
  }
@@ -2090,6 +2174,10 @@
2090
2174
  border-color: var(--color-glass-border-hover);
2091
2175
  }
2092
2176
 
2177
+ .hover\:bg-\[rgba\(255\,255\,255\,0\.05\)\]:hover {
2178
+ background-color: #ffffff0d;
2179
+ }
2180
+
2093
2181
  .hover\:bg-\[rgba\(255\,255\,255\,0\.08\)\]:hover {
2094
2182
  background-color: #ffffff14;
2095
2183
  }
@@ -38,8 +38,8 @@
38
38
  }
39
39
  </style>
40
40
  <title>simvyn</title>
41
- <script type="module" crossorigin src="/assets/index-CV-ugcyG.js"></script>
42
- <link rel="stylesheet" crossorigin href="/assets/index-DPTLVb11.css">
41
+ <script type="module" crossorigin src="/assets/index-C84olC1W.js"></script>
42
+ <link rel="stylesheet" crossorigin href="/assets/index-DkqAjveq.css">
43
43
  </head>
44
44
  <body>
45
45
  <div id="root"></div>
package/dist/index.js CHANGED
@@ -513,6 +513,42 @@ function createAndroidAdapter() {
513
513
  enabled ? "1" : "0"
514
514
  ]);
515
515
  },
516
+ async setOrientation(deviceId, orientation) {
517
+ if (deviceId.startsWith("avd:"))
518
+ throw new Error("Device must be booted for orientation operations");
519
+ const map = {
520
+ portrait: "0",
521
+ "landscape-left": "1",
522
+ "portrait-upside-down": "2",
523
+ "landscape-right": "3"
524
+ };
525
+ const value = map[orientation];
526
+ if (!value && !["0", "1", "2", "3"].includes(orientation))
527
+ throw new Error(
528
+ `Invalid orientation: ${orientation}. Use: portrait, landscape-left, landscape-right, portrait-upside-down`
529
+ );
530
+ const rotation = value ?? orientation;
531
+ await verboseExec("adb", [
532
+ "-s",
533
+ deviceId,
534
+ "shell",
535
+ "settings",
536
+ "put",
537
+ "system",
538
+ "accelerometer_rotation",
539
+ "0"
540
+ ]);
541
+ await verboseExec("adb", [
542
+ "-s",
543
+ deviceId,
544
+ "shell",
545
+ "settings",
546
+ "put",
547
+ "system",
548
+ "user_rotation",
549
+ rotation
550
+ ]);
551
+ },
516
552
  setStatusBar: void 0,
517
553
  clearStatusBar: void 0,
518
554
  setContentSize: void 0,
@@ -698,7 +734,8 @@ function createAndroidAdapter() {
698
734
  "displayOverride",
699
735
  "batterySimulation",
700
736
  "inputInjection",
701
- "bugReport"
737
+ "bugReport",
738
+ "orientation"
702
739
  ];
703
740
  }
704
741
  };
@@ -1881,6 +1918,30 @@ var init_action_registry = __esm({
1881
1918
  },
1882
1919
  isSupported: (adapter) => !!adapter.setIncreaseContrast
1883
1920
  },
1921
+ {
1922
+ id: "set-orientation",
1923
+ label: "Set Orientation",
1924
+ description: "Rotate the device to a specific orientation (Android only)",
1925
+ module: "device-settings",
1926
+ params: [
1927
+ {
1928
+ key: "orientation",
1929
+ label: "Orientation",
1930
+ type: "select",
1931
+ required: true,
1932
+ options: [
1933
+ { label: "Portrait", value: "portrait" },
1934
+ { label: "Landscape Left", value: "landscape-left" },
1935
+ { label: "Landscape Right", value: "landscape-right" },
1936
+ { label: "Portrait Upside Down", value: "portrait-upside-down" }
1937
+ ]
1938
+ }
1939
+ ],
1940
+ async execute(adapter, deviceId, params) {
1941
+ await adapter.setOrientation(deviceId, params.orientation);
1942
+ },
1943
+ isSupported: (adapter) => !!adapter.setOrientation
1944
+ },
1884
1945
  {
1885
1946
  id: "boot-device",
1886
1947
  label: "Boot Device",
@@ -5404,6 +5465,40 @@ function registerSettingsCli(program2) {
5404
5465
  dm.stop();
5405
5466
  }
5406
5467
  });
5468
+ settings.command("orientation <device> <orientation>").description(
5469
+ "Set device orientation (portrait, landscape-left, landscape-right, portrait-upside-down)"
5470
+ ).action(async (deviceId, orientation) => {
5471
+ const valid = ["portrait", "landscape-left", "landscape-right", "portrait-upside-down"];
5472
+ if (!valid.includes(orientation)) {
5473
+ console.error(`Invalid orientation: ${orientation}`);
5474
+ console.error(`Valid options: ${valid.join(", ")}`);
5475
+ process.exit(1);
5476
+ }
5477
+ const { createAvailableAdapters: createAvailableAdapters2, createDeviceManager: createDeviceManager2 } = await Promise.resolve().then(() => (init_src(), src_exports));
5478
+ const adapters = await createAvailableAdapters2();
5479
+ const dm = createDeviceManager2(adapters);
5480
+ try {
5481
+ const devices = await dm.refresh();
5482
+ const target = devices.find((d) => d.id === deviceId || d.id.startsWith(deviceId));
5483
+ if (!target) {
5484
+ console.error(`Device not found: ${deviceId}`);
5485
+ process.exit(1);
5486
+ }
5487
+ if (target.state !== "booted") {
5488
+ console.error("Device must be booted");
5489
+ process.exit(1);
5490
+ }
5491
+ const adapter = dm.getAdapter(target.platform);
5492
+ if (!adapter?.setOrientation) {
5493
+ console.error(`Orientation not supported for ${target.platform}`);
5494
+ process.exit(1);
5495
+ }
5496
+ await adapter.setOrientation(target.id, orientation);
5497
+ console.log(`Orientation set to ${orientation} on ${target.name}`);
5498
+ } finally {
5499
+ dm.stop();
5500
+ }
5501
+ });
5407
5502
  }
5408
5503
  function registerA11yCli(program2) {
5409
5504
  const a11y = program2.command("a11y").description("Accessibility commands");
@@ -6526,6 +6621,25 @@ async function settingsRoutes(fastify) {
6526
6621
  }
6527
6622
  }
6528
6623
  );
6624
+ fastify.post(
6625
+ "/orientation",
6626
+ async (req, reply) => {
6627
+ const { deviceId, orientation } = req.body;
6628
+ const device = fastify.deviceManager.devices.find((d) => d.id === deviceId);
6629
+ if (!device) return reply.status(404).send({ error: "Device not found" });
6630
+ if (device.state !== "booted")
6631
+ return reply.status(400).send({ error: "Device must be booted" });
6632
+ const adapter = fastify.deviceManager.getAdapter(device.platform);
6633
+ if (!adapter?.setOrientation)
6634
+ return reply.status(400).send({ error: "Orientation not supported for this platform" });
6635
+ try {
6636
+ await adapter.setOrientation(device.id, orientation);
6637
+ return { success: true };
6638
+ } catch (err) {
6639
+ return reply.status(500).send({ error: err.message });
6640
+ }
6641
+ }
6642
+ );
6529
6643
  fastify.get("/capabilities", async (req, reply) => {
6530
6644
  const { deviceId } = req.query;
6531
6645
  const device = fastify.deviceManager.devices.find((d) => d.id === deviceId);
@@ -6547,6 +6661,7 @@ async function settingsRoutes(fastify) {
6547
6661
  batterySimulation: !!adapter?.setBattery,
6548
6662
  inputInjection: !!adapter?.inputTap,
6549
6663
  bugReport: !!adapter?.collectBugReport,
6664
+ orientation: !!adapter?.setOrientation,
6550
6665
  fileSystem: !isIosPhysical,
6551
6666
  database: !isIosPhysical
6552
6667
  };
@@ -6575,7 +6690,8 @@ var deviceSettingsModule = {
6575
6690
  "displayOverride",
6576
6691
  "batterySimulation",
6577
6692
  "inputInjection",
6578
- "bugReport"
6693
+ "bugReport",
6694
+ "orientation"
6579
6695
  ]
6580
6696
  };
6581
6697
  var manifest_default8 = deviceSettingsModule;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simvyn",
3
- "version": "2.6.2",
3
+ "version": "2.6.4",
4
4
  "type": "module",
5
5
  "description": "Universal mobile device devtool — control iOS Simulators, Android Emulators, and real devices from a single dashboard and CLI",
6
6
  "main": "./dist/index.js",