interface.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. import { ReactNode } from "react";
  2. import { BaseProps } from "_base/baseComponent";
  3. import { RatioType } from '@douyinfe/semi-foundation/image/previewInnerFoundation';
  4. import React from "react";
  5. export type { RatioType };
  6. export interface ImageStates {
  7. src: string;
  8. loadStatus: "loading" | "success" | "error";
  9. previewVisible: boolean
  10. }
  11. export interface ImageProps extends BaseProps, Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'onLoad' | 'onError'> {
  12. src?: string;
  13. width?: string | number;
  14. height?: string | number;
  15. alt?: string;
  16. placeholder?: ReactNode;
  17. fallback?: string | ReactNode;
  18. preview?: boolean | PreviewProps;
  19. onError?: (event: Event) => void;
  20. onLoad?: (event: Event) => void;
  21. onClick?: (event: any) => void;
  22. crossOrigin?: "anonymous" | "use-credentials";
  23. children?: ReactNode;
  24. imageID?: number;
  25. setDownloadName?: (src: string) => string;
  26. imgStyle?: React.CSSProperties;
  27. imgCls?: string
  28. }
  29. export interface PreviewProps extends BaseProps {
  30. visible?: boolean;
  31. src?: string | string[];
  32. previewTitle?: ReactNode;
  33. currentIndex?: number;
  34. defaultCurrentIndex?: number;
  35. defaultVisible?: boolean;
  36. maskClosable?: boolean;
  37. closable?: boolean;
  38. zoomStep?: number;
  39. infinite?: boolean;
  40. showTooltip?: boolean;
  41. closeOnEsc?: boolean;
  42. prevTip?: string;
  43. nextTip?: string;
  44. zoomInTip?: string;
  45. zoomOutTip?: string;
  46. rotateTip?: string;
  47. downloadTip?: string;
  48. adaptiveTip?: string;
  49. originTip?: string;
  50. lazyLoad?: boolean;
  51. lazyLoadMargin?: string;
  52. preLoad?: boolean;
  53. preLoadGap?: number;
  54. viewerVisibleDelay?: number;
  55. disableDownload?: boolean;
  56. zIndex?: number;
  57. children?: ReactNode;
  58. crossOrigin?: "anonymous" | "use-credentials";
  59. maxZoom?: number;
  60. minZoom?: number;
  61. previewCls?: string;
  62. previewStyle?: React.CSSProperties;
  63. renderLeftIcon?: React.ReactElement | ((index: number) => ReactNode);
  64. renderRightIcon?: React.ReactElement | ((index: number) => ReactNode);
  65. renderCloseIcon?: React.ReactElement | (() => React.ReactElement);
  66. renderHeader?: (info: any) => ReactNode;
  67. renderPreviewMenu?: (props: MenuProps) => ReactNode;
  68. getPopupContainer?: () => HTMLElement;
  69. onVisibleChange?: (visible: boolean) => void;
  70. onChange?: (index: number) => void;
  71. onClose?: () => void;
  72. onZoomIn?: (zoom: number) => void;
  73. onZoomOut?: (zoom: number) => void;
  74. onPrev?: (index: number) => void;
  75. onNext?: (index: number) => void;
  76. onRatioChange?: (type: RatioType) => void;
  77. onRotateLeft?: (angle: number) => void;
  78. onDownload?: (src: string, index: number) => void;
  79. onDownloadError?: (src: string) => void;
  80. setDownloadName?: (src: string) => string
  81. }
  82. export interface PreviewInnerProps extends Omit<PreviewProps, "previewCls" | "previewStyle"> { }
  83. export interface MenuProps {
  84. min?: number;
  85. max?: number;
  86. step?: number;
  87. curPage?: number;
  88. totalNum?: number;
  89. zoom?: number;
  90. ratio?: RatioType;
  91. disabledPrev?: boolean;
  92. disabledNext?: boolean;
  93. disableDownload?: boolean;
  94. onDownload?: () => void;
  95. onNext?: () => void;
  96. onPrev?: () => void;
  97. onZoomIn?: () => void;
  98. onZoomOut?: () => void;
  99. onRatioClick?: () => void;
  100. onRotateLeft?: () => void;
  101. onRotateRight?: () => void
  102. }
  103. export interface PreviewInnerStates {
  104. imgSrc?: string[];
  105. imgLoadStatus?: Map<string, boolean>;
  106. zoom?: number;
  107. rotation?: number;
  108. ratio?: RatioType;
  109. currentIndex?: number;
  110. viewerVisible?: boolean;
  111. visible?: boolean;
  112. preloadAfterVisibleChange?: boolean;
  113. direction?: string
  114. }
  115. export interface SliderProps {
  116. max?: number;
  117. min?: number;
  118. step?: number
  119. }
  120. export interface HeaderProps {
  121. closable: boolean;
  122. renderHeader?: (info: any) => ReactNode;
  123. title?: string;
  124. titleStyle?: React.CSSProperties;
  125. className?: string;
  126. onClose?: (e: React.MouseEvent<HTMLElement>) => void;
  127. renderCloseIcon?: React.ReactElement | (() => React.ReactElement)
  128. }
  129. export interface FooterProps extends SliderProps {
  130. curPage?: number;
  131. totalNum?: number;
  132. disabledPrev?: boolean;
  133. disabledNext?: boolean;
  134. disableDownload?: boolean;
  135. className?: string;
  136. zoom?: number;
  137. ratio?: RatioType;
  138. prevTip?: string;
  139. nextTip?: string;
  140. zoomInTip?: string;
  141. zoomOutTip?: string;
  142. rotateTip?: string;
  143. downloadTip?: string;
  144. adaptiveTip?: string;
  145. originTip?: string;
  146. showTooltip?: boolean;
  147. zIndex?: number;
  148. onZoomIn?: (zoom: number) => void;
  149. onZoomOut?: (zoom: number) => void;
  150. onPrev?: () => void;
  151. onNext?: () => void;
  152. onAdjustRatio?: (type: RatioType) => void;
  153. onRotate?: (direction: string) => void;
  154. onDownload?: () => void;
  155. renderPreviewMenu?: (props: MenuProps) => ReactNode;
  156. forwardRef?: React.RefObject<HTMLElement>
  157. }
  158. export interface PreviewImageProps {
  159. src?: string;
  160. rotation?: number;
  161. style?: React.CSSProperties;
  162. // maxZoom?: number;
  163. // minZoom?: number;
  164. // zoomStep?: number;
  165. zoom?: number;
  166. ratio?: RatioType;
  167. disableDownload?: boolean;
  168. clickZoom?: number;
  169. crossOrigin?: "anonymous" | "use-credentials";
  170. setRatio?: (type: RatioType) => void;
  171. onZoom?: (zoom: number) => void;
  172. onLoad?: (src: string) => void;
  173. onError?: (src: string) => void
  174. }
  175. export interface ImageTranslate {
  176. x: number;
  177. y: number
  178. }
  179. export interface PreviewImageStates {
  180. loading: boolean;
  181. width: number;
  182. height: number;
  183. translate: ImageTranslate;
  184. currZoom: number
  185. }
  186. export interface DragDirection {
  187. canDragVertical: boolean;
  188. canDragHorizontal: boolean
  189. }
  190. export interface ExtremeBounds {
  191. left: number;
  192. top: number
  193. }
  194. export interface PreviewState {
  195. currentIndex: number;
  196. visible: boolean
  197. }