Port over gutters fix
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
import {useMemo} from 'react'
|
||||||
|
import {useMediaQuery} from 'react-responsive'
|
||||||
|
|
||||||
|
export type Breakpoint = 'gtPhone' | 'gtMobile' | 'gtTablet'
|
||||||
|
|
||||||
|
export function useBreakpoints(): Record<Breakpoint, boolean> & {
|
||||||
|
activeBreakpoint: Breakpoint | undefined
|
||||||
|
} {
|
||||||
|
const gtPhone = useMediaQuery({minWidth: 500})
|
||||||
|
const gtMobile = useMediaQuery({minWidth: 800})
|
||||||
|
const gtTablet = useMediaQuery({minWidth: 1300})
|
||||||
|
return useMemo(() => {
|
||||||
|
let active: Breakpoint | undefined
|
||||||
|
if (gtTablet) {
|
||||||
|
active = 'gtTablet'
|
||||||
|
} else if (gtMobile) {
|
||||||
|
active = 'gtMobile'
|
||||||
|
} else if (gtPhone) {
|
||||||
|
active = 'gtPhone'
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
activeBreakpoint: active,
|
||||||
|
gtPhone,
|
||||||
|
gtMobile,
|
||||||
|
gtTablet,
|
||||||
|
}
|
||||||
|
}, [gtPhone, gtMobile, gtTablet])
|
||||||
|
}
|
||||||
+2
-28
@@ -1,5 +1,4 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {useMediaQuery} from 'react-responsive'
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
computeFontScaleMultiplier,
|
computeFontScaleMultiplier,
|
||||||
@@ -14,13 +13,14 @@ import {BLUE_HUE, GREEN_HUE, RED_HUE} from '#/alf/util/colorGeneration'
|
|||||||
import {Device} from '#/storage'
|
import {Device} from '#/storage'
|
||||||
|
|
||||||
export {atoms} from '#/alf/atoms'
|
export {atoms} from '#/alf/atoms'
|
||||||
|
export * from '#/alf/breakpoints'
|
||||||
export * from '#/alf/fonts'
|
export * from '#/alf/fonts'
|
||||||
export * as tokens from '#/alf/tokens'
|
export * as tokens from '#/alf/tokens'
|
||||||
export * from '#/alf/types'
|
export * from '#/alf/types'
|
||||||
export * from '#/alf/util/flatten'
|
export * from '#/alf/util/flatten'
|
||||||
export * from '#/alf/util/platform'
|
export * from '#/alf/util/platform'
|
||||||
export * from '#/alf/util/themeSelector'
|
export * from '#/alf/util/themeSelector'
|
||||||
export * from '#/alf/util/useGutterStyles'
|
export * from '#/alf/util/useGutters'
|
||||||
|
|
||||||
export type Alf = {
|
export type Alf = {
|
||||||
themeName: ThemeName
|
themeName: ThemeName
|
||||||
@@ -142,29 +142,3 @@ export function useTheme(theme?: ThemeName) {
|
|||||||
return theme ? alf.themes[theme] : alf.theme
|
return theme ? alf.themes[theme] : alf.theme
|
||||||
}, [theme, alf])
|
}, [theme, alf])
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Breakpoint = 'gtPhone' | 'gtMobile' | 'gtTablet'
|
|
||||||
|
|
||||||
export function useBreakpoints(): Record<Breakpoint, boolean> & {
|
|
||||||
activeBreakpoint: Breakpoint | undefined
|
|
||||||
} {
|
|
||||||
const gtPhone = useMediaQuery({minWidth: 500})
|
|
||||||
const gtMobile = useMediaQuery({minWidth: 800})
|
|
||||||
const gtTablet = useMediaQuery({minWidth: 1300})
|
|
||||||
return React.useMemo(() => {
|
|
||||||
let active: Breakpoint | undefined
|
|
||||||
if (gtTablet) {
|
|
||||||
active = 'gtTablet'
|
|
||||||
} else if (gtMobile) {
|
|
||||||
active = 'gtMobile'
|
|
||||||
} else if (gtPhone) {
|
|
||||||
active = 'gtPhone'
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
activeBreakpoint: active,
|
|
||||||
gtPhone,
|
|
||||||
gtMobile,
|
|
||||||
gtTablet,
|
|
||||||
}
|
|
||||||
}, [gtPhone, gtMobile, gtTablet])
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
import {atoms as a} from '#/alf/atoms'
|
||||||
|
import {Breakpoint, useBreakpoints} from '#/alf/breakpoints'
|
||||||
|
import * as tokens from '#/alf/tokens'
|
||||||
|
|
||||||
|
type Gutter = 'compact' | 'base' | 'wide' | 0
|
||||||
|
|
||||||
|
const gutters: Record<
|
||||||
|
Exclude<Gutter, 0>,
|
||||||
|
Record<Breakpoint | 'default', number>
|
||||||
|
> = {
|
||||||
|
compact: {
|
||||||
|
default: tokens.space.sm,
|
||||||
|
gtPhone: tokens.space.sm,
|
||||||
|
gtMobile: tokens.space.md,
|
||||||
|
gtTablet: tokens.space.md,
|
||||||
|
},
|
||||||
|
base: {
|
||||||
|
default: tokens.space.lg,
|
||||||
|
gtPhone: tokens.space.lg,
|
||||||
|
gtMobile: tokens.space.xl,
|
||||||
|
gtTablet: tokens.space.xl,
|
||||||
|
},
|
||||||
|
wide: {
|
||||||
|
default: tokens.space.xl,
|
||||||
|
gtPhone: tokens.space.xl,
|
||||||
|
gtMobile: tokens.space._3xl,
|
||||||
|
gtTablet: tokens.space._3xl,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
type Gutters = {
|
||||||
|
paddingTop?: number
|
||||||
|
paddingRight?: number
|
||||||
|
paddingBottom?: number
|
||||||
|
paddingLeft?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useGutters([all]: [Gutter]): Gutters
|
||||||
|
export function useGutters([vertical, horizontal]: [Gutter, Gutter]): Gutters
|
||||||
|
export function useGutters([top, right, bottom, left]: [
|
||||||
|
Gutter,
|
||||||
|
Gutter,
|
||||||
|
Gutter,
|
||||||
|
Gutter,
|
||||||
|
]): Gutters
|
||||||
|
export function useGutters([top, right, bottom, left]: Gutter[]) {
|
||||||
|
const {activeBreakpoint} = useBreakpoints()
|
||||||
|
return React.useMemo(() => {
|
||||||
|
if (!right) {
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
right = bottom = left = top
|
||||||
|
} else if (!bottom || !left) {
|
||||||
|
bottom = top
|
||||||
|
left = right
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
paddingTop:
|
||||||
|
top === 0 ? undefined : gutters[top][activeBreakpoint || 'default'],
|
||||||
|
paddingRight:
|
||||||
|
right === 0 ? undefined : gutters[right][activeBreakpoint || 'default'],
|
||||||
|
paddingBottom:
|
||||||
|
bottom === 0
|
||||||
|
? undefined
|
||||||
|
: gutters[bottom][activeBreakpoint || 'default'],
|
||||||
|
paddingLeft:
|
||||||
|
left === 0 ? undefined : gutters[left][activeBreakpoint || 'default'],
|
||||||
|
}
|
||||||
|
}, [activeBreakpoint, top, bottom, left, right])
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useGutterStyles({
|
||||||
|
top,
|
||||||
|
bottom,
|
||||||
|
}: {
|
||||||
|
top?: boolean
|
||||||
|
bottom?: boolean
|
||||||
|
} = {}) {
|
||||||
|
const {gtMobile} = useBreakpoints()
|
||||||
|
return React.useMemo<any>(() => {
|
||||||
|
return [
|
||||||
|
a.px_lg,
|
||||||
|
top && a.pt_md,
|
||||||
|
bottom && a.pb_md,
|
||||||
|
gtMobile && [a.px_xl, top && a.pt_lg, bottom && a.pb_lg],
|
||||||
|
]
|
||||||
|
}, [gtMobile, top, bottom])
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user