@tanstack/hotkeys-devtools 0.1.3 → 0.3.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/dist/HotkeysContextProvider.js +13 -3
- package/dist/HotkeysContextProvider.js.map +1 -1
- package/dist/components/ActionButtons.js +7 -2
- package/dist/components/ActionButtons.js.map +1 -1
- package/dist/components/DetailsPanel.js +458 -215
- package/dist/components/DetailsPanel.js.map +1 -1
- package/dist/components/HotkeyList.js +294 -139
- package/dist/components/HotkeyList.js.map +1 -1
- package/dist/components/Shell.js +3 -1
- package/dist/components/Shell.js.map +1 -1
- package/package.json +2 -2
- package/src/HotkeysContextProvider.tsx +33 -5
- package/src/components/ActionButtons.tsx +18 -5
- package/src/components/DetailsPanel.tsx +500 -204
- package/src/components/HotkeyList.tsx +195 -2
- package/src/components/Shell.tsx +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shell.js","names":["createMemo","createSignal","onCleanup","onMount","Header","HeaderLogo","MainPanel","useStyles","useHotkeysDevtoolsState","HeldKeysBar","HotkeyList","DetailsPanel","Shell","styles","state","selectedId","setSelectedId","leftPanelWidth","setLeftPanelWidth","isDragging","setIsDragging","selectedRegistration","id","registrations","find","r","dragStartX","dragStartWidth","handleMouseDown","e","MouseEvent","preventDefault","stopPropagation","document","body","style","cursor","userSelect","clientX","handleMouseMove","deltaX","newWidth","Math","max","min","handleMouseUp","addEventListener","removeEventListener","_$createComponent","children","flavor","light","dark","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_$insert","$$mousedown","_$effect","_p$","_v$","mainContainer","_v$2","panelsContainer","_v$3","leftPanel","_v$4","_v$5","dragHandle","_v$6","rightPanel","_v$7","panelHeader","_$className","t","a","o","_$setStyleProperty","i","n","s","undefined","_$delegateEvents"],"sources":["../../src/components/Shell.tsx"],"sourcesContent":["import { createMemo, createSignal, onCleanup, onMount } from 'solid-js'\nimport { Header, HeaderLogo, MainPanel } from '@tanstack/devtools-ui'\nimport { useStyles } from '../styles/use-styles'\nimport { useHotkeysDevtoolsState } from '../HotkeysContextProvider'\nimport { HeldKeysBar } from './HeldKeysTopbar'\nimport { HotkeyList } from './HotkeyList'\nimport { DetailsPanel } from './DetailsPanel'\n\nexport function Shell() {\n const styles = useStyles()\n const state = useHotkeysDevtoolsState()\n const [selectedId, setSelectedId] = createSignal<string | null>(null)\n const [leftPanelWidth, setLeftPanelWidth] = createSignal(300)\n const [isDragging, setIsDragging] = createSignal(false)\n\n const selectedRegistration = createMemo(() => {\n const id = selectedId()\n if (!id) return null\n
|
|
1
|
+
{"version":3,"file":"Shell.js","names":["createMemo","createSignal","onCleanup","onMount","Header","HeaderLogo","MainPanel","useStyles","useHotkeysDevtoolsState","HeldKeysBar","HotkeyList","DetailsPanel","Shell","styles","state","selectedId","setSelectedId","leftPanelWidth","setLeftPanelWidth","isDragging","setIsDragging","selectedRegistration","id","hotkey","registrations","find","r","sequence","sequenceRegistrations","dragStartX","dragStartWidth","handleMouseDown","e","MouseEvent","preventDefault","stopPropagation","document","body","style","cursor","userSelect","clientX","handleMouseMove","deltaX","newWidth","Math","max","min","handleMouseUp","addEventListener","removeEventListener","_$createComponent","children","flavor","light","dark","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","_$insert","$$mousedown","_$effect","_p$","_v$","mainContainer","_v$2","panelsContainer","_v$3","leftPanel","_v$4","_v$5","dragHandle","_v$6","rightPanel","_v$7","panelHeader","_$className","t","a","o","_$setStyleProperty","i","n","s","undefined","_$delegateEvents"],"sources":["../../src/components/Shell.tsx"],"sourcesContent":["import { createMemo, createSignal, onCleanup, onMount } from 'solid-js'\nimport { Header, HeaderLogo, MainPanel } from '@tanstack/devtools-ui'\nimport { useStyles } from '../styles/use-styles'\nimport { useHotkeysDevtoolsState } from '../HotkeysContextProvider'\nimport { HeldKeysBar } from './HeldKeysTopbar'\nimport { HotkeyList } from './HotkeyList'\nimport { DetailsPanel } from './DetailsPanel'\n\nexport function Shell() {\n const styles = useStyles()\n const state = useHotkeysDevtoolsState()\n const [selectedId, setSelectedId] = createSignal<string | null>(null)\n const [leftPanelWidth, setLeftPanelWidth] = createSignal(300)\n const [isDragging, setIsDragging] = createSignal(false)\n\n const selectedRegistration = createMemo(() => {\n const id = selectedId()\n if (!id) return null\n const hotkey = state.registrations().find((r) => r.id === id)\n if (hotkey) return hotkey\n const sequence = state.sequenceRegistrations().find((r) => r.id === id)\n return sequence ?? null\n })\n\n let dragStartX = 0\n let dragStartWidth = 0\n\n const handleMouseDown = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragging(true)\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n dragStartX = e.clientX\n dragStartWidth = leftPanelWidth()\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging()) return\n\n e.preventDefault()\n const deltaX = e.clientX - dragStartX\n const newWidth = Math.max(150, Math.min(800, dragStartWidth + deltaX))\n setLeftPanelWidth(newWidth)\n }\n\n const handleMouseUp = () => {\n setIsDragging(false)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n\n onMount(() => {\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n })\n\n onCleanup(() => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n })\n\n return (\n <MainPanel>\n <Header>\n <HeaderLogo\n flavor={{\n light: 'oklch(51.4% 0.222 16.935)',\n dark: 'oklch(58.6% 0.253 17.585)',\n }}\n >\n TanStack Hotkeys\n </HeaderLogo>\n </Header>\n\n <div class={styles().mainContainer}>\n <HeldKeysBar />\n\n <div class={styles().panelsContainer}>\n <div\n class={styles().leftPanel}\n style={{\n width: `${leftPanelWidth()}px`,\n 'min-width': '150px',\n 'max-width': '800px',\n }}\n >\n <HotkeyList selectedId={selectedId} setSelectedId={setSelectedId} />\n </div>\n\n <div\n class={`${styles().dragHandle} ${isDragging() ? 'dragging' : ''}`}\n onMouseDown={handleMouseDown}\n />\n\n <div class={styles().rightPanel} style={{ flex: 1 }}>\n <div class={styles().panelHeader}>Details</div>\n <DetailsPanel selectedRegistration={selectedRegistration} />\n </div>\n </div>\n </div>\n </MainPanel>\n )\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/hotkeys-devtools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Devtools for TanStack Hotkeys",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"src"
|
|
38
38
|
],
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@tanstack/hotkeys": "0.
|
|
40
|
+
"@tanstack/hotkeys": "0.3.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@tanstack/devtools-ui": "^0.4.4",
|
|
@@ -5,30 +5,43 @@ import {
|
|
|
5
5
|
onCleanup,
|
|
6
6
|
useContext,
|
|
7
7
|
} from 'solid-js'
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
HotkeyManager,
|
|
10
|
+
KeyStateTracker,
|
|
11
|
+
SequenceManager,
|
|
12
|
+
} from '@tanstack/hotkeys'
|
|
9
13
|
import type { Accessor } from 'solid-js'
|
|
10
|
-
import type {
|
|
14
|
+
import type {
|
|
15
|
+
HotkeyRegistration,
|
|
16
|
+
SequenceRegistrationView,
|
|
17
|
+
} from '@tanstack/hotkeys'
|
|
11
18
|
|
|
12
19
|
interface HotkeysDevtoolsContextType {
|
|
13
20
|
registrations: Accessor<Array<HotkeyRegistration>>
|
|
21
|
+
sequenceRegistrations: Accessor<Array<SequenceRegistrationView>>
|
|
14
22
|
heldKeys: Accessor<Array<string>>
|
|
15
23
|
heldCodes: Accessor<Record<string, string>>
|
|
16
24
|
}
|
|
17
25
|
|
|
18
26
|
const HotkeysDevtoolsContext = createContext<HotkeysDevtoolsContextType>({
|
|
19
27
|
registrations: () => [],
|
|
28
|
+
sequenceRegistrations: () => [],
|
|
20
29
|
heldKeys: () => [],
|
|
21
30
|
heldCodes: () => ({}),
|
|
22
31
|
})
|
|
23
32
|
|
|
24
33
|
export function HotkeysContextProvider(props: { children: any }) {
|
|
25
34
|
const manager = HotkeyManager.getInstance()
|
|
35
|
+
const sequenceManager = SequenceManager.getInstance()
|
|
26
36
|
const tracker = KeyStateTracker.getInstance()
|
|
27
37
|
|
|
28
38
|
// Create local signals that will be updated by subscriptions
|
|
29
39
|
const [registrations, setRegistrations] = createSignal<
|
|
30
40
|
Array<HotkeyRegistration>
|
|
31
41
|
>(Array.from(manager.registrations.state.values()))
|
|
42
|
+
const [sequenceRegistrations, setSequenceRegistrations] = createSignal<
|
|
43
|
+
Array<SequenceRegistrationView>
|
|
44
|
+
>(Array.from(sequenceManager.registrations.state.values()))
|
|
32
45
|
const [heldKeys, setHeldKeys] = createSignal<Array<string>>(
|
|
33
46
|
tracker.store.state.heldKeys,
|
|
34
47
|
)
|
|
@@ -40,7 +53,17 @@ export function HotkeysContextProvider(props: { children: any }) {
|
|
|
40
53
|
createEffect(() => {
|
|
41
54
|
const unsubscribe = manager.registrations.subscribe(() => {
|
|
42
55
|
setRegistrations(Array.from(manager.registrations.state.values()))
|
|
43
|
-
})
|
|
56
|
+
}).unsubscribe
|
|
57
|
+
onCleanup(() => unsubscribe())
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
// Subscribe to SequenceManager registrations store
|
|
61
|
+
createEffect(() => {
|
|
62
|
+
const unsubscribe = sequenceManager.registrations.subscribe(() => {
|
|
63
|
+
setSequenceRegistrations(
|
|
64
|
+
Array.from(sequenceManager.registrations.state.values()),
|
|
65
|
+
)
|
|
66
|
+
}).unsubscribe
|
|
44
67
|
onCleanup(() => unsubscribe())
|
|
45
68
|
})
|
|
46
69
|
|
|
@@ -49,13 +72,18 @@ export function HotkeysContextProvider(props: { children: any }) {
|
|
|
49
72
|
const unsubscribe = tracker.store.subscribe(() => {
|
|
50
73
|
setHeldKeys(tracker.store.state.heldKeys)
|
|
51
74
|
setHeldCodes(tracker.store.state.heldCodes)
|
|
52
|
-
})
|
|
75
|
+
}).unsubscribe
|
|
53
76
|
onCleanup(() => unsubscribe())
|
|
54
77
|
})
|
|
55
78
|
|
|
56
79
|
return (
|
|
57
80
|
<HotkeysDevtoolsContext.Provider
|
|
58
|
-
value={{
|
|
81
|
+
value={{
|
|
82
|
+
registrations,
|
|
83
|
+
sequenceRegistrations,
|
|
84
|
+
heldKeys,
|
|
85
|
+
heldCodes,
|
|
86
|
+
}}
|
|
59
87
|
>
|
|
60
88
|
{props.children}
|
|
61
89
|
</HotkeysDevtoolsContext.Provider>
|
|
@@ -1,17 +1,30 @@
|
|
|
1
|
-
import { HotkeyManager } from '@tanstack/hotkeys'
|
|
1
|
+
import { HotkeyManager, SequenceManager } from '@tanstack/hotkeys'
|
|
2
2
|
import { useStyles } from '../styles/use-styles'
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
HotkeyRegistration,
|
|
5
|
+
SequenceRegistrationView,
|
|
6
|
+
} from '@tanstack/hotkeys'
|
|
4
7
|
|
|
5
8
|
type ActionButtonsProps = {
|
|
6
|
-
registration: HotkeyRegistration
|
|
9
|
+
registration: HotkeyRegistration | SequenceRegistrationView
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function isSequenceRegistration(
|
|
13
|
+
reg: HotkeyRegistration | SequenceRegistrationView,
|
|
14
|
+
): reg is SequenceRegistrationView {
|
|
15
|
+
return 'sequence' in reg && Array.isArray(reg.sequence)
|
|
7
16
|
}
|
|
8
17
|
|
|
9
18
|
export function ActionButtons(props: ActionButtonsProps) {
|
|
10
19
|
const styles = useStyles()
|
|
11
20
|
|
|
12
21
|
const handleTrigger = () => {
|
|
13
|
-
const
|
|
14
|
-
|
|
22
|
+
const reg = props.registration
|
|
23
|
+
if (isSequenceRegistration(reg)) {
|
|
24
|
+
SequenceManager.getInstance().triggerSequence(reg.id)
|
|
25
|
+
} else {
|
|
26
|
+
HotkeyManager.getInstance().triggerRegistration(reg.id)
|
|
27
|
+
}
|
|
15
28
|
}
|
|
16
29
|
|
|
17
30
|
return (
|