Skip to content

Commit 41982ad

Browse files
committed
refactor(useBreakpoints): remove reactive object
until we come up with a unified way to unwrap these in templates I'd rather keep the API similar across composables
1 parent 168536a commit 41982ad

File tree

7 files changed

+163
-141
lines changed

7 files changed

+163
-141
lines changed

apps/docs/src/components/app/AppBanner.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<AppIcon icon="alert" :size="14" />
1919

2020
<div>
21-
You are viewing Pre-Alpha documentation. <span v-if="!breakpoints.isMobile">Some features may not work as expected.</span>
21+
You are viewing Pre-Alpha documentation. <span v-if="!breakpoints.isMobile.value">Some features may not work as expected.</span>
2222
</div>
2323
</Atom>
2424
</template>

apps/docs/src/components/app/AppBar.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<Atom
3333
:as
3434
class="app-header flex items-center justify-between h-[48px] fixed left-0 top-[24px] right-0 px-3 transition-margin duration-200 ease-in-out"
35-
:class="breakpoints.isMobile && 'left-0'"
35+
:class="breakpoints.isMobile.value && 'left-0'"
3636
>
3737
<div class="flex items-center gap-1">
3838
<img
@@ -44,7 +44,7 @@
4444
>
4545

4646
<AppIcon
47-
v-if="breakpoints.isMobile"
47+
v-if="breakpoints.isMobile.value"
4848
class="pa-1 cursor-pointer"
4949
:icon="app.drawer ? 'close' : 'menu'"
5050
@click="app.drawer = !app.drawer"

apps/docs/src/components/app/AppFooter.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<Atom
1515
:as
1616
class="app-footer flex items-center justify-between h-[24px] fixed bottom-0 left-[220px] right-0 px-3 text-xs bg-surface border-t"
17-
:class="breakpoints.isMobile && 'left-0'"
17+
:class="breakpoints.isMobile.value && 'left-0'"
1818
>
1919
<DocsLastCommit />
2020

apps/docs/src/components/app/AppMain.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<template>
88
<div
99
class="pa-4 pb-6 mt-[72px] transition-margin duration-200 ease-in-out"
10-
:class="breakpoints.isMobile ? 'ml-0' : 'ml-[220px]'"
10+
:class="breakpoints.isMobile.value ? 'ml-0' : 'ml-[220px]'"
1111
>
1212
<div class="max-w-[688px] mx-auto pb-4">
1313
<router-view />

apps/docs/src/components/app/AppNav.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
:as
2424
class="bg-4 app-nav flex flex-col fixed top-[72px] w-[220px] overflow-y-auto py-4 transition-transform duration-200 ease-in-out"
2525
:class="[
26-
breakpoints.isMobile && !app.drawer ? 'translate-x-[-100%]' : 'translate-x-0',
27-
breakpoints.isMobile ? 'top-[72px] bottom-[24px]' : 'top-[24px] bottom-0'
26+
breakpoints.isMobile.value && !app.drawer ? 'translate-x-[-100%]' : 'translate-x-0',
27+
breakpoints.isMobile.value ? 'top-[72px] bottom-[24px]' : 'top-[24px] bottom-0'
2828
]"
2929
>
3030
<ul class="flex gap-2 flex-col">

packages/0/src/composables/useBreakpoints/index.test.ts

Lines changed: 68 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const mockWatch = vi.mocked(watch)
3939
const mockOnScopeDispose = vi.mocked(onScopeDispose)
4040
const mockUseHydration = vi.mocked(useHydration)
4141

42-
describe.skip('useBreakpoints', () => {
42+
describe('useBreakpoints', () => {
4343
let originalWindow: any
4444
let mockWindow: any
4545

@@ -101,16 +101,16 @@ describe.skip('useBreakpoints', () => {
101101

102102
const context = createBreakpoints()
103103

104-
expect(context.name).toBe('xs')
105-
expect(context.width).toBe(0)
106-
expect(context.height).toBe(0)
107-
expect(context.isMobile).toBe(true)
108-
expect(context.xs).toBe(true)
109-
expect(context.sm).toBe(false)
110-
expect(context.md).toBe(false)
111-
expect(context.lg).toBe(false)
112-
expect(context.xl).toBe(false)
113-
expect(context.xxl).toBe(false)
104+
expect(context.name.value).toBe('xs')
105+
expect(context.width.value).toBe(0)
106+
expect(context.height.value).toBe(0)
107+
expect(context.isMobile.value).toBe(true)
108+
expect(context.xs.value).toBe(true)
109+
expect(context.sm.value).toBe(false)
110+
expect(context.md.value).toBe(false)
111+
expect(context.lg.value).toBe(false)
112+
expect(context.xl.value).toBe(false)
113+
expect(context.xxl.value).toBe(false)
114114
})
115115

116116
it('should accept custom breakpoint options', () => {
@@ -134,7 +134,7 @@ describe.skip('useBreakpoints', () => {
134134

135135
const context = createBreakpoints(customOptions)
136136

137-
expect(context.isMobile).toBeDefined()
137+
expect(context.isMobile.value).toBeDefined()
138138
})
139139

140140
it('should register onMounted callback when in component context', () => {
@@ -200,8 +200,8 @@ describe.skip('useBreakpoints', () => {
200200
const mountedCallback = mockOnMounted.mock.calls[0]![0]
201201
mountedCallback()
202202

203-
expect(context.width).toBe(1200)
204-
expect(context.height).toBe(800)
203+
expect(context.width.value).toBe(1200)
204+
expect(context.height.value).toBe(800)
205205
})
206206
})
207207

@@ -217,12 +217,12 @@ describe.skip('useBreakpoints', () => {
217217
const mountedCallback = mockOnMounted.mock.calls[0]![0]
218218
mountedCallback()
219219

220-
expect(context.name).toBe('xs')
221-
expect(context.xs).toBe(true)
222-
expect(context.sm).toBe(false)
223-
expect(context.isMobile).toBe(true)
224-
expect(context.smAndUp).toBe(false)
225-
expect(context.smAndDown).toBe(true)
220+
expect(context.name.value).toBe('xs')
221+
expect(context.xs.value).toBe(true)
222+
expect(context.sm.value).toBe(false)
223+
expect(context.isMobile.value).toBe(true)
224+
expect(context.smAndUp.value).toBe(false)
225+
expect(context.smAndDown.value).toBe(true)
226226
})
227227

228228
it('should detect sm breakpoint correctly', () => {
@@ -236,14 +236,14 @@ describe.skip('useBreakpoints', () => {
236236
const mountedCallback = mockOnMounted.mock.calls[0]![0]
237237
mountedCallback()
238238

239-
expect(context.name).toBe('sm')
240-
expect(context.xs).toBe(false)
241-
expect(context.sm).toBe(true)
242-
expect(context.md).toBe(false)
243-
expect(context.isMobile).toBe(true)
244-
expect(context.smAndUp).toBe(true)
245-
expect(context.smAndDown).toBe(true)
246-
expect(context.mdAndUp).toBe(false)
239+
expect(context.name.value).toBe('sm')
240+
expect(context.xs.value).toBe(false)
241+
expect(context.sm.value).toBe(true)
242+
expect(context.md.value).toBe(false)
243+
expect(context.isMobile.value).toBe(true)
244+
expect(context.smAndUp.value).toBe(true)
245+
expect(context.smAndDown.value).toBe(true)
246+
expect(context.mdAndUp.value).toBe(false)
247247
})
248248

249249
it('should detect md breakpoint correctly', () => {
@@ -257,11 +257,11 @@ describe.skip('useBreakpoints', () => {
257257
const mountedCallback = mockOnMounted.mock.calls[0]![0]
258258
mountedCallback()
259259

260-
expect(context.name).toBe('md')
261-
expect(context.md).toBe(true)
262-
expect(context.isMobile).toBe(false) // md is default mobile breakpoint
263-
expect(context.mdAndUp).toBe(true)
264-
expect(context.mdAndDown).toBe(true)
260+
expect(context.name.value).toBe('md')
261+
expect(context.md.value).toBe(true)
262+
expect(context.isMobile.value).toBe(false) // md is default mobile breakpoint
263+
expect(context.mdAndUp.value).toBe(true)
264+
expect(context.mdAndDown.value).toBe(true)
265265
})
266266

267267
it('should detect lg breakpoint correctly', () => {
@@ -275,12 +275,12 @@ describe.skip('useBreakpoints', () => {
275275
const mountedCallback = mockOnMounted.mock.calls[0]![0]
276276
mountedCallback()
277277

278-
expect(context.name).toBe('lg')
279-
expect(context.lg).toBe(true)
280-
expect(context.isMobile).toBe(false)
281-
expect(context.lgAndUp).toBe(true)
282-
expect(context.lgAndDown).toBe(true)
283-
expect(context.xlAndUp).toBe(false)
278+
expect(context.name.value).toBe('lg')
279+
expect(context.lg.value).toBe(true)
280+
expect(context.isMobile.value).toBe(false)
281+
expect(context.lgAndUp.value).toBe(true)
282+
expect(context.lgAndDown.value).toBe(true)
283+
expect(context.xlAndUp.value).toBe(false)
284284
})
285285

286286
it('should detect xl breakpoint correctly', () => {
@@ -294,12 +294,12 @@ describe.skip('useBreakpoints', () => {
294294
const mountedCallback = mockOnMounted.mock.calls[0]![0]
295295
mountedCallback()
296296

297-
expect(context.name).toBe('xl')
298-
expect(context.xl).toBe(true)
299-
expect(context.isMobile).toBe(false)
300-
expect(context.xlAndUp).toBe(true)
301-
expect(context.xlAndDown).toBe(true)
302-
expect(context.xxlAndUp).toBe(false)
297+
expect(context.name.value).toBe('xl')
298+
expect(context.xl.value).toBe(true)
299+
expect(context.isMobile.value).toBe(false)
300+
expect(context.xlAndUp.value).toBe(true)
301+
expect(context.xlAndDown.value).toBe(true)
302+
expect(context.xxlAndUp.value).toBe(false)
303303
})
304304

305305
it('should detect xxl breakpoint correctly', () => {
@@ -313,11 +313,11 @@ describe.skip('useBreakpoints', () => {
313313
const mountedCallback = mockOnMounted.mock.calls[0]![0]
314314
mountedCallback()
315315

316-
expect(context.name).toBe('xxl')
317-
expect(context.xxl).toBe(true)
318-
expect(context.isMobile).toBe(false)
319-
expect(context.xxlAndUp).toBe(true)
320-
expect(context.xxlAndDown).toBe(true)
316+
expect(context.name.value).toBe('xxl')
317+
expect(context.xxl.value).toBe(true)
318+
expect(context.isMobile.value).toBe(false)
319+
expect(context.xxlAndUp.value).toBe(true)
320+
expect(context.xxlAndDown.value).toBe(true)
321321
})
322322
})
323323

@@ -332,15 +332,15 @@ describe.skip('useBreakpoints', () => {
332332
const mountedCallback = mockOnMounted.mock.calls[0]![0]
333333
mountedCallback()
334334

335-
expect(context.name).toBe('xs')
335+
expect(context.name.value).toBe('xs')
336336

337337
// Simulate window resize to 1400 (which should be lg: 1280-1919)
338338
mockWindow.innerWidth = 1400
339339
const resizeListener = mockWindow.addEventListener.mock.calls[0][1]
340340
resizeListener()
341341

342-
expect(context.name).toBe('lg')
343-
expect(context.width).toBe(1400)
342+
expect(context.name.value).toBe('lg')
343+
expect(context.width.value).toBe(1400)
344344
})
345345

346346
it('should clean up resize listener on scope dispose', () => {
@@ -379,8 +379,8 @@ describe.skip('useBreakpoints', () => {
379379
const mountedCallback = mockOnMounted.mock.calls[0]![0]
380380
mountedCallback()
381381

382-
expect(context.width).toBe(1000)
383-
expect(context.height).toBe(600)
382+
expect(context.width.value).toBe(1000)
383+
expect(context.height.value).toBe(600)
384384
})
385385
})
386386

@@ -419,6 +419,7 @@ describe.skip('useBreakpoints', () => {
419419
const mockApp = {
420420
runWithContext: vi.fn((callback: () => void) => callback()),
421421
provide: vi.fn(),
422+
mixin: vi.fn(),
422423
}
423424

424425
plugin.install(mockApp as any)
@@ -432,6 +433,7 @@ describe.skip('useBreakpoints', () => {
432433
const mockApp = {
433434
runWithContext: vi.fn((callback: () => void) => callback()),
434435
provide: vi.fn(),
436+
mixin: vi.fn(),
435437
}
436438

437439
expect(() => plugin.install(mockApp as any)).not.toThrow()
@@ -468,7 +470,7 @@ describe.skip('useBreakpoints', () => {
468470
const mountedCallback = mockOnMounted.mock.calls[0]![0]
469471
mountedCallback()
470472

471-
expect(context.isMobile).toBe(true) // 1200 < 1280 (lg breakpoint)
473+
expect(context.isMobile.value).toBe(true) // 1200 < 1280 (lg breakpoint)
472474
})
473475

474476
it('should handle custom mobile breakpoint as number', () => {
@@ -483,7 +485,7 @@ describe.skip('useBreakpoints', () => {
483485
const mountedCallback = mockOnMounted.mock.calls[0]![0]
484486
mountedCallback()
485487

486-
expect(context.isMobile).toBe(true) // 1000 < 1200
488+
expect(context.isMobile.value).toBe(true) // 1000 < 1200
487489
})
488490

489491
it('should fallback to md breakpoint when custom mobile breakpoint is not found', () => {
@@ -498,7 +500,7 @@ describe.skip('useBreakpoints', () => {
498500
const mountedCallback = mockOnMounted.mock.calls[0]![0]
499501
mountedCallback()
500502

501-
expect(context.isMobile).toBe(false) // 1000 >= 960 (md breakpoint)
503+
expect(context.isMobile.value).toBe(false) // 1000 >= 960 (md breakpoint)
502504
})
503505
})
504506

@@ -514,9 +516,9 @@ describe.skip('useBreakpoints', () => {
514516
const mountedCallback = mockOnMounted.mock.calls[0]![0]
515517
mountedCallback()
516518

517-
expect(context.name).toBe('xs')
518-
expect(context.width).toBe(0)
519-
expect(context.height).toBe(0)
519+
expect(context.name.value).toBe('xs')
520+
expect(context.width.value).toBe(0)
521+
expect(context.height.value).toBe(0)
520522
})
521523

522524
it('should handle very large window width', () => {
@@ -530,9 +532,9 @@ describe.skip('useBreakpoints', () => {
530532
const mountedCallback = mockOnMounted.mock.calls[0]![0]
531533
mountedCallback()
532534

533-
expect(context.name).toBe('xxl')
534-
expect(context.width).toBe(5000)
535-
expect(context.height).toBe(3000)
535+
expect(context.name.value).toBe('xxl')
536+
expect(context.width.value).toBe(5000)
537+
expect(context.height.value).toBe(3000)
536538
})
537539

538540
it('should handle breakpoint exactly at threshold', () => {
@@ -545,8 +547,8 @@ describe.skip('useBreakpoints', () => {
545547
const mountedCallback = mockOnMounted.mock.calls[0]![0]
546548
mountedCallback()
547549

548-
expect(context.name).toBe('md')
549-
expect(context.md).toBe(true)
550+
expect(context.name.value).toBe('md')
551+
expect(context.md.value).toBe(true)
550552
})
551553
})
552554
})

0 commit comments

Comments
 (0)