interface.tsx 4.7 KB

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