react-screenshots 0.5.16 → 0.5.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +145 -145
- package/electron/assets/electron-ed141e06.css +1 -0
- package/electron/assets/index-73f470f6.js +53 -0
- package/electron/electron.html +14 -0
- package/lib/react-screenshots.cjs.js +14 -0
- package/lib/react-screenshots.es.js +1716 -0
- package/lib/style.css +1 -0
- package/lib/types/ScreenshotsBackground/getBoundsByPoints.d.ts +2 -0
- package/lib/types/ScreenshotsBackground/index.d.ts +4 -0
- package/lib/types/ScreenshotsButton/index.d.ts +12 -0
- package/lib/types/ScreenshotsCanvas/getBoundsByPoints.d.ts +2 -0
- package/lib/types/ScreenshotsCanvas/getPoints.d.ts +2 -0
- package/lib/types/ScreenshotsCanvas/index.d.ts +15 -0
- package/lib/types/ScreenshotsCanvas/isPointInDraw.d.ts +2 -0
- package/lib/types/ScreenshotsColor/index.d.ts +8 -0
- package/lib/types/ScreenshotsContext.d.ts +29 -0
- package/lib/types/ScreenshotsMagnifier/index.d.ts +8 -0
- package/lib/types/ScreenshotsOperations/index.d.ts +6 -0
- package/lib/types/ScreenshotsOption/index.d.ts +15 -0
- package/lib/types/ScreenshotsSize/index.d.ts +8 -0
- package/lib/types/ScreenshotsSizeColor/index.d.ts +10 -0
- package/lib/types/ScreenshotsTextarea/calculateNodeSize.d.ts +17 -0
- package/lib/types/ScreenshotsTextarea/index.d.ts +15 -0
- package/lib/types/composeImage.d.ts +10 -0
- package/lib/types/exports.d.ts +3 -0
- package/lib/types/hooks/useBounds.d.ts +7 -0
- package/lib/types/hooks/useCall.d.ts +2 -0
- package/lib/types/hooks/useCanvasContextRef.d.ts +2 -0
- package/lib/types/hooks/useCanvasMousedown.d.ts +1 -0
- package/lib/types/hooks/useCanvasMousemove.d.ts +1 -0
- package/lib/types/hooks/useCanvasMouseup.d.ts +1 -0
- package/lib/types/hooks/useCursor.d.ts +6 -0
- package/lib/types/hooks/useDispatcher.d.ts +2 -0
- package/lib/types/hooks/useDrawSelect.d.ts +2 -0
- package/lib/types/hooks/useEmiter.d.ts +8 -0
- package/lib/types/hooks/useHistory.d.ts +16 -0
- package/lib/types/hooks/useLang.d.ts +2 -0
- package/lib/types/hooks/useOperation.d.ts +9 -0
- package/lib/types/hooks/useReset.d.ts +2 -0
- package/lib/types/hooks/useStore.d.ts +2 -0
- package/lib/types/index.d.ts +13 -0
- package/lib/types/operations/Arrow/draw.d.ts +11 -0
- package/lib/types/operations/Arrow/index.d.ts +22 -0
- package/lib/types/operations/Brush/draw.d.ts +3 -0
- package/lib/types/operations/Brush/index.d.ts +14 -0
- package/lib/types/operations/Cancel/index.d.ts +2 -0
- package/lib/types/operations/Ellipse/draw.d.ts +11 -0
- package/lib/types/operations/Ellipse/index.d.ts +28 -0
- package/lib/types/operations/Mosaic/index.d.ts +11 -0
- package/lib/types/operations/Ok/index.d.ts +2 -0
- package/lib/types/operations/Rectangle/draw.d.ts +11 -0
- package/lib/types/operations/Rectangle/index.d.ts +28 -0
- package/lib/types/operations/Redo/index.d.ts +2 -0
- package/lib/types/operations/Save/index.d.ts +2 -0
- package/lib/types/operations/Text/index.d.ts +22 -0
- package/lib/types/operations/Undo/index.d.ts +2 -0
- package/lib/types/operations/index.d.ts +3 -0
- package/lib/types/operations/utils.d.ts +4 -0
- package/lib/types/types.d.ts +39 -0
- package/lib/types/useGetLoadedImage.d.ts +1 -0
- package/lib/types/zh_CN.d.ts +16 -0
- package/package.json +22 -21
package/lib/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:screenshots-icon;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAgkAAsAAAAADKgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAARAAAAGA2FkLbY21hcAAAAYgAAAB/AAAB/OFbJW1nbHlmAAACCAAAA8QAAAUsfvSb62hlYWQAAAXMAAAALwAAADYeYsGsaGhlYQAABfwAAAAcAAAAJAfeA41obXR4AAAGGAAAAA8AAAAwMAAAAGxvY2EAAAYoAAAAGgAAABoIbgcGbWF4cAAABkQAAAAfAAAAIAEcAFFuYW1lAAAGZAAAAVkAAALHgvO953Bvc3QAAAfAAAAAYQAAAIDH1pYVeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGFhYJzAwMrAwNTJdIaBgaEfQjO+ZjBi5ACKMrAyM2AFAWmuKQwHHjA+4GZu+N/AwMB8hwFIMjCiKGICAGIrDGB4nO2RyxHDMAhEn6xfbKWUnFOQTykoBdKJs4DLCDOPgRXosAAdqOIlGpQPBY9Tagm9coTeeMdMc93WdSkXz+q1qamdTVXXxoMldTD1OPjHM/L37pY7l7i3tiXyD6sJrrXE3bWe+L1sJH43m4kcx27i/z2JWx0JvrcS5g/Mshy1AHicdVPNbxtFFJ834/1eZ3e9u7N23F1n17Gt2sKmtnctFNwA5UADMR8SalWBIlEUWnLhgJBCc0HlQCTEoTdOiCOJVAVxQRXfcOJEDrSq1EvEH5ADEUKo3vJ2EyPlwL6dt78377fzZt57Q4Dgw96gB6RCCIR97lrOHERdGFkgdukIwi4ME/gMPrXKms0dDaZ39dADjbbTXy3PowdlK31Lt3V8IZne1cALddpGXSaUkEf32BfsLKmRC7h6PRJ9cMR6GDXHMGx2ILf5IOwnmS3w/jIkwx40IwPEZmx1IaPghsSTOcdjn8SqaWrTrzXTVGPNbPv0F79tpq/KXDqU5YbsyldlDiUlUU2eQakpy9AytC/xB1SGoR367bZ/qBnvyvIh0hsy0mQdNjNCuq3nZgsdhIi4/9/ZLusQRuqkRTqkRwZ4joFbd+N6XHezkRn5iAcnox4P4hCnWmhJ9WzKrTOyu7u7s3vy5CBFvbOTK9Y55cnBzokby4M1evQn+4YVyQIhCqYC09aUxGPhySgXz3UCGGH+2FfpfbVSipfWVtfHz6ugG4XJZOXSZKNUUaGlwANUpeJt0Oze8sbNHxSVSturF/1qYa9ogYLOefJfzG+PY9rAz8MYEo+jBJDEzVYuUjxsRhLW5QX8rWK//eKllclqwdC1lfH66tpSbFeU9L4Ce5myinuFqn9xdVuiqvzjzY3lnq3B7WIpY2DErFe+Yz+zC8QhZwkR+tmZhlmQKDulk4eOMnuYefqZ7WQeSq5duTyI48HlK7/NwLUb19eXxuOl9et/zQA9RcjBU6cIOZjt4yf2DNZcwjRYodUIrZC9P9XZkw+32If0n6lOj557uHWcowO2wWrEzu5OJGa9bDm8n8QW9vSwyUbTW24QuMBq7RowhCwIOsF0jQcBp58jzNf4m33EZFIlpKFg/fDAeY0dT8HM8v5IAVxxyDbTfegZtY6R7qf7RqdmQA+/aEMP5zu1l0++xv/w8v3iXf8D7zrHWMsA5+E4WD2aAw/yToLvmUhVExYeN9NCejTnliNqwhPGY6YkvEkFalnnInM6BW4sds30jkEtScuXzdUNekR8rN+zGEyUTgkf9EfJTFqjAG94D7qQcC/rZWNGz+vMZzx4TZJLpls0gfLSGc8U/HIQNMJWbbE8rxeFRU0wqtpVXTCrGtwxbXWO8g82JxKAolYjbjvV9Vee1gsinBME3XB51W80fM8WgFEmSppulsqVhYlWNQvamjaPGm5pBSqDsfXeS4qkGtZ8VChY1Y/feb1knyH/AiUJAkh4nGNgZGBgAOLZ5nkT4vltvjJwszCAwN2F+64j6P/7WBiYnYFcDgYmkCgASUgLuAB4nGNgZGBgbvjfwBDDwgACQJKRARXwAABHEgJ1eJxjYWBgYCEBAwAFEAAxAAAAAAAALgCOANIBDAFEAYgBngHAAfYCJAKWAAB4nGNgZGBg4GFwZWBjAAEmIOYCQgaG/2A+AwAQ1QFuAHichZLLSsNAFIb/sRexBREF3Q4IXShNLxuh20ILgpuC3bfppE1JMmFmWuhb+A4+iitfwr1P4NY/6egimybM4Tv/uc0JAXCNLwgcnxueIwtc0TvyGc5x77lG/cFznTzy3EAbz56b1F89t/AI5bnNjm/sIOoX9Dp49ywg8en5DJf49lyj/uO5DinuPDdwK548N6m/eG5hLlLPbXTEx9iohVMruTzIONRZpDNnQ6NUZjfa2W6hzdR6lyxMVa76c2VsrDM5CPrV0FRlyvyNsfv10LlIRkancsJ5Kkm0zI3eqtAFG+fyUa8XeT0IdYoxDD/QAo52xYWXONDGCKGRISqtg6Vf5Cl6Fhuqhdb9z5sxssYOCTuZk9mn4nNGii5x6UkMEKB/smpaRorK6jYWe95uSNVxI8ljWJGSJn4/xZsnZIm8jG2phNQDzimqcv5oPb5RJT8oZ6e/EiyIwgAAAHicbcFBEoIwDAXQ/JoWQTxkLBllrI2TFvT4LtzyHgX6m+jYjIATGBEJA84YMeGCGVeK4m4fbrJrelmTNbPrYrzVxQYtZX03HV1zl3ovyl2/PWWpWUuwZ7z51h5EP3hlGDkAAAA=) format("woff"),url(data:font/ttf;base64,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aW9uIDEuMHNjcmVlbnNob3RzLWljb25HZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AHMAYwByAGUAZQBuAHMAaABvAHQAcwAtAGkAYwBvAG4AUgBlAGcAdQBsAGEAcgBzAGMAcgBlAGUAbgBzAGgAbwB0AHMALQBpAGMAbwBuAHMAYwByAGUAZQBuAHMAaABvAHQAcwAtAGkAYwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAHMAYwByAGUAZQBuAHMAaABvAHQAcwAtAGkAYwBvAG4ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0ABWFycm93BHNhdmUGbW9zYWljBHJlZG8EdW5kbwdlbGxpcHNlCXJlY3RhbmdsZQR0ZXh0BmNhbmNlbAJvawVicnVzaAAA) format("truetype")}[class^=icon-],[class*=" icon-"]{font-family:screenshots-icon!important;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-ok:before{content:"\e001"}.icon-cancel:before{content:"\e002"}.icon-save:before{content:"\e003"}.icon-redo:before{content:"\e004"}.icon-undo:before{content:"\e005"}.icon-mosaic:before{content:"\e006"}.icon-text:before{content:"\e007"}.icon-brush:before{content:"\e008"}.icon-arrow:before{content:"\e009"}.icon-ellipse:before{content:"\e00a"}.icon-rectangle:before{content:"\e00b"}.screenshots{position:relative;transform:translateZ(0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,apple color emoji,segoe ui emoji,Segoe UI Symbol,noto color emoji}.screenshots,.screenshots *{box-sizing:border-box;user-select:none}.screenshots-magnifier{position:absolute;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,apple color emoji,segoe ui emoji,Segoe UI Symbol,noto color emoji;left:0;top:0;width:100px;box-shadow:0 0 8px #000;z-index:9}.screenshots-magnifier,.screenshots-magnifier *{box-sizing:border-box;user-select:none}.screenshots-magnifier-body{position:relative;background-color:#fff}.screenshots-magnifier-body:before{content:"";background-color:#0a72a1;position:absolute;top:50%;left:0;width:100%;height:2px;z-index:1}.screenshots-magnifier-body:after{content:"";background-color:#0a72a1;position:absolute;top:0;left:50%;width:2px;height:100%;z-index:1}.screenshots-magnifier-body-canvas{display:block;width:100px;height:80px}.screenshots-magnifier-footer{height:40px;color:#fff;font-size:11px;background-color:#5f5e5e;padding:4px;white-space:nowrap;overflow:hidden;text-align:center}.screenshots-magnifier-footer-item{height:18px;line-height:18px}.screenshots-background{width:100%;height:100%;position:relative}.screenshots-background-image{width:100%;height:100%;display:block;border:none;outline:none;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges;-webkit-font-smooting:antialiased}.screenshots-background-mask{width:100%;height:100%;position:absolute;top:0;right:0;bottom:0;left:0;background-color:#0000004d}.screenshots-canvas{position:absolute;left:0;top:0;will-change:width,height,transform}.screenshots-canvas-body,.screenshots-canvas-mask{width:100%;height:100%;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.screenshots-canvas-image{display:block;border:none;outline:none;will-change:transform;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges;-webkit-font-smooting:antialiased}.screenshots-canvas-panel{width:100%;height:100%;position:absolute;left:0;top:0;right:0;bottom:0;will-change:width,height}.screenshots-canvas-size{position:absolute;bottom:0;left:50%;transform:translate(-50%);background-color:#000c;color:#fff;font-size:12px;padding:3px 4px;border-radius:2px;white-space:nowrap;pointer-events:none}.screenshots-canvas-border-top{position:absolute;left:0;top:0;width:100%;height:2px;transform:translateY(-50%);background-color:#39f;pointer-events:none}.screenshots-canvas-border-right{position:absolute;left:100%;top:0;width:2px;height:100%;transform:translate(-50%);background-color:#39f;pointer-events:none}.screenshots-canvas-border-bottom{position:absolute;left:0;top:100%;width:100%;height:2px;transform:translateY(-50%);background-color:#39f;pointer-events:none}.screenshots-canvas-border-left{position:absolute;left:0;top:0;width:2px;height:100%;transform:translate(-50%);background-color:#39f;pointer-events:none}.screenshots-canvas-point-top{width:8px;height:8px;position:absolute;left:50%;top:0;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:ns-resize}.screenshots-canvas-point-top-right{width:8px;height:8px;position:absolute;left:100%;top:0;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:nesw-resize}.screenshots-canvas-point-right{width:8px;height:8px;position:absolute;left:100%;top:50%;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:ew-resize}.screenshots-canvas-point-right-bottom{width:8px;height:8px;position:absolute;left:100%;top:100%;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:nwse-resize}.screenshots-canvas-point-bottom{width:8px;height:8px;position:absolute;left:50%;top:100%;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:ns-resize}.screenshots-canvas-point-bottom-left{width:8px;height:8px;position:absolute;left:0;top:100%;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:nesw-resize}.screenshots-canvas-point-left{width:8px;height:8px;position:absolute;left:0;top:50%;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:ew-resize}.screenshots-canvas-point-left-top{width:8px;height:8px;position:absolute;left:0;top:0;background-color:#39f;border-radius:50%;transform:translate(-50%,-50%);cursor:nwse-resize}.screenshots-option{position:absolute;left:0;top:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,apple color emoji,segoe ui emoji,Segoe UI Symbol,noto color emoji}.screenshots-option,.screenshots-option *{box-sizing:border-box;user-select:none}.screenshots-option-container{height:34px;padding:3px;border-radius:2px;border:1px solid #ddd;background-color:#fff}.screenshots-option-arrow{position:absolute;border:6px solid transparent}.screenshots-option[data-placement=top]{transform:translate(-50%,-11px)}.screenshots-option[data-placement=top] .screenshots-option-arrow{transform:translate(-50%,-1px);border-top-color:#fff;top:100%;left:50%}.screenshots-option[data-placement=bottom]{transform:translate(-50%,11px)}.screenshots-option[data-placement=bottom] .screenshots-option-arrow{transform:translate(-50%,1px);border-bottom-color:#fff;bottom:100%;left:50%}.screenshots-button{width:26px;height:26px;line-height:26px;color:#333;font-size:18px;text-align:center;margin:0 3px;vertical-align:middle;cursor:pointer}.screenshots-button-checked,.screenshots-button:hover{background-color:#eee;outline:1px solid #777}.screenshots-button-disabled{color:#bbb;cursor:not-allowed}.screenshots-button-disabled:hover{background-color:#fff;outline:none}.screenshots-size{height:24px;display:flex;align-items:center}.screenshots-size-item{width:24px;height:24px;position:relative;margin:0 3px;cursor:pointer}.screenshots-size-pointer{background-color:#555;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.screenshots-size-active>.screenshots-size-pointer{background-color:#39f}.screenshots-color{height:24px;display:flex;align-items:center}.screenshots-color-item{border:1px solid #777;width:24px;height:24px;cursor:pointer;position:relative;margin:0 3px}.screenshots-color-item:before{content:"";display:none;position:absolute;right:0;bottom:0;width:10px;height:10px;background-color:#333}.screenshots-color-item:after{content:"";display:none;width:8px;height:4px;position:absolute;right:5px;bottom:5px;border-bottom:2px solid #fff;border-left:2px solid #fff;transform:translate(5px,2px) rotate(-45deg) scale(.8)}.screenshots-color-active:before,.screenshots-color-active:after{display:block}.screenshots-sizecolor{height:24px;display:flex;align-items:center}.screenshots-textarea{box-sizing:border-box;position:absolute;left:0;top:0;margin:0;padding:0;background-color:transparent;border:2px solid #39f;resize:none;outline:none;white-space:nowrap;word-break:break-all;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,apple color emoji,segoe ui emoji,Segoe UI Symbol,noto color emoji;text-align:left}.screenshots-operations{position:absolute;left:0;top:0;will-change:transform}.screenshots-operations-buttons{display:flex;align-items:center;padding:3px;border-radius:2px;border:1px solid #ddd;background-color:#fff;overflow:hidden}.screenshots-operations-divider{background-color:#ddd;width:1px;height:26px;margin:0 3px}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { PointerEvent, ReactNode } from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export interface ScreenshotsButtonProps {
|
|
4
|
+
title: string;
|
|
5
|
+
icon: string;
|
|
6
|
+
checked?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
option?: ReactNode;
|
|
9
|
+
onClick?: (e: PointerEvent<HTMLDivElement>) => unknown;
|
|
10
|
+
}
|
|
11
|
+
declare const _default: React.NamedExoticComponent<ScreenshotsButtonProps>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export declare enum ResizePoints {
|
|
4
|
+
ResizeTop = "top",
|
|
5
|
+
ResizetopRight = "top-right",
|
|
6
|
+
ResizeRight = "right",
|
|
7
|
+
ResizeRightBottom = "right-bottom",
|
|
8
|
+
ResizeBottom = "bottom",
|
|
9
|
+
ResizeBottomLeft = "bottom-left",
|
|
10
|
+
ResizeLeft = "left",
|
|
11
|
+
ResizeLeftTop = "left-top",
|
|
12
|
+
Move = "move"
|
|
13
|
+
}
|
|
14
|
+
declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<React.RefAttributes<CanvasRenderingContext2D>>>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import { EmiterRef, History, Bounds, CanvasContextRef } from './types';
|
|
3
|
+
import { Lang } from './zh_CN';
|
|
4
|
+
export interface ScreenshotsContextStore {
|
|
5
|
+
url?: string;
|
|
6
|
+
image: HTMLImageElement | null;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
lang: Lang;
|
|
10
|
+
emiterRef: EmiterRef;
|
|
11
|
+
canvasContextRef: CanvasContextRef;
|
|
12
|
+
history: History;
|
|
13
|
+
bounds: Bounds | null;
|
|
14
|
+
cursor?: string;
|
|
15
|
+
operation?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ScreenshotsContextDispatcher {
|
|
18
|
+
call?: <T>(funcName: string, ...args: T[]) => void;
|
|
19
|
+
setHistory?: Dispatch<SetStateAction<History>>;
|
|
20
|
+
setBounds?: Dispatch<SetStateAction<Bounds | null>>;
|
|
21
|
+
setCursor?: Dispatch<SetStateAction<string | undefined>>;
|
|
22
|
+
setOperation?: Dispatch<SetStateAction<string | undefined>>;
|
|
23
|
+
}
|
|
24
|
+
export interface ScreenshotsContextValue {
|
|
25
|
+
store: ScreenshotsContextStore;
|
|
26
|
+
dispatcher: ScreenshotsContextDispatcher;
|
|
27
|
+
}
|
|
28
|
+
declare const _default: React.Context<ScreenshotsContextValue>;
|
|
29
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
+
import { Point } from '../types';
|
|
3
|
+
import './index.less';
|
|
4
|
+
export interface ScreenshotsOptionProps {
|
|
5
|
+
open?: boolean;
|
|
6
|
+
content?: ReactNode;
|
|
7
|
+
children: ReactElement;
|
|
8
|
+
}
|
|
9
|
+
export type Position = Point;
|
|
10
|
+
export declare enum Placement {
|
|
11
|
+
Bottom = "bottom",
|
|
12
|
+
Top = "top"
|
|
13
|
+
}
|
|
14
|
+
declare const _default: React.NamedExoticComponent<ScreenshotsOptionProps>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export interface SizeColorProps {
|
|
4
|
+
size: number;
|
|
5
|
+
color: string;
|
|
6
|
+
onSizeChange: (value: number) => void;
|
|
7
|
+
onColorChange: (value: string) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: React.NamedExoticComponent<SizeColorProps>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface SizeInfo {
|
|
2
|
+
sizingStyle: string;
|
|
3
|
+
paddingSize: number;
|
|
4
|
+
borderSize: number;
|
|
5
|
+
boxSizing: string;
|
|
6
|
+
}
|
|
7
|
+
export interface Size {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function getComputedSizeInfo(node: HTMLElement): {
|
|
12
|
+
sizingStyle: string;
|
|
13
|
+
paddingSize: number;
|
|
14
|
+
borderSize: number;
|
|
15
|
+
boxSizing: string;
|
|
16
|
+
};
|
|
17
|
+
export default function calculateNodeSize(textarea: HTMLTextAreaElement, value: string, maxWidth: number, maxHeight: number): Size;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { FocusEvent } from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export interface TextInputProps {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
maxWidth: number;
|
|
7
|
+
maxHeight: number;
|
|
8
|
+
size: number;
|
|
9
|
+
color: string;
|
|
10
|
+
value: string;
|
|
11
|
+
onChange: (value: string) => unknown;
|
|
12
|
+
onBlur: (e: FocusEvent<HTMLTextAreaElement>) => unknown;
|
|
13
|
+
}
|
|
14
|
+
declare const _default: React.NamedExoticComponent<TextInputProps>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Bounds, History } from './types';
|
|
2
|
+
interface ComposeImageOpts {
|
|
3
|
+
image: HTMLImageElement;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
history: History;
|
|
7
|
+
bounds: Bounds;
|
|
8
|
+
}
|
|
9
|
+
export default function composeImage({ image, width, height, history, bounds }: ComposeImageOpts): Promise<Blob>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function useCanvasMousedown(onMousedown: (e: MouseEvent) => unknown): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function useCanvasMousemove(onMousemove: (e: MouseEvent) => unknown): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function useCanvasMouseup(onMouseup: (e: MouseEvent) => unknown): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EmiterListener } from '../types';
|
|
2
|
+
export interface EmiterDispatcher {
|
|
3
|
+
on: (event: string, listener: EmiterListener) => void;
|
|
4
|
+
off: (event: string, listener: EmiterListener) => void;
|
|
5
|
+
emit: (event: string, ...args: unknown[]) => void;
|
|
6
|
+
reset: () => void;
|
|
7
|
+
}
|
|
8
|
+
export default function useEmiter(): EmiterDispatcher;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { History, HistoryItem } from '../types';
|
|
2
|
+
export interface HistoryValue extends History {
|
|
3
|
+
top?: HistoryItem<unknown, unknown>;
|
|
4
|
+
}
|
|
5
|
+
export interface HistoryDispatcher {
|
|
6
|
+
push: <S, E>(action: HistoryItem<S, E>) => void;
|
|
7
|
+
pop: () => void;
|
|
8
|
+
undo: () => void;
|
|
9
|
+
redo: () => void;
|
|
10
|
+
set: (history: History) => void;
|
|
11
|
+
select: <S, E>(action: HistoryItem<S, E>) => void;
|
|
12
|
+
clearSelect: () => void;
|
|
13
|
+
reset: () => void;
|
|
14
|
+
}
|
|
15
|
+
export type HistoryValueDispatcher = [HistoryValue, HistoryDispatcher];
|
|
16
|
+
export default function useHistory(): HistoryValueDispatcher;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import './icons/iconfont.less';
|
|
3
|
+
import './screenshots.less';
|
|
4
|
+
import { Lang } from './zh_CN';
|
|
5
|
+
export interface ScreenshotsProps {
|
|
6
|
+
url?: string;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
lang?: Partial<Lang>;
|
|
10
|
+
className?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export default function Screenshots({ url, width, height, lang, className, ...props }: ScreenshotsProps): ReactElement;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ArrowData, ArrowEditData } from '.';
|
|
2
|
+
import { HistoryItemSource } from '../../types';
|
|
3
|
+
export declare function getEditedArrowData(action: HistoryItemSource<ArrowData, ArrowEditData>): {
|
|
4
|
+
x1: number;
|
|
5
|
+
x2: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
y2: number;
|
|
8
|
+
size: number;
|
|
9
|
+
color: string;
|
|
10
|
+
};
|
|
11
|
+
export default function draw(ctx: CanvasRenderingContext2D, action: HistoryItemSource<ArrowData, ArrowEditData>): void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export interface ArrowData {
|
|
3
|
+
size: number;
|
|
4
|
+
color: string;
|
|
5
|
+
x1: number;
|
|
6
|
+
x2: number;
|
|
7
|
+
y1: number;
|
|
8
|
+
y2: number;
|
|
9
|
+
}
|
|
10
|
+
export declare enum ArrowEditType {
|
|
11
|
+
Move = 0,
|
|
12
|
+
MoveStart = 1,
|
|
13
|
+
MoveEnd = 2
|
|
14
|
+
}
|
|
15
|
+
export interface ArrowEditData {
|
|
16
|
+
type: ArrowEditType;
|
|
17
|
+
x1: number;
|
|
18
|
+
x2: number;
|
|
19
|
+
y1: number;
|
|
20
|
+
y2: number;
|
|
21
|
+
}
|
|
22
|
+
export default function Arrow(): ReactElement;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { Point } from '../../types';
|
|
3
|
+
export interface BrushData {
|
|
4
|
+
size: number;
|
|
5
|
+
color: string;
|
|
6
|
+
points: Point[];
|
|
7
|
+
}
|
|
8
|
+
export interface BrushEditData {
|
|
9
|
+
x1: number;
|
|
10
|
+
y1: number;
|
|
11
|
+
x2: number;
|
|
12
|
+
y2: number;
|
|
13
|
+
}
|
|
14
|
+
export default function Brush(): ReactElement;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EllipseData, EllipseEditData } from '.';
|
|
2
|
+
import { HistoryItemSource } from '../../types';
|
|
3
|
+
export declare function getEditedEllipseData(action: HistoryItemSource<EllipseData, EllipseEditData>): {
|
|
4
|
+
x1: number;
|
|
5
|
+
x2: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
y2: number;
|
|
8
|
+
size: number;
|
|
9
|
+
color: string;
|
|
10
|
+
};
|
|
11
|
+
export default function draw(ctx: CanvasRenderingContext2D, action: HistoryItemSource<EllipseData, EllipseEditData>): void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export interface EllipseData {
|
|
3
|
+
size: number;
|
|
4
|
+
color: string;
|
|
5
|
+
x1: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
x2: number;
|
|
8
|
+
y2: number;
|
|
9
|
+
}
|
|
10
|
+
export declare enum EllipseEditType {
|
|
11
|
+
Move = 0,
|
|
12
|
+
ResizeTop = 1,
|
|
13
|
+
ResizeRightTop = 2,
|
|
14
|
+
ResizeRight = 3,
|
|
15
|
+
ResizeRightBottom = 4,
|
|
16
|
+
ResizeBottom = 5,
|
|
17
|
+
ResizeLeftBottom = 6,
|
|
18
|
+
ResizeLeft = 7,
|
|
19
|
+
ResizeLeftTop = 8
|
|
20
|
+
}
|
|
21
|
+
export interface EllipseEditData {
|
|
22
|
+
type: EllipseEditType;
|
|
23
|
+
x1: number;
|
|
24
|
+
y1: number;
|
|
25
|
+
x2: number;
|
|
26
|
+
y2: number;
|
|
27
|
+
}
|
|
28
|
+
export default function Ellipse(): ReactElement;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RectangleData, RectangleEditData } from '.';
|
|
2
|
+
import { HistoryItemSource } from '../../types';
|
|
3
|
+
export declare function getEditedRectangleData(action: HistoryItemSource<RectangleData, RectangleEditData>): {
|
|
4
|
+
x1: number;
|
|
5
|
+
x2: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
y2: number;
|
|
8
|
+
size: number;
|
|
9
|
+
color: string;
|
|
10
|
+
};
|
|
11
|
+
export default function draw(ctx: CanvasRenderingContext2D, action: HistoryItemSource<RectangleData, RectangleEditData>): void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export interface RectangleData {
|
|
3
|
+
size: number;
|
|
4
|
+
color: string;
|
|
5
|
+
x1: number;
|
|
6
|
+
y1: number;
|
|
7
|
+
x2: number;
|
|
8
|
+
y2: number;
|
|
9
|
+
}
|
|
10
|
+
export declare enum RectangleEditType {
|
|
11
|
+
Move = 0,
|
|
12
|
+
ResizeTop = 1,
|
|
13
|
+
ResizeRightTop = 2,
|
|
14
|
+
ResizeRight = 3,
|
|
15
|
+
ResizeRightBottom = 4,
|
|
16
|
+
ResizeBottom = 5,
|
|
17
|
+
ResizeLeftBottom = 6,
|
|
18
|
+
ResizeLeft = 7,
|
|
19
|
+
ResizeLeftTop = 8
|
|
20
|
+
}
|
|
21
|
+
export interface RectangleEditData {
|
|
22
|
+
type: RectangleEditType;
|
|
23
|
+
x1: number;
|
|
24
|
+
y1: number;
|
|
25
|
+
x2: number;
|
|
26
|
+
y2: number;
|
|
27
|
+
}
|
|
28
|
+
export default function Rectangle(): ReactElement;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export interface TextData {
|
|
3
|
+
size: number;
|
|
4
|
+
color: string;
|
|
5
|
+
fontFamily: string;
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
text: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TextEditData {
|
|
11
|
+
x1: number;
|
|
12
|
+
x2: number;
|
|
13
|
+
y1: number;
|
|
14
|
+
y2: number;
|
|
15
|
+
}
|
|
16
|
+
export interface TextareaBounds {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
maxWidth: number;
|
|
20
|
+
maxHeight: number;
|
|
21
|
+
}
|
|
22
|
+
export default function Text(): ReactElement;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { HistoryItemSource, Point } from '../types';
|
|
2
|
+
export declare function drawDragCircle(ctx: CanvasRenderingContext2D, x: number, y: number): void;
|
|
3
|
+
export declare function isHit<S, E>(ctx: CanvasRenderingContext2D, action: HistoryItemSource<S, E>, point: Point): boolean;
|
|
4
|
+
export declare function isHitCircle(canvas: HTMLCanvasElement | null, e: MouseEvent, point: Point): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
export type CanvasContextRef = MutableRefObject<CanvasRenderingContext2D | null>;
|
|
3
|
+
export type EmiterListener = (...args: any) => unknown;
|
|
4
|
+
export type Emiter = Record<string, EmiterListener[]>;
|
|
5
|
+
export type EmiterRef = MutableRefObject<Emiter>;
|
|
6
|
+
export interface Point {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
}
|
|
10
|
+
export declare enum HistoryItemType {
|
|
11
|
+
Edit = 0,
|
|
12
|
+
Source = 1
|
|
13
|
+
}
|
|
14
|
+
export interface HistoryItemEdit<E, S> {
|
|
15
|
+
type: HistoryItemType.Edit;
|
|
16
|
+
data: E;
|
|
17
|
+
source: HistoryItemSource<S, E>;
|
|
18
|
+
}
|
|
19
|
+
export interface HistoryItemSource<S, E> {
|
|
20
|
+
name: string;
|
|
21
|
+
type: HistoryItemType.Source;
|
|
22
|
+
data: S;
|
|
23
|
+
isSelected?: boolean;
|
|
24
|
+
editHistory: HistoryItemEdit<E, S>[];
|
|
25
|
+
draw: (ctx: CanvasRenderingContext2D, action: HistoryItemSource<S, E>) => void;
|
|
26
|
+
isHit?: (ctx: CanvasRenderingContext2D, action: HistoryItemSource<S, E>, point: Point) => boolean;
|
|
27
|
+
}
|
|
28
|
+
export type HistoryItem<S, E> = HistoryItemEdit<E, S> | HistoryItemSource<S, E>;
|
|
29
|
+
export interface History {
|
|
30
|
+
index: number;
|
|
31
|
+
stack: HistoryItem<any, any>[];
|
|
32
|
+
}
|
|
33
|
+
export interface Bounds {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
}
|
|
39
|
+
export type Position = Point;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function useGetLoadedImage(url?: string): HTMLImageElement | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Lang {
|
|
2
|
+
magnifier_position_label: string;
|
|
3
|
+
operation_ok_title: string;
|
|
4
|
+
operation_cancel_title: string;
|
|
5
|
+
operation_save_title: string;
|
|
6
|
+
operation_redo_title: string;
|
|
7
|
+
operation_undo_title: string;
|
|
8
|
+
operation_mosaic_title: string;
|
|
9
|
+
operation_text_title: string;
|
|
10
|
+
operation_brush_title: string;
|
|
11
|
+
operation_arrow_title: string;
|
|
12
|
+
operation_ellipse_title: string;
|
|
13
|
+
operation_rectangle_title: string;
|
|
14
|
+
}
|
|
15
|
+
declare const zhCN: Lang;
|
|
16
|
+
export default zhCN;
|