image-beautifier 1.0.1 → 1.0.3
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/README.md +14 -0
- package/lib/image-beautifier.es.js +3040 -0
- package/lib/style.css +9 -0
- package/package.json +17 -3
- package/.eslintrc.cjs +0 -25
- package/favicon.svg +0 -20
- package/index.html +0 -13
- package/jsconfig.json +0 -12
- package/postcss.config.mjs +0 -6
- package/preview.png +0 -0
- package/public/vite.svg +0 -1
- package/src/App.jsx +0 -29
- package/src/assets/blur.svg +0 -8
- package/src/assets/color.svg +0 -1
- package/src/assets/demo.png +0 -0
- package/src/assets/pencil.png +0 -0
- package/src/assets/rotate.png +0 -0
- package/src/components/ColorPicker.jsx +0 -27
- package/src/components/Icon.jsx +0 -81
- package/src/components/editor/Editor.jsx +0 -19
- package/src/components/editor/HotKeys.jsx +0 -48
- package/src/components/editor/View.jsx +0 -167
- package/src/components/editor/Zoom.jsx +0 -54
- package/src/components/editor/layers/FrameBox.jsx +0 -51
- package/src/components/editor/layers/Screenshot.jsx +0 -89
- package/src/components/editor/layers/ShapeLine.jsx +0 -97
- package/src/components/editor/layers/Watermark.jsx +0 -41
- package/src/components/header/EmojiSelect.jsx +0 -35
- package/src/components/header/Header.jsx +0 -134
- package/src/components/header/Logo.jsx +0 -29
- package/src/components/header/MediaLogo.jsx +0 -10
- package/src/components/header/WidthDropdown.jsx +0 -74
- package/src/components/init/Init.jsx +0 -77
- package/src/components/sideBar/BackgroundSelect.jsx +0 -49
- package/src/components/sideBar/CropperImage.jsx +0 -73
- package/src/components/sideBar/CustomSize.jsx +0 -60
- package/src/components/sideBar/DownloadBar.jsx +0 -179
- package/src/components/sideBar/DrawerBar.jsx +0 -64
- package/src/components/sideBar/Position.jsx +0 -45
- package/src/components/sideBar/SideBar.jsx +0 -131
- package/src/components/sideBar/SizeBar.jsx +0 -114
- package/src/components/sideBar/Watermark.jsx +0 -59
- package/src/hooks/useKeyboardShortcuts.js +0 -28
- package/src/hooks/usePaste.js +0 -21
- package/src/index.js +0 -1
- package/src/main.jsx +0 -9
- package/src/stores/editor.js +0 -106
- package/src/stores/index.js +0 -7
- package/src/stores/option.js +0 -96
- package/src/style/main.css +0 -132
- package/src/utils/UndoRedoManager.js +0 -83
- package/src/utils/backgroundConfig.js +0 -387
- package/src/utils/captureScreen.js +0 -28
- package/src/utils/sizeConfig.js +0 -163
- package/src/utils/utils.js +0 -154
- package/tailwind.config.mjs +0 -15
- package/vite.config.js +0 -21
package/lib/style.css
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Cropper.js v1.6.2
|
|
3
|
+
* https://fengyuanchen.github.io/cropperjs
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2015-present Chen Fengyuan
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*
|
|
8
|
+
* Date: 2024-04-21T07:43:02.731Z
|
|
9
|
+
*/.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{backface-visibility:hidden;display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-wrap-box,.cropper-canvas,.cropper-drag-box,.cropper-crop-box,.cropper-modal{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-wrap-box,.cropper-canvas{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:#3399ffbf;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:calc(100% / 3);left:0;top:calc(100% / 3);width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:calc(100% / 3);top:0;width:calc(100% / 3)}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:before,.cropper-center:after{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width: 768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width: 992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width: 1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}@layer tailwind-base,antd;@layer tailwind-base{*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}#shoteasy-container,.shoteasy-components{--c-wb: #c2c2c2;--c-wc: #fcfcfc;--c-bg: #fbfbfb;--c-br: #cecece;--c-se: #1900ff94;--c-scroll: #d9d9d9;--c-scroll-hover: #bbbbbb}#shoteasy-container[data-mode=dark],.shoteasy-components.dark-mode,.shoteasy-components [data-mode=dark]{--c-wb: #444;--c-wc: #222;--c-bg: #2b2b2b;--c-br: #5e5e5e;--c-se: #5947fc;--c-scroll: #464646;--c-scroll-hover: #595858}#shoteasy-container ::-webkit-scrollbar,.shoteasy-components ::-webkit-scrollbar{height:.375rem;width:.375rem}#shoteasy-container ::-webkit-scrollbar-thumb,.shoteasy-components ::-webkit-scrollbar-thumb{border-radius:.375rem;background-color:var(--c-scroll)}#shoteasy-container ::-webkit-scrollbar-thumb:hover,.shoteasy-components ::-webkit-scrollbar-thumb:hover{background-color:var(--c-scroll-hover)}#shoteasy-container ::-webkit-scrollbar-track,.shoteasy-components ::-webkit-scrollbar-track{background-color:var(--c-bg)}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.polka{background-image:radial-gradient(var(--c-wb) .7px,var(--c-wc) 1px);background-size:14px 14px}.ant-radio-wrapper-checked .h-8{box-shadow:0 0 0 1px #fff,0 0 0 3px var(--c-se)}.position-block{position:relative}.ant-radio-wrapper-checked .position-block:after{content:var(--tw-content);box-shadow:0 0 0 1px #fff,0 0 0 3px var(--c-se)}.position-block:after{position:absolute;z-index:10;display:block;height:2rem;width:2rem;border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity));content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.position-block.top-left:after{top:0;content:var(--tw-content);left:0}.position-block.top:after{top:0;content:var(--tw-content);left:2rem}.position-block.top-right:after{top:0;content:var(--tw-content);right:0}.position-block.right:after{top:2rem;content:var(--tw-content);right:0}.position-block.bottom-right:after{bottom:0;content:var(--tw-content);right:0}.position-block.bottom:after{bottom:0;content:var(--tw-content);left:2rem}.position-block.bottom-left:after{bottom:0;content:var(--tw-content);left:0}.position-block.left:after{top:2rem;content:var(--tw-content);left:0}.position-block.center:after{top:2rem;content:var(--tw-content);left:2rem}.bg-transparent{background-image:linear-gradient(45deg,rgba(0,0,0,.4) 25%,transparent 25%,transparent 75%,rgba(0,0,0,.4) 75%),linear-gradient(45deg,rgba(0,0,0,.4) 25%,transparent 25%,transparent 75%,rgba(0,0,0,.4) 75%);background-position:0 0,5px 5px;background-size:10px 10px}@keyframes shake{0%{transform:translate(0)}25%{transform:translate(.5rem)}75%{transform:translate(-.5rem)}to{transform:translate(0)}}.invalid{animation:shake .2s ease-in-out 0s 2}.absolute{position:absolute}.relative{position:relative}.bottom-4{bottom:1rem}.right-4{right:1rem}.z-0{z-index:0}.z-10{z-index:10}.z-\[11\]{z-index:11}.m-0{margin:0}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-ml-1{margin-left:-.25rem}.-mt-1{margin-top:-.25rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.me-\[-1px\]{margin-inline-end:-1px}.ml-3{margin-left:.75rem}.mr-0{margin-right:0}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-\[3px\]{margin-top:3px}.block{display:block}.flex{display:flex}.grid{display:grid}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-3{height:.75rem}.h-4{height:1rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[100vh\]{height:100vh}.h-\[1px\]{height:1px}.h-\[2px\]{height:2px}.h-\[4px\]{height:4px}.h-\[6px\]{height:6px}.h-\[8px\]{height:8px}.h-auto{height:auto}.h-full{height:100%}.max-h-12{max-height:3rem}.w-0{width:0px}.w-0\.5{width:.125rem}.w-12{width:3rem}.w-24{width:6rem}.w-4{width:1rem}.w-8{width:2rem}.w-\[85\%\]{width:85%}.w-full{width:100%}.max-w-\[600px\]{max-width:600px}.flex-1{flex:1 1 0%}.flex-\[33\%\]{flex:33%}.shrink-0{flex-shrink:0}.origin-center{transform-origin:center}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[1px\]{gap:1px}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-3{row-gap:.75rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-ee-none{border-end-end-radius:0px}.rounded-es-none{border-end-start-radius:0px}.rounded-se-none{border-start-end-radius:0px}.rounded-ss-none{border-start-start-radius:0px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-\[var\(--c-br\)\]{border-color:var(--c-br)}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-black\/40{border-color:#0006}.border-black\/50{border-color:#00000080}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-white\/80{border-color:#fffc}.border-b-gray-50{--tw-border-opacity: 1;border-bottom-color:rgb(249 250 251 / var(--tw-border-opacity))}.border-l-gray-50{--tw-border-opacity: 1;border-left-color:rgb(249 250 251 / var(--tw-border-opacity))}.border-l-white\/30{border-left-color:#ffffff4d}.border-r-white\/30{border-right-color:#ffffff4d}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity))}.bg-black\/10{background-color:#0000001a}.bg-black\/5{background-color:#0000000d}.bg-black\/90{background-color:#000000e6}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity))}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity))}.bg-fuchsia-400{--tw-bg-opacity: 1;background-color:rgb(232 121 249 / var(--tw-bg-opacity))}.bg-gray-300\/30{background-color:#d1d5db4d}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity))}.bg-indigo-400{--tw-bg-opacity: 1;background-color:rgb(129 140 248 / var(--tw-bg-opacity))}.bg-lime-400{--tw-bg-opacity: 1;background-color:rgb(163 230 53 / var(--tw-bg-opacity))}.bg-orange-400{--tw-bg-opacity: 1;background-color:rgb(251 146 60 / var(--tw-bg-opacity))}.bg-pink-400{--tw-bg-opacity: 1;background-color:rgb(244 114 182 / var(--tw-bg-opacity))}.bg-purple-400{--tw-bg-opacity: 1;background-color:rgb(192 132 252 / var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity))}.bg-rose-400{--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity))}.bg-sky-100\/50{background-color:#e0f2fe80}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.bg-slate-300\/40{background-color:#cbd5e166}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.bg-stone-400{--tw-bg-opacity: 1;background-color:rgb(168 162 158 / var(--tw-bg-opacity))}.bg-teal-400{--tw-bg-opacity: 1;background-color:rgb(45 212 191 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-violet-400{--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\/90{background-color:#ffffffe6}.bg-yellow-400{--tw-bg-opacity: 1;background-color:rgb(250 204 21 / var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\[\#4284DB\]{--tw-gradient-from: #4284DB var(--tw-gradient-from-position);--tw-gradient-to: rgb(66 132 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[\#69eacb\]{--tw-gradient-from: #69eacb var(--tw-gradient-from-position);--tw-gradient-to: rgb(105 234 203 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[\#eeddf3\]{--tw-gradient-from: #eeddf3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 221 243 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[\#f9f047\]{--tw-gradient-from: #f9f047 var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 240 71 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[\#fc00ff\]{--tw-gradient-from: #fc00ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(252 0 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-\[\#ff6432\]{--tw-gradient-from: #ff6432 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 100 50 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from: #6366f1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-400{--tw-gradient-from: #fb923c var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-800{--tw-gradient-from: #5b21b6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(91 33 182 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-0\%{--tw-gradient-from-position: 0%}.via-\[\#eaccf8\]{--tw-gradient-to: rgb(234 204 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #eaccf8 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-\[\#ee92b1\]{--tw-gradient-to: rgb(238 146 177 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ee92b1 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-\[\#ff0065\]{--tw-gradient-to: rgb(255 0 101 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ff0065 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-pink-500{--tw-gradient-to: rgb(236 72 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ec4899 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-pink-600{--tw-gradient-to: rgb(219 39 119 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #db2777 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-500{--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-\[\#00dbde\]{--tw-gradient-to: #00dbde var(--tw-gradient-to-position)}.to-\[\#0fd850\]{--tw-gradient-to: #0fd850 var(--tw-gradient-to-position)}.to-\[\#29EAC4\]{--tw-gradient-to: #29EAC4 var(--tw-gradient-to-position)}.to-\[\#6330b4\]{--tw-gradient-to: #6330b4 var(--tw-gradient-to-position)}.to-\[\#6654f1\]{--tw-gradient-to: #6654f1 var(--tw-gradient-to-position)}.to-\[\#7b2eff\]{--tw-gradient-to: #7b2eff var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-rose-400{--tw-gradient-to: #fb7185 var(--tw-gradient-to-position)}.to-violet-500{--tw-gradient-to: #8b5cf6 var(--tw-gradient-to-position)}.to-100\%{--tw-gradient-to-position: 100%}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.text-\[\#1677ff\]{--tw-text-opacity: 1;color:rgb(22 119 255 / var(--tw-text-opacity))}.text-\[\#1a79ff\]{--tw-text-opacity: 1;color:rgb(26 121 255 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.before\:block:before{content:var(--tw-content);display:block}.before\:h-0:before{content:var(--tw-content);height:0px}.before\:h-0\.5:before{content:var(--tw-content);height:.125rem}.before\:w-0:before{content:var(--tw-content);width:0px}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-red-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.after\:h-0:after{content:var(--tw-content);height:0px}.after\:h-0\.5:after{content:var(--tw-content);height:.125rem}.after\:w-0:after{content:var(--tw-content);width:0px}.after\:w-0\.5:after{content:var(--tw-content);width:.125rem}.after\:bg-green-500:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.hover\:z-\[1\]:hover{z-index:1}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.hover\:bg-\[var\(--c-wb\)\]:hover{background-color:var(--c-wb)}.hover\:bg-sky-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity))}.hover\:px-1:hover{padding-left:.25rem;padding-right:.25rem}.hover\:px-1\.5:hover{padding-left:.375rem;padding-right:.375rem}.hover\:text-\[\#1677ff\]:hover{--tw-text-opacity: 1;color:rgb(22 119 255 / var(--tw-text-opacity))}.hover\:text-\[\#1a79ff\]:hover{--tw-text-opacity: 1;color:rgb(26 121 255 / var(--tw-text-opacity))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:border-blue-500:disabled{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.disabled\:bg-blue-500\/5:disabled{background-color:#3b82f60d}.disabled\:text-black:disabled{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}@media (min-width: 768px){.md\:w-0{width:0px}.md\:w-\[340px\]{width:340px}.md\:flex-1{flex:1 1 0%}.md\:flex-row{flex-direction:row}.md\:items-stretch{align-items:stretch}}.dark\:divide-gray-700:where([data-mode=dark],[data-mode=dark] *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity))}.dark\:border-gray-700:where([data-mode=dark],[data-mode=dark] *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:border-gray-800:where([data-mode=dark],[data-mode=dark] *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity))}.dark\:border-white:where([data-mode=dark],[data-mode=dark] *){--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.dark\:border-white\/40:where([data-mode=dark],[data-mode=dark] *){border-color:#fff6}.dark\:border-b-gray-700:where([data-mode=dark],[data-mode=dark] *){--tw-border-opacity: 1;border-bottom-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:border-l-gray-700:where([data-mode=dark],[data-mode=dark] *){--tw-border-opacity: 1;border-left-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-black:where([data-mode=dark],[data-mode=dark] *){--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.dark\:bg-white\/20:where([data-mode=dark],[data-mode=dark] *){background-color:#fff3}.dark\:text-gray-300:where([data-mode=dark],[data-mode=dark] *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.dark\:text-gray-400:where([data-mode=dark],[data-mode=dark] *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:hover\:bg-gray-900:hover:where([data-mode=dark],[data-mode=dark] *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.dark\:hover\:bg-slate-700:hover:where([data-mode=dark],[data-mode=dark] *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.\[\&_\.ant-drawer-body\]\:p-0 .ant-drawer-body{padding:0}.\[\&_\.ant-popover-content\]\:h-full .ant-popover-content,.\[\&_\.ant-popover-inner\]\:h-full .ant-popover-inner{height:100%}.\[\&_\.ant-popover-inner\]\:overflow-y-auto .ant-popover-inner{overflow-y:auto}.\[\&_\.ant-popover-inner\]\:overflow-x-hidden .ant-popover-inner{overflow-x:hidden}.\[\&_\.ant-radio-wrapper_span\]\:p-0 .ant-radio-wrapper span{padding:0}.\[\&_\.ant-radio-wrapper_span\]\:px-1 .ant-radio-wrapper span{padding-left:.25rem;padding-right:.25rem}.\[\&_\.ant-radio\]\:hidden .ant-radio{display:none}.\[\&_\.ant-segmented-item\]\:w-\[33\%\] .ant-segmented-item{width:33%}.\[\&_\.ant-segmented\]\:w-full .ant-segmented{width:100%}.\[\&_\.border\]\:border-\[\#1a79ff\] .border{--tw-border-opacity: 1;border-color:rgb(26 121 255 / var(--tw-border-opacity))}.\[\&_\.border\]\:hover\:text-\[\#1a79ff\]:hover .border{--tw-text-opacity: 1;color:rgb(26 121 255 / var(--tw-text-opacity))}.\[\&_label\]\:text-sm label{font-size:.875rem;line-height:1.25rem}.\[\&_label\]\:text-xs label{font-size:.75rem;line-height:1rem}.\[\&_label\]\:font-semibold label{font-weight:600}.\[\&_span\]\:mr-0 span{margin-right:0}.\[\&_span\]\:block span{display:block}.\[\&_span\]\:w-full span{width:100%}.\[\&_span\]\:p-0 span{padding:0}.\[\&_span\]\:ps-0 span{padding-inline-start:0px}.\[\&_svg\]\:hover\:text-blue-500:hover svg{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}
|
package/package.json
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "image-beautifier",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Used to beautify image share display, add beautiful background, rounded corners, shadows, etc...",
|
|
6
|
-
"
|
|
6
|
+
"keywords": [
|
|
7
|
+
"react",
|
|
8
|
+
"image-beautifier",
|
|
9
|
+
"LeaferJs"
|
|
10
|
+
],
|
|
11
|
+
"module": "lib/image-beautifier.es.js",
|
|
12
|
+
"main": "lib/image-beautifier.es.js",
|
|
7
13
|
"scripts": {
|
|
8
14
|
"dev": "vite",
|
|
9
15
|
"build": "vite build",
|
|
16
|
+
"build:lib": "NODE_TYPE=lib vite build",
|
|
10
17
|
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
|
|
11
|
-
"preview": "vite preview"
|
|
18
|
+
"preview": "vite preview",
|
|
19
|
+
"release": "npm publish"
|
|
12
20
|
},
|
|
21
|
+
"files": [
|
|
22
|
+
"lib",
|
|
23
|
+
"license",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
13
26
|
"dependencies": {
|
|
27
|
+
"@ant-design/cssinjs": "^1.21.0",
|
|
14
28
|
"@ctrl/tinycolor": "^4.1.0",
|
|
15
29
|
"@emoji-mart/data": "^1.2.1",
|
|
16
30
|
"@emoji-mart/react": "^1.1.1",
|
package/.eslintrc.cjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
root: true,
|
|
3
|
-
env: {
|
|
4
|
-
browser: true,
|
|
5
|
-
es2020: true
|
|
6
|
-
},
|
|
7
|
-
extends: [
|
|
8
|
-
'eslint:recommended',
|
|
9
|
-
'plugin:react/recommended',
|
|
10
|
-
'plugin:react/jsx-runtime',
|
|
11
|
-
'plugin:react-hooks/recommended',
|
|
12
|
-
],
|
|
13
|
-
ignorePatterns: ['dist', '.eslintrc.cjs'],
|
|
14
|
-
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
|
|
15
|
-
settings: { react: { version: '18.2' } },
|
|
16
|
-
plugins: ['react-refresh'],
|
|
17
|
-
rules: {
|
|
18
|
-
'react/prop-types': 0,
|
|
19
|
-
'react/jsx-no-target-blank': 'off',
|
|
20
|
-
'react-refresh/only-export-components': [
|
|
21
|
-
'warn',
|
|
22
|
-
{ allowConstantExport: true },
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
}
|
package/favicon.svg
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<svg width="16" height="16" viewBox="0 0 510 510" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g filter="url(#filter0_i_40_60)">
|
|
3
|
-
<path d="M60.1774 83.172C64.1232 61.4358 84.9426 47.0139 106.679 50.9598L271.777 80.9308C293.513 84.8767 307.935 105.696 303.989 127.432L247.462 438.817C243.516 460.553 222.696 474.975 200.96 471.029L35.8623 441.058C14.1261 437.112 -0.295702 416.293 3.65017 394.557L60.1774 83.172Z" fill="#812BED"/>
|
|
4
|
-
<path d="M179.201 136.846C173.053 115.627 185.269 93.4418 206.488 87.2932L367.654 40.5909C388.872 34.4423 411.058 46.6588 417.206 67.8773L505.29 371.846C511.438 393.065 499.222 415.25 478.003 421.399L316.837 468.101C295.619 474.25 273.433 462.033 267.285 440.815L179.201 136.846Z" fill="#0DB7FF"/>
|
|
5
|
-
<path d="M206.488 87.2932C185.269 93.4418 173.053 115.627 179.201 136.846L254.874 397.986L303.989 127.432C307.935 105.696 293.513 84.8767 271.777 80.9308L245.134 76.0943L206.488 87.2932Z" fill="#EC83FD"/>
|
|
6
|
-
<path d="M401 404C401 416.703 390.703 427 378 427C365.297 427 355 416.703 355 404C355 391.297 365.297 381 378 381C390.703 381 401 391.297 401 404Z" fill="#0D97D3"/>
|
|
7
|
-
<path d="M144 404C144 416.703 133.703 427 121 427C108.297 427 98 416.703 98 404C98 391.297 108.297 381 121 381C133.703 381 144 391.297 144 404Z" fill="#6616CB"/>
|
|
8
|
-
</g>
|
|
9
|
-
<defs>
|
|
10
|
-
<filter id="filter0_i_40_60" x="3" y="39" width="503.881" height="432.679" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
|
11
|
-
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
|
12
|
-
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
|
13
|
-
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
14
|
-
<feOffset dx="-2"/>
|
|
15
|
-
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
16
|
-
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.7 0"/>
|
|
17
|
-
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_40_60"/>
|
|
18
|
-
</filter>
|
|
19
|
-
</defs>
|
|
20
|
-
</svg>
|
package/index.html
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>Image Beautifier</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="root"></div>
|
|
11
|
-
<script type="module" src="/src/main.jsx"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
package/jsconfig.json
DELETED
package/postcss.config.mjs
DELETED
package/preview.png
DELETED
|
Binary file
|
package/public/vite.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
package/src/App.jsx
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { message } from 'antd';
|
|
3
|
-
import { observer } from 'mobx-react-lite';
|
|
4
|
-
import Header from '@components/header/Header';
|
|
5
|
-
import Editor from '@components/editor/Editor';
|
|
6
|
-
import SideBar from '@components/sideBar/SideBar';
|
|
7
|
-
import Init from '@components/init/Init';
|
|
8
|
-
import stores from '@stores';
|
|
9
|
-
import '@style/main.css';
|
|
10
|
-
|
|
11
|
-
export default observer(() => {
|
|
12
|
-
const workplace = stores.editor.img?.src ? <Editor /> : <Init />
|
|
13
|
-
const [messageApi, contextHolder] = message.useMessage();
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
stores.editor.setMessage(messageApi);
|
|
16
|
-
}, [messageApi]);
|
|
17
|
-
return (
|
|
18
|
-
<>
|
|
19
|
-
{contextHolder}
|
|
20
|
-
<div className="polka flex flex-col overflow-hidden antialiased w-full h-[100vh]">
|
|
21
|
-
<Header />
|
|
22
|
-
<div className="flex flex-col flex-1 h-0 md:flex-row md:items-stretch">
|
|
23
|
-
{workplace}
|
|
24
|
-
<SideBar />
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</>
|
|
28
|
-
)
|
|
29
|
-
});
|
package/src/assets/blur.svg
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<svg height="100" width="100" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<defs>
|
|
3
|
-
<filter id="f1" x="0" y="0" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="10" />
|
|
5
|
-
</filter>
|
|
6
|
-
</defs>
|
|
7
|
-
<image width="100" height="100" filter="url(#f1)" href="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png" />
|
|
8
|
-
</svg>
|
package/src/assets/color.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M311.296 428.544V40.96C186.368 94.208 87.552 195.072 36.864 321.024l274.432 274.432V428.544z" fill="#37C15C"></path><path d="M428.544 311.296l274.432-274.432C642.048 12.288 577.536 0 512 0 440.832 0 372.736 14.848 311.296 40.96v387.584l117.248-117.248z" fill="#A9E247"></path><path d="M983.04 311.296h-387.584l117.248 117.248 274.432 274.432c24.576-60.416 36.864-125.44 36.864-190.976 0-71.168-14.848-139.264-40.96-200.704z" fill="#FF7D12"></path><path d="M712.704 595.456V983.04c124.928-53.248 223.744-154.112 274.432-280.064l-274.432-274.432v166.912z" fill="#F93B21"></path><path d="M595.456 712.704l-274.432 274.432c60.928 24.576 125.44 36.864 190.976 36.864 71.168 0 139.264-14.848 200.704-40.96v-387.584l-117.248 117.248z" fill="#846FEF"></path><path d="M428.544 712.704H40.96c53.248 124.928 154.112 223.744 280.064 274.432l274.432-274.432H428.544z" fill="#1E95FF"></path><path d="M311.296 595.456L36.864 321.024C12.288 381.952 0 446.464 0 512c0 71.168 14.848 139.264 40.96 200.704h387.584l-117.248-117.248z" fill="#14EFEF"></path><path d="M595.456 311.296H983.04c-53.248-124.928-154.112-223.744-280.064-274.432L428.544 311.296h166.912z" fill="#FFC931"></path></svg>
|
package/src/assets/demo.png
DELETED
|
Binary file
|
package/src/assets/pencil.png
DELETED
|
Binary file
|
package/src/assets/rotate.png
DELETED
|
Binary file
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ColorPicker, Button } from 'antd';
|
|
2
|
-
import { TinyColor } from '@ctrl/tinycolor';
|
|
3
|
-
import Icon from '@components/Icon';
|
|
4
|
-
|
|
5
|
-
export default (props) => {
|
|
6
|
-
const useDropper = () => {
|
|
7
|
-
if (!window.EyeDropper) return;
|
|
8
|
-
const eyeDropper = new EyeDropper();
|
|
9
|
-
eyeDropper.open().then((result) => {
|
|
10
|
-
const color = result.sRGBHex;
|
|
11
|
-
props?.onChange && props.onChange(new TinyColor(color));
|
|
12
|
-
}).catch((e) => {
|
|
13
|
-
console.log(e);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return <ColorPicker
|
|
17
|
-
{...props}
|
|
18
|
-
panelRender={(panel) => (
|
|
19
|
-
<>
|
|
20
|
-
{window.EyeDropper && <div className="mb-1">
|
|
21
|
-
<Button type="text" shape="circle" size="small" icon={<Icon.Pipette size={16} />} onClick={useDropper} />
|
|
22
|
-
</div>}
|
|
23
|
-
{panel}
|
|
24
|
-
</>
|
|
25
|
-
)}
|
|
26
|
-
/>
|
|
27
|
-
};
|
package/src/components/Icon.jsx
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Camera,
|
|
3
|
-
Check,
|
|
4
|
-
Square,
|
|
5
|
-
Circle,
|
|
6
|
-
Slash,
|
|
7
|
-
MoveDownLeft,
|
|
8
|
-
Pencil,
|
|
9
|
-
Smile,
|
|
10
|
-
Undo,
|
|
11
|
-
Redo,
|
|
12
|
-
ChevronRight,
|
|
13
|
-
ChevronDown,
|
|
14
|
-
ChevronUp,
|
|
15
|
-
RotateCcw,
|
|
16
|
-
ZoomIn,
|
|
17
|
-
ZoomOut,
|
|
18
|
-
Hand,
|
|
19
|
-
Crop,
|
|
20
|
-
FlipHorizontal2,
|
|
21
|
-
FlipVertical2,
|
|
22
|
-
Sunset,
|
|
23
|
-
Box,
|
|
24
|
-
LayoutGrid,
|
|
25
|
-
ImagePlus,
|
|
26
|
-
Type,
|
|
27
|
-
CodeXml,
|
|
28
|
-
ClipboardPaste,
|
|
29
|
-
ImagePlay,
|
|
30
|
-
Maximize,
|
|
31
|
-
ListCollapse,
|
|
32
|
-
ArrowUpRight,
|
|
33
|
-
ArrowDownRight,
|
|
34
|
-
ImageDown,
|
|
35
|
-
Copy,
|
|
36
|
-
Settings2,
|
|
37
|
-
ChevronLeft,
|
|
38
|
-
Pipette,
|
|
39
|
-
Trash2
|
|
40
|
-
} from 'lucide-react';
|
|
41
|
-
|
|
42
|
-
export default {
|
|
43
|
-
Camera,
|
|
44
|
-
Check,
|
|
45
|
-
Square,
|
|
46
|
-
Circle,
|
|
47
|
-
Slash,
|
|
48
|
-
MoveDownLeft,
|
|
49
|
-
Pencil,
|
|
50
|
-
Smile,
|
|
51
|
-
Undo,
|
|
52
|
-
Redo,
|
|
53
|
-
ChevronRight,
|
|
54
|
-
ChevronDown,
|
|
55
|
-
ChevronUp,
|
|
56
|
-
RotateCcw,
|
|
57
|
-
ZoomIn,
|
|
58
|
-
ZoomOut,
|
|
59
|
-
Hand,
|
|
60
|
-
Crop,
|
|
61
|
-
FlipHorizontal2,
|
|
62
|
-
FlipVertical2,
|
|
63
|
-
Sunset,
|
|
64
|
-
Box,
|
|
65
|
-
LayoutGrid,
|
|
66
|
-
ImagePlus,
|
|
67
|
-
Type,
|
|
68
|
-
CodeXml,
|
|
69
|
-
ClipboardPaste,
|
|
70
|
-
ImagePlay,
|
|
71
|
-
Maximize,
|
|
72
|
-
ListCollapse,
|
|
73
|
-
ArrowUpRight,
|
|
74
|
-
ArrowDownRight,
|
|
75
|
-
ImageDown,
|
|
76
|
-
Copy,
|
|
77
|
-
Settings2,
|
|
78
|
-
ChevronLeft,
|
|
79
|
-
Pipette,
|
|
80
|
-
Trash2
|
|
81
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { observer } from 'mobx-react-lite';
|
|
3
|
-
import View from './View';
|
|
4
|
-
import Zoom from './Zoom';
|
|
5
|
-
|
|
6
|
-
export default observer(() => {
|
|
7
|
-
const [target, setTarget] = useState(null);
|
|
8
|
-
|
|
9
|
-
return (
|
|
10
|
-
<div className='md:w-0 md:flex-1 overflow-hidden select-none relative'>
|
|
11
|
-
<div className="w-full h-full relative z-0" ref={
|
|
12
|
-
(node) => setTarget(node)
|
|
13
|
-
}>
|
|
14
|
-
{target && <View target={target} />}
|
|
15
|
-
</div>
|
|
16
|
-
<Zoom />
|
|
17
|
-
</div>
|
|
18
|
-
);
|
|
19
|
-
});
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { useEffect } from "react"
|
|
2
|
-
import { tinykeys } from "tinykeys"
|
|
3
|
-
import { observer } from 'mobx-react-lite';
|
|
4
|
-
import stores from '@stores';
|
|
5
|
-
|
|
6
|
-
export default observer(() => {
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
const deleteItem = event => {
|
|
9
|
-
// event.preventDefault();
|
|
10
|
-
const { list } = stores.editor.app?.editor;
|
|
11
|
-
if (list?.length) {
|
|
12
|
-
for (let item of list) {
|
|
13
|
-
item.remove();
|
|
14
|
-
stores.editor.removeShape(item);
|
|
15
|
-
}
|
|
16
|
-
stores.editor.app.editor.cancel();
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const handleZoom = type => {
|
|
20
|
-
if (type === 'fit') {
|
|
21
|
-
stores.editor.app?.tree.zoom(type, 100);
|
|
22
|
-
} else {
|
|
23
|
-
stores.editor.app?.tree.zoom(type);
|
|
24
|
-
}
|
|
25
|
-
stores.editor.setScale(stores.editor.app.tree.scale);
|
|
26
|
-
}
|
|
27
|
-
const unsubscribe = tinykeys(window, {
|
|
28
|
-
'Backspace': deleteItem,
|
|
29
|
-
'Delete': deleteItem,
|
|
30
|
-
'$mod+Minus': event => {
|
|
31
|
-
event.preventDefault();
|
|
32
|
-
handleZoom('out');
|
|
33
|
-
},
|
|
34
|
-
'$mod+Equal': event => {
|
|
35
|
-
event.preventDefault();
|
|
36
|
-
handleZoom('in');
|
|
37
|
-
},
|
|
38
|
-
'$mod+Digit0': event => {
|
|
39
|
-
event.preventDefault();
|
|
40
|
-
handleZoom('fit');
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
return () => {
|
|
44
|
-
unsubscribe();
|
|
45
|
-
}
|
|
46
|
-
}, [window]);
|
|
47
|
-
return null;
|
|
48
|
-
});
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { observer } from 'mobx-react-lite';
|
|
3
|
-
import { App, ResizeEvent, ZoomEvent, DragEvent, Cursor } from 'leafer-ui';
|
|
4
|
-
import debounce from 'lodash/debounce';
|
|
5
|
-
import { addListener, removeListener } from 'resize-detector';
|
|
6
|
-
import rotatePng from '@assets/rotate.png';
|
|
7
|
-
import pencilPng from '@assets/pencil.png';
|
|
8
|
-
import stores from '@stores';
|
|
9
|
-
import FrameBox from './layers/FrameBox';
|
|
10
|
-
import Screenshot from './layers/Screenshot';
|
|
11
|
-
import Watermark from './layers/Watermark';
|
|
12
|
-
import ShapeLine from './layers/ShapeLine';
|
|
13
|
-
import { ScrollBar } from '@leafer-in/scroll'
|
|
14
|
-
import { nanoid } from '@utils/utils';
|
|
15
|
-
import HotKeys from './HotKeys';
|
|
16
|
-
import '@leafer-in/editor';
|
|
17
|
-
import '@leafer-in/view';
|
|
18
|
-
|
|
19
|
-
Cursor.set('pencil', { url: pencilPng });
|
|
20
|
-
|
|
21
|
-
export default observer(({target}) => {
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
const app = new App({
|
|
24
|
-
view: target,
|
|
25
|
-
editor: {
|
|
26
|
-
lockRatio: 'corner',
|
|
27
|
-
stroke: '#3f99f7',
|
|
28
|
-
skewable: false,
|
|
29
|
-
hover: false,
|
|
30
|
-
middlePoint: { cornerRadius: 100, width: 20, height: 6 },
|
|
31
|
-
rotatePoint: {
|
|
32
|
-
width: 20,
|
|
33
|
-
height: 20,
|
|
34
|
-
fill: {
|
|
35
|
-
type: 'image',
|
|
36
|
-
url: rotatePng,
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
tree: {
|
|
41
|
-
usePartRender: true,
|
|
42
|
-
},
|
|
43
|
-
sky: {
|
|
44
|
-
type: 'draw',
|
|
45
|
-
usePartRender: true,
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
new ScrollBar(app);
|
|
49
|
-
|
|
50
|
-
stores.editor.setApp(app);
|
|
51
|
-
|
|
52
|
-
app.tree.on(ZoomEvent.ZOOM, () => {
|
|
53
|
-
stores.editor.setScale(app.tree.scale);
|
|
54
|
-
});
|
|
55
|
-
app.tree.on(ResizeEvent.RESIZE, () => {
|
|
56
|
-
stores.editor.setScale(app.tree.scale);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
let shapeId = null;
|
|
60
|
-
app.tree.on(DragEvent.START, (arg) => {
|
|
61
|
-
if (!stores.editor.useTool) return;
|
|
62
|
-
const { target } = arg;
|
|
63
|
-
const shape = stores.editor.getShape(target.id);
|
|
64
|
-
if (shape) return;
|
|
65
|
-
shapeId = nanoid();
|
|
66
|
-
const size = arg.getPageBounds();
|
|
67
|
-
const type = stores.editor.useTool;
|
|
68
|
-
const newShape = {
|
|
69
|
-
id: shapeId,
|
|
70
|
-
type,
|
|
71
|
-
fill: stores.editor.annotateColor,
|
|
72
|
-
strokeWidth: stores.editor.strokeWidth,
|
|
73
|
-
zIndex: stores.editor.shapes.size + 1,
|
|
74
|
-
...size
|
|
75
|
-
};
|
|
76
|
-
if (['Slash', 'MoveDownLeft', 'Pencil'].includes(type)) {
|
|
77
|
-
newShape.points = [size.x, size.y];
|
|
78
|
-
}
|
|
79
|
-
stores.editor.addShape(newShape);
|
|
80
|
-
});
|
|
81
|
-
app.tree.on(DragEvent.DRAG, (arg) => {
|
|
82
|
-
if (!stores.editor.useTool) return;
|
|
83
|
-
if (!shapeId) return;
|
|
84
|
-
const shape = stores.editor.getShape(shapeId);
|
|
85
|
-
if (!shape) return;
|
|
86
|
-
const size = arg.getPageBounds();
|
|
87
|
-
const newShape = Object.assign({}, shape, size);
|
|
88
|
-
const { points, type } = newShape;
|
|
89
|
-
if (points && points.length) {
|
|
90
|
-
const { x, y } = arg.getInnerTotal();
|
|
91
|
-
const newX = x > 0 ? size.x + x : size.x;
|
|
92
|
-
const newY = y > 0 ? size.y + y : size.y;
|
|
93
|
-
if (type === 'Pencil') {
|
|
94
|
-
newShape.points = [...points, newX, newY];
|
|
95
|
-
} else {
|
|
96
|
-
newShape.points = [points[0], points[1], newX, newY];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
stores.editor.addShape(newShape);
|
|
100
|
-
});
|
|
101
|
-
app.tree.on(DragEvent.END, () => {
|
|
102
|
-
if (!stores.editor.useTool) return;
|
|
103
|
-
if (!shapeId) return;
|
|
104
|
-
const shape = stores.editor.getShape(shapeId);
|
|
105
|
-
if (shape) {
|
|
106
|
-
if ((shape.width === 0 || shape.height === 0) && !['Slash', 'MoveDownLeft', 'Pencil'].includes(shape.type)) {
|
|
107
|
-
stores.editor.removeShape(shape);
|
|
108
|
-
} else {
|
|
109
|
-
stores.editor.addShape(Object.assign({}, shape, {editable: true}));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
shapeId = null;
|
|
113
|
-
if (stores.editor.useTool !== 'Pencil') stores.editor.setUseTool(null);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
// 监听容器变化
|
|
117
|
-
const onResize = debounce(() => {
|
|
118
|
-
const { width, height } = target.getBoundingClientRect();
|
|
119
|
-
app.tree.zoom('fit', 100);
|
|
120
|
-
if (stores.option.frameConf.width < width && stores.option.frameConf.height < height) {
|
|
121
|
-
app.tree.zoom(1);
|
|
122
|
-
}
|
|
123
|
-
}, 10);
|
|
124
|
-
|
|
125
|
-
addListener(target, onResize);
|
|
126
|
-
|
|
127
|
-
// setTimeout(() => {
|
|
128
|
-
// const { width, height } = target.getBoundingClientRect();
|
|
129
|
-
// app.tree.zoom('fit', 100);
|
|
130
|
-
// if (stores.option.frameConf.width < width && stores.option.frameConf.height < height) {
|
|
131
|
-
// app.tree.zoom(1);
|
|
132
|
-
// }
|
|
133
|
-
// stores.editor.setScale(app.tree.scale);
|
|
134
|
-
// }, 10);
|
|
135
|
-
|
|
136
|
-
return (() => {
|
|
137
|
-
removeListener(target, onResize);
|
|
138
|
-
stores.editor.destroy();
|
|
139
|
-
});
|
|
140
|
-
}, [target]);
|
|
141
|
-
|
|
142
|
-
useEffect(() => {
|
|
143
|
-
const timer = setTimeout(() => {
|
|
144
|
-
const { width, height } = target.getBoundingClientRect();
|
|
145
|
-
stores.editor.app.tree.zoom('fit', 100);
|
|
146
|
-
if (stores.option.frameConf.width < width && stores.option.frameConf.height < height) {
|
|
147
|
-
stores.editor.app.tree.zoom(1);
|
|
148
|
-
}
|
|
149
|
-
stores.editor.setScale(stores.editor.app.tree.scale);
|
|
150
|
-
}, 20);
|
|
151
|
-
return (() => {
|
|
152
|
-
clearTimeout(timer);
|
|
153
|
-
})
|
|
154
|
-
}, [stores.option.frameConf.width, stores.option.frameConf.height]);
|
|
155
|
-
|
|
156
|
-
if (!stores.editor.app?.tree) return null;
|
|
157
|
-
return (<>
|
|
158
|
-
<FrameBox parent={stores.editor.app.tree} cursor={stores.editor.cursor} {...stores.option.frameConf}>
|
|
159
|
-
{stores.editor.shapesList.map((item) => (
|
|
160
|
-
<ShapeLine key={item.id} {...item} />
|
|
161
|
-
))}
|
|
162
|
-
{stores.editor.img?.src && <Screenshot />}
|
|
163
|
-
{stores.option.waterImg && <Watermark />}
|
|
164
|
-
</FrameBox>
|
|
165
|
-
<HotKeys />
|
|
166
|
-
</>);
|
|
167
|
-
});
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { observer } from 'mobx-react-lite';
|
|
3
|
-
import Icon from '@components/Icon';
|
|
4
|
-
import { Button, Dropdown } from 'antd';
|
|
5
|
-
import stores from '@stores';
|
|
6
|
-
|
|
7
|
-
const items = [
|
|
8
|
-
{
|
|
9
|
-
key: 0.5,
|
|
10
|
-
label: '50%'
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
key: 1,
|
|
14
|
-
label: '100%'
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
key: 1.5,
|
|
18
|
-
label: '150%'
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
key: 2,
|
|
22
|
-
label: '200%'
|
|
23
|
-
}
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
export default observer(() => {
|
|
27
|
-
const handleZoom = (key) => {
|
|
28
|
-
stores.editor.app?.tree.zoom(key);
|
|
29
|
-
stores.editor.setScale(stores.editor.app.tree.scale);
|
|
30
|
-
}
|
|
31
|
-
const handleMenuClick = (item) => {
|
|
32
|
-
const num = Number(item.key);
|
|
33
|
-
if (num === 4) {
|
|
34
|
-
stores.editor.app?.tree.zoom('fit', 100);
|
|
35
|
-
} else {
|
|
36
|
-
stores.editor.app?.tree.zoom(num);
|
|
37
|
-
}
|
|
38
|
-
stores.editor.setScale(stores.editor.app.tree.scale);
|
|
39
|
-
}
|
|
40
|
-
return (
|
|
41
|
-
<div className="absolute z-10 bottom-4 gap-2 right-4 flex items-center ">
|
|
42
|
-
<div className="flex bg-white overflow-hidden rounded-full shadow-md">
|
|
43
|
-
<Button type="text" icon={<Icon.ZoomIn size={16} />} onClick={() => handleZoom('in')} />
|
|
44
|
-
<Dropdown menu={{ items, onClick: handleMenuClick }} placement="top">
|
|
45
|
-
<Button type="text">{stores.editor.scale}%</Button>
|
|
46
|
-
</Dropdown>
|
|
47
|
-
<Button type="text" icon={<Icon.ZoomOut size={16} />} onClick={() => handleZoom('out')} />
|
|
48
|
-
</div>
|
|
49
|
-
<div className="rounded-full bg-white shadow-md overflow-hidden">
|
|
50
|
-
<Button type="text" icon={<Icon.Maximize size={16} />} onClick={() => handleMenuClick({key: 4})} />
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
)
|
|
54
|
-
});
|