@tanstack/hotkeys-devtools 0.9.0 → 1.1.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.
Files changed (42) hide show
  1. package/README.md +15 -1
  2. package/dist/HotkeysContextProvider.js +1 -2
  3. package/dist/_registrations.js +47 -0
  4. package/dist/components/ActionButtons.js +2 -3
  5. package/dist/components/DetailsPanel.js +317 -325
  6. package/dist/components/HeldKeysTopbar.js +5 -3
  7. package/dist/components/HotkeyList.js +167 -196
  8. package/dist/components/Shell.js +5 -4
  9. package/dist/components/index.js +1 -2
  10. package/dist/core.d.ts +3 -6
  11. package/dist/core.js +1 -2
  12. package/dist/index.d.ts +2 -4
  13. package/dist/index.js +1 -2
  14. package/dist/sequence-progress.js +1 -2
  15. package/dist/styles/tokens.js +1 -2
  16. package/dist/styles/use-styles.js +5 -4
  17. package/package.json +11 -11
  18. package/dist/HotkeysContextProvider.js.map +0 -1
  19. package/dist/components/ActionButtons.js.map +0 -1
  20. package/dist/components/DetailsPanel.js.map +0 -1
  21. package/dist/components/HeldKeysTopbar.js.map +0 -1
  22. package/dist/components/HotkeyList.js.map +0 -1
  23. package/dist/components/Shell.js.map +0 -1
  24. package/dist/components/index.js.map +0 -1
  25. package/dist/core.js.map +0 -1
  26. package/dist/index.js.map +0 -1
  27. package/dist/sequence-progress.js.map +0 -1
  28. package/dist/styles/tokens.js.map +0 -1
  29. package/dist/styles/use-styles.js.map +0 -1
  30. package/src/HotkeysContextProvider.tsx +0 -130
  31. package/src/components/ActionButtons.tsx +0 -38
  32. package/src/components/DetailsPanel.tsx +0 -829
  33. package/src/components/HeldKeysTopbar.tsx +0 -46
  34. package/src/components/HotkeyList.tsx +0 -565
  35. package/src/components/Shell.tsx +0 -171
  36. package/src/components/index.tsx +0 -19
  37. package/src/core.tsx +0 -11
  38. package/src/index.ts +0 -11
  39. package/src/production.ts +0 -5
  40. package/src/sequence-progress.ts +0 -29
  41. package/src/styles/tokens.ts +0 -305
  42. package/src/styles/use-styles.ts +0 -687
package/README.md CHANGED
@@ -1,5 +1,19 @@
1
1
  <div align="center">
2
- <img src="./media/header_hotkeys.png" alt="TanStack Hotkeys" />
2
+ <picture>
3
+ <source
4
+ media="(prefers-color-scheme: dark)"
5
+ srcset="https://tanstack.com/api/readme/hotkeys.png?theme=dark"
6
+ />
7
+ <source
8
+ media="(prefers-color-scheme: light)"
9
+ srcset="https://tanstack.com/api/readme/hotkeys.png"
10
+ />
11
+ <img
12
+ src="https://tanstack.com/api/readme/hotkeys.png"
13
+ alt="TanStack Hotkeys"
14
+ width="900"
15
+ />
16
+ </picture>
3
17
  </div>
4
18
 
5
19
  <br />
@@ -76,5 +76,4 @@ function useHotkeysDevtoolsState() {
76
76
  }
77
77
 
78
78
  //#endregion
79
- export { HotkeysContextProvider, useHotkeysDevtoolsState };
80
- //# sourceMappingURL=HotkeysContextProvider.js.map
79
+ export { HotkeysContextProvider, useHotkeysDevtoolsState };
@@ -0,0 +1,47 @@
1
+ import { useHotkeysDevtoolsState } from "./HotkeysContextProvider.js";
2
+ import { createMemo } from "solid-js";
3
+ import { findHotkeyConflicts, formatForDisplay, parseHotkey } from "@tanstack/hotkeys";
4
+
5
+ //#region src/_registrations.ts
6
+ /** Refresh shared conflict reporting when either registry changes. */
7
+ function useRegistrationConflicts(registration) {
8
+ const state = useHotkeysDevtoolsState();
9
+ return createMemo(() => {
10
+ state.registrations();
11
+ state.sequenceRegistrations();
12
+ const reg = registration();
13
+ if (reg.options.enabled === false) return {
14
+ overlapping: [],
15
+ separate: []
16
+ };
17
+ const binding = "sequence" in reg ? reg.sequence : reg.hotkey;
18
+ const options = {
19
+ target: reg.target,
20
+ platform: reg.options.platform,
21
+ eventType: reg.options.eventType,
22
+ excludeIds: [reg.id]
23
+ };
24
+ const overlapping = findHotkeyConflicts(binding, options).map((c) => c.registration);
25
+ const ids = new Set(overlapping.map((r) => r.id));
26
+ return {
27
+ overlapping,
28
+ separate: findHotkeyConflicts(binding, {
29
+ ...options,
30
+ scope: "all"
31
+ }).map((c) => c.registration).filter((r) => !ids.has(r.id))
32
+ };
33
+ });
34
+ }
35
+ /** Format either kind of registration, respecting its platform and physical labels. */
36
+ function formatRegistration(reg) {
37
+ return ("sequence" in reg ? reg.sequence : [reg.hotkey]).map((step) => formatForDisplay(step, { platform: reg.options.platform })).join(" → ");
38
+ }
39
+ /** Sequences may mix logical keys and physical codes, so report both when needed. */
40
+ function getBindingKind(reg) {
41
+ const parsed = "sequence" in reg ? reg.sequence.map((step) => parseHotkey(step, reg.options.platform)) : [reg.parsedHotkey];
42
+ const codes = parsed.filter((step) => step.code !== void 0).length;
43
+ return codes === 0 ? "Key" : codes === parsed.length ? "Code" : "Mixed";
44
+ }
45
+
46
+ //#endregion
47
+ export { formatRegistration, getBindingKind, useRegistrationConflicts };
@@ -3,7 +3,7 @@ import { className, delegateEvents, effect, template } from "solid-js/web";
3
3
  import { HotkeyManager, SequenceManager } from "@tanstack/hotkeys";
4
4
 
5
5
  //#region src/components/ActionButtons.tsx
6
- var _tmpl$ = /* @__PURE__ */ template(`<div><button><span></span>Trigger`);
6
+ var _tmpl$ = /*#__PURE__*/ template(`<div><button><span></span>Trigger`);
7
7
  function isSequenceRegistration(reg) {
8
8
  return "sequence" in reg && Array.isArray(reg.sequence);
9
9
  }
@@ -34,5 +34,4 @@ function ActionButtons(props) {
34
34
  delegateEvents(["mousedown"]);
35
35
 
36
36
  //#endregion
37
- export { ActionButtons };
38
- //# sourceMappingURL=ActionButtons.js.map
37
+ export { ActionButtons };