slides.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import { IBarChartOptions, ILineChartOptions, IPieChartOptions } from 'chartist'
  2. export interface PPTElementShadow {
  3. h: number;
  4. v: number;
  5. blur: number;
  6. color: string;
  7. }
  8. export enum ElementTypes {
  9. TEXT = 'text',
  10. IMAGE = 'image',
  11. SHAPE = 'shape',
  12. LINE = 'line',
  13. CHART = 'chart',
  14. TABLE = 'table',
  15. }
  16. export interface PPTElementOutline {
  17. style?: 'dashed' | 'solid';
  18. width?: number;
  19. color?: string;
  20. }
  21. export interface PPTTextElement {
  22. type: 'text';
  23. id: string;
  24. left: number;
  25. top: number;
  26. lock?: boolean;
  27. groupId?: string;
  28. width: number;
  29. height: number;
  30. content: string;
  31. rotate?: number;
  32. outline?: PPTElementOutline;
  33. fill?: string;
  34. lineHeight?: number;
  35. wordSpace?: number;
  36. opacity?: number;
  37. shadow?: PPTElementShadow;
  38. }
  39. export interface ImageElementFilters {
  40. 'blur'?: string;
  41. 'brightness'?: string;
  42. 'contrast'?: string;
  43. 'grayscale'?: string;
  44. 'saturate'?: string;
  45. 'hue-rotate'?: string;
  46. 'opacity'?: string;
  47. }
  48. export interface PPTImageElement {
  49. type: 'image';
  50. id: string;
  51. left: number;
  52. top: number;
  53. lock?: boolean;
  54. groupId?: string;
  55. width: number;
  56. height: number;
  57. fixedRatio: boolean;
  58. src: string;
  59. rotate?: number;
  60. outline?: PPTElementOutline;
  61. filters?: ImageElementFilters;
  62. clip?: {
  63. range: [[number, number], [number, number]];
  64. shape: 'rect' | 'roundRect' | 'ellipse' | 'triangle' | 'pentagon' | 'rhombus' | 'star';
  65. };
  66. flip?: { x?: number; y?: number };
  67. shadow?: PPTElementShadow;
  68. }
  69. export interface PPTShapeElement {
  70. type: 'shape';
  71. id: string;
  72. left: number;
  73. top: number;
  74. lock?: boolean;
  75. groupId?: string;
  76. width: number;
  77. height: number;
  78. viewBox: number;
  79. path: string;
  80. fixedRatio: boolean;
  81. fill: string;
  82. rotate?: number;
  83. outline?: PPTElementOutline;
  84. opacity?: number;
  85. shadow?: PPTElementShadow;
  86. }
  87. export interface PPTLineElement {
  88. type: 'line';
  89. id: string;
  90. left: number;
  91. top: number;
  92. lock?: boolean;
  93. groupId?: string;
  94. start: [number, number];
  95. end: [number, number];
  96. width: number;
  97. style: string;
  98. color: string;
  99. points: [string, string];
  100. shadow?: PPTElementShadow;
  101. }
  102. export type ChartType = 'bar' | 'line' | 'pie'
  103. export interface ChartData {
  104. labels: string[];
  105. series: number[][];
  106. }
  107. export interface PPTChartElement {
  108. type: 'chart';
  109. id: string;
  110. left: number;
  111. top: number;
  112. lock?: boolean;
  113. groupId?: string;
  114. width: number;
  115. height: number;
  116. chartType: ChartType;
  117. data: ChartData;
  118. options?: ILineChartOptions & IBarChartOptions & IPieChartOptions;
  119. outline?: PPTElementOutline;
  120. }
  121. export interface TableElementCell {
  122. colspan: number;
  123. rowspan: number;
  124. content: string;
  125. bgColor: string;
  126. }
  127. export interface PPTTableElement {
  128. type: 'table';
  129. id: string;
  130. left: number;
  131. top: number;
  132. lock?: boolean;
  133. groupId?: string;
  134. width: number;
  135. height: number;
  136. borderTheme?: string;
  137. theme?: string;
  138. rowSizes: number[];
  139. colSizes: number[];
  140. data: TableElementCell[][];
  141. }
  142. export interface PPTFormulaElement {
  143. type: 'formula';
  144. id: string;
  145. left: number;
  146. top: number;
  147. lock?: boolean;
  148. groupId?: string;
  149. width: number;
  150. height: number;
  151. latex: string;
  152. color?: string;
  153. }
  154. export type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement | PPTFormulaElement
  155. export interface PPTAnimation {
  156. elId: string;
  157. type: string;
  158. duration: number;
  159. }
  160. export interface SlideBackground {
  161. type: 'solid' | 'image';
  162. value: string;
  163. size?: 'cover' | 'contain' | 'repeat' | 'initial';
  164. }
  165. export interface Slide {
  166. id: string;
  167. elements: PPTElement[];
  168. background?: SlideBackground;
  169. animations?: PPTAnimation[];
  170. turningMode?: 'no' | 'fade' | 'slideX' | 'slideY';
  171. }