react-native-sortables
Version:
Powerful Sortable Components for Flexible Content Reordering in React Native
134 lines (123 loc) • 3.13 kB
text/typescript
import type { ViewStyle } from 'react-native';
import type { SharedValue } from 'react-native-reanimated';
import type { Maybe } from '../helperTypes';
import type { Vector } from './layout/shared';
export enum DebugComponentType {
CROSS = 'cross',
LINE = 'line',
RECT = 'rect'
}
export type DebugCrossProps = Pick<
DebugLineProps,
'color' | 'opacity' | 'style' | 'thickness' | 'visible'
> & {
isAbsolute?: boolean;
} & (
| {
x: Maybe<number>;
y: Maybe<number>;
position?: never;
}
| {
x?: never;
y?: never;
position: Maybe<Vector>;
}
);
export type DebugLineProps = {
isAbsolute?: boolean;
visible?: boolean;
color?: ViewStyle['borderColor'];
thickness?: number;
style?: ViewStyle['borderStyle'];
opacity?: number;
} & (
| {
from: Maybe<Vector>;
to: Maybe<Vector>;
x?: never;
y?: never;
}
| {
x: Maybe<number>;
y?: never;
from?: never;
to?: never;
}
| {
x?: never;
y: Maybe<number>;
from?: never;
to?: never;
}
);
export type DebugRectProps = Pick<
ViewStyle,
'backgroundColor' | 'borderColor' | 'borderStyle' | 'borderWidth'
> & {
isAbsolute?: boolean;
backgroundOpacity?: number;
visible?: boolean;
} & (
| {
from: Maybe<Vector>;
to: Maybe<Vector>;
x?: never;
y?: never;
width?: never;
height?: never;
positionOrigin?: never;
}
| {
x: Maybe<number>;
y: Maybe<number>;
from?: never;
to?: never;
width: Maybe<number>;
height: Maybe<number>;
positionOrigin?: `${'left' | 'right'} ${'bottom' | 'top'}`;
}
| {
x: Maybe<number>;
y?: never;
from?: never;
to?: never;
width: Maybe<number>;
height?: never;
positionOrigin?: `${'left' | 'right'}`;
}
| {
x?: never;
y: Maybe<number>;
from?: never;
to?: never;
width?: never;
height: Maybe<number>;
positionOrigin?: `${'bottom' | 'top'}`;
}
);
export type WrappedProps<P> = { props: SharedValue<P> };
type CreateDebugComponentUpdater<
T extends DebugComponentType,
P extends { isAbsolute?: boolean }
> = {
props: SharedValue<P>;
hide: () => void;
set: (props: ((prevProps: P) => P) | P) => void;
type: T;
};
export type DebugComponentUpdater<T extends DebugComponentType> =
T extends DebugComponentType.LINE
? CreateDebugComponentUpdater<T, DebugLineProps>
: T extends DebugComponentType.RECT
? CreateDebugComponentUpdater<T, DebugRectProps>
: T extends DebugComponentType.CROSS
? CreateDebugComponentUpdater<T, DebugCrossProps>
: never;
export type DebugLineUpdater = DebugComponentUpdater<DebugComponentType.LINE>;
export type DebugCrossUpdater = DebugComponentUpdater<DebugComponentType.CROSS>;
export type DebugRectUpdater = DebugComponentUpdater<DebugComponentType.RECT>;
export type DebugViews = Record<
number,
DebugComponentUpdater<DebugComponentType>
>;