add image component
This commit is contained in:
parent
c1c6b2e4be
commit
c8783e8131
|
@ -0,0 +1,33 @@
|
|||
import React from 'react'
|
||||
|
||||
import { Stack } from '@tamagui/core'
|
||||
|
||||
import { Image } from './image'
|
||||
|
||||
import type { Meta, StoryObj } from '@storybook/react'
|
||||
|
||||
// More on how to set up stories at: https://storybook.js.org/docs/7.0/react/writing-stories/introduction
|
||||
const meta: Meta<typeof Image> = {
|
||||
component: Image,
|
||||
argTypes: {},
|
||||
}
|
||||
|
||||
type Story = StoryObj<typeof Image>
|
||||
|
||||
// More on writing stories with args: https://storybook.js.org/docs/7.0/react/writing-stories/args
|
||||
export const Default: Story = {
|
||||
args: {
|
||||
src: 'https://images.unsplash.com/photo-1673253082952-4ba1b404e5ee?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1160&q=80',
|
||||
width: 500,
|
||||
height: 500,
|
||||
},
|
||||
render: args => (
|
||||
<Stack space spaceDirection="vertical">
|
||||
<Image {...args} width={500} height={500} />
|
||||
<Image {...args} width={500} height={350} />
|
||||
<Image {...args} width={500} height={200} />
|
||||
</Stack>
|
||||
),
|
||||
}
|
||||
|
||||
export default meta
|
|
@ -0,0 +1,50 @@
|
|||
import React, { forwardRef } from 'react'
|
||||
|
||||
import { isWeb, setupReactNative, styled } from '@tamagui/core'
|
||||
import { Image as RNImage } from 'react-native'
|
||||
|
||||
import type { GetProps } from '@tamagui/core'
|
||||
import type { Ref } from 'react'
|
||||
|
||||
// TODO: this was used in @tamagui/image package. Why?
|
||||
// import { focusableInputHOC } from '@tamagui/focusable'
|
||||
|
||||
setupReactNative({
|
||||
Image: RNImage,
|
||||
})
|
||||
|
||||
const Base = styled(RNImage, {
|
||||
name: 'Image',
|
||||
position: 'relative',
|
||||
source: { uri: '' },
|
||||
zIndex: 1,
|
||||
})
|
||||
|
||||
type InputProps = GetProps<typeof Image>
|
||||
|
||||
interface Props {
|
||||
src: string
|
||||
width: number
|
||||
height: number
|
||||
// onLoad?: InputProps['onLoad']
|
||||
// onError?: InputProps['onError']
|
||||
}
|
||||
|
||||
const Image = (props: Props, ref: Ref<HTMLImageElement>) => {
|
||||
const { src } = props
|
||||
|
||||
const source =
|
||||
typeof src === 'string'
|
||||
? {
|
||||
uri: src,
|
||||
...(isWeb && { width: props.width, height: props.height }),
|
||||
}
|
||||
: src
|
||||
|
||||
return <Base source={source} ref={ref} />
|
||||
}
|
||||
|
||||
// focusableInputHOC(Image)
|
||||
const _Image = Base.extractable(forwardRef(Image))
|
||||
|
||||
export { _Image as Image }
|
|
@ -0,0 +1 @@
|
|||
export * from './image'
|
Loading…
Reference in New Issue