@nasser-sw/fabric 7.0.1-beta13 → 7.0.1-beta14
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/.babelrc +0 -0
- package/.babelrcAlt +0 -0
- package/.browserslistrc +0 -0
- package/.editorconfig +0 -0
- package/.gitattributes +0 -0
- package/.gitpod.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/0 +0 -0
- package/CHANGELOG.md +0 -0
- package/CODE_OF_CONDUCT.md +0 -0
- package/CONTRIBUTING.md +0 -0
- package/LICENSE +0 -0
- package/OVERLAY_EDITOR_MIGRATION.md +0 -0
- package/README.md +0 -0
- package/SECURITY.md +0 -0
- package/debug/{konva-master → konva}/CHANGELOG.md +1 -2
- package/debug/{konva-master → konva}/LICENSE +0 -0
- package/debug/{konva-master → konva}/README.md +3 -7
- package/debug/{konva-master → konva}/gulpfile.mjs +0 -0
- package/debug/{konva-master → konva}/package.json +1 -1
- package/debug/{konva-master → konva}/release.sh +4 -1
- package/debug/{konva-master → konva}/resources/doc-includes/ContainerParams.txt +0 -0
- package/debug/{konva-master → konva}/resources/doc-includes/NodeParams.txt +0 -0
- package/debug/{konva-master → konva}/resources/doc-includes/ShapeParams.txt +0 -0
- package/debug/{konva-master → konva}/resources/jsdoc.conf.json +0 -0
- package/debug/{konva-master → konva}/rollup.config.mjs +0 -0
- package/debug/{konva-master → konva}/src/Animation.ts +0 -0
- package/debug/{konva-master → konva}/src/BezierFunctions.ts +0 -0
- package/debug/{konva-master → konva}/src/Canvas.ts +0 -37
- package/debug/{konva-master → konva}/src/Container.ts +0 -0
- package/debug/{konva-master → konva}/src/Context.ts +0 -0
- package/debug/{konva-master → konva}/src/Core.ts +0 -0
- package/debug/{konva-master → konva}/src/DragAndDrop.ts +0 -0
- package/debug/{konva-master → konva}/src/Factory.ts +0 -0
- package/debug/{konva-master → konva}/src/FastLayer.ts +0 -0
- package/debug/{konva-master → konva}/src/Global.ts +0 -0
- package/debug/{konva-master → konva}/src/Group.ts +0 -0
- package/debug/{konva-master → konva}/src/Layer.ts +0 -0
- package/debug/{konva-master → konva}/src/Node.ts +0 -0
- package/debug/{konva-master → konva}/src/PointerEvents.ts +0 -0
- package/debug/{konva-master → konva}/src/Shape.ts +0 -0
- package/debug/{konva-master → konva}/src/Stage.ts +0 -0
- package/debug/{konva-master → konva}/src/Tween.ts +0 -0
- package/debug/{konva-master → konva}/src/Util.ts +0 -0
- package/debug/{konva-master → konva}/src/Validators.ts +0 -0
- package/debug/{konva-master → konva}/src/_CoreInternals.ts +0 -0
- package/debug/{konva-master → konva}/src/_FullInternals.ts +0 -0
- package/debug/{konva-master → konva}/src/canvas-backend.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Blur.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Brighten.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Brightness.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Contrast.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Emboss.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Enhance.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Grayscale.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/HSL.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/HSV.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Invert.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Kaleidoscope.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Mask.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Noise.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Pixelate.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Posterize.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/RGB.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/RGBA.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Sepia.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Solarize.ts +0 -0
- package/debug/{konva-master → konva}/src/filters/Threshold.ts +0 -0
- package/debug/{konva-master → konva}/src/index.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Arc.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Arrow.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Circle.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Ellipse.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Image.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Label.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Line.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Path.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Rect.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/RegularPolygon.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Ring.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Sprite.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Star.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Text.ts +2 -2
- package/debug/{konva-master → konva}/src/shapes/TextPath.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Transformer.ts +0 -0
- package/debug/{konva-master → konva}/src/shapes/Wedge.ts +0 -0
- package/debug/{konva-master → konva}/src/skia-backend.ts +0 -0
- package/debug/{konva-master → konva}/src/types.ts +0 -0
- package/debug/{konva-master → konva}/tsconfig.json +0 -0
- package/debug/{konva-master → konva}/tsconfig.test.json +0 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.min.mjs +0 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.min.mjs.map +0 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.mjs +0 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.mjs.map +0 -0
- package/dist/extensions/aligning_guidelines/constant.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/constant.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/index.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/index.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +0 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +0 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +0 -0
- package/dist/extensions/data_updaters/gradient/index.d.ts +0 -0
- package/dist/extensions/data_updaters/gradient/index.d.ts.map +0 -0
- package/dist/extensions/data_updaters/origins/index.d.ts +0 -0
- package/dist/extensions/data_updaters/origins/index.d.ts.map +0 -0
- package/dist/extensions/index.d.ts +0 -0
- package/dist/extensions/index.d.ts.map +0 -0
- package/dist/fabric.d.ts +0 -0
- package/dist/fabric.d.ts.map +0 -0
- package/dist/fabric.min.mjs +0 -0
- package/dist/fabric.min.mjs.map +0 -0
- package/dist/fabric.mjs +0 -0
- package/dist/fabric.mjs.map +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +1046 -721
- 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 +1046 -721
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +1046 -721
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.ts +0 -0
- package/dist/index.node.d.ts.map +0 -0
- package/dist/index.node.mjs +1046 -721
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.min.mjs.map +0 -0
- package/dist/package.json.mjs +1 -1
- package/dist/package.json.mjs.map +0 -0
- package/dist/src/ClassRegistry.d.ts +0 -0
- package/dist/src/ClassRegistry.d.ts.map +0 -0
- package/dist/src/ClassRegistry.min.mjs +0 -0
- package/dist/src/ClassRegistry.min.mjs.map +0 -0
- package/dist/src/ClassRegistry.mjs +0 -0
- package/dist/src/ClassRegistry.mjs.map +0 -0
- package/dist/src/Collection.d.ts +0 -0
- package/dist/src/Collection.d.ts.map +0 -0
- package/dist/src/Collection.min.mjs +0 -0
- package/dist/src/Collection.min.mjs.map +0 -0
- package/dist/src/Collection.mjs +0 -0
- package/dist/src/Collection.mjs.map +0 -0
- package/dist/src/CommonMethods.d.ts +0 -0
- package/dist/src/CommonMethods.d.ts.map +0 -0
- package/dist/src/CommonMethods.min.mjs +0 -0
- package/dist/src/CommonMethods.min.mjs.map +0 -0
- package/dist/src/CommonMethods.mjs +0 -0
- package/dist/src/CommonMethods.mjs.map +0 -0
- package/dist/src/EventTypeDefs.d.ts +0 -0
- package/dist/src/EventTypeDefs.d.ts.map +0 -0
- package/dist/src/Intersection.d.ts +0 -0
- package/dist/src/Intersection.d.ts.map +0 -0
- package/dist/src/Intersection.min.mjs +0 -0
- package/dist/src/Intersection.min.mjs.map +0 -0
- package/dist/src/Intersection.mjs +0 -0
- package/dist/src/Intersection.mjs.map +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs +0 -0
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutManager.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutManager.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutManager.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutManager.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutManager.mjs +0 -0
- package/dist/src/LayoutManager/LayoutManager.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.d.ts +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.d.ts.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.mjs +0 -0
- package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +0 -0
- package/dist/src/LayoutManager/constants.d.ts +0 -0
- package/dist/src/LayoutManager/constants.d.ts.map +0 -0
- package/dist/src/LayoutManager/constants.min.mjs +0 -0
- package/dist/src/LayoutManager/constants.min.mjs.map +0 -0
- package/dist/src/LayoutManager/constants.mjs +0 -0
- package/dist/src/LayoutManager/constants.mjs.map +0 -0
- package/dist/src/LayoutManager/index.d.ts +0 -0
- package/dist/src/LayoutManager/index.d.ts.map +0 -0
- package/dist/src/LayoutManager/types.d.ts +0 -0
- package/dist/src/LayoutManager/types.d.ts.map +0 -0
- package/dist/src/Observable.d.ts +0 -0
- package/dist/src/Observable.d.ts.map +0 -0
- package/dist/src/Observable.min.mjs +0 -0
- package/dist/src/Observable.min.mjs.map +0 -0
- package/dist/src/Observable.mjs +0 -0
- package/dist/src/Observable.mjs.map +0 -0
- package/dist/src/Pattern/Pattern.d.ts +0 -0
- package/dist/src/Pattern/Pattern.d.ts.map +0 -0
- package/dist/src/Pattern/Pattern.min.mjs +0 -0
- package/dist/src/Pattern/Pattern.min.mjs.map +0 -0
- package/dist/src/Pattern/Pattern.mjs +0 -0
- package/dist/src/Pattern/Pattern.mjs.map +0 -0
- package/dist/src/Pattern/index.d.ts +0 -0
- package/dist/src/Pattern/index.d.ts.map +0 -0
- package/dist/src/Pattern/types.d.ts +0 -0
- package/dist/src/Pattern/types.d.ts.map +0 -0
- package/dist/src/Point.d.ts +0 -0
- package/dist/src/Point.d.ts.map +0 -0
- package/dist/src/Point.min.mjs +0 -0
- package/dist/src/Point.min.mjs.map +0 -0
- package/dist/src/Point.mjs +0 -0
- package/dist/src/Point.mjs.map +0 -0
- package/dist/src/Shadow.d.ts +0 -0
- package/dist/src/Shadow.d.ts.map +0 -0
- package/dist/src/Shadow.min.mjs +0 -0
- package/dist/src/Shadow.min.mjs.map +0 -0
- package/dist/src/Shadow.mjs +0 -0
- package/dist/src/Shadow.mjs.map +0 -0
- package/dist/src/brushes/BaseBrush.d.ts +0 -0
- package/dist/src/brushes/BaseBrush.d.ts.map +0 -0
- package/dist/src/brushes/BaseBrush.min.mjs +0 -0
- package/dist/src/brushes/BaseBrush.min.mjs.map +0 -0
- package/dist/src/brushes/BaseBrush.mjs +0 -0
- package/dist/src/brushes/BaseBrush.mjs.map +0 -0
- package/dist/src/brushes/CircleBrush.d.ts +0 -0
- package/dist/src/brushes/CircleBrush.d.ts.map +0 -0
- package/dist/src/brushes/CircleBrush.min.mjs +0 -0
- package/dist/src/brushes/CircleBrush.min.mjs.map +0 -0
- package/dist/src/brushes/CircleBrush.mjs +0 -0
- package/dist/src/brushes/CircleBrush.mjs.map +0 -0
- package/dist/src/brushes/PatternBrush.d.ts +0 -0
- package/dist/src/brushes/PatternBrush.d.ts.map +0 -0
- package/dist/src/brushes/PatternBrush.min.mjs +0 -0
- package/dist/src/brushes/PatternBrush.min.mjs.map +0 -0
- package/dist/src/brushes/PatternBrush.mjs +0 -0
- package/dist/src/brushes/PatternBrush.mjs.map +0 -0
- package/dist/src/brushes/PencilBrush.d.ts +0 -0
- package/dist/src/brushes/PencilBrush.d.ts.map +0 -0
- package/dist/src/brushes/PencilBrush.min.mjs +0 -0
- package/dist/src/brushes/PencilBrush.min.mjs.map +0 -0
- package/dist/src/brushes/PencilBrush.mjs +0 -0
- package/dist/src/brushes/PencilBrush.mjs.map +0 -0
- package/dist/src/brushes/SprayBrush.d.ts +0 -0
- package/dist/src/brushes/SprayBrush.d.ts.map +0 -0
- package/dist/src/brushes/SprayBrush.min.mjs +0 -0
- package/dist/src/brushes/SprayBrush.min.mjs.map +0 -0
- package/dist/src/brushes/SprayBrush.mjs +0 -0
- package/dist/src/brushes/SprayBrush.mjs.map +0 -0
- package/dist/src/brushes/typedefs.d.ts +0 -0
- package/dist/src/brushes/typedefs.d.ts.map +0 -0
- package/dist/src/cache.d.ts +0 -0
- package/dist/src/cache.d.ts.map +0 -0
- package/dist/src/cache.min.mjs +0 -0
- package/dist/src/cache.min.mjs.map +0 -0
- package/dist/src/cache.mjs +0 -0
- package/dist/src/cache.mjs.map +0 -0
- package/dist/src/canvas/Canvas.d.ts +0 -0
- package/dist/src/canvas/Canvas.d.ts.map +0 -0
- package/dist/src/canvas/Canvas.min.mjs +0 -0
- package/dist/src/canvas/Canvas.min.mjs.map +0 -0
- package/dist/src/canvas/Canvas.mjs +0 -0
- package/dist/src/canvas/Canvas.mjs.map +0 -0
- package/dist/src/canvas/CanvasOptions.d.ts +0 -0
- package/dist/src/canvas/CanvasOptions.d.ts.map +0 -0
- package/dist/src/canvas/CanvasOptions.min.mjs +0 -0
- package/dist/src/canvas/CanvasOptions.min.mjs.map +0 -0
- package/dist/src/canvas/CanvasOptions.mjs +0 -0
- package/dist/src/canvas/CanvasOptions.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs +0 -0
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs +0 -0
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/util.d.ts +0 -0
- package/dist/src/canvas/DOMManagers/util.d.ts.map +0 -0
- package/dist/src/canvas/DOMManagers/util.min.mjs +0 -0
- package/dist/src/canvas/DOMManagers/util.min.mjs.map +0 -0
- package/dist/src/canvas/DOMManagers/util.mjs +0 -0
- package/dist/src/canvas/DOMManagers/util.mjs.map +0 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +0 -0
- package/dist/src/canvas/SelectableCanvas.d.ts.map +0 -0
- package/dist/src/canvas/SelectableCanvas.min.mjs +0 -0
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +0 -0
- package/dist/src/canvas/SelectableCanvas.mjs +0 -0
- package/dist/src/canvas/SelectableCanvas.mjs.map +0 -0
- package/dist/src/canvas/StaticCanvas.d.ts +0 -0
- package/dist/src/canvas/StaticCanvas.d.ts.map +0 -0
- package/dist/src/canvas/StaticCanvas.min.mjs +0 -0
- package/dist/src/canvas/StaticCanvas.min.mjs.map +0 -0
- package/dist/src/canvas/StaticCanvas.mjs +0 -0
- package/dist/src/canvas/StaticCanvas.mjs.map +0 -0
- package/dist/src/canvas/StaticCanvasOptions.d.ts +0 -0
- package/dist/src/canvas/StaticCanvasOptions.d.ts.map +0 -0
- package/dist/src/canvas/StaticCanvasOptions.min.mjs +0 -0
- package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +0 -0
- package/dist/src/canvas/StaticCanvasOptions.mjs +0 -0
- package/dist/src/canvas/StaticCanvasOptions.mjs.map +0 -0
- package/dist/src/canvas/TextEditingManager.d.ts +0 -0
- package/dist/src/canvas/TextEditingManager.d.ts.map +0 -0
- package/dist/src/canvas/TextEditingManager.min.mjs +0 -0
- package/dist/src/canvas/TextEditingManager.min.mjs.map +0 -0
- package/dist/src/canvas/TextEditingManager.mjs +0 -0
- package/dist/src/canvas/TextEditingManager.mjs.map +0 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts +0 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts.map +0 -0
- package/dist/src/color/Color.d.ts +0 -0
- package/dist/src/color/Color.d.ts.map +0 -0
- package/dist/src/color/Color.min.mjs +0 -0
- package/dist/src/color/Color.min.mjs.map +0 -0
- package/dist/src/color/Color.mjs +0 -0
- package/dist/src/color/Color.mjs.map +0 -0
- package/dist/src/color/color_map.d.ts +0 -0
- package/dist/src/color/color_map.d.ts.map +0 -0
- package/dist/src/color/color_map.min.mjs +0 -0
- package/dist/src/color/color_map.min.mjs.map +0 -0
- package/dist/src/color/color_map.mjs +0 -0
- package/dist/src/color/color_map.mjs.map +0 -0
- package/dist/src/color/constants.d.ts +0 -0
- package/dist/src/color/constants.d.ts.map +0 -0
- package/dist/src/color/constants.min.mjs +0 -0
- package/dist/src/color/constants.min.mjs.map +0 -0
- package/dist/src/color/constants.mjs +0 -0
- package/dist/src/color/constants.mjs.map +0 -0
- package/dist/src/color/typedefs.d.ts +0 -0
- package/dist/src/color/typedefs.d.ts.map +0 -0
- package/dist/src/color/util.d.ts +0 -0
- package/dist/src/color/util.d.ts.map +0 -0
- package/dist/src/color/util.min.mjs +0 -0
- package/dist/src/color/util.min.mjs.map +0 -0
- package/dist/src/color/util.mjs +0 -0
- package/dist/src/color/util.mjs.map +0 -0
- package/dist/src/config.d.ts +0 -0
- package/dist/src/config.d.ts.map +0 -0
- package/dist/src/config.min.mjs +0 -0
- package/dist/src/config.min.mjs.map +0 -0
- package/dist/src/config.mjs +0 -0
- package/dist/src/config.mjs.map +0 -0
- package/dist/src/constants.d.ts +0 -0
- package/dist/src/constants.d.ts.map +0 -0
- package/dist/src/constants.min.mjs +0 -0
- package/dist/src/constants.min.mjs.map +0 -0
- package/dist/src/constants.mjs +0 -0
- package/dist/src/constants.mjs.map +0 -0
- package/dist/src/controls/Control.d.ts +0 -0
- package/dist/src/controls/Control.d.ts.map +0 -0
- package/dist/src/controls/Control.min.mjs +0 -0
- package/dist/src/controls/Control.min.mjs.map +0 -0
- package/dist/src/controls/Control.mjs +0 -0
- package/dist/src/controls/Control.mjs.map +0 -0
- package/dist/src/controls/changeHeight.d.ts +0 -0
- package/dist/src/controls/changeHeight.d.ts.map +0 -0
- package/dist/src/controls/changeHeight.min.mjs +2 -0
- package/dist/src/controls/changeHeight.min.mjs.map +1 -0
- package/dist/src/controls/changeHeight.mjs +36 -0
- package/dist/src/controls/changeHeight.mjs.map +1 -0
- package/dist/src/controls/changeWidth.d.ts +0 -0
- package/dist/src/controls/changeWidth.d.ts.map +0 -0
- package/dist/src/controls/changeWidth.min.mjs +0 -0
- package/dist/src/controls/changeWidth.min.mjs.map +0 -0
- package/dist/src/controls/changeWidth.mjs +0 -0
- package/dist/src/controls/changeWidth.mjs.map +0 -0
- package/dist/src/controls/commonControls.d.ts +0 -0
- package/dist/src/controls/commonControls.d.ts.map +0 -0
- package/dist/src/controls/commonControls.min.mjs +0 -0
- package/dist/src/controls/commonControls.min.mjs.map +0 -0
- package/dist/src/controls/commonControls.mjs +0 -0
- package/dist/src/controls/commonControls.mjs.map +0 -0
- package/dist/src/controls/controlRendering.d.ts +0 -0
- package/dist/src/controls/controlRendering.d.ts.map +0 -0
- package/dist/src/controls/controlRendering.min.mjs +0 -0
- package/dist/src/controls/controlRendering.min.mjs.map +0 -0
- package/dist/src/controls/controlRendering.mjs +0 -0
- package/dist/src/controls/controlRendering.mjs.map +0 -0
- package/dist/src/controls/drag.d.ts +0 -0
- package/dist/src/controls/drag.d.ts.map +0 -0
- package/dist/src/controls/drag.min.mjs +0 -0
- package/dist/src/controls/drag.min.mjs.map +0 -0
- package/dist/src/controls/drag.mjs +0 -0
- package/dist/src/controls/drag.mjs.map +0 -0
- package/dist/src/controls/fireEvent.d.ts +0 -0
- package/dist/src/controls/fireEvent.d.ts.map +0 -0
- package/dist/src/controls/fireEvent.min.mjs +0 -0
- package/dist/src/controls/fireEvent.min.mjs.map +0 -0
- package/dist/src/controls/fireEvent.mjs +0 -0
- package/dist/src/controls/fireEvent.mjs.map +0 -0
- package/dist/src/controls/index.d.ts +0 -0
- package/dist/src/controls/index.d.ts.map +0 -0
- package/dist/src/controls/index.min.mjs +0 -0
- package/dist/src/controls/index.min.mjs.map +0 -0
- package/dist/src/controls/index.mjs +0 -0
- package/dist/src/controls/index.mjs.map +0 -0
- package/dist/src/controls/pathControl.d.ts +0 -0
- package/dist/src/controls/pathControl.d.ts.map +0 -0
- package/dist/src/controls/pathControl.min.mjs +0 -0
- package/dist/src/controls/pathControl.min.mjs.map +0 -0
- package/dist/src/controls/pathControl.mjs +0 -0
- package/dist/src/controls/pathControl.mjs.map +0 -0
- package/dist/src/controls/polyControl.d.ts +0 -0
- package/dist/src/controls/polyControl.d.ts.map +0 -0
- package/dist/src/controls/polyControl.min.mjs +0 -0
- package/dist/src/controls/polyControl.min.mjs.map +0 -0
- package/dist/src/controls/polyControl.mjs +0 -0
- package/dist/src/controls/polyControl.mjs.map +0 -0
- package/dist/src/controls/rotate.d.ts +0 -0
- package/dist/src/controls/rotate.d.ts.map +0 -0
- package/dist/src/controls/rotate.min.mjs +0 -0
- package/dist/src/controls/rotate.min.mjs.map +0 -0
- package/dist/src/controls/rotate.mjs +0 -0
- package/dist/src/controls/rotate.mjs.map +0 -0
- package/dist/src/controls/scale.d.ts +0 -0
- package/dist/src/controls/scale.d.ts.map +0 -0
- package/dist/src/controls/scale.min.mjs +0 -0
- package/dist/src/controls/scale.min.mjs.map +0 -0
- package/dist/src/controls/scale.mjs +0 -0
- package/dist/src/controls/scale.mjs.map +0 -0
- package/dist/src/controls/scaleSkew.d.ts +0 -0
- package/dist/src/controls/scaleSkew.d.ts.map +0 -0
- package/dist/src/controls/scaleSkew.min.mjs +0 -0
- package/dist/src/controls/scaleSkew.min.mjs.map +0 -0
- package/dist/src/controls/scaleSkew.mjs +0 -0
- package/dist/src/controls/scaleSkew.mjs.map +0 -0
- package/dist/src/controls/skew.d.ts +0 -0
- package/dist/src/controls/skew.d.ts.map +0 -0
- package/dist/src/controls/skew.min.mjs +0 -0
- package/dist/src/controls/skew.min.mjs.map +0 -0
- package/dist/src/controls/skew.mjs +0 -0
- package/dist/src/controls/skew.mjs.map +0 -0
- package/dist/src/controls/util.d.ts +0 -0
- package/dist/src/controls/util.d.ts.map +0 -0
- package/dist/src/controls/util.min.mjs +0 -0
- package/dist/src/controls/util.min.mjs.map +0 -0
- package/dist/src/controls/util.mjs +0 -0
- package/dist/src/controls/util.mjs.map +0 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts +0 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts.map +0 -0
- package/dist/src/controls/wrapWithFireEvent.min.mjs +0 -0
- package/dist/src/controls/wrapWithFireEvent.min.mjs.map +0 -0
- package/dist/src/controls/wrapWithFireEvent.mjs +0 -0
- package/dist/src/controls/wrapWithFireEvent.mjs.map +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts.map +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.min.mjs +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.mjs +0 -0
- package/dist/src/controls/wrapWithFixedAnchor.mjs.map +0 -0
- package/dist/src/env/browser.d.ts +0 -0
- package/dist/src/env/browser.d.ts.map +0 -0
- package/dist/src/env/browser.min.mjs +0 -0
- package/dist/src/env/browser.min.mjs.map +0 -0
- package/dist/src/env/browser.mjs +0 -0
- package/dist/src/env/browser.mjs.map +0 -0
- package/dist/src/env/index.d.ts +0 -0
- package/dist/src/env/index.d.ts.map +0 -0
- package/dist/src/env/index.min.mjs +0 -0
- package/dist/src/env/index.min.mjs.map +0 -0
- package/dist/src/env/index.mjs +0 -0
- package/dist/src/env/index.mjs.map +0 -0
- package/dist/src/env/node.d.ts +0 -0
- package/dist/src/env/node.d.ts.map +0 -0
- package/dist/src/env/types.d.ts +0 -0
- package/dist/src/env/types.d.ts.map +0 -0
- package/dist/src/filters/BaseFilter.d.ts +0 -0
- package/dist/src/filters/BaseFilter.d.ts.map +0 -0
- package/dist/src/filters/BaseFilter.min.mjs +0 -0
- package/dist/src/filters/BaseFilter.min.mjs.map +0 -0
- package/dist/src/filters/BaseFilter.mjs +0 -0
- package/dist/src/filters/BaseFilter.mjs.map +0 -0
- package/dist/src/filters/BlendColor.d.ts +0 -0
- package/dist/src/filters/BlendColor.d.ts.map +0 -0
- package/dist/src/filters/BlendColor.min.mjs +0 -0
- package/dist/src/filters/BlendColor.min.mjs.map +0 -0
- package/dist/src/filters/BlendColor.mjs +0 -0
- package/dist/src/filters/BlendColor.mjs.map +0 -0
- package/dist/src/filters/BlendImage.d.ts +0 -0
- package/dist/src/filters/BlendImage.d.ts.map +0 -0
- package/dist/src/filters/BlendImage.min.mjs +0 -0
- package/dist/src/filters/BlendImage.min.mjs.map +0 -0
- package/dist/src/filters/BlendImage.mjs +0 -0
- package/dist/src/filters/BlendImage.mjs.map +0 -0
- package/dist/src/filters/Blur.d.ts +0 -0
- package/dist/src/filters/Blur.d.ts.map +0 -0
- package/dist/src/filters/Blur.min.mjs +0 -0
- package/dist/src/filters/Blur.min.mjs.map +0 -0
- package/dist/src/filters/Blur.mjs +0 -0
- package/dist/src/filters/Blur.mjs.map +0 -0
- package/dist/src/filters/Boilerplate.d.ts +0 -0
- package/dist/src/filters/Boilerplate.d.ts.map +0 -0
- package/dist/src/filters/Brightness.d.ts +0 -0
- package/dist/src/filters/Brightness.d.ts.map +0 -0
- package/dist/src/filters/Brightness.min.mjs +0 -0
- package/dist/src/filters/Brightness.min.mjs.map +0 -0
- package/dist/src/filters/Brightness.mjs +0 -0
- package/dist/src/filters/Brightness.mjs.map +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts.map +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.min.mjs +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.mjs +0 -0
- package/dist/src/filters/Canvas2dFilterBackend.mjs.map +0 -0
- package/dist/src/filters/ColorMatrix.d.ts +0 -0
- package/dist/src/filters/ColorMatrix.d.ts.map +0 -0
- package/dist/src/filters/ColorMatrix.min.mjs +0 -0
- package/dist/src/filters/ColorMatrix.min.mjs.map +0 -0
- package/dist/src/filters/ColorMatrix.mjs +0 -0
- package/dist/src/filters/ColorMatrix.mjs.map +0 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +0 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts.map +0 -0
- package/dist/src/filters/ColorMatrixFilters.min.mjs +0 -0
- package/dist/src/filters/ColorMatrixFilters.min.mjs.map +0 -0
- package/dist/src/filters/ColorMatrixFilters.mjs +0 -0
- package/dist/src/filters/ColorMatrixFilters.mjs.map +0 -0
- package/dist/src/filters/Composed.d.ts +0 -0
- package/dist/src/filters/Composed.d.ts.map +0 -0
- package/dist/src/filters/Composed.min.mjs +0 -0
- package/dist/src/filters/Composed.min.mjs.map +0 -0
- package/dist/src/filters/Composed.mjs +0 -0
- package/dist/src/filters/Composed.mjs.map +0 -0
- package/dist/src/filters/Contrast.d.ts +0 -0
- package/dist/src/filters/Contrast.d.ts.map +0 -0
- package/dist/src/filters/Contrast.min.mjs +0 -0
- package/dist/src/filters/Contrast.min.mjs.map +0 -0
- package/dist/src/filters/Contrast.mjs +0 -0
- package/dist/src/filters/Contrast.mjs.map +0 -0
- package/dist/src/filters/Convolute.d.ts +0 -0
- package/dist/src/filters/Convolute.d.ts.map +0 -0
- package/dist/src/filters/Convolute.min.mjs +0 -0
- package/dist/src/filters/Convolute.min.mjs.map +0 -0
- package/dist/src/filters/Convolute.mjs +0 -0
- package/dist/src/filters/Convolute.mjs.map +0 -0
- package/dist/src/filters/FilterBackend.d.ts +0 -0
- package/dist/src/filters/FilterBackend.d.ts.map +0 -0
- package/dist/src/filters/FilterBackend.min.mjs +0 -0
- package/dist/src/filters/FilterBackend.min.mjs.map +0 -0
- package/dist/src/filters/FilterBackend.mjs +0 -0
- package/dist/src/filters/FilterBackend.mjs.map +0 -0
- package/dist/src/filters/GLProbes/GLProbe.d.ts +0 -0
- package/dist/src/filters/GLProbes/GLProbe.d.ts.map +0 -0
- package/dist/src/filters/GLProbes/GLProbe.min.mjs +0 -0
- package/dist/src/filters/GLProbes/GLProbe.min.mjs.map +0 -0
- package/dist/src/filters/GLProbes/GLProbe.mjs +0 -0
- package/dist/src/filters/GLProbes/GLProbe.mjs.map +0 -0
- package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +0 -0
- package/dist/src/filters/GLProbes/NodeGLProbe.d.ts.map +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.d.ts +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.d.ts.map +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.min.mjs +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.mjs +0 -0
- package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +0 -0
- package/dist/src/filters/Gamma.d.ts +0 -0
- package/dist/src/filters/Gamma.d.ts.map +0 -0
- package/dist/src/filters/Gamma.min.mjs +0 -0
- package/dist/src/filters/Gamma.min.mjs.map +0 -0
- package/dist/src/filters/Gamma.mjs +0 -0
- package/dist/src/filters/Gamma.mjs.map +0 -0
- package/dist/src/filters/Grayscale.d.ts +0 -0
- package/dist/src/filters/Grayscale.d.ts.map +0 -0
- package/dist/src/filters/Grayscale.min.mjs +0 -0
- package/dist/src/filters/Grayscale.min.mjs.map +0 -0
- package/dist/src/filters/Grayscale.mjs +0 -0
- package/dist/src/filters/Grayscale.mjs.map +0 -0
- package/dist/src/filters/HueRotation.d.ts +0 -0
- package/dist/src/filters/HueRotation.d.ts.map +0 -0
- package/dist/src/filters/HueRotation.min.mjs +0 -0
- package/dist/src/filters/HueRotation.min.mjs.map +0 -0
- package/dist/src/filters/HueRotation.mjs +0 -0
- package/dist/src/filters/HueRotation.mjs.map +0 -0
- package/dist/src/filters/Invert.d.ts +0 -0
- package/dist/src/filters/Invert.d.ts.map +0 -0
- package/dist/src/filters/Invert.min.mjs +0 -0
- package/dist/src/filters/Invert.min.mjs.map +0 -0
- package/dist/src/filters/Invert.mjs +0 -0
- package/dist/src/filters/Invert.mjs.map +0 -0
- package/dist/src/filters/Noise.d.ts +0 -0
- package/dist/src/filters/Noise.d.ts.map +0 -0
- package/dist/src/filters/Noise.min.mjs +0 -0
- package/dist/src/filters/Noise.min.mjs.map +0 -0
- package/dist/src/filters/Noise.mjs +0 -0
- package/dist/src/filters/Noise.mjs.map +0 -0
- package/dist/src/filters/Pixelate.d.ts +0 -0
- package/dist/src/filters/Pixelate.d.ts.map +0 -0
- package/dist/src/filters/Pixelate.min.mjs +0 -0
- package/dist/src/filters/Pixelate.min.mjs.map +0 -0
- package/dist/src/filters/Pixelate.mjs +0 -0
- package/dist/src/filters/Pixelate.mjs.map +0 -0
- package/dist/src/filters/RemoveColor.d.ts +0 -0
- package/dist/src/filters/RemoveColor.d.ts.map +0 -0
- package/dist/src/filters/RemoveColor.min.mjs +0 -0
- package/dist/src/filters/RemoveColor.min.mjs.map +0 -0
- package/dist/src/filters/RemoveColor.mjs +0 -0
- package/dist/src/filters/RemoveColor.mjs.map +0 -0
- package/dist/src/filters/Resize.d.ts +0 -0
- package/dist/src/filters/Resize.d.ts.map +0 -0
- package/dist/src/filters/Resize.min.mjs +0 -0
- package/dist/src/filters/Resize.min.mjs.map +0 -0
- package/dist/src/filters/Resize.mjs +0 -0
- package/dist/src/filters/Resize.mjs.map +0 -0
- package/dist/src/filters/Saturation.d.ts +0 -0
- package/dist/src/filters/Saturation.d.ts.map +0 -0
- package/dist/src/filters/Saturation.min.mjs +0 -0
- package/dist/src/filters/Saturation.min.mjs.map +0 -0
- package/dist/src/filters/Saturation.mjs +0 -0
- package/dist/src/filters/Saturation.mjs.map +0 -0
- package/dist/src/filters/Vibrance.d.ts +0 -0
- package/dist/src/filters/Vibrance.d.ts.map +0 -0
- package/dist/src/filters/Vibrance.min.mjs +0 -0
- package/dist/src/filters/Vibrance.min.mjs.map +0 -0
- package/dist/src/filters/Vibrance.mjs +0 -0
- package/dist/src/filters/Vibrance.mjs.map +0 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +0 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts.map +0 -0
- package/dist/src/filters/WebGLFilterBackend.min.mjs +0 -0
- package/dist/src/filters/WebGLFilterBackend.min.mjs.map +0 -0
- package/dist/src/filters/WebGLFilterBackend.mjs +0 -0
- package/dist/src/filters/WebGLFilterBackend.mjs.map +0 -0
- package/dist/src/filters/filters.d.ts +0 -0
- package/dist/src/filters/filters.d.ts.map +0 -0
- package/dist/src/filters/filters.min.mjs +0 -0
- package/dist/src/filters/filters.min.mjs.map +0 -0
- package/dist/src/filters/filters.mjs +0 -0
- package/dist/src/filters/filters.mjs.map +0 -0
- package/dist/src/filters/index.d.ts +0 -0
- package/dist/src/filters/index.d.ts.map +0 -0
- package/dist/src/filters/shaders/baseFilter.d.ts +0 -0
- package/dist/src/filters/shaders/baseFilter.d.ts.map +0 -0
- package/dist/src/filters/shaders/baseFilter.min.mjs +0 -0
- package/dist/src/filters/shaders/baseFilter.min.mjs.map +0 -0
- package/dist/src/filters/shaders/baseFilter.mjs +0 -0
- package/dist/src/filters/shaders/baseFilter.mjs.map +0 -0
- package/dist/src/filters/shaders/blendColor.d.ts +0 -0
- package/dist/src/filters/shaders/blendColor.d.ts.map +0 -0
- package/dist/src/filters/shaders/blendColor.min.mjs +0 -0
- package/dist/src/filters/shaders/blendColor.min.mjs.map +0 -0
- package/dist/src/filters/shaders/blendColor.mjs +0 -0
- package/dist/src/filters/shaders/blendColor.mjs.map +0 -0
- package/dist/src/filters/shaders/blendImage.d.ts +0 -0
- package/dist/src/filters/shaders/blendImage.d.ts.map +0 -0
- package/dist/src/filters/shaders/blendImage.min.mjs +0 -0
- package/dist/src/filters/shaders/blendImage.min.mjs.map +0 -0
- package/dist/src/filters/shaders/blendImage.mjs +0 -0
- package/dist/src/filters/shaders/blendImage.mjs.map +0 -0
- package/dist/src/filters/shaders/blur.d.ts +0 -0
- package/dist/src/filters/shaders/blur.d.ts.map +0 -0
- package/dist/src/filters/shaders/blur.min.mjs +0 -0
- package/dist/src/filters/shaders/blur.min.mjs.map +0 -0
- package/dist/src/filters/shaders/blur.mjs +0 -0
- package/dist/src/filters/shaders/blur.mjs.map +0 -0
- package/dist/src/filters/shaders/brightness.d.ts +0 -0
- package/dist/src/filters/shaders/brightness.d.ts.map +0 -0
- package/dist/src/filters/shaders/brightness.min.mjs +0 -0
- package/dist/src/filters/shaders/brightness.min.mjs.map +0 -0
- package/dist/src/filters/shaders/brightness.mjs +0 -0
- package/dist/src/filters/shaders/brightness.mjs.map +0 -0
- package/dist/src/filters/shaders/colorMatrix.d.ts +0 -0
- package/dist/src/filters/shaders/colorMatrix.d.ts.map +0 -0
- package/dist/src/filters/shaders/colorMatrix.min.mjs +0 -0
- package/dist/src/filters/shaders/colorMatrix.min.mjs.map +0 -0
- package/dist/src/filters/shaders/colorMatrix.mjs +0 -0
- package/dist/src/filters/shaders/colorMatrix.mjs.map +0 -0
- package/dist/src/filters/shaders/constrast.d.ts +0 -0
- package/dist/src/filters/shaders/constrast.d.ts.map +0 -0
- package/dist/src/filters/shaders/constrast.min.mjs +0 -0
- package/dist/src/filters/shaders/constrast.min.mjs.map +0 -0
- package/dist/src/filters/shaders/constrast.mjs +0 -0
- package/dist/src/filters/shaders/constrast.mjs.map +0 -0
- package/dist/src/filters/shaders/convolute.d.ts +0 -0
- package/dist/src/filters/shaders/convolute.d.ts.map +0 -0
- package/dist/src/filters/shaders/convolute.min.mjs +0 -0
- package/dist/src/filters/shaders/convolute.min.mjs.map +0 -0
- package/dist/src/filters/shaders/convolute.mjs +0 -0
- package/dist/src/filters/shaders/convolute.mjs.map +0 -0
- package/dist/src/filters/shaders/gamma.d.ts +0 -0
- package/dist/src/filters/shaders/gamma.d.ts.map +0 -0
- package/dist/src/filters/shaders/gamma.min.mjs +0 -0
- package/dist/src/filters/shaders/gamma.min.mjs.map +0 -0
- package/dist/src/filters/shaders/gamma.mjs +0 -0
- package/dist/src/filters/shaders/gamma.mjs.map +0 -0
- package/dist/src/filters/shaders/grayscale.d.ts +0 -0
- package/dist/src/filters/shaders/grayscale.d.ts.map +0 -0
- package/dist/src/filters/shaders/grayscale.min.mjs +0 -0
- package/dist/src/filters/shaders/grayscale.min.mjs.map +0 -0
- package/dist/src/filters/shaders/grayscale.mjs +0 -0
- package/dist/src/filters/shaders/grayscale.mjs.map +0 -0
- package/dist/src/filters/shaders/invert.d.ts +0 -0
- package/dist/src/filters/shaders/invert.d.ts.map +0 -0
- package/dist/src/filters/shaders/invert.min.mjs +0 -0
- package/dist/src/filters/shaders/invert.min.mjs.map +0 -0
- package/dist/src/filters/shaders/invert.mjs +0 -0
- package/dist/src/filters/shaders/invert.mjs.map +0 -0
- package/dist/src/filters/shaders/noise.d.ts +0 -0
- package/dist/src/filters/shaders/noise.d.ts.map +0 -0
- package/dist/src/filters/shaders/noise.min.mjs +0 -0
- package/dist/src/filters/shaders/noise.min.mjs.map +0 -0
- package/dist/src/filters/shaders/noise.mjs +0 -0
- package/dist/src/filters/shaders/noise.mjs.map +0 -0
- package/dist/src/filters/shaders/pixelate.d.ts +0 -0
- package/dist/src/filters/shaders/pixelate.d.ts.map +0 -0
- package/dist/src/filters/shaders/pixelate.min.mjs +0 -0
- package/dist/src/filters/shaders/pixelate.min.mjs.map +0 -0
- package/dist/src/filters/shaders/pixelate.mjs +0 -0
- package/dist/src/filters/shaders/pixelate.mjs.map +0 -0
- package/dist/src/filters/shaders/removeColor.d.ts +0 -0
- package/dist/src/filters/shaders/removeColor.d.ts.map +0 -0
- package/dist/src/filters/shaders/removeColor.min.mjs +0 -0
- package/dist/src/filters/shaders/removeColor.min.mjs.map +0 -0
- package/dist/src/filters/shaders/removeColor.mjs +0 -0
- package/dist/src/filters/shaders/removeColor.mjs.map +0 -0
- package/dist/src/filters/shaders/saturation.d.ts +0 -0
- package/dist/src/filters/shaders/saturation.d.ts.map +0 -0
- package/dist/src/filters/shaders/saturation.min.mjs +0 -0
- package/dist/src/filters/shaders/saturation.min.mjs.map +0 -0
- package/dist/src/filters/shaders/saturation.mjs +0 -0
- package/dist/src/filters/shaders/saturation.mjs.map +0 -0
- package/dist/src/filters/shaders/vibrance.d.ts +0 -0
- package/dist/src/filters/shaders/vibrance.d.ts.map +0 -0
- package/dist/src/filters/shaders/vibrance.min.mjs +0 -0
- package/dist/src/filters/shaders/vibrance.min.mjs.map +0 -0
- package/dist/src/filters/shaders/vibrance.mjs +0 -0
- package/dist/src/filters/shaders/vibrance.mjs.map +0 -0
- package/dist/src/filters/typedefs.d.ts +0 -0
- package/dist/src/filters/typedefs.d.ts.map +0 -0
- package/dist/src/filters/utils.d.ts +0 -0
- package/dist/src/filters/utils.d.ts.map +0 -0
- package/dist/src/filters/utils.min.mjs +0 -0
- package/dist/src/filters/utils.min.mjs.map +0 -0
- package/dist/src/filters/utils.mjs +0 -0
- package/dist/src/filters/utils.mjs.map +0 -0
- package/dist/src/gradient/Gradient.d.ts +0 -0
- package/dist/src/gradient/Gradient.d.ts.map +0 -0
- package/dist/src/gradient/Gradient.min.mjs +0 -0
- package/dist/src/gradient/Gradient.min.mjs.map +0 -0
- package/dist/src/gradient/Gradient.mjs +0 -0
- package/dist/src/gradient/Gradient.mjs.map +0 -0
- package/dist/src/gradient/constants.d.ts +0 -0
- package/dist/src/gradient/constants.d.ts.map +0 -0
- package/dist/src/gradient/constants.min.mjs +0 -0
- package/dist/src/gradient/constants.min.mjs.map +0 -0
- package/dist/src/gradient/constants.mjs +0 -0
- package/dist/src/gradient/constants.mjs.map +0 -0
- package/dist/src/gradient/index.d.ts +0 -0
- package/dist/src/gradient/index.d.ts.map +0 -0
- package/dist/src/gradient/parser/misc.d.ts +0 -0
- package/dist/src/gradient/parser/misc.d.ts.map +0 -0
- package/dist/src/gradient/parser/misc.min.mjs +0 -0
- package/dist/src/gradient/parser/misc.min.mjs.map +0 -0
- package/dist/src/gradient/parser/misc.mjs +0 -0
- package/dist/src/gradient/parser/misc.mjs.map +0 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts +0 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts.map +0 -0
- package/dist/src/gradient/parser/parseColorStops.min.mjs +0 -0
- package/dist/src/gradient/parser/parseColorStops.min.mjs.map +0 -0
- package/dist/src/gradient/parser/parseColorStops.mjs +0 -0
- package/dist/src/gradient/parser/parseColorStops.mjs.map +0 -0
- package/dist/src/gradient/parser/parseCoords.d.ts +0 -0
- package/dist/src/gradient/parser/parseCoords.d.ts.map +0 -0
- package/dist/src/gradient/parser/parseCoords.min.mjs +0 -0
- package/dist/src/gradient/parser/parseCoords.min.mjs.map +0 -0
- package/dist/src/gradient/parser/parseCoords.mjs +0 -0
- package/dist/src/gradient/parser/parseCoords.mjs.map +0 -0
- package/dist/src/gradient/typedefs.d.ts +0 -0
- package/dist/src/gradient/typedefs.d.ts.map +0 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts +0 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts.map +0 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts +0 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts.map +0 -0
- package/dist/src/parkinglot/straighten.d.ts +0 -0
- package/dist/src/parkinglot/straighten.d.ts.map +0 -0
- package/dist/src/parser/applyViewboxTransform.d.ts +0 -0
- package/dist/src/parser/applyViewboxTransform.d.ts.map +0 -0
- package/dist/src/parser/applyViewboxTransform.min.mjs +0 -0
- package/dist/src/parser/applyViewboxTransform.min.mjs.map +0 -0
- package/dist/src/parser/applyViewboxTransform.mjs +0 -0
- package/dist/src/parser/applyViewboxTransform.mjs.map +0 -0
- package/dist/src/parser/attributes.d.ts +0 -0
- package/dist/src/parser/attributes.d.ts.map +0 -0
- package/dist/src/parser/attributes.min.mjs +0 -0
- package/dist/src/parser/attributes.min.mjs.map +0 -0
- package/dist/src/parser/attributes.mjs +0 -0
- package/dist/src/parser/attributes.mjs.map +0 -0
- package/dist/src/parser/constants.d.ts +0 -0
- package/dist/src/parser/constants.d.ts.map +0 -0
- package/dist/src/parser/constants.min.mjs +0 -0
- package/dist/src/parser/constants.min.mjs.map +0 -0
- package/dist/src/parser/constants.mjs +0 -0
- package/dist/src/parser/constants.mjs.map +0 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts +0 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts.map +0 -0
- package/dist/src/parser/doesSomeParentMatch.min.mjs +0 -0
- package/dist/src/parser/doesSomeParentMatch.min.mjs.map +0 -0
- package/dist/src/parser/doesSomeParentMatch.mjs +0 -0
- package/dist/src/parser/doesSomeParentMatch.mjs.map +0 -0
- package/dist/src/parser/elementMatchesRule.d.ts +0 -0
- package/dist/src/parser/elementMatchesRule.d.ts.map +0 -0
- package/dist/src/parser/elementMatchesRule.min.mjs +0 -0
- package/dist/src/parser/elementMatchesRule.min.mjs.map +0 -0
- package/dist/src/parser/elementMatchesRule.mjs +0 -0
- package/dist/src/parser/elementMatchesRule.mjs.map +0 -0
- package/dist/src/parser/elements_parser.d.ts +0 -0
- package/dist/src/parser/elements_parser.d.ts.map +0 -0
- package/dist/src/parser/elements_parser.min.mjs +0 -0
- package/dist/src/parser/elements_parser.min.mjs.map +0 -0
- package/dist/src/parser/elements_parser.mjs +0 -0
- package/dist/src/parser/elements_parser.mjs.map +0 -0
- package/dist/src/parser/getCSSRules.d.ts +0 -0
- package/dist/src/parser/getCSSRules.d.ts.map +0 -0
- package/dist/src/parser/getCSSRules.min.mjs +0 -0
- package/dist/src/parser/getCSSRules.min.mjs.map +0 -0
- package/dist/src/parser/getCSSRules.mjs +0 -0
- package/dist/src/parser/getCSSRules.mjs.map +0 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts +0 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts.map +0 -0
- package/dist/src/parser/getGlobalStylesForElement.min.mjs +0 -0
- package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +0 -0
- package/dist/src/parser/getGlobalStylesForElement.mjs +0 -0
- package/dist/src/parser/getGlobalStylesForElement.mjs.map +0 -0
- package/dist/src/parser/getGradientDefs.d.ts +0 -0
- package/dist/src/parser/getGradientDefs.d.ts.map +0 -0
- package/dist/src/parser/getGradientDefs.min.mjs +0 -0
- package/dist/src/parser/getGradientDefs.min.mjs.map +0 -0
- package/dist/src/parser/getGradientDefs.mjs +0 -0
- package/dist/src/parser/getGradientDefs.mjs.map +0 -0
- package/dist/src/parser/getMultipleNodes.d.ts +0 -0
- package/dist/src/parser/getMultipleNodes.d.ts.map +0 -0
- package/dist/src/parser/getMultipleNodes.min.mjs +0 -0
- package/dist/src/parser/getMultipleNodes.min.mjs.map +0 -0
- package/dist/src/parser/getMultipleNodes.mjs +0 -0
- package/dist/src/parser/getMultipleNodes.mjs.map +0 -0
- package/dist/src/parser/getSvgRegex.d.ts +0 -0
- package/dist/src/parser/getSvgRegex.d.ts.map +0 -0
- package/dist/src/parser/getSvgRegex.min.mjs +0 -0
- package/dist/src/parser/getSvgRegex.min.mjs.map +0 -0
- package/dist/src/parser/getSvgRegex.mjs +0 -0
- package/dist/src/parser/getSvgRegex.mjs.map +0 -0
- package/dist/src/parser/getTagName.d.ts +0 -0
- package/dist/src/parser/getTagName.d.ts.map +0 -0
- package/dist/src/parser/getTagName.min.mjs +0 -0
- package/dist/src/parser/getTagName.min.mjs.map +0 -0
- package/dist/src/parser/getTagName.mjs +0 -0
- package/dist/src/parser/getTagName.mjs.map +0 -0
- package/dist/src/parser/hasInvalidAncestor.d.ts +0 -0
- package/dist/src/parser/hasInvalidAncestor.d.ts.map +0 -0
- package/dist/src/parser/hasInvalidAncestor.min.mjs +0 -0
- package/dist/src/parser/hasInvalidAncestor.min.mjs.map +0 -0
- package/dist/src/parser/hasInvalidAncestor.mjs +0 -0
- package/dist/src/parser/hasInvalidAncestor.mjs.map +0 -0
- package/dist/src/parser/loadSVGFromString.d.ts +0 -0
- package/dist/src/parser/loadSVGFromString.d.ts.map +0 -0
- package/dist/src/parser/loadSVGFromString.min.mjs +0 -0
- package/dist/src/parser/loadSVGFromString.min.mjs.map +0 -0
- package/dist/src/parser/loadSVGFromString.mjs +0 -0
- package/dist/src/parser/loadSVGFromString.mjs.map +0 -0
- package/dist/src/parser/loadSVGFromURL.d.ts +0 -0
- package/dist/src/parser/loadSVGFromURL.d.ts.map +0 -0
- package/dist/src/parser/loadSVGFromURL.min.mjs +0 -0
- package/dist/src/parser/loadSVGFromURL.min.mjs.map +0 -0
- package/dist/src/parser/loadSVGFromURL.mjs +0 -0
- package/dist/src/parser/loadSVGFromURL.mjs.map +0 -0
- package/dist/src/parser/normalizeAttr.d.ts +0 -0
- package/dist/src/parser/normalizeAttr.d.ts.map +0 -0
- package/dist/src/parser/normalizeAttr.min.mjs +0 -0
- package/dist/src/parser/normalizeAttr.min.mjs.map +0 -0
- package/dist/src/parser/normalizeAttr.mjs +0 -0
- package/dist/src/parser/normalizeAttr.mjs.map +0 -0
- package/dist/src/parser/normalizeValue.d.ts +0 -0
- package/dist/src/parser/normalizeValue.d.ts.map +0 -0
- package/dist/src/parser/normalizeValue.min.mjs +0 -0
- package/dist/src/parser/normalizeValue.min.mjs.map +0 -0
- package/dist/src/parser/normalizeValue.mjs +0 -0
- package/dist/src/parser/normalizeValue.mjs.map +0 -0
- package/dist/src/parser/parseAttributes.d.ts +0 -0
- package/dist/src/parser/parseAttributes.d.ts.map +0 -0
- package/dist/src/parser/parseAttributes.min.mjs +0 -0
- package/dist/src/parser/parseAttributes.min.mjs.map +0 -0
- package/dist/src/parser/parseAttributes.mjs +0 -0
- package/dist/src/parser/parseAttributes.mjs.map +0 -0
- package/dist/src/parser/parseFontDeclaration.d.ts +0 -0
- package/dist/src/parser/parseFontDeclaration.d.ts.map +0 -0
- package/dist/src/parser/parseFontDeclaration.min.mjs +0 -0
- package/dist/src/parser/parseFontDeclaration.min.mjs.map +0 -0
- package/dist/src/parser/parseFontDeclaration.mjs +0 -0
- package/dist/src/parser/parseFontDeclaration.mjs.map +0 -0
- package/dist/src/parser/parsePointsAttribute.d.ts +0 -0
- package/dist/src/parser/parsePointsAttribute.d.ts.map +0 -0
- package/dist/src/parser/parsePointsAttribute.min.mjs +0 -0
- package/dist/src/parser/parsePointsAttribute.min.mjs.map +0 -0
- package/dist/src/parser/parsePointsAttribute.mjs +0 -0
- package/dist/src/parser/parsePointsAttribute.mjs.map +0 -0
- package/dist/src/parser/parseSVGDocument.d.ts +0 -0
- package/dist/src/parser/parseSVGDocument.d.ts.map +0 -0
- package/dist/src/parser/parseSVGDocument.min.mjs +0 -0
- package/dist/src/parser/parseSVGDocument.min.mjs.map +0 -0
- package/dist/src/parser/parseSVGDocument.mjs +0 -0
- package/dist/src/parser/parseSVGDocument.mjs.map +0 -0
- package/dist/src/parser/parseStyleAttribute.d.ts +0 -0
- package/dist/src/parser/parseStyleAttribute.d.ts.map +0 -0
- package/dist/src/parser/parseStyleAttribute.min.mjs +0 -0
- package/dist/src/parser/parseStyleAttribute.min.mjs.map +0 -0
- package/dist/src/parser/parseStyleAttribute.mjs +0 -0
- package/dist/src/parser/parseStyleAttribute.mjs.map +0 -0
- package/dist/src/parser/parseStyleObject.d.ts +0 -0
- package/dist/src/parser/parseStyleObject.d.ts.map +0 -0
- package/dist/src/parser/parseStyleObject.min.mjs +0 -0
- package/dist/src/parser/parseStyleObject.min.mjs.map +0 -0
- package/dist/src/parser/parseStyleObject.mjs +0 -0
- package/dist/src/parser/parseStyleObject.mjs.map +0 -0
- package/dist/src/parser/parseStyleString.d.ts +0 -0
- package/dist/src/parser/parseStyleString.d.ts.map +0 -0
- package/dist/src/parser/parseStyleString.min.mjs +0 -0
- package/dist/src/parser/parseStyleString.min.mjs.map +0 -0
- package/dist/src/parser/parseStyleString.mjs +0 -0
- package/dist/src/parser/parseStyleString.mjs.map +0 -0
- package/dist/src/parser/parseTransformAttribute.d.ts +0 -0
- package/dist/src/parser/parseTransformAttribute.d.ts.map +0 -0
- package/dist/src/parser/parseTransformAttribute.min.mjs +0 -0
- package/dist/src/parser/parseTransformAttribute.min.mjs.map +0 -0
- package/dist/src/parser/parseTransformAttribute.mjs +0 -0
- package/dist/src/parser/parseTransformAttribute.mjs.map +0 -0
- package/dist/src/parser/parseUseDirectives.d.ts +0 -0
- package/dist/src/parser/parseUseDirectives.d.ts.map +0 -0
- package/dist/src/parser/parseUseDirectives.min.mjs +0 -0
- package/dist/src/parser/parseUseDirectives.min.mjs.map +0 -0
- package/dist/src/parser/parseUseDirectives.mjs +0 -0
- package/dist/src/parser/parseUseDirectives.mjs.map +0 -0
- package/dist/src/parser/percent.d.ts +0 -0
- package/dist/src/parser/percent.d.ts.map +0 -0
- package/dist/src/parser/percent.min.mjs +0 -0
- package/dist/src/parser/percent.min.mjs.map +0 -0
- package/dist/src/parser/percent.mjs +0 -0
- package/dist/src/parser/percent.mjs.map +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts.map +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.mjs +0 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +0 -0
- package/dist/src/parser/selectorMatches.d.ts +0 -0
- package/dist/src/parser/selectorMatches.d.ts.map +0 -0
- package/dist/src/parser/selectorMatches.min.mjs +0 -0
- package/dist/src/parser/selectorMatches.min.mjs.map +0 -0
- package/dist/src/parser/selectorMatches.mjs +0 -0
- package/dist/src/parser/selectorMatches.mjs.map +0 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts +0 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts.map +0 -0
- package/dist/src/parser/setStrokeFillOpacity.min.mjs +0 -0
- package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +0 -0
- package/dist/src/parser/setStrokeFillOpacity.mjs +0 -0
- package/dist/src/parser/setStrokeFillOpacity.mjs.map +0 -0
- package/dist/src/parser/typedefs.d.ts +0 -0
- package/dist/src/parser/typedefs.d.ts.map +0 -0
- package/dist/src/shapes/ActiveSelection.d.ts +0 -0
- package/dist/src/shapes/ActiveSelection.d.ts.map +0 -0
- package/dist/src/shapes/ActiveSelection.min.mjs +0 -0
- package/dist/src/shapes/ActiveSelection.min.mjs.map +0 -0
- package/dist/src/shapes/ActiveSelection.mjs +0 -0
- package/dist/src/shapes/ActiveSelection.mjs.map +0 -0
- package/dist/src/shapes/Circle.d.ts +0 -0
- package/dist/src/shapes/Circle.d.ts.map +0 -0
- package/dist/src/shapes/Circle.min.mjs +0 -0
- package/dist/src/shapes/Circle.min.mjs.map +0 -0
- package/dist/src/shapes/Circle.mjs +0 -0
- package/dist/src/shapes/Circle.mjs.map +0 -0
- package/dist/src/shapes/Ellipse.d.ts +0 -0
- package/dist/src/shapes/Ellipse.d.ts.map +0 -0
- package/dist/src/shapes/Ellipse.min.mjs +0 -0
- package/dist/src/shapes/Ellipse.min.mjs.map +0 -0
- package/dist/src/shapes/Ellipse.mjs +0 -0
- package/dist/src/shapes/Ellipse.mjs.map +0 -0
- package/dist/src/shapes/Group.d.ts +0 -0
- package/dist/src/shapes/Group.d.ts.map +0 -0
- package/dist/src/shapes/Group.min.mjs +0 -0
- package/dist/src/shapes/Group.min.mjs.map +0 -0
- package/dist/src/shapes/Group.mjs +0 -0
- package/dist/src/shapes/Group.mjs.map +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs +0 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +0 -0
- package/dist/src/shapes/IText/IText.d.ts +0 -0
- package/dist/src/shapes/IText/IText.d.ts.map +0 -0
- package/dist/src/shapes/IText/IText.min.mjs +0 -0
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs +206 -206
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.d.ts +0 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs +221 -157
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +0 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts.map +0 -0
- package/dist/src/shapes/IText/ITextClickBehavior.min.mjs +0 -0
- package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.mjs +36 -36
- package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +0 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts.map +0 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +0 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs +115 -115
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/constants.d.ts +0 -0
- package/dist/src/shapes/IText/constants.d.ts.map +0 -0
- package/dist/src/shapes/IText/constants.min.mjs +0 -0
- package/dist/src/shapes/IText/constants.min.mjs.map +0 -0
- package/dist/src/shapes/IText/constants.mjs +0 -0
- package/dist/src/shapes/IText/constants.mjs.map +0 -0
- package/dist/src/shapes/Image.d.ts +0 -0
- package/dist/src/shapes/Image.d.ts.map +0 -0
- package/dist/src/shapes/Image.min.mjs +0 -0
- package/dist/src/shapes/Image.min.mjs.map +0 -0
- package/dist/src/shapes/Image.mjs +0 -0
- package/dist/src/shapes/Image.mjs.map +0 -0
- package/dist/src/shapes/Line.d.ts +0 -0
- package/dist/src/shapes/Line.d.ts.map +0 -0
- package/dist/src/shapes/Line.min.mjs +0 -0
- package/dist/src/shapes/Line.min.mjs.map +0 -0
- package/dist/src/shapes/Line.mjs +0 -0
- package/dist/src/shapes/Line.mjs.map +0 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +0 -0
- package/dist/src/shapes/Object/FabricObject.d.ts.map +0 -0
- package/dist/src/shapes/Object/FabricObject.min.mjs +0 -0
- package/dist/src/shapes/Object/FabricObject.min.mjs.map +0 -0
- package/dist/src/shapes/Object/FabricObject.mjs +0 -0
- package/dist/src/shapes/Object/FabricObject.mjs.map +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +0 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +0 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +0 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +0 -0
- package/dist/src/shapes/Object/InteractiveObject.min.mjs +0 -0
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +0 -0
- package/dist/src/shapes/Object/InteractiveObject.mjs +0 -0
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +0 -0
- package/dist/src/shapes/Object/Object.d.ts +0 -0
- package/dist/src/shapes/Object/Object.d.ts.map +0 -0
- package/dist/src/shapes/Object/Object.min.mjs +0 -0
- package/dist/src/shapes/Object/Object.min.mjs.map +0 -0
- package/dist/src/shapes/Object/Object.mjs +0 -0
- package/dist/src/shapes/Object/Object.mjs.map +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts.map +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.mjs +0 -0
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +0 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +0 -0
- package/dist/src/shapes/Object/defaultValues.d.ts.map +0 -0
- package/dist/src/shapes/Object/defaultValues.min.mjs +0 -0
- package/dist/src/shapes/Object/defaultValues.min.mjs.map +0 -0
- package/dist/src/shapes/Object/defaultValues.mjs +0 -0
- package/dist/src/shapes/Object/defaultValues.mjs.map +0 -0
- package/dist/src/shapes/Object/types/BaseProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/BaseProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/BorderProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/BorderProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/ControlProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/ControlProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/FillStrokeProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/LockInteractionProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/ObjectProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/ObjectTransformProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/ObjectTransformProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +0 -0
- package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts.map +0 -0
- package/dist/src/shapes/Object/types/index.d.ts +0 -0
- package/dist/src/shapes/Object/types/index.d.ts.map +0 -0
- package/dist/src/shapes/Path.d.ts +0 -0
- package/dist/src/shapes/Path.d.ts.map +0 -0
- package/dist/src/shapes/Path.min.mjs +0 -0
- package/dist/src/shapes/Path.min.mjs.map +0 -0
- package/dist/src/shapes/Path.mjs +0 -0
- package/dist/src/shapes/Path.mjs.map +0 -0
- package/dist/src/shapes/Polygon.d.ts +0 -0
- package/dist/src/shapes/Polygon.d.ts.map +0 -0
- package/dist/src/shapes/Polygon.min.mjs +0 -0
- package/dist/src/shapes/Polygon.min.mjs.map +0 -0
- package/dist/src/shapes/Polygon.mjs +0 -0
- package/dist/src/shapes/Polygon.mjs.map +0 -0
- package/dist/src/shapes/Polyline.d.ts +0 -0
- package/dist/src/shapes/Polyline.d.ts.map +0 -0
- package/dist/src/shapes/Polyline.min.mjs +0 -0
- package/dist/src/shapes/Polyline.min.mjs.map +0 -0
- package/dist/src/shapes/Polyline.mjs +0 -0
- package/dist/src/shapes/Polyline.mjs.map +0 -0
- package/dist/src/shapes/Rect.d.ts +0 -0
- package/dist/src/shapes/Rect.d.ts.map +0 -0
- package/dist/src/shapes/Rect.min.mjs +0 -0
- package/dist/src/shapes/Rect.min.mjs.map +0 -0
- package/dist/src/shapes/Rect.mjs +0 -0
- package/dist/src/shapes/Rect.mjs.map +0 -0
- package/dist/src/shapes/Text/StyledText.d.ts +0 -0
- package/dist/src/shapes/Text/StyledText.d.ts.map +0 -0
- package/dist/src/shapes/Text/StyledText.min.mjs +0 -0
- package/dist/src/shapes/Text/StyledText.min.mjs.map +0 -0
- package/dist/src/shapes/Text/StyledText.mjs +0 -0
- package/dist/src/shapes/Text/StyledText.mjs.map +0 -0
- package/dist/src/shapes/Text/Text.d.ts +1 -0
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +20 -7
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +0 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +0 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +0 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +0 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs +0 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +0 -0
- package/dist/src/shapes/Text/constants.d.ts +0 -0
- package/dist/src/shapes/Text/constants.d.ts.map +0 -0
- package/dist/src/shapes/Text/constants.min.mjs +0 -0
- package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.mjs +0 -0
- package/dist/src/shapes/Text/constants.mjs.map +1 -1
- package/dist/src/shapes/Textbox.d.ts +20 -0
- package/dist/src/shapes/Textbox.d.ts.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs +242 -22
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.d.ts +0 -0
- package/dist/src/shapes/Triangle.d.ts.map +0 -0
- package/dist/src/shapes/Triangle.min.mjs +0 -0
- package/dist/src/shapes/Triangle.min.mjs.map +0 -0
- package/dist/src/shapes/Triangle.mjs +0 -0
- package/dist/src/shapes/Triangle.mjs.map +0 -0
- package/dist/src/text/browserLines.d.ts +7 -2
- package/dist/src/text/browserLines.d.ts.map +1 -1
- package/dist/src/text/browserLines.min.mjs +1 -1
- package/dist/src/text/browserLines.min.mjs.map +1 -1
- package/dist/src/text/browserLines.mjs +35 -25
- package/dist/src/text/browserLines.mjs.map +1 -1
- package/dist/src/text/ellipsis.d.ts +0 -0
- package/dist/src/text/ellipsis.d.ts.map +0 -0
- package/dist/src/text/ellipsis.min.mjs +0 -0
- package/dist/src/text/ellipsis.min.mjs.map +1 -1
- package/dist/src/text/ellipsis.mjs +11 -11
- package/dist/src/text/ellipsis.mjs.map +1 -1
- package/dist/src/text/hitTest.d.ts +0 -0
- package/dist/src/text/hitTest.d.ts.map +0 -0
- package/dist/src/text/hitTest.min.mjs +0 -0
- package/dist/src/text/hitTest.min.mjs.map +1 -1
- package/dist/src/text/hitTest.mjs +19 -19
- package/dist/src/text/hitTest.mjs.map +1 -1
- package/dist/src/text/layout.d.ts +0 -0
- package/dist/src/text/layout.d.ts.map +0 -0
- package/dist/src/text/layout.min.mjs +0 -0
- package/dist/src/text/layout.min.mjs.map +1 -1
- package/dist/src/text/layout.mjs +33 -33
- package/dist/src/text/layout.mjs.map +1 -1
- package/dist/src/text/measure.d.ts +0 -0
- package/dist/src/text/measure.d.ts.map +0 -0
- package/dist/src/text/measure.min.mjs +0 -0
- package/dist/src/text/measure.min.mjs.map +1 -1
- package/dist/src/text/measure.mjs +30 -30
- package/dist/src/text/measure.mjs.map +1 -1
- package/dist/src/text/overlayEditor.d.ts +1 -0
- package/dist/src/text/overlayEditor.d.ts.map +1 -1
- package/dist/src/text/overlayEditor.min.mjs +1 -1
- package/dist/src/text/overlayEditor.min.mjs.map +1 -1
- package/dist/src/text/overlayEditor.mjs +70 -51
- package/dist/src/text/overlayEditor.mjs.map +1 -1
- package/dist/src/text/unicode.d.ts +0 -0
- package/dist/src/text/unicode.d.ts.map +0 -0
- package/dist/src/text/unicode.min.mjs +0 -0
- package/dist/src/text/unicode.min.mjs.map +1 -1
- package/dist/src/text/unicode.mjs +8 -8
- package/dist/src/text/unicode.mjs.map +1 -1
- package/dist/src/typedefs.d.ts +0 -0
- package/dist/src/typedefs.d.ts.map +0 -0
- package/dist/src/util/animation/AnimationBase.d.ts +0 -0
- package/dist/src/util/animation/AnimationBase.d.ts.map +0 -0
- package/dist/src/util/animation/AnimationBase.min.mjs +0 -0
- package/dist/src/util/animation/AnimationBase.min.mjs.map +0 -0
- package/dist/src/util/animation/AnimationBase.mjs +0 -0
- package/dist/src/util/animation/AnimationBase.mjs.map +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts.map +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.min.mjs +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.min.mjs.map +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.mjs +0 -0
- package/dist/src/util/animation/AnimationFrameProvider.mjs.map +0 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts +0 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts.map +0 -0
- package/dist/src/util/animation/AnimationRegistry.min.mjs +0 -0
- package/dist/src/util/animation/AnimationRegistry.min.mjs.map +0 -0
- package/dist/src/util/animation/AnimationRegistry.mjs +0 -0
- package/dist/src/util/animation/AnimationRegistry.mjs.map +0 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts +0 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts.map +0 -0
- package/dist/src/util/animation/ArrayAnimation.min.mjs +0 -0
- package/dist/src/util/animation/ArrayAnimation.min.mjs.map +0 -0
- package/dist/src/util/animation/ArrayAnimation.mjs +0 -0
- package/dist/src/util/animation/ArrayAnimation.mjs.map +0 -0
- package/dist/src/util/animation/ColorAnimation.d.ts +0 -0
- package/dist/src/util/animation/ColorAnimation.d.ts.map +0 -0
- package/dist/src/util/animation/ColorAnimation.min.mjs +0 -0
- package/dist/src/util/animation/ColorAnimation.min.mjs.map +0 -0
- package/dist/src/util/animation/ColorAnimation.mjs +0 -0
- package/dist/src/util/animation/ColorAnimation.mjs.map +0 -0
- package/dist/src/util/animation/ValueAnimation.d.ts +0 -0
- package/dist/src/util/animation/ValueAnimation.d.ts.map +0 -0
- package/dist/src/util/animation/ValueAnimation.min.mjs +0 -0
- package/dist/src/util/animation/ValueAnimation.min.mjs.map +0 -0
- package/dist/src/util/animation/ValueAnimation.mjs +0 -0
- package/dist/src/util/animation/ValueAnimation.mjs.map +0 -0
- package/dist/src/util/animation/animate.d.ts +0 -0
- package/dist/src/util/animation/animate.d.ts.map +0 -0
- package/dist/src/util/animation/animate.min.mjs +0 -0
- package/dist/src/util/animation/animate.min.mjs.map +0 -0
- package/dist/src/util/animation/animate.mjs +0 -0
- package/dist/src/util/animation/animate.mjs.map +0 -0
- package/dist/src/util/animation/easing.d.ts +0 -0
- package/dist/src/util/animation/easing.d.ts.map +0 -0
- package/dist/src/util/animation/easing.min.mjs +0 -0
- package/dist/src/util/animation/easing.min.mjs.map +0 -0
- package/dist/src/util/animation/easing.mjs +0 -0
- package/dist/src/util/animation/easing.mjs.map +0 -0
- package/dist/src/util/animation/index.d.ts +0 -0
- package/dist/src/util/animation/index.d.ts.map +0 -0
- package/dist/src/util/animation/types.d.ts +0 -0
- package/dist/src/util/animation/types.d.ts.map +0 -0
- package/dist/src/util/applyMixins.d.ts +0 -0
- package/dist/src/util/applyMixins.d.ts.map +0 -0
- package/dist/src/util/applyMixins.min.mjs +0 -0
- package/dist/src/util/applyMixins.min.mjs.map +0 -0
- package/dist/src/util/applyMixins.mjs +0 -0
- package/dist/src/util/applyMixins.mjs.map +0 -0
- package/dist/src/util/dom_event.d.ts +0 -0
- package/dist/src/util/dom_event.d.ts.map +0 -0
- package/dist/src/util/dom_event.min.mjs +0 -0
- package/dist/src/util/dom_event.min.mjs.map +0 -0
- package/dist/src/util/dom_event.mjs +0 -0
- package/dist/src/util/dom_event.mjs.map +0 -0
- package/dist/src/util/dom_misc.d.ts +0 -0
- package/dist/src/util/dom_misc.d.ts.map +0 -0
- package/dist/src/util/dom_misc.min.mjs +0 -0
- package/dist/src/util/dom_misc.min.mjs.map +0 -0
- package/dist/src/util/dom_misc.mjs +0 -0
- package/dist/src/util/dom_misc.mjs.map +0 -0
- package/dist/src/util/index.d.ts +0 -0
- package/dist/src/util/index.d.ts.map +0 -0
- package/dist/src/util/index.min.mjs +0 -0
- package/dist/src/util/index.min.mjs.map +0 -0
- package/dist/src/util/index.mjs +0 -0
- package/dist/src/util/index.mjs.map +0 -0
- package/dist/src/util/internals/applyCanvasTransform.d.ts +0 -0
- package/dist/src/util/internals/applyCanvasTransform.d.ts.map +0 -0
- package/dist/src/util/internals/applyCanvasTransform.min.mjs +0 -0
- package/dist/src/util/internals/applyCanvasTransform.min.mjs.map +0 -0
- package/dist/src/util/internals/applyCanvasTransform.mjs +0 -0
- package/dist/src/util/internals/applyCanvasTransform.mjs.map +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.d.ts +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.d.ts.map +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.min.mjs +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.min.mjs.map +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.mjs +0 -0
- package/dist/src/util/internals/cleanupSvgAttribute.mjs.map +0 -0
- package/dist/src/util/internals/cloneStyles.d.ts +0 -0
- package/dist/src/util/internals/cloneStyles.d.ts.map +0 -0
- package/dist/src/util/internals/cloneStyles.min.mjs +0 -0
- package/dist/src/util/internals/cloneStyles.min.mjs.map +0 -0
- package/dist/src/util/internals/cloneStyles.mjs +0 -0
- package/dist/src/util/internals/cloneStyles.mjs.map +0 -0
- package/dist/src/util/internals/console.d.ts +0 -0
- package/dist/src/util/internals/console.d.ts.map +0 -0
- package/dist/src/util/internals/console.min.mjs +0 -0
- package/dist/src/util/internals/console.min.mjs.map +0 -0
- package/dist/src/util/internals/console.mjs +0 -0
- package/dist/src/util/internals/console.mjs.map +0 -0
- package/dist/src/util/internals/dom_style.d.ts +0 -0
- package/dist/src/util/internals/dom_style.d.ts.map +0 -0
- package/dist/src/util/internals/dom_style.min.mjs +0 -0
- package/dist/src/util/internals/dom_style.min.mjs.map +0 -0
- package/dist/src/util/internals/dom_style.mjs +0 -0
- package/dist/src/util/internals/dom_style.mjs.map +0 -0
- package/dist/src/util/internals/findRight.d.ts +0 -0
- package/dist/src/util/internals/findRight.d.ts.map +0 -0
- package/dist/src/util/internals/findRight.min.mjs +0 -0
- package/dist/src/util/internals/findRight.min.mjs.map +0 -0
- package/dist/src/util/internals/findRight.mjs +0 -0
- package/dist/src/util/internals/findRight.mjs.map +0 -0
- package/dist/src/util/internals/getRandomInt.d.ts +0 -0
- package/dist/src/util/internals/getRandomInt.d.ts.map +0 -0
- package/dist/src/util/internals/getRandomInt.min.mjs +0 -0
- package/dist/src/util/internals/getRandomInt.min.mjs.map +0 -0
- package/dist/src/util/internals/getRandomInt.mjs +0 -0
- package/dist/src/util/internals/getRandomInt.mjs.map +0 -0
- package/dist/src/util/internals/ifNaN.d.ts +0 -0
- package/dist/src/util/internals/ifNaN.d.ts.map +0 -0
- package/dist/src/util/internals/ifNaN.min.mjs +0 -0
- package/dist/src/util/internals/ifNaN.min.mjs.map +0 -0
- package/dist/src/util/internals/ifNaN.mjs +0 -0
- package/dist/src/util/internals/ifNaN.mjs.map +0 -0
- package/dist/src/util/internals/removeFromArray.d.ts +0 -0
- package/dist/src/util/internals/removeFromArray.d.ts.map +0 -0
- package/dist/src/util/internals/removeFromArray.min.mjs +0 -0
- package/dist/src/util/internals/removeFromArray.min.mjs.map +0 -0
- package/dist/src/util/internals/removeFromArray.mjs +0 -0
- package/dist/src/util/internals/removeFromArray.mjs.map +0 -0
- package/dist/src/util/internals/uid.d.ts +0 -0
- package/dist/src/util/internals/uid.d.ts.map +0 -0
- package/dist/src/util/internals/uid.min.mjs +0 -0
- package/dist/src/util/internals/uid.min.mjs.map +0 -0
- package/dist/src/util/internals/uid.mjs +0 -0
- package/dist/src/util/internals/uid.mjs.map +0 -0
- package/dist/src/util/lang_string.d.ts +0 -0
- package/dist/src/util/lang_string.d.ts.map +0 -0
- package/dist/src/util/lang_string.min.mjs +0 -0
- package/dist/src/util/lang_string.min.mjs.map +0 -0
- package/dist/src/util/lang_string.mjs +0 -0
- package/dist/src/util/lang_string.mjs.map +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts.map +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.mjs +0 -0
- package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +0 -0
- package/dist/src/util/misc/capValue.d.ts +0 -0
- package/dist/src/util/misc/capValue.d.ts.map +0 -0
- package/dist/src/util/misc/capValue.min.mjs +0 -0
- package/dist/src/util/misc/capValue.min.mjs.map +0 -0
- package/dist/src/util/misc/capValue.mjs +0 -0
- package/dist/src/util/misc/capValue.mjs.map +0 -0
- package/dist/src/util/misc/cornerRadius.d.ts +0 -0
- package/dist/src/util/misc/cornerRadius.d.ts.map +0 -0
- package/dist/src/util/misc/cornerRadius.min.mjs +0 -0
- package/dist/src/util/misc/cornerRadius.min.mjs.map +0 -0
- package/dist/src/util/misc/cornerRadius.mjs +0 -0
- package/dist/src/util/misc/cornerRadius.mjs.map +0 -0
- package/dist/src/util/misc/cos.d.ts +0 -0
- package/dist/src/util/misc/cos.d.ts.map +0 -0
- package/dist/src/util/misc/cos.min.mjs +0 -0
- package/dist/src/util/misc/cos.min.mjs.map +0 -0
- package/dist/src/util/misc/cos.mjs +0 -0
- package/dist/src/util/misc/cos.mjs.map +0 -0
- package/dist/src/util/misc/dom.d.ts +0 -0
- package/dist/src/util/misc/dom.d.ts.map +0 -0
- package/dist/src/util/misc/dom.min.mjs +0 -0
- package/dist/src/util/misc/dom.min.mjs.map +0 -0
- package/dist/src/util/misc/dom.mjs +0 -0
- package/dist/src/util/misc/dom.mjs.map +0 -0
- package/dist/src/util/misc/findScaleTo.d.ts +0 -0
- package/dist/src/util/misc/findScaleTo.d.ts.map +0 -0
- package/dist/src/util/misc/findScaleTo.min.mjs +0 -0
- package/dist/src/util/misc/findScaleTo.min.mjs.map +0 -0
- package/dist/src/util/misc/findScaleTo.mjs +0 -0
- package/dist/src/util/misc/findScaleTo.mjs.map +0 -0
- package/dist/src/util/misc/groupSVGElements.d.ts +0 -0
- package/dist/src/util/misc/groupSVGElements.d.ts.map +0 -0
- package/dist/src/util/misc/groupSVGElements.min.mjs +0 -0
- package/dist/src/util/misc/groupSVGElements.min.mjs.map +0 -0
- package/dist/src/util/misc/groupSVGElements.mjs +0 -0
- package/dist/src/util/misc/groupSVGElements.mjs.map +0 -0
- package/dist/src/util/misc/isTransparent.d.ts +0 -0
- package/dist/src/util/misc/isTransparent.d.ts.map +0 -0
- package/dist/src/util/misc/isTransparent.min.mjs +0 -0
- package/dist/src/util/misc/isTransparent.min.mjs.map +0 -0
- package/dist/src/util/misc/isTransparent.mjs +0 -0
- package/dist/src/util/misc/isTransparent.mjs.map +0 -0
- package/dist/src/util/misc/matrix.d.ts +0 -0
- package/dist/src/util/misc/matrix.d.ts.map +0 -0
- package/dist/src/util/misc/matrix.min.mjs +0 -0
- package/dist/src/util/misc/matrix.min.mjs.map +0 -0
- package/dist/src/util/misc/matrix.mjs +0 -0
- package/dist/src/util/misc/matrix.mjs.map +0 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts +0 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts.map +0 -0
- package/dist/src/util/misc/mergeClipPaths.min.mjs +0 -0
- package/dist/src/util/misc/mergeClipPaths.min.mjs.map +0 -0
- package/dist/src/util/misc/mergeClipPaths.mjs +0 -0
- package/dist/src/util/misc/mergeClipPaths.mjs.map +0 -0
- package/dist/src/util/misc/objectEnlive.d.ts +0 -0
- package/dist/src/util/misc/objectEnlive.d.ts.map +0 -0
- package/dist/src/util/misc/objectEnlive.min.mjs +0 -0
- package/dist/src/util/misc/objectEnlive.min.mjs.map +0 -0
- package/dist/src/util/misc/objectEnlive.mjs +0 -0
- package/dist/src/util/misc/objectEnlive.mjs.map +0 -0
- package/dist/src/util/misc/objectTransforms.d.ts +0 -0
- package/dist/src/util/misc/objectTransforms.d.ts.map +0 -0
- package/dist/src/util/misc/objectTransforms.min.mjs +0 -0
- package/dist/src/util/misc/objectTransforms.min.mjs.map +0 -0
- package/dist/src/util/misc/objectTransforms.mjs +0 -0
- package/dist/src/util/misc/objectTransforms.mjs.map +0 -0
- package/dist/src/util/misc/pick.d.ts +0 -0
- package/dist/src/util/misc/pick.d.ts.map +0 -0
- package/dist/src/util/misc/pick.min.mjs +0 -0
- package/dist/src/util/misc/pick.min.mjs.map +0 -0
- package/dist/src/util/misc/pick.mjs +0 -0
- package/dist/src/util/misc/pick.mjs.map +0 -0
- package/dist/src/util/misc/planeChange.d.ts +0 -0
- package/dist/src/util/misc/planeChange.d.ts.map +0 -0
- package/dist/src/util/misc/planeChange.min.mjs +0 -0
- package/dist/src/util/misc/planeChange.min.mjs.map +0 -0
- package/dist/src/util/misc/planeChange.mjs +0 -0
- package/dist/src/util/misc/planeChange.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs +0 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/index.d.ts +0 -0
- package/dist/src/util/misc/projectStroke/index.d.ts.map +0 -0
- package/dist/src/util/misc/projectStroke/index.min.mjs +0 -0
- package/dist/src/util/misc/projectStroke/index.min.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/index.mjs +0 -0
- package/dist/src/util/misc/projectStroke/index.mjs.map +0 -0
- package/dist/src/util/misc/projectStroke/types.d.ts +0 -0
- package/dist/src/util/misc/projectStroke/types.d.ts.map +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts.map +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.min.mjs +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.min.mjs.map +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.mjs +0 -0
- package/dist/src/util/misc/radiansDegreesConversion.mjs.map +0 -0
- package/dist/src/util/misc/resolveOrigin.d.ts +0 -0
- package/dist/src/util/misc/resolveOrigin.d.ts.map +0 -0
- package/dist/src/util/misc/resolveOrigin.min.mjs +0 -0
- package/dist/src/util/misc/resolveOrigin.min.mjs.map +0 -0
- package/dist/src/util/misc/resolveOrigin.mjs +0 -0
- package/dist/src/util/misc/resolveOrigin.mjs.map +0 -0
- package/dist/src/util/misc/sin.d.ts +0 -0
- package/dist/src/util/misc/sin.d.ts.map +0 -0
- package/dist/src/util/misc/sin.min.mjs +0 -0
- package/dist/src/util/misc/sin.min.mjs.map +0 -0
- package/dist/src/util/misc/sin.mjs +0 -0
- package/dist/src/util/misc/sin.mjs.map +0 -0
- package/dist/src/util/misc/svgExport.d.ts +0 -0
- package/dist/src/util/misc/svgExport.d.ts.map +0 -0
- package/dist/src/util/misc/svgExport.min.mjs +0 -0
- package/dist/src/util/misc/svgExport.min.mjs.map +0 -0
- package/dist/src/util/misc/svgExport.mjs +0 -0
- package/dist/src/util/misc/svgExport.mjs.map +0 -0
- package/dist/src/util/misc/svgParsing.d.ts +0 -0
- package/dist/src/util/misc/svgParsing.d.ts.map +0 -0
- package/dist/src/util/misc/svgParsing.min.mjs +0 -0
- package/dist/src/util/misc/svgParsing.min.mjs.map +0 -0
- package/dist/src/util/misc/svgParsing.mjs +0 -0
- package/dist/src/util/misc/svgParsing.mjs.map +0 -0
- package/dist/src/util/misc/textStyles.d.ts +0 -0
- package/dist/src/util/misc/textStyles.d.ts.map +0 -0
- package/dist/src/util/misc/textStyles.min.mjs +0 -0
- package/dist/src/util/misc/textStyles.min.mjs.map +0 -0
- package/dist/src/util/misc/textStyles.mjs +0 -0
- package/dist/src/util/misc/textStyles.mjs.map +0 -0
- package/dist/src/util/misc/toFixed.d.ts +0 -0
- package/dist/src/util/misc/toFixed.d.ts.map +0 -0
- package/dist/src/util/misc/toFixed.min.mjs +0 -0
- package/dist/src/util/misc/toFixed.min.mjs.map +0 -0
- package/dist/src/util/misc/toFixed.mjs +0 -0
- package/dist/src/util/misc/toFixed.mjs.map +0 -0
- package/dist/src/util/misc/vectors.d.ts +0 -0
- package/dist/src/util/misc/vectors.d.ts.map +0 -0
- package/dist/src/util/misc/vectors.min.mjs +0 -0
- package/dist/src/util/misc/vectors.min.mjs.map +0 -0
- package/dist/src/util/misc/vectors.mjs +0 -0
- package/dist/src/util/misc/vectors.mjs.map +0 -0
- package/dist/src/util/path/index.d.ts +0 -0
- package/dist/src/util/path/index.d.ts.map +0 -0
- package/dist/src/util/path/index.min.mjs +0 -0
- package/dist/src/util/path/index.min.mjs.map +0 -0
- package/dist/src/util/path/index.mjs +0 -0
- package/dist/src/util/path/index.mjs.map +0 -0
- package/dist/src/util/path/regex.d.ts +0 -0
- package/dist/src/util/path/regex.d.ts.map +0 -0
- package/dist/src/util/path/regex.min.mjs +0 -0
- package/dist/src/util/path/regex.min.mjs.map +0 -0
- package/dist/src/util/path/regex.mjs +0 -0
- package/dist/src/util/path/regex.mjs.map +0 -0
- package/dist/src/util/path/typechecks.d.ts +0 -0
- package/dist/src/util/path/typechecks.d.ts.map +0 -0
- package/dist/src/util/path/typedefs.d.ts +0 -0
- package/dist/src/util/path/typedefs.d.ts.map +0 -0
- package/dist/src/util/transform_matrix_removal.d.ts +0 -0
- package/dist/src/util/transform_matrix_removal.d.ts.map +0 -0
- package/dist/src/util/transform_matrix_removal.min.mjs +0 -0
- package/dist/src/util/transform_matrix_removal.min.mjs.map +0 -0
- package/dist/src/util/transform_matrix_removal.mjs +0 -0
- package/dist/src/util/transform_matrix_removal.mjs.map +0 -0
- package/dist/src/util/typeAssertions.d.ts +0 -0
- package/dist/src/util/typeAssertions.d.ts.map +0 -0
- package/dist/src/util/typeAssertions.min.mjs +0 -0
- package/dist/src/util/typeAssertions.min.mjs.map +0 -0
- package/dist/src/util/typeAssertions.mjs +0 -0
- package/dist/src/util/typeAssertions.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/constant.mjs +0 -0
- package/dist-extensions/aligning_guidelines/constant.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/index.mjs +0 -0
- package/dist-extensions/aligning_guidelines/index.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs +0 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs +0 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs +0 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs +0 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs.map +0 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +0 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +0 -0
- package/dist-extensions/data_updaters/gradient/index.mjs +0 -0
- package/dist-extensions/data_updaters/gradient/index.mjs.map +0 -0
- package/dist-extensions/data_updaters/origins/index.mjs +0 -0
- package/dist-extensions/data_updaters/origins/index.mjs.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +0 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +0 -0
- package/dist-extensions/extensions/data_updaters/gradient/index.d.ts +0 -0
- package/dist-extensions/extensions/data_updaters/gradient/index.d.ts.map +0 -0
- package/dist-extensions/extensions/data_updaters/origins/index.d.ts +0 -0
- package/dist-extensions/extensions/data_updaters/origins/index.d.ts.map +0 -0
- package/dist-extensions/extensions/index.d.ts +0 -0
- package/dist-extensions/extensions/index.d.ts.map +0 -0
- package/dist-extensions/fabric-extensions.min.js +0 -0
- package/dist-extensions/fabric-extensions.min.js.map +0 -0
- package/dist-extensions/fabric.d.ts +0 -0
- package/dist-extensions/fabric.d.ts.map +0 -0
- package/dist-extensions/index.d.ts +0 -0
- package/dist-extensions/index.d.ts.map +0 -0
- package/dist-extensions/index.mjs +0 -0
- package/dist-extensions/index.mjs.map +0 -0
- package/dist-extensions/src/ClassRegistry.d.ts +0 -0
- package/dist-extensions/src/ClassRegistry.d.ts.map +0 -0
- package/dist-extensions/src/Collection.d.ts +0 -0
- package/dist-extensions/src/Collection.d.ts.map +0 -0
- package/dist-extensions/src/CommonMethods.d.ts +0 -0
- package/dist-extensions/src/CommonMethods.d.ts.map +0 -0
- package/dist-extensions/src/EventTypeDefs.d.ts +0 -0
- package/dist-extensions/src/EventTypeDefs.d.ts.map +0 -0
- package/dist-extensions/src/Intersection.d.ts +0 -0
- package/dist-extensions/src/Intersection.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/index.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/index.d.ts.map +0 -0
- package/dist-extensions/src/LayoutManager/types.d.ts +0 -0
- package/dist-extensions/src/LayoutManager/types.d.ts.map +0 -0
- package/dist-extensions/src/Observable.d.ts +0 -0
- package/dist-extensions/src/Observable.d.ts.map +0 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts +0 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +0 -0
- package/dist-extensions/src/Pattern/index.d.ts +0 -0
- package/dist-extensions/src/Pattern/index.d.ts.map +0 -0
- package/dist-extensions/src/Pattern/types.d.ts +0 -0
- package/dist-extensions/src/Pattern/types.d.ts.map +0 -0
- package/dist-extensions/src/Point.d.ts +0 -0
- package/dist-extensions/src/Point.d.ts.map +0 -0
- package/dist-extensions/src/Shadow.d.ts +0 -0
- package/dist-extensions/src/Shadow.d.ts.map +0 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts +0 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts.map +0 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts +0 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts.map +0 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts +0 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts.map +0 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts +0 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts.map +0 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts +0 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts.map +0 -0
- package/dist-extensions/src/brushes/typedefs.d.ts +0 -0
- package/dist-extensions/src/brushes/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/cache.d.ts +0 -0
- package/dist-extensions/src/cache.d.ts.map +0 -0
- package/dist-extensions/src/canvas/Canvas.d.ts +0 -0
- package/dist-extensions/src/canvas/Canvas.d.ts.map +0 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts +0 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +0 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +0 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +0 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +0 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +0 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts +0 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +0 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts +0 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +0 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts +0 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +0 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +0 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +0 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts +0 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +0 -0
- package/dist-extensions/src/color/Color.d.ts +0 -0
- package/dist-extensions/src/color/Color.d.ts.map +0 -0
- package/dist-extensions/src/color/color_map.d.ts +0 -0
- package/dist-extensions/src/color/color_map.d.ts.map +0 -0
- package/dist-extensions/src/color/constants.d.ts +0 -0
- package/dist-extensions/src/color/constants.d.ts.map +0 -0
- package/dist-extensions/src/color/typedefs.d.ts +0 -0
- package/dist-extensions/src/color/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/color/util.d.ts +0 -0
- package/dist-extensions/src/color/util.d.ts.map +0 -0
- package/dist-extensions/src/config.d.ts +0 -0
- package/dist-extensions/src/config.d.ts.map +0 -0
- package/dist-extensions/src/constants.d.ts +0 -0
- package/dist-extensions/src/constants.d.ts.map +0 -0
- package/dist-extensions/src/controls/Control.d.ts +0 -0
- package/dist-extensions/src/controls/Control.d.ts.map +0 -0
- package/dist-extensions/src/controls/changeHeight.d.ts +0 -0
- package/dist-extensions/src/controls/changeHeight.d.ts.map +0 -0
- package/dist-extensions/src/controls/changeWidth.d.ts +0 -0
- package/dist-extensions/src/controls/changeWidth.d.ts.map +0 -0
- package/dist-extensions/src/controls/commonControls.d.ts +0 -0
- package/dist-extensions/src/controls/commonControls.d.ts.map +0 -0
- package/dist-extensions/src/controls/controlRendering.d.ts +0 -0
- package/dist-extensions/src/controls/controlRendering.d.ts.map +0 -0
- package/dist-extensions/src/controls/drag.d.ts +0 -0
- package/dist-extensions/src/controls/drag.d.ts.map +0 -0
- package/dist-extensions/src/controls/fireEvent.d.ts +0 -0
- package/dist-extensions/src/controls/fireEvent.d.ts.map +0 -0
- package/dist-extensions/src/controls/index.d.ts +0 -0
- package/dist-extensions/src/controls/index.d.ts.map +0 -0
- package/dist-extensions/src/controls/pathControl.d.ts +0 -0
- package/dist-extensions/src/controls/pathControl.d.ts.map +0 -0
- package/dist-extensions/src/controls/polyControl.d.ts +0 -0
- package/dist-extensions/src/controls/polyControl.d.ts.map +0 -0
- package/dist-extensions/src/controls/rotate.d.ts +0 -0
- package/dist-extensions/src/controls/rotate.d.ts.map +0 -0
- package/dist-extensions/src/controls/scale.d.ts +0 -0
- package/dist-extensions/src/controls/scale.d.ts.map +0 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts +0 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts.map +0 -0
- package/dist-extensions/src/controls/skew.d.ts +0 -0
- package/dist-extensions/src/controls/skew.d.ts.map +0 -0
- package/dist-extensions/src/controls/util.d.ts +0 -0
- package/dist-extensions/src/controls/util.d.ts.map +0 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +0 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +0 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +0 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +0 -0
- package/dist-extensions/src/env/browser.d.ts +0 -0
- package/dist-extensions/src/env/browser.d.ts.map +0 -0
- package/dist-extensions/src/env/index.d.ts +0 -0
- package/dist-extensions/src/env/index.d.ts.map +0 -0
- package/dist-extensions/src/env/types.d.ts +0 -0
- package/dist-extensions/src/env/types.d.ts.map +0 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts +0 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts.map +0 -0
- package/dist-extensions/src/filters/BlendColor.d.ts +0 -0
- package/dist-extensions/src/filters/BlendColor.d.ts.map +0 -0
- package/dist-extensions/src/filters/BlendImage.d.ts +0 -0
- package/dist-extensions/src/filters/BlendImage.d.ts.map +0 -0
- package/dist-extensions/src/filters/Blur.d.ts +0 -0
- package/dist-extensions/src/filters/Blur.d.ts.map +0 -0
- package/dist-extensions/src/filters/Brightness.d.ts +0 -0
- package/dist-extensions/src/filters/Brightness.d.ts.map +0 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +0 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +0 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts +0 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts.map +0 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +0 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +0 -0
- package/dist-extensions/src/filters/Composed.d.ts +0 -0
- package/dist-extensions/src/filters/Composed.d.ts.map +0 -0
- package/dist-extensions/src/filters/Contrast.d.ts +0 -0
- package/dist-extensions/src/filters/Contrast.d.ts.map +0 -0
- package/dist-extensions/src/filters/Convolute.d.ts +0 -0
- package/dist-extensions/src/filters/Convolute.d.ts.map +0 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts +0 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts.map +0 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +0 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +0 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +0 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +0 -0
- package/dist-extensions/src/filters/Gamma.d.ts +0 -0
- package/dist-extensions/src/filters/Gamma.d.ts.map +0 -0
- package/dist-extensions/src/filters/Grayscale.d.ts +0 -0
- package/dist-extensions/src/filters/Grayscale.d.ts.map +0 -0
- package/dist-extensions/src/filters/HueRotation.d.ts +0 -0
- package/dist-extensions/src/filters/HueRotation.d.ts.map +0 -0
- package/dist-extensions/src/filters/Invert.d.ts +0 -0
- package/dist-extensions/src/filters/Invert.d.ts.map +0 -0
- package/dist-extensions/src/filters/Noise.d.ts +0 -0
- package/dist-extensions/src/filters/Noise.d.ts.map +0 -0
- package/dist-extensions/src/filters/Pixelate.d.ts +0 -0
- package/dist-extensions/src/filters/Pixelate.d.ts.map +0 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts +0 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts.map +0 -0
- package/dist-extensions/src/filters/Resize.d.ts +0 -0
- package/dist-extensions/src/filters/Resize.d.ts.map +0 -0
- package/dist-extensions/src/filters/Saturation.d.ts +0 -0
- package/dist-extensions/src/filters/Saturation.d.ts.map +0 -0
- package/dist-extensions/src/filters/Vibrance.d.ts +0 -0
- package/dist-extensions/src/filters/Vibrance.d.ts.map +0 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +0 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +0 -0
- package/dist-extensions/src/filters/filters.d.ts +0 -0
- package/dist-extensions/src/filters/filters.d.ts.map +0 -0
- package/dist-extensions/src/filters/index.d.ts +0 -0
- package/dist-extensions/src/filters/index.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts.map +0 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts +0 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +0 -0
- package/dist-extensions/src/filters/typedefs.d.ts +0 -0
- package/dist-extensions/src/filters/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/filters/utils.d.ts +0 -0
- package/dist-extensions/src/filters/utils.d.ts.map +0 -0
- package/dist-extensions/src/gradient/Gradient.d.ts +0 -0
- package/dist-extensions/src/gradient/Gradient.d.ts.map +0 -0
- package/dist-extensions/src/gradient/constants.d.ts +0 -0
- package/dist-extensions/src/gradient/constants.d.ts.map +0 -0
- package/dist-extensions/src/gradient/index.d.ts +0 -0
- package/dist-extensions/src/gradient/index.d.ts.map +0 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts +0 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts.map +0 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +0 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +0 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts +0 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +0 -0
- package/dist-extensions/src/gradient/typedefs.d.ts +0 -0
- package/dist-extensions/src/gradient/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts +0 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +0 -0
- package/dist-extensions/src/parser/attributes.d.ts +0 -0
- package/dist-extensions/src/parser/attributes.d.ts.map +0 -0
- package/dist-extensions/src/parser/constants.d.ts +0 -0
- package/dist-extensions/src/parser/constants.d.ts.map +0 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +0 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +0 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts +0 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +0 -0
- package/dist-extensions/src/parser/elements_parser.d.ts +0 -0
- package/dist-extensions/src/parser/elements_parser.d.ts.map +0 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts +0 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts.map +0 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +0 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +0 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts +0 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts.map +0 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts +0 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +0 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts +0 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts.map +0 -0
- package/dist-extensions/src/parser/getTagName.d.ts +0 -0
- package/dist-extensions/src/parser/getTagName.d.ts.map +0 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +0 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +0 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts +0 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +0 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts +0 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +0 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts +0 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts.map +0 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts +0 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts +0 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts +0 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +0 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts +0 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts +0 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts +0 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts +0 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts +0 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts +0 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +0 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts +0 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +0 -0
- package/dist-extensions/src/parser/percent.d.ts +0 -0
- package/dist-extensions/src/parser/percent.d.ts.map +0 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +0 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +0 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts +0 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts.map +0 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +0 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +0 -0
- package/dist-extensions/src/parser/typedefs.d.ts +0 -0
- package/dist-extensions/src/parser/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts +0 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Circle.d.ts +0 -0
- package/dist-extensions/src/shapes/Circle.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts +0 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Group.d.ts +0 -0
- package/dist-extensions/src/shapes/Group.d.ts.map +0 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +0 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts.map +0 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +0 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +0 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts +0 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Image.d.ts +0 -0
- package/dist-extensions/src/shapes/Image.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Line.d.ts +0 -0
- package/dist-extensions/src/shapes/Line.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts +0 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Path.d.ts +0 -0
- package/dist-extensions/src/shapes/Path.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Polygon.d.ts +0 -0
- package/dist-extensions/src/shapes/Polygon.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Polyline.d.ts +0 -0
- package/dist-extensions/src/shapes/Polyline.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Rect.d.ts +0 -0
- package/dist-extensions/src/shapes/Rect.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts +0 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts +1 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +0 -0
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts +0 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts.map +0 -0
- package/dist-extensions/src/shapes/Textbox.d.ts +20 -0
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Triangle.d.ts +0 -0
- package/dist-extensions/src/shapes/Triangle.d.ts.map +0 -0
- package/dist-extensions/src/text/browserLines.d.ts +7 -2
- package/dist-extensions/src/text/browserLines.d.ts.map +1 -1
- package/dist-extensions/src/text/ellipsis.d.ts +0 -0
- package/dist-extensions/src/text/ellipsis.d.ts.map +0 -0
- package/dist-extensions/src/text/hitTest.d.ts +0 -0
- package/dist-extensions/src/text/hitTest.d.ts.map +0 -0
- package/dist-extensions/src/text/layout.d.ts +0 -0
- package/dist-extensions/src/text/layout.d.ts.map +0 -0
- package/dist-extensions/src/text/measure.d.ts +0 -0
- package/dist-extensions/src/text/measure.d.ts.map +0 -0
- package/dist-extensions/src/text/overlayEditor.d.ts +1 -0
- package/dist-extensions/src/text/overlayEditor.d.ts.map +1 -1
- package/dist-extensions/src/text/unicode.d.ts +0 -0
- package/dist-extensions/src/text/unicode.d.ts.map +0 -0
- package/dist-extensions/src/typedefs.d.ts +0 -0
- package/dist-extensions/src/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts +0 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +0 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +0 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +0 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts +0 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts +0 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/animate.d.ts +0 -0
- package/dist-extensions/src/util/animation/animate.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/easing.d.ts +0 -0
- package/dist-extensions/src/util/animation/easing.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/index.d.ts +0 -0
- package/dist-extensions/src/util/animation/index.d.ts.map +0 -0
- package/dist-extensions/src/util/animation/types.d.ts +0 -0
- package/dist-extensions/src/util/animation/types.d.ts.map +0 -0
- package/dist-extensions/src/util/applyMixins.d.ts +0 -0
- package/dist-extensions/src/util/applyMixins.d.ts.map +0 -0
- package/dist-extensions/src/util/dom_event.d.ts +0 -0
- package/dist-extensions/src/util/dom_event.d.ts.map +0 -0
- package/dist-extensions/src/util/dom_misc.d.ts +0 -0
- package/dist-extensions/src/util/dom_misc.d.ts.map +0 -0
- package/dist-extensions/src/util/index.d.ts +0 -0
- package/dist-extensions/src/util/index.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/applyCanvasTransform.d.ts +0 -0
- package/dist-extensions/src/util/internals/applyCanvasTransform.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +0 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts +0 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/console.d.ts +0 -0
- package/dist-extensions/src/util/internals/console.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/dom_style.d.ts +0 -0
- package/dist-extensions/src/util/internals/dom_style.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/findRight.d.ts +0 -0
- package/dist-extensions/src/util/internals/findRight.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts +0 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts +0 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts +0 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +0 -0
- package/dist-extensions/src/util/internals/uid.d.ts +0 -0
- package/dist-extensions/src/util/internals/uid.d.ts.map +0 -0
- package/dist-extensions/src/util/lang_string.d.ts +0 -0
- package/dist-extensions/src/util/lang_string.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +0 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/capValue.d.ts +0 -0
- package/dist-extensions/src/util/misc/capValue.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/cornerRadius.d.ts +0 -0
- package/dist-extensions/src/util/misc/cornerRadius.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/cos.d.ts +0 -0
- package/dist-extensions/src/util/misc/cos.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/dom.d.ts +0 -0
- package/dist-extensions/src/util/misc/dom.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts +0 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts +0 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts +0 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/matrix.d.ts +0 -0
- package/dist-extensions/src/util/misc/matrix.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +0 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts +0 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts +0 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/pick.d.ts +0 -0
- package/dist-extensions/src/util/misc/pick.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts +0 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +0 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts +0 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts +0 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +0 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts +0 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/sin.d.ts +0 -0
- package/dist-extensions/src/util/misc/sin.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/svgExport.d.ts +0 -0
- package/dist-extensions/src/util/misc/svgExport.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts +0 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts +0 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts +0 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts.map +0 -0
- package/dist-extensions/src/util/misc/vectors.d.ts +0 -0
- package/dist-extensions/src/util/misc/vectors.d.ts.map +0 -0
- package/dist-extensions/src/util/path/index.d.ts +0 -0
- package/dist-extensions/src/util/path/index.d.ts.map +0 -0
- package/dist-extensions/src/util/path/regex.d.ts +0 -0
- package/dist-extensions/src/util/path/regex.d.ts.map +0 -0
- package/dist-extensions/src/util/path/typedefs.d.ts +0 -0
- package/dist-extensions/src/util/path/typedefs.d.ts.map +0 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts +0 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +0 -0
- package/dist-extensions/src/util/typeAssertions.d.ts +0 -0
- package/dist-extensions/src/util/typeAssertions.d.ts.map +0 -0
- package/docs/fabric-konva-gap-analysis.md +0 -0
- package/docs/konva-text-behavior-spec.md +0 -0
- package/docs/text-engine-design.md +0 -0
- package/eslint.config.mjs +0 -0
- package/examples/overlay-edit.html +416 -416
- package/extensions/README.MD +0 -0
- package/extensions/aligning_guidelines/README.MD +0 -0
- package/extensions/aligning_guidelines/constant.ts +0 -0
- package/extensions/aligning_guidelines/index.ts +0 -0
- package/extensions/aligning_guidelines/typedefs.ts +0 -0
- package/extensions/aligning_guidelines/util/basic.spec.ts +0 -0
- package/extensions/aligning_guidelines/util/basic.ts +0 -0
- package/extensions/aligning_guidelines/util/collect-line.ts +0 -0
- package/extensions/aligning_guidelines/util/collect-point.ts +0 -0
- package/extensions/aligning_guidelines/util/draw.ts +0 -0
- package/extensions/aligning_guidelines/util/get-objects-by-target.ts +0 -0
- package/extensions/data_updaters/README.md +0 -0
- package/extensions/data_updaters/gradient/__snapshots__/index.spec.ts.snap +0 -0
- package/extensions/data_updaters/gradient/index.spec.ts +0 -0
- package/extensions/data_updaters/gradient/index.ts +0 -0
- package/extensions/data_updaters/origins/README.md +0 -0
- package/extensions/data_updaters/origins/index.spec.ts +0 -0
- package/extensions/data_updaters/origins/index.ts +0 -0
- package/extensions/index.ts +0 -0
- package/fabric.ts +182 -182
- package/index.node.ts +0 -0
- package/index.ts +0 -0
- package/lib/aligning_guidelines.js +0 -0
- package/lib/centering_guidelines.js +0 -0
- package/lib/event.js +0 -0
- package/package.json +164 -164
- package/playwright.config.ts +0 -0
- package/playwright.setup.ts +0 -0
- package/{fonts → public/fonts}/STV Bold.ttf +0 -0
- package/{fonts → public/fonts}/STV Light.ttf +0 -0
- package/{fonts → public/fonts}/STV Regular.ttf +0 -0
- package/publish-next.js +0 -0
- package/publish.js +0 -0
- package/rollup.config.mjs +0 -0
- package/rtl-debug.html +744 -744
- package/scripts/bench-text.js +591 -591
- package/scripts/build.mjs +0 -0
- package/scripts/buildLock.mjs +0 -0
- package/scripts/buildReporter.mjs +0 -0
- package/scripts/buildStats.mjs +0 -0
- package/scripts/dirname.mjs +0 -0
- package/scripts/git.mjs +0 -0
- package/scripts/index.mjs +0 -0
- package/scripts/sandbox.mjs +0 -0
- package/src/ClassRegistry.spec.ts +0 -0
- package/src/ClassRegistry.ts +0 -0
- package/src/Collection.spec.ts +0 -0
- package/src/Collection.ts +0 -0
- package/src/CommonMethods.ts +0 -0
- package/src/EventTypeDefs.ts +0 -0
- package/src/Intersection.spec.ts +0 -0
- package/src/Intersection.ts +0 -0
- package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +0 -0
- package/src/LayoutManager/ActiveSelectionLayoutManager.ts +0 -0
- package/src/LayoutManager/LayoutManager.spec.ts +0 -0
- package/src/LayoutManager/LayoutManager.ts +0 -0
- package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +0 -0
- package/src/LayoutManager/LayoutStrategies/FitContentLayout.ts +0 -0
- package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +0 -0
- package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +0 -0
- package/src/LayoutManager/LayoutStrategies/utils.ts +0 -0
- package/src/LayoutManager/README.md +0 -0
- package/src/LayoutManager/__snapshots__/LayoutManager.spec.ts.snap +0 -0
- package/src/LayoutManager/constants.ts +0 -0
- package/src/LayoutManager/index.ts +0 -0
- package/src/LayoutManager/types.ts +0 -0
- package/src/Observable.spec.ts +0 -0
- package/src/Observable.ts +0 -0
- package/src/Pattern/Pattern.spec.ts +0 -0
- package/src/Pattern/Pattern.ts +0 -0
- package/src/Pattern/index.ts +0 -0
- package/src/Pattern/types.ts +0 -0
- package/src/Point.spec.ts +0 -0
- package/src/Point.ts +0 -0
- package/src/Shadow.spec.ts +0 -0
- package/src/Shadow.ts +0 -0
- package/src/__snapshots__/Shadow.spec.ts.snap +0 -0
- package/src/brushes/BaseBrush.spec.ts +0 -0
- package/src/brushes/BaseBrush.ts +0 -0
- package/src/brushes/CircleBrush.test.ts +0 -0
- package/src/brushes/CircleBrush.ts +0 -0
- package/src/brushes/PatternBrush.ts +0 -0
- package/src/brushes/PencilBrush.spec.ts +0 -0
- package/src/brushes/PencilBrush.ts +0 -0
- package/src/brushes/SprayBrush.ts +0 -0
- package/src/brushes/__snapshots__/PencilBrush.spec.ts.snap +0 -0
- package/src/brushes/typedefs.ts +0 -0
- package/src/cache.spec.ts +0 -0
- package/src/cache.ts +0 -0
- package/src/canvas/Canvas-dispose.spec.ts +0 -0
- package/src/canvas/Canvas-events.spec.ts +0 -0
- package/src/canvas/Canvas.spec.ts +0 -0
- package/src/canvas/Canvas.ts +0 -0
- package/src/canvas/CanvasOptions.ts +0 -0
- package/src/canvas/DOMManagers/CanvasDOMManager.ts +0 -0
- package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +0 -0
- package/src/canvas/DOMManagers/util.spec.ts +0 -0
- package/src/canvas/DOMManagers/util.ts +0 -0
- package/src/canvas/SelectableCanvas.spec.ts +0 -0
- package/src/canvas/SelectableCanvas.ts +0 -0
- package/src/canvas/StaticCanvas.spec.ts +0 -0
- package/src/canvas/StaticCanvas.ts +0 -0
- package/src/canvas/StaticCanvasOptions.ts +0 -0
- package/src/canvas/TextEditingManager.ts +0 -0
- package/src/canvas/__tests__/SelectableCanvas.spec.ts +0 -0
- package/src/canvas/__tests__/__snapshots__/eventData.test.ts.snap +0 -0
- package/src/canvas/__tests__/eventData.test.ts +0 -0
- package/src/canvas/canvas_gestures.mixin.ts +0 -0
- package/src/color/Color.ts +0 -0
- package/src/color/color.test.ts +0 -0
- package/src/color/color_map.ts +0 -0
- package/src/color/constants.ts +0 -0
- package/src/color/typedefs.ts +0 -0
- package/src/color/util.ts +0 -0
- package/src/config.ts +0 -0
- package/src/constants.ts +0 -0
- package/src/controls/Control-cursor.spec.ts +0 -0
- package/src/controls/Control-handlers.spec.ts +0 -0
- package/src/controls/Control.spec.ts +0 -0
- package/src/controls/Control.ts +0 -0
- package/src/controls/changeHeight.ts +0 -0
- package/src/controls/changeWidth.test.ts +0 -0
- package/src/controls/changeWidth.ts +0 -0
- package/src/controls/commonControls.ts +0 -0
- package/src/controls/controlRendering.ts +0 -0
- package/src/controls/drag.ts +0 -0
- package/src/controls/fireEvent.ts +0 -0
- package/src/controls/index.ts +0 -0
- package/src/controls/pathControl.spec.ts +0 -0
- package/src/controls/pathControl.ts +0 -0
- package/src/controls/polyControl.spec.ts +0 -0
- package/src/controls/polyControl.ts +0 -0
- package/src/controls/rotate.ts +0 -0
- package/src/controls/scale.test.ts +0 -0
- package/src/controls/scale.ts +0 -0
- package/src/controls/scaleSkew.ts +0 -0
- package/src/controls/skew.ts +0 -0
- package/src/controls/util.ts +0 -0
- package/src/controls/wrapWithFireEvent.ts +0 -0
- package/src/controls/wrapWithFixedAnchor.spec.ts +0 -0
- package/src/controls/wrapWithFixedAnchor.ts +0 -0
- package/src/env/browser.ts +0 -0
- package/src/env/env.spec.ts +0 -0
- package/src/env/index.ts +0 -0
- package/src/env/node.ts +0 -0
- package/src/env/types.ts +0 -0
- package/src/filters/BaseFilter.spec.ts +0 -0
- package/src/filters/BaseFilter.ts +0 -0
- package/src/filters/BlendColor.ts +0 -0
- package/src/filters/BlendImage.ts +0 -0
- package/src/filters/Blur.ts +0 -0
- package/src/filters/Boilerplate.ts +0 -0
- package/src/filters/Brightness.ts +0 -0
- package/src/filters/Canvas2dFilterBackend.ts +0 -0
- package/src/filters/ColorMatrix.spec.ts +0 -0
- package/src/filters/ColorMatrix.ts +0 -0
- package/src/filters/ColorMatrixFilters.ts +0 -0
- package/src/filters/Composed.ts +0 -0
- package/src/filters/Contrast.ts +0 -0
- package/src/filters/Convolute.ts +0 -0
- package/src/filters/FilterBackend.ts +0 -0
- package/src/filters/GLProbes/GLProbe.ts +0 -0
- package/src/filters/GLProbes/NodeGLProbe.ts +0 -0
- package/src/filters/GLProbes/WebGLProbe.ts +0 -0
- package/src/filters/Gamma.ts +0 -0
- package/src/filters/Grayscale.ts +0 -0
- package/src/filters/HueRotation.ts +0 -0
- package/src/filters/Invert.ts +0 -0
- package/src/filters/Noise.ts +0 -0
- package/src/filters/Pixelate.ts +0 -0
- package/src/filters/RemoveColor.ts +0 -0
- package/src/filters/Resize.ts +0 -0
- package/src/filters/Saturation.ts +0 -0
- package/src/filters/Vibrance.ts +0 -0
- package/src/filters/WebGLFilterBackend.spec.ts +0 -0
- package/src/filters/WebGLFilterBackend.ts +0 -0
- package/src/filters/filters.ts +0 -0
- package/src/filters/index.ts +0 -0
- package/src/filters/shaders/baseFilter.ts +0 -0
- package/src/filters/shaders/blendColor.ts +0 -0
- package/src/filters/shaders/blendImage.ts +0 -0
- package/src/filters/shaders/blur.ts +0 -0
- package/src/filters/shaders/brightness.ts +0 -0
- package/src/filters/shaders/colorMatrix.ts +0 -0
- package/src/filters/shaders/constrast.ts +0 -0
- package/src/filters/shaders/convolute.ts +0 -0
- package/src/filters/shaders/gamma.ts +0 -0
- package/src/filters/shaders/grayscale.ts +0 -0
- package/src/filters/shaders/invert.ts +0 -0
- package/src/filters/shaders/noise.ts +0 -0
- package/src/filters/shaders/pixelate.ts +0 -0
- package/src/filters/shaders/removeColor.ts +0 -0
- package/src/filters/shaders/saturation.ts +0 -0
- package/src/filters/shaders/vibrance.ts +0 -0
- package/src/filters/typedefs.ts +0 -0
- package/src/filters/utils.ts +0 -0
- package/src/gradient/Gradient.spec.ts +0 -0
- package/src/gradient/Gradient.ts +0 -0
- package/src/gradient/constants.ts +0 -0
- package/src/gradient/index.ts +0 -0
- package/src/gradient/parser/misc.ts +0 -0
- package/src/gradient/parser/parseColorStops.ts +0 -0
- package/src/gradient/parser/parseCoords.ts +0 -0
- package/src/gradient/typedefs.ts +0 -0
- package/src/mixins/eraser_brush.mixin.ts +0 -0
- package/src/parkinglot/canvas_animation.mixin.ts +0 -0
- package/src/parkinglot/straighten.ts +0 -0
- package/src/parser/applyViewboxTransform.spec.ts +0 -0
- package/src/parser/applyViewboxTransform.ts +0 -0
- package/src/parser/attributes.ts +0 -0
- package/src/parser/constants.spec.ts +0 -0
- package/src/parser/constants.ts +0 -0
- package/src/parser/doesSomeParentMatch.ts +0 -0
- package/src/parser/elementMatchesRule.ts +0 -0
- package/src/parser/elements_parser.ts +0 -0
- package/src/parser/getCSSRules.spec.ts +0 -0
- package/src/parser/getCSSRules.ts +0 -0
- package/src/parser/getGlobalStylesForElement.ts +0 -0
- package/src/parser/getGradientDefs.ts +0 -0
- package/src/parser/getMultipleNodes.ts +0 -0
- package/src/parser/getSvgRegex.ts +0 -0
- package/src/parser/getTagName.ts +0 -0
- package/src/parser/hasInvalidAncestor.ts +0 -0
- package/src/parser/loadSVGFromString.test.ts +0 -0
- package/src/parser/loadSVGFromString.ts +0 -0
- package/src/parser/loadSVGFromURL.ts +0 -0
- package/src/parser/normalizeAttr.ts +0 -0
- package/src/parser/normalizeValue.ts +0 -0
- package/src/parser/parseAttributes.ts +0 -0
- package/src/parser/parseFontDeclaration.ts +0 -0
- package/src/parser/parsePointsAttribute.ts +0 -0
- package/src/parser/parseSVGDocument.ts +0 -0
- package/src/parser/parseStyleAttribute.ts +0 -0
- package/src/parser/parseStyleObject.ts +0 -0
- package/src/parser/parseStyleString.ts +0 -0
- package/src/parser/parseTransformAttribute.ts +0 -0
- package/src/parser/parseUseDirectives.test.ts +0 -0
- package/src/parser/parseUseDirectives.ts +0 -0
- package/src/parser/parser.spec.ts +0 -0
- package/src/parser/percent.ts +0 -0
- package/src/parser/recursivelyParseGradientsXlink.ts +0 -0
- package/src/parser/selectorMatches.ts +0 -0
- package/src/parser/setStrokeFillOpacity.ts +0 -0
- package/src/parser/typedefs.ts +0 -0
- package/src/shapes/ActiveSelection.spec.ts +0 -0
- package/src/shapes/ActiveSelection.ts +0 -0
- package/src/shapes/Circle.spec.ts +0 -0
- package/src/shapes/Circle.ts +0 -0
- package/src/shapes/Ellipse.spec.ts +0 -0
- package/src/shapes/Ellipse.ts +0 -0
- package/src/shapes/Group.spec.ts +0 -0
- package/src/shapes/Group.ts +0 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +0 -0
- package/src/shapes/IText/IText-click-behavior.spec.ts +0 -0
- package/src/shapes/IText/IText.test.ts +0 -0
- package/src/shapes/IText/IText.ts +846 -846
- package/src/shapes/IText/ITextBehavior.test.ts +0 -0
- package/src/shapes/IText/ITextBehavior.ts +1263 -1188
- package/src/shapes/IText/ITextClickBehavior.ts +254 -254
- package/src/shapes/IText/ITextKeyBehavior.test.ts +0 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +732 -732
- package/src/shapes/IText/__snapshots__/IText.test.ts.snap +0 -0
- package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +0 -0
- package/src/shapes/IText/constants.ts +0 -0
- package/src/shapes/Image-filters.spec.ts +0 -0
- package/src/shapes/Image.spec.ts +0 -0
- package/src/shapes/Image.ts +0 -0
- package/src/shapes/Line.spec.ts +0 -0
- package/src/shapes/Line.ts +0 -0
- package/src/shapes/Object/FabricObject.spec.ts +0 -0
- package/src/shapes/Object/FabricObject.ts +0 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +0 -0
- package/src/shapes/Object/InteractiveObject.spec.ts +0 -0
- package/src/shapes/Object/InteractiveObject.ts +0 -0
- package/src/shapes/Object/Object-clip-path.spec.ts +0 -0
- package/src/shapes/Object/Object-interactivity.spec.ts +0 -0
- package/src/shapes/Object/Object.spec.ts +0 -0
- package/src/shapes/Object/Object.ts +0 -0
- package/src/shapes/Object/ObjectGeometry.spec.ts +0 -0
- package/src/shapes/Object/ObjectGeometry.ts +0 -0
- package/src/shapes/Object/ObjectOrigin.spec.ts +0 -0
- package/src/shapes/Object/ObjectSerialization.spec.ts +0 -0
- package/src/shapes/Object/StackedObject.spec.ts +0 -0
- package/src/shapes/Object/__snapshots__/InteractiveObject.spec.ts.snap +0 -0
- package/src/shapes/Object/defaultValues.ts +0 -0
- package/src/shapes/Object/types/BaseProps.ts +0 -0
- package/src/shapes/Object/types/BorderProps.ts +0 -0
- package/src/shapes/Object/types/ControlProps.ts +0 -0
- package/src/shapes/Object/types/FabricObjectProps.ts +0 -0
- package/src/shapes/Object/types/FillStrokeProps.ts +0 -0
- package/src/shapes/Object/types/LockInteractionProps.ts +0 -0
- package/src/shapes/Object/types/ObjectProps.ts +0 -0
- package/src/shapes/Object/types/ObjectTransformProps.ts +0 -0
- package/src/shapes/Object/types/SerializedObjectProps.ts +0 -0
- package/src/shapes/Object/types/index.ts +0 -0
- package/src/shapes/Path.spec.ts +0 -0
- package/src/shapes/Path.ts +0 -0
- package/src/shapes/Polygon.spec.ts +0 -0
- package/src/shapes/Polygon.ts +0 -0
- package/src/shapes/Polyline.spec.ts +0 -0
- package/src/shapes/Polyline.ts +0 -0
- package/src/shapes/Rect.spec.ts +0 -0
- package/src/shapes/Rect.ts +0 -0
- package/src/shapes/Text/StyledText.spec.ts +0 -0
- package/src/shapes/Text/StyledText.ts +0 -0
- package/src/shapes/Text/Text.spec.ts +0 -0
- package/src/shapes/Text/Text.ts +206 -139
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +0 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +0 -0
- package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +0 -0
- package/src/shapes/Text/__snapshots__/TextSVGExportMixin.spec.ts.snap +0 -0
- package/src/shapes/Text/constants.ts +135 -135
- package/src/shapes/Textbox.spec.ts +0 -0
- package/src/shapes/Textbox.ts +581 -182
- package/src/shapes/Triangle.spec.ts +0 -0
- package/src/shapes/Triangle.ts +0 -0
- package/src/shapes/__snapshots__/Image.spec.ts.snap +0 -0
- package/src/shapes/__snapshots__/Textbox.spec.ts.snap +0 -0
- package/src/text/browserLines.ts +266 -234
- package/src/text/ellipsis.ts +516 -516
- package/src/text/hitTest.ts +623 -623
- package/src/text/layout.ts +586 -586
- package/src/text/measure.ts +626 -626
- package/src/text/overlayEditor.ts +1108 -1047
- package/src/text/unicode.ts +454 -454
- package/src/typedefs.ts +0 -0
- package/src/util/__snapshots__/index.spec.ts.snap +0 -0
- package/src/util/animation/AnimationBase.ts +0 -0
- package/src/util/animation/AnimationFrameProvider.ts +0 -0
- package/src/util/animation/AnimationRegistry.ts +0 -0
- package/src/util/animation/ArrayAnimation.ts +0 -0
- package/src/util/animation/ColorAnimation.ts +0 -0
- package/src/util/animation/ValueAnimation.ts +0 -0
- package/src/util/animation/__snapshots__/animations.spec.ts.snap +0 -0
- package/src/util/animation/animate.ts +0 -0
- package/src/util/animation/animations.spec.ts +0 -0
- package/src/util/animation/easing.ts +0 -0
- package/src/util/animation/index.ts +0 -0
- package/src/util/animation/types.ts +0 -0
- package/src/util/applyMixins.ts +0 -0
- package/src/util/dom_event.spec.ts +0 -0
- package/src/util/dom_event.ts +0 -0
- package/src/util/dom_misc.ts +0 -0
- package/src/util/index.spec.ts +0 -0
- package/src/util/index.ts +0 -0
- package/src/util/internals/applyCanvasTransform.ts +0 -0
- package/src/util/internals/cleanupSvgAttribute.test.ts +0 -0
- package/src/util/internals/cleanupSvgAttribute.ts +0 -0
- package/src/util/internals/cloneStyles.spec.ts +0 -0
- package/src/util/internals/cloneStyles.ts +0 -0
- package/src/util/internals/console.ts +0 -0
- package/src/util/internals/dom_style.spec.ts +0 -0
- package/src/util/internals/dom_style.ts +0 -0
- package/src/util/internals/findRight.ts +0 -0
- package/src/util/internals/getRandomInt.test.ts +0 -0
- package/src/util/internals/getRandomInt.ts +0 -0
- package/src/util/internals/ifNaN.ts +0 -0
- package/src/util/internals/removeFromArray.spec.ts +0 -0
- package/src/util/internals/removeFromArray.ts +0 -0
- package/src/util/internals/uid.ts +0 -0
- package/src/util/lang_string.spec.ts +0 -0
- package/src/util/lang_string.ts +0 -0
- package/src/util/misc/boundingBoxFromPoints.spec.ts +0 -0
- package/src/util/misc/boundingBoxFromPoints.ts +0 -0
- package/src/util/misc/capValue.spec.ts +0 -0
- package/src/util/misc/capValue.ts +0 -0
- package/src/util/misc/cornerRadius.spec.ts +0 -0
- package/src/util/misc/cornerRadius.ts +0 -0
- package/src/util/misc/cos.spec.ts +0 -0
- package/src/util/misc/cos.ts +0 -0
- package/src/util/misc/dom.spec.ts +0 -0
- package/src/util/misc/dom.ts +0 -0
- package/src/util/misc/findScaleTo.spec.ts +0 -0
- package/src/util/misc/findScaleTo.ts +0 -0
- package/src/util/misc/groupSVGElements.spec.ts +0 -0
- package/src/util/misc/groupSVGElements.ts +0 -0
- package/src/util/misc/isTransparent.ts +0 -0
- package/src/util/misc/matrix.spec.ts +0 -0
- package/src/util/misc/matrix.ts +0 -0
- package/src/util/misc/mergeClipPaths.spec.ts +0 -0
- package/src/util/misc/mergeClipPaths.ts +0 -0
- package/src/util/misc/objectEnlive.spec.ts +0 -0
- package/src/util/misc/objectEnlive.ts +0 -0
- package/src/util/misc/objectTransforms.spec.ts +0 -0
- package/src/util/misc/objectTransforms.ts +0 -0
- package/src/util/misc/pick.spec.ts +0 -0
- package/src/util/misc/pick.ts +0 -0
- package/src/util/misc/planeChange.spec.ts +0 -0
- package/src/util/misc/planeChange.ts +0 -0
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +0 -0
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +0 -0
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +0 -0
- package/src/util/misc/projectStroke/index.ts +0 -0
- package/src/util/misc/projectStroke/types.ts +0 -0
- package/src/util/misc/radiansDegreesConversion.spec.ts +0 -0
- package/src/util/misc/radiansDegreesConversion.ts +0 -0
- package/src/util/misc/resolveOrigin.ts +0 -0
- package/src/util/misc/sin.ts +0 -0
- package/src/util/misc/svgExport.ts +0 -0
- package/src/util/misc/svgParsing.spec.ts +0 -0
- package/src/util/misc/svgParsing.ts +0 -0
- package/src/util/misc/textStyles.ts +0 -0
- package/src/util/misc/toFixed.spec.ts +0 -0
- package/src/util/misc/toFixed.ts +0 -0
- package/src/util/misc/vectors.spec.ts +0 -0
- package/src/util/misc/vectors.ts +0 -0
- package/src/util/path/__snapshots__/index.spec.ts.snap +0 -0
- package/src/util/path/index.spec.ts +0 -0
- package/src/util/path/index.ts +0 -0
- package/src/util/path/regex.ts +0 -0
- package/src/util/path/typechecks.ts +0 -0
- package/src/util/path/typedefs.ts +0 -0
- package/src/util/transform_matrix_removal.ts +0 -0
- package/src/util/typeAssertions.spec.ts +0 -0
- package/src/util/typeAssertions.ts +0 -0
- package/tsconfig-extensions.json +0 -0
- package/tsconfig.json +0 -0
- package/tsconfig.spec.json +0 -0
- package/typedoc.config.json +0 -0
- package/vitest.config.ts +0 -0
- package/vitest.d.ts +0 -0
- package/vitest.env.d.ts +0 -0
- package/vitest.extend.ts +0 -0
- package/vitest.setup.ts +0 -0
- package/.playwright-mcp/after-justify-applied.png +0 -0
- package/.playwright-mcp/after-justify-click.png +0 -0
- package/.playwright-mcp/initial-state.png +0 -0
- package/.playwright-mcp/justify-fixed-final.png +0 -0
- package/45.6875Textbox.ts +0 -0
- package/dist/src/text/examples/arabicTextExample.d.ts +0 -60
- package/dist/src/text/examples/arabicTextExample.d.ts.map +0 -1
- package/dist/src/text/scriptUtils.d.ts +0 -142
- package/dist/src/text/scriptUtils.d.ts.map +0 -1
- package/dist/src/text/scriptUtils.min.mjs +0 -2
- package/dist/src/text/scriptUtils.min.mjs.map +0 -1
- package/dist/src/text/scriptUtils.mjs +0 -212
- package/dist/src/text/scriptUtils.mjs.map +0 -1
- package/dist-extensions/src/shapes/CustomLine.d.ts +0 -10
- package/dist-extensions/src/shapes/CustomLine.d.ts.map +0 -1
- package/dist-extensions/src/text/scriptUtils.d.ts +0 -142
- package/dist-extensions/src/text/scriptUtils.d.ts.map +0 -1
- package/fabric-test-editor.html +0 -3552
- package/fabric-test2.html +0 -647
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserLines.min.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\r\n * Browser Line Break Extraction\r\n * \r\n * Captures exact line breaks as rendered by the browser to ensure\r\n * pixel-perfect consistency between DOM editing and canvas rendering.\r\n */\r\n\r\nexport interface BrowserLine {\r\n text: string;\r\n start: number; // character index in original text\r\n end: number; // character index in original text (exclusive)\r\n}\r\n\r\nexport interface BrowserLinesResult {\r\n lines: BrowserLine[];\r\n totalWidth: number;\r\n totalHeight: number;\r\n}\r\n\r\n/**\r\n * Segment text into graphemes safely using Intl.Segmenter or fallback\r\n */\r\nfunction segmentIntoGraphemes(text: string): string[] {\r\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\r\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\r\n return Array.from(segmenter.segment(text), s => s.segment);\r\n }\r\n \r\n // Fallback: Use Array.from which handles basic Unicode correctly\r\n return Array.from(text);\r\n}\r\n\r\n/**\r\n * Extract line break information from a textarea by creating a mirror element\r\n * with identical computed styles and measuring grapheme positions.\r\n */\r\nexport function extractLinesFromDOM(textarea: HTMLTextAreaElement): BrowserLinesResult {\r\n const text = textarea.value;\r\n if (!text) {\r\n return {\r\n lines: [],\r\n totalWidth: 0,\r\n totalHeight: 0\r\n };\r\n }\r\n\r\n // Get computed styles from the textarea\r\n const computedStyle = getComputedStyle(textarea);\r\n const container = textarea.parentElement;\r\n if (!container) {\r\n throw new Error('Textarea must be in DOM to extract lines');\r\n }\r\n\r\n // Create mirror div with identical styling\r\n const mirror = document.createElement('div');\r\n mirror.style.position = 'absolute';\r\n mirror.style.left = '-9999px';\r\n mirror.style.top = '-9999px';\r\n mirror.style.visibility = 'hidden';\r\n mirror.style.pointerEvents = 'none';\r\n \r\n // Copy all relevant text styling\r\n const stylesToCopy = [\r\n 'fontSize',\r\n 'fontFamily',\r\n 'fontWeight',\r\n 'fontStyle',\r\n 'lineHeight',\r\n 'letterSpacing',\r\n 'wordSpacing',\r\n 'textAlign',\r\n 'textTransform',\r\n 'whiteSpace',\r\n 'overflowWrap',\r\n 'wordBreak',\r\n 'direction',\r\n 'unicodeBidi',\r\n 'width',\r\n 'height',\r\n 'maxWidth',\r\n 'maxHeight',\r\n 'minWidth',\r\n 'minHeight',\r\n 'padding',\r\n 'paddingTop',\r\n 'paddingRight',\r\n 'paddingBottom',\r\n 'paddingLeft',\r\n 'border',\r\n 'borderTop',\r\n 'borderRight',\r\n 'borderBottom',\r\n 'borderLeft',\r\n 'boxSizing',\r\n ];\r\n \r\n stylesToCopy.forEach(prop => {\r\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\r\n });\r\n\r\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\r\n mirror.style.overflow = 'hidden';\r\n mirror.style.resize = 'none';\r\n\r\n container.appendChild(mirror);\r\n\r\n try {\r\n // Segment text into graphemes\r\n const graphemes = segmentIntoGraphemes(text);\r\n const spans: HTMLSpanElement[] = [];\r\n \r\n // Create a span for each grapheme\r\n graphemes.forEach((grapheme, index) => {\r\n const span = document.createElement('span');\r\n span.textContent = grapheme;\r\n span.setAttribute('data-index', index.toString());\r\n mirror.appendChild(span);\r\n spans.push(span);\r\n });\r\n\r\n // Group spans by their offsetTop (line position)\r\n const lineGroups = new Map<number, { spans: HTMLSpanElement[], indices: number[] }>();\r\n \r\n spans.forEach((span, index) => {\r\n const top = span.offsetTop;\r\n if (!lineGroups.has(top)) {\r\n lineGroups.set(top, { spans: [], indices: [] });\r\n }\r\n lineGroups.get(top)!.spans.push(span);\r\n lineGroups.get(top)!.indices.push(index);\r\n });\r\n\r\n // Convert line groups to BrowserLine objects\r\n const lines: BrowserLine[] = [];\r\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\r\n \r\n sortedTops.forEach(top => {\r\n const group = lineGroups.get(top)!;\r\n const sortedIndices = group.indices.sort((a, b) => a - b);\r\n \r\n const start = sortedIndices[0];\r\n const end = sortedIndices[sortedIndices.length - 1] + 1;\r\n const lineText = graphemes.slice(start, end).join('');\r\n \r\n lines.push({\r\n text: lineText,\r\n start,\r\n end,\r\n });\r\n });\r\n\r\n // Calculate total dimensions\r\n const totalWidth = Math.max(...spans.map(span => span.offsetLeft + span.offsetWidth));\r\n const totalHeight = spans.length > 0 ? \r\n Math.max(...spans.map(span => span.offsetTop + span.offsetHeight)) : 0;\r\n\r\n return {\r\n lines,\r\n totalWidth,\r\n totalHeight\r\n };\r\n \r\n } finally {\r\n // Clean up mirror element\r\n container.removeChild(mirror);\r\n }\r\n}\r\n\r\n/**\r\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\r\n */\r\nexport function createLayoutHash(target: any): string {\r\n const properties = [\r\n target.text,\r\n target.width,\r\n target.height,\r\n target.fontFamily,\r\n target.fontSize,\r\n target.fontWeight,\r\n target.fontStyle,\r\n target.lineHeight,\r\n target.charSpacing,\r\n target.textAlign,\r\n target.direction,\r\n ];\r\n \r\n return properties.map(p => String(p)).join('|');\r\n}\r\n\r\n/**\r\n * Check if stored browser lines are still valid for the current target state\r\n */\r\nexport function areBrowserLinesValid(target: any, storedHash?: string): boolean {\r\n if (!storedHash || !(target as any).__lastBrowserLines) {\r\n return false;\r\n }\r\n \r\n const currentHash = createLayoutHash(target);\r\n return currentHash === storedHash;\r\n}\r\n\r\n/**\r\n * Store browser lines on a target object with validity hash\r\n */\r\nexport function storeBrowserLines(\r\n target: any, \r\n lines: BrowserLine[], \r\n layoutHash?: string\r\n): void {\r\n (target as any).__lastBrowserLines = lines;\r\n (target as any).__lastBrowserLinesHash = layoutHash || createLayoutHash(target);\r\n}\r\n\r\n/**\r\n * Clear stored browser lines from a target object\r\n */\r\nexport function clearBrowserLines(target: any): void {\r\n delete (target as any).__lastBrowserLines;\r\n delete (target as any).__lastBrowserLinesHash;\r\n}\r\n\r\n/**\r\n * Get stored browser lines if they're still valid\r\n */\r\nexport function getBrowserLines(target: any): BrowserLine[] | null {\r\n const lines = (target as any).__lastBrowserLines;\r\n const hash = (target as any).__lastBrowserLinesHash;\r\n \r\n if (lines && areBrowserLinesValid(target, hash)) {\r\n return lines;\r\n }\r\n \r\n return null;\r\n}"],"names":["extractLinesFromDOM","textarea","text","value","lines","totalWidth","totalHeight","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","forEach","prop","overflow","resize","appendChild","graphemes","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","segmentIntoGraphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","keys","sort","a","b","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","width","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","storeBrowserLines","layoutHash","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"AAoCO,SAASA,EAAoBC,GAClC,MAAMC,EAAOD,EAASE,MACtB,IAAKD,EACH,MAAO,CACLE,MAAO,GACPC,WAAY,EACZC,YAAa,GAKjB,MAAMC,EAAgBC,iBAAiBP,GACjCQ,EAAYR,EAASS,cAC3B,IAAKD,EACH,MAAM,IAAIE,MAAM,4CAIlB,MAAMC,EAASC,SAASC,cAAc,OACtCF,EAAOG,MAAMC,SAAW,WACxBJ,EAAOG,MAAME,KAAO,UACpBL,EAAOG,MAAMG,IAAM,UACnBN,EAAOG,MAAMI,WAAa,SAC1BP,EAAOG,MAAMK,cAAgB,OAGR,CACnB,WACA,aACA,aACA,YACA,aACA,gBACA,cACA,YACA,gBACA,aACA,eACA,YACA,YACA,cACA,QACA,SACA,WACA,YACA,WACA,YACA,UACA,aACA,eACA,gBACA,cACA,SACA,YACA,cACA,eACA,aACA,aAGWC,QAAQC,IAClBV,EAAOG,MAAcO,GAASf,EAAsBe,KAIvDV,EAAOG,MAAMQ,SAAW,SACxBX,EAAOG,MAAMS,OAAS,OAEtBf,EAAUgB,YAAYb,GAEtB,IAEE,MAAMc,EAtFV,SAA8BxB,GAC5B,GAAoB,oBAATyB,MAAwBA,KAAKC,UAAW,CACjD,MAAMC,EAAY,IAAIF,KAAKC,eAAUE,EAAW,CAAEC,YAAa,aAC/D,OAAOC,MAAMC,KAAKJ,EAAUK,QAAQhC,GAAOiC,GAAKA,EAAED,QACpD,CAGA,OAAOF,MAAMC,KAAK/B,EACpB,CA8EsBkC,CAAqBlC,GACjCmC,EAA2B,GAGjCX,EAAUL,QAAQ,CAACiB,EAAUC,KAC3B,MAAMC,EAAO3B,SAASC,cAAc,QACpC0B,EAAKC,YAAcH,EACnBE,EAAKE,aAAa,aAAcH,EAAMI,YACtC/B,EAAOa,YAAYe,GACnBH,EAAMO,KAAKJ,KAIb,MAAMK,EAAa,IAAIC,IAEvBT,EAAMhB,QAAQ,CAACmB,EAAMD,KACnB,MAAMrB,EAAMsB,EAAKO,UACZF,EAAWG,IAAI9B,IAClB2B,EAAWI,IAAI/B,EAAK,CAAEmB,MAAO,GAAIa,QAAS,KAE5CL,EAAWM,IAAIjC,GAAMmB,MAAMO,KAAKJ,GAChCK,EAAWM,IAAIjC,GAAMgC,QAAQN,KAAKL,KAIpC,MAAMnC,EAAuB,GACV4B,MAAMC,KAAKY,EAAWO,QAAQC,KAAK,CAACC,EAAGC,IAAMD,EAAIC,GAEzDlC,QAAQH,IACjB,MACMsC,EADQX,EAAWM,IAAIjC,GACDgC,QAAQG,KAAK,CAACC,EAAGC,IAAMD,EAAIC,GAEjDE,EAAQD,EAAc,GACtBE,EAAMF,EAAcA,EAAcG,OAAS,GAAK,EAChDC,EAAWlC,EAAUmC,MAAMJ,EAAOC,GAAKI,KAAK,IAElD1D,EAAMwC,KAAK,CACT1C,KAAM0D,EACNH,QACAC,UAKJ,MAAMrD,EAAa0D,KAAKC,OAAO3B,EAAM4B,IAAIzB,GAAQA,EAAK0B,WAAa1B,EAAK2B,cAClE7D,EAAc+B,EAAMsB,OAAS,EACjCI,KAAKC,OAAO3B,EAAM4B,IAAIzB,GAAQA,EAAKO,UAAYP,EAAK4B,eAAiB,EAEvE,MAAO,CACLhE,QACAC,aACAC,cAGJ,CAAC,QAECG,EAAU4D,YAAYzD,EACxB,CACF,CAKO,SAAS0D,EAAiBC,GAe/B,MAdmB,CACjBA,EAAOrE,KACPqE,EAAOC,MACPD,EAAOE,OACPF,EAAOG,WACPH,EAAOI,SACPJ,EAAOK,WACPL,EAAOM,UACPN,EAAOO,WACPP,EAAOQ,YACPR,EAAOS,UACPT,EAAOU,WAGShB,IAAIiB,GAAKC,OAAOD,IAAIpB,KAAK,IAC7C,CAKO,SAASsB,EAAqBb,EAAac,GAChD,IAAKA,IAAgBd,EAAee,mBAClC,OAAO,EAIT,OADoBhB,EAAiBC,KACdc,CACzB,CAKO,SAASE,EACdhB,EACAnE,EACAoF,GAECjB,EAAee,mBAAqBlF,EACpCmE,EAAekB,uBAAuCnB,EAAiBC,EAC1E,CAKO,SAASmB,EAAkBnB,UACxBA,EAAee,0BACff,EAAekB,sBACzB,CAKO,SAASE,EAAgBpB,GAC9B,MAAMnE,EAASmE,EAAee,mBACxBM,EAAQrB,EAAekB,uBAE7B,OAAIrF,GAASgF,EAAqBb,EAAQqB,GACjCxF,EAGF,IACT"}
|
|
1
|
+
{"version":3,"file":"browserLines.min.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\n * Browser Line Break Extraction\n *\n * Captures exact line breaks as rendered by the browser to ensure\n * pixel-perfect consistency between DOM editing and canvas rendering.\n */\n\nexport interface BrowserLine {\n text: string;\n start: number; // character index in original text\n end: number; // character index in original text (exclusive)\n}\n\nexport interface BrowserLinesResult {\n lines: BrowserLine[];\n totalWidth: number;\n totalHeight: number;\n width: number;\n}\n\n/**\n * Segment text into graphemes safely using Intl.Segmenter or fallback\n */\nfunction segmentIntoGraphemes(text: string): string[] {\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n });\n return Array.from(segmenter.segment(text), (s) => s.segment);\n }\n\n // Fallback: Use Array.from which handles basic Unicode correctly\n return Array.from(text);\n}\n\n/**\n * Extract line break information from a textarea by creating a mirror element\n * with identical computed styles and measuring grapheme positions.\n */\nexport function extractLinesFromDOM(\n textarea: HTMLTextAreaElement,\n): BrowserLinesResult {\n const text = textarea.value;\n if (!text) {\n return {\n lines: [],\n totalWidth: 0,\n totalHeight: 0,\n width: 0,\n };\n }\n\n // Get computed styles from the textarea\n const computedStyle = getComputedStyle(textarea);\n const container = textarea.parentElement;\n if (!container) {\n throw new Error('Textarea must be in DOM to extract lines');\n }\n\n // Create mirror div with identical styling\n const mirror = document.createElement('div');\n mirror.style.position = 'absolute';\n mirror.style.left = '-9999px';\n mirror.style.top = '-9999px';\n mirror.style.visibility = 'hidden';\n mirror.style.pointerEvents = 'none';\n\n // Copy all relevant text styling\n const stylesToCopy = [\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'lineHeight',\n 'letterSpacing',\n 'wordSpacing',\n 'textAlign',\n 'textTransform',\n 'whiteSpace',\n 'overflowWrap',\n 'wordBreak',\n 'direction',\n 'unicodeBidi',\n 'width',\n 'height',\n 'maxWidth',\n 'maxHeight',\n 'minWidth',\n 'minHeight',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'border',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'boxSizing',\n ];\n\n stylesToCopy.forEach((prop) => {\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\n });\n\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\n mirror.style.overflow = 'hidden';\n mirror.style.resize = 'none';\n\n container.appendChild(mirror);\n // capture the width the browser is using for layout\n const width = mirror.clientWidth;\n\n try {\n // Segment text into graphemes\n const graphemes = segmentIntoGraphemes(text);\n const spans: HTMLSpanElement[] = [];\n\n // Create a span for each grapheme\n graphemes.forEach((grapheme, index) => {\n const span = document.createElement('span');\n span.textContent = grapheme;\n span.setAttribute('data-index', index.toString());\n mirror.appendChild(span);\n spans.push(span);\n });\n\n // Group spans by their offsetTop (line position)\n const lineGroups = new Map<\n number,\n { spans: HTMLSpanElement[]; indices: number[] }\n >();\n\n spans.forEach((span, index) => {\n const top = span.offsetTop;\n if (!lineGroups.has(top)) {\n lineGroups.set(top, { spans: [], indices: [] });\n }\n lineGroups.get(top)!.spans.push(span);\n lineGroups.get(top)!.indices.push(index);\n });\n\n // Convert line groups to BrowserLine objects\n const lines: BrowserLine[] = [];\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\n\n sortedTops.forEach((top) => {\n const group = lineGroups.get(top)!;\n const sortedIndices = group.indices.sort((a, b) => a - b);\n\n const start = sortedIndices[0];\n const end = sortedIndices[sortedIndices.length - 1] + 1;\n const lineText = graphemes.slice(start, end).join('');\n\n lines.push({\n text: lineText,\n start,\n end,\n });\n });\n\n // Calculate total dimensions\n const totalWidth = Math.max(\n ...spans.map((span) => span.offsetLeft + span.offsetWidth),\n );\n const totalHeight =\n spans.length > 0\n ? Math.max(...spans.map((span) => span.offsetTop + span.offsetHeight))\n : 0;\n\n return {\n lines,\n totalWidth,\n totalHeight,\n width,\n };\n } finally {\n // Clean up mirror element\n container.removeChild(mirror);\n }\n}\n\n/**\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\n */\nexport function createLayoutHash(target: any): string {\n const properties = [\n target.text,\n target.width,\n target.height,\n target.fontFamily,\n target.fontSize,\n target.fontWeight,\n target.fontStyle,\n target.lineHeight,\n target.charSpacing,\n target.textAlign,\n target.direction,\n ];\n\n return properties.map((p) => String(p)).join('|');\n}\n\n/**\n * Check if stored browser lines are still valid for the current target state\n */\nexport function areBrowserLinesValid(\n target: any,\n storedHash?: string,\n): boolean {\n if (!storedHash || !(target as any).__lastBrowserLines) {\n return false;\n }\n\n const currentHash = createLayoutHash(target);\n return currentHash === storedHash;\n}\n\nexport type StoredBrowserLines = {\n lines: BrowserLine[];\n width?: number;\n};\n\n/**\n * Store browser lines on a target object with validity hash\n */\nexport function storeBrowserLines(\n target: any,\n lines: BrowserLine[],\n width?: number,\n layoutHash?: string,\n): void {\n (target as any).__lastBrowserLines = lines;\n (target as any).__lastBrowserLinesWidth = width;\n (target as any).__lastBrowserLinesHash =\n layoutHash || createLayoutHash(target);\n}\n\n/**\n * Clear stored browser lines from a target object\n */\nexport function clearBrowserLines(target: any): void {\n delete (target as any).__lastBrowserLines;\n delete (target as any).__lastBrowserLinesHash;\n delete (target as any).__lastBrowserLinesWidth;\n}\n\n/**\n * Get stored browser lines if they're still valid\n */\nexport function getBrowserLines(target: any): BrowserLinesResult | null {\n const lines = (target as any).__lastBrowserLines;\n const hash = (target as any).__lastBrowserLinesHash;\n\n if (lines && areBrowserLinesValid(target, hash)) {\n return {\n lines,\n totalWidth: 0,\n totalHeight: 0,\n width: (target as any).__lastBrowserLinesWidth,\n };\n }\n\n return null;\n}\n"],"names":["extractLinesFromDOM","textarea","text","value","lines","totalWidth","totalHeight","width","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","forEach","prop","overflow","resize","appendChild","clientWidth","graphemes","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","segmentIntoGraphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","keys","sort","a","b","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","storeBrowserLines","layoutHash","__lastBrowserLinesWidth","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser Line Break Extraction
|
|
3
|
-
*
|
|
4
|
-
* Captures exact line breaks as rendered by the browser to ensure
|
|
5
|
-
* pixel-perfect consistency between DOM editing and canvas rendering.
|
|
1
|
+
/**
|
|
2
|
+
* Browser Line Break Extraction
|
|
3
|
+
*
|
|
4
|
+
* Captures exact line breaks as rendered by the browser to ensure
|
|
5
|
+
* pixel-perfect consistency between DOM editing and canvas rendering.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Segment text into graphemes safely using Intl.Segmenter or fallback
|
|
8
|
+
/**
|
|
9
|
+
* Segment text into graphemes safely using Intl.Segmenter or fallback
|
|
10
10
|
*/
|
|
11
11
|
function segmentIntoGraphemes(text) {
|
|
12
12
|
if (typeof Intl !== 'undefined' && Intl.Segmenter) {
|
|
@@ -20,9 +20,9 @@ function segmentIntoGraphemes(text) {
|
|
|
20
20
|
return Array.from(text);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
/**
|
|
24
|
-
* Extract line break information from a textarea by creating a mirror element
|
|
25
|
-
* with identical computed styles and measuring grapheme positions.
|
|
23
|
+
/**
|
|
24
|
+
* Extract line break information from a textarea by creating a mirror element
|
|
25
|
+
* with identical computed styles and measuring grapheme positions.
|
|
26
26
|
*/
|
|
27
27
|
function extractLinesFromDOM(textarea) {
|
|
28
28
|
const text = textarea.value;
|
|
@@ -30,7 +30,8 @@ function extractLinesFromDOM(textarea) {
|
|
|
30
30
|
return {
|
|
31
31
|
lines: [],
|
|
32
32
|
totalWidth: 0,
|
|
33
|
-
totalHeight: 0
|
|
33
|
+
totalHeight: 0,
|
|
34
|
+
width: 0
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -59,6 +60,8 @@ function extractLinesFromDOM(textarea) {
|
|
|
59
60
|
mirror.style.overflow = 'hidden';
|
|
60
61
|
mirror.style.resize = 'none';
|
|
61
62
|
container.appendChild(mirror);
|
|
63
|
+
// capture the width the browser is using for layout
|
|
64
|
+
const width = mirror.clientWidth;
|
|
62
65
|
try {
|
|
63
66
|
// Segment text into graphemes
|
|
64
67
|
const graphemes = segmentIntoGraphemes(text);
|
|
@@ -109,7 +112,8 @@ function extractLinesFromDOM(textarea) {
|
|
|
109
112
|
return {
|
|
110
113
|
lines,
|
|
111
114
|
totalWidth,
|
|
112
|
-
totalHeight
|
|
115
|
+
totalHeight,
|
|
116
|
+
width
|
|
113
117
|
};
|
|
114
118
|
} finally {
|
|
115
119
|
// Clean up mirror element
|
|
@@ -117,16 +121,16 @@ function extractLinesFromDOM(textarea) {
|
|
|
117
121
|
}
|
|
118
122
|
}
|
|
119
123
|
|
|
120
|
-
/**
|
|
121
|
-
* Create a hash of layout-affecting properties to detect when browser lines are still valid
|
|
124
|
+
/**
|
|
125
|
+
* Create a hash of layout-affecting properties to detect when browser lines are still valid
|
|
122
126
|
*/
|
|
123
127
|
function createLayoutHash(target) {
|
|
124
128
|
const properties = [target.text, target.width, target.height, target.fontFamily, target.fontSize, target.fontWeight, target.fontStyle, target.lineHeight, target.charSpacing, target.textAlign, target.direction];
|
|
125
129
|
return properties.map(p => String(p)).join('|');
|
|
126
130
|
}
|
|
127
131
|
|
|
128
|
-
/**
|
|
129
|
-
* Check if stored browser lines are still valid for the current target state
|
|
132
|
+
/**
|
|
133
|
+
* Check if stored browser lines are still valid for the current target state
|
|
130
134
|
*/
|
|
131
135
|
function areBrowserLinesValid(target, storedHash) {
|
|
132
136
|
if (!storedHash || !target.__lastBrowserLines) {
|
|
@@ -135,31 +139,37 @@ function areBrowserLinesValid(target, storedHash) {
|
|
|
135
139
|
const currentHash = createLayoutHash(target);
|
|
136
140
|
return currentHash === storedHash;
|
|
137
141
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
* Store browser lines on a target object with validity hash
|
|
142
|
+
/**
|
|
143
|
+
* Store browser lines on a target object with validity hash
|
|
141
144
|
*/
|
|
142
|
-
function storeBrowserLines(target, lines, layoutHash) {
|
|
145
|
+
function storeBrowserLines(target, lines, width, layoutHash) {
|
|
143
146
|
target.__lastBrowserLines = lines;
|
|
147
|
+
target.__lastBrowserLinesWidth = width;
|
|
144
148
|
target.__lastBrowserLinesHash = createLayoutHash(target);
|
|
145
149
|
}
|
|
146
150
|
|
|
147
|
-
/**
|
|
148
|
-
* Clear stored browser lines from a target object
|
|
151
|
+
/**
|
|
152
|
+
* Clear stored browser lines from a target object
|
|
149
153
|
*/
|
|
150
154
|
function clearBrowserLines(target) {
|
|
151
155
|
delete target.__lastBrowserLines;
|
|
152
156
|
delete target.__lastBrowserLinesHash;
|
|
157
|
+
delete target.__lastBrowserLinesWidth;
|
|
153
158
|
}
|
|
154
159
|
|
|
155
|
-
/**
|
|
156
|
-
* Get stored browser lines if they're still valid
|
|
160
|
+
/**
|
|
161
|
+
* Get stored browser lines if they're still valid
|
|
157
162
|
*/
|
|
158
163
|
function getBrowserLines(target) {
|
|
159
164
|
const lines = target.__lastBrowserLines;
|
|
160
165
|
const hash = target.__lastBrowserLinesHash;
|
|
161
166
|
if (lines && areBrowserLinesValid(target, hash)) {
|
|
162
|
-
return
|
|
167
|
+
return {
|
|
168
|
+
lines,
|
|
169
|
+
totalWidth: 0,
|
|
170
|
+
totalHeight: 0,
|
|
171
|
+
width: target.__lastBrowserLinesWidth
|
|
172
|
+
};
|
|
163
173
|
}
|
|
164
174
|
return null;
|
|
165
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserLines.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\r\n * Browser Line Break Extraction\r\n * \r\n * Captures exact line breaks as rendered by the browser to ensure\r\n * pixel-perfect consistency between DOM editing and canvas rendering.\r\n */\r\n\r\nexport interface BrowserLine {\r\n text: string;\r\n start: number; // character index in original text\r\n end: number; // character index in original text (exclusive)\r\n}\r\n\r\nexport interface BrowserLinesResult {\r\n lines: BrowserLine[];\r\n totalWidth: number;\r\n totalHeight: number;\r\n}\r\n\r\n/**\r\n * Segment text into graphemes safely using Intl.Segmenter or fallback\r\n */\r\nfunction segmentIntoGraphemes(text: string): string[] {\r\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\r\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\r\n return Array.from(segmenter.segment(text), s => s.segment);\r\n }\r\n \r\n // Fallback: Use Array.from which handles basic Unicode correctly\r\n return Array.from(text);\r\n}\r\n\r\n/**\r\n * Extract line break information from a textarea by creating a mirror element\r\n * with identical computed styles and measuring grapheme positions.\r\n */\r\nexport function extractLinesFromDOM(textarea: HTMLTextAreaElement): BrowserLinesResult {\r\n const text = textarea.value;\r\n if (!text) {\r\n return {\r\n lines: [],\r\n totalWidth: 0,\r\n totalHeight: 0\r\n };\r\n }\r\n\r\n // Get computed styles from the textarea\r\n const computedStyle = getComputedStyle(textarea);\r\n const container = textarea.parentElement;\r\n if (!container) {\r\n throw new Error('Textarea must be in DOM to extract lines');\r\n }\r\n\r\n // Create mirror div with identical styling\r\n const mirror = document.createElement('div');\r\n mirror.style.position = 'absolute';\r\n mirror.style.left = '-9999px';\r\n mirror.style.top = '-9999px';\r\n mirror.style.visibility = 'hidden';\r\n mirror.style.pointerEvents = 'none';\r\n \r\n // Copy all relevant text styling\r\n const stylesToCopy = [\r\n 'fontSize',\r\n 'fontFamily',\r\n 'fontWeight',\r\n 'fontStyle',\r\n 'lineHeight',\r\n 'letterSpacing',\r\n 'wordSpacing',\r\n 'textAlign',\r\n 'textTransform',\r\n 'whiteSpace',\r\n 'overflowWrap',\r\n 'wordBreak',\r\n 'direction',\r\n 'unicodeBidi',\r\n 'width',\r\n 'height',\r\n 'maxWidth',\r\n 'maxHeight',\r\n 'minWidth',\r\n 'minHeight',\r\n 'padding',\r\n 'paddingTop',\r\n 'paddingRight',\r\n 'paddingBottom',\r\n 'paddingLeft',\r\n 'border',\r\n 'borderTop',\r\n 'borderRight',\r\n 'borderBottom',\r\n 'borderLeft',\r\n 'boxSizing',\r\n ];\r\n \r\n stylesToCopy.forEach(prop => {\r\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\r\n });\r\n\r\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\r\n mirror.style.overflow = 'hidden';\r\n mirror.style.resize = 'none';\r\n\r\n container.appendChild(mirror);\r\n\r\n try {\r\n // Segment text into graphemes\r\n const graphemes = segmentIntoGraphemes(text);\r\n const spans: HTMLSpanElement[] = [];\r\n \r\n // Create a span for each grapheme\r\n graphemes.forEach((grapheme, index) => {\r\n const span = document.createElement('span');\r\n span.textContent = grapheme;\r\n span.setAttribute('data-index', index.toString());\r\n mirror.appendChild(span);\r\n spans.push(span);\r\n });\r\n\r\n // Group spans by their offsetTop (line position)\r\n const lineGroups = new Map<number, { spans: HTMLSpanElement[], indices: number[] }>();\r\n \r\n spans.forEach((span, index) => {\r\n const top = span.offsetTop;\r\n if (!lineGroups.has(top)) {\r\n lineGroups.set(top, { spans: [], indices: [] });\r\n }\r\n lineGroups.get(top)!.spans.push(span);\r\n lineGroups.get(top)!.indices.push(index);\r\n });\r\n\r\n // Convert line groups to BrowserLine objects\r\n const lines: BrowserLine[] = [];\r\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\r\n \r\n sortedTops.forEach(top => {\r\n const group = lineGroups.get(top)!;\r\n const sortedIndices = group.indices.sort((a, b) => a - b);\r\n \r\n const start = sortedIndices[0];\r\n const end = sortedIndices[sortedIndices.length - 1] + 1;\r\n const lineText = graphemes.slice(start, end).join('');\r\n \r\n lines.push({\r\n text: lineText,\r\n start,\r\n end,\r\n });\r\n });\r\n\r\n // Calculate total dimensions\r\n const totalWidth = Math.max(...spans.map(span => span.offsetLeft + span.offsetWidth));\r\n const totalHeight = spans.length > 0 ? \r\n Math.max(...spans.map(span => span.offsetTop + span.offsetHeight)) : 0;\r\n\r\n return {\r\n lines,\r\n totalWidth,\r\n totalHeight\r\n };\r\n \r\n } finally {\r\n // Clean up mirror element\r\n container.removeChild(mirror);\r\n }\r\n}\r\n\r\n/**\r\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\r\n */\r\nexport function createLayoutHash(target: any): string {\r\n const properties = [\r\n target.text,\r\n target.width,\r\n target.height,\r\n target.fontFamily,\r\n target.fontSize,\r\n target.fontWeight,\r\n target.fontStyle,\r\n target.lineHeight,\r\n target.charSpacing,\r\n target.textAlign,\r\n target.direction,\r\n ];\r\n \r\n return properties.map(p => String(p)).join('|');\r\n}\r\n\r\n/**\r\n * Check if stored browser lines are still valid for the current target state\r\n */\r\nexport function areBrowserLinesValid(target: any, storedHash?: string): boolean {\r\n if (!storedHash || !(target as any).__lastBrowserLines) {\r\n return false;\r\n }\r\n \r\n const currentHash = createLayoutHash(target);\r\n return currentHash === storedHash;\r\n}\r\n\r\n/**\r\n * Store browser lines on a target object with validity hash\r\n */\r\nexport function storeBrowserLines(\r\n target: any, \r\n lines: BrowserLine[], \r\n layoutHash?: string\r\n): void {\r\n (target as any).__lastBrowserLines = lines;\r\n (target as any).__lastBrowserLinesHash = layoutHash || createLayoutHash(target);\r\n}\r\n\r\n/**\r\n * Clear stored browser lines from a target object\r\n */\r\nexport function clearBrowserLines(target: any): void {\r\n delete (target as any).__lastBrowserLines;\r\n delete (target as any).__lastBrowserLinesHash;\r\n}\r\n\r\n/**\r\n * Get stored browser lines if they're still valid\r\n */\r\nexport function getBrowserLines(target: any): BrowserLine[] | null {\r\n const lines = (target as any).__lastBrowserLines;\r\n const hash = (target as any).__lastBrowserLinesHash;\r\n \r\n if (lines && areBrowserLinesValid(target, hash)) {\r\n return lines;\r\n }\r\n \r\n return null;\r\n}"],"names":["segmentIntoGraphemes","text","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","extractLinesFromDOM","textarea","value","lines","totalWidth","totalHeight","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","stylesToCopy","forEach","prop","overflow","resize","appendChild","graphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","sortedTops","keys","sort","a","b","group","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","properties","width","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","currentHash","storeBrowserLines","layoutHash","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browserLines.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\n * Browser Line Break Extraction\n *\n * Captures exact line breaks as rendered by the browser to ensure\n * pixel-perfect consistency between DOM editing and canvas rendering.\n */\n\nexport interface BrowserLine {\n text: string;\n start: number; // character index in original text\n end: number; // character index in original text (exclusive)\n}\n\nexport interface BrowserLinesResult {\n lines: BrowserLine[];\n totalWidth: number;\n totalHeight: number;\n width: number;\n}\n\n/**\n * Segment text into graphemes safely using Intl.Segmenter or fallback\n */\nfunction segmentIntoGraphemes(text: string): string[] {\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\n const segmenter = new Intl.Segmenter(undefined, {\n granularity: 'grapheme',\n });\n return Array.from(segmenter.segment(text), (s) => s.segment);\n }\n\n // Fallback: Use Array.from which handles basic Unicode correctly\n return Array.from(text);\n}\n\n/**\n * Extract line break information from a textarea by creating a mirror element\n * with identical computed styles and measuring grapheme positions.\n */\nexport function extractLinesFromDOM(\n textarea: HTMLTextAreaElement,\n): BrowserLinesResult {\n const text = textarea.value;\n if (!text) {\n return {\n lines: [],\n totalWidth: 0,\n totalHeight: 0,\n width: 0,\n };\n }\n\n // Get computed styles from the textarea\n const computedStyle = getComputedStyle(textarea);\n const container = textarea.parentElement;\n if (!container) {\n throw new Error('Textarea must be in DOM to extract lines');\n }\n\n // Create mirror div with identical styling\n const mirror = document.createElement('div');\n mirror.style.position = 'absolute';\n mirror.style.left = '-9999px';\n mirror.style.top = '-9999px';\n mirror.style.visibility = 'hidden';\n mirror.style.pointerEvents = 'none';\n\n // Copy all relevant text styling\n const stylesToCopy = [\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'lineHeight',\n 'letterSpacing',\n 'wordSpacing',\n 'textAlign',\n 'textTransform',\n 'whiteSpace',\n 'overflowWrap',\n 'wordBreak',\n 'direction',\n 'unicodeBidi',\n 'width',\n 'height',\n 'maxWidth',\n 'maxHeight',\n 'minWidth',\n 'minHeight',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'border',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'boxSizing',\n ];\n\n stylesToCopy.forEach((prop) => {\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\n });\n\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\n mirror.style.overflow = 'hidden';\n mirror.style.resize = 'none';\n\n container.appendChild(mirror);\n // capture the width the browser is using for layout\n const width = mirror.clientWidth;\n\n try {\n // Segment text into graphemes\n const graphemes = segmentIntoGraphemes(text);\n const spans: HTMLSpanElement[] = [];\n\n // Create a span for each grapheme\n graphemes.forEach((grapheme, index) => {\n const span = document.createElement('span');\n span.textContent = grapheme;\n span.setAttribute('data-index', index.toString());\n mirror.appendChild(span);\n spans.push(span);\n });\n\n // Group spans by their offsetTop (line position)\n const lineGroups = new Map<\n number,\n { spans: HTMLSpanElement[]; indices: number[] }\n >();\n\n spans.forEach((span, index) => {\n const top = span.offsetTop;\n if (!lineGroups.has(top)) {\n lineGroups.set(top, { spans: [], indices: [] });\n }\n lineGroups.get(top)!.spans.push(span);\n lineGroups.get(top)!.indices.push(index);\n });\n\n // Convert line groups to BrowserLine objects\n const lines: BrowserLine[] = [];\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\n\n sortedTops.forEach((top) => {\n const group = lineGroups.get(top)!;\n const sortedIndices = group.indices.sort((a, b) => a - b);\n\n const start = sortedIndices[0];\n const end = sortedIndices[sortedIndices.length - 1] + 1;\n const lineText = graphemes.slice(start, end).join('');\n\n lines.push({\n text: lineText,\n start,\n end,\n });\n });\n\n // Calculate total dimensions\n const totalWidth = Math.max(\n ...spans.map((span) => span.offsetLeft + span.offsetWidth),\n );\n const totalHeight =\n spans.length > 0\n ? Math.max(...spans.map((span) => span.offsetTop + span.offsetHeight))\n : 0;\n\n return {\n lines,\n totalWidth,\n totalHeight,\n width,\n };\n } finally {\n // Clean up mirror element\n container.removeChild(mirror);\n }\n}\n\n/**\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\n */\nexport function createLayoutHash(target: any): string {\n const properties = [\n target.text,\n target.width,\n target.height,\n target.fontFamily,\n target.fontSize,\n target.fontWeight,\n target.fontStyle,\n target.lineHeight,\n target.charSpacing,\n target.textAlign,\n target.direction,\n ];\n\n return properties.map((p) => String(p)).join('|');\n}\n\n/**\n * Check if stored browser lines are still valid for the current target state\n */\nexport function areBrowserLinesValid(\n target: any,\n storedHash?: string,\n): boolean {\n if (!storedHash || !(target as any).__lastBrowserLines) {\n return false;\n }\n\n const currentHash = createLayoutHash(target);\n return currentHash === storedHash;\n}\n\nexport type StoredBrowserLines = {\n lines: BrowserLine[];\n width?: number;\n};\n\n/**\n * Store browser lines on a target object with validity hash\n */\nexport function storeBrowserLines(\n target: any,\n lines: BrowserLine[],\n width?: number,\n layoutHash?: string,\n): void {\n (target as any).__lastBrowserLines = lines;\n (target as any).__lastBrowserLinesWidth = width;\n (target as any).__lastBrowserLinesHash =\n layoutHash || createLayoutHash(target);\n}\n\n/**\n * Clear stored browser lines from a target object\n */\nexport function clearBrowserLines(target: any): void {\n delete (target as any).__lastBrowserLines;\n delete (target as any).__lastBrowserLinesHash;\n delete (target as any).__lastBrowserLinesWidth;\n}\n\n/**\n * Get stored browser lines if they're still valid\n */\nexport function getBrowserLines(target: any): BrowserLinesResult | null {\n const lines = (target as any).__lastBrowserLines;\n const hash = (target as any).__lastBrowserLinesHash;\n\n if (lines && areBrowserLinesValid(target, hash)) {\n return {\n lines,\n totalWidth: 0,\n totalHeight: 0,\n width: (target as any).__lastBrowserLinesWidth,\n };\n }\n\n return null;\n}\n"],"names":["segmentIntoGraphemes","text","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","extractLinesFromDOM","textarea","value","lines","totalWidth","totalHeight","width","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","stylesToCopy","forEach","prop","overflow","resize","appendChild","clientWidth","graphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","sortedTops","keys","sort","a","b","group","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","properties","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","currentHash","storeBrowserLines","layoutHash","__lastBrowserLinesWidth","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipsis.min.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\r\n * Ellipsis Text Truncation System\r\n * \r\n * Implements text truncation with ellipsis when content exceeds bounds,\r\n * using binary search for optimal truncation points.\r\n */\r\n\r\nimport { segmentGraphemes } from './unicode';\r\n\r\nexport interface EllipsisOptions {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n ellipsisChar: string; // Default: \"…\"\r\n measureFn: (text: string) => number | { width: number; height: number };\r\n}\r\n\r\nexport interface EllipsisResult {\r\n truncatedText: string;\r\n isTruncated: boolean;\r\n truncationIndex: number; // Grapheme index where truncation occurred\r\n ellipsisWidth: number;\r\n originalLength: number;\r\n}\r\n\r\n/**\r\n * Apply ellipsis truncation to text based on width/height constraints\r\n */\r\nexport function applyEllipsis(\r\n text: string,\r\n options: EllipsisOptions\r\n): EllipsisResult {\r\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\r\n \r\n if (!text) {\r\n return {\r\n truncatedText: '',\r\n isTruncated: false,\r\n truncationIndex: 0,\r\n ellipsisWidth: 0,\r\n originalLength: 0,\r\n };\r\n }\r\n\r\n // Measure ellipsis width\r\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \r\n ? measureFn(ellipsisChar) as number\r\n : (measureFn(ellipsisChar) as { width: number }).width;\r\n\r\n // Check if truncation is needed\r\n const originalMeasurement = measureFn(text);\r\n const originalWidth = typeof originalMeasurement === 'number' \r\n ? originalMeasurement \r\n : originalMeasurement.width;\r\n const originalHeight = typeof originalMeasurement === 'number'\r\n ? 0 // Height constraint not applicable for single dimension measure\r\n : originalMeasurement.height;\r\n\r\n let needsTruncation = false;\r\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\r\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\r\n\r\n if (!needsTruncation) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply width-based truncation\r\n if (maxWidth) {\r\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\r\n return {\r\n ...widthTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply height-based truncation (for multi-line text)\r\n if (maxHeight) {\r\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\r\n return {\r\n ...heightTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Fallback - should not reach here\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on width constraint using binary search\r\n */\r\nfunction truncateByWidth(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal truncation point\r\n let low = 0;\r\n let high = graphemes.length;\r\n let bestFit = 0;\r\n\r\n while (low <= high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n \r\n const measurement = measureFn(candidate);\r\n const candidateWidth = typeof measurement === 'number' \r\n ? measurement \r\n : measurement.width;\r\n\r\n if (candidateWidth <= availableWidth) {\r\n bestFit = mid;\r\n low = mid + 1;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n // Handle edge cases\r\n if (bestFit === 0) {\r\n // Even single character doesn't fit - return ellipsis only\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n };\r\n }\r\n\r\n if (bestFit === graphemes.length) {\r\n // Everything fits even with ellipsis space reserved\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n };\r\n }\r\n\r\n // Create truncated text with ellipsis\r\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: bestFit,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on height constraint\r\n */\r\nfunction truncateByHeight(\r\n text: string,\r\n maxHeight: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const lines = text.split('\\n');\r\n let accumulatedText = '';\r\n let lineIndex = 0;\r\n\r\n // Add lines until height exceeded\r\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\r\n const testText = lineIndex === 0 \r\n ? lines[lineIndex] \r\n : accumulatedText + '\\n' + lines[lineIndex];\r\n \r\n const measurement = measureFn(testText);\r\n const height = typeof measurement === 'number' \r\n ? 0 // Single dimension measure doesn't provide height\r\n : measurement.height;\r\n\r\n if (height > maxHeight && accumulatedText) {\r\n // Previous text fits, current doesn't - truncate at previous\r\n break;\r\n }\r\n\r\n accumulatedText = testText;\r\n\r\n // If this is the last line and it fits, no truncation needed\r\n if (lineIndex === lines.length - 1) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n };\r\n }\r\n }\r\n\r\n // If we need to truncate the last fitting line to add ellipsis\r\n if (lineIndex > 0) {\r\n const lastFittingLine = lines[lineIndex - 1];\r\n const withEllipsis = lastFittingLine + ellipsisChar;\r\n const graphemes = segmentGraphemes(accumulatedText);\r\n\r\n return {\r\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\r\n isTruncated: true,\r\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\r\n };\r\n }\r\n\r\n // First line doesn't fit - try width-based truncation on first line\r\n const firstLineWidth = typeof measureFn === 'function' \r\n ? (measureFn(lines[0]) as any)?.width || 1000\r\n : 1000; // Fallback width\r\n\r\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\r\n}\r\n\r\n/**\r\n * Find optimal truncation point using binary search\r\n */\r\nexport function findTruncationPoint(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number\r\n): number {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high + 1) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = mid;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n return low;\r\n}\r\n\r\n/**\r\n * Smart truncation that tries to break at word boundaries\r\n */\r\nexport function smartTruncate(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n \r\n // First try exact truncation\r\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(text);\r\n \r\n if (exactPoint === 0) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n if (exactPoint >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n // Try to find a word boundary before the exact point\r\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\r\n const words = textUpToPoint.split(/(\\s+)/);\r\n \r\n if (words.length > 1) {\r\n // Try truncating at last complete word\r\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\r\n const wordBoundaryText = wordsWithoutLast.join('');\r\n const wordBoundaryWidth = measureFn(wordBoundaryText);\r\n \r\n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\r\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\r\n return {\r\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: wordBoundaryGraphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n }\r\n\r\n // Fall back to character truncation\r\n return {\r\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: exactPoint,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate multi-line text with ellipsis on the last visible line\r\n */\r\nexport function truncateMultiline(\r\n lines: string[],\r\n maxLines: number,\r\n ellipsisChar: string,\r\n maxWidth?: number,\r\n measureFn?: (text: string) => number\r\n): {\r\n truncatedLines: string[];\r\n isTruncated: boolean;\r\n lastLineIndex: number;\r\n} {\r\n if (lines.length <= maxLines) {\r\n return {\r\n truncatedLines: lines,\r\n isTruncated: false,\r\n lastLineIndex: lines.length - 1,\r\n };\r\n }\r\n\r\n // Take lines up to limit\r\n const visibleLines = lines.slice(0, maxLines);\r\n \r\n // Add ellipsis to last line if needed\r\n if (maxWidth && measureFn) {\r\n const lastLineIndex = visibleLines.length - 1;\r\n const lastLine = visibleLines[lastLineIndex];\r\n const lastLineWithEllipsis = lastLine + ellipsisChar;\r\n \r\n if (measureFn(lastLineWithEllipsis) > maxWidth) {\r\n // Last line + ellipsis doesn't fit, truncate it\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(lastLine);\r\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\r\n } else {\r\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\r\n }\r\n } else {\r\n // Just add ellipsis to last line\r\n const lastLineIndex = visibleLines.length - 1;\r\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\r\n }\r\n\r\n return {\r\n truncatedLines: visibleLines,\r\n isTruncated: true,\r\n lastLineIndex: maxLines - 1,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate ellipsis positioning for different alignments\r\n */\r\nexport function getEllipsisPosition(\r\n text: string,\r\n position: 'end' | 'middle' | 'start',\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const totalWidth = measureFn(text);\r\n \r\n if (totalWidth <= maxWidth) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n switch (position) {\r\n case 'start':\r\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\r\n case 'middle':\r\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\r\n case 'end':\r\n default:\r\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\r\n }\r\n}\r\n\r\n/**\r\n * Truncate from start with ellipsis at beginning\r\n */\r\nfunction truncateFromStart(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n high = mid;\r\n } else {\r\n low = mid + 1;\r\n }\r\n }\r\n\r\n if (low >= graphemes.length) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n return {\r\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\r\n isTruncated: true,\r\n truncationIndex: low,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate from middle with ellipsis in center\r\n */\r\nfunction truncateFromMiddle(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal split\r\n let low = 0;\r\n let high = Math.floor(graphemes.length / 2);\r\n\r\n while (low < high) {\r\n const startChars = Math.floor((low + high + 1) / 2);\r\n const endChars = startChars;\r\n \r\n const candidate = graphemes.slice(0, startChars).join('') + \r\n graphemes.slice(-endChars).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = startChars;\r\n } else {\r\n high = startChars - 1;\r\n }\r\n }\r\n\r\n const startChars = low;\r\n const endChars = low;\r\n\r\n if (startChars + endChars >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n const truncatedText = graphemes.slice(0, startChars).join('') + \r\n ellipsisChar + \r\n graphemes.slice(-endChars).join('');\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: startChars,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","truncateByWidth","heightTruncated","_measureFn","lines","split","accumulatedText","lineIndex","testText","measurement","lastFittingLine","withEllipsis","graphemes","replace","firstLineWidth","truncateByHeight","availableWidth","low","high","bestFit","mid","Math","floor","slice","join"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ellipsis.min.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\n * Ellipsis Text Truncation System\n * \n * Implements text truncation with ellipsis when content exceeds bounds,\n * using binary search for optimal truncation points.\n */\n\nimport { segmentGraphemes } from './unicode';\n\nexport interface EllipsisOptions {\n maxWidth?: number;\n maxHeight?: number;\n ellipsisChar: string; // Default: \"…\"\n measureFn: (text: string) => number | { width: number; height: number };\n}\n\nexport interface EllipsisResult {\n truncatedText: string;\n isTruncated: boolean;\n truncationIndex: number; // Grapheme index where truncation occurred\n ellipsisWidth: number;\n originalLength: number;\n}\n\n/**\n * Apply ellipsis truncation to text based on width/height constraints\n */\nexport function applyEllipsis(\n text: string,\n options: EllipsisOptions\n): EllipsisResult {\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\n \n if (!text) {\n return {\n truncatedText: '',\n isTruncated: false,\n truncationIndex: 0,\n ellipsisWidth: 0,\n originalLength: 0,\n };\n }\n\n // Measure ellipsis width\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \n ? measureFn(ellipsisChar) as number\n : (measureFn(ellipsisChar) as { width: number }).width;\n\n // Check if truncation is needed\n const originalMeasurement = measureFn(text);\n const originalWidth = typeof originalMeasurement === 'number' \n ? originalMeasurement \n : originalMeasurement.width;\n const originalHeight = typeof originalMeasurement === 'number'\n ? 0 // Height constraint not applicable for single dimension measure\n : originalMeasurement.height;\n\n let needsTruncation = false;\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\n\n if (!needsTruncation) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply width-based truncation\n if (maxWidth) {\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\n return {\n ...widthTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply height-based truncation (for multi-line text)\n if (maxHeight) {\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\n return {\n ...heightTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Fallback - should not reach here\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n}\n\n/**\n * Truncate text based on width constraint using binary search\n */\nfunction truncateByWidth(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n ellipsisWidth: number,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal truncation point\n let low = 0;\n let high = graphemes.length;\n let bestFit = 0;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n \n const measurement = measureFn(candidate);\n const candidateWidth = typeof measurement === 'number' \n ? measurement \n : measurement.width;\n\n if (candidateWidth <= availableWidth) {\n bestFit = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n // Handle edge cases\n if (bestFit === 0) {\n // Even single character doesn't fit - return ellipsis only\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n };\n }\n\n if (bestFit === graphemes.length) {\n // Everything fits even with ellipsis space reserved\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n };\n }\n\n // Create truncated text with ellipsis\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: bestFit,\n };\n}\n\n/**\n * Truncate text based on height constraint\n */\nfunction truncateByHeight(\n text: string,\n maxHeight: number,\n ellipsisChar: string,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const lines = text.split('\\n');\n let accumulatedText = '';\n let lineIndex = 0;\n\n // Add lines until height exceeded\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const testText = lineIndex === 0 \n ? lines[lineIndex] \n : accumulatedText + '\\n' + lines[lineIndex];\n \n const measurement = measureFn(testText);\n const height = typeof measurement === 'number' \n ? 0 // Single dimension measure doesn't provide height\n : measurement.height;\n\n if (height > maxHeight && accumulatedText) {\n // Previous text fits, current doesn't - truncate at previous\n break;\n }\n\n accumulatedText = testText;\n\n // If this is the last line and it fits, no truncation needed\n if (lineIndex === lines.length - 1) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n };\n }\n }\n\n // If we need to truncate the last fitting line to add ellipsis\n if (lineIndex > 0) {\n const lastFittingLine = lines[lineIndex - 1];\n const withEllipsis = lastFittingLine + ellipsisChar;\n const graphemes = segmentGraphemes(accumulatedText);\n\n return {\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\n isTruncated: true,\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\n };\n }\n\n // First line doesn't fit - try width-based truncation on first line\n const firstLineWidth = typeof measureFn === 'function' \n ? (measureFn(lines[0]) as any)?.width || 1000\n : 1000; // Fallback width\n\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\n}\n\n/**\n * Find optimal truncation point using binary search\n */\nexport function findTruncationPoint(\n text: string,\n maxWidth: number,\n ellipsisWidth: number,\n measureFn: (text: string) => number\n): number {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n\n return low;\n}\n\n/**\n * Smart truncation that tries to break at word boundaries\n */\nexport function smartTruncate(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const availableWidth = maxWidth - ellipsisWidth;\n \n // First try exact truncation\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(text);\n \n if (exactPoint === 0) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n if (exactPoint >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n // Try to find a word boundary before the exact point\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\n const words = textUpToPoint.split(/(\\s+)/);\n \n if (words.length > 1) {\n // Try truncating at last complete word\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\n const wordBoundaryText = wordsWithoutLast.join('');\n const wordBoundaryWidth = measureFn(wordBoundaryText);\n \n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\n return {\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\n isTruncated: true,\n truncationIndex: wordBoundaryGraphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n }\n\n // Fall back to character truncation\n return {\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\n isTruncated: true,\n truncationIndex: exactPoint,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate multi-line text with ellipsis on the last visible line\n */\nexport function truncateMultiline(\n lines: string[],\n maxLines: number,\n ellipsisChar: string,\n maxWidth?: number,\n measureFn?: (text: string) => number\n): {\n truncatedLines: string[];\n isTruncated: boolean;\n lastLineIndex: number;\n} {\n if (lines.length <= maxLines) {\n return {\n truncatedLines: lines,\n isTruncated: false,\n lastLineIndex: lines.length - 1,\n };\n }\n\n // Take lines up to limit\n const visibleLines = lines.slice(0, maxLines);\n \n // Add ellipsis to last line if needed\n if (maxWidth && measureFn) {\n const lastLineIndex = visibleLines.length - 1;\n const lastLine = visibleLines[lastLineIndex];\n const lastLineWithEllipsis = lastLine + ellipsisChar;\n \n if (measureFn(lastLineWithEllipsis) > maxWidth) {\n // Last line + ellipsis doesn't fit, truncate it\n const ellipsisWidth = measureFn(ellipsisChar);\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(lastLine);\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\n } else {\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\n }\n } else {\n // Just add ellipsis to last line\n const lastLineIndex = visibleLines.length - 1;\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\n }\n\n return {\n truncatedLines: visibleLines,\n isTruncated: true,\n lastLineIndex: maxLines - 1,\n };\n}\n\n/**\n * Calculate ellipsis positioning for different alignments\n */\nexport function getEllipsisPosition(\n text: string,\n position: 'end' | 'middle' | 'start',\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const totalWidth = measureFn(text);\n \n if (totalWidth <= maxWidth) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n switch (position) {\n case 'start':\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\n case 'middle':\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\n case 'end':\n default:\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\n }\n}\n\n/**\n * Truncate from start with ellipsis at beginning\n */\nfunction truncateFromStart(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n if (low >= graphemes.length) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n return {\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\n isTruncated: true,\n truncationIndex: low,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate from middle with ellipsis in center\n */\nfunction truncateFromMiddle(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal split\n let low = 0;\n let high = Math.floor(graphemes.length / 2);\n\n while (low < high) {\n const startChars = Math.floor((low + high + 1) / 2);\n const endChars = startChars;\n \n const candidate = graphemes.slice(0, startChars).join('') + \n graphemes.slice(-endChars).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = startChars;\n } else {\n high = startChars - 1;\n }\n }\n\n const startChars = low;\n const endChars = low;\n\n if (startChars + endChars >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n const truncatedText = graphemes.slice(0, startChars).join('') + \n ellipsisChar + \n graphemes.slice(-endChars).join('');\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: startChars,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","truncateByWidth","heightTruncated","_measureFn","lines","split","accumulatedText","lineIndex","testText","measurement","lastFittingLine","withEllipsis","graphemes","replace","firstLineWidth","truncateByHeight","availableWidth","low","high","bestFit","mid","Math","floor","slice","join"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { segmentGraphemes } from './unicode.mjs';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Ellipsis Text Truncation System
|
|
5
|
-
*
|
|
6
|
-
* Implements text truncation with ellipsis when content exceeds bounds,
|
|
7
|
-
* using binary search for optimal truncation points.
|
|
3
|
+
/**
|
|
4
|
+
* Ellipsis Text Truncation System
|
|
5
|
+
*
|
|
6
|
+
* Implements text truncation with ellipsis when content exceeds bounds,
|
|
7
|
+
* using binary search for optimal truncation points.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* Apply ellipsis truncation to text based on width/height constraints
|
|
10
|
+
/**
|
|
11
|
+
* Apply ellipsis truncation to text based on width/height constraints
|
|
12
12
|
*/
|
|
13
13
|
function applyEllipsis(text, options) {
|
|
14
14
|
const {
|
|
@@ -78,8 +78,8 @@ function applyEllipsis(text, options) {
|
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
/**
|
|
82
|
-
* Truncate text based on width constraint using binary search
|
|
81
|
+
/**
|
|
82
|
+
* Truncate text based on width constraint using binary search
|
|
83
83
|
*/
|
|
84
84
|
function truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn) {
|
|
85
85
|
const graphemes = segmentGraphemes(text);
|
|
@@ -129,8 +129,8 @@ function truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn)
|
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
/**
|
|
133
|
-
* Truncate text based on height constraint
|
|
132
|
+
/**
|
|
133
|
+
* Truncate text based on height constraint
|
|
134
134
|
*/
|
|
135
135
|
function truncateByHeight(text, maxHeight, ellipsisChar, measureFn) {
|
|
136
136
|
var _measureFn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipsis.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\r\n * Ellipsis Text Truncation System\r\n * \r\n * Implements text truncation with ellipsis when content exceeds bounds,\r\n * using binary search for optimal truncation points.\r\n */\r\n\r\nimport { segmentGraphemes } from './unicode';\r\n\r\nexport interface EllipsisOptions {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n ellipsisChar: string; // Default: \"…\"\r\n measureFn: (text: string) => number | { width: number; height: number };\r\n}\r\n\r\nexport interface EllipsisResult {\r\n truncatedText: string;\r\n isTruncated: boolean;\r\n truncationIndex: number; // Grapheme index where truncation occurred\r\n ellipsisWidth: number;\r\n originalLength: number;\r\n}\r\n\r\n/**\r\n * Apply ellipsis truncation to text based on width/height constraints\r\n */\r\nexport function applyEllipsis(\r\n text: string,\r\n options: EllipsisOptions\r\n): EllipsisResult {\r\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\r\n \r\n if (!text) {\r\n return {\r\n truncatedText: '',\r\n isTruncated: false,\r\n truncationIndex: 0,\r\n ellipsisWidth: 0,\r\n originalLength: 0,\r\n };\r\n }\r\n\r\n // Measure ellipsis width\r\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \r\n ? measureFn(ellipsisChar) as number\r\n : (measureFn(ellipsisChar) as { width: number }).width;\r\n\r\n // Check if truncation is needed\r\n const originalMeasurement = measureFn(text);\r\n const originalWidth = typeof originalMeasurement === 'number' \r\n ? originalMeasurement \r\n : originalMeasurement.width;\r\n const originalHeight = typeof originalMeasurement === 'number'\r\n ? 0 // Height constraint not applicable for single dimension measure\r\n : originalMeasurement.height;\r\n\r\n let needsTruncation = false;\r\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\r\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\r\n\r\n if (!needsTruncation) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply width-based truncation\r\n if (maxWidth) {\r\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\r\n return {\r\n ...widthTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply height-based truncation (for multi-line text)\r\n if (maxHeight) {\r\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\r\n return {\r\n ...heightTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Fallback - should not reach here\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on width constraint using binary search\r\n */\r\nfunction truncateByWidth(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal truncation point\r\n let low = 0;\r\n let high = graphemes.length;\r\n let bestFit = 0;\r\n\r\n while (low <= high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n \r\n const measurement = measureFn(candidate);\r\n const candidateWidth = typeof measurement === 'number' \r\n ? measurement \r\n : measurement.width;\r\n\r\n if (candidateWidth <= availableWidth) {\r\n bestFit = mid;\r\n low = mid + 1;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n // Handle edge cases\r\n if (bestFit === 0) {\r\n // Even single character doesn't fit - return ellipsis only\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n };\r\n }\r\n\r\n if (bestFit === graphemes.length) {\r\n // Everything fits even with ellipsis space reserved\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n };\r\n }\r\n\r\n // Create truncated text with ellipsis\r\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: bestFit,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on height constraint\r\n */\r\nfunction truncateByHeight(\r\n text: string,\r\n maxHeight: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const lines = text.split('\\n');\r\n let accumulatedText = '';\r\n let lineIndex = 0;\r\n\r\n // Add lines until height exceeded\r\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\r\n const testText = lineIndex === 0 \r\n ? lines[lineIndex] \r\n : accumulatedText + '\\n' + lines[lineIndex];\r\n \r\n const measurement = measureFn(testText);\r\n const height = typeof measurement === 'number' \r\n ? 0 // Single dimension measure doesn't provide height\r\n : measurement.height;\r\n\r\n if (height > maxHeight && accumulatedText) {\r\n // Previous text fits, current doesn't - truncate at previous\r\n break;\r\n }\r\n\r\n accumulatedText = testText;\r\n\r\n // If this is the last line and it fits, no truncation needed\r\n if (lineIndex === lines.length - 1) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n };\r\n }\r\n }\r\n\r\n // If we need to truncate the last fitting line to add ellipsis\r\n if (lineIndex > 0) {\r\n const lastFittingLine = lines[lineIndex - 1];\r\n const withEllipsis = lastFittingLine + ellipsisChar;\r\n const graphemes = segmentGraphemes(accumulatedText);\r\n\r\n return {\r\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\r\n isTruncated: true,\r\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\r\n };\r\n }\r\n\r\n // First line doesn't fit - try width-based truncation on first line\r\n const firstLineWidth = typeof measureFn === 'function' \r\n ? (measureFn(lines[0]) as any)?.width || 1000\r\n : 1000; // Fallback width\r\n\r\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\r\n}\r\n\r\n/**\r\n * Find optimal truncation point using binary search\r\n */\r\nexport function findTruncationPoint(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number\r\n): number {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high + 1) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = mid;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n return low;\r\n}\r\n\r\n/**\r\n * Smart truncation that tries to break at word boundaries\r\n */\r\nexport function smartTruncate(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n \r\n // First try exact truncation\r\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(text);\r\n \r\n if (exactPoint === 0) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n if (exactPoint >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n // Try to find a word boundary before the exact point\r\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\r\n const words = textUpToPoint.split(/(\\s+)/);\r\n \r\n if (words.length > 1) {\r\n // Try truncating at last complete word\r\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\r\n const wordBoundaryText = wordsWithoutLast.join('');\r\n const wordBoundaryWidth = measureFn(wordBoundaryText);\r\n \r\n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\r\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\r\n return {\r\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: wordBoundaryGraphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n }\r\n\r\n // Fall back to character truncation\r\n return {\r\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: exactPoint,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate multi-line text with ellipsis on the last visible line\r\n */\r\nexport function truncateMultiline(\r\n lines: string[],\r\n maxLines: number,\r\n ellipsisChar: string,\r\n maxWidth?: number,\r\n measureFn?: (text: string) => number\r\n): {\r\n truncatedLines: string[];\r\n isTruncated: boolean;\r\n lastLineIndex: number;\r\n} {\r\n if (lines.length <= maxLines) {\r\n return {\r\n truncatedLines: lines,\r\n isTruncated: false,\r\n lastLineIndex: lines.length - 1,\r\n };\r\n }\r\n\r\n // Take lines up to limit\r\n const visibleLines = lines.slice(0, maxLines);\r\n \r\n // Add ellipsis to last line if needed\r\n if (maxWidth && measureFn) {\r\n const lastLineIndex = visibleLines.length - 1;\r\n const lastLine = visibleLines[lastLineIndex];\r\n const lastLineWithEllipsis = lastLine + ellipsisChar;\r\n \r\n if (measureFn(lastLineWithEllipsis) > maxWidth) {\r\n // Last line + ellipsis doesn't fit, truncate it\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(lastLine);\r\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\r\n } else {\r\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\r\n }\r\n } else {\r\n // Just add ellipsis to last line\r\n const lastLineIndex = visibleLines.length - 1;\r\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\r\n }\r\n\r\n return {\r\n truncatedLines: visibleLines,\r\n isTruncated: true,\r\n lastLineIndex: maxLines - 1,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate ellipsis positioning for different alignments\r\n */\r\nexport function getEllipsisPosition(\r\n text: string,\r\n position: 'end' | 'middle' | 'start',\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const totalWidth = measureFn(text);\r\n \r\n if (totalWidth <= maxWidth) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n switch (position) {\r\n case 'start':\r\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\r\n case 'middle':\r\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\r\n case 'end':\r\n default:\r\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\r\n }\r\n}\r\n\r\n/**\r\n * Truncate from start with ellipsis at beginning\r\n */\r\nfunction truncateFromStart(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n high = mid;\r\n } else {\r\n low = mid + 1;\r\n }\r\n }\r\n\r\n if (low >= graphemes.length) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n return {\r\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\r\n isTruncated: true,\r\n truncationIndex: low,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate from middle with ellipsis in center\r\n */\r\nfunction truncateFromMiddle(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal split\r\n let low = 0;\r\n let high = Math.floor(graphemes.length / 2);\r\n\r\n while (low < high) {\r\n const startChars = Math.floor((low + high + 1) / 2);\r\n const endChars = startChars;\r\n \r\n const candidate = graphemes.slice(0, startChars).join('') + \r\n graphemes.slice(-endChars).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = startChars;\r\n } else {\r\n high = startChars - 1;\r\n }\r\n }\r\n\r\n const startChars = low;\r\n const endChars = low;\r\n\r\n if (startChars + endChars >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n const truncatedText = graphemes.slice(0, startChars).join('') + \r\n ellipsisChar + \r\n graphemes.slice(-endChars).join('');\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: startChars,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","widthTruncated","truncateByWidth","heightTruncated","truncateByHeight","graphemes","availableWidth","low","high","bestFit","mid","Math","floor","candidate","slice","join","measurement","candidateWidth","_measureFn","lines","split","accumulatedText","lineIndex","testText","lastFittingLine","withEllipsis","replace","firstLineWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ellipsis.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\n * Ellipsis Text Truncation System\n * \n * Implements text truncation with ellipsis when content exceeds bounds,\n * using binary search for optimal truncation points.\n */\n\nimport { segmentGraphemes } from './unicode';\n\nexport interface EllipsisOptions {\n maxWidth?: number;\n maxHeight?: number;\n ellipsisChar: string; // Default: \"…\"\n measureFn: (text: string) => number | { width: number; height: number };\n}\n\nexport interface EllipsisResult {\n truncatedText: string;\n isTruncated: boolean;\n truncationIndex: number; // Grapheme index where truncation occurred\n ellipsisWidth: number;\n originalLength: number;\n}\n\n/**\n * Apply ellipsis truncation to text based on width/height constraints\n */\nexport function applyEllipsis(\n text: string,\n options: EllipsisOptions\n): EllipsisResult {\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\n \n if (!text) {\n return {\n truncatedText: '',\n isTruncated: false,\n truncationIndex: 0,\n ellipsisWidth: 0,\n originalLength: 0,\n };\n }\n\n // Measure ellipsis width\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \n ? measureFn(ellipsisChar) as number\n : (measureFn(ellipsisChar) as { width: number }).width;\n\n // Check if truncation is needed\n const originalMeasurement = measureFn(text);\n const originalWidth = typeof originalMeasurement === 'number' \n ? originalMeasurement \n : originalMeasurement.width;\n const originalHeight = typeof originalMeasurement === 'number'\n ? 0 // Height constraint not applicable for single dimension measure\n : originalMeasurement.height;\n\n let needsTruncation = false;\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\n\n if (!needsTruncation) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply width-based truncation\n if (maxWidth) {\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\n return {\n ...widthTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply height-based truncation (for multi-line text)\n if (maxHeight) {\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\n return {\n ...heightTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Fallback - should not reach here\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n}\n\n/**\n * Truncate text based on width constraint using binary search\n */\nfunction truncateByWidth(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n ellipsisWidth: number,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal truncation point\n let low = 0;\n let high = graphemes.length;\n let bestFit = 0;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n \n const measurement = measureFn(candidate);\n const candidateWidth = typeof measurement === 'number' \n ? measurement \n : measurement.width;\n\n if (candidateWidth <= availableWidth) {\n bestFit = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n // Handle edge cases\n if (bestFit === 0) {\n // Even single character doesn't fit - return ellipsis only\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n };\n }\n\n if (bestFit === graphemes.length) {\n // Everything fits even with ellipsis space reserved\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n };\n }\n\n // Create truncated text with ellipsis\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: bestFit,\n };\n}\n\n/**\n * Truncate text based on height constraint\n */\nfunction truncateByHeight(\n text: string,\n maxHeight: number,\n ellipsisChar: string,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const lines = text.split('\\n');\n let accumulatedText = '';\n let lineIndex = 0;\n\n // Add lines until height exceeded\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const testText = lineIndex === 0 \n ? lines[lineIndex] \n : accumulatedText + '\\n' + lines[lineIndex];\n \n const measurement = measureFn(testText);\n const height = typeof measurement === 'number' \n ? 0 // Single dimension measure doesn't provide height\n : measurement.height;\n\n if (height > maxHeight && accumulatedText) {\n // Previous text fits, current doesn't - truncate at previous\n break;\n }\n\n accumulatedText = testText;\n\n // If this is the last line and it fits, no truncation needed\n if (lineIndex === lines.length - 1) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n };\n }\n }\n\n // If we need to truncate the last fitting line to add ellipsis\n if (lineIndex > 0) {\n const lastFittingLine = lines[lineIndex - 1];\n const withEllipsis = lastFittingLine + ellipsisChar;\n const graphemes = segmentGraphemes(accumulatedText);\n\n return {\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\n isTruncated: true,\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\n };\n }\n\n // First line doesn't fit - try width-based truncation on first line\n const firstLineWidth = typeof measureFn === 'function' \n ? (measureFn(lines[0]) as any)?.width || 1000\n : 1000; // Fallback width\n\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\n}\n\n/**\n * Find optimal truncation point using binary search\n */\nexport function findTruncationPoint(\n text: string,\n maxWidth: number,\n ellipsisWidth: number,\n measureFn: (text: string) => number\n): number {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n\n return low;\n}\n\n/**\n * Smart truncation that tries to break at word boundaries\n */\nexport function smartTruncate(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const availableWidth = maxWidth - ellipsisWidth;\n \n // First try exact truncation\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(text);\n \n if (exactPoint === 0) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n if (exactPoint >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n // Try to find a word boundary before the exact point\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\n const words = textUpToPoint.split(/(\\s+)/);\n \n if (words.length > 1) {\n // Try truncating at last complete word\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\n const wordBoundaryText = wordsWithoutLast.join('');\n const wordBoundaryWidth = measureFn(wordBoundaryText);\n \n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\n return {\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\n isTruncated: true,\n truncationIndex: wordBoundaryGraphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n }\n\n // Fall back to character truncation\n return {\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\n isTruncated: true,\n truncationIndex: exactPoint,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate multi-line text with ellipsis on the last visible line\n */\nexport function truncateMultiline(\n lines: string[],\n maxLines: number,\n ellipsisChar: string,\n maxWidth?: number,\n measureFn?: (text: string) => number\n): {\n truncatedLines: string[];\n isTruncated: boolean;\n lastLineIndex: number;\n} {\n if (lines.length <= maxLines) {\n return {\n truncatedLines: lines,\n isTruncated: false,\n lastLineIndex: lines.length - 1,\n };\n }\n\n // Take lines up to limit\n const visibleLines = lines.slice(0, maxLines);\n \n // Add ellipsis to last line if needed\n if (maxWidth && measureFn) {\n const lastLineIndex = visibleLines.length - 1;\n const lastLine = visibleLines[lastLineIndex];\n const lastLineWithEllipsis = lastLine + ellipsisChar;\n \n if (measureFn(lastLineWithEllipsis) > maxWidth) {\n // Last line + ellipsis doesn't fit, truncate it\n const ellipsisWidth = measureFn(ellipsisChar);\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(lastLine);\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\n } else {\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\n }\n } else {\n // Just add ellipsis to last line\n const lastLineIndex = visibleLines.length - 1;\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\n }\n\n return {\n truncatedLines: visibleLines,\n isTruncated: true,\n lastLineIndex: maxLines - 1,\n };\n}\n\n/**\n * Calculate ellipsis positioning for different alignments\n */\nexport function getEllipsisPosition(\n text: string,\n position: 'end' | 'middle' | 'start',\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const totalWidth = measureFn(text);\n \n if (totalWidth <= maxWidth) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n switch (position) {\n case 'start':\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\n case 'middle':\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\n case 'end':\n default:\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\n }\n}\n\n/**\n * Truncate from start with ellipsis at beginning\n */\nfunction truncateFromStart(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n if (low >= graphemes.length) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n return {\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\n isTruncated: true,\n truncationIndex: low,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate from middle with ellipsis in center\n */\nfunction truncateFromMiddle(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal split\n let low = 0;\n let high = Math.floor(graphemes.length / 2);\n\n while (low < high) {\n const startChars = Math.floor((low + high + 1) / 2);\n const endChars = startChars;\n \n const candidate = graphemes.slice(0, startChars).join('') + \n graphemes.slice(-endChars).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = startChars;\n } else {\n high = startChars - 1;\n }\n }\n\n const startChars = low;\n const endChars = low;\n\n if (startChars + endChars >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n const truncatedText = graphemes.slice(0, startChars).join('') + \n ellipsisChar + \n graphemes.slice(-endChars).join('');\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: startChars,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","widthTruncated","truncateByWidth","heightTruncated","truncateByHeight","graphemes","availableWidth","low","high","bestFit","mid","Math","floor","candidate","slice","join","measurement","candidateWidth","_measureFn","lines","split","accumulatedText","lineIndex","testText","lastFittingLine","withEllipsis","replace","firstLineWidth"],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|