interface.tsx 4.8 KB

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