interface.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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. renderHeader?: (info: any) => ReactNode;
  64. renderPreviewMenu?: (props: MenuProps) => ReactNode;
  65. getPopupContainer?: () => HTMLElement;
  66. onVisibleChange?: (visible: boolean) => void;
  67. onChange?: (index: number) => void;
  68. onClose?: () => void;
  69. onZoomIn?: (zoom: number) => void;
  70. onZoomOut?: (zoom: number) => void;
  71. onPrev?: (index: number) => void;
  72. onNext?: (index: number) => void;
  73. onRatioChange?: (type: RatioType) => void;
  74. onRotateLeft?: (angle: number) => void;
  75. onDownload?: (src: string, index: number) => void;
  76. onDownloadError?: (src: string) => void;
  77. setDownloadName?: (src: string) => string
  78. }
  79. export interface PreviewInnerProps extends Omit<PreviewProps, "previewCls" | "previewStyle"> { }
  80. export interface MenuProps {
  81. min?: number;
  82. max?: number;
  83. step?: number;
  84. curPage?: number;
  85. totalNum?: number;
  86. zoom?: number;
  87. ratio?: RatioType;
  88. disabledPrev?: boolean;
  89. disabledNext?: boolean;
  90. disableDownload?: boolean;
  91. onDownload?: () => void;
  92. onNext?: () => void;
  93. onPrev?: () => void;
  94. onZoomIn?: () => void;
  95. onZoomOut?: () => void;
  96. onRatioClick?: () => void;
  97. onRotateLeft?: () => void;
  98. onRotateRight?: () => void
  99. }
  100. export interface PreviewInnerStates {
  101. imgSrc?: string[];
  102. imgLoadStatus?: Map<string, boolean>;
  103. zoom?: number;
  104. rotation?: number;
  105. ratio?: RatioType;
  106. currentIndex?: number;
  107. viewerVisible?: boolean;
  108. visible?: boolean;
  109. preloadAfterVisibleChange?: boolean;
  110. direction?: string
  111. }
  112. export interface SliderProps {
  113. max?: number;
  114. min?: number;
  115. step?: number
  116. }
  117. export interface HeaderProps {
  118. closable: boolean;
  119. renderHeader?: (info: any) => ReactNode;
  120. title?: string;
  121. titleStyle?: React.CSSProperties;
  122. className?: string;
  123. onClose?: (e: React.MouseEvent<HTMLElement>) => void
  124. }
  125. export interface FooterProps extends SliderProps {
  126. curPage?: number;
  127. totalNum?: number;
  128. disabledPrev?: boolean;
  129. disabledNext?: boolean;
  130. disableDownload?: boolean;
  131. className?: string;
  132. zoom?: number;
  133. ratio?: RatioType;
  134. prevTip?: string;
  135. nextTip?: string;
  136. zoomInTip?: string;
  137. zoomOutTip?: string;
  138. rotateTip?: string;
  139. downloadTip?: string;
  140. adaptiveTip?: string;
  141. originTip?: string;
  142. showTooltip?: boolean;
  143. zIndex?: number;
  144. onZoomIn?: (zoom: number) => void;
  145. onZoomOut?: (zoom: number) => void;
  146. onPrev?: () => void;
  147. onNext?: () => void;
  148. onAdjustRatio?: (type: RatioType) => void;
  149. onRotate?: (direction: string) => void;
  150. onDownload?: () => void;
  151. renderPreviewMenu?: (props: MenuProps) => ReactNode;
  152. forwardRef?: React.RefObject<HTMLElement>
  153. }
  154. export interface PreviewImageProps {
  155. src?: string;
  156. rotation?: number;
  157. style?: React.CSSProperties;
  158. // maxZoom?: number;
  159. // minZoom?: number;
  160. // zoomStep?: number;
  161. zoom?: number;
  162. ratio?: RatioType;
  163. disableDownload?: boolean;
  164. clickZoom?: number;
  165. crossOrigin?: "anonymous" | "use-credentials";
  166. setRatio?: (type: RatioType) => void;
  167. onZoom?: (zoom: number) => void;
  168. onLoad?: (src: string) => void;
  169. onError?: (src: string) => void
  170. }
  171. export interface ImageTranslate {
  172. x: number;
  173. y: number
  174. }
  175. export interface PreviewImageStates {
  176. loading: boolean;
  177. width: number;
  178. height: number;
  179. translate: ImageTranslate;
  180. currZoom: number
  181. }
  182. export interface DragDirection {
  183. canDragVertical: boolean;
  184. canDragHorizontal: boolean
  185. }
  186. export interface ExtremeBounds {
  187. left: number;
  188. top: number
  189. }
  190. export interface PreviewState {
  191. currentIndex: number;
  192. visible: boolean
  193. }