@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.
@@ -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 return state.registrations().find((r) => r.id === id) ?? 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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"}
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.1.3",
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.1.3"
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 { HotkeyManager, KeyStateTracker } from '@tanstack/hotkeys'
8
+ import {
9
+ HotkeyManager,
10
+ KeyStateTracker,
11
+ SequenceManager,
12
+ } from '@tanstack/hotkeys'
9
13
  import type { Accessor } from 'solid-js'
10
- import type { HotkeyRegistration } from '@tanstack/hotkeys'
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={{ registrations, heldKeys, heldCodes }}
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 { HotkeyRegistration } from '@tanstack/hotkeys'
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 manager = HotkeyManager.getInstance()
14
- manager.triggerRegistration(props.registration.id)
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 (