interface.tsx 5.0 KB

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