fabric 6.0.0 → 6.0.2
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/CHANGELOG.md +12 -0
- package/README.md +8 -18
- package/dist/fabric.d.ts +4 -0
- package/dist/fabric.d.ts.map +1 -1
- package/dist/fabric.min.mjs +1 -1
- package/dist/fabric.mjs +1 -0
- package/dist/fabric.mjs.map +1 -1
- package/dist/index.js +146 -107
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +146 -108
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +146 -107
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +146 -108
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/EventTypeDefs.d.ts +2 -1
- package/dist/src/EventTypeDefs.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs +13 -8
- package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs +3 -3
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs +15 -9
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
- package/dist/src/Observable.d.ts +8 -0
- package/dist/src/Observable.d.ts.map +1 -1
- package/dist/src/Observable.min.mjs.map +1 -1
- package/dist/src/Observable.mjs +8 -0
- package/dist/src/Observable.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs +5 -5
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts +1 -1
- package/dist/src/constants.d.ts +16 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.min.mjs +1 -1
- package/dist/src/constants.min.mjs.map +1 -1
- package/dist/src/constants.mjs +17 -1
- package/dist/src/constants.mjs.map +1 -1
- package/dist/src/controls/Control.d.ts.map +1 -1
- package/dist/src/controls/Control.min.mjs +1 -1
- package/dist/src/controls/Control.min.mjs.map +1 -1
- package/dist/src/controls/Control.mjs +2 -1
- package/dist/src/controls/Control.mjs.map +1 -1
- package/dist/src/controls/changeWidth.min.mjs +1 -1
- package/dist/src/controls/changeWidth.min.mjs.map +1 -1
- package/dist/src/controls/changeWidth.mjs +2 -2
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/commonControls.d.ts.map +1 -1
- package/dist/src/controls/commonControls.min.mjs +1 -1
- package/dist/src/controls/commonControls.min.mjs.map +1 -1
- package/dist/src/controls/commonControls.mjs +4 -3
- package/dist/src/controls/commonControls.mjs.map +1 -1
- package/dist/src/controls/controlRendering.min.mjs +1 -1
- package/dist/src/controls/controlRendering.min.mjs.map +1 -1
- package/dist/src/controls/controlRendering.mjs +3 -3
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/drag.min.mjs +1 -1
- package/dist/src/controls/drag.min.mjs.map +1 -1
- package/dist/src/controls/drag.mjs +2 -2
- package/dist/src/controls/drag.mjs.map +1 -1
- package/dist/src/controls/polyControl.d.ts.map +1 -1
- package/dist/src/controls/polyControl.min.mjs +1 -1
- package/dist/src/controls/polyControl.min.mjs.map +1 -1
- package/dist/src/controls/polyControl.mjs +2 -1
- package/dist/src/controls/polyControl.mjs.map +1 -1
- package/dist/src/controls/rotate.d.ts.map +1 -1
- package/dist/src/controls/rotate.min.mjs +1 -1
- package/dist/src/controls/rotate.min.mjs.map +1 -1
- package/dist/src/controls/rotate.mjs +2 -1
- package/dist/src/controls/rotate.mjs.map +1 -1
- package/dist/src/controls/scale.d.ts.map +1 -1
- package/dist/src/controls/scale.min.mjs +1 -1
- package/dist/src/controls/scale.min.mjs.map +1 -1
- package/dist/src/controls/scale.mjs +8 -7
- package/dist/src/controls/scale.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.d.ts.map +1 -1
- package/dist/src/controls/scaleSkew.min.mjs +1 -1
- package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.mjs +3 -2
- package/dist/src/controls/scaleSkew.mjs.map +1 -1
- package/dist/src/controls/skew.d.ts.map +1 -1
- package/dist/src/controls/skew.min.mjs +1 -1
- package/dist/src/controls/skew.min.mjs.map +1 -1
- package/dist/src/controls/skew.mjs +7 -7
- package/dist/src/controls/skew.mjs.map +1 -1
- package/dist/src/filters/Blur.min.mjs +1 -1
- package/dist/src/filters/Blur.min.mjs.map +1 -1
- package/dist/src/filters/Blur.mjs +1 -1
- package/dist/src/filters/Blur.mjs.map +1 -1
- package/dist/src/filters/Pixelate.min.mjs +1 -1
- package/dist/src/filters/Pixelate.min.mjs.map +1 -1
- package/dist/src/filters/Pixelate.mjs +1 -1
- package/dist/src/filters/Pixelate.mjs.map +1 -1
- package/dist/src/parser/attributes.d.ts.map +1 -1
- package/dist/src/parser/attributes.min.mjs +1 -1
- package/dist/src/parser/attributes.min.mjs.map +1 -1
- package/dist/src/parser/attributes.mjs +3 -1
- package/dist/src/parser/attributes.mjs.map +1 -1
- package/dist/src/parser/elements_parser.min.mjs +1 -1
- package/dist/src/parser/elements_parser.min.mjs.map +1 -1
- package/dist/src/parser/elements_parser.mjs +3 -3
- package/dist/src/parser/elements_parser.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.min.mjs +1 -1
- package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.mjs +7 -7
- package/dist/src/parser/normalizeValue.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.mjs +5 -5
- package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
- package/dist/src/shapes/Circle.d.ts.map +1 -1
- package/dist/src/shapes/Circle.min.mjs +1 -1
- package/dist/src/shapes/Circle.min.mjs.map +1 -1
- package/dist/src/shapes/Circle.mjs +3 -2
- package/dist/src/shapes/Circle.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.min.mjs +1 -1
- package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.mjs +3 -3
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs +3 -3
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs +3 -3
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs +2 -2
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs +2 -2
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
- package/dist/src/shapes/Image.min.mjs +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs +2 -2
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.mjs +2 -1
- package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +4 -4
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs +2 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts +9 -7
- package/dist/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist/src/shapes/Object/Object.min.mjs +1 -1
- package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.mjs +14 -12
- package/dist/src/shapes/Object/Object.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs +3 -3
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/defaultValues.d.ts.map +1 -1
- package/dist/src/shapes/Object/defaultValues.min.mjs +1 -1
- package/dist/src/shapes/Object/defaultValues.min.mjs.map +1 -1
- package/dist/src/shapes/Object/defaultValues.mjs +4 -4
- package/dist/src/shapes/Object/defaultValues.mjs.map +1 -1
- package/dist/src/shapes/Object/types/ControlProps.d.ts +4 -3
- package/dist/src/shapes/Object/types/ControlProps.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.min.mjs +1 -1
- package/dist/src/shapes/Polyline.min.mjs.map +1 -1
- package/dist/src/shapes/Polyline.mjs +3 -3
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts +2 -2
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +5 -5
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs +2 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.min.mjs +1 -1
- package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.mjs +2 -2
- package/dist/src/shapes/Text/constants.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.d.ts +1 -0
- package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs +1 -0
- package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.mjs +2 -2
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.mjs +3 -3
- package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
- package/fabric.ts +4 -0
- package/package.json +1 -1
- package/src/EventTypeDefs.ts +14 -6
- package/src/LayoutManager/LayoutManager.ts +28 -19
- package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +2 -2
- package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +7 -7
- package/src/Observable.ts +8 -0
- package/src/canvas/SelectableCanvas.ts +25 -11
- package/src/canvas/canvas_gestures.mixin.ts +6 -5
- package/src/constants.ts +17 -0
- package/src/controls/Control.ts +2 -1
- package/src/controls/changeWidth.ts +2 -2
- package/src/controls/commonControls.ts +4 -3
- package/src/controls/controlRendering.ts +3 -3
- package/src/controls/drag.ts +2 -2
- package/src/controls/polyControl.ts +2 -1
- package/src/controls/rotate.ts +2 -1
- package/src/controls/scale.ts +8 -7
- package/src/controls/scaleSkew.ts +3 -2
- package/src/controls/skew.ts +14 -7
- package/src/filters/Blur.ts +1 -1
- package/src/filters/Pixelate.ts +1 -1
- package/src/parser/attributes.ts +4 -2
- package/src/parser/elements_parser.ts +3 -3
- package/src/parser/normalizeValue.ts +7 -7
- package/src/parser/parseTransformAttribute.ts +5 -5
- package/src/shapes/Circle.ts +3 -2
- package/src/shapes/Ellipse.ts +3 -3
- package/src/shapes/IText/DraggableTextDelegate.ts +3 -3
- package/src/shapes/IText/IText.ts +3 -3
- package/src/shapes/IText/ITextBehavior.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.ts +2 -2
- package/src/shapes/Image.ts +2 -2
- package/src/shapes/Object/AnimatableObject.ts +2 -1
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +4 -6
- package/src/shapes/Object/InteractiveObject.ts +2 -1
- package/src/shapes/Object/Object.ts +16 -11
- package/src/shapes/Object/ObjectGeometry.ts +3 -3
- package/src/shapes/Object/defaultValues.ts +17 -8
- package/src/shapes/Object/types/ControlProps.ts +4 -3
- package/src/shapes/Polyline.spec.ts +0 -1
- package/src/shapes/Polyline.ts +12 -4
- package/src/shapes/Text/Text.ts +7 -7
- package/src/shapes/Text/TextSVGExportMixin.ts +3 -2
- package/src/shapes/Text/constants.ts +3 -3
- package/src/util/misc/objectEnlive.ts +1 -0
- package/src/util/misc/svgParsing.ts +2 -2
- package/src/util/transform_matrix_removal.ts +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r="6.0.
|
|
1
|
+
var r="6.0.2";export{r as version};
|
|
2
2
|
//# sourceMappingURL=package.json.min.mjs.map
|
package/dist/package.json.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import type { Canvas } from './canvas/Canvas';
|
|
|
8
8
|
import type { IText } from './shapes/IText/IText';
|
|
9
9
|
import type { StaticCanvas } from './canvas/StaticCanvas';
|
|
10
10
|
import type { LayoutBeforeEvent, LayoutAfterEvent } from './LayoutManager/types';
|
|
11
|
+
import type { MODIFY_POLY, MOVING, RESIZING, ROTATING, SCALING, SKEWING } from './constants';
|
|
11
12
|
export type ModifierKey = keyof Pick<MouseEvent | PointerEvent | TouchEvent, 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey'>;
|
|
12
13
|
export type TOptionalModifierKey = ModifierKey | null | undefined;
|
|
13
14
|
export type TPointerEvent = MouseEvent | TouchEvent | PointerEvent;
|
|
@@ -66,7 +67,7 @@ export interface BasicTransformEvent<E extends Event = TPointerEvent> extends TE
|
|
|
66
67
|
transform: Transform;
|
|
67
68
|
pointer: Point;
|
|
68
69
|
}
|
|
69
|
-
export type TModificationEvents =
|
|
70
|
+
export type TModificationEvents = typeof MOVING | typeof SCALING | typeof ROTATING | typeof SKEWING | typeof RESIZING | typeof MODIFY_POLY;
|
|
70
71
|
export interface ModifiedEvent<E extends Event = TPointerEvent> {
|
|
71
72
|
e?: E;
|
|
72
73
|
transform?: Transform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventTypeDefs.d.ts","sourceRoot":"","sources":["../../src/EventTypeDefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"EventTypeDefs.d.ts","sourceRoot":"","sources":["../../src/EventTypeDefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutManager.d.ts","sourceRoot":"","sources":["../../../src/LayoutManager/LayoutManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LayoutManager.d.ts","sourceRoot":"","sources":["../../../src/LayoutManager/LayoutManager.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AASxE,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAMjB,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,aAAa;IACxB,QAAgB,mBAAmB,CAAC,CAAiB;IACrD,UAAkB,cAAc,EAAE,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAEpE,QAAQ,EAAE,cAAc,CAAC;gBAEb,QAAQ,GAAE,cAAuC;IAKtD,aAAa,CAAC,OAAO,EAAE,aAAa;IAsB3C;;;;;;;OAOG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAC1D,YAAY,EAAE;IAkCjB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CACjB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO7D;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM9D,kBAAkB,CAChB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK7D,gBAAgB,CACd,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK7D,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB;IAmCrD,SAAS,CAAC,eAAe,CACvB,OAAO,EAAE,mBAAmB,GAC3B,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS;IAuCrC,SAAS,CAAC,YAAY,CACpB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IA4BtC,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IAatC;;;OAGG;IACH,SAAS,CAAC,YAAY,CACpB,OAAO,EAAE,mBAAmB,EAC5B,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,EAClC,MAAM,EAAE,YAAY;IAWtB,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,YAAY;IAqC7B,OAAO;IAMP,QAAQ;;;;IAOR,MAAM;;;;CAGP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,objectSpread2 as e,objectWithoutProperties as r}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as s}from"../Point.min.mjs";import{
|
|
1
|
+
import{defineProperty as t,objectSpread2 as e,objectWithoutProperties as r}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as s}from"../Point.min.mjs";import{MODIFIED as o,MOVING as a,RESIZING as i,ROTATING as n,SCALING as u,SKEWING as c,CHANGED as y,MODIFY_POLY as g,iMatrix as l,CENTER as b}from"../constants.min.mjs";import{invertTransform as p}from"../util/misc/matrix.min.mjs";import{resolveOrigin as h}from"../util/misc/resolveOrigin.min.mjs";import{FitContentLayout as m}from"./LayoutStrategies/FitContentLayout.min.mjs";import{LAYOUT_TYPE_OBJECT_MODIFIED as f,LAYOUT_TYPE_OBJECT_MODIFYING as j,LAYOUT_TYPE_INITIALIZATION as d,LAYOUT_TYPE_ADDED as L,LAYOUT_TYPE_REMOVED as v,LAYOUT_TYPE_IMPERATIVE as x}from"./constants.min.mjs";import{classRegistry as O}from"../ClassRegistry.min.mjs";const C=["strategy"],P=["target","strategy","bubbles","prevStrategy"],_="layoutManager";class S{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new m;t(this,"strategy",void 0),this.strategy=e,this._subscriptions=new Map}performLayout(t){const r=e(e({bubbles:!0,strategy:this.strategy},t),{},{prevStrategy:this._prevLayoutStrategy,stopPropagation(){this.bubbles=!1}});this.onBeforeLayout(r);const s=this.getLayoutResult(r);s&&this.commitLayout(r,s),this.onAfterLayout(r,s),this._prevLayoutStrategy=r.strategy}attachHandlers(t,e){const{target:r}=e;return[o,a,i,n,u,c,y,g].map((e=>t.on(e,(t=>this.performLayout(e===o?{type:f,trigger:e,e:t,target:r}:{type:j,trigger:e,e:t,target:r})))))}subscribe(t,e){this.unsubscribe(t,e);const r=this.attachHandlers(t,e);this._subscriptions.set(t,r)}unsubscribe(t,e){(this._subscriptions.get(t)||[]).forEach((t=>t())),this._subscriptions.delete(t)}unsubscribeTargets(t){t.targets.forEach((e=>this.unsubscribe(e,t)))}subscribeTargets(t){t.targets.forEach((e=>this.subscribe(e,t)))}onBeforeLayout(t){const{target:s,type:o}=t,{canvas:a}=s;if(o===d||o===L?this.subscribeTargets(t):o===v&&this.unsubscribeTargets(t),s.fire("layout:before",{context:t}),a&&a.fire("object:layout:before",{target:s,context:t}),o===x&&t.deep){const o=r(t,C);s.forEachObject((t=>t.layoutManager&&t.layoutManager.performLayout(e(e({},o),{},{bubbles:!1,target:t}))))}}getLayoutResult(t){const{target:e,strategy:r,type:o}=t,a=r.calcLayoutResult(t,e.getObjects());if(!a)return;const i=o===d?new s:e.getRelativeCenterPoint(),{center:n,correction:u=new s,relativeCorrection:c=new s}=a,y=i.subtract(n).add(u).transform(o===d?l:p(e.calcOwnMatrix()),!0).add(c);return{result:a,prevCenter:i,nextCenter:n,offset:y}}commitLayout(t,e){const{target:r}=t,{result:{size:s},nextCenter:o}=e;var a,i;(r.set({width:s.x,height:s.y}),this.layoutObjects(t,e),t.type===d)?r.set({left:null!==(a=t.x)&&void 0!==a?a:o.x+s.x*h(r.originX),top:null!==(i=t.y)&&void 0!==i?i:o.y+s.y*h(r.originY)}):(r.setPositionByOrigin(o,b,b),r.setCoords(),r.set("dirty",!0))}layoutObjects(t,e){const{target:r}=t;r.forEachObject((s=>{s.group===r&&this.layoutObject(t,e,s)})),t.strategy.shouldLayoutClipPath(t)&&this.layoutObject(t,e,r.clipPath)}layoutObject(t,e,r){let{offset:s}=e;r.set({left:r.left+s.x,top:r.top+s.y})}onAfterLayout(t,s){const{target:o,strategy:a,bubbles:i,prevStrategy:n}=t,u=r(t,P),{canvas:c}=o;o.fire("layout:after",{context:t,result:s}),c&&c.fire("object:layout:after",{context:t,result:s,target:o});const y=o.parent;i&&null!=y&&y.layoutManager&&((u.path||(u.path=[])).push(o),y.layoutManager.performLayout(e(e({},u),{},{target:y}))),o.set("dirty",!0)}dispose(){const{_subscriptions:t}=this;t.forEach((t=>t.forEach((t=>t())))),t.clear()}toObject(){return{type:_,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}}O.setClass(S,_);export{S as LayoutManager};
|
|
2
2
|
//# sourceMappingURL=LayoutManager.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutManager.min.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { CENTER, iMatrix } from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n 'modified',\n 'moving',\n 'resizing',\n 'rotating',\n 'scaling',\n 'skewing',\n 'changed',\n 'modifyPoly',\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === 'modified'\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n }\n )\n )\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n context?: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n })\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext\n ): Required<LayoutResult> | undefined {\n const { target } = context;\n\n const result = context.strategy.calcLayoutResult(\n context,\n target.getObjects()\n );\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n context.type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n context.type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n this._subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n this._subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","this","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","_context$x","_context$y","width","x","height","y","layoutObjects","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LayoutManager.min.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n }\n )\n )\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n context?: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n })\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext\n ): Required<LayoutResult> | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","this","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","MODIFIED","MOVING","RESIZING","ROTATING","SCALING","SKEWING","CHANGED","MODIFY_POLY","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","_context$x","_context$y","width","x","height","y","layoutObjects","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2, objectWithoutProperties as _objectWithoutProperties } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
2
|
import { Point } from '../Point.mjs';
|
|
3
|
-
import { iMatrix, CENTER } from '../constants.mjs';
|
|
3
|
+
import { MODIFIED, MOVING, RESIZING, ROTATING, SCALING, SKEWING, CHANGED, MODIFY_POLY, iMatrix, CENTER } from '../constants.mjs';
|
|
4
4
|
import { invertTransform } from '../util/misc/matrix.mjs';
|
|
5
5
|
import { resolveOrigin } from '../util/misc/resolveOrigin.mjs';
|
|
6
6
|
import { FitContentLayout } from './LayoutStrategies/FitContentLayout.mjs';
|
|
@@ -48,7 +48,7 @@ class LayoutManager {
|
|
|
48
48
|
const {
|
|
49
49
|
target
|
|
50
50
|
} = context;
|
|
51
|
-
return [
|
|
51
|
+
return [MODIFIED, MOVING, RESIZING, ROTATING, SCALING, SKEWING, CHANGED, MODIFY_POLY].map(key => object.on(key, e => this.performLayout(key === MODIFIED ? {
|
|
52
52
|
type: LAYOUT_TYPE_OBJECT_MODIFIED,
|
|
53
53
|
trigger: key,
|
|
54
54
|
e,
|
|
@@ -120,13 +120,15 @@ class LayoutManager {
|
|
|
120
120
|
}
|
|
121
121
|
getLayoutResult(context) {
|
|
122
122
|
const {
|
|
123
|
-
target
|
|
123
|
+
target,
|
|
124
|
+
strategy,
|
|
125
|
+
type
|
|
124
126
|
} = context;
|
|
125
|
-
const result =
|
|
127
|
+
const result = strategy.calcLayoutResult(context, target.getObjects());
|
|
126
128
|
if (!result) {
|
|
127
129
|
return;
|
|
128
130
|
}
|
|
129
|
-
const prevCenter =
|
|
131
|
+
const prevCenter = type === LAYOUT_TYPE_INITIALIZATION ? new Point() : target.getRelativeCenterPoint();
|
|
130
132
|
const {
|
|
131
133
|
center: nextCenter,
|
|
132
134
|
correction = new Point(),
|
|
@@ -134,7 +136,7 @@ class LayoutManager {
|
|
|
134
136
|
} = result;
|
|
135
137
|
const offset = prevCenter.subtract(nextCenter).add(correction).transform(
|
|
136
138
|
// in `initialization` we do not account for target's transformation matrix
|
|
137
|
-
|
|
139
|
+
type === LAYOUT_TYPE_INITIALIZATION ? iMatrix : invertTransform(target.calcOwnMatrix()), true).add(relativeCorrection);
|
|
138
140
|
return {
|
|
139
141
|
result,
|
|
140
142
|
prevCenter,
|
|
@@ -239,8 +241,11 @@ class LayoutManager {
|
|
|
239
241
|
target.set('dirty', true);
|
|
240
242
|
}
|
|
241
243
|
dispose() {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
+
const {
|
|
245
|
+
_subscriptions
|
|
246
|
+
} = this;
|
|
247
|
+
_subscriptions.forEach(disposers => disposers.forEach(d => d()));
|
|
248
|
+
_subscriptions.clear();
|
|
244
249
|
}
|
|
245
250
|
toObject() {
|
|
246
251
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutManager.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { CENTER, iMatrix } from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n 'modified',\n 'moving',\n 'resizing',\n 'rotating',\n 'scaling',\n 'skewing',\n 'changed',\n 'modifyPoly',\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === 'modified'\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n }\n )\n )\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n context?: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n })\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext\n ): Required<LayoutResult> | undefined {\n const { target } = context;\n\n const result = context.strategy.calcLayoutResult(\n context,\n target.getObjects()\n );\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n context.type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n context.type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n this._subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n this._subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","width","x","height","y","layoutObjects","_context$x","_context$y","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LayoutManager.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n }\n )\n )\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n context?: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n })\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext\n ): Required<LayoutResult> | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","MODIFIED","MOVING","RESIZING","ROTATING","SCALING","SKEWING","CHANGED","MODIFY_POLY","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","width","x","height","y","layoutObjects","_context$x","_context$y","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as r}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as e}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{sendPointToPlane as o}from"../../util/misc/planeChange.min.mjs";import{LayoutStrategy as i}from"./LayoutStrategy.min.mjs";import{getObjectBounds as n}from"./utils.min.mjs";import{classRegistry as s}from"../../ClassRegistry.min.mjs";class a extends i{shouldPerformLayout(t){return!!t.target.clipPath&&super.shouldPerformLayout(t)}shouldLayoutClipPath(){return!1}calcLayoutResult(t,i){const{target:s}=t,{clipPath:a}=s;if(!a||!this.shouldPerformLayout(t))return;const{width:
|
|
1
|
+
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as r}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as e}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{sendPointToPlane as o}from"../../util/misc/planeChange.min.mjs";import{LayoutStrategy as i}from"./LayoutStrategy.min.mjs";import{getObjectBounds as n}from"./utils.min.mjs";import{classRegistry as s}from"../../ClassRegistry.min.mjs";class a extends i{shouldPerformLayout(t){return!!t.target.clipPath&&super.shouldPerformLayout(t)}shouldLayoutClipPath(){return!1}calcLayoutResult(t,i){const{target:s}=t,{clipPath:a,group:m}=s;if(!a||!this.shouldPerformLayout(t))return;const{width:l,height:u}=e(n(s,a)),c=new r(l,u);if(a.absolutePositioned){return{center:o(a.getRelativeCenterPoint(),void 0,m?m.calcTransformMatrix():void 0),size:c}}{const e=a.getRelativeCenterPoint().transform(s.calcOwnMatrix(),!0);if(this.shouldPerformLayout(t)){const{center:o=new r,correction:n=new r}=this.calcBoundingBox(i,t)||{};return{center:o.add(e),correction:n.subtract(e),size:c}}return{center:s.getRelativeCenterPoint().add(e),size:c}}}}t(a,"type","clip-path"),s.setClass(a);export{a as ClipPathLayout};
|
|
2
2
|
//# sourceMappingURL=ClipPathLayout.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipPathLayout.min.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject)\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n
|
|
1
|
+
{"version":3,"file":"ClipPathLayout.min.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject)\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n"],"names":["ClipPathLayout","LayoutStrategy","shouldPerformLayout","context","target","clipPath","super","shouldLayoutClipPath","calcLayoutResult","objects","group","this","width","height","makeBoundingBoxFromPoints","getObjectBounds","size","Point","absolutePositioned","center","sendPointToPlane","getRelativeCenterPoint","undefined","calcTransformMatrix","clipPathCenter","transform","calcOwnMatrix","correction","calcBoundingBox","add","subtract","_defineProperty","classRegistry","setClass"],"mappings":"0cAYO,MAAMA,UAAuBC,EAGlCC,mBAAAA,CAAoBC,GAClB,QAASA,EAAQC,OAAOC,UAAYC,MAAMJ,oBAAoBC,EAChE,CAEAI,oBAAAA,GACE,OAAO,CACT,CAEAC,gBAAAA,CACEL,EACAM,GAEA,MAAML,OAAEA,GAAWD,GACbE,SAAEA,EAAQK,MAAEA,GAAUN,EAC5B,IAAKC,IAAaM,KAAKT,oBAAoBC,GACzC,OAGF,MAAMS,MAAEA,EAAKC,OAAEA,GAAWC,EACxBC,EAAgBX,EAAQC,IAEpBW,EAAO,IAAIC,EAAML,EAAOC,GAC9B,GAAIR,EAASa,mBAAoB,CAO/B,MAAO,CACLC,OANqBC,EACrBf,EAASgB,8BACTC,EACAZ,EAAQA,EAAMa,2BAAwBD,GAItCN,OAEJ,CAAO,CAEL,MAAMQ,EAAiBnB,EACpBgB,yBACAI,UAAUrB,EAAOsB,iBAAiB,GACrC,GAAIf,KAAKT,oBAAoBC,GAAU,CAGrC,MAAMgB,OAAEA,EAAS,IAAIF,EAAOU,WAAEA,EAAa,IAAIV,GAC7CN,KAAKiB,gBAAgBnB,EAASN,IAAY,CAAA,EAC5C,MAAO,CACLgB,OAAQA,EAAOU,IAAIL,GACnBG,WAAYA,EAAWG,SAASN,GAChCR,OAEJ,CACE,MAAO,CACLG,OAAQf,EAAOiB,yBAAyBQ,IAAIL,GAC5CR,OAGN,CACF,EACDe,EA3DY/B,EAAc,OACF,aA4DzBgC,EAAcC,SAASjC"}
|
|
@@ -21,7 +21,8 @@ class ClipPathLayout extends LayoutStrategy {
|
|
|
21
21
|
target
|
|
22
22
|
} = context;
|
|
23
23
|
const {
|
|
24
|
-
clipPath
|
|
24
|
+
clipPath,
|
|
25
|
+
group
|
|
25
26
|
} = target;
|
|
26
27
|
if (!clipPath || !this.shouldPerformLayout(context)) {
|
|
27
28
|
return;
|
|
@@ -33,9 +34,8 @@ class ClipPathLayout extends LayoutStrategy {
|
|
|
33
34
|
} = makeBoundingBoxFromPoints(getObjectBounds(target, clipPath));
|
|
34
35
|
const size = new Point(width, height);
|
|
35
36
|
if (clipPath.absolutePositioned) {
|
|
36
|
-
var _target$group;
|
|
37
37
|
// we want the center point to exist in group's containing plane
|
|
38
|
-
const clipPathCenter = sendPointToPlane(clipPath.getRelativeCenterPoint(), undefined,
|
|
38
|
+
const clipPathCenter = sendPointToPlane(clipPath.getRelativeCenterPoint(), undefined, group ? group.calcTransformMatrix() : undefined);
|
|
39
39
|
return {
|
|
40
40
|
center: clipPathCenter,
|
|
41
41
|
size
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipPathLayout.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject)\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n
|
|
1
|
+
{"version":3,"file":"ClipPathLayout.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject)\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n"],"names":["ClipPathLayout","LayoutStrategy","shouldPerformLayout","context","target","clipPath","shouldLayoutClipPath","calcLayoutResult","objects","group","width","height","makeBoundingBoxFromPoints","getObjectBounds","size","Point","absolutePositioned","clipPathCenter","sendPointToPlane","getRelativeCenterPoint","undefined","calcTransformMatrix","center","transform","calcOwnMatrix","correction","calcBoundingBox","add","subtract","_defineProperty","classRegistry","setClass"],"mappings":";;;;;;;;AASA;AACA;AACA;AACO,MAAMA,cAAc,SAASC,cAAc,CAAC;EAGjDC,mBAAmBA,CAACC,OAA4B,EAAW;AACzD,IAAA,OAAO,CAAC,CAACA,OAAO,CAACC,MAAM,CAACC,QAAQ,IAAI,KAAK,CAACH,mBAAmB,CAACC,OAAO,CAAC,CAAA;AACxE,GAAA;AAEAG,EAAAA,oBAAoBA,GAAG;AACrB,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEAC,EAAAA,gBAAgBA,CACdJ,OAA4B,EAC5BK,OAAuB,EACW;IAClC,MAAM;AAAEJ,MAAAA,MAAAA;AAAO,KAAC,GAAGD,OAAO,CAAA;IAC1B,MAAM;MAAEE,QAAQ;AAAEI,MAAAA,KAAAA;AAAM,KAAC,GAAGL,MAAM,CAAA;IAClC,IAAI,CAACC,QAAQ,IAAI,CAAC,IAAI,CAACH,mBAAmB,CAACC,OAAO,CAAC,EAAE;AACnD,MAAA,OAAA;AACF,KAAA;AACA;IACA,MAAM;MAAEO,KAAK;AAAEC,MAAAA,MAAAA;KAAQ,GAAGC,yBAAyB,CACjDC,eAAe,CAACT,MAAM,EAAEC,QAAwB,CAClD,CAAC,CAAA;IACD,MAAMS,IAAI,GAAG,IAAIC,KAAK,CAACL,KAAK,EAAEC,MAAM,CAAC,CAAA;IACrC,IAAIN,QAAQ,CAACW,kBAAkB,EAAE;AAC/B;MACA,MAAMC,cAAc,GAAGC,gBAAgB,CACrCb,QAAQ,CAACc,sBAAsB,EAAE,EACjCC,SAAS,EACTX,KAAK,GAAGA,KAAK,CAACY,mBAAmB,EAAE,GAAGD,SACxC,CAAC,CAAA;MACD,OAAO;AACLE,QAAAA,MAAM,EAAEL,cAAc;AACtBH,QAAAA,IAAAA;OACD,CAAA;AACH,KAAC,MAAM;AACL;AACA,MAAA,MAAMG,cAAc,GAAGZ,QAAQ,CAC5Bc,sBAAsB,EAAE,CACxBI,SAAS,CAACnB,MAAM,CAACoB,aAAa,EAAE,EAAE,IAAI,CAAC,CAAA;AAC1C,MAAA,IAAI,IAAI,CAACtB,mBAAmB,CAACC,OAAO,CAAC,EAAE;AACrC;AACA;QACA,MAAM;AAAEmB,UAAAA,MAAM,GAAG,IAAIP,KAAK,EAAE;UAAEU,UAAU,GAAG,IAAIV,KAAK,EAAC;SAAG,GACtD,IAAI,CAACW,eAAe,CAAClB,OAAO,EAAEL,OAAO,CAAC,IAAI,EAAE,CAAA;QAC9C,OAAO;AACLmB,UAAAA,MAAM,EAAEA,MAAM,CAACK,GAAG,CAACV,cAAc,CAAC;AAClCQ,UAAAA,UAAU,EAAEA,UAAU,CAACG,QAAQ,CAACX,cAAc,CAAC;AAC/CH,UAAAA,IAAAA;SACD,CAAA;AACH,OAAC,MAAM;QACL,OAAO;UACLQ,MAAM,EAAElB,MAAM,CAACe,sBAAsB,EAAE,CAACQ,GAAG,CAACV,cAAc,CAAC;AAC3DH,UAAAA,IAAAA;SACD,CAAA;AACH,OAAA;AACF,KAAA;AACF,GAAA;AACF,CAAA;AAACe,eAAA,CA3DY7B,cAAc,EAAA,MAAA,EACF,WAAW,CAAA,CAAA;AA4DpC8B,aAAa,CAACC,QAAQ,CAAC/B,cAAc,CAAC;;;;"}
|
|
@@ -19,7 +19,7 @@ export declare abstract class LayoutStrategy {
|
|
|
19
19
|
* @returns layout result **OR** `undefined` to skip layout
|
|
20
20
|
*/
|
|
21
21
|
calcLayoutResult(context: StrictLayoutContext, objects: FabricObject[]): LayoutStrategyResult | undefined;
|
|
22
|
-
shouldPerformLayout(
|
|
22
|
+
shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext): boolean;
|
|
23
23
|
shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext): boolean | undefined;
|
|
24
24
|
getInitialSize(context: StrictLayoutContext & InitializationLayoutContext, result: Pick<LayoutStrategyResult, 'center' | 'size'>): Point;
|
|
25
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutStrategy.d.ts","sourceRoot":"","sources":["../../../../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAMrE,OAAO,KAAK,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAGlB;;;;;GAKG;AACH,8BAAsB,cAAc;IAClC;;OAEG;IACH,MAAM,CAAC,IAAI,SAAc;IAEzB;;;;;OAKG;IACI,gBAAgB,CACrB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,YAAY,EAAE,GACtB,oBAAoB,GAAG,SAAS;IAMnC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"LayoutStrategy.d.ts","sourceRoot":"","sources":["../../../../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAMrE,OAAO,KAAK,EACV,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAGlB;;;;;GAKG;AACH,8BAAsB,cAAc;IAClC;;OAEG;IACH,MAAM,CAAC,IAAI,SAAc;IAEzB;;;;;OAKG;IACI,gBAAgB,CACrB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,YAAY,EAAE,GACtB,oBAAoB,GAAG,SAAS;IAMnC,mBAAmB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,mBAAmB;IAQzE,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,mBAAmB;IAQxE,cAAc,CACZ,OAAO,EAAE,mBAAmB,GAAG,2BAA2B,EAC1D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,MAAM,CAAC;IAKvD;;OAEG;IACH,eAAe,CACb,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,mBAAmB,GAC3B,oBAAoB,GAAG,SAAS;CAsCpC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as e}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as r}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{LAYOUT_TYPE_INITIALIZATION as i,LAYOUT_TYPE_IMPERATIVE as o}from"../constants.min.mjs";import{getObjectBounds as n}from"./utils.min.mjs";class s{calcLayoutResult(t,e){if(this.shouldPerformLayout(t))return this.calcBoundingBox(e,t)}shouldPerformLayout(t){return
|
|
1
|
+
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as e}from"../../Point.min.mjs";import{makeBoundingBoxFromPoints as r}from"../../util/misc/boundingBoxFromPoints.min.mjs";import{LAYOUT_TYPE_INITIALIZATION as i,LAYOUT_TYPE_IMPERATIVE as o}from"../constants.min.mjs";import{getObjectBounds as n}from"./utils.min.mjs";class s{calcLayoutResult(t,e){if(this.shouldPerformLayout(t))return this.calcBoundingBox(e,t)}shouldPerformLayout(t){let{type:e,prevStrategy:r,strategy:n}=t;return e===i||e===o||!!r&&n!==r}shouldLayoutClipPath(t){let{type:e,target:{clipPath:r}}=t;return e!==i&&r&&!r.absolutePositioned}getInitialSize(t,e){return e.size}calcBoundingBox(t,s){const{type:a,target:l}=s;if(a===o&&s.overrides)return s.overrides;if(0===t.length)return;const{left:m,top:u,width:c,height:p}=r(t.map((t=>n(l,t))).reduce(((t,e)=>t.concat(e)),[])),d=new e(c,p),f=new e(m,u).add(d.scalarDivide(2));if(a===i){const t=this.getInitialSize(s,{size:d,center:f});return{center:f,relativeCorrection:new e(0,0),size:t}}return{center:f.transform(l.calcOwnMatrix()),size:d}}}t(s,"type","strategy");export{s as LayoutStrategy};
|
|
2
2
|
//# sourceMappingURL=LayoutStrategy.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutStrategy.min.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout(
|
|
1
|
+
{"version":3,"file":"LayoutStrategy.min.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[]\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {\n return (\n type === LAYOUT_TYPE_INITIALIZATION ||\n type === LAYOUT_TYPE_IMPERATIVE ||\n (!!prevStrategy && strategy !== prevStrategy)\n );\n }\n\n shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext) {\n return (\n type !== LAYOUT_TYPE_INITIALIZATION &&\n clipPath &&\n !clipPath.absolutePositioned\n );\n }\n\n getInitialSize(\n context: StrictLayoutContext & InitializationLayoutContext,\n result: Pick<LayoutStrategyResult, 'center' | 'size'>\n ) {\n return result.size;\n }\n\n /**\n * Override this method to customize layout.\n */\n calcBoundingBox(\n objects: FabricObject[],\n context: StrictLayoutContext\n ): LayoutStrategyResult | undefined {\n const { type, target } = context;\n if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n return context.overrides;\n }\n if (objects.length === 0) {\n return;\n }\n const { left, top, width, height } = makeBoundingBoxFromPoints(\n objects\n .map((object) => getObjectBounds(target, object))\n .reduce<Point[]>((coords, curr) => coords.concat(curr), [])\n );\n const bboxSize = new Point(width, height);\n const bboxLeftTop = new Point(left, top);\n const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n if (type === LAYOUT_TYPE_INITIALIZATION) {\n const actualSize = this.getInitialSize(context, {\n size: bboxSize,\n center: bboxCenter,\n });\n return {\n // in `initialization` we do not account for target's transformation matrix\n center: bboxCenter,\n // TODO: investigate if this is still necessary\n relativeCorrection: new Point(0, 0),\n size: actualSize,\n };\n } else {\n // we send `relativeCenter` up to group's containing plane\n const center = bboxCenter.transform(target.calcOwnMatrix());\n return {\n center,\n size: bboxSize,\n };\n }\n }\n}\n"],"names":["LayoutStrategy","calcLayoutResult","context","objects","this","shouldPerformLayout","calcBoundingBox","_ref","type","prevStrategy","strategy","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_IMPERATIVE","shouldLayoutClipPath","_ref2","target","clipPath","absolutePositioned","getInitialSize","result","size","overrides","length","left","top","width","height","makeBoundingBoxFromPoints","map","object","getObjectBounds","reduce","coords","curr","concat","bboxSize","Point","bboxCenter","add","scalarDivide","actualSize","center","relativeCorrection","transform","calcOwnMatrix","_defineProperty"],"mappings":"2WAoBO,MAAeA,EAYbC,gBAAAA,CACLC,EACAC,GAEA,GAAIC,KAAKC,oBAAoBH,GAC3B,OAAOE,KAAKE,gBAAgBH,EAASD,EAEzC,CAEAG,mBAAAA,CAAmBE,GAAwD,IAAvDC,KAAEA,EAAIC,aAAEA,EAAYC,SAAEA,GAA+BH,EACvE,OACEC,IAASG,GACTH,IAASI,KACNH,GAAgBC,IAAaD,CAEpC,CAEAI,oBAAAA,CAAoBC,GAAsD,IAArDN,KAAEA,EAAMO,QAAQC,SAAEA,IAAiCF,EACtE,OACEN,IAASG,GACTK,IACCA,EAASC,kBAEd,CAEAC,cAAAA,CACEhB,EACAiB,GAEA,OAAOA,EAAOC,IAChB,CAKAd,eAAAA,CACEH,EACAD,GAEA,MAAMM,KAAEA,EAAIO,OAAEA,GAAWb,EACzB,GAAIM,IAASI,GAA0BV,EAAQmB,UAC7C,OAAOnB,EAAQmB,UAEjB,GAAuB,IAAnBlB,EAAQmB,OACV,OAEF,MAAMC,KAAEA,EAAIC,IAAEA,EAAGC,MAAEA,EAAKC,OAAEA,GAAWC,EACnCxB,EACGyB,KAAKC,GAAWC,EAAgBf,EAAQc,KACxCE,QAAgB,CAACC,EAAQC,IAASD,EAAOE,OAAOD,IAAO,KAEtDE,EAAW,IAAIC,EAAMX,EAAOC,GAE5BW,EADc,IAAID,EAAMb,EAAMC,GACLc,IAAIH,EAASI,aAAa,IAEzD,GAAI/B,IAASG,EAA4B,CACvC,MAAM6B,EAAapC,KAAKc,eAAehB,EAAS,CAC9CkB,KAAMe,EACNM,OAAQJ,IAEV,MAAO,CAELI,OAAQJ,EAERK,mBAAoB,IAAIN,EAAM,EAAG,GACjChB,KAAMoB,EAEV,CAGE,MAAO,CACLC,OAFaJ,EAAWM,UAAU5B,EAAO6B,iBAGzCxB,KAAMe,EAGZ,EAtFAU,EADoB7C,EAAc,OAIpB"}
|
|
@@ -22,16 +22,21 @@ class LayoutStrategy {
|
|
|
22
22
|
return this.calcBoundingBox(objects, context);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
shouldPerformLayout(
|
|
26
|
-
|
|
25
|
+
shouldPerformLayout(_ref) {
|
|
26
|
+
let {
|
|
27
|
+
type,
|
|
28
|
+
prevStrategy,
|
|
29
|
+
strategy
|
|
30
|
+
} = _ref;
|
|
31
|
+
return type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_IMPERATIVE || !!prevStrategy && strategy !== prevStrategy;
|
|
27
32
|
}
|
|
28
|
-
shouldLayoutClipPath(
|
|
33
|
+
shouldLayoutClipPath(_ref2) {
|
|
29
34
|
let {
|
|
30
35
|
type,
|
|
31
36
|
target: {
|
|
32
37
|
clipPath
|
|
33
38
|
}
|
|
34
|
-
} =
|
|
39
|
+
} = _ref2;
|
|
35
40
|
return type !== LAYOUT_TYPE_INITIALIZATION && clipPath && !clipPath.absolutePositioned;
|
|
36
41
|
}
|
|
37
42
|
getInitialSize(context, result) {
|
|
@@ -42,15 +47,16 @@ class LayoutStrategy {
|
|
|
42
47
|
* Override this method to customize layout.
|
|
43
48
|
*/
|
|
44
49
|
calcBoundingBox(objects, context) {
|
|
45
|
-
|
|
50
|
+
const {
|
|
51
|
+
type,
|
|
52
|
+
target
|
|
53
|
+
} = context;
|
|
54
|
+
if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {
|
|
46
55
|
return context.overrides;
|
|
47
56
|
}
|
|
48
57
|
if (objects.length === 0) {
|
|
49
58
|
return;
|
|
50
59
|
}
|
|
51
|
-
const {
|
|
52
|
-
target
|
|
53
|
-
} = context;
|
|
54
60
|
const {
|
|
55
61
|
left,
|
|
56
62
|
top,
|
|
@@ -60,7 +66,7 @@ class LayoutStrategy {
|
|
|
60
66
|
const bboxSize = new Point(width, height);
|
|
61
67
|
const bboxLeftTop = new Point(left, top);
|
|
62
68
|
const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));
|
|
63
|
-
if (
|
|
69
|
+
if (type === LAYOUT_TYPE_INITIALIZATION) {
|
|
64
70
|
const actualSize = this.getInitialSize(context, {
|
|
65
71
|
size: bboxSize,
|
|
66
72
|
center: bboxCenter
|