Skip to content

Commit cadf27a

Browse files
committed
feat: add grid part
1 parent 614a2cf commit cadf27a

File tree

21 files changed

+132
-24
lines changed

21 files changed

+132
-24
lines changed

packages/react/src/components/image-cropper/examples/basic.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export const Basic = () => {
1111
<div />
1212
</ImageCropper.Handle>
1313
))}
14+
<ImageCropper.Grid axis="horizontal" />
15+
<ImageCropper.Grid axis="vertical" />
1416
</ImageCropper.Selection>
1517
</ImageCropper.Viewport>
1618
</ImageCropper.Root>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type { GridProps } from '@zag-js/image-cropper'
2+
import { mergeProps } from '@zag-js/react'
3+
import { forwardRef } from 'react'
4+
import { type HTMLProps, type PolymorphicProps, ark } from '../factory'
5+
import { useImageCropperContext } from './use-image-cropper-context'
6+
7+
export interface ImageCropperGridBaseProps extends PolymorphicProps, GridProps {}
8+
export interface ImageCropperGridProps extends HTMLProps<'div'>, ImageCropperGridBaseProps {}
9+
10+
export const ImageCropperGrid = forwardRef<HTMLDivElement, ImageCropperGridProps>((props, ref) => {
11+
const { axis, ...localProps } = props
12+
const imageCropper = useImageCropperContext()
13+
const mergedProps = mergeProps(imageCropper.getGridProps({ axis }), localProps)
14+
15+
return <ark.div {...mergedProps} ref={ref} />
16+
})
17+
18+
ImageCropperGrid.displayName = 'ImageCropperGrid'

packages/react/src/components/image-cropper/image-cropper-handle.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
1-
import type { HandlePosition } from '@zag-js/image-cropper'
1+
import type { HandleProps } from '@zag-js/image-cropper'
22
import { mergeProps } from '@zag-js/react'
33
import { forwardRef } from 'react'
44
import { type HTMLProps, type PolymorphicProps, ark } from '../factory'
55
import { useImageCropperContext } from './use-image-cropper-context'
66

7-
export interface ImageCropperHandleBaseProps extends PolymorphicProps {
8-
/**
9-
* The position of the handle
10-
*/
11-
position: HandlePosition
12-
}
7+
export interface ImageCropperHandleBaseProps extends PolymorphicProps, HandleProps {}
138
export interface ImageCropperHandleProps extends HTMLProps<'div'>, ImageCropperHandleBaseProps {}
149

1510
export const ImageCropperHandle = forwardRef<HTMLDivElement, ImageCropperHandleProps>((props, ref) => {

packages/react/src/components/image-cropper/image-cropper.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ export type {
1111
} from '@zag-js/image-cropper'
1212
export { handles } from '@zag-js/image-cropper'
1313
export { ImageCropperContext as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context'
14+
export {
15+
ImageCropperGrid as Grid,
16+
type ImageCropperGridBaseProps as GridBaseProps,
17+
type ImageCropperGridProps as GridProps,
18+
} from './image-cropper-grid'
1419
export {
1520
ImageCropperHandle as Handle,
1621
type ImageCropperHandleBaseProps as HandleBaseProps,

packages/react/src/components/image-cropper/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type {
77
ZoomChangeDetails as ImageCropperZoomChangeDetails,
88
} from '@zag-js/image-cropper'
99
export { ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context'
10+
export { ImageCropperGrid, type ImageCropperGridBaseProps, type ImageCropperGridProps } from './image-cropper-grid'
1011
export {
1112
ImageCropperHandle,
1213
type ImageCropperHandleBaseProps,

packages/solid/src/components/image-cropper/examples/basic.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export const Basic = () => {
1414
</ImageCropper.Handle>
1515
)}
1616
</For>
17+
<ImageCropper.Grid axis="horizontal" />
18+
<ImageCropper.Grid axis="vertical" />
1719
</ImageCropper.Selection>
1820
</ImageCropper.Viewport>
1921
</ImageCropper.Root>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type { GridProps } from '@zag-js/image-cropper'
2+
import { mergeProps } from '@zag-js/solid'
3+
import { type HTMLProps, type PolymorphicProps, ark } from '../factory'
4+
import { useImageCropperContext } from './use-image-cropper-context'
5+
6+
export interface ImageCropperGridBaseProps extends PolymorphicProps<'div'>, GridProps {}
7+
export interface ImageCropperGridProps extends HTMLProps<'div'>, ImageCropperGridBaseProps {}
8+
9+
export const ImageCropperGrid = (props: ImageCropperGridProps) => {
10+
const api = useImageCropperContext()
11+
const mergedProps = mergeProps(() => api().getGridProps({ axis: props.axis }), props)
12+
13+
return <ark.div {...mergedProps} />
14+
}

packages/solid/src/components/image-cropper/image-cropper-handle.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
import type { HandlePosition } from '@zag-js/image-cropper'
1+
import type { HandleProps } from '@zag-js/image-cropper'
22
import { mergeProps } from '@zag-js/solid'
33
import { type HTMLProps, type PolymorphicProps, ark } from '../factory'
44
import { useImageCropperContext } from './use-image-cropper-context'
55

6-
export interface ImageCropperHandleBaseProps extends PolymorphicProps<'div'> {
7-
/**
8-
* The position of the handle
9-
*/
10-
position: HandlePosition
11-
}
6+
export interface ImageCropperHandleBaseProps extends PolymorphicProps<'div'>, HandleProps {}
127
export interface ImageCropperHandleProps extends HTMLProps<'div'>, ImageCropperHandleBaseProps {}
138

149
export const ImageCropperHandle = (props: ImageCropperHandleProps) => {

packages/solid/src/components/image-cropper/image-cropper.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ export type {
88
} from '@zag-js/image-cropper'
99
export { handles } from '@zag-js/image-cropper'
1010
export { ImageCropperContext as Context, type ImageCropperContextProps as ContextProps } from './image-cropper-context'
11+
export {
12+
ImageCropperGrid as Grid,
13+
type ImageCropperGridBaseProps as GridBaseProps,
14+
type ImageCropperGridProps as GridProps,
15+
} from './image-cropper-grid'
1116
export {
1217
ImageCropperHandle as Handle,
1318
type ImageCropperHandleBaseProps as HandleBaseProps,

packages/solid/src/components/image-cropper/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type {
77
ZoomChangeDetails as ImageCropperZoomChangeDetails,
88
} from '@zag-js/image-cropper'
99
export { ImageCropperContext, type ImageCropperContextProps } from './image-cropper-context'
10+
export { ImageCropperGrid, type ImageCropperGridBaseProps, type ImageCropperGridProps } from './image-cropper-grid'
1011
export {
1112
ImageCropperHandle,
1213
type ImageCropperHandleBaseProps,

0 commit comments

Comments
 (0)