index.d.ts 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /// <reference types="@dcloudio/types" />
  2. import { DrawPosterPlugin, DrawPosterUse } from './plugin';
  3. export declare type NonNullableCustom<T, N> = T extends N ? never : T;
  4. export declare type NonPick<T, K extends keyof T> = {
  5. [P in NonNullableCustom<keyof T, K>]: T[P];
  6. };
  7. export interface DrawPosterOptions {
  8. /** 查询字符串(必须), 注意不要写错对应canvas id */
  9. selector: string;
  10. /** 选取组件范围 */
  11. componentThis?: any;
  12. /** 绘制类型, 微信小程序自动切换为 '2d' */
  13. type?: '2d' | 'context' | 'webgl';
  14. /** 是否在绘制与创建时显示加载提示 */
  15. loading?: boolean | {
  16. /** 生成时加载文字 @default '绘制海报中...' */
  17. render?: string;
  18. /** 创建图片时加载文字 @default '生成图片中...' */
  19. create?: string;
  20. };
  21. /** 是否开启调试模式 */
  22. debug?: boolean;
  23. /** 是否启动gcanvas(nvue) */
  24. gcanvas?: boolean;
  25. /** 画布宽度 */
  26. width?: number;
  27. /** 画布高度 */
  28. height?: number;
  29. /** 绘制扩展 */
  30. plugins?: DrawPosterPlugin[];
  31. }
  32. export interface DrawPosterResult {
  33. /** 绘制标识 */
  34. readonly id: string;
  35. /** 当前绘画插件 */
  36. readonly plugins: DrawPosterPlugin[];
  37. /** 源数据 */
  38. readonly $options: DrawPosterOptions;
  39. /** 画布(仅 2d 生效) */
  40. readonly canvas: Canvas;
  41. /** 画笔 */
  42. readonly ctx: CanvasCtx;
  43. /**
  44. * 引入扩展
  45. * 建议: 在构建配置中传入 `plugins`, 该引入方式无法触发 beforeMount
  46. */
  47. readonly use: DrawPosterUse;
  48. /** 停止绘制(仅停止生成) */
  49. readonly stop: () => void;
  50. /** 创建一个绘制作用域 */
  51. readonly draw: (func: (ctx: CanvasCtx) => Promise<void> | void) => void;
  52. /** 将所有作用域渲染 */
  53. readonly render: () => Promise<boolean[]>;
  54. /** 生成图片地址 */
  55. readonly createImagePath: (options?: CreateImagePathOptions) => Promise<string>;
  56. /** 绘图原型(用于在 beforeMount 时自定义绘制原型) */
  57. $drawPrototype?: {
  58. canvas: Canvas;
  59. ctx: CanvasCtx;
  60. };
  61. [key: string]: any;
  62. }
  63. export interface CanvasCtx extends UniApp.CanvasContext {
  64. [key: string]: any;
  65. createImageData: () => ImageData;
  66. textAlign: CanvasTextDrawingStyles['textAlign'];
  67. textBaseline: CanvasTextDrawingStyles['textBaseline'];
  68. transform: CanvasTransform['transform'];
  69. }
  70. export interface Canvas {
  71. width: number;
  72. height: number;
  73. getContext<K extends '2d' | 'webgl'>(contextType: K): K extends '2d' ? CanvasCtx : WebGLRenderingContext;
  74. createImage(): {
  75. src: string;
  76. width: number;
  77. height: number;
  78. onload: () => void;
  79. onerror: () => void;
  80. };
  81. requestAnimationFrame(callback: Function): number;
  82. cancelAnimationFrame(requestID: number): void;
  83. createImageData(): ImageData;
  84. createPath2D(path: Path2D): Path2D;
  85. toDataURL(type: string, encoderOptions: number): string;
  86. }
  87. export declare type Stacks = Array<() => Promise<boolean>>;
  88. export declare type CreateImagePathOptions = Partial<NonPick<UniApp.CanvasToTempFilePathOptions, 'canvasId' | 'complete' | 'success' | 'fail'>>;
  89. declare function useDrawPoster(selector: string, options?: Partial<NonPick<DrawPosterOptions, 'selector'>>): Promise<DrawPosterResult>;
  90. declare namespace useDrawPoster {
  91. var use: DrawPosterUse;
  92. }
  93. declare function useDrawPoster(options: DrawPosterOptions): Promise<DrawPosterResult>;
  94. declare namespace useDrawPoster {
  95. var use: DrawPosterUse;
  96. }
  97. export { useDrawPoster, DrawPosterPlugin };