@multiplatform.one/core 7.2.0 → 7.2.2
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/package.json +12 -12
- package/src/app/CreateApp.tsx +1 -1
- package/src/app/TanstackDevtools.tsx +4 -1
- package/src/app/devtoolsTrigger.spec.ts +75 -3
- package/src/app/devtoolsTrigger.ts +49 -5
- package/types/app/CreateApp.d.ts +1 -1
- package/types/app/TanstackDevtools.d.ts.map +1 -1
- package/types/app/devtoolsTrigger.d.ts +29 -5
- package/types/app/devtoolsTrigger.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/core",
|
|
3
|
-
"version": "7.2.
|
|
3
|
+
"version": "7.2.2",
|
|
4
4
|
"description": "Core framework shell, provider composition, and layout factories for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"app",
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"@tanstack/react-devtools": "^0.10.2",
|
|
48
48
|
"@tanstack/react-form-devtools": "0.2.22",
|
|
49
49
|
"react-cookie": "^8.1.2",
|
|
50
|
-
"@multiplatform.one/
|
|
51
|
-
"@multiplatform.one/logger": "7.2.
|
|
52
|
-
"@multiplatform.one/
|
|
53
|
-
"@multiplatform.one/
|
|
54
|
-
"@multiplatform.one/
|
|
50
|
+
"@multiplatform.one/i18n": "7.2.2",
|
|
51
|
+
"@multiplatform.one/logger": "7.2.2",
|
|
52
|
+
"@multiplatform.one/platform": "7.2.2",
|
|
53
|
+
"@multiplatform.one/store": "7.2.2",
|
|
54
|
+
"@multiplatform.one/theme": "7.2.2"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@sentry/react": "^10.51.0",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"tamagui": "2.7.6",
|
|
70
70
|
"typescript": "~5.9.3",
|
|
71
71
|
"vitest": "^4.1.5",
|
|
72
|
-
"@multiplatform.one/
|
|
73
|
-
"@multiplatform.one/
|
|
72
|
+
"@multiplatform.one/frappe": "7.2.2",
|
|
73
|
+
"@multiplatform.one/web3": "7.2.2"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"@sentry/react": "^9.0.0",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
"react-native-gesture-handler": ">=2.0.0",
|
|
87
87
|
"react-native-safe-area-context": ">=4.0.0",
|
|
88
88
|
"tamagui": "^2.0.0-rc",
|
|
89
|
-
"@multiplatform.one/frappe": "^7.2.
|
|
90
|
-
"@multiplatform.one/frappe-ui": "^7.2.
|
|
91
|
-
"@multiplatform.one/keycloak": "^7.2.
|
|
92
|
-
"@multiplatform.one/web3": "^7.2.
|
|
89
|
+
"@multiplatform.one/frappe": "^7.2.2",
|
|
90
|
+
"@multiplatform.one/frappe-ui": "^7.2.2",
|
|
91
|
+
"@multiplatform.one/keycloak": "^7.2.2",
|
|
92
|
+
"@multiplatform.one/web3": "^7.2.2"
|
|
93
93
|
},
|
|
94
94
|
"peerDependenciesMeta": {
|
|
95
95
|
"@multiplatform.one/web3": {
|
package/src/app/CreateApp.tsx
CHANGED
|
@@ -57,7 +57,7 @@ export interface TanstackConfig {
|
|
|
57
57
|
* `debug`). Defaults to true whenever the devtools mount. On iOS 13+
|
|
58
58
|
* WebKit the motion permission is requested once from the user's first
|
|
59
59
|
* tap; Android and desktop need no permission (desktop simply never
|
|
60
|
-
* fires devicemotion — use
|
|
60
|
+
* fires devicemotion — use Cmd/Ctrl+Shift+` there). Set false to
|
|
61
61
|
* keep the keyboard shortcut as the only trigger.
|
|
62
62
|
*/
|
|
63
63
|
shakeToOpen?: boolean;
|
|
@@ -14,7 +14,7 @@ import { ThemeDevtoolsPanel } from "@multiplatform.one/theme";
|
|
|
14
14
|
import { storage } from "@multiplatform.one/store";
|
|
15
15
|
import { useEffect, useState } from "react";
|
|
16
16
|
import type { TanstackConfig } from "./CreateApp";
|
|
17
|
-
import { devtoolsOpenHotkey, useShakeToOpen } from "./devtoolsTrigger";
|
|
17
|
+
import { devtoolsOpenHotkey, useDevtoolsKeyboardTrigger, useShakeToOpen } from "./devtoolsTrigger";
|
|
18
18
|
|
|
19
19
|
const devtoolsSettingsKey = "tanstack_devtools_settings";
|
|
20
20
|
|
|
@@ -133,6 +133,9 @@ export default function TanstackDevtoolsWrapper({
|
|
|
133
133
|
// keyboard shortcut. Ships whenever the devtools mount unless the app
|
|
134
134
|
// opts out with `tanstack: { shakeToOpen: false }`.
|
|
135
135
|
useShakeToOpen(tanstackConfig.shakeToOpen !== false);
|
|
136
|
+
// Cmd/Ctrl+Shift+` — capture-phase so apps cannot swallow it. TanStack
|
|
137
|
+
// still receives openHotkey (US-layout e.key sequence) as a fallback.
|
|
138
|
+
useDevtoolsKeyboardTrigger(true);
|
|
136
139
|
|
|
137
140
|
const plugins = [
|
|
138
141
|
{
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
devtoolsOpenHotkey,
|
|
17
17
|
devtoolsShellPluginId,
|
|
18
18
|
devtoolsTriggerToggledEvent,
|
|
19
|
+
isDevtoolsOpenHotkeyEvent,
|
|
19
20
|
isMotionPermissionRequired,
|
|
20
21
|
motionMagnitude,
|
|
21
22
|
openDevtoolsShell,
|
|
@@ -30,6 +31,70 @@ function sample(magnitude: number) {
|
|
|
30
31
|
return { acceleration: { x: magnitude, y: 0, z: 0 } };
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
function keyEvent(init: {
|
|
35
|
+
metaKey?: boolean;
|
|
36
|
+
ctrlKey?: boolean;
|
|
37
|
+
shiftKey?: boolean;
|
|
38
|
+
altKey?: boolean;
|
|
39
|
+
key?: string;
|
|
40
|
+
code?: string;
|
|
41
|
+
}): KeyboardEvent {
|
|
42
|
+
return {
|
|
43
|
+
metaKey: false,
|
|
44
|
+
ctrlKey: false,
|
|
45
|
+
shiftKey: false,
|
|
46
|
+
altKey: false,
|
|
47
|
+
key: "",
|
|
48
|
+
code: "",
|
|
49
|
+
...init,
|
|
50
|
+
} as KeyboardEvent;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
describe("isDevtoolsOpenHotkeyEvent", () => {
|
|
54
|
+
it("matches Cmd+Shift+Backquote and Ctrl+Shift+Backquote", () => {
|
|
55
|
+
expect(
|
|
56
|
+
isDevtoolsOpenHotkeyEvent(
|
|
57
|
+
keyEvent({ metaKey: true, shiftKey: true, code: "Backquote", key: "~" }),
|
|
58
|
+
),
|
|
59
|
+
).toBe(true);
|
|
60
|
+
expect(
|
|
61
|
+
isDevtoolsOpenHotkeyEvent(
|
|
62
|
+
keyEvent({ ctrlKey: true, shiftKey: true, code: "Backquote", key: "~" }),
|
|
63
|
+
),
|
|
64
|
+
).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("matches by physical Backquote even when e.key is not tilde", () => {
|
|
68
|
+
// UK / ISO layouts produce ¬ or ` for Shift+Backquote; the physical key
|
|
69
|
+
// is still the one left of 1.
|
|
70
|
+
expect(
|
|
71
|
+
isDevtoolsOpenHotkeyEvent(
|
|
72
|
+
keyEvent({ metaKey: true, shiftKey: true, code: "Backquote", key: "¬" }),
|
|
73
|
+
),
|
|
74
|
+
).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it("rejects the unshifted Cmd/Ctrl+` combo macOS steals for window cycle", () => {
|
|
78
|
+
expect(
|
|
79
|
+
isDevtoolsOpenHotkeyEvent(keyEvent({ metaKey: true, code: "Backquote", key: "`" })),
|
|
80
|
+
).toBe(false);
|
|
81
|
+
expect(
|
|
82
|
+
isDevtoolsOpenHotkeyEvent(keyEvent({ ctrlKey: true, code: "Backquote", key: "`" })),
|
|
83
|
+
).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("rejects Shift+Backquote without Ctrl/Cmd and other keys with the modifiers", () => {
|
|
87
|
+
expect(
|
|
88
|
+
isDevtoolsOpenHotkeyEvent(keyEvent({ shiftKey: true, code: "Backquote", key: "~" })),
|
|
89
|
+
).toBe(false);
|
|
90
|
+
expect(
|
|
91
|
+
isDevtoolsOpenHotkeyEvent(
|
|
92
|
+
keyEvent({ metaKey: true, shiftKey: true, code: "KeyK", key: "K" }),
|
|
93
|
+
),
|
|
94
|
+
).toBe(false);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
33
98
|
describe("motionMagnitude", () => {
|
|
34
99
|
it("prefers the gravity-excluded acceleration reading", () => {
|
|
35
100
|
expect(
|
|
@@ -424,10 +489,17 @@ describe("devtools shell wiring", () => {
|
|
|
424
489
|
expect(shellSource).toContain("useShakeToOpen(tanstackConfig.shakeToOpen !== false)");
|
|
425
490
|
});
|
|
426
491
|
|
|
427
|
-
it("
|
|
428
|
-
|
|
429
|
-
//
|
|
492
|
+
it("binds Cmd/Ctrl+Shift+` (TanStack e.key for Shift+Backquote is ~)", () => {
|
|
493
|
+
// Unshifted Ctrl/Cmd+` is the macOS "cycle windows" shortcut — the
|
|
494
|
+
// page never sees it. Shift+Backquote produces e.key "~", and
|
|
495
|
+
// @solid-primitives/keyboard matches an exact e.key sequence, so the
|
|
496
|
+
// TanStack combo must include both Shift and "~". The capture-phase
|
|
497
|
+
// physical-key listener (e.code === "Backquote") is the source of
|
|
498
|
+
// truth across layouts; this constant is what TanStack's own matcher
|
|
499
|
+
// gets so it agrees on US keyboards.
|
|
500
|
+
expect(devtoolsOpenHotkey).toEqual(["CtrlOrMeta", "Shift", "~"]);
|
|
430
501
|
expect(shellSource).toContain("openHotkey: [...devtoolsOpenHotkey]");
|
|
502
|
+
expect(shellSource).toContain("useDevtoolsKeyboardTrigger(");
|
|
431
503
|
});
|
|
432
504
|
|
|
433
505
|
it("mounts shake-to-open with the config opt-out", () => {
|
|
@@ -6,12 +6,56 @@ import { useEffect } from "react";
|
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Keyboard shortcut that
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Keyboard shortcut that opens the devtools shell: Cmd+Shift+` on Mac,
|
|
10
|
+
* Ctrl+Shift+` elsewhere.
|
|
11
|
+
*
|
|
12
|
+
* Why this combo, and why `~`: unshifted Ctrl/Cmd+` is macOS "cycle
|
|
13
|
+
* windows" and never reaches the page. Shift+Backquote is the physical
|
|
14
|
+
* key the ticket names. `@tanstack/react-devtools` matches an exact
|
|
15
|
+
* `e.key` sequence via `@solid-primitives/keyboard`, and Shift+Backquote
|
|
16
|
+
* produces `e.key === "~"` on US layouts — so the TanStack config must
|
|
17
|
+
* be Shift + "~", not unshifted "`". The capture-phase listener in
|
|
18
|
+
* `useDevtoolsKeyboardTrigger` matches `e.code === "Backquote"` so
|
|
19
|
+
* non-US layouts (where Shift+Backquote is ¬ or `) still fire.
|
|
20
|
+
*
|
|
21
|
+
* Exported so tests pin the binding.
|
|
22
|
+
*/
|
|
23
|
+
export const devtoolsOpenHotkey = ["CtrlOrMeta", "Shift", "~"] as const;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* True when the event is the documented debugger shortcut. Prefers the
|
|
27
|
+
* physical Backquote key so it does not depend on keyboard layout;
|
|
28
|
+
* `e.key` of "`" or "~" is accepted as a fallback when `code` is absent
|
|
29
|
+
* (jsdom / synthetic events).
|
|
30
|
+
*/
|
|
31
|
+
export function isDevtoolsOpenHotkeyEvent(event: KeyboardEvent): boolean {
|
|
32
|
+
if (!(event.metaKey || event.ctrlKey) || !event.shiftKey || event.altKey) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (event.code === "Backquote") return true;
|
|
36
|
+
return event.key === "`" || event.key === "~";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Capture-phase window listener that opens the shell on the documented
|
|
41
|
+
* shortcut. Capture runs before app-level keydown handlers, so a page
|
|
42
|
+
* that stopPropagation's cannot swallow it. preventDefault +
|
|
43
|
+
* stopImmediatePropagation keep TanStack's own createShortcut from
|
|
44
|
+
* also firing (which would toggle the panel shut again).
|
|
13
45
|
*/
|
|
14
|
-
export
|
|
46
|
+
export function useDevtoolsKeyboardTrigger(enabled: boolean) {
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!enabled || typeof window === "undefined") return;
|
|
49
|
+
const onKeyDown = (event: KeyboardEvent) => {
|
|
50
|
+
if (!isDevtoolsOpenHotkeyEvent(event)) return;
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
event.stopImmediatePropagation();
|
|
53
|
+
openDevtoolsShell();
|
|
54
|
+
};
|
|
55
|
+
window.addEventListener("keydown", onKeyDown, { capture: true });
|
|
56
|
+
return () => window.removeEventListener("keydown", onKeyDown, { capture: true });
|
|
57
|
+
}, [enabled]);
|
|
58
|
+
}
|
|
15
59
|
|
|
16
60
|
// ---------------------------------------------------------------------------
|
|
17
61
|
// Programmatic open — the same event the devtools shell's own trigger emits
|
package/types/app/CreateApp.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface TanstackConfig {
|
|
|
20
20
|
* `debug`). Defaults to true whenever the devtools mount. On iOS 13+
|
|
21
21
|
* WebKit the motion permission is requested once from the user's first
|
|
22
22
|
* tap; Android and desktop need no permission (desktop simply never
|
|
23
|
-
* fires devicemotion — use
|
|
23
|
+
* fires devicemotion — use Cmd/Ctrl+Shift+` there). Set false to
|
|
24
24
|
* keep the keyboard shortcut as the only trigger.
|
|
25
25
|
*/
|
|
26
26
|
shakeToOpen?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TanstackDevtools.d.ts","sourceRoot":"","sources":["../../src/app/TanstackDevtools.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoClD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;CAChC;AAkED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,cAAc,EACd,cAAc,GACf,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"TanstackDevtools.d.ts","sourceRoot":"","sources":["../../src/app/TanstackDevtools.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoClD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;CAChC;AAkED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,cAAc,EACd,cAAc,GACf,EAAE,qBAAqB,2CAoEvB"}
|
|
@@ -1,10 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Keyboard shortcut that
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Keyboard shortcut that opens the devtools shell: Cmd+Shift+` on Mac,
|
|
3
|
+
* Ctrl+Shift+` elsewhere.
|
|
4
|
+
*
|
|
5
|
+
* Why this combo, and why `~`: unshifted Ctrl/Cmd+` is macOS "cycle
|
|
6
|
+
* windows" and never reaches the page. Shift+Backquote is the physical
|
|
7
|
+
* key the ticket names. `@tanstack/react-devtools` matches an exact
|
|
8
|
+
* `e.key` sequence via `@solid-primitives/keyboard`, and Shift+Backquote
|
|
9
|
+
* produces `e.key === "~"` on US layouts — so the TanStack config must
|
|
10
|
+
* be Shift + "~", not unshifted "`". The capture-phase listener in
|
|
11
|
+
* `useDevtoolsKeyboardTrigger` matches `e.code === "Backquote"` so
|
|
12
|
+
* non-US layouts (where Shift+Backquote is ¬ or `) still fire.
|
|
13
|
+
*
|
|
14
|
+
* Exported so tests pin the binding.
|
|
15
|
+
*/
|
|
16
|
+
export declare const devtoolsOpenHotkey: readonly ["CtrlOrMeta", "Shift", "~"];
|
|
17
|
+
/**
|
|
18
|
+
* True when the event is the documented debugger shortcut. Prefers the
|
|
19
|
+
* physical Backquote key so it does not depend on keyboard layout;
|
|
20
|
+
* `e.key` of "`" or "~" is accepted as a fallback when `code` is absent
|
|
21
|
+
* (jsdom / synthetic events).
|
|
22
|
+
*/
|
|
23
|
+
export declare function isDevtoolsOpenHotkeyEvent(event: KeyboardEvent): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Capture-phase window listener that opens the shell on the documented
|
|
26
|
+
* shortcut. Capture runs before app-level keydown handlers, so a page
|
|
27
|
+
* that stopPropagation's cannot swallow it. preventDefault +
|
|
28
|
+
* stopImmediatePropagation keep TanStack's own createShortcut from
|
|
29
|
+
* also firing (which would toggle the panel shut again).
|
|
6
30
|
*/
|
|
7
|
-
export declare
|
|
31
|
+
export declare function useDevtoolsKeyboardTrigger(enabled: boolean): void;
|
|
8
32
|
/**
|
|
9
33
|
* Plugin id of the TanStack Devtools shell's internal event client
|
|
10
34
|
* (`devtoolsEventClient` in `@tanstack/devtools-client`). The shell
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsTrigger.d.ts","sourceRoot":"","sources":["../../src/app/devtoolsTrigger.ts"],"names":[],"mappings":"AAOA
|
|
1
|
+
{"version":3,"file":"devtoolsTrigger.d.ts","sourceRoot":"","sources":["../../src/app/devtoolsTrigger.ts"],"names":[],"mappings":"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"}
|