interface.tsx 5.3 KB

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