about summary refs log tree commit diff
path: root/src/components/Typography.tsx
blob: 66cf0720de56ae6001e07c1b7d45826d91bea095 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import React from 'react'
import {Text as RNText, TextProps} from 'react-native'

import {useTheme, atoms, web, flatten} from '#/alf'

export function Text({style, ...rest}: TextProps) {
  const t = useTheme()
  return <RNText style={[atoms.text_sm, t.atoms.text, style]} {...rest} />
}

export function H1({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 1,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_5xl, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function H2({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 2,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_4xl, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function H3({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 3,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_3xl, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function H4({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 4,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_2xl, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function H5({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 5,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_xl, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function H6({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'heading',
      'aria-level': 6,
    }) || {}
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_lg, atoms.font_bold, t.atoms.text, flatten(style)]}
    />
  )
}

export function P({style, ...rest}: TextProps) {
  const t = useTheme()
  const attr =
    web({
      role: 'paragraph',
    }) || {}
  const _style = flatten(style)
  const lineHeight =
    (_style?.lineHeight || atoms.text_md.lineHeight) *
    atoms.leading_normal.lineHeight
  return (
    <RNText
      {...attr}
      {...rest}
      style={[atoms.text_md, t.atoms.text, _style, {lineHeight}]}
    />
  )
}