canvas.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import type { Gradient, Pattern, Textbox, SerializedImageProps, Path, Rect, Image, Point, Polygon, Group, Line, Object as FabricObject, ImageProps, IText, SerializedObjectProps } from "fabric"
  2. import { ColorStop } from "./elements"
  3. import JsBarcode from "jsbarcode"
  4. import { EffectItem } from "./common"
  5. export type LineOption = [number, number, number, number]
  6. export type TPatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'
  7. export type ImageSource = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement
  8. export type QRCodeType = 'A1' | 'A2' | 'A3' | 'SP1' | 'SP2' | 'SP3' | 'B1'| 'C1'| 'A_a1'| 'A_a2'| 'A_b1'| 'A_b2'
  9. export interface QRCodeOption {
  10. codeStyle: QRCodeType
  11. codeSpace: boolean
  12. codeError: number
  13. }
  14. export interface CommenElement {
  15. id: string
  16. name: string
  17. version: string
  18. left: number
  19. top: number
  20. fillType: number
  21. background?: BackgroundElement
  22. isRotate?: boolean
  23. permissionsConfig?: []
  24. itemName?: string
  25. }
  26. export interface GradientElement extends Gradient<'linear' | 'radial'> {
  27. gradientName: string
  28. }
  29. export interface Template {
  30. id: string
  31. version: string
  32. workSpace: WorkSpaceElement
  33. background?: string
  34. backgroundImage?: SerializedImageProps
  35. zoom: number
  36. width: number
  37. height: number
  38. clip: number,
  39. objects: SerializedObjectProps[]
  40. }
  41. export interface WorkSpaceElement {
  42. fill?: string | Gradient<'linear' | 'radial'> | Pattern
  43. left: number
  44. top: number
  45. fillType: number
  46. angle: number
  47. scaleX: number
  48. scaleY: number
  49. color?: string
  50. opacity?: number
  51. imageURL?: string
  52. imageSize?: 'cover' | 'contain' | 'repeat'
  53. gaidImageURL?: string
  54. gaidImageMode?: string
  55. shadingImageURL?: string
  56. gradientType?: 'linear' | 'radial'
  57. gradientName?: string
  58. gradientColor?: ColorStop[]
  59. gradientRotate?: number
  60. backgroundColor?: string
  61. permissionsConfig?: []
  62. userSelectableColors?:[]
  63. backgroundPadding?:{top:0,left:0,right:0,bottom:0}
  64. }
  65. export interface BackgroundElement {
  66. fill: string | Gradient<'linear' | 'radial'> | Pattern
  67. color: string
  68. fillType: number
  69. opacity: number
  70. imageURL?: string
  71. imageSize?: 'cover' | 'contain' | 'repeat'
  72. gaidImageURL?: string
  73. gaidImageMode?: string
  74. shadingImageURL?: string
  75. gradientType?: 'linear' | 'radial'
  76. gradientName?: string
  77. gradientColor?: ColorStop[]
  78. gradientRotate?: number
  79. gradientOffsetX?: number
  80. gradientOffsetY?: number
  81. backgroundColor?: string
  82. permissionsConfig?: []
  83. userSelectableColors?:[]
  84. backgroundPadding?:{top:0,left:0,right:0,bottom:0}
  85. }
  86. export interface TextboxElement extends Textbox, CommenElement {
  87. fontFamily: string
  88. color: string
  89. fillRepeat: TPatternRepeat
  90. fillURL: string
  91. editable: boolean
  92. userPresetTexts?:[]
  93. }
  94. export interface ITextElement extends IText, CommenElement {
  95. fontFamily: string
  96. color: string
  97. fillRepeat: TPatternRepeat
  98. fillURL: string
  99. editable: boolean
  100. userPresetTexts?:[]
  101. }
  102. export interface PathElement extends Path, CommenElement {
  103. fill: string | Gradient<'linear'> | Gradient<'radial'>
  104. type: string
  105. }
  106. export interface RectElement extends Rect, CommenElement {
  107. type: string
  108. }
  109. export interface LineElement extends Line, CommenElement {
  110. startStyle?: string | null
  111. endStyle?: string | null
  112. type: string
  113. }
  114. export interface PolygonElement extends Polygon, CommenElement {
  115. type: string
  116. points: Point[]
  117. }
  118. export interface QRCodeElement extends Image, CommenElement {
  119. type: string
  120. codeContent: string
  121. codeOption: QRCodeOption
  122. }
  123. export interface BarCodeElement extends Image, CommenElement {
  124. type: string
  125. codeContent: string
  126. codeOption: JsBarcode.BaseOptions
  127. }
  128. export interface BarcodeProps extends ImageProps {
  129. type: string
  130. codeContent: string
  131. codeOption: JsBarcode.BaseOptions
  132. }
  133. export interface QRCodeProps extends ImageProps {
  134. type: string
  135. codeContent: string
  136. codeOption: QRCodeOption
  137. }
  138. export interface ReferenceLineProps extends Line {
  139. type: string
  140. axis: 'horizontal' | 'vertical' | ''
  141. }
  142. export interface ImageElement extends SerializedImageProps, CommenElement {
  143. type: string
  144. effects?: EffectItem[]
  145. pixiFilters?: any[]
  146. mask?: FabricObject
  147. originSrc?: string
  148. isCropping?: boolean
  149. originId?: string
  150. cropPath?: FabricObject
  151. originLeft?: number
  152. originTop?: number
  153. originCropX?: number
  154. originCropY?: number
  155. }
  156. export interface GroupElement extends Group, CommenElement {
  157. type: string
  158. isShow: boolean
  159. objects: FabricObject[]
  160. _objects: FabricObject[]
  161. }
  162. export type CanvasElement = TextboxElement | LineElement | QRCodeElement | BarCodeElement | ImageElement | PathElement | GroupElement | PolygonElement | RectElement