66b8774ecb
* Install on native as well * Add button and link components * Comments * Use new prop * Add some form elements * Add labels to input * Fix line height, add suffix * Date inputs * Autofill styles * Clean up InputDate types * Improve types for InputText, value handling * Enforce a11y props on buttons * Add Dialog, Portal * Dialog contents * Native dialog * Clean up * Fix animations * Improvements to web modal, exiting still broken * Clean up dialog types * Add Prompt, Dialog refinement, mobile refinement * Integrate new design tokens, reorg storybook * Button colors * Dim mode * Reorg * Some styles * Toggles * Improve a11y * Autosize dialog, handle max height, Dialog.ScrolLView not working * Try to use BottomSheet's own APIs * Scrollable dialogs * Add web shadow * Handle overscroll * Styles * Dialog text input * Shadows * Button focus states * Button pressed states * Gradient poc * Gradient colors and hovers * Add hrefAttrs to Link * Some more a11y * Toggle invalid states * Update dialog descriptions for demo * Icons * WIP Toggle cleanup * Refactor toggle to not rely on immediate children * Make Toggle controlled * Clean up Toggles storybook * ToggleButton styles * Improve a11y labels * ToggleButton hover darkmode * Some i18n * Refactor input * Allow extension of input * Remove old input * Improve icons, add CalendarDays * Refactor DateField, web done * Add label example * Clean up old InputDate, DateField android, text area example * Consistent imports * Button context, icons * Add todo * Add closeAllDialogs control * Alignment * Expand color palette * Hitslops, add shortcut to Storybook in dev * Fix multiline on ios * Mark dialog close button as unused
125 lines
2.5 KiB
TypeScript
125 lines
2.5 KiB
TypeScript
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}]}
|
|
/>
|
|
)
|
|
}
|