fabric 7.0.0 → 7.2.0
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/.husky/pre-commit +1 -0
- package/CHANGELOG.md +21 -0
- package/dist/extensions/cropping_controls/croppingControls.d.ts +16 -0
- package/dist/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
- package/dist/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/enterCropMode.d.ts +7 -0
- package/dist/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
- package/dist/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/fabric.d.ts +1 -0
- package/dist/fabric.d.ts.map +1 -1
- package/dist/index.js +628 -537
- 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 +628 -537
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +628 -537
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +628 -537
- 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 +5 -0
- package/dist/src/EventTypeDefs.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.min.mjs +1 -1
- package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.mjs +2 -1
- package/dist/src/Pattern/Pattern.mjs.map +1 -1
- package/dist/src/Shadow.d.ts +1 -1
- package/dist/src/Shadow.d.ts.map +1 -1
- package/dist/src/Shadow.min.mjs +1 -1
- package/dist/src/Shadow.min.mjs.map +1 -1
- package/dist/src/Shadow.mjs +5 -4
- package/dist/src/Shadow.mjs.map +1 -1
- package/dist/src/canvas/CanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/CanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/CanvasOptions.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.d.ts +2 -0
- 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 +33 -13
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +3 -1
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.min.mjs.map +1 -1
- package/dist/src/constants.mjs.map +1 -1
- package/dist/src/controls/Control.d.ts +22 -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 +45 -1
- package/dist/src/controls/Control.mjs.map +1 -1
- package/dist/src/controls/changeWidth.d.ts +22 -0
- package/dist/src/controls/changeWidth.d.ts.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 +46 -18
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/controlRendering.d.ts.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 +18 -34
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/index.d.ts +2 -1
- package/dist/src/controls/index.d.ts.map +1 -1
- package/dist/src/controls/index.min.mjs +1 -1
- package/dist/src/controls/index.mjs +1 -1
- package/dist/src/gradient/Gradient.d.ts.map +1 -1
- package/dist/src/gradient/Gradient.min.mjs +1 -1
- package/dist/src/gradient/Gradient.min.mjs.map +1 -1
- package/dist/src/gradient/Gradient.mjs +19 -6
- package/dist/src/gradient/Gradient.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 +10 -7
- package/dist/src/shapes/Circle.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.d.ts.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 +2 -1
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/Group.d.ts.map +1 -1
- package/dist/src/shapes/Group.min.mjs +1 -1
- package/dist/src/shapes/Group.min.mjs.map +1 -1
- package/dist/src/shapes/Group.mjs +2 -1
- package/dist/src/shapes/Group.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.d.ts.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/Image.d.ts +1 -1
- package/dist/src/shapes/Image.d.ts.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 +4 -3
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Line.d.ts.map +1 -1
- package/dist/src/shapes/Line.min.mjs +1 -1
- package/dist/src/shapes/Line.min.mjs.map +1 -1
- package/dist/src/shapes/Line.mjs +6 -10
- package/dist/src/shapes/Line.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 +5 -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.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- 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 +3 -0
- 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 +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
- package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
- package/dist/src/shapes/Path.d.ts.map +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs +1 -2
- package/dist/src/shapes/Path.mjs.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 +10 -6
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Rect.d.ts.map +1 -1
- package/dist/src/shapes/Rect.min.mjs +1 -1
- package/dist/src/shapes/Rect.min.mjs.map +1 -1
- package/dist/src/shapes/Rect.mjs +2 -1
- package/dist/src/shapes/Rect.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.d.ts.map +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.mjs +0 -3
- package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- 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 +5 -6
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Textbox.d.ts.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.d.ts.map +1 -1
- package/dist/src/shapes/Triangle.min.mjs.map +1 -1
- package/dist/src/shapes/Triangle.mjs.map +1 -1
- package/dist/src/util/lang_string.d.ts +1 -1
- package/dist/src/util/lang_string.d.ts.map +1 -1
- package/dist/src/util/lang_string.min.mjs +1 -1
- package/dist/src/util/lang_string.min.mjs.map +1 -1
- package/dist/src/util/lang_string.mjs +1 -1
- package/dist/src/util/lang_string.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.d.ts.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 -1
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist-extensions/cropping_controls/croppingControls.mjs +140 -0
- package/dist-extensions/cropping_controls/croppingControls.mjs.map +1 -0
- package/dist-extensions/cropping_controls/croppingHandlers.mjs +228 -0
- package/dist-extensions/cropping_controls/croppingHandlers.mjs.map +1 -0
- package/dist-extensions/cropping_controls/enterCropMode.mjs +38 -0
- package/dist-extensions/cropping_controls/enterCropMode.mjs.map +1 -0
- package/dist-extensions/cropping_controls/renderCornerControl.mjs +45 -0
- package/dist-extensions/cropping_controls/renderCornerControl.mjs.map +1 -0
- package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts +16 -0
- package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
- package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts +7 -0
- package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
- package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
- package/dist-extensions/extensions/index.d.ts +3 -0
- package/dist-extensions/extensions/index.d.ts.map +1 -1
- package/dist-extensions/fabric-extensions.min.js +1 -1
- package/dist-extensions/fabric-extensions.min.js.map +1 -1
- package/dist-extensions/fabric.d.ts +1 -0
- package/dist-extensions/fabric.d.ts.map +1 -1
- package/dist-extensions/index.mjs +3 -0
- package/dist-extensions/index.mjs.map +1 -1
- package/dist-extensions/src/EventTypeDefs.d.ts +5 -0
- package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -1
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist-extensions/src/Shadow.d.ts +1 -1
- package/dist-extensions/src/Shadow.d.ts.map +1 -1
- package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -1
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts +2 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -1
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist-extensions/src/constants.d.ts +1 -0
- package/dist-extensions/src/constants.d.ts.map +1 -1
- package/dist-extensions/src/controls/Control.d.ts +22 -1
- package/dist-extensions/src/controls/Control.d.ts.map +1 -1
- package/dist-extensions/src/controls/changeWidth.d.ts +22 -0
- package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -1
- package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -1
- package/dist-extensions/src/controls/index.d.ts +2 -1
- package/dist-extensions/src/controls/index.d.ts.map +1 -1
- package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Circle.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Group.d.ts.map +1 -1
- package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Path.d.ts +1 -1
- package/dist-extensions/src/shapes/Path.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Rect.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
- package/dist-extensions/src/util/lang_string.d.ts +1 -1
- package/dist-extensions/src/util/lang_string.d.ts.map +1 -1
- package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -1
- package/eslint.config.mjs +2 -0
- package/extensions/cropping_controls/croppingControls.spec.ts +115 -0
- package/extensions/cropping_controls/croppingControls.ts +150 -0
- package/extensions/cropping_controls/croppingHandlers.spec.ts +579 -0
- package/extensions/cropping_controls/croppingHandlers.ts +285 -0
- package/extensions/cropping_controls/enterCropMode.ts +30 -0
- package/extensions/cropping_controls/renderCornerControl.ts +53 -0
- package/extensions/index.ts +9 -0
- package/fabric.ts +1 -0
- package/package.json +17 -8
- package/src/ClassRegistry.spec.ts +18 -19
- package/src/EventTypeDefs.ts +15 -11
- package/src/Pattern/Pattern.spec.ts +12 -0
- package/src/Pattern/Pattern.ts +3 -2
- package/src/Shadow.ts +9 -8
- package/src/brushes/PencilBrush.spec.ts +11 -11
- package/src/canvas/Canvas-dispose.spec.ts +8 -7
- package/src/canvas/Canvas.spec.ts +27 -29
- package/src/canvas/CanvasOptions.ts +2 -1
- package/src/canvas/SelectableCanvas.ts +38 -15
- package/src/canvas/StaticCanvas.spec.ts +20 -0
- package/src/canvas/StaticCanvas.ts +7 -4
- package/src/canvas/StaticCanvasOptions.ts +1 -3
- package/src/constants.ts +1 -0
- package/src/controls/Control.spec.ts +102 -0
- package/src/controls/Control.ts +71 -2
- package/src/controls/changeHeight.spec.ts +147 -0
- package/src/controls/changeWidth.ts +68 -35
- package/src/controls/controlRendering.ts +20 -48
- package/src/controls/index.ts +7 -1
- package/src/gradient/Gradient.spec.ts +101 -46
- package/src/gradient/Gradient.ts +27 -14
- package/src/shapes/Circle.spec.ts +10 -39
- package/src/shapes/Circle.ts +11 -11
- package/src/shapes/Ellipse.spec.ts +8 -37
- package/src/shapes/Ellipse.ts +7 -7
- package/src/shapes/Group.ts +3 -3
- package/src/shapes/IText/IText-click-behavior.spec.ts +36 -49
- package/src/shapes/IText/IText.ts +5 -6
- package/src/shapes/IText/ITextKeyBehavior.test.ts +0 -1
- package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +6 -6
- package/src/shapes/Image.spec.ts +17 -33
- package/src/shapes/Image.ts +15 -11
- package/src/shapes/Line.spec.ts +4 -30
- package/src/shapes/Line.ts +11 -16
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +11 -4
- package/src/shapes/Object/InteractiveObject.ts +4 -4
- package/src/shapes/Object/Object.ts +6 -5
- package/src/shapes/Object/ObjectGeometry.spec.ts +15 -0
- package/src/shapes/Object/ObjectGeometry.ts +1 -1
- package/src/shapes/Object/objectSvgExport.spec.ts +112 -0
- package/src/shapes/Object/types/FabricObjectProps.ts +1 -4
- package/src/shapes/Object/types/ObjectProps.ts +1 -3
- package/src/shapes/Path.spec.ts +4 -27
- package/src/shapes/Path.ts +2 -4
- package/src/shapes/Polygon.spec.ts +4 -31
- package/src/shapes/Polyline.spec.ts +4 -31
- package/src/shapes/Polyline.ts +11 -12
- package/src/shapes/Rect.spec.ts +25 -33
- package/src/shapes/Rect.ts +7 -7
- package/src/shapes/Text/StyledText.ts +0 -3
- package/src/shapes/Text/Text.spec.ts +3 -32
- package/src/shapes/Text/Text.ts +5 -6
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +9 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +14 -16
- package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +1 -1
- package/src/shapes/Text/__snapshots__/TextSVGExportMixin.spec.ts.snap +1 -1
- package/src/shapes/Textbox.spec.ts +5 -5
- package/src/shapes/Textbox.ts +6 -5
- package/src/shapes/Triangle.ts +4 -4
- package/src/shapes/__snapshots__/Image.spec.ts.snap +4 -4
- package/src/shapes/__snapshots__/Textbox.spec.ts.snap +5 -5
- package/src/util/lang_string.ts +3 -2
- package/src/util/misc/svgParsing.ts +2 -1
- package/tsconfig.spec.json +1 -0
- package/vitest.config.ts +12 -2
- package/vitest.extend.ts +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Group.mjs","sources":["../../../src/shapes/Group.ts"],"sourcesContent":["import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\nimport type { DrawContext } from './Object/Object';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps,\n GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial<TClassProperties<Group>> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject<GroupProps, SerializedGroupProps, GroupEvents>,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record<string, any> = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial<GroupProps> = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor<T extends boolean>(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the group should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n const obj = this._objects[i];\n // TODO: handle rendering edge case somehow\n if (this.canvas?.preserveObjectStacking && obj.group !== this) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n obj.render(ctx);\n ctx.restore();\n } else if (obj.group === this) {\n obj.render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath, context);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties<this>,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#<Group: (${this.complexity()})>`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['<g ', 'COMMON_PARTS', ' >\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('</g>\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${this.opacity};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @param {Object} object Object to create a group from\n * @returns {Promise<Group>}\n */\n static fromObject<T extends TOptions<SerializedGroupProps>>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects<FabricObject>(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass<typeof LayoutManager>(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass<typeof FitContentLayout>(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n"],"names":["NoopLayoutManager","LayoutManager","performLayout","groupDefaultValues","strokeWidth","subTargetCheck","interactive","Group","createCollectionMixin","FabricObject","getDefaults","ownDefaults","constructor","objects","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","groupInit","_options$layoutManage","_objects","__objectSelectionTracker","__objectSelectionMonitor","bind","__objectSelectionDisposer","forEachObject","object","enterGroup","layoutManager","type","LAYOUT_TYPE_INITIALIZATION","target","targets","x","left","y","top","canEnterGroup","isDescendantOf","log","indexOf","_filterObjectsBeforeEnteringGroup","filter","index","array","add","_len","Array","_key","allowedObjects","size","_onAfterObjectsChange","LAYOUT_TYPE_ADDED","insertAt","_len2","_key2","remove","removed","LAYOUT_TYPE_REMOVED","_onObjectAdded","fire","_onObjectRemoved","removeParentTransform","exitGroup","_onStackOrderChanged","_set","key","value","prev","forEach","_shouldSetNestedCoords","removeAll","_activeObjects","selected","_ref","activeObjects","push","splice","_watchObject","watch","on","off","group","_enterGroup","applyTransformToObject","multiplyTransformMatrices","invertTransform","calcTransformMatrix","setCoords","canvas","activeObject","getActiveObject","_exitGroup","shouldCache","ownCache","prototype","call","i","willDrawShadow","ownCaching","isOnACache","parent","drawObject","ctx","forClipping","context","_renderBackground","_this$canvas","obj","preserveObjectStacking","save","transform","render","restore","_drawClipPath","clipPath","triggerLayout","LAYOUT_TYPE_IMPERATIVE","_transformDone","__serializeObjects","method","propertiesToInclude","_includeDefaultValues","includeDefaultValues","excludeFromExport","map","originalDefaults","data","toObject","strategy","toString","complexity","dispose","unsubscribeTargets","getObjects","_createSVGBgRect","reviver","backgroundColor","fillStroke","Rect","_toSVG","commons","markup","join","svgString","bg","toSVG","getSvgStyles","opacity","visibility","visible","getSvgFilter","toClipPathSVG","_createBaseClipPathSVGMarkup","fromObject","_ref2","abortable","Promise","all","enlivenObjects","enlivenObjectEnlivables","then","_ref3","hydratedOptions","layoutClass","classRegistry","getClass","strategyClass","subscribeTargets","setClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Group.mjs","sources":["../../../src/shapes/Group.ts"],"sourcesContent":["import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\nimport type { DrawContext } from './Object/Object';\nimport { escapeXml } from '../util/lang_string';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps, GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial<TClassProperties<Group>> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject<GroupProps, SerializedGroupProps, GroupEvents>,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record<string, any> = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial<GroupProps> = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor<T extends boolean>(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the group should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n const obj = this._objects[i];\n // TODO: handle rendering edge case somehow\n if (this.canvas?.preserveObjectStacking && obj.group !== this) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n obj.render(ctx);\n ctx.restore();\n } else if (obj.group === this) {\n obj.render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath, context);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties<this>,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#<Group: (${this.complexity()})>`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['<g ', 'COMMON_PARTS', ' >\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('</g>\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${escapeXml(this.opacity)};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @param {Object} object Object to create a group from\n * @returns {Promise<Group>}\n */\n static fromObject<T extends TOptions<SerializedGroupProps>>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects<FabricObject>(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass<typeof LayoutManager>(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass<typeof FitContentLayout>(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n"],"names":["NoopLayoutManager","LayoutManager","performLayout","groupDefaultValues","strokeWidth","subTargetCheck","interactive","Group","createCollectionMixin","FabricObject","getDefaults","ownDefaults","constructor","objects","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","groupInit","_options$layoutManage","_objects","__objectSelectionTracker","__objectSelectionMonitor","bind","__objectSelectionDisposer","forEachObject","object","enterGroup","layoutManager","type","LAYOUT_TYPE_INITIALIZATION","target","targets","x","left","y","top","canEnterGroup","isDescendantOf","log","indexOf","_filterObjectsBeforeEnteringGroup","filter","index","array","add","_len","Array","_key","allowedObjects","size","_onAfterObjectsChange","LAYOUT_TYPE_ADDED","insertAt","_len2","_key2","remove","removed","LAYOUT_TYPE_REMOVED","_onObjectAdded","fire","_onObjectRemoved","removeParentTransform","exitGroup","_onStackOrderChanged","_set","key","value","prev","forEach","_shouldSetNestedCoords","removeAll","_activeObjects","selected","_ref","activeObjects","push","splice","_watchObject","watch","on","off","group","_enterGroup","applyTransformToObject","multiplyTransformMatrices","invertTransform","calcTransformMatrix","setCoords","canvas","activeObject","getActiveObject","_exitGroup","shouldCache","ownCache","prototype","call","i","willDrawShadow","ownCaching","isOnACache","parent","drawObject","ctx","forClipping","context","_renderBackground","_this$canvas","obj","preserveObjectStacking","save","transform","render","restore","_drawClipPath","clipPath","triggerLayout","LAYOUT_TYPE_IMPERATIVE","_transformDone","__serializeObjects","method","propertiesToInclude","_includeDefaultValues","includeDefaultValues","excludeFromExport","map","originalDefaults","data","toObject","strategy","toString","complexity","dispose","unsubscribeTargets","getObjects","_createSVGBgRect","reviver","backgroundColor","fillStroke","Rect","_toSVG","commons","markup","join","svgString","bg","toSVG","getSvgStyles","opacity","escapeXml","visibility","visible","getSvgFilter","toClipPathSVG","_createBaseClipPathSVGMarkup","fromObject","_ref2","abortable","Promise","all","enlivenObjects","enlivenObjectEnlivables","then","_ref3","hydratedOptions","layoutClass","classRegistry","getClass","strategyClass","subscribeTargets","setClass"],"mappings":";;;;;;;;;;;;;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,SAASC,aAAa,CAAC;EAC5CC,aAAaA,GAAG,CAAC;AACnB;AAsBO,MAAMC,kBAAoD,GAAG;AAClEC,EAAAA,WAAW,EAAE,CAAC;AACdC,EAAAA,cAAc,EAAE,KAAK;AACrBC,EAAAA,WAAW,EAAE;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,KAAK,SACRC,qBAAqB,CAC3BC,YACF,CAAC,CAEH;EAqCE,OAAOC,WAAWA,GAAwB;IACxC,OAAO;AACL,MAAA,GAAG,KAAK,CAACA,WAAW,EAAE;AACtB,MAAA,GAAGH,KAAK,CAACI;KACV;AACH,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAWA,GAAkE;AAAA,IAAA,IAAjEC,OAAuB,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,IAAA,IAAEG,OAA4B,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACzE,IAAA,KAAK,EAAE;AAlDT;AACF;AACA;AACA;AACA;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKE;AACF;AACA;AACA;AACA;AACA;AALEI,IAAAA,eAAA,yBAM2C,EAAE,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,0BAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,2BAAA,EAAA,MAAA,CAAA;IAuB3CC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEb,KAAK,CAACI,WAAW,CAAC;AACtC,IAAA,IAAI,CAACU,UAAU,CAACJ,OAAO,CAAC;AACxB,IAAA,IAAI,CAACK,SAAS,CAACT,OAAO,EAAEI,OAAO,CAAC;AAClC,EAAA;;AAEA;AACF;AACA;AACA;AACYK,EAAAA,SAASA,CACjBT,OAAuB,EACvBI,OAIC,EACD;AAAA,IAAA,IAAAM,qBAAA;IACA,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAGX,OAAO,CAAC,CAAC;;AAE7B,IAAA,IAAI,CAACY,wBAAwB,GAAG,IAAI,CAACC,wBAAwB,CAACC,IAAI,CAChE,IAAI,EACJ,IACF,CAAC;AACD,IAAA,IAAI,CAACC,yBAAyB,GAAG,IAAI,CAACF,wBAAwB,CAACC,IAAI,CACjE,IAAI,EACJ,KACF,CAAC;AAED,IAAA,IAAI,CAACE,aAAa,CAAEC,MAAM,IAAK;AAC7B,MAAA,IAAI,CAACC,UAAU,CAACD,MAAM,EAAE,KAAK,CAAC;AAChC,IAAA,CAAC,CAAC;;AAEF;AACA,IAAA,IAAI,CAACE,aAAa,GAAA,CAAAT,qBAAA,GAAGN,OAAO,CAACe,aAAa,MAAA,IAAA,IAAAT,qBAAA,cAAAA,qBAAA,GAAI,IAAItB,aAAa,EAAE;AACjE,IAAA,IAAI,CAAC+B,aAAa,CAAC9B,aAAa,CAAC;AAC/B+B,MAAAA,IAAI,EAAEC,0BAA0B;AAChCC,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,OAAO,EAAE,CAAC,GAAGvB,OAAO,CAAC;AACrB;AACA;AACA;MACAwB,CAAC,EAAEpB,OAAO,CAACqB,IAAI;MACfC,CAAC,EAAEtB,OAAO,CAACuB;AACb,KAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,aAAaA,CAACX,MAAoB,EAAE;IAClC,IAAIA,MAAM,KAAK,IAAI,IAAI,IAAI,CAACY,cAAc,CAACZ,MAAM,CAAC,EAAE;AAClD;AACAa,MAAAA,GAAG,CACD,OAAO,EACP,yEACF,CAAC;AACD,MAAA,OAAO,KAAK;AACd,IAAA,CAAC,MAAM,IAAI,IAAI,CAACnB,QAAQ,CAACoB,OAAO,CAACd,MAAM,CAAC,KAAK,EAAE,EAAE;AAC/C;AACAa,MAAAA,GAAG,CACD,OAAO,EACP,kFACF,CAAC;AACD,MAAA,OAAO,KAAK;AACd,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACYE,iCAAiCA,CAAChC,OAAuB,EAAE;IACnE,OAAOA,OAAO,CAACiC,MAAM,CAAC,CAAChB,MAAM,EAAEiB,KAAK,EAAEC,KAAK,KAAK;AAC9C;AACA,MAAA,OAAO,IAAI,CAACP,aAAa,CAACX,MAAM,CAAC,IAAIkB,KAAK,CAACJ,OAAO,CAACd,MAAM,CAAC,KAAKiB,KAAK;AACtE,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,GAAGA,GAA6B;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAApC,SAAA,CAAAC,MAAA,EAAzBF,OAAO,GAAA,IAAAsC,KAAA,CAAAD,IAAA,GAAAE,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA,EAAA,EAAA;AAAPvC,MAAAA,OAAO,CAAAuC,IAAA,CAAA,GAAAtC,SAAA,CAAAsC,IAAA,CAAA;AAAA,IAAA;AACZ,IAAA,MAAMC,cAAc,GAAG,IAAI,CAACR,iCAAiC,CAAChC,OAAO,CAAC;IACtE,MAAMyC,IAAI,GAAG,KAAK,CAACL,GAAG,CAAC,GAAGI,cAAc,CAAC;AACzC,IAAA,IAAI,CAACE,qBAAqB,CAACC,iBAAiB,EAAEH,cAAc,CAAC;AAC7D,IAAA,OAAOC,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEG,QAAQA,CAACV,KAAa,EAA8B;IAAA,KAAA,IAAAW,KAAA,GAAA5C,SAAA,CAAAC,MAAA,EAAzBF,OAAO,OAAAsC,KAAA,CAAAO,KAAA,GAAA,CAAA,GAAAA,KAAA,WAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAP9C,MAAAA,OAAO,CAAA8C,KAAA,GAAA,CAAA,CAAA,GAAA7C,SAAA,CAAA6C,KAAA,CAAA;AAAA,IAAA;AAChC,IAAA,MAAMN,cAAc,GAAG,IAAI,CAACR,iCAAiC,CAAChC,OAAO,CAAC;IACtE,MAAMyC,IAAI,GAAG,KAAK,CAACG,QAAQ,CAACV,KAAK,EAAE,GAAGM,cAAc,CAAC;AACrD,IAAA,IAAI,CAACE,qBAAqB,CAACC,iBAAiB,EAAEH,cAAc,CAAC;AAC7D,IAAA,OAAOC,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEM,EAAAA,MAAMA,GAA6B;IACjC,MAAMC,OAAO,GAAG,KAAK,CAACD,MAAM,CAAC,GAAA9C,SAAU,CAAC;AACxC,IAAA,IAAI,CAACyC,qBAAqB,CAACO,mBAAmB,EAAED,OAAO,CAAC;AACxD,IAAA,OAAOA,OAAO;AAChB,EAAA;EAEAE,cAAcA,CAACjC,MAAoB,EAAE;AACnC,IAAA,IAAI,CAACC,UAAU,CAACD,MAAM,EAAE,IAAI,CAAC;AAC7B,IAAA,IAAI,CAACkC,IAAI,CAAC,cAAc,EAAE;AAAE7B,MAAAA,MAAM,EAAEL;AAAO,KAAC,CAAC;AAC7CA,IAAAA,MAAM,CAACkC,IAAI,CAAC,OAAO,EAAE;AAAE7B,MAAAA,MAAM,EAAE;AAAK,KAAC,CAAC;AACxC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE8B,EAAAA,gBAAgBA,CAACnC,MAAoB,EAAEoC,qBAA+B,EAAE;AACtE,IAAA,IAAI,CAACC,SAAS,CAACrC,MAAM,EAAEoC,qBAAqB,CAAC;AAC7C,IAAA,IAAI,CAACF,IAAI,CAAC,gBAAgB,EAAE;AAAE7B,MAAAA,MAAM,EAAEL;AAAO,KAAC,CAAC;AAC/CA,IAAAA,MAAM,CAACkC,IAAI,CAAC,SAAS,EAAE;AAAE7B,MAAAA,MAAM,EAAE;AAAK,KAAC,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEoB,EAAAA,qBAAqBA,CAACtB,IAAyB,EAAEG,OAAuB,EAAE;AACxE,IAAA,IAAI,CAACJ,aAAa,CAAC9B,aAAa,CAAC;MAC/B+B,IAAI;MACJG,OAAO;AACPD,MAAAA,MAAM,EAAE;AACV,KAAC,CAAC;AACJ,EAAA;AAEAiC,EAAAA,oBAAoBA,GAAG;AACrB,IAAA,IAAI,CAACC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEA,EAAAA,IAAIA,CAACC,GAAW,EAAEC,KAAU,EAAE;AAC5B,IAAA,MAAMC,IAAI,GAAG,IAAI,CAACF,GAAG,CAAe;AACpC,IAAA,KAAK,CAACD,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC;AACtB,IAAA,IAAID,GAAG,KAAK,QAAQ,IAAIE,IAAI,KAAKD,KAAK,EAAE;MACtC,CAAC,IAAI,CAAC/C,QAAQ,IAAI,EAAE,EAAEiD,OAAO,CAAE3C,MAAM,IAAK;AACxCA,QAAAA,MAAM,CAACuC,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC;AACzB,MAAA,CAAC,CAAC;AACJ,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACEG,EAAAA,sBAAsBA,GAAG;IACvB,OAAO,IAAI,CAACrE,cAAc;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACEsE,EAAAA,SAASA,GAAG;IACV,IAAI,CAACC,cAAc,GAAG,EAAE;IACxB,OAAO,IAAI,CAAChB,MAAM,CAAC,GAAG,IAAI,CAACpC,QAAQ,CAAC;AACtC,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,wBAAwBA,CACtBmD,QAAW,EAAAC,IAAA,EAIX;IAAA,IAHA;AACE3C,MAAAA,MAAM,EAAEL;AACgD,KAAC,GAAAgD,IAAA;AAE3D,IAAA,MAAMC,aAAa,GAAG,IAAI,CAACH,cAAc;AACzC,IAAA,IAAIC,QAAQ,EAAE;AACZE,MAAAA,aAAa,CAACC,IAAI,CAAClD,MAAM,CAAC;AAC1B,MAAA,IAAI,CAACuC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1B,IAAA,CAAC,MAAM,IAAIU,aAAa,CAAChE,MAAM,GAAG,CAAC,EAAE;AACnC,MAAA,MAAMgC,KAAK,GAAGgC,aAAa,CAACnC,OAAO,CAACd,MAAM,CAAC;AAC3C,MAAA,IAAIiB,KAAK,GAAG,EAAE,EAAE;AACdgC,QAAAA,aAAa,CAACE,MAAM,CAAClC,KAAK,EAAE,CAAC,CAAC;AAC9B,QAAA,IAAI,CAACsB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1B,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEa,EAAAA,YAAYA,CAACC,KAAc,EAAErD,MAAoB,EAAE;AACjD;IACAqD,KAAK,IAAI,IAAI,CAACD,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC;AACzC,IAAA,IAAIqD,KAAK,EAAE;MACTrD,MAAM,CAACsD,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC3D,wBAAwB,CAAC;MACpDK,MAAM,CAACsD,EAAE,CAAC,YAAY,EAAE,IAAI,CAACxD,yBAAyB,CAAC;AACzD,IAAA,CAAC,MAAM;MACLE,MAAM,CAACuD,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC5D,wBAAwB,CAAC;MACrDK,MAAM,CAACuD,GAAG,CAAC,YAAY,EAAE,IAAI,CAACzD,yBAAyB,CAAC;AAC1D,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEG,EAAAA,UAAUA,CAACD,MAAoB,EAAEoC,qBAA+B,EAAE;IAChEpC,MAAM,CAACwD,KAAK,IAAIxD,MAAM,CAACwD,KAAK,CAAC1B,MAAM,CAAC9B,MAAM,CAAC;AAC3CA,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3B,IAAA,IAAI,CAACkB,WAAW,CAACzD,MAAM,EAAEoC,qBAAqB,CAAC;AACjD,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEqB,EAAAA,WAAWA,CAACzD,MAAoB,EAAEoC,qBAA+B,EAAE;AACjE,IAAA,IAAIA,qBAAqB,EAAE;AACzB;MACAsB,sBAAsB,CACpB1D,MAAM,EACN2D,yBAAyB,CACvBC,eAAe,CAAC,IAAI,CAACC,mBAAmB,EAAE,CAAC,EAC3C7D,MAAM,CAAC6D,mBAAmB,EAC5B,CACF,CAAC;AACH,IAAA;IACA,IAAI,CAACjB,sBAAsB,EAAE,IAAI5C,MAAM,CAAC8D,SAAS,EAAE;AACnD9D,IAAAA,MAAM,CAACuC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IAC1BvC,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAACwB,MAAM,CAAC;AAClC,IAAA,IAAI,CAACX,YAAY,CAAC,IAAI,EAAEpD,MAAM,CAAC;AAC/B,IAAA,MAAMgE,YAAY,GAChB,IAAI,CAACD,MAAM,IACX,IAAI,CAACA,MAAM,CAACE,eAAe,IAC3B,IAAI,CAACF,MAAM,CAACE,eAAe,EAAE;AAC/B;AACA,IAAA,IACED,YAAY,KACXA,YAAY,KAAKhE,MAAM,IAAIA,MAAM,CAACY,cAAc,CAACoD,YAAY,CAAC,CAAC,EAChE;AACA,MAAA,IAAI,CAAClB,cAAc,CAACI,IAAI,CAAClD,MAAM,CAAC;AAClC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEqC,EAAAA,SAASA,CAACrC,MAAoB,EAAEoC,qBAA+B,EAAE;AAC/D,IAAA,IAAI,CAAC8B,UAAU,CAAClE,MAAM,EAAEoC,qBAAqB,CAAC;AAC9CpC,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAErD,SAAS,CAAC;AAChCc,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAErD,SAAS,CAAC;AAClC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEgF,EAAAA,UAAUA,CAAClE,MAAoB,EAAEoC,qBAA+B,EAAE;AAChEpC,IAAAA,MAAM,CAACuC,IAAI,CAAC,OAAO,EAAErD,SAAS,CAAC;IAC/B,IAAI,CAACkD,qBAAqB,EAAE;AAC1BsB,MAAAA,sBAAsB,CACpB1D,MAAM,EACN2D,yBAAyB,CACvB,IAAI,CAACE,mBAAmB,EAAE,EAC1B7D,MAAM,CAAC6D,mBAAmB,EAC5B,CACF,CAAC;MACD7D,MAAM,CAAC8D,SAAS,EAAE;AACpB,IAAA;AACA,IAAA,IAAI,CAACV,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC;IAChC,MAAMiB,KAAK,GACT,IAAI,CAAC6B,cAAc,CAAC7D,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC6D,cAAc,CAAChC,OAAO,CAACd,MAAM,CAAC,GAAG,EAAE;AAC3E,IAAA,IAAIiB,KAAK,GAAG,EAAE,EAAE;MACd,IAAI,CAAC6B,cAAc,CAACK,MAAM,CAAClC,KAAK,EAAE,CAAC,CAAC;AACtC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEkD,EAAAA,WAAWA,GAAG;IACZ,MAAMC,QAAQ,GAAGzF,YAAY,CAAC0F,SAAS,CAACF,WAAW,CAACG,IAAI,CAAC,IAAI,CAAC;AAC9D,IAAA,IAAIF,QAAQ,EAAE;AACZ,MAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACT,MAAM,EAAEsF,CAAC,EAAE,EAAE;QAC7C,IAAI,IAAI,CAAC7E,QAAQ,CAAC6E,CAAC,CAAC,CAACC,cAAc,EAAE,EAAE;UACrC,IAAI,CAACC,UAAU,GAAG,KAAK;AACvB,UAAA,OAAO,KAAK;AACd,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAOL,QAAQ;AACjB,EAAA;;AAEA;AACF;AACA;AACA;AACEI,EAAAA,cAAcA,GAAG;AACf,IAAA,IAAI,KAAK,CAACA,cAAc,EAAE,EAAE;AAC1B,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACT,MAAM,EAAEsF,CAAC,EAAE,EAAE;MAC7C,IAAI,IAAI,CAAC7E,QAAQ,CAAC6E,CAAC,CAAC,CAACC,cAAc,EAAE,EAAE;AACrC,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AACA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,UAAUA,GAAY;AACpB,IAAA,OAAO,IAAI,CAACD,UAAU,IAAK,CAAC,CAAC,IAAI,CAACE,MAAM,IAAI,IAAI,CAACA,MAAM,CAACD,UAAU,EAAG;AACvE,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,UAAUA,CACRC,GAA6B,EAC7BC,WAAgC,EAChCC,OAAoB,EACpB;AACA,IAAA,IAAI,CAACC,iBAAiB,CAACH,GAAG,CAAC;AAC3B,IAAA,KAAK,IAAIN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACT,MAAM,EAAEsF,CAAC,EAAE,EAAE;AAAA,MAAA,IAAAU,YAAA;AAC7C,MAAA,MAAMC,GAAG,GAAG,IAAI,CAACxF,QAAQ,CAAC6E,CAAC,CAAC;AAC5B;AACA,MAAA,IAAI,CAAAU,YAAA,GAAA,IAAI,CAAClB,MAAM,cAAAkB,YAAA,KAAA,MAAA,IAAXA,YAAA,CAAaE,sBAAsB,IAAID,GAAG,CAAC1B,KAAK,KAAK,IAAI,EAAE;QAC7DqB,GAAG,CAACO,IAAI,EAAE;AACVP,QAAAA,GAAG,CAACQ,SAAS,CAAC,GAAGzB,eAAe,CAAC,IAAI,CAACC,mBAAmB,EAAE,CAAC,CAAC;AAC7DqB,QAAAA,GAAG,CAACI,MAAM,CAACT,GAAG,CAAC;QACfA,GAAG,CAACU,OAAO,EAAE;AACf,MAAA,CAAC,MAAM,IAAIL,GAAG,CAAC1B,KAAK,KAAK,IAAI,EAAE;AAC7B0B,QAAAA,GAAG,CAACI,MAAM,CAACT,GAAG,CAAC;AACjB,MAAA;AACF,IAAA;IACA,IAAI,CAACW,aAAa,CAACX,GAAG,EAAE,IAAI,CAACY,QAAQ,EAAEV,OAAO,CAAC;AACjD,EAAA;;AAEA;AACF;AACA;AACA;AACEjB,EAAAA,SAASA,GAAG;IACV,KAAK,CAACA,SAAS,EAAE;AACjB,IAAA,IAAI,CAAClB,sBAAsB,EAAE,IAC3B,IAAI,CAAC7C,aAAa,CAAEC,MAAM,IAAKA,MAAM,CAAC8D,SAAS,EAAE,CAAC;AACtD,EAAA;AAEA4B,EAAAA,aAAaA,GAAwC;AAAA,IAAA,IAAvCvG,OAAgC,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACjD,IAAA,IAAI,CAACkB,aAAa,CAAC9B,aAAa,CAAC;AAC/BiC,MAAAA,MAAM,EAAE,IAAI;AACZF,MAAAA,IAAI,EAAEwF,sBAAsB;MAC5B,GAAGxG;AACL,KAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;EACEmG,MAAMA,CAACT,GAA6B,EAAE;IACpC,IAAI,CAACe,cAAc,GAAG,IAAI;AAC1B,IAAA,KAAK,CAACN,MAAM,CAACT,GAAG,CAAC;IACjB,IAAI,CAACe,cAAc,GAAG,KAAK;AAC7B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,kBAAkBA,CAChBC,MAAuC,EACvCC,mBAA8B,EAC9B;AACA,IAAA,MAAMC,qBAAqB,GAAG,IAAI,CAACC,oBAAoB;IACvD,OAAO,IAAI,CAACvG,QAAQ,CACjBsB,MAAM,CAAC,UAAUkE,GAAG,EAAE;MACrB,OAAO,CAACA,GAAG,CAACgB,iBAAiB;AAC/B,IAAA,CAAC,CAAC,CACDC,GAAG,CAAC,UAAUjB,GAAG,EAAE;AAClB,MAAA,MAAMkB,gBAAgB,GAAGlB,GAAG,CAACe,oBAAoB;MACjDf,GAAG,CAACe,oBAAoB,GAAGD,qBAAqB;MAChD,MAAMK,IAAI,GAAGnB,GAAG,CAACY,MAAM,IAAI,UAAU,CAAC,CAACC,mBAAmB,CAAC;MAC3Db,GAAG,CAACe,oBAAoB,GAAGG,gBAAgB;AAC3C;AACA,MAAA,OAAOC,IAAI;AACb,IAAA,CAAC,CAAC;AACN,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEC,EAAAA,QAAQA,GAM4D;AAAA,IAAA,IAAlEP,mBAAwB,GAAA/G,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;IAC7B,MAAMkB,aAAa,GAAG,IAAI,CAACA,aAAa,CAACoG,QAAQ,EAAE;IAEnD,OAAO;AACL,MAAA,GAAG,KAAK,CAACA,QAAQ,CAAC,CAChB,gBAAgB,EAChB,aAAa,EACb,GAAGP,mBAAmB,CACvB,CAAC;MACF,IAAI7F,aAAa,CAACqG,QAAQ,KAAK,aAAa,IAAI,IAAI,CAACN,oBAAoB,GACrE;AAAE/F,QAAAA;OAAe,GACjB,EAAE,CAAC;AACPnB,MAAAA,OAAO,EAAE,IAAI,CAAC8G,kBAAkB,CAC9B,UAAU,EACVE,mBACF;KACD;AACH,EAAA;AAEAS,EAAAA,QAAQA,GAAG;AACT,IAAA,OAAO,aAAa,IAAI,CAACC,UAAU,EAAE,CAAA,EAAA,CAAI;AAC3C,EAAA;AAEAC,EAAAA,OAAOA,GAAG;AACR,IAAA,IAAI,CAACxG,aAAa,CAACyG,kBAAkB,CAAC;AACpCrG,MAAAA,OAAO,EAAE,IAAI,CAACsG,UAAU,EAAE;AAC1BvG,MAAAA,MAAM,EAAE;AACV,KAAC,CAAC;IACF,IAAI,CAACyC,cAAc,GAAG,EAAE;AACxB,IAAA,IAAI,CAAC/C,aAAa,CAAEC,MAAM,IAAK;AAC7B,MAAA,IAAI,CAACoD,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC;MAChCA,MAAM,CAAC0G,OAAO,EAAE;AAClB,IAAA,CAAC,CAAC;IACF,KAAK,CAACA,OAAO,EAAE;AACjB,EAAA;;AAEA;AACF;AACA;EACEG,gBAAgBA,CAACC,OAAqB,EAAE;AACtC,IAAA,IAAI,CAAC,IAAI,CAACC,eAAe,EAAE;AACzB,MAAA,OAAO,EAAE;AACX,IAAA;IACA,MAAMC,UAAU,GAAGC,IAAI,CAAC5C,SAAS,CAAC6C,MAAM,CAAC5C,IAAI,CAAC,IAAI,CAAC;AACnD,IAAA,MAAM6C,OAAO,GAAGH,UAAU,CAAClG,OAAO,CAAC,cAAc,CAAC;AAClDkG,IAAAA,UAAU,CAACG,OAAO,CAAC,GAAG,cAAc;AACpC,IAAA,MAAMC,MAAM,GAAGJ,UAAU,CAACK,IAAI,CAAC,EAAE,CAAC;AAClC,IAAA,OAAOP,OAAO,GAAGA,OAAO,CAACM,MAAM,CAAC,GAAGA,MAAM;AAC3C,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEF,MAAMA,CAACJ,OAAqB,EAAE;IAC5B,MAAMQ,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC;AACjD,IAAA,MAAMC,EAAE,GAAG,IAAI,CAACV,gBAAgB,CAACC,OAAO,CAAC;IACzCS,EAAE,IAAID,SAAS,CAACpE,IAAI,CAAC,MAAM,EAAEqE,EAAE,CAAC;AAChC,IAAA,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACT,MAAM,EAAEsF,CAAC,EAAE,EAAE;AAC7C+C,MAAAA,SAAS,CAACpE,IAAI,CAAC,MAAM,EAAE,IAAI,CAACxD,QAAQ,CAAC6E,CAAC,CAAC,CAACiD,KAAK,CAACV,OAAO,CAAC,CAAC;AACzD,IAAA;AACAQ,IAAAA,SAAS,CAACpE,IAAI,CAAC,QAAQ,CAAC;AACxB,IAAA,OAAOoE,SAAS;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACEG,EAAAA,YAAYA,GAAW;IACrB,MAAMC,OAAO,GACT,OAAO,IAAI,CAACA,OAAO,KAAK,WAAW,IAAI,IAAI,CAACA,OAAO,KAAK,CAAC,GACrD,CAAA,SAAA,EAAYC,SAAS,CAAC,IAAI,CAACD,OAAO,CAAC,CAAA,CAAA,CAAG,GACtC,EAAE;AACRE,MAAAA,UAAU,GAAG,IAAI,CAACC,OAAO,GAAG,EAAE,GAAG,sBAAsB;AACzD,IAAA,OAAO,CAACH,OAAO,EAAE,IAAI,CAACI,YAAY,EAAE,EAAEF,UAAU,CAAC,CAACP,IAAI,CAAC,EAAE,CAAC;AAC5D,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEU,aAAaA,CAACjB,OAAqB,EAAU;IAC3C,MAAMQ,SAAS,GAAG,EAAE;AACpB,IAAA,MAAMC,EAAE,GAAG,IAAI,CAACV,gBAAgB,CAACC,OAAO,CAAC;IACzCS,EAAE,IAAID,SAAS,CAACpE,IAAI,CAAC,IAAI,EAAEqE,EAAE,CAAC;AAC9B,IAAA,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACT,MAAM,EAAEsF,CAAC,EAAE,EAAE;AAC7C+C,MAAAA,SAAS,CAACpE,IAAI,CAAC,IAAI,EAAE,IAAI,CAACxD,QAAQ,CAAC6E,CAAC,CAAC,CAACwD,aAAa,CAACjB,OAAO,CAAC,CAAC;AAC/D,IAAA;AACA,IAAA,OAAO,IAAI,CAACkB,4BAA4B,CAACV,SAAS,EAAE;AAClDR,MAAAA;AACF,KAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE,EAAA,OAAOmB,UAAUA,CAAAC,KAAA,EAEfC,SAAqB,EACrB;IAAA,IAFA;MAAEhI,IAAI;AAAEpB,MAAAA,OAAO,GAAG,EAAE;MAAEmB,aAAa;MAAE,GAAGf;AAAW,KAAC,GAAA+I,KAAA;IAGpD,OAAOE,OAAO,CAACC,GAAG,CAAC,CACjBC,cAAc,CAAevJ,OAAO,EAAEoJ,SAAS,CAAC,EAChDI,uBAAuB,CAACpJ,OAAO,EAAEgJ,SAAS,CAAC,CAC5C,CAAC,CAACK,IAAI,CAACC,KAAA,IAAgC;AAAA,MAAA,IAA/B,CAAC1J,OAAO,EAAE2J,eAAe,CAAC,GAAAD,KAAA;AACjC,MAAA,MAAMjF,KAAK,GAAG,IAAI,IAAI,CAACzE,OAAO,EAAE;AAC9B,QAAA,GAAGI,OAAO;AACV,QAAA,GAAGuJ,eAAe;QAClBxI,aAAa,EAAE,IAAIhC,iBAAiB;AACtC,OAAC,CAAC;AACF,MAAA,IAAIgC,aAAa,EAAE;QACjB,MAAMyI,WAAW,GAAGC,aAAa,CAACC,QAAQ,CACxC3I,aAAa,CAACC,IAChB,CAAC;QACD,MAAM2I,aAAa,GAAGF,aAAa,CAACC,QAAQ,CAC1C3I,aAAa,CAACqG,QAChB,CAAC;QACD/C,KAAK,CAACtD,aAAa,GAAG,IAAIyI,WAAW,CAAC,IAAIG,aAAa,EAAE,CAAC;AAC5D,MAAA,CAAC,MAAM;AACLtF,QAAAA,KAAK,CAACtD,aAAa,GAAG,IAAI/B,aAAa,EAAE;AAC3C,MAAA;AACAqF,MAAAA,KAAK,CAACtD,aAAa,CAAC6I,gBAAgB,CAAC;AACnC5I,QAAAA,IAAI,EAAEC,0BAA0B;AAChCC,QAAAA,MAAM,EAAEmD,KAAK;AACblD,QAAAA,OAAO,EAAEkD,KAAK,CAACoD,UAAU;AAC3B,OAAC,CAAC;MACFpD,KAAK,CAACM,SAAS,EAAE;AACjB,MAAA,OAAON,KAAK;AACd,IAAA,CAAC,CAAC;AACJ,EAAA;AACF;AAACpE,eAAA,CAznBYX,KAAK,EAAA,MAAA,EAoCF,OAAO,CAAA;AAAAW,eAAA,CApCVX,KAAK,EAAA,aAAA,EAsC0BJ,kBAAkB,CAAA;AAqlB9DuK,aAAa,CAACI,QAAQ,CAACvK,KAAK,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IText.d.ts","sourceRoot":"","sources":["../../../../src/shapes/IText/IText.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQnE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAkB/D,CAAC;AAGF,UAAU,gBAAgB;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBACf,SAAQ,mBAAmB,
|
|
1
|
+
{"version":3,"file":"IText.d.ts","sourceRoot":"","sources":["../../../../src/shapes/IText/IText.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IText.min.mjs","sources":["../../../../src/shapes/IText/IText.ts"],"sourcesContent":["import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT, RTL } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { createCanvasElementFor } from '../../util/misc/dom';\nimport { applyCanvasTransform } from '../../util/internals/applyCanvasTransform';\n\nexport type CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\nexport type CursorRenderingData = {\n color: string;\n opacity: number;\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial<TClassProperties<IText>> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps,\n UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions<ITextProps> = Partial<ITextProps>,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends ITextClickBehavior<Props, SProps, EventSpec>\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing || !this.canvas) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n\n const ancestors = this.findAncestorsWithClipPath();\n const hasAncestorsWithClipping = ancestors.length > 0;\n let drawingCtx: CanvasRenderingContext2D = ctx;\n let drawingCanvas: HTMLCanvasElement | undefined = undefined;\n if (hasAncestorsWithClipping) {\n // we have some clipPath, we need to draw the selection on an intermediate layer.\n drawingCanvas = createCanvasElementFor(ctx.canvas);\n drawingCtx = drawingCanvas.getContext('2d')!;\n applyCanvasTransform(drawingCtx, this.canvas);\n const m = this.calcTransformMatrix();\n drawingCtx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) {\n this.renderCursor(drawingCtx, boundaries);\n } else {\n this.renderSelection(drawingCtx, boundaries);\n }\n\n if (hasAncestorsWithClipping) {\n // we need a neutral context.\n // this won't work for nested clippaths in which a clippath\n // has its own clippath\n for (const ancestor of ancestors) {\n const clipPath = ancestor.clipPath!;\n const clippingCanvas = createCanvasElementFor(ctx.canvas);\n const clippingCtx = clippingCanvas.getContext('2d')!;\n applyCanvasTransform(clippingCtx, this.canvas);\n // position the ctx in the center of the outer ancestor\n if (!clipPath.absolutePositioned) {\n const m = ancestor.calcTransformMatrix();\n clippingCtx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(clippingCtx);\n // we assign an empty drawing context, we don't plan to have this working for nested clippaths for now\n clipPath.drawObject(clippingCtx, true, {});\n this.drawClipPathOnCache(drawingCtx, clipPath, clippingCanvas);\n }\n }\n\n if (hasAncestorsWithClipping) {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(drawingCanvas!, 0, 0);\n }\n\n this.canvas.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Finds and returns an array of clip paths that are applied to the parent\n * group(s) of the current FabricObject instance. The object's hierarchy is\n * traversed upwards (from the current object towards the root of the canvas),\n * checking each parent object for the presence of a `clipPath` that is not\n * absolutely positioned.\n */\n findAncestorsWithClipPath(): FabricObject[] {\n const clipPathAncestors: FabricObject[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let obj: FabricObject | undefined = this;\n while (obj) {\n if (obj.clipPath) {\n clipPathAncestors.push(obj);\n }\n obj = obj.parent;\n }\n\n return clipPathAncestors;\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n const { textAlign, direction } = this;\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n let left = lineLeftOffset + (leftOffset > 0 ? leftOffset : 0);\n\n if (direction === RTL) {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n left *= -1;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return {\n top: topOffset,\n left,\n };\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n this._renderCursor(\n this.canvas!.contextTop,\n this._getCursorBoundaries(selectionStart, true),\n selectionStart,\n );\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n /**\n * Return the data needed to render the cursor for given selection start\n * The left,top are relative to the object, while width and height are prescaled\n * to look think with canvas zoom and object scaling,\n * so they depend on canvas and object scaling\n */\n getCursorRenderingData(\n selectionStart: number = this.selectionStart,\n boundaries: CursorBoundaries = this._getCursorBoundaries(selectionStart),\n ): CursorRenderingData {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n return {\n color:\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, 'fill') as string),\n opacity: this._currentCursorOpacity,\n left: boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n top: topOffset + boundaries.top + dy,\n width: cursorWidth,\n height: charHeight,\n };\n }\n\n /**\n * Render the cursor at the given selectionStart.\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const { color, opacity, left, top, width, height } =\n this.getCursorRenderingData(selectionStart, boundaries);\n ctx.fillStyle = color;\n ctx.globalAlpha = opacity;\n ctx.fillRect(left, top, width, height);\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const { textAlign, direction } = this;\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (direction === RTL) {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this.exitEditingImpl();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n"],"names":["iTextDefaultValues","selectionStart","selectionEnd","selectionColor","isEditing","editable","editingBorderColor","cursorWidth","cursorColor","cursorDelay","cursorDuration","caching","hiddenTextareaContainer","keysMap","keysMapRtl","ctrlKeysMapDown","ctrlKeysMapUp","_selectionDirection","_reSpace","inCompositionMode","IText","ITextClickBehavior","getDefaults","super","ownDefaults","type","constructor","text","options","this","initBehavior","_set","key","value","_savedProps","canvas","Canvas","textEditingManager","remove","add","setSelectionStart","index","Math","max","_updateAndFire","setSelectionEnd","min","length","property","_fireSelectionChanged","_updateTextarea","fire","target","initDimensions","initDelayedCursor","getSelectionStyles","startIndex","arguments","undefined","endIndex","complete","setSelectionStyles","styles","get2DCursorLocation","skipWrapping","render","ctx","cursorOffsetCache","renderCursorOrSelection","toCanvasElement","clearContextTop","boundaries","_getCursorBoundaries","ancestors","findAncestorsWithClipPath","hasAncestorsWithClipping","drawingCanvas","drawingCtx","createCanvasElementFor","getContext","applyCanvasTransform","m","calcTransformMatrix","transform","renderSelection","renderCursor","ancestor","clipPath","clippingCanvas","clippingCtx","absolutePositioned","drawObject","drawClipPathOnCache","setTransform","drawImage","contextTopDirty","restore","clipPathAncestors","obj","push","parent","skipCaching","left","_getLeftOffset","top","_getTopOffset","offsets","_getCursorBoundariesOffsets","leftOffset","topOffset","__getCursorBoundariesOffsets","charIndex","lineIndex","textAlign","direction","i","getHeightOfLine","lineLeftOffset","_getLineLeftOffset","bound","__charBounds","charSpacing","_textLines","_getWidthOfCharSpacing","RTL","RIGHT","JUSTIFY","JUSTIFY_RIGHT","LEFT","JUSTIFY_LEFT","CENTER","JUSTIFY_CENTER","renderCursorAt","_renderCursor","contextTop","getCursorRenderingData","cursorLocation","charHeight","getValueOfPropertyAt","multiplier","getObjectScaling","x","getZoom","dy","_fontSizeFraction","lineHeight","color","opacity","_currentCursorOpacity","width","height","fillStyle","globalAlpha","fillRect","selection","hiddenTextarea","_renderSelection","renderDragSourceEffect","dragStartSelection","draggableTextDelegate","getDragStartSelection","renderDropTargetEffect","e","dragSelection","getSelectionStartFromPointer","isJustify","includes","start","end","startLine","endLine","startChar","endChar","lineOffset","realLineHeight","boxStart","boxEnd","isEndOfWrapping","getLineWidth","drawStart","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","l","c","getCurrentCharColor","FILL","cursorPosition","dispose","exitEditingImpl","_defineProperty","classRegistry","setClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IText.min.mjs","sources":["../../../../src/shapes/IText/IText.ts"],"sourcesContent":["import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT, RTL } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { createCanvasElementFor } from '../../util/misc/dom';\nimport { applyCanvasTransform } from '../../util/internals/applyCanvasTransform';\n\nexport type CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\nexport type CursorRenderingData = {\n color: string;\n opacity: number;\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial<TClassProperties<IText>> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps, UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions<ITextProps> = Partial<ITextProps>,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n>\n extends ITextClickBehavior<Props, SProps, EventSpec>\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing || !this.canvas) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n\n const ancestors = this.findAncestorsWithClipPath();\n const hasAncestorsWithClipping = ancestors.length > 0;\n let drawingCtx: CanvasRenderingContext2D = ctx;\n let drawingCanvas: HTMLCanvasElement | undefined = undefined;\n if (hasAncestorsWithClipping) {\n // we have some clipPath, we need to draw the selection on an intermediate layer.\n drawingCanvas = createCanvasElementFor(ctx.canvas);\n drawingCtx = drawingCanvas.getContext('2d')!;\n applyCanvasTransform(drawingCtx, this.canvas);\n const m = this.calcTransformMatrix();\n drawingCtx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) {\n this.renderCursor(drawingCtx, boundaries);\n } else {\n this.renderSelection(drawingCtx, boundaries);\n }\n\n if (hasAncestorsWithClipping) {\n // we need a neutral context.\n // this won't work for nested clippaths in which a clippath\n // has its own clippath\n for (const ancestor of ancestors) {\n const clipPath = ancestor.clipPath!;\n const clippingCanvas = createCanvasElementFor(ctx.canvas);\n const clippingCtx = clippingCanvas.getContext('2d')!;\n applyCanvasTransform(clippingCtx, this.canvas);\n // position the ctx in the center of the outer ancestor\n if (!clipPath.absolutePositioned) {\n const m = ancestor.calcTransformMatrix();\n clippingCtx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(clippingCtx);\n // we assign an empty drawing context, we don't plan to have this working for nested clippaths for now\n clipPath.drawObject(clippingCtx, true, {});\n this.drawClipPathOnCache(drawingCtx, clipPath, clippingCanvas);\n }\n }\n\n if (hasAncestorsWithClipping) {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(drawingCanvas!, 0, 0);\n }\n\n this.canvas.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Finds and returns an array of clip paths that are applied to the parent\n * group(s) of the current FabricObject instance. The object's hierarchy is\n * traversed upwards (from the current object towards the root of the canvas),\n * checking each parent object for the presence of a `clipPath` that is not\n * absolutely positioned.\n */\n findAncestorsWithClipPath(): FabricObject[] {\n const clipPathAncestors: FabricObject[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let obj: FabricObject | undefined = this;\n while (obj) {\n if (obj.clipPath) {\n clipPathAncestors.push(obj);\n }\n obj = obj.parent;\n }\n\n return clipPathAncestors;\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n const { textAlign, direction } = this;\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n let left = lineLeftOffset + (leftOffset > 0 ? leftOffset : 0);\n\n if (direction === RTL) {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n left *= -1;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return {\n top: topOffset,\n left,\n };\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n this._renderCursor(\n this.canvas!.contextTop,\n this._getCursorBoundaries(selectionStart, true),\n selectionStart,\n );\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n /**\n * Return the data needed to render the cursor for given selection start\n * The left,top are relative to the object, while width and height are prescaled\n * to look think with canvas zoom and object scaling,\n * so they depend on canvas and object scaling\n */\n getCursorRenderingData(\n selectionStart: number = this.selectionStart,\n boundaries: CursorBoundaries = this._getCursorBoundaries(selectionStart),\n ): CursorRenderingData {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n return {\n color:\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, 'fill') as string),\n opacity: this._currentCursorOpacity,\n left: boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n top: topOffset + boundaries.top + dy,\n width: cursorWidth,\n height: charHeight,\n };\n }\n\n /**\n * Render the cursor at the given selectionStart.\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const { color, opacity, left, top, width, height } =\n this.getCursorRenderingData(selectionStart, boundaries);\n ctx.fillStyle = color;\n ctx.globalAlpha = opacity;\n ctx.fillRect(left, top, width, height);\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const { textAlign, direction } = this;\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (direction === RTL) {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this.exitEditingImpl();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n"],"names":["iTextDefaultValues","selectionStart","selectionEnd","selectionColor","isEditing","editable","editingBorderColor","cursorWidth","cursorColor","cursorDelay","cursorDuration","caching","hiddenTextareaContainer","keysMap","keysMapRtl","ctrlKeysMapDown","ctrlKeysMapUp","_selectionDirection","_reSpace","inCompositionMode","IText","ITextClickBehavior","getDefaults","super","ownDefaults","type","constructor","text","options","this","initBehavior","_set","key","value","_savedProps","canvas","Canvas","textEditingManager","remove","add","setSelectionStart","index","Math","max","_updateAndFire","setSelectionEnd","min","length","property","_fireSelectionChanged","_updateTextarea","fire","target","initDimensions","initDelayedCursor","getSelectionStyles","startIndex","arguments","undefined","endIndex","complete","setSelectionStyles","styles","get2DCursorLocation","skipWrapping","render","ctx","cursorOffsetCache","renderCursorOrSelection","toCanvasElement","clearContextTop","boundaries","_getCursorBoundaries","ancestors","findAncestorsWithClipPath","hasAncestorsWithClipping","drawingCanvas","drawingCtx","createCanvasElementFor","getContext","applyCanvasTransform","m","calcTransformMatrix","transform","renderSelection","renderCursor","ancestor","clipPath","clippingCanvas","clippingCtx","absolutePositioned","drawObject","drawClipPathOnCache","setTransform","drawImage","contextTopDirty","restore","clipPathAncestors","obj","push","parent","skipCaching","left","_getLeftOffset","top","_getTopOffset","offsets","_getCursorBoundariesOffsets","leftOffset","topOffset","__getCursorBoundariesOffsets","charIndex","lineIndex","textAlign","direction","i","getHeightOfLine","lineLeftOffset","_getLineLeftOffset","bound","__charBounds","charSpacing","_textLines","_getWidthOfCharSpacing","RTL","RIGHT","JUSTIFY","JUSTIFY_RIGHT","LEFT","JUSTIFY_LEFT","CENTER","JUSTIFY_CENTER","renderCursorAt","_renderCursor","contextTop","getCursorRenderingData","cursorLocation","charHeight","getValueOfPropertyAt","multiplier","getObjectScaling","x","getZoom","dy","_fontSizeFraction","lineHeight","color","opacity","_currentCursorOpacity","width","height","fillStyle","globalAlpha","fillRect","selection","hiddenTextarea","_renderSelection","renderDragSourceEffect","dragStartSelection","draggableTextDelegate","getDragStartSelection","renderDropTargetEffect","e","dragSelection","getSelectionStartFromPointer","isJustify","includes","start","end","startLine","endLine","startChar","endChar","lineOffset","realLineHeight","boxStart","boxEnd","isEndOfWrapping","getLineWidth","drawStart","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","l","c","getCurrentCharColor","FILL","cursorPosition","dispose","exitEditingImpl","_defineProperty","classRegistry","setClass"],"mappings":"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"}
|