@cs-open/react-fabric 0.0.6 → 0.0.7
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 +132 -0
- package/dist/cjs/components/Control/index.cjs +1 -1
- package/dist/cjs/components/Control/index.cjs.map +1 -1
- package/dist/cjs/components/Ellipse/index.cjs +1 -1
- package/dist/cjs/components/Ellipse/index.cjs.map +1 -1
- package/dist/cjs/components/Group/index.cjs +1 -1
- package/dist/cjs/components/IText/index.cjs +2 -0
- package/dist/cjs/components/IText/index.cjs.map +1 -0
- package/dist/cjs/components/Image/index.cjs +1 -1
- package/dist/cjs/components/Image/index.cjs.map +1 -1
- package/dist/cjs/components/Line/index.cjs +1 -1
- package/dist/cjs/components/Line/index.cjs.map +1 -1
- package/dist/cjs/components/Loading/index.cjs +2 -0
- package/dist/cjs/components/Loading/index.cjs.map +1 -0
- package/dist/cjs/components/NodeToolbarPortal/index.cjs +1 -1
- package/dist/cjs/components/NodeToolbarPortal/index.cjs.map +1 -1
- package/dist/cjs/components/Objects/index.cjs +1 -1
- package/dist/cjs/components/Objects/index.cjs.map +1 -1
- package/dist/cjs/components/Path/index.cjs +1 -1
- package/dist/cjs/components/Path/index.cjs.map +1 -1
- package/dist/cjs/components/Polyline/index.cjs +2 -0
- package/dist/cjs/components/Polyline/index.cjs.map +1 -0
- package/dist/cjs/components/ReactFabricProvider.cjs +1 -1
- package/dist/cjs/components/Rect/index.cjs +1 -1
- package/dist/cjs/components/Rect/index.cjs.map +1 -1
- package/dist/cjs/components/Text/index.cjs +1 -1
- package/dist/cjs/components/Text/index.cjs.map +1 -1
- package/dist/cjs/components/Textbox/index.cjs +2 -0
- package/dist/cjs/components/Textbox/index.cjs.map +1 -0
- package/dist/cjs/components/WavyLine/index.cjs +2 -0
- package/dist/cjs/components/WavyLine/index.cjs.map +1 -0
- package/dist/cjs/container/ReactFabric/index.cjs +1 -1
- package/dist/cjs/container/ReactFabric/index.cjs.map +1 -1
- package/dist/cjs/hooks/useChildrenPosition.cjs +2 -0
- package/dist/cjs/hooks/useChildrenPosition.cjs.map +1 -0
- package/dist/cjs/hooks/useCreateObject.cjs +1 -1
- package/dist/cjs/hooks/useCreateObject.cjs.map +1 -1
- package/dist/cjs/hooks/useDidUpdate.cjs +1 -1
- package/dist/cjs/hooks/useDraggable.cjs +1 -1
- package/dist/cjs/hooks/useResizeHandler.cjs +1 -1
- package/dist/cjs/hooks/useResizeHandler.cjs.map +1 -1
- package/dist/cjs/hooks/useSplitProps.cjs +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/plugins/FreeDraw.cjs +2 -0
- package/dist/cjs/plugins/FreeDraw.cjs.map +1 -0
- package/dist/cjs/plugins/FreeRect.cjs +1 -1
- package/dist/cjs/plugins/FreeText.cjs +2 -0
- package/dist/cjs/plugins/FreeText.cjs.map +1 -0
- package/dist/cjs/plugins/Mask.cjs +2 -0
- package/dist/cjs/plugins/Mask.cjs.map +1 -0
- package/dist/cjs/plugins/Pinch.cjs +1 -1
- package/dist/cjs/plugins/Pinch.cjs.map +1 -1
- package/dist/cjs/plugins/index.cjs +2 -0
- package/dist/cjs/plugins/index.cjs.map +1 -0
- package/dist/cjs/utils/business.cjs +2 -0
- package/dist/cjs/utils/business.cjs.map +1 -0
- package/dist/esm/components/Control/index.mjs +1 -1
- package/dist/esm/components/Control/index.mjs.map +1 -1
- package/dist/esm/components/Ellipse/index.mjs +1 -1
- package/dist/esm/components/Ellipse/index.mjs.map +1 -1
- package/dist/esm/components/IText/index.mjs +2 -0
- package/dist/esm/components/IText/index.mjs.map +1 -0
- package/dist/esm/components/Line/index.mjs +1 -1
- package/dist/esm/components/Line/index.mjs.map +1 -1
- package/dist/esm/components/Loading/index.mjs +2 -0
- package/dist/esm/components/Loading/index.mjs.map +1 -0
- package/dist/esm/components/NodeToolbarPortal/index.mjs +1 -1
- package/dist/esm/components/NodeToolbarPortal/index.mjs.map +1 -1
- package/dist/esm/components/Objects/index.mjs +1 -1
- package/dist/esm/components/Objects/index.mjs.map +1 -1
- package/dist/esm/components/Path/index.mjs +1 -1
- package/dist/esm/components/Path/index.mjs.map +1 -1
- package/dist/esm/components/Rect/index.mjs +1 -1
- package/dist/esm/components/Rect/index.mjs.map +1 -1
- package/dist/esm/components/Text/index.mjs +1 -1
- package/dist/esm/components/Text/index.mjs.map +1 -1
- package/dist/esm/components/Textbox/index.mjs +2 -0
- package/dist/esm/components/Textbox/index.mjs.map +1 -0
- package/dist/esm/components/WavyLine/index.mjs +2 -0
- package/dist/esm/components/WavyLine/index.mjs.map +1 -0
- package/dist/esm/container/ReactFabric/index.mjs +1 -1
- package/dist/esm/container/ReactFabric/index.mjs.map +1 -1
- package/dist/esm/hooks/useChildrenPosition.mjs +2 -0
- package/dist/esm/hooks/useChildrenPosition.mjs.map +1 -0
- package/dist/esm/hooks/useCreateObject.mjs.map +1 -1
- package/dist/esm/hooks/useResizeHandler.mjs +1 -1
- package/dist/esm/hooks/useResizeHandler.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/plugins/Mask.mjs +2 -0
- package/dist/esm/plugins/Mask.mjs.map +1 -0
- package/dist/esm/plugins/Pinch.mjs +1 -1
- package/dist/esm/plugins/Pinch.mjs.map +1 -1
- package/dist/types/components/Control/index.d.ts.map +1 -1
- package/dist/types/components/Ellipse/index.d.ts +3 -0
- package/dist/types/components/Ellipse/index.d.ts.map +1 -1
- package/dist/types/components/IText/index.d.ts +12 -0
- package/dist/types/components/IText/index.d.ts.map +1 -0
- package/dist/types/components/Image/index.d.ts.map +1 -1
- package/dist/types/components/Line/index.d.ts +2 -0
- package/dist/types/components/Line/index.d.ts.map +1 -1
- package/dist/types/components/Loading/index.d.ts +3 -0
- package/dist/types/components/Loading/index.d.ts.map +1 -0
- package/dist/types/components/NodeToolbarPortal/index.d.ts.map +1 -1
- package/dist/types/components/Objects/index.d.ts.map +1 -1
- package/dist/types/components/Path/index.d.ts +2 -0
- package/dist/types/components/Path/index.d.ts.map +1 -1
- package/dist/types/components/Polyline/index.d.ts +12 -0
- package/dist/types/components/Polyline/index.d.ts.map +1 -0
- package/dist/types/components/Rect/index.d.ts +4 -2
- package/dist/types/components/Rect/index.d.ts.map +1 -1
- package/dist/types/components/Text/index.d.ts +2 -0
- package/dist/types/components/Text/index.d.ts.map +1 -1
- package/dist/types/components/Textbox/index.d.ts +12 -0
- package/dist/types/components/Textbox/index.d.ts.map +1 -0
- package/dist/types/components/WavyLine/index.d.ts +12 -0
- package/dist/types/components/WavyLine/index.d.ts.map +1 -0
- package/dist/types/container/ReactFabric/index.d.ts.map +1 -1
- package/dist/types/hooks/useChildrenPosition.d.ts +8 -0
- package/dist/types/hooks/useChildrenPosition.d.ts.map +1 -0
- package/dist/types/hooks/useCreateObject.d.ts.map +1 -1
- package/dist/types/hooks/useResizeHandler.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/plugins/FreeDraw.d.ts +9 -0
- package/dist/types/plugins/FreeDraw.d.ts.map +1 -0
- package/dist/types/plugins/FreeText.d.ts +11 -0
- package/dist/types/plugins/FreeText.d.ts.map +1 -0
- package/dist/types/plugins/Mask.d.ts +8 -0
- package/dist/types/plugins/Mask.d.ts.map +1 -0
- package/dist/types/plugins/Pinch.d.ts +15 -3
- package/dist/types/plugins/Pinch.d.ts.map +1 -1
- package/dist/types/plugins/index.d.ts +7 -0
- package/dist/types/plugins/index.d.ts.map +1 -0
- package/dist/types/utils/business.d.ts +83 -0
- package/dist/types/utils/business.d.ts.map +1 -0
- package/package.json +15 -18
- package/dist/cjs/toolbar/Vertical/index.cjs +0 -2
- package/dist/cjs/toolbar/Vertical/index.cjs.map +0 -1
- package/dist/esm/toolbar/Vertical/index.mjs +0 -2
- package/dist/esm/toolbar/Vertical/index.mjs.map +0 -1
- package/dist/types/toolbar/Vertical/index.d.ts +0 -10
- package/dist/types/toolbar/Vertical/index.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/components/Text/index.tsx"],"sourcesContent":["import type { Group as BaseGroup } from 'fabric'\nimport { FabricText } from 'fabric'\nimport { forwardRef, memo, useEffect, useImperativeHandle } from 'react'\nimport { useCreateObject } from '../../hooks/useCreateObject'\nimport { useSplitProps } from '../../hooks/useSplitProps'\nimport { useStoreApi } from '../../hooks/useStore'\nimport type { AllObjectEvents } from '../../types/object'\nimport FontFaceObserver from 'fontfaceobserver'\n\nexport type Handle = FabricText | undefined\n\nexport type TextProps<T = unknown> = Partial<ConstructorParameters<typeof FabricText>[1] & AllObjectEvents> & {\n group?: BaseGroup\n text: string\n} & T\n\nconst Text = forwardRef<Handle, TextProps>(({ group, text, ...props }, ref) => {\n const store = useStoreApi()\n\n const [listeners, attributes] = useSplitProps(props)\n\n const instance = useCreateObject({\n Constructor: FabricText,\n param: text,\n attributes,\n group,\n listeners,\n })\n\n /**\n * 字体只有被使用了才会加载;先由 Text 使用一次, 监听加载完成,之后再 set 一次\n */\n useEffect(() => {\n const { canvas } = store.getState()\n if (!attributes.fontFamily || !instance) return\n const font = new FontFaceObserver(attributes.fontFamily)\n font\n .load()\n .then(() => {\n instance.set({\n fontFamily: attributes.fontFamily,\n })\n canvas?.requestRenderAll()\n })\n .catch(() => {\n // 加载失败\n console.error(`ReactFabric: 字体加载失败: ${attributes.fontFamily}`)\n })\n }, [attributes.fontFamily, instance])\n\n useImperativeHandle(ref, () => instance, [instance])\n\n return null\n})\n\nexport default memo(Text)\n"],"names":["Text","forwardRef","group","text","props","ref","store","useStoreApi","listeners","attributes","useSplitProps","instance","useCreateObject","
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/components/Text/index.tsx"],"sourcesContent":["import type { Group as BaseGroup } from 'fabric'\nimport { FabricText, Point, util } from 'fabric'\nimport { cloneElement, forwardRef, isValidElement, memo, useEffect, useImperativeHandle, type ReactNode } from 'react'\nimport { useCreateObject } from '../../hooks/useCreateObject'\nimport { useSplitProps } from '../../hooks/useSplitProps'\nimport { useStoreApi } from '../../hooks/useStore'\nimport type { AllObjectEvents } from '../../types/object'\nimport FontFaceObserver from 'fontfaceobserver'\nimport { useChildrenPosition } from '../../hooks/useChildrenPosition'\n\nexport type Handle = FabricText | undefined\n\nexport type TextProps<T = unknown> = Partial<ConstructorParameters<typeof FabricText>[1] & AllObjectEvents> & {\n group?: BaseGroup\n text: string\n children?: ReactNode\n} & T\n\nFabricText.prototype.set({\n _getNonTransformedDimensions() {\n // Object dimensions\n return new Point(this.width, this.height).scalarAdd(this.padding)\n },\n _calculateCurrentDimensions() {\n // Controls dimensions\n return util.transformPoint(this._getTransformedDimensions(), this.getViewportTransform(), true)\n },\n})\n\nconst Text = forwardRef<Handle, TextProps>(({ group, text, children, ...props }, ref) => {\n const store = useStoreApi()\n\n const [listeners, attributes] = useSplitProps(props)\n\n const instance = useCreateObject({\n Constructor: FabricText,\n param: text,\n attributes,\n group,\n listeners,\n })\n\n /**\n * 字体只有被使用了才会加载;先由 Text 使用一次, 监听加载完成,之后再 set 一次\n */\n useEffect(() => {\n const { canvas } = store.getState()\n if (!attributes.fontFamily || !instance) return\n const font = new FontFaceObserver(attributes.fontFamily)\n font\n .load()\n .then(() => {\n instance.set({\n fontFamily: attributes.fontFamily,\n })\n canvas?.requestRenderAll()\n })\n .catch(() => {\n // 加载失败\n console.error(`ReactFabric: 字体加载失败: ${attributes.fontFamily}`)\n })\n }, [attributes.fontFamily, instance])\n\n const childrenRef = useChildrenPosition<HTMLDivElement>(instance)\n\n useImperativeHandle(ref, () => instance, [instance])\n\n return children ? (\n <>\n {isValidElement(children)\n ? cloneElement(children, {\n ...(children.props as any),\n ref: childrenRef,\n } as any)\n : null}\n </>\n ) : null\n})\n\nexport default memo(Text)\n"],"names":["FabricText","Point","util","Text","forwardRef","group","text","children","props","ref","store","useStoreApi","listeners","attributes","useSplitProps","instance","useCreateObject","useEffect","canvas","FontFaceObserver","childrenRef","useChildrenPosition","useImperativeHandle","jsx","Fragment","isValidElement","cloneElement","e","memo"],"mappings":"whBAkBAA,EAAW,UAAU,IAAI,CACvB,8BAA+B,CAE7B,OAAO,IAAIC,EAAM,KAAK,MAAO,KAAK,MAAM,EAAE,UAAU,KAAK,OAAO,CAClE,EACA,6BAA8B,CAE5B,OAAOC,EAAK,eAAe,KAAK,0BAA6B,EAAA,KAAK,qBAAqB,EAAG,EAAI,CAChG,CACF,CAAC,EAED,MAAMC,EAAOC,EAA8B,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,SAAAC,EAAU,GAAGC,CAAM,EAAGC,IAAQ,CACvF,MAAMC,EAAQC,EAER,EAAA,CAACC,EAAWC,CAAU,EAAIC,EAAcN,CAAK,EAE7CO,EAAWC,EAAgB,CAC/B,YAAahB,EACb,MAAOM,EACP,WAAAO,EACA,MAAAR,EACA,UAAAO,CACF,CAAC,EAKDK,EAAU,IAAM,CACd,KAAM,CAAE,OAAAC,CAAO,EAAIR,EAAM,SACzB,EAAI,CAACG,EAAW,YAAc,CAACE,GAClB,IAAII,EAAiBN,EAAW,UAAU,EAEpD,KACA,EAAA,KAAK,IAAM,CACVE,EAAS,IAAI,CACX,WAAYF,EAAW,UACzB,CAAC,EACDK,GAAQ,kBACV,CAAC,EACA,MAAM,IAAM,CAEX,QAAQ,MAAM,sDAAwBL,EAAW,UAAU,EAAE,CAC/D,CAAC,CACL,EAAG,CAACA,EAAW,WAAYE,CAAQ,CAAC,EAEpC,MAAMK,EAAcC,EAAoCN,CAAQ,EAEhE,OAAAO,EAAoBb,EAAK,IAAMM,EAAU,CAACA,CAAQ,CAAC,EAE5CR,EACLgB,EAAAC,EAAA,CACG,SAAAC,EAAelB,CAAQ,EACpBmB,EAAanB,EAAU,CACrB,GAAIA,EAAS,MACb,IAAKa,CACP,CAAQ,EACR,IAAA,CACN,EACE,IACN,CAAC,EAED,IAAAO,EAAeC,EAAKzB,CAAI"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{jsx as p,Fragment as u}from"react/jsx-runtime";import{Textbox as t,Point as d,util as f}from"fabric";import{forwardRef as c,useImperativeHandle as h,isValidElement as g,cloneElement as x,memo as P}from"react";import{useCreateObject as w}from"../../hooks/useCreateObject.mjs";import{useSplitProps as C}from"../../hooks/useSplitProps.mjs";import{useChildrenPosition as T}from"../../hooks/useChildrenPosition.mjs";t.prototype.set({_getNonTransformedDimensions(){return new d(this.width,this.height).scalarAdd(this.padding)},_calculateCurrentDimensions(){return f.transformPoint(this._getTransformedDimensions(),this.getViewportTransform(),!0)}});const b=c(({group:o,text:i,children:e,...n},s)=>{const[m,a]=C(n),r=w({Constructor:t,param:i,attributes:a,group:o,listeners:m}),l=T(r);return h(s,()=>r,[r]),e?p(u,{children:g(e)?x(e,{...e.props,ref:l}):null}):null});var D=P(b);export{D as default};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/components/Textbox/index.tsx"],"sourcesContent":["import type { Group as BaseGroup } from 'fabric'\nimport { Textbox as FabricTextbox, util, Point } from 'fabric'\nimport { cloneElement, forwardRef, isValidElement, memo, useImperativeHandle, type ReactNode } from 'react'\nimport { useCreateObject } from '../../hooks/useCreateObject'\nimport { useSplitProps } from '../../hooks/useSplitProps'\nimport type { AllObjectEvents } from '../../types/object'\nimport { useChildrenPosition } from '../../hooks/useChildrenPosition'\n\nexport type TextboxProps<T = unknown> = Partial<ConstructorParameters<typeof FabricTextbox>[1] & AllObjectEvents> & {\n group?: BaseGroup\n text: string\n children?: ReactNode\n} & T\n\nFabricTextbox.prototype.set({\n _getNonTransformedDimensions() {\n // Object dimensions\n return new Point(this.width, this.height).scalarAdd(this.padding)\n },\n _calculateCurrentDimensions() {\n // Controls dimensions\n return util.transformPoint(this._getTransformedDimensions(), this.getViewportTransform(), true)\n },\n})\n\nconst Textbox = forwardRef<FabricTextbox | undefined, TextboxProps>(({ group, text, children, ...props }, ref) => {\n const [listeners, attributes] = useSplitProps(props)\n\n const instance = useCreateObject({\n Constructor: FabricTextbox,\n param: text,\n attributes,\n group,\n listeners,\n })\n const childrenRef = useChildrenPosition<HTMLDivElement>(instance)\n\n useImperativeHandle(ref, () => instance, [instance])\n\n return children ? (\n <>\n {isValidElement(children)\n ? cloneElement(children, {\n ...(children.props as any),\n ref: childrenRef,\n } as any)\n : null}\n </>\n ) : null\n})\n\nexport default memo(Textbox)\n"],"names":["FabricTextbox","Point","util","Textbox","forwardRef","group","text","children","props","ref","listeners","attributes","useSplitProps","instance","useCreateObject","childrenRef","useChildrenPosition","useImperativeHandle","jsx","Fragment","isValidElement","cloneElement","memo"],"mappings":"+aAcAA,EAAc,UAAU,IAAI,CAC1B,8BAA+B,CAE7B,OAAO,IAAIC,EAAM,KAAK,MAAO,KAAK,MAAM,EAAE,UAAU,KAAK,OAAO,CAClE,EACA,6BAA8B,CAE5B,OAAOC,EAAK,eAAe,KAAK,4BAA6B,KAAK,uBAAwB,EAAI,CAChG,CACF,CAAC,EAED,MAAMC,EAAUC,EAAoD,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,SAAAC,EAAU,GAAGC,CAAM,EAAGC,IAAQ,CAChH,KAAM,CAACC,EAAWC,CAAU,EAAIC,EAAcJ,CAAK,EAE7CK,EAAWC,EAAgB,CAC/B,YAAad,EACb,MAAOM,EACP,WAAAK,EACA,MAAAN,EACA,UAAAK,CACF,CAAC,EACKK,EAAcC,EAAoCH,CAAQ,EAEhE,OAAAI,EAAoBR,EAAK,IAAMI,EAAU,CAACA,CAAQ,CAAC,EAE5CN,EACLW,EAAAC,EAAA,CACG,SAAAC,EAAeb,CAAQ,EACpBc,EAAad,EAAU,CACrB,GAAIA,EAAS,MACb,IAAKQ,CACP,CAAQ,EACR,IAAA,CACN,EACE,IACN,CAAC,EAED,MAAeO,EAAKnB,CAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{jsx as v,Fragment as P}from"react/jsx-runtime";import{Line as b,Point as M}from"fabric";import{forwardRef as k,useImperativeHandle as w,isValidElement as L,cloneElement as g,memo as O}from"react";import{useCreateObject as S}from"../../hooks/useCreateObject.mjs";import{useSplitProps as j}from"../../hooks/useSplitProps.mjs";import{useChildrenPosition as I}from"../../hooks/useChildrenPosition.mjs";var C=Object.defineProperty,E=(s,e,t)=>e in s?C(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,T=(s,e,t)=>E(s,e+"",t);class x extends b{constructor(e,t={}){super(e,t)}_render(e){e.beginPath();const t=this.calcLinePoints(),o=this.pointOnLine(this.point(t.x2,t.y2));this.wavy(this.point(t.x1,t.y1),o,e),e.lineWidth=this.strokeWidth;const n=e.strokeStyle;e.strokeStyle=this.stroke??e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=n}point(e,t){return{x:e,y:t}}wavy(e,t,o){let n=0,i=0,a=e.x,l=e.y,h=t.x,c=t.y,r=0,p=1,u=0,y=Math.atan2(c-l,h-a),m=Math.sqrt((a-h)*(a-h)+(l-c)*(l-c)),d=-1*2,f=Math.PI*m/12;for(r;r<=m;r+=p)u=Math.sin(r/m*f)*d,n=e.x+Math.cos(y)*r+Math.cos(y-Math.PI/2)*u,i=e.y+Math.sin(y)*r+Math.sin(y-Math.PI/2)*u,r>0?o.lineTo(n,i):o.moveTo(n,i)}pointOnLine(e){const t=e.x,o=e.y;return new M(t,o)}calcLinePoints(){const{x1:e,x2:t,y1:o,y2:n,width:i,height:a}=this,l=e<=t?-1:1,h=o<=n?-1:1,c=l*i/2,r=h*a/2,p=l*-i/2,u=h*-a/2;return{x1:c,x2:p,y1:r,y2:u}}toObject(e=[]){return{...super.toObject(e)}}}T(x,"type","wavyLine");const W=k(({group:s,x1:e,y1:t,x2:o,y2:n,children:i,...a},l)=>{const[h,c]=j(a),r=S({Constructor:x,param:[e,t,o,n],attributes:c,group:s,listeners:h}),p=I(r);return w(l,()=>r,[r]),i?v(P,{children:L(i)?g(i,{...i.props,ref:p}):null}):null});var _=O(W);export{_ as default};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/components/WavyLine/index.tsx"],"sourcesContent":["/* eslint-disable prefer-const */\nimport type { Group as BaseGroup } from 'fabric'\nimport { Line as BaseLine, Point } from 'fabric'\nimport { cloneElement, forwardRef, isValidElement, memo, useImperativeHandle, type ReactNode } from 'react'\nimport { useCreateObject } from '../../hooks/useCreateObject'\nimport { useSplitProps } from '../../hooks/useSplitProps'\nimport type { AllObjectEvents } from '../../types/object'\nimport { useChildrenPosition } from '../../hooks/useChildrenPosition'\n\ninterface UniqueLineProps {\n x1: number\n x2: number\n y1: number\n y2: number\n}\n\nclass WavyLineClass extends BaseLine {\n static type = 'wavyLine'\n\n constructor(points: any, options = {}) {\n super(points, options)\n }\n\n _render(ctx: any) {\n /** 参考 Line 源码改造,可能不完整 https://github.com/fabricjs/fabric.js/blob/e114448a1bce9b68a3e1bba337bc0c83a35c1aa5/src/shapes/Line.ts#L29 */\n ctx.beginPath()\n\n const p = this.calcLinePoints()\n const point = this.pointOnLine(this.point(p.x2, p.y2))\n this.wavy(this.point(p.x1, p.y1), point, ctx)\n ctx.lineWidth = this.strokeWidth\n const origStrokeStyle = ctx.strokeStyle\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.stroke && this._renderStroke(ctx)\n ctx.strokeStyle = origStrokeStyle\n }\n\n point(x: any, y: any) {\n return {\n x: x,\n y: y,\n }\n }\n\n wavy(from: any, to: any, ctx: any) {\n const wavyWidth = 4 * 3\n let cx = 0,\n cy = 0,\n fx = from.x,\n fy = from.y,\n tx = to.x,\n ty = to.y,\n i = 0,\n step = 1,\n waveOffsetLength = 0,\n ang = Math.atan2(ty - fy, tx - fx),\n distance = Math.sqrt((fx - tx) * (fx - tx) + (fy - ty) * (fy - ty)),\n amplitude = -1 * 2,\n f = (Math.PI * distance) / wavyWidth\n for (i; i <= distance; i += step) {\n waveOffsetLength = Math.sin((i / distance) * f) * amplitude\n cx = from.x + Math.cos(ang) * i + Math.cos(ang - Math.PI / 2) * waveOffsetLength\n cy = from.y + Math.sin(ang) * i + Math.sin(ang - Math.PI / 2) * waveOffsetLength\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n i > 0 ? ctx.lineTo(cx, cy) : ctx.moveTo(cx, cy)\n }\n }\n\n pointOnLine(point1: any) {\n const x3 = point1.x,\n y3 = point1.y\n return new Point(x3, y3)\n }\n\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2\n\n return {\n x1,\n x2,\n y1,\n y2,\n }\n }\n\n toObject(propertiesToInclude = []) {\n const obj = super.toObject(propertiesToInclude)\n return { ...obj } as any\n }\n}\n\nexport type WavyLineProps<T = unknown> = Partial<ConstructorParameters<typeof BaseLine>[1] & AllObjectEvents> & {\n group?: BaseGroup\n path?: string\n children?: ReactNode\n} & T\n\nconst WavyLine = forwardRef<BaseLine | undefined, WavyLineProps>(\n ({ group, x1, y1, x2, y2, children, ...props }, ref) => {\n const [listeners, attributes] = useSplitProps(props)\n\n const instance = useCreateObject({\n Constructor: WavyLineClass,\n param: [x1, y1, x2, y2],\n attributes,\n group,\n listeners,\n })\n const childrenRef = useChildrenPosition<HTMLDivElement>(instance)\n\n useImperativeHandle(ref, () => instance, [instance])\n\n return children ? (\n <>\n {isValidElement(children)\n ? cloneElement(children, {\n ...(children.props as any),\n ref: childrenRef,\n } as any)\n : null}\n </>\n ) : null\n },\n)\n\nexport default memo(WavyLine)\n"],"names":["WavyLineClass","BaseLine","points","options","ctx","p","point","origStrokeStyle","x","y","from","to","cx","cy","fx","fy","tx","ty","i","step","waveOffsetLength","ang","distance","amplitude","f","point1","x3","y3","Point","_x1","_x2","_y1","_y2","width","height","xMult","yMult","x1","y1","x2","y2","propertiesToInclude","__publicField","WavyLine","forwardRef","group","children","props","ref","listeners","attributes","useSplitProps","instance","useCreateObject","childrenRef","useChildrenPosition","useImperativeHandle","jsx","Fragment","isValidElement","cloneElement","memo"],"mappings":"yiBAgBA,MAAMA,UAAsBC,CAAS,CAGnC,YAAYC,EAAaC,EAAU,CAAC,EAAG,CACrC,MAAMD,EAAQC,CAAO,CACvB,CAEA,QAAQC,EAAU,CAEhBA,EAAI,YAEJ,MAAMC,EAAI,KAAK,eACTC,EAAAA,EAAQ,KAAK,YAAY,KAAK,MAAMD,EAAE,GAAIA,EAAE,EAAE,CAAC,EACrD,KAAK,KAAK,KAAK,MAAMA,EAAE,GAAIA,EAAE,EAAE,EAAGC,EAAOF,CAAG,EAC5CA,EAAI,UAAY,KAAK,YACrB,MAAMG,EAAkBH,EAAI,YAC5BA,EAAI,YAAc,KAAK,QAAUA,EAAI,UAErC,KAAK,QAAU,KAAK,cAAcA,CAAG,EACrCA,EAAI,YAAcG,CACpB,CAEA,MAAMC,EAAQC,EAAQ,CACpB,MAAO,CACL,EAAGD,EACH,EAAGC,CACL,CACF,CAEA,KAAKC,EAAWC,EAASP,EAAU,CAEjC,IAAIQ,EAAK,EACPC,EAAK,EACLC,EAAKJ,EAAK,EACVK,EAAKL,EAAK,EACVM,EAAKL,EAAG,EACRM,EAAKN,EAAG,EACRO,EAAI,EACJC,EAAO,EACPC,EAAmB,EACnBC,EAAM,KAAK,MAAMJ,EAAKF,EAAIC,EAAKF,CAAE,EACjCQ,EAAW,KAAK,MAAMR,EAAKE,IAAOF,EAAKE,IAAOD,EAAKE,IAAOF,EAAKE,EAAG,EAClEM,EAAY,GAAK,EACjBC,EAAK,KAAK,GAAKF,EAAY,GAC7B,IAAKJ,EAAGA,GAAKI,EAAUJ,GAAKC,EAC1BC,EAAmB,KAAK,IAAKF,EAAII,EAAYE,CAAC,EAAID,EAClDX,EAAKF,EAAK,EAAI,KAAK,IAAIW,CAAG,EAAIH,EAAI,KAAK,IAAIG,EAAM,KAAK,GAAK,CAAC,EAAID,EAChEP,EAAKH,EAAK,EAAI,KAAK,IAAIW,CAAG,EAAIH,EAAI,KAAK,IAAIG,EAAM,KAAK,GAAK,CAAC,EAAID,EAGhEF,EAAI,EAAId,EAAI,OAAOQ,EAAIC,CAAE,EAAIT,EAAI,OAAOQ,EAAIC,CAAE,CAElD,CAEA,YAAYY,EAAa,CACvB,MAAMC,EAAKD,EAAO,EAChBE,EAAKF,EAAO,EACd,OAAO,IAAIG,EAAMF,EAAIC,CAAE,CACzB,CAEA,gBAAkC,CAChC,KAAM,CAAE,GAAIE,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,MAAAC,EAAO,OAAAC,CAAO,EAAI,KACxDC,EAAQN,GAAOC,EAAM,GAAK,EAC9BM,EAAQL,GAAOC,EAAM,GAAK,EAC1BK,EAAMF,EAAQF,EAAS,EACvBK,EAAMF,EAAQF,EAAU,EACxBK,EAAMJ,EAAQ,CAACF,EAAS,EACxBO,EAAMJ,EAAQ,CAACF,EAAU,EAE3B,MAAO,CACL,GAAAG,EACA,GAAAE,EACA,GAAAD,EACA,GAAAE,CACF,CACF,CAEA,SAASC,EAAsB,CAAA,EAAI,CAEjC,MAAO,CAAE,GADG,MAAM,SAASA,CAAmB,CAC9B,CAClB,CACF,CAhFEC,EADI1C,EACG,OAAO,UAwFhB,EAAA,MAAM2C,EAAWC,EACf,CAAC,CAAE,MAAAC,EAAO,GAAAR,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,SAAAM,EAAU,GAAGC,CAAM,EAAGC,IAAQ,CACtD,KAAM,CAACC,EAAWC,CAAU,EAAIC,EAAcJ,CAAK,EAE7CK,EAAWC,EAAgB,CAC/B,YAAarD,EACb,MAAO,CAACqC,EAAIC,EAAIC,EAAIC,CAAE,EACtB,WAAAU,EACA,MAAAL,EACA,UAAAI,CACF,CAAC,EACKK,EAAcC,EAAoCH,CAAQ,EAEhE,OAAAI,EAAoBR,EAAK,IAAMI,EAAU,CAACA,CAAQ,CAAC,EAE5CN,EACLW,EAAAC,EAAA,CACG,SAAAC,EAAeb,CAAQ,EACpBc,EAAad,EAAU,CACrB,GAAIA,EAAS,MACb,IAAKQ,CACP,CAAQ,EACR,IACN,CAAA,EACE,IACN,CACF,EAEA,MAAeO,EAAKlB,CAAQ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as x}from"react/jsx-runtime";import{forwardRef as v,memo as D}from"react";import{Wrapper as
|
|
1
|
+
"use client";import{jsx as e,jsxs as x}from"react/jsx-runtime";import{forwardRef as v,memo as D}from"react";import{Wrapper as Z}from"./Wrapper.mjs";import y from"../../components/Canvas/index.mjs";import{StoreUpdater as z}from"../../components/StoreUpdater/index.mjs";import N from"../../components/Loading/index.mjs";const S={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0},U=v(({minManualZoom:a,maxManualZoom:t,className:l,children:r,width:i,height:n,selection:m,style:s,onMouseWheel:d,onMouseDown:u,onMouseMove:f,onMouseUp:c,zoomable:h,defaultSelection:p,defaultCentered:M,defaultDraggable:g,...w},b)=>e("div",{style:{...S,...s},ref:b,className:`react-fabric ${l||""}`,children:x(Z,{width:i,height:n,children:[e(z,{minManualZoom:a,maxManualZoom:t,zoomable:h,defaultCentered:M,selection:m,defaultSelection:p,defaultDraggable:g}),e(y,{onMouseDown:u,onMouseMove:f,onMouseUp:c,onMouseWheel:d,...w,children:r}),e(N,{})]})})),o=D(U);o.displayName="ReactFabric";export{o as default};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/container/ReactFabric/index.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\nimport { forwardRef, memo } from 'react'\n\n// 自定义基础事件类型\ntype FabricEvent = {\n e: Event\n pointer: { x: number; y: number }\n target?: unknown\n subTargets?: unknown[]\n button?: number\n isClick?: boolean\n transform?: unknown\n}\n\n// 重新定义 CanvasProps,不再从 components/Canvas 导入\ntype BaseCanvasProps = {\n width?: number\n height?: number\n selection?: boolean\n children?: React.ReactNode\n // 添加其他必要的 Canvas 属性\n}\n\
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/container/ReactFabric/index.tsx"],"sourcesContent":["import type { CSSProperties } from 'react'\nimport { forwardRef, memo } from 'react'\nimport { Wrapper } from './Wrapper'\nimport Canvas from '../../components/Canvas'\nimport { StoreUpdater } from '../../components/StoreUpdater'\nimport Loading from '../../components/Loading'\n\n// 自定义基础事件类型\ntype FabricEvent = {\n e: Event\n pointer: { x: number; y: number }\n target?: unknown\n subTargets?: unknown[]\n button?: number\n isClick?: boolean\n transform?: unknown\n}\n\n// 重新定义 CanvasProps,不再从 components/Canvas 导入\ntype BaseCanvasProps = {\n width?: number\n height?: number\n selection?: boolean\n children?: React.ReactNode\n // 添加其他必要的 Canvas 属性\n}\n\nconst wrapperStyle: CSSProperties = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n zIndex: 0,\n}\n\nexport type ReactFabricProps = BaseCanvasProps & {\n style?: CSSProperties\n className?: string\n zoomable?: boolean\n minManualZoom?: number\n maxManualZoom?: number\n /** 背景图是否默认居中显示\n * @default false\n */\n defaultCentered?: boolean\n /** 是否启用选择功能\n * @default true\n * */\n defaultSelection?: boolean\n /**\n * 是否默认可拖拽\n */\n defaultDraggable?: boolean\n onMouseDown?: (e: FabricEvent) => void\n onMouseMove?: (e: FabricEvent) => void\n onMouseUp?: (e: FabricEvent) => void\n onMouseWheel?: (e: FabricEvent) => void\n}\n\nconst ForwardReactFabric = forwardRef<HTMLDivElement, ReactFabricProps>(\n (\n {\n minManualZoom,\n maxManualZoom,\n className,\n children,\n width,\n height,\n selection,\n style,\n onMouseWheel,\n onMouseDown,\n onMouseMove,\n onMouseUp,\n zoomable,\n defaultSelection,\n defaultCentered,\n defaultDraggable,\n ...rest\n },\n ref,\n ) => {\n return (\n <div style={{ ...wrapperStyle, ...style }} ref={ref} className={`react-fabric ${className || ''}`}>\n <Wrapper width={width} height={height}>\n <StoreUpdater\n minManualZoom={minManualZoom}\n maxManualZoom={maxManualZoom}\n zoomable={zoomable}\n defaultCentered={defaultCentered}\n selection={selection}\n defaultSelection={defaultSelection}\n defaultDraggable={defaultDraggable}\n />\n\n <Canvas\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseWheel={onMouseWheel}\n {...rest}\n >\n {children}\n </Canvas>\n <Loading />\n </Wrapper>\n </div>\n )\n },\n)\n\ntype ReactFabricComponent = React.MemoExoticComponent<typeof ForwardReactFabric>\n\nconst ReactFabric: ReactFabricComponent = memo(ForwardReactFabric)\nReactFabric.displayName = 'ReactFabric'\n\nexport default ReactFabric\n"],"names":["wrapperStyle","ForwardReactFabric","forwardRef","minManualZoom","maxManualZoom","className","children","width","height","selection","style","onMouseWheel","onMouseDown","onMouseMove","onMouseUp","zoomable","defaultSelection","defaultCentered","defaultDraggable","rest","ref","jsx","jsxs","Wrapper","StoreUpdater","Canvas","Loading","ReactFabric","memo"],"mappings":"8TA2BMA,MAAAA,EAA8B,CAClC,MAAO,OACP,OAAQ,OACR,SAAU,SACV,SAAU,WACV,OAAQ,CACV,EA0BMC,EAAqBC,EACzB,CACE,CACE,cAAAC,EACA,cAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,UAAAC,EACA,MAAAC,EACA,aAAAC,EACA,YAAAC,EACA,YAAAC,EACA,UAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,GAAGC,CACL,EACAC,IAGEC,EAAC,MAAI,CAAA,MAAO,CAAE,GAAGrB,EAAc,GAAGU,CAAM,EAAG,IAAKU,EAAK,UAAW,gBAAgBf,GAAa,EAAE,GAC7F,SAAAiB,EAACC,EAAA,CAAQ,MAAOhB,EAAO,OAAQC,EAC7B,SAAAa,CAAAA,EAACG,EAAA,CACC,cAAerB,EACf,cAAeC,EACf,SAAUW,EACV,gBAAiBE,EACjB,UAAWR,EACX,iBAAkBO,EAClB,iBAAkBE,CAAAA,CACpB,EAEAG,EAACI,EAAA,CACC,YAAab,EACb,YAAaC,EACb,UAAWC,EACX,aAAcH,EACb,GAAGQ,EAEH,SAAAb,EACH,EACAe,EAACK,EAAA,CAAQ,CAAA,GACX,CACF,CAAA,CAGN,EAIMC,EAAoCC,EAAK3B,CAAkB,EACjE0B,EAAY,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{useRef as f,useEffect as p}from"react";import{util as a}from"fabric";import{useStoreApi as c}from"./useStore.mjs";function l(r){const n=f(null),i=c();return p(()=>{if(!r)return;const{canvas:e}=i.getState(),o=()=>{if(!n.current||!e)return;const t=r.getCoords().map(u=>a.sendPointToPlane(u,e.viewportTransform,void 0)),s={position:"absolute",left:`${t[0].x}px`,top:`${t[0].y}px`,width:`${t[2].x-t[0].x}px`,height:`${t[2].y-t[0].y}px`};Object.assign(n.current.style,s)};return e?.on("after:render",o),o(),()=>{e?.off("after:render",o)}},[r,i]),n}export{l as useChildrenPosition};
|
|
2
|
+
//# sourceMappingURL=useChildrenPosition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChildrenPosition.mjs","sources":["../../../src/hooks/useChildrenPosition.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { util } from 'fabric'\nimport type { FabricObject } from 'fabric'\nimport { useStoreApi } from './useStore'\n\n/**\n * 用于同步子元素位置与 Fabric.js 对象位置的 Hook\n * @param instance Fabric.js 对象实例\n * @returns childrenRef - 需要绑定到子元素的 ref\n */\nexport function useChildrenPosition<T extends HTMLElement = HTMLDivElement>(instance: FabricObject | undefined) {\n const childrenRef = useRef<T>(null)\n const store = useStoreApi()\n\n useEffect(() => {\n if (!instance) return\n\n const { canvas } = store.getState()\n\n const updatePosition = () => {\n if (!childrenRef.current || !canvas) return\n\n const sceneCoords = instance.getCoords()\n const viewportCoords = sceneCoords.map(point => util.sendPointToPlane(point, canvas.viewportTransform, undefined))\n\n const style = {\n position: 'absolute' as const,\n left: `${viewportCoords[0].x}px`,\n top: `${viewportCoords[0].y}px`,\n width: `${viewportCoords[2].x - viewportCoords[0].x}px`,\n height: `${viewportCoords[2].y - viewportCoords[0].y}px`,\n }\n\n Object.assign(childrenRef.current.style, style)\n }\n\n canvas?.on('after:render', updatePosition)\n\n // 初始化位置\n updatePosition()\n\n return () => {\n canvas?.off('after:render', updatePosition)\n }\n }, [instance, store])\n\n return childrenRef\n}\n"],"names":["useChildrenPosition","instance","childrenRef","useRef","store","useStoreApi","useEffect","canvas","updatePosition","viewportCoords","point","util","style"],"mappings":"sIAUgB,SAAAA,EAA4DC,EAAoC,CAC9G,MAAMC,EAAcC,EAAU,IAAI,EAC5BC,EAAQC,EAAAA,EAEd,OAAAC,EAAU,IAAM,CACd,GAAI,CAACL,EAAU,OAEf,KAAM,CAAE,OAAAM,CAAO,EAAIH,EAAM,SAAS,EAE5BI,EAAiB,IAAM,CAC3B,GAAI,CAACN,EAAY,SAAW,CAACK,EAAQ,OAGrC,MAAME,EADcR,EAAS,UAAU,EACJ,IAAIS,GAASC,EAAK,iBAAiBD,EAAOH,EAAO,kBAAmB,MAAS,CAAC,EAE3GK,EAAQ,CACZ,SAAU,WACV,KAAM,GAAGH,EAAe,CAAC,EAAE,CAAC,KAC5B,IAAK,GAAGA,EAAe,CAAC,EAAE,CAAC,KAC3B,MAAO,GAAGA,EAAe,CAAC,EAAE,EAAIA,EAAe,CAAC,EAAE,CAAC,KACnD,OAAQ,GAAGA,EAAe,CAAC,EAAE,EAAIA,EAAe,CAAC,EAAE,CAAC,IACtD,EAEA,OAAO,OAAOP,EAAY,QAAQ,MAAOU,CAAK,CAChD,EAEA,OAAAL,GAAQ,GAAG,eAAgBC,CAAc,EAGzCA,IAEO,IAAM,CACXD,GAAQ,IAAI,eAAgBC,CAAc,CAC5C,CACF,EAAG,CAACP,EAAUG,CAAK,CAAC,EAEbF,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreateObject.mjs","sources":["../../../src/hooks/useCreateObject.ts"],"sourcesContent":["import type { FabricObject, Group } from 'fabric'\nimport { useEffect, useMemo, useRef } from 'react'\nimport type { AllObjectEvents } from '../types/object'\nimport { bindEvents } from '../utils/events'\nimport { transformDefaultProps } from '../utils/props'\nimport { useDidUpdate } from './useDidUpdate'\nimport { useStore, useStoreApi } from './useStore'\n\ntype SingleParamConstructor<T> = new (attributes: any) => T\ntype DualParamConstructor<T, P> = new (param: P, attributes: any) => T\n\ntype CreateObjectProps<T extends FabricObject, P = any> = {\n Constructor: SingleParamConstructor<T> | DualParamConstructor<T, P>\n attributes: any\n defaultValues?: any\n param?: P\n group?: Group\n listeners?: Partial<AllObjectEvents>\n}\n\nexport function useCreateObject<T extends FabricObject, P = any>({\n Constructor,\n attributes,\n defaultValues = {},\n param,\n group,\n listeners = {},\n}: CreateObjectProps<T, P>) {\n const store = useStoreApi()\n const canvas = useStore(
|
|
1
|
+
{"version":3,"file":"useCreateObject.mjs","sources":["../../../src/hooks/useCreateObject.ts"],"sourcesContent":["import type { FabricObject, Group } from 'fabric'\nimport { useEffect, useMemo, useRef } from 'react'\nimport type { AllObjectEvents } from '../types/object'\nimport { bindEvents } from '../utils/events'\nimport { transformDefaultProps } from '../utils/props'\nimport { useDidUpdate } from './useDidUpdate'\nimport { useStore, useStoreApi } from './useStore'\n\ntype SingleParamConstructor<T> = new (attributes: any) => T\ntype DualParamConstructor<T, P> = new (param: P, attributes: any) => T\n\ntype CreateObjectProps<T extends FabricObject, P = any> = {\n Constructor: SingleParamConstructor<T> | DualParamConstructor<T, P>\n attributes: any\n defaultValues?: any\n param?: P\n group?: Group\n listeners?: Partial<AllObjectEvents>\n}\n\nexport function useCreateObject<T extends FabricObject, P = any>({\n Constructor,\n attributes,\n defaultValues = {},\n param,\n group,\n listeners = {},\n}: CreateObjectProps<T, P>) {\n const store = useStoreApi()\n const canvas = useStore(state => state.canvas)\n\n\n // 使用 ref 记录控制模式\n const modeRef = useRef<'controlled' | 'uncontrolled' | null>(null)\n\n // 在创建实例时确定控制模式\n const instance = useMemo(() => {\n const hasUncontrolledProps = Object.keys(defaultValues).length > 0\n modeRef.current = hasUncontrolledProps ? 'uncontrolled' : 'controlled'\n\n const mergedAttributes = {\n ...attributes,\n ...transformDefaultProps(defaultValues),\n }\n\n const newInstance =\n param !== undefined\n ? new (Constructor as DualParamConstructor<T, P>)(param, mergedAttributes)\n : new (Constructor as SingleParamConstructor<T>)(mergedAttributes)\n return newInstance\n }, [Constructor, param])\n\n // 计算父容器(group 或 canvas)\n const parent = useMemo(() => group ?? canvas, [group, canvas])\n\n // 处理实例的添加和移除\n useEffect(() => {\n if (!instance || !parent) return\n // 添加到父容器\n parent.add(instance)\n\n return () => {\n try {\n if (instance) {\n // 移除所有事件监听\n instance.off()\n\n // 从父容器中移除\n if (parent.contains(instance)) {\n parent.remove(instance)\n }\n\n // 如果存在 dispose 方法则调用\n if (typeof instance.dispose === 'function') {\n instance.dispose()\n }\n }\n } catch (error) {\n console.warn('清理对象时发生错误:', error)\n }\n }\n }, [instance, parent])\n\n // 处理事件绑定\n useEffect(() => {\n if (!instance) return\n return bindEvents(instance, listeners)\n }, [instance, listeners])\n\n // 处理属性更新\n useDidUpdate(() => {\n if (!instance) return\n const { canvas } = store.getState()\n\n // 在非受控模式下,跳过位置相关属性的更新\n if (modeRef.current === 'uncontrolled') {\n const styleUpdates = Object.entries(attributes).reduce(\n (acc, [key, value]) => {\n if (!key.match(/^(left|top|width|height|scaleX|scaleY|angle|points|path|originX|originY)$/)) {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, any>,\n )\n\n if (Object.keys(styleUpdates).length > 0) {\n instance.set(styleUpdates)\n canvas?.requestRenderAll()\n }\n } else {\n // 受控模式:正常更新所有属性\n instance.set(attributes)\n instance.setCoords()\n canvas?.requestRenderAll()\n }\n }, [instance, attributes, store])\n\n return instance\n}\n"],"names":["useCreateObject","Constructor","attributes","defaultValues","param","group","listeners","store","useStoreApi","canvas","useStore","state","modeRef","useRef","instance","useMemo","hasUncontrolledProps","mergedAttributes","transformDefaultProps","parent","useEffect","error","bindEvents","useDidUpdate","styleUpdates","acc","key","value"],"mappings":"iSAoBO,SAASA,EAAiD,CAC/D,YAAAC,EACA,WAAAC,EACA,cAAAC,EAAgB,GAChB,MAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,CAAA,CACd,EAA4B,CAC1B,MAAMC,EAAQC,EACRC,EAAAA,EAASC,EAASC,GAASA,EAAM,MAAM,EAIvCC,EAAUC,EAA6C,IAAI,EAG3DC,EAAWC,EAAQ,IAAM,CAC7B,MAAMC,EAAuB,OAAO,KAAKb,CAAa,EAAE,OAAS,EACjES,EAAQ,QAAUI,EAAuB,eAAiB,aAE1D,MAAMC,EAAmB,CACvB,GAAGf,EACH,GAAGgB,EAAsBf,CAAa,CACxC,EAMA,OAHEC,IAAU,OACN,IAAKH,EAA2CG,EAAOa,CAAgB,EACvE,IAAKhB,EAA0CgB,CAAgB,CAEvE,EAAG,CAAChB,EAAaG,CAAK,CAAC,EAGjBe,EAASJ,EAAQ,IAAMV,GAASI,EAAQ,CAACJ,EAAOI,CAAM,CAAC,EAG7D,OAAAW,EAAU,IAAM,CACd,GAAI,EAAA,CAACN,GAAY,CAACK,GAElB,OAAAA,EAAO,IAAIL,CAAQ,EAEZ,IAAM,CACX,GAAI,CACEA,IAEFA,EAAS,IAGLK,EAAAA,EAAO,SAASL,CAAQ,GAC1BK,EAAO,OAAOL,CAAQ,EAIpB,OAAOA,EAAS,SAAY,YAC9BA,EAAS,QAAQ,EAGvB,OAASO,EAAO,CACd,QAAQ,KAAK,0DAAcA,CAAK,CAClC,CACF,CACF,EAAG,CAACP,EAAUK,CAAM,CAAC,EAGrBC,EAAU,IAAM,CACd,GAAKN,EACL,OAAOQ,EAAWR,EAAUR,CAAS,CACvC,EAAG,CAACQ,EAAUR,CAAS,CAAC,EAGxBiB,EAAa,IAAM,CACjB,GAAI,CAACT,EAAU,OACf,KAAM,CAAE,OAAAL,CAAO,EAAIF,EAAM,SAGzB,EAAA,GAAIK,EAAQ,UAAY,eAAgB,CACtC,MAAMY,EAAe,OAAO,QAAQtB,CAAU,EAAE,OAC9C,CAACuB,EAAK,CAACC,EAAKC,CAAK,KACVD,EAAI,MAAM,2EAA2E,IACxFD,EAAIC,CAAG,EAAIC,GAENF,GAET,EACF,EAEI,OAAO,KAAKD,CAAY,EAAE,OAAS,IACrCV,EAAS,IAAIU,CAAY,EACzBf,GAAQ,mBAEZ,MAEEK,EAAS,IAAIZ,CAAU,EACvBY,EAAS,UAAA,EACTL,GAAQ,iBAEZ,CAAA,EAAG,CAACK,EAAUZ,EAAYK,CAAK,CAAC,EAEzBO,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{throttle as r}from"
|
|
1
|
+
"use client";import{throttle as r}from"es-toolkit";import{useCallback as c,useEffect as d}from"react";import{useStore as a}from"./useStore.mjs";const m=()=>{const{domNode:t,canvas:s,setDimensions:i}=a(e=>({domNode:e.domNode,canvas:e.canvas,setDimensions:e.setDimensions})),o=c(()=>{if(!t||!s)return;const{width:e,height:n}=t.getBoundingClientRect();i({width:e,height:n})},[t,s,i]);d(()=>{if(!t||!s)return;o();const e=r(o,200);window.addEventListener("resize",e);const n=new ResizeObserver(e);return n.observe(t),()=>{window.removeEventListener("resize",e),n.disconnect(),e.cancel()}},[o,t,s])};export{m as default};
|
|
2
2
|
//# sourceMappingURL=useResizeHandler.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeHandler.mjs","sources":["../../../src/hooks/useResizeHandler.ts"],"sourcesContent":["import { throttle } from '
|
|
1
|
+
{"version":3,"file":"useResizeHandler.mjs","sources":["../../../src/hooks/useResizeHandler.ts"],"sourcesContent":["import { throttle } from 'es-toolkit'\nimport { useCallback, useEffect } from 'react'\nimport { useStore } from './useStore'\n\nconst useResizeHandler = () => {\n const { domNode, canvas, setDimensions } = useStore(state => ({\n domNode: state.domNode,\n canvas: state.canvas,\n setDimensions: state.setDimensions,\n }))\n\n const updateDimensions = useCallback(() => {\n if (!domNode || !canvas) return\n\n // 获取父容器的尺寸\n const { width, height } = domNode.getBoundingClientRect()\n\n // 使用 store 中的 setDimensions 方法\n setDimensions({ width, height })\n\n // canvas.requestRenderAll()\n }, [domNode, canvas, setDimensions])\n\n useEffect(() => {\n if (!domNode || !canvas) return\n\n // 初始化时立即计算一次\n updateDimensions()\n const throttledUpdate = throttle(updateDimensions, 200)\n\n window.addEventListener('resize', throttledUpdate)\n const resizeObserver = new ResizeObserver(throttledUpdate)\n resizeObserver.observe(domNode)\n\n return () => {\n window.removeEventListener('resize', throttledUpdate)\n resizeObserver.disconnect()\n throttledUpdate.cancel()\n }\n }, [updateDimensions, domNode, canvas])\n}\n\nexport default useResizeHandler\n"],"names":["useResizeHandler","domNode","canvas","setDimensions","useStore","state","updateDimensions","useCallback","width","height","useEffect","throttledUpdate","throttle","resizeObserver"],"mappings":"gJAIA,MAAMA,EAAmB,IAAM,CAC7B,KAAM,CAAE,QAAAC,EAAS,OAAAC,EAAQ,cAAAC,CAAc,EAAIC,EAASC,IAAU,CAC5D,QAASA,EAAM,QACf,OAAQA,EAAM,OACd,cAAeA,EAAM,aACvB,EAAE,EAEIC,EAAmBC,EAAY,IAAM,CACzC,GAAI,CAACN,GAAW,CAACC,EAAQ,OAGzB,KAAM,CAAE,MAAAM,EAAO,OAAAC,CAAO,EAAIR,EAAQ,sBAAsB,EAGxDE,EAAc,CAAE,MAAAK,EAAO,OAAAC,CAAO,CAAC,CAGjC,EAAG,CAACR,EAASC,EAAQC,CAAa,CAAC,EAEnCO,EAAU,IAAM,CACd,GAAI,CAACT,GAAW,CAACC,EAAQ,OAGzBI,EAAAA,EACA,MAAMK,EAAkBC,EAASN,EAAkB,GAAG,EAEtD,OAAO,iBAAiB,SAAUK,CAAe,EACjD,MAAME,EAAiB,IAAI,eAAeF,CAAe,EACzD,OAAAE,EAAe,QAAQZ,CAAO,EAEvB,IAAM,CACX,OAAO,oBAAoB,SAAUU,CAAe,EACpDE,EAAe,aACfF,EAAgB,OAAO,CACzB,CACF,EAAG,CAACL,EAAkBL,EAASC,CAAM,CAAC,CACxC"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{default as
|
|
1
|
+
"use client";import{default as r}from"./container/ReactFabric/index.mjs";import{useReactFabric as a}from"./hooks/useReactFabric.mjs";import{useZoom as l}from"./hooks/useZoom.mjs";import{default as s}from"./components/BackgroundImage/index.mjs";import{default as m}from"./components/Canvas/index.mjs";import{default as d}from"./components/Group/index.mjs";import{default as c}from"./components/NodeToolbarPortal/index.mjs";import{ReactFabricProvider as P}from"./components/ReactFabricProvider.mjs";import{default as g}from"./components/Rect/index.mjs";import{default as F}from"./components/Control/index.mjs";import{default as v}from"./components/Text/index.mjs";import{default as h}from"./components/Path/index.mjs";import{default as C}from"./components/Line/index.mjs";import{default as I}from"./components/Ellipse/index.mjs";import{default as y}from"./components/IText/index.mjs";import{default as E}from"./components/Textbox/index.mjs";import{default as N}from"./components/WavyLine/index.mjs";import{default as W}from"./components/Objects/index.mjs";import{default as q}from"./plugins/FreeRect.mjs";import{default as z}from"./plugins/GridLine.mjs";import{default as D}from"./plugins/Pinch.mjs";import{default as J}from"./plugins/Mask.mjs";export{s as BackgroundImage,m as Canvas,F as Control,I as Ellipse,d as Group,y as IText,C as Line,c as NodeToolbarPortal,W as Objects,h as Path,q as PluginFreeRect,z as PluginGridLine,J as PluginMask,D as PluginPinch,r as ReactFabric,P as ReactFabricProvider,g as Rect,v as Text,E as Textbox,N as WavyLine,a as useReactFabric,l as useZoom};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{jsx as h,Fragment as m}from"react/jsx-runtime";import{Rect as f}from"fabric";import{useRef as p,useEffect as a}from"react";import{useStoreApi as b}from"../hooks/useStore.mjs";const k=i=>{const{defaultFill:d=!1,fullness:c=!1}=i,l=b(),{canvas:e}=l.getState(),t=p(null),u=()=>new f({left:0,top:0,fill:"rgba(0,0,0,0.2)",selectable:!1,evented:!1,excludeFromExport:!0,isMask:!0}),o=()=>{e?.backgroundImage&&(t.current?(t.current.set({clipPath:null}),e.requestRenderAll()):(t.current=u(),t.current.set({width:e.backgroundImage?.width,height:e.backgroundImage?.height}),e.add(t.current),e.moveObjectTo(t.current,-999)))};return a(()=>{c&&o()},[c]),a(()=>{if(!e)return;d&&o();const n=s=>{const{selected:g}=s,r=g[0];!e||!r||r.get("showMark")&&(r.inverted=!0,r.absolutePositioned=!0,t.current?(t.current.set({width:e.backgroundImage?.width||t.current.width,height:e.backgroundImage?.height||t.current.height,clipPath:r}),e.requestRenderAll()):(t.current=u(),setTimeout(()=>{t.current&&(t.current.set({width:e.backgroundImage?.width,height:e.backgroundImage?.height,clipPath:r}),e.add(t.current),e.moveObjectTo(t.current,-999))},100)))};return e.on("selection:created",n),e.on("selection:updated",n),()=>{t.current&&(e.remove(t.current),t.current=null),e.off("selection:created",n),e.off("selection:updated",n),e.requestRenderAll()}},[e]),h(m,{})};export{k as default};
|
|
2
|
+
//# sourceMappingURL=Mask.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mask.mjs","sources":["../../../src/plugins/Mask.tsx"],"sourcesContent":["import { Rect } from 'fabric'\nimport { useEffect, useRef } from 'react'\nimport { useStoreApi } from '../hooks/useStore'\n\nexport type PluginMaskProps = {\n defaultFill?: boolean // 是否默认没有选择对象时,蒙层遮住整个图片\n fullness?: boolean // 是否完全遮住\n}\n\n/** 聚焦对象时蒙层;边界是背景图片 */\nconst PluginMask = (props: PluginMaskProps) => {\n const { defaultFill = false, fullness = false } = props\n const store = useStoreApi()\n const { canvas } = store.getState()\n const maskRectRef = useRef<Rect | null>(null)\n\n const initMaskRect = () => {\n return new Rect({\n left: 0,\n top: 0,\n fill: 'rgba(0,0,0,0.2)' /** 半透明灰色 */,\n selectable: false,\n evented: false,\n excludeFromExport: true /** toJSON 不存在,getObjects 存在 */,\n isMask: true,\n })\n }\n\n const renderDefaultMask = () => {\n if (!canvas?.backgroundImage) return\n\n if (maskRectRef.current) {\n maskRectRef.current.set({\n clipPath: null,\n })\n canvas.requestRenderAll()\n } else {\n maskRectRef.current = initMaskRect()\n maskRectRef.current.set({\n width: canvas.backgroundImage?.width,\n height: canvas.backgroundImage?.height,\n })\n canvas.add(maskRectRef.current)\n canvas.moveObjectTo(maskRectRef.current, -999)\n }\n }\n\n useEffect(() => {\n if (fullness) renderDefaultMask()\n }, [fullness])\n\n useEffect(() => {\n if (!canvas) return\n if (defaultFill) renderDefaultMask()\n\n const renderMask = (e: any) => {\n const { selected } = e\n const target = selected[0]\n if (!canvas || !target) return\n if (!target.get('showMark')) return\n\n /** 必须加上以下参数,才能裁切成功 */\n target.inverted = true\n target.absolutePositioned = true\n /** 从未触发过时,初始化蒙层 */\n if (!maskRectRef.current) {\n maskRectRef.current = initMaskRect()\n setTimeout(() => {\n if (!maskRectRef.current) return\n maskRectRef.current.set({\n width: canvas.backgroundImage?.width,\n height: canvas.backgroundImage?.height,\n clipPath: target,\n })\n canvas.add(maskRectRef.current)\n canvas.moveObjectTo(maskRectRef.current, -999)\n }, 100)\n } else {\n maskRectRef.current.set({\n width: canvas.backgroundImage?.width || maskRectRef.current.width,\n height: canvas.backgroundImage?.height || maskRectRef.current.height,\n clipPath: target,\n })\n canvas.requestRenderAll()\n }\n }\n\n /** 第一次是点击触发 created,切换另一个框是触发 updated */\n canvas.on('selection:created', renderMask)\n canvas.on('selection:updated', renderMask)\n\n return () => {\n if (maskRectRef.current) {\n canvas.remove(maskRectRef.current)\n maskRectRef.current = null\n }\n canvas.off('selection:created', renderMask)\n canvas.off('selection:updated', renderMask)\n canvas.requestRenderAll()\n }\n }, [canvas])\n\n return <></>\n}\n\nexport default PluginMask\n"],"names":["PluginMask","props","defaultFill","fullness","store","useStoreApi","canvas","maskRectRef","useRef","initMaskRect","Rect","renderDefaultMask","useEffect","renderMask","e","selected","target","jsx","Fragment"],"mappings":"mMAUA,MAAMA,EAAcC,GAA2B,CAC3C,KAAM,CAAE,YAAAC,EAAc,GAAO,SAAAC,EAAW,EAAM,EAAIF,EAC5CG,EAAQC,EAAY,EACpB,CAAE,OAAAC,CAAO,EAAIF,EAAM,SACnBG,EAAAA,EAAcC,EAAoB,IAAI,EAEtCC,EAAe,IACV,IAAIC,EAAK,CACZ,KAAM,EACN,IAAK,EACL,KAAM,kBACN,WAAY,GACZ,QAAS,GACT,kBAAmB,GACnB,OAAQ,EACZ,CAAC,EAGCC,EAAoB,IAAM,CACvBL,GAAQ,kBAETC,EAAY,SACZA,EAAY,QAAQ,IAAI,CACpB,SAAU,IACd,CAAC,EACDD,EAAO,iBAAiB,IAExBC,EAAY,QAAUE,EAAa,EACnCF,EAAY,QAAQ,IAAI,CACpB,MAAOD,EAAO,iBAAiB,MAC/B,OAAQA,EAAO,iBAAiB,MACpC,CAAC,EACDA,EAAO,IAAIC,EAAY,OAAO,EAC9BD,EAAO,aAAaC,EAAY,QAAS,IAAI,GAErD,EAEA,OAAAK,EAAU,IAAM,CACRT,GAAUQ,EAAAA,CAClB,EAAG,CAACR,CAAQ,CAAC,EAEbS,EAAU,IAAM,CACZ,GAAI,CAACN,EAAQ,OACTJ,GAAaS,IAEjB,MAAME,EAAcC,GAAW,CAC3B,KAAM,CAAE,SAAAC,CAAS,EAAID,EACfE,EAASD,EAAS,CAAC,EACrB,CAACT,GAAU,CAACU,GACXA,EAAO,IAAI,UAAU,IAG1BA,EAAO,SAAW,GAClBA,EAAO,mBAAqB,GAEvBT,EAAY,SAabA,EAAY,QAAQ,IAAI,CACpB,MAAOD,EAAO,iBAAiB,OAASC,EAAY,QAAQ,MAC5D,OAAQD,EAAO,iBAAiB,QAAUC,EAAY,QAAQ,OAC9D,SAAUS,CACd,CAAC,EACDV,EAAO,iBAAiB,IAjBxBC,EAAY,QAAUE,EAAa,EACnC,WAAW,IAAM,CACRF,EAAY,UACjBA,EAAY,QAAQ,IAAI,CACpB,MAAOD,EAAO,iBAAiB,MAC/B,OAAQA,EAAO,iBAAiB,OAChC,SAAUU,CACd,CAAC,EACDV,EAAO,IAAIC,EAAY,OAAO,EAC9BD,EAAO,aAAaC,EAAY,QAAS,IAAI,EACjD,EAAG,GAAG,GASd,EAGA,OAAAD,EAAO,GAAG,oBAAqBO,CAAU,EACzCP,EAAO,GAAG,oBAAqBO,CAAU,EAElC,IAAM,CACLN,EAAY,UACZD,EAAO,OAAOC,EAAY,OAAO,EACjCA,EAAY,QAAU,MAE1BD,EAAO,IAAI,oBAAqBO,CAAU,EAC1CP,EAAO,IAAI,oBAAqBO,CAAU,EAC1CP,EAAO,iBAAA,CACX,CACJ,EAAG,CAACA,CAAM,CAAC,EAEJW,EAAAC,EAAA,CAAA,CAAE,CACb"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{useRef as
|
|
1
|
+
"use client";import{useRef as p,useEffect as d}from"react";import{useStoreApi as g}from"../hooks/useStore.mjs";import{Point as v}from"fabric";const S=()=>{const a=g(),{canvas:s}=a.getState(),c=p(1);return d(()=>{let t=null;const i=e=>{const{canvas:n,manualZoom:r,fitZoom:f,minManualZoom:m,maxManualZoom:u}=a.getState();let o=e.scale*r;o<=m&&(o=m),o>=u&&(o=u);const h=o*f;n?.zoomToPoint(new v(e.srcEvent.offsetX,e.srcEvent.offsetY),h),c.current=o},l=()=>{const{fitZoom:e}=a.getState(),n=c.current*e;a.setState({manualZoom:c.current,zoom:n})};return(async()=>{try{if(!s)return;const e=s.getSelectionElement();if(!e)return;let n;try{const r=require("hammerjs");n=r.default||r}catch{console.warn("Pinch plugin disabled: hammerjs not found. Install hammerjs to enable touch gestures.");return}t=new n(e),t.get("pinch").set({enable:!0}),t.on("pinchmove",i),t.on("pinchend",l)}catch(e){console.warn("Pinch plugin disabled: hammerjs initialization failed.",e)}})(),()=>{t&&(t.off("pinchmove",i),t.off("pinchend",l),t.destroy())}},[s,a]),null};export{S as default};
|
|
2
2
|
//# sourceMappingURL=Pinch.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pinch.mjs","sources":["../../../src/plugins/Pinch.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useStoreApi } from '../hooks/useStore'\
|
|
1
|
+
{"version":3,"file":"Pinch.mjs","sources":["../../../src/plugins/Pinch.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useStoreApi } from '../hooks/useStore'\n\nimport { Point } from 'fabric'\n\n/**\n * 双指缩放(捏)插件\n *\n * 此组件提供触摸设备上的双指缩放功能。\n *\n * **依赖要求**:\n * 需要安装 hammerjs 来实现触摸手势识别:\n * ```bash\n * npm install hammerjs\n * # 如果使用 TypeScript,还需要安装类型定义\n * npm install @types/hammerjs\n * ```\n *\n * 如果没有安装 hammerjs,此组件会静默跳过初始化,不会影响其他功能。\n *\n * @returns null - 这是一个逻辑组件,不渲染任何UI\n */\nconst Pinch = () => {\n const store = useStoreApi()\n const { canvas } = store.getState()\n // 双指缩放记录\n const newManualZoomRef = useRef(1)\n\n /**\n * 注册时间\n */\n useEffect(() => {\n let hammer: any = null\n\n /**\n * 双指缩放\n * @param e\n */\n const onPinchMove = (e: any) => {\n const { canvas, manualZoom, fitZoom, minManualZoom, maxManualZoom } = store.getState()\n let newManualZoom = e.scale * manualZoom\n // 最小缩放限制\n if (newManualZoom <= minManualZoom) {\n newManualZoom = minManualZoom\n }\n // 最大缩放限制\n if (newManualZoom >= maxManualZoom) {\n newManualZoom = maxManualZoom\n }\n // 计算原图比例\n const combinedZoom = newManualZoom * fitZoom\n // 渲染更新\n canvas?.zoomToPoint(new Point(e.srcEvent.offsetX, e.srcEvent.offsetY), combinedZoom)\n // 记录手动缩放比例,onPinchEnd使用\n newManualZoomRef.current = newManualZoom\n }\n /**\n * 缩放结束\n */\n const onPinchEnd = () => {\n const { fitZoom } = store.getState()\n const combinedZoom = newManualZoomRef.current * fitZoom\n store.setState({\n manualZoom: newManualZoomRef.current,\n zoom: combinedZoom,\n })\n }\n\n // 初始化 Hammer.js\n const initialize = async () => {\n try {\n if (!canvas) return\n\n const selectionElement = canvas.getSelectionElement()\n if (!selectionElement) return\n\n // 使用条件导入,避免构建时的依赖解析问题\n let Hammer: any\n try {\n // 尝试导入 hammerjs,如果不存在则跳过\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const hammerjs = require('hammerjs')\n Hammer = hammerjs.default || hammerjs\n } catch {\n // hammerjs 未安装,静默跳过\n console.warn('Pinch plugin disabled: hammerjs not found. Install hammerjs to enable touch gestures.')\n return\n }\n\n hammer = new Hammer(selectionElement)\n // 启用 pinch 事件识别器\n hammer.get('pinch').set({ enable: true })\n hammer.on('pinchmove', onPinchMove)\n hammer.on('pinchend', onPinchEnd)\n } catch (error) {\n // hammerjs 初始化失败,静默跳过\n console.warn('Pinch plugin disabled: hammerjs initialization failed.', error)\n }\n }\n\n initialize()\n\n return () => {\n if (hammer) {\n hammer.off('pinchmove', onPinchMove)\n hammer.off('pinchend', onPinchEnd)\n hammer.destroy()\n }\n }\n }, [canvas, store])\n\n return null\n}\n\nexport default Pinch\n"],"names":["Pinch","store","useStoreApi","canvas","newManualZoomRef","useRef","useEffect","hammer","onPinchMove","e","manualZoom","fitZoom","minManualZoom","maxManualZoom","newManualZoom","combinedZoom","Point","onPinchEnd","selectionElement","Hammer","hammerjs","error"],"mappings":"8IAsBA,MAAMA,EAAQ,IAAM,CAClB,MAAMC,EAAQC,EAAY,EACpB,CAAE,OAAAC,CAAO,EAAIF,EAAM,SAAS,EAE5BG,EAAmBC,EAAO,CAAC,EAKjC,OAAAC,EAAU,IAAM,CACd,IAAIC,EAAc,KAMlB,MAAMC,EAAeC,GAAW,CAC9B,KAAM,CAAE,OAAAN,EAAQ,WAAAO,EAAY,QAAAC,EAAS,cAAAC,EAAe,cAAAC,CAAc,EAAIZ,EAAM,SAC5E,EAAA,IAAIa,EAAgBL,EAAE,MAAQC,EAE1BI,GAAiBF,IACnBE,EAAgBF,GAGdE,GAAiBD,IACnBC,EAAgBD,GAGlB,MAAME,EAAeD,EAAgBH,EAErCR,GAAQ,YAAY,IAAIa,EAAMP,EAAE,SAAS,QAASA,EAAE,SAAS,OAAO,EAAGM,CAAY,EAEnFX,EAAiB,QAAUU,CAC7B,EAIMG,EAAa,IAAM,CACvB,KAAM,CAAE,QAAAN,CAAQ,EAAIV,EAAM,WACpBc,EAAeX,EAAiB,QAAUO,EAChDV,EAAM,SAAS,CACb,WAAYG,EAAiB,QAC7B,KAAMW,CACR,CAAC,CACH,EAkCA,OA/BmB,SAAY,CAC7B,GAAI,CACF,GAAI,CAACZ,EAAQ,OAEb,MAAMe,EAAmBf,EAAO,oBAAoB,EACpD,GAAI,CAACe,EAAkB,OAGvB,IAAIC,EACJ,GAAI,CAGF,MAAMC,EAAW,QAAQ,UAAU,EACnCD,EAASC,EAAS,SAAWA,CAC/B,MAAQ,CAEN,QAAQ,KAAK,uFAAuF,EACpG,MACF,CAEAb,EAAS,IAAIY,EAAOD,CAAgB,EAEpCX,EAAO,IAAI,OAAO,EAAE,IAAI,CAAE,OAAQ,EAAK,CAAC,EACxCA,EAAO,GAAG,YAAaC,CAAW,EAClCD,EAAO,GAAG,WAAYU,CAAU,CAClC,OAASI,EAAO,CAEd,QAAQ,KAAK,yDAA0DA,CAAK,CAC9E,CACF,GAAA,EAIO,IAAM,CACPd,IACFA,EAAO,IAAI,YAAaC,CAAW,EACnCD,EAAO,IAAI,WAAYU,CAAU,EACjCV,EAAO,UAEX,CACF,EAAG,CAACJ,EAAQF,CAAK,CAAC,EAEX,IACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Control/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Control/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC/F,OAAO,KAAK,EAAgB,iBAAiB,EAAoC,MAAM,QAAQ,CAAA;AAE/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,iBAAiB,CAAC,GAAG;IACxE,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,QAAA,MAAM,OAAO;aATF,SAAS;cACR,SAAS;gBACP,qBAAqB,CAAC,WAAW,CAAC;gBAClC,MAAM;WACX,OAAO;mBACC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;0BAChB,OAAO;iCAuK9B,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Group as BaseGroup } from 'fabric';
|
|
2
2
|
import { Ellipse as BaseEllipse } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
3
4
|
import type { AllObjectEvents } from '../../types/object';
|
|
4
5
|
export type EllipseProps<T = unknown> = Partial<BaseEllipse & AllObjectEvents> & {
|
|
5
6
|
group?: BaseGroup;
|
|
@@ -7,6 +8,7 @@ export type EllipseProps<T = unknown> = Partial<BaseEllipse & AllObjectEvents> &
|
|
|
7
8
|
defaultTop?: number;
|
|
8
9
|
defaultWidth?: number;
|
|
9
10
|
defaultHeight?: number;
|
|
11
|
+
children?: ReactNode;
|
|
10
12
|
} & T;
|
|
11
13
|
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Partial<BaseEllipse<Partial<import("fabric").EllipseProps>, import("fabric").SerializedEllipseProps, import("fabric").ObjectEvents> & AllObjectEvents> & {
|
|
12
14
|
group?: BaseGroup;
|
|
@@ -14,6 +16,7 @@ declare const _default: import("react").MemoExoticComponent<import("react").Forw
|
|
|
14
16
|
defaultTop?: number;
|
|
15
17
|
defaultWidth?: number;
|
|
16
18
|
defaultHeight?: number;
|
|
19
|
+
children?: ReactNode;
|
|
17
20
|
} & import("react").RefAttributes<BaseEllipse<Partial<import("fabric").EllipseProps>, import("fabric").SerializedEllipseProps, import("fabric").ObjectEvents> | undefined>>>;
|
|
18
21
|
export default _default;
|
|
19
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Ellipse/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Ellipse/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,GAAG;IAC/E,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;YANK,SAAS;kBACH,MAAM;iBACP,MAAM;mBACJ,MAAM;oBACL,MAAM;eACX,SAAS;;AA4BtB,wBAA4B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Group as BaseGroup } from 'fabric';
|
|
2
|
+
import { IText } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import type { AllObjectEvents } from '../../types/object';
|
|
5
|
+
export type ITextProps<T = unknown> = Partial<ConstructorParameters<typeof IText>[1] & AllObjectEvents> & {
|
|
6
|
+
group?: BaseGroup;
|
|
7
|
+
text: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
} & T;
|
|
10
|
+
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<ITextProps<unknown>, "ref"> & import("react").RefAttributes<IText<Partial<import("fabric").ITextProps>, import("fabric").SerializedITextProps, import("fabric").ITextEvents> | undefined>>>;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/IText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,KAAK,EAAe,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IACxG,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;AAuCL,wBAA6B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Image/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Image/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAKhD,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,KAAK,IAAI,CAAA;CACrG,CAAA;;SAHM,MAAM;YACH,SAAS;aACR,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,KAAK,IAAI;;AAsDtG,wBAA0B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Group as BaseGroup } from 'fabric';
|
|
2
2
|
import { Line as BaseLine } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
3
4
|
import type { AllObjectEvents } from '../../types/object';
|
|
4
5
|
export type Handle = BaseLine | undefined;
|
|
5
6
|
export type LineProps<T = unknown> = Partial<ConstructorParameters<typeof BaseLine>[1] & AllObjectEvents> & {
|
|
6
7
|
group?: BaseGroup;
|
|
7
8
|
path?: string;
|
|
9
|
+
children?: ReactNode;
|
|
8
10
|
} & T;
|
|
9
11
|
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<LineProps<unknown>, "ref"> & import("react").RefAttributes<Handle>>>;
|
|
10
12
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Line/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Line/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEzC,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAC1G,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;CAErB,GAAG,CAAC,CAAA;;AA4BL,wBAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Loading/index.tsx"],"names":[],"mappings":"AAGA,QAAA,MAAM,OAAO,sDA8DZ,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/NodeToolbarPortal/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/NodeToolbarPortal/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAOtC,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;CACxC;AAED,QAAA,MAAM,iBAAiB,kGAgDrB,CAAA;AAEF,eAAe,iBAAiB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Objects/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Objects/index.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAA,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,CAAA;CACjD,CAAA;0EAE6B,YAAY;AAwB1C,wBAA4B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Group as BaseGroup } from 'fabric';
|
|
2
2
|
import { Path as BasePath } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
3
4
|
import type { AllObjectEvents } from '../../types/object';
|
|
4
5
|
export type Handle = BasePath | undefined;
|
|
5
6
|
export type PathProps<T = unknown> = Partial<ConstructorParameters<typeof BasePath>[1] & AllObjectEvents> & {
|
|
6
7
|
group?: BaseGroup;
|
|
7
8
|
path?: string;
|
|
9
|
+
children?: ReactNode;
|
|
8
10
|
} & T;
|
|
9
11
|
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<PathProps<unknown>, "ref"> & import("react").RefAttributes<Handle>>>;
|
|
10
12
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Path/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Path/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEzC,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAC1G,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;CAErB,GAAG,CAAC,CAAA;;AA4BL,wBAAyB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Group as BaseGroup } from 'fabric';
|
|
2
|
+
import { Polyline as BasePolyline } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import type { AllObjectEvents } from '../../types/object';
|
|
5
|
+
export type PolylineProps<T = unknown> = Partial<ConstructorParameters<typeof BasePolyline>[1] & AllObjectEvents> & {
|
|
6
|
+
group?: BaseGroup;
|
|
7
|
+
path?: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
} & T;
|
|
10
|
+
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<PolylineProps<unknown>, "ref"> & import("react").RefAttributes<BasePolyline<Partial<import("fabric").FabricObjectProps>, import("fabric").SerializedPolylineProps, import("fabric").ObjectEvents> | undefined>>>;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Polyline/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAClH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;AA6BL,wBAA6B"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Group as BaseGroup } from 'fabric';
|
|
2
2
|
import { Rect as BaseRect } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
3
4
|
import type { AllObjectEvents } from '../../types/object';
|
|
4
|
-
export type Handle = BaseRect | undefined;
|
|
5
5
|
export type RectProps<T = unknown> = Partial<BaseRect & AllObjectEvents> & {
|
|
6
6
|
group?: BaseGroup;
|
|
7
7
|
defaultLeft?: number;
|
|
8
8
|
defaultTop?: number;
|
|
9
9
|
defaultWidth?: number;
|
|
10
10
|
defaultHeight?: number;
|
|
11
|
+
children?: ReactNode;
|
|
11
12
|
} & T;
|
|
12
13
|
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Partial<BaseRect<Partial<import("fabric").RectProps>, import("fabric").SerializedRectProps, import("fabric").ObjectEvents> & AllObjectEvents> & {
|
|
13
14
|
group?: BaseGroup;
|
|
@@ -15,6 +16,7 @@ declare const _default: import("react").MemoExoticComponent<import("react").Forw
|
|
|
15
16
|
defaultTop?: number;
|
|
16
17
|
defaultWidth?: number;
|
|
17
18
|
defaultHeight?: number;
|
|
18
|
-
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
} & import("react").RefAttributes<BaseRect<Partial<import("fabric").RectProps>, import("fabric").SerializedRectProps, import("fabric").ObjectEvents> | undefined>>>;
|
|
19
21
|
export default _default;
|
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Rect/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Rect/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEzC,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAI3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC,GAAG;IACzE,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;YANK,SAAS;kBACH,MAAM;iBACP,MAAM;mBACJ,MAAM;oBACL,MAAM;eACX,SAAS;;AA4BtB,wBAAyB"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Group as BaseGroup } from 'fabric';
|
|
2
2
|
import { FabricText } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
3
4
|
import type { AllObjectEvents } from '../../types/object';
|
|
4
5
|
export type Handle = FabricText | undefined;
|
|
5
6
|
export type TextProps<T = unknown> = Partial<ConstructorParameters<typeof FabricText>[1] & AllObjectEvents> & {
|
|
6
7
|
group?: BaseGroup;
|
|
7
8
|
text: string;
|
|
9
|
+
children?: ReactNode;
|
|
8
10
|
} & T;
|
|
9
11
|
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<TextProps<unknown>, "ref"> & import("react").RefAttributes<Handle>>>;
|
|
10
12
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Text/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Text/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,UAAU,EAAe,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAkF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAItH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIzD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AAE3C,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAC5G,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;AA+DL,wBAAyB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Group as BaseGroup } from 'fabric';
|
|
2
|
+
import { Textbox as FabricTextbox } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import type { AllObjectEvents } from '../../types/object';
|
|
5
|
+
export type TextboxProps<T = unknown> = Partial<ConstructorParameters<typeof FabricTextbox>[1] & AllObjectEvents> & {
|
|
6
|
+
group?: BaseGroup;
|
|
7
|
+
text: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
} & T;
|
|
10
|
+
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<TextboxProps<unknown>, "ref"> & import("react").RefAttributes<FabricTextbox<Partial<import("fabric").TextboxProps>, import("fabric").SerializedTextboxProps, import("fabric").ITextEvents> | undefined>>>;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Textbox/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAe,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAClH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;AAuCL,wBAA4B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Group as BaseGroup } from 'fabric';
|
|
2
|
+
import { Line as BaseLine } from 'fabric';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import type { AllObjectEvents } from '../../types/object';
|
|
5
|
+
export type WavyLineProps<T = unknown> = Partial<ConstructorParameters<typeof BaseLine>[1] & AllObjectEvents> & {
|
|
6
|
+
group?: BaseGroup;
|
|
7
|
+
path?: string;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
} & T;
|
|
10
|
+
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Omit<WavyLineProps<unknown>, "ref"> & import("react").RefAttributes<BaseLine<Partial<import("fabric").FabricObjectProps>, import("fabric").SerializedLineProps, import("fabric").ObjectEvents> | undefined>>>;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/WavyLine/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAS,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AA6FzD,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG;IAC9G,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,GAAG,CAAC,CAAA;;AA8BL,wBAA6B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/container/ReactFabric/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/container/ReactFabric/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAQ1C,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,KAAK,CAAA;IACR,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAGD,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAE3B,CAAA;AAUD,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;UAEM;IACN,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACtC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACpC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC,CAAA;AAED,QAAA,MAAM,kBAAkB;YAvBd,aAAa;gBACT,MAAM;eACP,OAAO;oBACF,MAAM;oBACN,MAAM;IACtB;;OAEG;sBACe,OAAO;IACzB;;UAEM;uBACa,OAAO;IAC1B;;OAEG;uBACgB,OAAO;kBACZ,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI;kBACxB,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI;gBAC1B,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI;mBACrB,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI;kDAqDxC,CAAA;AAED,KAAK,oBAAoB,GAAG,KAAK,CAAC,mBAAmB,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEhF,QAAA,MAAM,WAAW,EAAE,oBAA+C,CAAA;AAGlE,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FabricObject } from 'fabric';
|
|
2
|
+
/**
|
|
3
|
+
* 用于同步子元素位置与 Fabric.js 对象位置的 Hook
|
|
4
|
+
* @param instance Fabric.js 对象实例
|
|
5
|
+
* @returns childrenRef - 需要绑定到子元素的 ref
|
|
6
|
+
*/
|
|
7
|
+
export declare function useChildrenPosition<T extends HTMLElement = HTMLDivElement>(instance: FabricObject | undefined): import("react").RefObject<T>;
|
|
8
|
+
//# sourceMappingURL=useChildrenPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChildrenPosition.d.ts","sourceRoot":"","sources":["../../../src/hooks/useChildrenPosition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAG1C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,EAAE,QAAQ,EAAE,YAAY,GAAG,SAAS,gCAqC7G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreateObject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCreateObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAMtD,KAAK,sBAAsB,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,GAAG,KAAK,CAAC,CAAA;AAC3D,KAAK,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,KAAK,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,GAAG,GAAG,IAAI;IACxD,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnE,UAAU,EAAE,GAAG,CAAA;IACf,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,KAAK,CAAC,EAAE,CAAC,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACrC,CAAA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,GAAG,GAAG,EAAE,EAC/D,WAAW,EACX,UAAU,EACV,aAAkB,EAClB,KAAK,EACL,KAAK,EACL,SAAc,GACf,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useCreateObject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCreateObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAMtD,KAAK,sBAAsB,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,GAAG,KAAK,CAAC,CAAA;AAC3D,KAAK,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAA;AAEtE,KAAK,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,GAAG,GAAG,IAAI;IACxD,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnE,UAAU,EAAE,GAAG,CAAA;IACf,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,KAAK,CAAC,EAAE,CAAC,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACrC,CAAA;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,GAAG,GAAG,EAAE,EAC/D,WAAW,EACX,UAAU,EACV,aAAkB,EAClB,KAAK,EACL,KAAK,EACL,SAAc,GACf,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,KA4FzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeHandler.d.ts","sourceRoot":"","sources":["../../../src/hooks/useResizeHandler.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"useResizeHandler.d.ts","sourceRoot":"","sources":["../../../src/hooks/useResizeHandler.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,gBAAgB,YAoCrB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export { default as ReactFabric } from './container/ReactFabric';
|
|
2
2
|
export { useReactFabric } from './hooks/useReactFabric';
|
|
3
3
|
export { useZoom } from './hooks/useZoom';
|
|
4
|
-
export { default as PluginToolbarVertical } from './toolbar/Vertical';
|
|
5
|
-
export type { ToolbarVerticalProps } from './toolbar/Vertical';
|
|
6
4
|
export { default as BackgroundImage } from './components/BackgroundImage';
|
|
7
5
|
export { default as Canvas } from './components/Canvas';
|
|
8
6
|
export { default as Group } from './components/Group';
|
|
@@ -20,10 +18,17 @@ export { default as Line } from './components/Line';
|
|
|
20
18
|
export type { LineProps } from './components/Line';
|
|
21
19
|
export { default as Ellipse } from './components/Ellipse';
|
|
22
20
|
export type { EllipseProps } from './components/Ellipse';
|
|
21
|
+
export { default as IText } from './components/IText';
|
|
22
|
+
export type { ITextProps } from './components/IText';
|
|
23
|
+
export { default as Textbox } from './components/Textbox';
|
|
24
|
+
export type { TextboxProps } from './components/Textbox';
|
|
25
|
+
export { default as WavyLine } from './components/WavyLine';
|
|
26
|
+
export type { WavyLineProps } from './components/WavyLine';
|
|
23
27
|
export { default as Objects } from './components/Objects';
|
|
24
28
|
export type { ObjectsProps } from './components/Objects';
|
|
25
29
|
export { default as PluginFreeRect } from './plugins/FreeRect';
|
|
26
30
|
export { default as PluginGridLine } from './plugins/GridLine';
|
|
27
31
|
export { default as PluginPinch } from './plugins/Pinch';
|
|
32
|
+
export { default as PluginMask } from './plugins/Mask';
|
|
28
33
|
export type { FreeRectProps } from './plugins/FreeRect';
|
|
29
34
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAIzC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAGtE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGpD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAG1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA"}
|