feat: zoom in/out keyboard shortcuts (Cmd+=, Cmd+-, Cmd+0) (#134)
* feat: zoom in/out keyboard shortcuts (Cmd+=, Cmd+-, Cmd+0) Add zoom control with keyboard shortcuts, native menu items, command palette integration, and StatusBar zoom indicator with localStorage persistence (80-150%, 10% step). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add zoom-shortcuts design file with StatusBar zoom indicator Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * design: zoom-shortcuts — StatusBar zoom indicator + Command Palette entries --------- Co-authored-by: Test <test@test.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,10 @@ function makeConfig(overrides: Record<string, unknown> = {}) {
|
||||
onCommitPush: vi.fn(),
|
||||
onSetViewMode: vi.fn(),
|
||||
onToggleInspector: vi.fn(),
|
||||
onZoomIn: vi.fn(),
|
||||
onZoomOut: vi.fn(),
|
||||
onZoomReset: vi.fn(),
|
||||
zoomLevel: 100,
|
||||
onSelect: vi.fn(),
|
||||
onCloseTab: vi.fn(),
|
||||
...overrides,
|
||||
@@ -140,6 +144,36 @@ describe('useCommandRegistry', () => {
|
||||
result.current.find(c => c.id === 'view-editor')!.execute()
|
||||
expect(onSetViewMode).toHaveBeenCalledWith('editor-only')
|
||||
})
|
||||
|
||||
it('zoom-in is enabled when below max zoom', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 100 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-in')!.enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('zoom-in is disabled at max zoom', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 150 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-in')!.enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('zoom-out is disabled at min zoom', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 80 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-out')!.enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('zoom-reset is disabled at 100%', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 100 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-reset')!.enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('zoom-reset is enabled when not at 100%', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 120 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-reset')!.enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('zoom-in label shows current zoom level', () => {
|
||||
const { result } = renderHook(() => useCommandRegistry(makeConfig({ zoomLevel: 120 })))
|
||||
expect(result.current.find(c => c.id === 'zoom-in')!.label).toContain('120%')
|
||||
})
|
||||
})
|
||||
|
||||
describe('groupSortKey', () => {
|
||||
|
||||
Reference in New Issue
Block a user