tuiuiu.js 0.1.1 → 0.1.4-next.2b42a16
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/README.md +100 -42
- package/dist/atoms/button.d.ts.map +1 -1
- package/dist/atoms/button.js +17 -9
- package/dist/atoms/button.js.map +1 -1
- package/dist/atoms/text-input.d.ts +2 -0
- package/dist/atoms/text-input.d.ts.map +1 -1
- package/dist/atoms/text-input.js +13 -7
- package/dist/atoms/text-input.js.map +1 -1
- package/dist/atoms/tooltip.d.ts.map +1 -1
- package/dist/atoms/tooltip.js +2 -1
- package/dist/atoms/tooltip.js.map +1 -1
- package/dist/cli/commands/help.d.ts +5 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +31 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +11 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +21 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/storybook.d.ts +5 -0
- package/dist/cli/commands/storybook.d.ts.map +1 -0
- package/dist/cli/commands/storybook.js +9 -0
- package/dist/cli/commands/storybook.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/error-boundary.d.ts.map +1 -1
- package/dist/core/error-boundary.js +2 -1
- package/dist/core/error-boundary.js.map +1 -1
- package/dist/core/hotkeys.d.ts +62 -0
- package/dist/core/hotkeys.d.ts.map +1 -0
- package/dist/core/hotkeys.js +0 -0
- package/dist/core/hotkeys.js.map +1 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/screen.d.ts.map +1 -1
- package/dist/core/screen.js +2 -0
- package/dist/core/screen.js.map +1 -1
- package/dist/core/theme.d.ts +79 -0
- package/dist/core/theme.d.ts.map +1 -1
- package/dist/core/theme.js +358 -0
- package/dist/core/theme.js.map +1 -1
- package/dist/design-system/data-display/index.d.ts +9 -6
- package/dist/design-system/data-display/index.d.ts.map +1 -1
- package/dist/design-system/data-display/index.js +16 -7
- package/dist/design-system/data-display/index.js.map +1 -1
- package/dist/design-system/feedback/badge.d.ts +21 -4
- package/dist/design-system/feedback/badge.d.ts.map +1 -1
- package/dist/design-system/feedback/badge.js +15 -2
- package/dist/design-system/feedback/badge.js.map +1 -1
- package/dist/design-system/forms/index.d.ts +11 -8
- package/dist/design-system/forms/index.d.ts.map +1 -1
- package/dist/design-system/forms/index.js +19 -10
- package/dist/design-system/forms/index.js.map +1 -1
- package/dist/design-system/layout/index.d.ts +7 -4
- package/dist/design-system/layout/index.d.ts.map +1 -1
- package/dist/design-system/layout/index.js +18 -6
- package/dist/design-system/layout/index.js.map +1 -1
- package/dist/design-system/media/picture.d.ts.map +1 -1
- package/dist/design-system/media/picture.js +2 -1
- package/dist/design-system/media/picture.js.map +1 -1
- package/dist/design-system/overlays/index.d.ts +6 -3
- package/dist/design-system/overlays/index.d.ts.map +1 -1
- package/dist/design-system/overlays/index.js +9 -3
- package/dist/design-system/overlays/index.js.map +1 -1
- package/dist/design-system/visual/splash-screen.d.ts.map +1 -1
- package/dist/design-system/visual/splash-screen.js +38 -18
- package/dist/design-system/visual/splash-screen.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-hotkeys.d.ts +153 -0
- package/dist/hooks/use-hotkeys.d.ts.map +1 -0
- package/dist/hooks/use-hotkeys.js +379 -0
- package/dist/hooks/use-hotkeys.js.map +1 -0
- package/dist/hooks/use-input.d.ts +2 -10
- package/dist/hooks/use-input.d.ts.map +1 -1
- package/dist/hooks/use-input.js +2 -287
- package/dist/hooks/use-input.js.map +1 -1
- package/dist/hooks/use-mouse.d.ts +5 -0
- package/dist/hooks/use-mouse.d.ts.map +1 -1
- package/dist/hooks/use-mouse.js +29 -11
- package/dist/hooks/use-mouse.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/docs-data.d.ts +31 -0
- package/dist/mcp/docs-data.d.ts.map +1 -0
- package/dist/mcp/docs-data.js +637 -0
- package/dist/mcp/docs-data.js.map +1 -0
- package/dist/mcp/index.d.ts +14 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +12 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +597 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/types.d.ts +114 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +16 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/molecules/autocomplete.d.ts.map +1 -1
- package/dist/molecules/autocomplete.js +2 -1
- package/dist/molecules/autocomplete.js.map +1 -1
- package/dist/molecules/calendar.d.ts.map +1 -1
- package/dist/molecules/calendar.js +5 -3
- package/dist/molecules/calendar.js.map +1 -1
- package/dist/molecules/data-viz/annotations.d.ts +75 -0
- package/dist/molecules/data-viz/annotations.d.ts.map +1 -0
- package/dist/molecules/data-viz/annotations.js +40 -0
- package/dist/molecules/data-viz/annotations.js.map +1 -0
- package/dist/molecules/data-viz/gantt-chart.d.ts +66 -0
- package/dist/molecules/data-viz/gantt-chart.d.ts.map +1 -0
- package/dist/molecules/data-viz/gantt-chart.js +134 -0
- package/dist/molecules/data-viz/gantt-chart.js.map +1 -0
- package/dist/molecules/data-viz/gauge.d.ts +2 -2
- package/dist/molecules/data-viz/gauge.d.ts.map +1 -1
- package/dist/molecules/data-viz/gauge.js +24 -8
- package/dist/molecules/data-viz/gauge.js.map +1 -1
- package/dist/molecules/data-viz/heatmap.d.ts +8 -2
- package/dist/molecules/data-viz/heatmap.d.ts.map +1 -1
- package/dist/molecules/data-viz/heatmap.js +41 -9
- package/dist/molecules/data-viz/heatmap.js.map +1 -1
- package/dist/molecules/data-viz/hooks.d.ts +264 -0
- package/dist/molecules/data-viz/hooks.d.ts.map +1 -0
- package/dist/molecules/data-viz/hooks.js +373 -0
- package/dist/molecules/data-viz/hooks.js.map +1 -0
- package/dist/molecules/data-viz/index.d.ts +14 -0
- package/dist/molecules/data-viz/index.d.ts.map +1 -1
- package/dist/molecules/data-viz/index.js +14 -0
- package/dist/molecules/data-viz/index.js.map +1 -1
- package/dist/molecules/data-viz/legend.d.ts +82 -0
- package/dist/molecules/data-viz/legend.d.ts.map +1 -0
- package/dist/molecules/data-viz/legend.js +146 -0
- package/dist/molecules/data-viz/legend.js.map +1 -0
- package/dist/molecules/data-viz/line-chart.d.ts.map +1 -1
- package/dist/molecules/data-viz/line-chart.js +48 -12
- package/dist/molecules/data-viz/line-chart.js.map +1 -1
- package/dist/molecules/data-viz/radar-chart.d.ts +61 -0
- package/dist/molecules/data-viz/radar-chart.d.ts.map +1 -0
- package/dist/molecules/data-viz/radar-chart.js +86 -0
- package/dist/molecules/data-viz/radar-chart.js.map +1 -0
- package/dist/molecules/data-viz/scatter-plot.d.ts +97 -0
- package/dist/molecules/data-viz/scatter-plot.d.ts.map +1 -0
- package/dist/molecules/data-viz/scatter-plot.js +205 -0
- package/dist/molecules/data-viz/scatter-plot.js.map +1 -0
- package/dist/molecules/data-viz/time-heatmap.d.ts +48 -0
- package/dist/molecules/data-viz/time-heatmap.d.ts.map +1 -0
- package/dist/molecules/data-viz/time-heatmap.js +145 -0
- package/dist/molecules/data-viz/time-heatmap.js.map +1 -0
- package/dist/molecules/select.d.ts +2 -0
- package/dist/molecules/select.d.ts.map +1 -1
- package/dist/molecules/select.js +4 -3
- package/dist/molecules/select.js.map +1 -1
- package/dist/molecules/tabs.d.ts.map +1 -1
- package/dist/molecules/tabs.js +14 -2
- package/dist/molecules/tabs.js.map +1 -1
- package/dist/organisms/command-palette.d.ts.map +1 -1
- package/dist/organisms/command-palette.js +2 -1
- package/dist/organisms/command-palette.js.map +1 -1
- package/dist/storybook/app.d.ts.map +1 -1
- package/dist/storybook/app.js +53 -44
- package/dist/storybook/app.js.map +1 -1
- package/dist/storybook/components/compare-view.d.ts.map +1 -1
- package/dist/storybook/components/compare-view.js +19 -18
- package/dist/storybook/components/compare-view.js.map +1 -1
- package/dist/storybook/components/log-viewer.d.ts.map +1 -1
- package/dist/storybook/components/log-viewer.js +9 -8
- package/dist/storybook/components/log-viewer.js.map +1 -1
- package/dist/storybook/components/preview.d.ts.map +1 -1
- package/dist/storybook/components/preview.js +34 -33
- package/dist/storybook/components/preview.js.map +1 -1
- package/dist/storybook/components/sidebar.d.ts.map +1 -1
- package/dist/storybook/components/sidebar.js +21 -20
- package/dist/storybook/components/sidebar.js.map +1 -1
- package/dist/storybook/stories/apps/index.d.ts.map +1 -1
- package/dist/storybook/stories/apps/index.js +306 -209
- package/dist/storybook/stories/apps/index.js.map +1 -1
- package/dist/storybook/stories/atoms/index.d.ts.map +1 -1
- package/dist/storybook/stories/atoms/index.js.map +1 -1
- package/dist/storybook/stories/molecules/index.d.ts +25 -0
- package/dist/storybook/stories/molecules/index.d.ts.map +1 -1
- package/dist/storybook/stories/molecules/index.js +402 -20
- package/dist/storybook/stories/molecules/index.js.map +1 -1
- package/dist/storybook/stories/organisms/index.d.ts.map +1 -1
- package/dist/storybook/stories/organisms/index.js +1 -1
- package/dist/storybook/stories/organisms/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/system-data.d.ts +73 -0
- package/dist/utils/system-data.d.ts.map +1 -0
- package/dist/utils/system-data.js +367 -0
- package/dist/utils/system-data.js.map +1 -0
- package/dist/version.d.ts +43 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +82 -0
- package/dist/version.js.map +1 -0
- package/package.json +22 -22
- package/dist/components/canvas.d.ts +0 -322
- package/dist/components/canvas.d.ts.map +0 -1
- package/dist/components/canvas.js +0 -833
- package/dist/components/canvas.js.map +0 -1
- package/dist/components/code-block.d.ts +0 -75
- package/dist/components/code-block.d.ts.map +0 -1
- package/dist/components/code-block.js +0 -322
- package/dist/components/code-block.js.map +0 -1
- package/dist/components/components.d.ts +0 -122
- package/dist/components/components.d.ts.map +0 -1
- package/dist/components/components.js +0 -151
- package/dist/components/components.js.map +0 -1
- package/dist/components/data-viz/bar-chart.d.ts +0 -167
- package/dist/components/data-viz/bar-chart.d.ts.map +0 -1
- package/dist/components/data-viz/bar-chart.js +0 -375
- package/dist/components/data-viz/bar-chart.js.map +0 -1
- package/dist/components/data-viz/gauge.d.ts +0 -163
- package/dist/components/data-viz/gauge.d.ts.map +0 -1
- package/dist/components/data-viz/gauge.js +0 -451
- package/dist/components/data-viz/gauge.js.map +0 -1
- package/dist/components/data-viz/heatmap.d.ts +0 -154
- package/dist/components/data-viz/heatmap.d.ts.map +0 -1
- package/dist/components/data-viz/heatmap.js +0 -458
- package/dist/components/data-viz/heatmap.js.map +0 -1
- package/dist/components/data-viz/index.d.ts +0 -16
- package/dist/components/data-viz/index.d.ts.map +0 -1
- package/dist/components/data-viz/index.js +0 -16
- package/dist/components/data-viz/index.js.map +0 -1
- package/dist/components/data-viz/line-chart.d.ts +0 -157
- package/dist/components/data-viz/line-chart.d.ts.map +0 -1
- package/dist/components/data-viz/line-chart.js +0 -578
- package/dist/components/data-viz/line-chart.js.map +0 -1
- package/dist/components/data-viz/sparkline.d.ts +0 -156
- package/dist/components/data-viz/sparkline.d.ts.map +0 -1
- package/dist/components/data-viz/sparkline.js +0 -325
- package/dist/components/data-viz/sparkline.js.map +0 -1
- package/dist/components/grid.d.ts +0 -234
- package/dist/components/grid.d.ts.map +0 -1
- package/dist/components/grid.js +0 -719
- package/dist/components/grid.js.map +0 -1
- package/dist/components/index.d.ts +0 -33
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -69
- package/dist/components/index.js.map +0 -1
- package/dist/components/markdown.d.ts +0 -52
- package/dist/components/markdown.d.ts.map +0 -1
- package/dist/components/markdown.js +0 -341
- package/dist/components/markdown.js.map +0 -1
- package/dist/components/modal.d.ts +0 -237
- package/dist/components/modal.d.ts.map +0 -1
- package/dist/components/modal.js +0 -396
- package/dist/components/modal.js.map +0 -1
- package/dist/components/progress-bar.d.ts +0 -89
- package/dist/components/progress-bar.d.ts.map +0 -1
- package/dist/components/progress-bar.js +0 -288
- package/dist/components/progress-bar.js.map +0 -1
- package/dist/components/select.d.ts +0 -114
- package/dist/components/select.d.ts.map +0 -1
- package/dist/components/select.js +0 -415
- package/dist/components/select.js.map +0 -1
- package/dist/components/spinner.d.ts +0 -71
- package/dist/components/spinner.d.ts.map +0 -1
- package/dist/components/spinner.js +0 -300
- package/dist/components/spinner.js.map +0 -1
- package/dist/components/split-panel.d.ts +0 -175
- package/dist/components/split-panel.d.ts.map +0 -1
- package/dist/components/split-panel.js +0 -322
- package/dist/components/split-panel.js.map +0 -1
- package/dist/components/table.d.ts +0 -103
- package/dist/components/table.d.ts.map +0 -1
- package/dist/components/table.js +0 -359
- package/dist/components/table.js.map +0 -1
- package/dist/components/text-input.d.ts +0 -79
- package/dist/components/text-input.d.ts.map +0 -1
- package/dist/components/text-input.js +0 -332
- package/dist/components/text-input.js.map +0 -1
- package/dist/design-system/data-display/calendar.d.ts +0 -141
- package/dist/design-system/data-display/calendar.d.ts.map +0 -1
- package/dist/design-system/data-display/calendar.js +0 -524
- package/dist/design-system/data-display/calendar.js.map +0 -1
- package/dist/design-system/data-display/code-block.d.ts +0 -75
- package/dist/design-system/data-display/code-block.d.ts.map +0 -1
- package/dist/design-system/data-display/code-block.js +0 -311
- package/dist/design-system/data-display/code-block.js.map +0 -1
- package/dist/design-system/data-display/data-table.d.ts +0 -173
- package/dist/design-system/data-display/data-table.d.ts.map +0 -1
- package/dist/design-system/data-display/data-table.js +0 -428
- package/dist/design-system/data-display/data-table.js.map +0 -1
- package/dist/design-system/data-display/markdown.d.ts +0 -52
- package/dist/design-system/data-display/markdown.d.ts.map +0 -1
- package/dist/design-system/data-display/markdown.js +0 -341
- package/dist/design-system/data-display/markdown.js.map +0 -1
- package/dist/design-system/data-display/table.d.ts +0 -103
- package/dist/design-system/data-display/table.d.ts.map +0 -1
- package/dist/design-system/data-display/table.js +0 -342
- package/dist/design-system/data-display/table.js.map +0 -1
- package/dist/design-system/data-display/tree.d.ts +0 -166
- package/dist/design-system/data-display/tree.d.ts.map +0 -1
- package/dist/design-system/data-display/tree.js +0 -428
- package/dist/design-system/data-display/tree.js.map +0 -1
- package/dist/design-system/forms/autocomplete.d.ts +0 -163
- package/dist/design-system/forms/autocomplete.d.ts.map +0 -1
- package/dist/design-system/forms/autocomplete.js +0 -455
- package/dist/design-system/forms/autocomplete.js.map +0 -1
- package/dist/design-system/forms/button.d.ts +0 -106
- package/dist/design-system/forms/button.d.ts.map +0 -1
- package/dist/design-system/forms/button.js +0 -170
- package/dist/design-system/forms/button.js.map +0 -1
- package/dist/design-system/forms/multi-select.d.ts +0 -102
- package/dist/design-system/forms/multi-select.d.ts.map +0 -1
- package/dist/design-system/forms/multi-select.js +0 -309
- package/dist/design-system/forms/multi-select.js.map +0 -1
- package/dist/design-system/forms/radio-group.d.ts +0 -88
- package/dist/design-system/forms/radio-group.d.ts.map +0 -1
- package/dist/design-system/forms/radio-group.js +0 -145
- package/dist/design-system/forms/radio-group.js.map +0 -1
- package/dist/design-system/forms/select.d.ts +0 -116
- package/dist/design-system/forms/select.d.ts.map +0 -1
- package/dist/design-system/forms/select.js +0 -441
- package/dist/design-system/forms/select.js.map +0 -1
- package/dist/design-system/forms/slider.d.ts +0 -134
- package/dist/design-system/forms/slider.d.ts.map +0 -1
- package/dist/design-system/forms/slider.js +0 -314
- package/dist/design-system/forms/slider.js.map +0 -1
- package/dist/design-system/forms/switch.d.ts +0 -99
- package/dist/design-system/forms/switch.d.ts.map +0 -1
- package/dist/design-system/forms/switch.js +0 -173
- package/dist/design-system/forms/switch.js.map +0 -1
- package/dist/design-system/forms/text-input.d.ts +0 -79
- package/dist/design-system/forms/text-input.d.ts.map +0 -1
- package/dist/design-system/forms/text-input.js +0 -344
- package/dist/design-system/forms/text-input.js.map +0 -1
- package/dist/design-system/layout/collapsible.d.ts +0 -166
- package/dist/design-system/layout/collapsible.d.ts.map +0 -1
- package/dist/design-system/layout/collapsible.js +0 -286
- package/dist/design-system/layout/collapsible.js.map +0 -1
- package/dist/design-system/layout/scroll-area.d.ts +0 -188
- package/dist/design-system/layout/scroll-area.d.ts.map +0 -1
- package/dist/design-system/layout/scroll-area.js +0 -348
- package/dist/design-system/layout/scroll-area.js.map +0 -1
- package/dist/design-system/layout/split-panel.d.ts +0 -183
- package/dist/design-system/layout/split-panel.d.ts.map +0 -1
- package/dist/design-system/layout/split-panel.js +0 -323
- package/dist/design-system/layout/split-panel.js.map +0 -1
- package/dist/design-system/layout/tabs.d.ts +0 -129
- package/dist/design-system/layout/tabs.d.ts.map +0 -1
- package/dist/design-system/layout/tabs.js +0 -373
- package/dist/design-system/layout/tabs.js.map +0 -1
- package/dist/design-system/overlays/command-palette.d.ts +0 -217
- package/dist/design-system/overlays/command-palette.d.ts.map +0 -1
- package/dist/design-system/overlays/command-palette.js +0 -443
- package/dist/design-system/overlays/command-palette.js.map +0 -1
- package/dist/design-system/overlays/modal.d.ts +0 -251
- package/dist/design-system/overlays/modal.d.ts.map +0 -1
- package/dist/design-system/overlays/modal.js +0 -461
- package/dist/design-system/overlays/modal.js.map +0 -1
- package/dist/design-system/overlays/overlay-stack.d.ts +0 -200
- package/dist/design-system/overlays/overlay-stack.d.ts.map +0 -1
- package/dist/design-system/overlays/overlay-stack.js +0 -341
- package/dist/design-system/overlays/overlay-stack.js.map +0 -1
- package/dist/design-system/primitives/box.d.ts +0 -16
- package/dist/design-system/primitives/box.d.ts.map +0 -1
- package/dist/design-system/primitives/box.js +0 -23
- package/dist/design-system/primitives/box.js.map +0 -1
- package/dist/design-system/primitives/divider.d.ts +0 -52
- package/dist/design-system/primitives/divider.d.ts.map +0 -1
- package/dist/design-system/primitives/divider.js +0 -72
- package/dist/design-system/primitives/divider.js.map +0 -1
- package/dist/design-system/primitives/helpers.d.ts +0 -10
- package/dist/design-system/primitives/helpers.d.ts.map +0 -1
- package/dist/design-system/primitives/helpers.js +0 -27
- package/dist/design-system/primitives/helpers.js.map +0 -1
- package/dist/design-system/primitives/index.d.ts +0 -11
- package/dist/design-system/primitives/index.d.ts.map +0 -1
- package/dist/design-system/primitives/index.js +0 -14
- package/dist/design-system/primitives/index.js.map +0 -1
- package/dist/design-system/primitives/slot.d.ts +0 -35
- package/dist/design-system/primitives/slot.d.ts.map +0 -1
- package/dist/design-system/primitives/slot.js +0 -17
- package/dist/design-system/primitives/slot.js.map +0 -1
- package/dist/design-system/primitives/spacer.d.ts +0 -34
- package/dist/design-system/primitives/spacer.d.ts.map +0 -1
- package/dist/design-system/primitives/spacer.js +0 -53
- package/dist/design-system/primitives/spacer.js.map +0 -1
- package/dist/design-system/primitives/text.d.ts +0 -12
- package/dist/design-system/primitives/text.d.ts.map +0 -1
- package/dist/design-system/primitives/text.js +0 -25
- package/dist/design-system/primitives/text.js.map +0 -1
- package/dist/design-system/primitives/utilities.d.ts +0 -70
- package/dist/design-system/primitives/utilities.d.ts.map +0 -1
- package/dist/design-system/primitives/utilities.js +0 -56
- package/dist/design-system/primitives/utilities.js.map +0 -1
- package/dist/storybook/cli.d.ts +0 -10
- package/dist/storybook/cli.d.ts.map +0 -1
- package/dist/storybook/cli.js +0 -14
- package/dist/storybook/cli.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hotkey System for Tuiuiu
|
|
3
|
+
*
|
|
4
|
+
* Provides keyboard shortcut handling for terminal applications.
|
|
5
|
+
* Inspired by hotkeys-js but adapted for terminal raw input.
|
|
6
|
+
*
|
|
7
|
+
* ## Quick Start
|
|
8
|
+
*
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { useHotkeys } from 'tuiuiu';
|
|
11
|
+
*
|
|
12
|
+
* function MyComponent() {
|
|
13
|
+
* // Simple hotkey
|
|
14
|
+
* useHotkeys('ctrl+s', () => save());
|
|
15
|
+
*
|
|
16
|
+
* // Multiple bindings (cross-platform)
|
|
17
|
+
* useHotkeys(['ctrl+z', 'cmd+z'], () => undo());
|
|
18
|
+
*
|
|
19
|
+
* // With scope (only active when scope matches)
|
|
20
|
+
* useHotkeys('escape', () => closeModal(), { scope: 'modal' });
|
|
21
|
+
*
|
|
22
|
+
* return Box({}, Text({}, 'Press Ctrl+S to save'));
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Standalone Registration (outside components)
|
|
27
|
+
*
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { registerHotkey, setHotkeyScope } from 'tuiuiu';
|
|
30
|
+
*
|
|
31
|
+
* // Register global hotkeys
|
|
32
|
+
* const unregister = registerHotkey('ctrl+q', () => process.exit(0), {
|
|
33
|
+
* description: 'Quit application',
|
|
34
|
+
* scope: 'global',
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Change scope to enable/disable groups of hotkeys
|
|
38
|
+
* setHotkeyScope('modal'); // Only 'modal' and 'global' hotkeys work
|
|
39
|
+
* setHotkeyScope('global'); // Back to default
|
|
40
|
+
*
|
|
41
|
+
* // Cleanup
|
|
42
|
+
* unregister();
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* ## Display Registered Hotkeys
|
|
46
|
+
*
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { getRegisteredHotkeys, formatHotkeyPlatform } from 'tuiuiu';
|
|
49
|
+
*
|
|
50
|
+
* // Get all registered hotkeys for help screen
|
|
51
|
+
* const hotkeys = getRegisteredHotkeys();
|
|
52
|
+
* hotkeys.forEach(h => console.log(`${h.keys}: ${h.description}`));
|
|
53
|
+
*
|
|
54
|
+
* // Format for display (shows ⌘ on Mac, Ctrl on others)
|
|
55
|
+
* formatHotkeyPlatform('ctrl+s'); // "⌘S" on Mac, "Ctrl+S" on Linux/Windows
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* ## Supported Keys
|
|
59
|
+
*
|
|
60
|
+
* **Modifiers:** ctrl, alt, shift, meta, cmd, command, option
|
|
61
|
+
*
|
|
62
|
+
* **Special Keys:** enter, return, escape, esc, tab, space, backspace, delete, del
|
|
63
|
+
*
|
|
64
|
+
* **Navigation:** up, down, left, right, home, end, pageup, pagedown, pgup, pgdn
|
|
65
|
+
*
|
|
66
|
+
* **Function Keys:** f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12
|
|
67
|
+
*
|
|
68
|
+
* **Letters & Numbers:** a-z, 0-9
|
|
69
|
+
*/
|
|
70
|
+
import type { Key } from './types.js';
|
|
71
|
+
export interface HotkeyBinding {
|
|
72
|
+
key: string;
|
|
73
|
+
ctrl: boolean;
|
|
74
|
+
alt: boolean;
|
|
75
|
+
shift: boolean;
|
|
76
|
+
meta: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface HotkeyOptions {
|
|
79
|
+
/** Scope for this hotkey (default: 'global') */
|
|
80
|
+
scope?: string;
|
|
81
|
+
/** Only trigger when input is not focused (default: true) */
|
|
82
|
+
excludeInput?: boolean;
|
|
83
|
+
/** Description for help/display */
|
|
84
|
+
description?: string;
|
|
85
|
+
}
|
|
86
|
+
export type HotkeyHandler = () => void;
|
|
87
|
+
/**
|
|
88
|
+
* Parse a hotkey string like 'ctrl+shift+s' into a binding object
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseHotkey(hotkeyStr: string): HotkeyBinding;
|
|
91
|
+
/**
|
|
92
|
+
* Parse multiple hotkey strings (comma or array)
|
|
93
|
+
*/
|
|
94
|
+
export declare function parseHotkeys(hotkeys: string | string[]): HotkeyBinding[];
|
|
95
|
+
/**
|
|
96
|
+
* Check if a terminal key event matches a hotkey binding
|
|
97
|
+
*/
|
|
98
|
+
export declare function matchesHotkey(input: string, key: Key, binding: HotkeyBinding): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Get the current active scope
|
|
101
|
+
*/
|
|
102
|
+
export declare function getHotkeyScope(): string;
|
|
103
|
+
/**
|
|
104
|
+
* Set the current active scope
|
|
105
|
+
*/
|
|
106
|
+
export declare function setHotkeyScope(scope: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Reset scope to global
|
|
109
|
+
*/
|
|
110
|
+
export declare function resetHotkeyScope(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Register a hotkey handler
|
|
113
|
+
*/
|
|
114
|
+
export declare function registerHotkey(hotkeys: string | string[], handler: HotkeyHandler, options?: HotkeyOptions): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a key event matches any registered hotkey and trigger it
|
|
117
|
+
*/
|
|
118
|
+
export declare function triggerHotkey(input: string, key: Key): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Get all registered hotkeys for help display
|
|
121
|
+
*/
|
|
122
|
+
export declare function getRegisteredHotkeys(): Array<{
|
|
123
|
+
keys: string;
|
|
124
|
+
description: string;
|
|
125
|
+
scope: string;
|
|
126
|
+
}>;
|
|
127
|
+
/**
|
|
128
|
+
* useHotkeys hook - register keyboard shortcuts in a component
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* function MyComponent() {
|
|
133
|
+
* useHotkeys('ctrl+s', () => save(), { description: 'Save file' });
|
|
134
|
+
* useHotkeys(['ctrl+z', 'cmd+z'], () => undo());
|
|
135
|
+
* useHotkeys('escape', () => close(), { scope: 'modal' });
|
|
136
|
+
* // ...
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export declare function useHotkeys(hotkeys: string | string[], handler: HotkeyHandler, options?: HotkeyOptions): void;
|
|
141
|
+
/**
|
|
142
|
+
* Format a hotkey for display (e.g., "Ctrl+S")
|
|
143
|
+
*/
|
|
144
|
+
export declare function formatHotkey(hotkeyStr: string): string;
|
|
145
|
+
/**
|
|
146
|
+
* Check if running on macOS (for displaying Cmd vs Ctrl)
|
|
147
|
+
*/
|
|
148
|
+
export declare function isMac(): boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Format hotkey with platform-aware modifier (Cmd on Mac, Ctrl otherwise)
|
|
151
|
+
*/
|
|
152
|
+
export declare function formatHotkeyPlatform(hotkeyStr: string): string;
|
|
153
|
+
//# sourceMappingURL=use-hotkeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hotkeys.d.ts","sourceRoot":"","sources":["../../src/hooks/use-hotkeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAMtC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC;AAuCvC;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CA4B5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,EAAE,CAMxE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,aAAa,GACrB,OAAO,CA8CT;AAQD;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAcD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAAkB,GAC1B,MAAM,IAAI,CAqBZ;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAoB9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAgBD;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAAkB,GAC1B,IAAI,CAqBN;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM9D"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hotkey System for Tuiuiu
|
|
3
|
+
*
|
|
4
|
+
* Provides keyboard shortcut handling for terminal applications.
|
|
5
|
+
* Inspired by hotkeys-js but adapted for terminal raw input.
|
|
6
|
+
*
|
|
7
|
+
* ## Quick Start
|
|
8
|
+
*
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { useHotkeys } from 'tuiuiu';
|
|
11
|
+
*
|
|
12
|
+
* function MyComponent() {
|
|
13
|
+
* // Simple hotkey
|
|
14
|
+
* useHotkeys('ctrl+s', () => save());
|
|
15
|
+
*
|
|
16
|
+
* // Multiple bindings (cross-platform)
|
|
17
|
+
* useHotkeys(['ctrl+z', 'cmd+z'], () => undo());
|
|
18
|
+
*
|
|
19
|
+
* // With scope (only active when scope matches)
|
|
20
|
+
* useHotkeys('escape', () => closeModal(), { scope: 'modal' });
|
|
21
|
+
*
|
|
22
|
+
* return Box({}, Text({}, 'Press Ctrl+S to save'));
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ## Standalone Registration (outside components)
|
|
27
|
+
*
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { registerHotkey, setHotkeyScope } from 'tuiuiu';
|
|
30
|
+
*
|
|
31
|
+
* // Register global hotkeys
|
|
32
|
+
* const unregister = registerHotkey('ctrl+q', () => process.exit(0), {
|
|
33
|
+
* description: 'Quit application',
|
|
34
|
+
* scope: 'global',
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Change scope to enable/disable groups of hotkeys
|
|
38
|
+
* setHotkeyScope('modal'); // Only 'modal' and 'global' hotkeys work
|
|
39
|
+
* setHotkeyScope('global'); // Back to default
|
|
40
|
+
*
|
|
41
|
+
* // Cleanup
|
|
42
|
+
* unregister();
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* ## Display Registered Hotkeys
|
|
46
|
+
*
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { getRegisteredHotkeys, formatHotkeyPlatform } from 'tuiuiu';
|
|
49
|
+
*
|
|
50
|
+
* // Get all registered hotkeys for help screen
|
|
51
|
+
* const hotkeys = getRegisteredHotkeys();
|
|
52
|
+
* hotkeys.forEach(h => console.log(`${h.keys}: ${h.description}`));
|
|
53
|
+
*
|
|
54
|
+
* // Format for display (shows ⌘ on Mac, Ctrl on others)
|
|
55
|
+
* formatHotkeyPlatform('ctrl+s'); // "⌘S" on Mac, "Ctrl+S" on Linux/Windows
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* ## Supported Keys
|
|
59
|
+
*
|
|
60
|
+
* **Modifiers:** ctrl, alt, shift, meta, cmd, command, option
|
|
61
|
+
*
|
|
62
|
+
* **Special Keys:** enter, return, escape, esc, tab, space, backspace, delete, del
|
|
63
|
+
*
|
|
64
|
+
* **Navigation:** up, down, left, right, home, end, pageup, pagedown, pgup, pgdn
|
|
65
|
+
*
|
|
66
|
+
* **Function Keys:** f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12
|
|
67
|
+
*
|
|
68
|
+
* **Letters & Numbers:** a-z, 0-9
|
|
69
|
+
*/
|
|
70
|
+
import { createSignal } from '../core/signal.js';
|
|
71
|
+
import { useInput } from './use-input.js';
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Key Aliases
|
|
74
|
+
// =============================================================================
|
|
75
|
+
const KEY_ALIASES = {
|
|
76
|
+
// Arrow keys
|
|
77
|
+
up: 'upArrow',
|
|
78
|
+
down: 'downArrow',
|
|
79
|
+
left: 'leftArrow',
|
|
80
|
+
right: 'rightArrow',
|
|
81
|
+
arrowup: 'upArrow',
|
|
82
|
+
arrowdown: 'downArrow',
|
|
83
|
+
arrowleft: 'leftArrow',
|
|
84
|
+
arrowright: 'rightArrow',
|
|
85
|
+
// Special keys
|
|
86
|
+
esc: 'escape',
|
|
87
|
+
return: 'enter',
|
|
88
|
+
space: ' ',
|
|
89
|
+
del: 'delete',
|
|
90
|
+
ins: 'insert',
|
|
91
|
+
pgup: 'pageUp',
|
|
92
|
+
pgdn: 'pageDown',
|
|
93
|
+
pageup: 'pageUp',
|
|
94
|
+
pagedown: 'pageDown',
|
|
95
|
+
// Modifier aliases
|
|
96
|
+
command: 'meta',
|
|
97
|
+
cmd: 'meta',
|
|
98
|
+
option: 'alt',
|
|
99
|
+
control: 'ctrl',
|
|
100
|
+
};
|
|
101
|
+
// =============================================================================
|
|
102
|
+
// Parser
|
|
103
|
+
// =============================================================================
|
|
104
|
+
/**
|
|
105
|
+
* Parse a hotkey string like 'ctrl+shift+s' into a binding object
|
|
106
|
+
*/
|
|
107
|
+
export function parseHotkey(hotkeyStr) {
|
|
108
|
+
const parts = hotkeyStr.toLowerCase().split('+').map(p => p.trim());
|
|
109
|
+
const binding = {
|
|
110
|
+
key: '',
|
|
111
|
+
ctrl: false,
|
|
112
|
+
alt: false,
|
|
113
|
+
shift: false,
|
|
114
|
+
meta: false,
|
|
115
|
+
};
|
|
116
|
+
for (const part of parts) {
|
|
117
|
+
// Check for modifiers
|
|
118
|
+
if (part === 'ctrl' || part === 'control') {
|
|
119
|
+
binding.ctrl = true;
|
|
120
|
+
}
|
|
121
|
+
else if (part === 'alt' || part === 'option') {
|
|
122
|
+
binding.alt = true;
|
|
123
|
+
}
|
|
124
|
+
else if (part === 'shift') {
|
|
125
|
+
binding.shift = true;
|
|
126
|
+
}
|
|
127
|
+
else if (part === 'meta' || part === 'cmd' || part === 'command') {
|
|
128
|
+
binding.meta = true;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// It's a key - normalize via aliases
|
|
132
|
+
binding.key = KEY_ALIASES[part] || part;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return binding;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Parse multiple hotkey strings (comma or array)
|
|
139
|
+
*/
|
|
140
|
+
export function parseHotkeys(hotkeys) {
|
|
141
|
+
if (Array.isArray(hotkeys)) {
|
|
142
|
+
return hotkeys.map(parseHotkey);
|
|
143
|
+
}
|
|
144
|
+
// Split by comma for multiple bindings
|
|
145
|
+
return hotkeys.split(',').map(h => parseHotkey(h.trim()));
|
|
146
|
+
}
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Matcher
|
|
149
|
+
// =============================================================================
|
|
150
|
+
/**
|
|
151
|
+
* Check if a terminal key event matches a hotkey binding
|
|
152
|
+
*/
|
|
153
|
+
export function matchesHotkey(input, key, binding) {
|
|
154
|
+
// Check modifiers
|
|
155
|
+
if (binding.ctrl !== (key.ctrl ?? false))
|
|
156
|
+
return false;
|
|
157
|
+
if (binding.alt !== (key.meta ?? false))
|
|
158
|
+
return false; // Terminal alt comes as meta
|
|
159
|
+
if (binding.shift !== (key.shift ?? false))
|
|
160
|
+
return false;
|
|
161
|
+
// Note: meta key in terminal is complex, often alt+escape sequence
|
|
162
|
+
// Check key
|
|
163
|
+
const normalizedInput = input.toLowerCase();
|
|
164
|
+
const bindingKey = binding.key;
|
|
165
|
+
// Special key checks
|
|
166
|
+
if (bindingKey === 'upArrow')
|
|
167
|
+
return key.upArrow ?? false;
|
|
168
|
+
if (bindingKey === 'downArrow')
|
|
169
|
+
return key.downArrow ?? false;
|
|
170
|
+
if (bindingKey === 'leftArrow')
|
|
171
|
+
return key.leftArrow ?? false;
|
|
172
|
+
if (bindingKey === 'rightArrow')
|
|
173
|
+
return key.rightArrow ?? false;
|
|
174
|
+
if (bindingKey === 'escape')
|
|
175
|
+
return key.escape ?? false;
|
|
176
|
+
if (bindingKey === 'enter' || bindingKey === 'return')
|
|
177
|
+
return key.return ?? false;
|
|
178
|
+
if (bindingKey === 'tab')
|
|
179
|
+
return key.tab ?? false;
|
|
180
|
+
if (bindingKey === 'backspace')
|
|
181
|
+
return key.backspace ?? false;
|
|
182
|
+
if (bindingKey === 'delete')
|
|
183
|
+
return key.delete ?? false;
|
|
184
|
+
if (bindingKey === 'pageUp')
|
|
185
|
+
return key.pageUp ?? false;
|
|
186
|
+
if (bindingKey === 'pageDown')
|
|
187
|
+
return key.pageDown ?? false;
|
|
188
|
+
if (bindingKey === 'home')
|
|
189
|
+
return key.home ?? false;
|
|
190
|
+
if (bindingKey === 'end')
|
|
191
|
+
return key.end ?? false;
|
|
192
|
+
if (bindingKey === 'insert')
|
|
193
|
+
return key.insert ?? false;
|
|
194
|
+
// F-keys (f1 through f12)
|
|
195
|
+
if (bindingKey.startsWith('f') && /^f\d{1,2}$/.test(bindingKey)) {
|
|
196
|
+
const fNum = parseInt(bindingKey.slice(1), 10);
|
|
197
|
+
const fKey = `f${fNum}`;
|
|
198
|
+
return key[fKey] === true;
|
|
199
|
+
}
|
|
200
|
+
// Regular character match
|
|
201
|
+
// For ctrl+letter, input is often a control character
|
|
202
|
+
if (binding.ctrl && bindingKey.length === 1) {
|
|
203
|
+
// Ctrl+A is \x01, Ctrl+B is \x02, etc.
|
|
204
|
+
const expectedCode = bindingKey.charCodeAt(0) - 96; // 'a' -> 1, 'b' -> 2
|
|
205
|
+
if (expectedCode > 0 && expectedCode < 27) {
|
|
206
|
+
return input.charCodeAt(0) === expectedCode;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Direct character match
|
|
210
|
+
return normalizedInput === bindingKey;
|
|
211
|
+
}
|
|
212
|
+
// =============================================================================
|
|
213
|
+
// Scope Management
|
|
214
|
+
// =============================================================================
|
|
215
|
+
const [currentScope, setCurrentScope] = createSignal('global');
|
|
216
|
+
/**
|
|
217
|
+
* Get the current active scope
|
|
218
|
+
*/
|
|
219
|
+
export function getHotkeyScope() {
|
|
220
|
+
return currentScope();
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Set the current active scope
|
|
224
|
+
*/
|
|
225
|
+
export function setHotkeyScope(scope) {
|
|
226
|
+
setCurrentScope(scope);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Reset scope to global
|
|
230
|
+
*/
|
|
231
|
+
export function resetHotkeyScope() {
|
|
232
|
+
setCurrentScope('global');
|
|
233
|
+
}
|
|
234
|
+
const hotkeyRegistry = [];
|
|
235
|
+
/**
|
|
236
|
+
* Register a hotkey handler
|
|
237
|
+
*/
|
|
238
|
+
export function registerHotkey(hotkeys, handler, options = {}) {
|
|
239
|
+
const bindings = parseHotkeys(hotkeys);
|
|
240
|
+
const entry = {
|
|
241
|
+
bindings,
|
|
242
|
+
handler,
|
|
243
|
+
options: {
|
|
244
|
+
scope: 'global',
|
|
245
|
+
excludeInput: true,
|
|
246
|
+
...options,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
hotkeyRegistry.push(entry);
|
|
250
|
+
// Return unregister function
|
|
251
|
+
return () => {
|
|
252
|
+
const index = hotkeyRegistry.indexOf(entry);
|
|
253
|
+
if (index > -1) {
|
|
254
|
+
hotkeyRegistry.splice(index, 1);
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Check if a key event matches any registered hotkey and trigger it
|
|
260
|
+
*/
|
|
261
|
+
export function triggerHotkey(input, key) {
|
|
262
|
+
const scope = currentScope();
|
|
263
|
+
for (const entry of hotkeyRegistry) {
|
|
264
|
+
// Check scope
|
|
265
|
+
const entryScope = entry.options.scope || 'global';
|
|
266
|
+
if (entryScope !== 'global' && entryScope !== scope) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
// Check bindings
|
|
270
|
+
for (const binding of entry.bindings) {
|
|
271
|
+
if (matchesHotkey(input, key, binding)) {
|
|
272
|
+
entry.handler();
|
|
273
|
+
return true; // Hotkey was handled
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get all registered hotkeys for help display
|
|
281
|
+
*/
|
|
282
|
+
export function getRegisteredHotkeys() {
|
|
283
|
+
return hotkeyRegistry.map(entry => ({
|
|
284
|
+
keys: entry.bindings
|
|
285
|
+
.map(b => {
|
|
286
|
+
const parts = [];
|
|
287
|
+
if (b.ctrl)
|
|
288
|
+
parts.push('Ctrl');
|
|
289
|
+
if (b.alt)
|
|
290
|
+
parts.push('Alt');
|
|
291
|
+
if (b.shift)
|
|
292
|
+
parts.push('Shift');
|
|
293
|
+
if (b.meta)
|
|
294
|
+
parts.push('Cmd');
|
|
295
|
+
parts.push(b.key.charAt(0).toUpperCase() + b.key.slice(1));
|
|
296
|
+
return parts.join('+');
|
|
297
|
+
})
|
|
298
|
+
.join(', '),
|
|
299
|
+
description: entry.options.description || '',
|
|
300
|
+
scope: entry.options.scope || 'global',
|
|
301
|
+
}));
|
|
302
|
+
}
|
|
303
|
+
// =============================================================================
|
|
304
|
+
// Hook
|
|
305
|
+
// =============================================================================
|
|
306
|
+
/**
|
|
307
|
+
* useHotkeys hook - register keyboard shortcuts in a component
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```typescript
|
|
311
|
+
* function MyComponent() {
|
|
312
|
+
* useHotkeys('ctrl+s', () => save(), { description: 'Save file' });
|
|
313
|
+
* useHotkeys(['ctrl+z', 'cmd+z'], () => undo());
|
|
314
|
+
* useHotkeys('escape', () => close(), { scope: 'modal' });
|
|
315
|
+
* // ...
|
|
316
|
+
* }
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
319
|
+
export function useHotkeys(hotkeys, handler, options = {}) {
|
|
320
|
+
// Parse the hotkey bindings
|
|
321
|
+
const bindings = parseHotkeys(hotkeys);
|
|
322
|
+
const scope = options.scope || 'global';
|
|
323
|
+
// Use the input hook to listen for key events
|
|
324
|
+
useInput((input, key) => {
|
|
325
|
+
// Check scope
|
|
326
|
+
const activeScope = currentScope();
|
|
327
|
+
if (scope !== 'global' && scope !== activeScope) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
// Check each binding
|
|
331
|
+
for (const binding of bindings) {
|
|
332
|
+
if (matchesHotkey(input, key, binding)) {
|
|
333
|
+
handler();
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
// =============================================================================
|
|
340
|
+
// Utility Functions
|
|
341
|
+
// =============================================================================
|
|
342
|
+
/**
|
|
343
|
+
* Format a hotkey for display (e.g., "Ctrl+S")
|
|
344
|
+
*/
|
|
345
|
+
export function formatHotkey(hotkeyStr) {
|
|
346
|
+
const binding = parseHotkey(hotkeyStr);
|
|
347
|
+
const parts = [];
|
|
348
|
+
if (binding.ctrl)
|
|
349
|
+
parts.push('Ctrl');
|
|
350
|
+
if (binding.alt)
|
|
351
|
+
parts.push('Alt');
|
|
352
|
+
if (binding.shift)
|
|
353
|
+
parts.push('Shift');
|
|
354
|
+
if (binding.meta)
|
|
355
|
+
parts.push('Cmd');
|
|
356
|
+
// Capitalize the key
|
|
357
|
+
const keyName = binding.key.length === 1
|
|
358
|
+
? binding.key.toUpperCase()
|
|
359
|
+
: binding.key.charAt(0).toUpperCase() + binding.key.slice(1);
|
|
360
|
+
parts.push(keyName);
|
|
361
|
+
return parts.join('+');
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Check if running on macOS (for displaying Cmd vs Ctrl)
|
|
365
|
+
*/
|
|
366
|
+
export function isMac() {
|
|
367
|
+
return process.platform === 'darwin';
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Format hotkey with platform-aware modifier (Cmd on Mac, Ctrl otherwise)
|
|
371
|
+
*/
|
|
372
|
+
export function formatHotkeyPlatform(hotkeyStr) {
|
|
373
|
+
const formatted = formatHotkey(hotkeyStr);
|
|
374
|
+
if (isMac()) {
|
|
375
|
+
return formatted.replace('Ctrl', '⌘').replace('Alt', '⌥').replace('Shift', '⇧');
|
|
376
|
+
}
|
|
377
|
+
return formatted;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=use-hotkeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hotkeys.js","sourceRoot":"","sources":["../../src/hooks/use-hotkeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* useInput - Handle keyboard input
|
|
3
3
|
*/
|
|
4
|
-
import type
|
|
4
|
+
import { parseKeypress, type Key, type InputHandler } from '../core/hotkeys.js';
|
|
5
5
|
export type { Key, InputHandler };
|
|
6
|
-
|
|
7
|
-
* Parse raw input data into key info
|
|
8
|
-
* Supports multiple terminal types: xterm, gnome, rxvt, putty, cygwin
|
|
9
|
-
*/
|
|
10
|
-
export declare function parseKeypress(data: Buffer | string): {
|
|
11
|
-
input: string;
|
|
12
|
-
key: Key;
|
|
13
|
-
length: number;
|
|
14
|
-
};
|
|
6
|
+
export { parseKeypress };
|
|
15
7
|
/**
|
|
16
8
|
* useInput - Handle keyboard input
|
|
17
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input.d.ts","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,
|
|
1
|
+
{"version":3,"file":"use-input.d.ts","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,aAAa,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEhF,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAmD1F"}
|