react-sketch-ruler
Version:
> In using react, the zoom operation used for page presentation
142 lines (133 loc) • 3.19 kB
text/typescript
import type { PanzoomObject, PanzoomEventDetail, PanzoomOptions } from 'simple-panzoom'
import type { RefObject } from 'react'
export interface PaletteType {
bgColor?: string
longfgColor?: string
fontColor?: string
fontShadowColor?: string
shadowColor?: string
lineColor?: string
lineType?: string
lockLineColor?: string
borderColor?: string
hoverBg?: string
hoverColor?: string
cornerActiveColor?: string
}
export interface FinalPaletteType {
bgColor: string
longfgColor: string
fontColor: string
fontShadowColor: string
shadowColor: string
lineColor: string
lineType: string
lockLineColor: string
hoverColor: string
hoverBg: string
borderColor: string
}
export interface ShadowType {
x: number
y: number
width: number
height: number
}
export interface LineType {
h: number[]
v: number[]
}
export interface SketchRulerProps {
showRuler?: boolean
eyeIcon?: string
closeEyeIcon?: string
scale?: number
rate?: number
thick?: number
palette?: PaletteType
width?: number
height?: number
paddingRatio?: number
autoCenter?: boolean
shadow?: ShadowType
showShadowText?: boolean
lines?: LineType
isShowReferLine?: boolean
canvasWidth?: number
canvasHeight?: number
snapsObj?: LineType
snapThreshold?: number
gridRatio?: number
lockLine?: boolean
selfHandle?: boolean
panzoomOption?: Partial<PanzoomOptions>
children: React.ReactNode
updateScale?: (props: number) => void
onZoomChange?: (props: PanzoomEventDetail) => void
onHandleCornerClick?: (props: boolean) => void
handleLine?: (props: LineType) => void
}
export interface RulerWrapperProps {
vertical: boolean
showShadowText: boolean
scale: number
width: number
height: number
canvasWidth: number
canvasHeight: number
startOther: number
thick: number
palette: FinalPaletteType
start: number
rate: number
lines: LineType
snapThreshold: number
snapsObj: LineType
selectStart: number
gridRatio: number
selectLength: number
lockLine: boolean
isShowReferLine: boolean
handleLine?: (props: LineType) => void
propStyle: React.CSSProperties
}
export interface LineProps {
index: number
start: number
vertical: boolean
canvasWidth: number
canvasHeight: number
snapThreshold: number
snapsObj: LineType
lines: LineType
palette: FinalPaletteType
isShowReferLine: boolean
rate: number
scale: number
value: number
lockLine: boolean
handleLine?: (props: LineType) => void
}
export interface CanvasProps {
start: number
vertical: boolean
showShadowText: boolean
canvasWidth: number
canvasHeight: number
palette: FinalPaletteType
rate: number
scale: number
width: number
height: number
selectStart: number
gridRatio: number
selectLength: number
onDragStart: (e: React.MouseEvent<HTMLCanvasElement>) => Promise<void>
}
export interface SketchRulerMethods {
reset: () => void
zoomIn: () => void
zoomOut: () => void
initPanzoom: () => void
panzoomInstance: RefObject<PanzoomObject | null>
}