@visactor/vrender-core 1.0.37-alpha.1 → 1.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/allocator/canvas-allocate.js +7 -5
- package/cjs/allocator/canvas-allocate.js.map +1 -1
- package/cjs/allocator/graphic-allocate.js +17 -17
- package/cjs/allocator/graphic-allocate.js.map +1 -1
- package/cjs/application.d.ts +13 -5
- package/cjs/application.js +25 -2
- package/cjs/application.js.map +1 -1
- package/cjs/canvas/conical-gradient.js +2 -2
- package/cjs/canvas/conical-gradient.js.map +1 -1
- package/cjs/canvas/contributions/base-canvas.js +2 -2
- package/cjs/canvas/contributions/base-canvas.js.map +1 -1
- package/cjs/canvas/empty-context.js +3 -12
- package/cjs/canvas/empty-context.js.map +1 -1
- package/cjs/canvas/util.js +7 -3
- package/cjs/canvas/util.js.map +1 -1
- package/cjs/common/diff.js +2 -1
- package/cjs/common/enums.js +1 -2
- package/cjs/common/performance-raf.js +2 -2
- package/cjs/common/performance-raf.js.map +1 -1
- package/cjs/common/registry/contribution-registry.d.ts +24 -0
- package/cjs/common/registry/contribution-registry.js +61 -0
- package/cjs/common/registry/contribution-registry.js.map +1 -0
- package/cjs/common/registry/index.d.ts +5 -0
- package/cjs/common/registry/index.js +34 -0
- package/cjs/common/registry/index.js.map +1 -0
- package/cjs/common/registry/service-registry.d.ts +16 -0
- package/cjs/common/registry/service-registry.js +57 -0
- package/cjs/common/registry/service-registry.js.map +1 -0
- package/cjs/common/registry/types.d.ts +1 -0
- package/cjs/common/{inversify-lite/interfaces/interfaces.js → registry/types.js} +1 -1
- package/cjs/common/registry/types.js.map +1 -0
- package/cjs/common/simplify.js +2 -1
- package/cjs/common/sort.js +1 -2
- package/cjs/core/constants.js +1 -1
- package/cjs/core/contributions/env/base-contribution.js +4 -9
- package/cjs/core/contributions/env/base-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +4 -13
- package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/empty-contribution.js +4 -13
- package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -1
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +4 -13
- package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/cjs/core/contributions/modules.d.ts +1 -2
- package/cjs/core/contributions/modules.js +2 -14
- package/cjs/core/contributions/modules.js.map +1 -1
- package/cjs/core/contributions/textMeasure/AtextMeasure.js +3 -10
- package/cjs/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
- package/cjs/core/contributions/textMeasure/textMeasure-contribution.js +3 -10
- package/cjs/core/contributions/textMeasure/textMeasure-contribution.js.map +1 -1
- package/cjs/core/contributions/window/base-contribution.js +3 -12
- package/cjs/core/contributions/window/base-contribution.js.map +1 -1
- package/cjs/core/global.d.ts +2 -2
- package/cjs/core/global.js +8 -20
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/graphic-utils.d.ts +2 -2
- package/cjs/core/graphic-utils.js +9 -23
- package/cjs/core/graphic-utils.js.map +1 -1
- package/cjs/core/layer-service.js +9 -18
- package/cjs/core/layer-service.js.map +1 -1
- package/cjs/core/layer.js +3 -3
- package/cjs/core/layer.js.map +1 -1
- package/cjs/core/stage.js +10 -8
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.js +7 -15
- package/cjs/core/window.js.map +1 -1
- package/cjs/env-check.js +3 -3
- package/cjs/env-check.js.map +1 -1
- package/cjs/graphic/arc.js +3 -3
- package/cjs/graphic/arc.js.map +1 -1
- package/cjs/graphic/arc3d.js +3 -3
- package/cjs/graphic/arc3d.js.map +1 -1
- package/cjs/graphic/area.js +3 -3
- package/cjs/graphic/area.js.map +1 -1
- package/cjs/graphic/circle.js +3 -3
- package/cjs/graphic/circle.js.map +1 -1
- package/cjs/graphic/glyph.js +1 -1
- package/cjs/graphic/glyph.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -2
- package/cjs/graphic/graphic-service/graphic-service.js +5 -18
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +1 -0
- package/cjs/graphic/graphic.js +12 -11
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.js +3 -4
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/image.js +3 -3
- package/cjs/graphic/image.js.map +1 -1
- package/cjs/graphic/line.js +3 -3
- package/cjs/graphic/line.js.map +1 -1
- package/cjs/graphic/path.js +3 -3
- package/cjs/graphic/path.js.map +1 -1
- package/cjs/graphic/polygon.js +3 -3
- package/cjs/graphic/polygon.js.map +1 -1
- package/cjs/graphic/pyramid3d.js +2 -3
- package/cjs/graphic/pyramid3d.js.map +1 -1
- package/cjs/graphic/rect.js +3 -3
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/graphic/richtext/utils.js +3 -3
- package/cjs/graphic/richtext/utils.js.map +1 -1
- package/cjs/graphic/richtext.js +4 -4
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/graphic/star.js +3 -3
- package/cjs/graphic/star.js.map +1 -1
- package/cjs/graphic/symbol.js +3 -3
- package/cjs/graphic/symbol.js.map +1 -1
- package/cjs/graphic/text.js +6 -7
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/graphic/tools.js +2 -2
- package/cjs/graphic/tools.js.map +1 -1
- package/cjs/graphic/wrap-text.js +2 -2
- package/cjs/graphic/wrap-text.js.map +1 -1
- package/cjs/index.d.ts +3 -22
- package/cjs/index.js +59 -27
- package/cjs/index.js.map +1 -1
- package/cjs/interface/canvas.d.ts +1 -1
- package/cjs/interface/canvas.js.map +1 -1
- package/cjs/modules.js +6 -17
- package/cjs/modules.js.map +1 -1
- package/cjs/picker/global-picker-service.js +4 -13
- package/cjs/picker/global-picker-service.js.map +1 -1
- package/cjs/picker/pick-interceptor.js +9 -19
- package/cjs/picker/pick-interceptor.js.map +1 -1
- package/cjs/picker/picker-service.d.ts +3 -3
- package/cjs/picker/picker-service.js +8 -21
- package/cjs/picker/picker-service.js.map +1 -1
- package/cjs/plugins/builtin-plugin/auto-refresh-plugin.js +5 -6
- package/cjs/plugins/builtin-plugin/auto-refresh-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/edit-module.js +3 -4
- package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +8 -8
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js +2 -2
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/react-attribute-plugin.js +3 -3
- package/cjs/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +8 -10
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/cjs/plugins/plugin-service.d.ts +2 -2
- package/cjs/plugins/plugin-service.js +7 -21
- package/cjs/plugins/plugin-service.js.map +1 -1
- package/cjs/register-modules.d.ts +9 -0
- package/cjs/register-modules.js +79 -0
- package/cjs/register-modules.js.map +1 -0
- package/cjs/render/contributions/render/arc-render.d.ts +2 -2
- package/cjs/render/contributions/render/arc-render.js +7 -21
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/arc3d-render.js +3 -10
- package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.d.ts +2 -2
- package/cjs/render/contributions/render/area-render.js +7 -21
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-render.js +1 -1
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/circle-render.d.ts +2 -2
- package/cjs/render/contributions/render/circle-render.js +7 -21
- package/cjs/render/contributions/render/circle-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +2 -2
- package/cjs/render/contributions/render/contributions/base-contribution-render.js +7 -20
- package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/image-contribution-render.d.ts +1 -2
- package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js +5 -13
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +3 -3
- package/cjs/render/contributions/render/draw-contribution.js +9 -22
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.js +3 -12
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/glyph-render.js +3 -10
- package/cjs/render/contributions/render/glyph-render.js.map +1 -1
- package/cjs/render/contributions/render/graphic-render.js +1 -10
- package/cjs/render/contributions/render/graphic-render.js.map +1 -1
- package/cjs/render/contributions/render/group-render.d.ts +2 -2
- package/cjs/render/contributions/render/group-render.js +7 -20
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/image-render.d.ts +2 -2
- package/cjs/render/contributions/render/image-render.js +7 -21
- package/cjs/render/contributions/render/image-render.js.map +1 -1
- package/cjs/render/contributions/render/incremental-area-render.js +3 -10
- package/cjs/render/contributions/render/incremental-area-render.js.map +1 -1
- package/cjs/render/contributions/render/incremental-draw-contribution.d.ts +3 -5
- package/cjs/render/contributions/render/incremental-draw-contribution.js +10 -23
- package/cjs/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/incremental-line-render.js +3 -10
- package/cjs/render/contributions/render/incremental-line-render.js.map +1 -1
- package/cjs/render/contributions/render/index.d.ts +12 -4
- package/cjs/render/contributions/render/index.js +11 -7
- package/cjs/render/contributions/render/index.js.map +1 -1
- package/cjs/render/contributions/render/line-render.js +3 -10
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/path-render.d.ts +2 -2
- package/cjs/render/contributions/render/path-render.js +7 -21
- package/cjs/render/contributions/render/path-render.js.map +1 -1
- package/cjs/render/contributions/render/polygon-render.d.ts +2 -2
- package/cjs/render/contributions/render/polygon-render.js +7 -21
- package/cjs/render/contributions/render/polygon-render.js.map +1 -1
- package/cjs/render/contributions/render/pyramid3d-render.js +3 -10
- package/cjs/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/cjs/render/contributions/render/rect-render.d.ts +2 -2
- package/cjs/render/contributions/render/rect-render.js +7 -21
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/rect3d-render.js +3 -10
- package/cjs/render/contributions/render/rect3d-render.js.map +1 -1
- package/cjs/render/contributions/render/richtext-render.js +3 -12
- package/cjs/render/contributions/render/richtext-render.js.map +1 -1
- package/cjs/render/contributions/render/star-render.d.ts +2 -2
- package/cjs/render/contributions/render/star-render.js +7 -21
- package/cjs/render/contributions/render/star-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol-render.d.ts +2 -2
- package/cjs/render/contributions/render/symbol-render.js +7 -21
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol.d.ts +2 -0
- package/cjs/render/contributions/render/symbol.js +3 -1
- package/cjs/render/contributions/render/symbol.js.map +1 -1
- package/cjs/render/contributions/render/text-render.d.ts +2 -2
- package/cjs/render/contributions/render/text-render.js +7 -21
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/cjs/render/render-service.js +2 -18
- package/cjs/render/render-service.js.map +1 -1
- package/cjs/resource-loader/loader.js +6 -6
- package/cjs/resource-loader/loader.js.map +1 -1
- package/dist/index.es.js +20349 -21178
- package/es/allocator/canvas-allocate.js +8 -6
- package/es/allocator/canvas-allocate.js.map +1 -1
- package/es/allocator/graphic-allocate.js +17 -17
- package/es/allocator/graphic-allocate.js.map +1 -1
- package/es/application.d.ts +13 -5
- package/es/application.js +31 -2
- package/es/application.js.map +1 -1
- package/es/canvas/conical-gradient.js +2 -2
- package/es/canvas/conical-gradient.js.map +1 -1
- package/es/canvas/contributions/base-canvas.js +2 -2
- package/es/canvas/contributions/base-canvas.js.map +1 -1
- package/es/canvas/empty-context.js +2 -16
- package/es/canvas/empty-context.js.map +1 -1
- package/es/canvas/util.js +7 -5
- package/es/canvas/util.js.map +1 -1
- package/es/common/diff.js +2 -1
- package/es/common/enums.js +1 -2
- package/es/common/performance-raf.js +2 -2
- package/es/common/performance-raf.js.map +1 -1
- package/es/common/registry/contribution-registry.d.ts +24 -0
- package/es/common/registry/contribution-registry.js +55 -0
- package/es/common/registry/contribution-registry.js.map +1 -0
- package/es/common/registry/index.d.ts +5 -0
- package/es/common/registry/index.js +4 -0
- package/es/common/registry/index.js.map +1 -0
- package/es/common/registry/service-registry.d.ts +16 -0
- package/es/common/registry/service-registry.js +51 -0
- package/es/common/registry/service-registry.js.map +1 -0
- package/es/common/registry/types.d.ts +1 -0
- package/es/common/registry/types.js +2 -0
- package/es/common/registry/types.js.map +1 -0
- package/es/common/simplify.js +2 -1
- package/es/common/sort.js +1 -2
- package/es/core/constants.js +1 -1
- package/es/core/contributions/env/base-contribution.js +3 -13
- package/es/core/contributions/env/base-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/canvas2d-contribution.js +4 -18
- package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/empty-contribution.js +4 -18
- package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -1
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js +4 -18
- package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
- package/es/core/contributions/modules.d.ts +1 -2
- package/es/core/contributions/modules.js +1 -9
- package/es/core/contributions/modules.js.map +1 -1
- package/es/core/contributions/textMeasure/AtextMeasure.js +2 -14
- package/es/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
- package/es/core/contributions/textMeasure/textMeasure-contribution.js +2 -14
- package/es/core/contributions/textMeasure/textMeasure-contribution.js.map +1 -1
- package/es/core/contributions/window/base-contribution.js +2 -16
- package/es/core/contributions/window/base-contribution.js.map +1 -1
- package/es/core/global.d.ts +2 -2
- package/es/core/global.js +9 -24
- package/es/core/global.js.map +1 -1
- package/es/core/graphic-utils.d.ts +2 -2
- package/es/core/graphic-utils.js +12 -34
- package/es/core/graphic-utils.js.map +1 -1
- package/es/core/layer-service.js +10 -23
- package/es/core/layer-service.js.map +1 -1
- package/es/core/layer.js +3 -3
- package/es/core/layer.js.map +1 -1
- package/es/core/stage.js +10 -10
- package/es/core/stage.js.map +1 -1
- package/es/core/window.js +9 -23
- package/es/core/window.js.map +1 -1
- package/es/env-check.js +3 -3
- package/es/env-check.js.map +1 -1
- package/es/graphic/arc.js +3 -3
- package/es/graphic/arc.js.map +1 -1
- package/es/graphic/arc3d.js +3 -4
- package/es/graphic/arc3d.js.map +1 -1
- package/es/graphic/area.js +3 -3
- package/es/graphic/area.js.map +1 -1
- package/es/graphic/circle.js +3 -3
- package/es/graphic/circle.js.map +1 -1
- package/es/graphic/glyph.js +1 -1
- package/es/graphic/glyph.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.d.ts +2 -2
- package/es/graphic/graphic-service/graphic-service.js +5 -21
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +1 -0
- package/es/graphic/graphic.js +14 -9
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.js +3 -3
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/image.js +3 -3
- package/es/graphic/image.js.map +1 -1
- package/es/graphic/line.js +3 -3
- package/es/graphic/line.js.map +1 -1
- package/es/graphic/path.js +3 -3
- package/es/graphic/path.js.map +1 -1
- package/es/graphic/polygon.js +3 -3
- package/es/graphic/polygon.js.map +1 -1
- package/es/graphic/pyramid3d.js +2 -2
- package/es/graphic/pyramid3d.js.map +1 -1
- package/es/graphic/rect.js +3 -3
- package/es/graphic/rect.js.map +1 -1
- package/es/graphic/richtext/utils.js +3 -3
- package/es/graphic/richtext/utils.js.map +1 -1
- package/es/graphic/richtext.js +4 -4
- package/es/graphic/richtext.js.map +1 -1
- package/es/graphic/star.js +3 -3
- package/es/graphic/star.js.map +1 -1
- package/es/graphic/symbol.js +3 -3
- package/es/graphic/symbol.js.map +1 -1
- package/es/graphic/text.js +6 -6
- package/es/graphic/text.js.map +1 -1
- package/es/graphic/tools.js +2 -2
- package/es/graphic/tools.js.map +1 -1
- package/es/graphic/wrap-text.js +2 -2
- package/es/graphic/wrap-text.js.map +1 -1
- package/es/index.d.ts +3 -22
- package/es/index.js +3 -41
- package/es/index.js.map +1 -1
- package/es/interface/canvas.d.ts +1 -1
- package/es/interface/canvas.js.map +1 -1
- package/es/modules.js +10 -36
- package/es/modules.js.map +1 -1
- package/es/picker/global-picker-service.js +4 -18
- package/es/picker/global-picker-service.js.map +1 -1
- package/es/picker/pick-interceptor.js +8 -32
- package/es/picker/pick-interceptor.js.map +1 -1
- package/es/picker/picker-service.d.ts +3 -3
- package/es/picker/picker-service.js +10 -25
- package/es/picker/picker-service.js.map +1 -1
- package/es/plugins/builtin-plugin/auto-refresh-plugin.js +6 -6
- package/es/plugins/builtin-plugin/auto-refresh-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/edit-module.js +3 -3
- package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +8 -8
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js +2 -2
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/react-attribute-plugin.js +3 -3
- package/es/plugins/builtin-plugin/react-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js +6 -6
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/es/plugins/plugin-service.d.ts +2 -2
- package/es/plugins/plugin-service.js +7 -26
- package/es/plugins/plugin-service.js.map +1 -1
- package/es/register-modules.d.ts +9 -0
- package/es/register-modules.js +117 -0
- package/es/register-modules.js.map +1 -0
- package/es/render/contributions/render/arc-render.d.ts +2 -2
- package/es/render/contributions/render/arc-render.js +8 -25
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/arc3d-render.js +2 -14
- package/es/render/contributions/render/arc3d-render.js.map +1 -1
- package/es/render/contributions/render/area-render.d.ts +2 -2
- package/es/render/contributions/render/area-render.js +8 -25
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-render.js +1 -1
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/circle-render.d.ts +2 -2
- package/es/render/contributions/render/circle-render.js +8 -25
- package/es/render/contributions/render/circle-render.js.map +1 -1
- package/es/render/contributions/render/contributions/base-contribution-render.d.ts +2 -2
- package/es/render/contributions/render/contributions/base-contribution-render.js +8 -24
- package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/image-contribution-render.d.ts +1 -2
- package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
- package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -20
- package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +3 -3
- package/es/render/contributions/render/draw-contribution.js +11 -29
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.js +2 -16
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/glyph-render.js +2 -14
- package/es/render/contributions/render/glyph-render.js.map +1 -1
- package/es/render/contributions/render/graphic-render.js +1 -13
- package/es/render/contributions/render/graphic-render.js.map +1 -1
- package/es/render/contributions/render/group-render.d.ts +2 -2
- package/es/render/contributions/render/group-render.js +9 -25
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/image-render.d.ts +2 -2
- package/es/render/contributions/render/image-render.js +8 -25
- package/es/render/contributions/render/image-render.js.map +1 -1
- package/es/render/contributions/render/incremental-area-render.js +2 -14
- package/es/render/contributions/render/incremental-area-render.js.map +1 -1
- package/es/render/contributions/render/incremental-draw-contribution.d.ts +3 -5
- package/es/render/contributions/render/incremental-draw-contribution.js +12 -30
- package/es/render/contributions/render/incremental-draw-contribution.js.map +1 -1
- package/es/render/contributions/render/incremental-line-render.js +2 -14
- package/es/render/contributions/render/incremental-line-render.js.map +1 -1
- package/es/render/contributions/render/index.d.ts +12 -4
- package/es/render/contributions/render/index.js +24 -8
- package/es/render/contributions/render/index.js.map +1 -1
- package/es/render/contributions/render/line-render.js +2 -14
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/path-render.d.ts +2 -2
- package/es/render/contributions/render/path-render.js +8 -25
- package/es/render/contributions/render/path-render.js.map +1 -1
- package/es/render/contributions/render/polygon-render.d.ts +2 -2
- package/es/render/contributions/render/polygon-render.js +8 -25
- package/es/render/contributions/render/polygon-render.js.map +1 -1
- package/es/render/contributions/render/pyramid3d-render.js +2 -14
- package/es/render/contributions/render/pyramid3d-render.js.map +1 -1
- package/es/render/contributions/render/rect-render.d.ts +2 -2
- package/es/render/contributions/render/rect-render.js +8 -25
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/rect3d-render.js +2 -14
- package/es/render/contributions/render/rect3d-render.js.map +1 -1
- package/es/render/contributions/render/richtext-render.js +2 -16
- package/es/render/contributions/render/richtext-render.js.map +1 -1
- package/es/render/contributions/render/star-render.d.ts +2 -2
- package/es/render/contributions/render/star-render.js +8 -25
- package/es/render/contributions/render/star-render.js.map +1 -1
- package/es/render/contributions/render/symbol-render.d.ts +2 -2
- package/es/render/contributions/render/symbol-render.js +8 -25
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/contributions/render/symbol.d.ts +2 -0
- package/es/render/contributions/render/symbol.js +4 -0
- package/es/render/contributions/render/symbol.js.map +1 -1
- package/es/render/contributions/render/text-render.d.ts +2 -2
- package/es/render/contributions/render/text-render.js +7 -24
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/es/render/render-service.js +2 -22
- package/es/render/render-service.js.map +1 -1
- package/es/resource-loader/loader.js +6 -6
- package/es/resource-loader/loader.js.map +1 -1
- package/package.json +1 -1
- package/cjs/common/contribution-provider.d.ts +0 -20
- package/cjs/common/contribution-provider.js +0 -46
- package/cjs/common/contribution-provider.js.map +0 -1
- package/cjs/common/inversify/annotation/inject.d.ts +0 -1
- package/cjs/common/inversify/annotation/inject.js +0 -10
- package/cjs/common/inversify/annotation/inject.js.map +0 -1
- package/cjs/common/inversify/annotation/inject_base.d.ts +0 -14
- package/cjs/common/inversify/annotation/inject_base.js +0 -39
- package/cjs/common/inversify/annotation/inject_base.js.map +0 -1
- package/cjs/common/inversify/annotation/injectable.d.ts +0 -1
- package/cjs/common/inversify/annotation/injectable.js +0 -46
- package/cjs/common/inversify/annotation/injectable.js.map +0 -1
- package/cjs/common/inversify/annotation/multi_inject.d.ts +0 -1
- package/cjs/common/inversify/annotation/multi_inject.js +0 -10
- package/cjs/common/inversify/annotation/multi_inject.js.map +0 -1
- package/cjs/common/inversify/annotation/named.d.ts +0 -1
- package/cjs/common/inversify/annotation/named.js +0 -14
- package/cjs/common/inversify/annotation/named.js.map +0 -1
- package/cjs/common/inversify/annotation/optional.d.ts +0 -2
- package/cjs/common/inversify/annotation/optional.js +0 -14
- package/cjs/common/inversify/annotation/optional.js.map +0 -1
- package/cjs/common/inversify/binding.d.ts +0 -18
- package/cjs/common/inversify/binding.js +0 -26
- package/cjs/common/inversify/binding.js.map +0 -1
- package/cjs/common/inversify/container.d.ts +0 -28
- package/cjs/common/inversify/container.js +0 -158
- package/cjs/common/inversify/container.js.map +0 -1
- package/cjs/common/inversify/cotainer-module.d.ts +0 -6
- package/cjs/common/inversify/cotainer-module.js +0 -16
- package/cjs/common/inversify/cotainer-module.js.map +0 -1
- package/cjs/common/inversify/index.d.ts +0 -7
- package/cjs/common/inversify/index.js +0 -75
- package/cjs/common/inversify/index.js.map +0 -1
- package/cjs/common/inversify/interfaces.d.ts +0 -218
- package/cjs/common/inversify/interfaces.js +0 -6
- package/cjs/common/inversify/interfaces.js.map +0 -1
- package/cjs/common/inversify/literal_types.d.ts +0 -5
- package/cjs/common/inversify/literal_types.js +0 -34
- package/cjs/common/inversify/literal_types.js.map +0 -1
- package/cjs/common/inversify/meta-data.d.ts +0 -6
- package/cjs/common/inversify/meta-data.js +0 -19
- package/cjs/common/inversify/meta-data.js.map +0 -1
- package/cjs/common/inversify/metadata_keys.d.ts +0 -12
- package/cjs/common/inversify/metadata_keys.js +0 -15
- package/cjs/common/inversify/metadata_keys.js.map +0 -1
- package/cjs/common/inversify/metadata_reader.d.ts +0 -6
- package/cjs/common/inversify/metadata_reader.js +0 -28
- package/cjs/common/inversify/metadata_reader.js.map +0 -1
- package/cjs/common/inversify/syntax/binding_in_syntax.d.ts +0 -10
- package/cjs/common/inversify/syntax/binding_in_syntax.js +0 -29
- package/cjs/common/inversify/syntax/binding_in_syntax.js.map +0 -1
- package/cjs/common/inversify/syntax/binding_to_syntax.d.ts +0 -12
- package/cjs/common/inversify/syntax/binding_to_syntax.js +0 -40
- package/cjs/common/inversify/syntax/binding_to_syntax.js.map +0 -1
- package/cjs/common/inversify/syntax/constraint_helpers.d.ts +0 -2
- package/cjs/common/inversify/syntax/constraint_helpers.js +0 -20
- package/cjs/common/inversify/syntax/constraint_helpers.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/decorator_utils.d.ts +0 -16
- package/cjs/common/inversify-lite/annotation/decorator_utils.js +0 -97
- package/cjs/common/inversify-lite/annotation/decorator_utils.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/inject.d.ts +0 -2
- package/cjs/common/inversify-lite/annotation/inject.js +0 -36
- package/cjs/common/inversify-lite/annotation/inject.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/inject_base.d.ts +0 -3
- package/cjs/common/inversify-lite/annotation/inject_base.js +0 -20
- package/cjs/common/inversify-lite/annotation/inject_base.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/injectable.d.ts +0 -2
- package/cjs/common/inversify-lite/annotation/injectable.js +0 -48
- package/cjs/common/inversify-lite/annotation/injectable.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/lazy_service_identifier.d.ts +0 -7
- package/cjs/common/inversify-lite/annotation/lazy_service_identifier.js +0 -17
- package/cjs/common/inversify-lite/annotation/lazy_service_identifier.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/multi_inject.d.ts +0 -2
- package/cjs/common/inversify-lite/annotation/multi_inject.js +0 -36
- package/cjs/common/inversify-lite/annotation/multi_inject.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/named.d.ts +0 -2
- package/cjs/common/inversify-lite/annotation/named.js +0 -39
- package/cjs/common/inversify-lite/annotation/named.js.map +0 -1
- package/cjs/common/inversify-lite/annotation/property_event_decorator.d.ts +0 -4
- package/cjs/common/inversify-lite/annotation/property_event_decorator.js +0 -24
- package/cjs/common/inversify-lite/annotation/property_event_decorator.js.map +0 -1
- package/cjs/common/inversify-lite/bindings/binding.d.ts +0 -20
- package/cjs/common/inversify-lite/bindings/binding.js +0 -27
- package/cjs/common/inversify-lite/bindings/binding.js.map +0 -1
- package/cjs/common/inversify-lite/bindings/binding_count.d.ts +0 -5
- package/cjs/common/inversify-lite/bindings/binding_count.js +0 -10
- package/cjs/common/inversify-lite/bindings/binding_count.js.map +0 -1
- package/cjs/common/inversify-lite/constants/error_msgs.d.ts +0 -32
- package/cjs/common/inversify-lite/constants/error_msgs.js +0 -50
- package/cjs/common/inversify-lite/constants/error_msgs.js.map +0 -1
- package/cjs/common/inversify-lite/constants/literal_types.d.ts +0 -5
- package/cjs/common/inversify-lite/constants/literal_types.js +0 -35
- package/cjs/common/inversify-lite/constants/literal_types.js.map +0 -1
- package/cjs/common/inversify-lite/constants/metadata_keys.d.ts +0 -13
- package/cjs/common/inversify-lite/constants/metadata_keys.js +0 -16
- package/cjs/common/inversify-lite/constants/metadata_keys.js.map +0 -1
- package/cjs/common/inversify-lite/container/container.d.ts +0 -46
- package/cjs/common/inversify-lite/container/container.js +0 -290
- package/cjs/common/inversify-lite/container/container.js.map +0 -1
- package/cjs/common/inversify-lite/container/container_module.d.ts +0 -11
- package/cjs/common/inversify-lite/container/container_module.js +0 -24
- package/cjs/common/inversify-lite/container/container_module.js.map +0 -1
- package/cjs/common/inversify-lite/container/lookup.d.ts +0 -16
- package/cjs/common/inversify-lite/container/lookup.js +0 -97
- package/cjs/common/inversify-lite/container/lookup.js.map +0 -1
- package/cjs/common/inversify-lite/index.d.ts +0 -1
- package/cjs/common/inversify-lite/index.js +0 -21
- package/cjs/common/inversify-lite/index.js.map +0 -1
- package/cjs/common/inversify-lite/interfaces/interfaces.d.ts +0 -237
- package/cjs/common/inversify-lite/interfaces/interfaces.js.map +0 -1
- package/cjs/common/inversify-lite/planning/context.d.ts +0 -11
- package/cjs/common/inversify-lite/planning/context.js +0 -22
- package/cjs/common/inversify-lite/planning/context.js.map +0 -1
- package/cjs/common/inversify-lite/planning/metadata.d.ts +0 -8
- package/cjs/common/inversify-lite/planning/metadata.js +0 -44
- package/cjs/common/inversify-lite/planning/metadata.js.map +0 -1
- package/cjs/common/inversify-lite/planning/metadata_reader.d.ts +0 -6
- package/cjs/common/inversify-lite/planning/metadata_reader.js +0 -51
- package/cjs/common/inversify-lite/planning/metadata_reader.js.map +0 -1
- package/cjs/common/inversify-lite/planning/plan.d.ts +0 -7
- package/cjs/common/inversify-lite/planning/plan.js +0 -14
- package/cjs/common/inversify-lite/planning/plan.js.map +0 -1
- package/cjs/common/inversify-lite/planning/planner.d.ts +0 -5
- package/cjs/common/inversify-lite/planning/planner.js +0 -132
- package/cjs/common/inversify-lite/planning/planner.js.map +0 -1
- package/cjs/common/inversify-lite/planning/queryable_string.d.ts +0 -9
- package/cjs/common/inversify-lite/planning/queryable_string.js +0 -23
- package/cjs/common/inversify-lite/planning/queryable_string.js.map +0 -1
- package/cjs/common/inversify-lite/planning/reflection_utils.d.ts +0 -5
- package/cjs/common/inversify-lite/planning/reflection_utils.js +0 -129
- package/cjs/common/inversify-lite/planning/reflection_utils.js.map +0 -1
- package/cjs/common/inversify-lite/planning/request.d.ts +0 -14
- package/cjs/common/inversify-lite/planning/request.js +0 -22
- package/cjs/common/inversify-lite/planning/request.js.map +0 -1
- package/cjs/common/inversify-lite/planning/target.d.ts +0 -23
- package/cjs/common/inversify-lite/planning/target.js +0 -81
- package/cjs/common/inversify-lite/planning/target.js.map +0 -1
- package/cjs/common/inversify-lite/resolution/instantiation.d.ts +0 -3
- package/cjs/common/inversify-lite/resolution/instantiation.js +0 -143
- package/cjs/common/inversify-lite/resolution/instantiation.js.map +0 -1
- package/cjs/common/inversify-lite/resolution/resolver.d.ts +0 -3
- package/cjs/common/inversify-lite/resolution/resolver.js +0 -74
- package/cjs/common/inversify-lite/resolution/resolver.js.map +0 -1
- package/cjs/common/inversify-lite/scope/scope.d.ts +0 -3
- package/cjs/common/inversify-lite/scope/scope.js +0 -56
- package/cjs/common/inversify-lite/scope/scope.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_in_syntax.d.ts +0 -9
- package/cjs/common/inversify-lite/syntax/binding_in_syntax.js +0 -25
- package/cjs/common/inversify-lite/syntax/binding_in_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_in_when_on_syntax.d.ts +0 -12
- package/cjs/common/inversify-lite/syntax/binding_in_when_on_syntax.js +0 -29
- package/cjs/common/inversify-lite/syntax/binding_in_when_on_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_on_syntax.d.ts +0 -6
- package/cjs/common/inversify-lite/syntax/binding_on_syntax.js +0 -14
- package/cjs/common/inversify-lite/syntax/binding_on_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_to_syntax.d.ts +0 -18
- package/cjs/common/inversify-lite/syntax/binding_to_syntax.js +0 -88
- package/cjs/common/inversify-lite/syntax/binding_to_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_when_on_syntax.d.ts +0 -8
- package/cjs/common/inversify-lite/syntax/binding_when_on_syntax.js +0 -19
- package/cjs/common/inversify-lite/syntax/binding_when_on_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/binding_when_syntax.d.ts +0 -7
- package/cjs/common/inversify-lite/syntax/binding_when_syntax.js +0 -20
- package/cjs/common/inversify-lite/syntax/binding_when_syntax.js.map +0 -1
- package/cjs/common/inversify-lite/syntax/constraint_helpers.d.ts +0 -3
- package/cjs/common/inversify-lite/syntax/constraint_helpers.js +0 -38
- package/cjs/common/inversify-lite/syntax/constraint_helpers.js.map +0 -1
- package/cjs/common/inversify-lite/utils/async.d.ts +0 -3
- package/cjs/common/inversify-lite/utils/async.js +0 -15
- package/cjs/common/inversify-lite/utils/async.js.map +0 -1
- package/cjs/common/inversify-lite/utils/binding_utils.d.ts +0 -4
- package/cjs/common/inversify-lite/utils/binding_utils.js +0 -94
- package/cjs/common/inversify-lite/utils/binding_utils.js.map +0 -1
- package/cjs/common/inversify-lite/utils/clonable.d.ts +0 -3
- package/cjs/common/inversify-lite/utils/clonable.js +0 -10
- package/cjs/common/inversify-lite/utils/clonable.js.map +0 -1
- package/cjs/common/inversify-lite/utils/exceptions.d.ts +0 -2
- package/cjs/common/inversify-lite/utils/exceptions.js +0 -43
- package/cjs/common/inversify-lite/utils/exceptions.js.map +0 -1
- package/cjs/common/inversify-lite/utils/factory_type.d.ts +0 -5
- package/cjs/common/inversify-lite/utils/factory_type.js +0 -11
- package/cjs/common/inversify-lite/utils/factory_type.js.map +0 -1
- package/cjs/common/inversify-lite/utils/id.d.ts +0 -2
- package/cjs/common/inversify-lite/utils/id.js +0 -14
- package/cjs/common/inversify-lite/utils/id.js.map +0 -1
- package/cjs/common/inversify-lite/utils/js.d.ts +0 -1
- package/cjs/common/inversify-lite/utils/js.js +0 -14
- package/cjs/common/inversify-lite/utils/js.js.map +0 -1
- package/cjs/common/inversify-lite/utils/serialization.d.ts +0 -10
- package/cjs/common/inversify-lite/utils/serialization.js +0 -99
- package/cjs/common/inversify-lite/utils/serialization.js.map +0 -1
- package/cjs/container.d.ts +0 -2
- package/cjs/container.js +0 -10
- package/cjs/container.js.map +0 -1
- package/cjs/core/contributions/env/modules.d.ts +0 -3
- package/cjs/core/contributions/env/modules.js +0 -12
- package/cjs/core/contributions/env/modules.js.map +0 -1
- package/cjs/core/contributions/layerHandler/modules.d.ts +0 -3
- package/cjs/core/contributions/layerHandler/modules.js +0 -12
- package/cjs/core/contributions/layerHandler/modules.js.map +0 -1
- package/cjs/core/contributions/textMeasure/modules.d.ts +0 -3
- package/cjs/core/contributions/textMeasure/modules.js +0 -13
- package/cjs/core/contributions/textMeasure/modules.js.map +0 -1
- package/cjs/core/core-modules.d.ts +0 -3
- package/cjs/core/core-modules.js +0 -15
- package/cjs/core/core-modules.js.map +0 -1
- package/cjs/core/global-module.d.ts +0 -1
- package/cjs/core/global-module.js +0 -3
- package/cjs/core/global-module.js.map +0 -1
- package/cjs/graphic/graphic-service/graphic-module.d.ts +0 -3
- package/cjs/graphic/graphic-service/graphic-module.js +0 -12
- package/cjs/graphic/graphic-service/graphic-module.js.map +0 -1
- package/cjs/picker/pick-modules.d.ts +0 -3
- package/cjs/picker/pick-modules.js +0 -22
- package/cjs/picker/pick-modules.js.map +0 -1
- package/cjs/plugins/plugin-modules.d.ts +0 -3
- package/cjs/plugins/plugin-modules.js +0 -12
- package/cjs/plugins/plugin-modules.js.map +0 -1
- package/cjs/render/contributions/modules.d.ts +0 -2
- package/cjs/render/contributions/modules.js +0 -20
- package/cjs/render/contributions/modules.js.map +0 -1
- package/cjs/render/contributions/render/arc-module.d.ts +0 -2
- package/cjs/render/contributions/render/arc-module.js +0 -17
- package/cjs/render/contributions/render/arc-module.js.map +0 -1
- package/cjs/render/contributions/render/arc3d-module.d.ts +0 -2
- package/cjs/render/contributions/render/arc3d-module.js +0 -15
- package/cjs/render/contributions/render/arc3d-module.js.map +0 -1
- package/cjs/render/contributions/render/area-module.d.ts +0 -2
- package/cjs/render/contributions/render/area-module.js +0 -18
- package/cjs/render/contributions/render/area-module.js.map +0 -1
- package/cjs/render/contributions/render/circle-module.d.ts +0 -2
- package/cjs/render/contributions/render/circle-module.js +0 -17
- package/cjs/render/contributions/render/circle-module.js.map +0 -1
- package/cjs/render/contributions/render/glyph-module.d.ts +0 -2
- package/cjs/render/contributions/render/glyph-module.js +0 -15
- package/cjs/render/contributions/render/glyph-module.js.map +0 -1
- package/cjs/render/contributions/render/image-module.d.ts +0 -2
- package/cjs/render/contributions/render/image-module.js +0 -16
- package/cjs/render/contributions/render/image-module.js.map +0 -1
- package/cjs/render/contributions/render/line-module.d.ts +0 -2
- package/cjs/render/contributions/render/line-module.js +0 -17
- package/cjs/render/contributions/render/line-module.js.map +0 -1
- package/cjs/render/contributions/render/module.d.ts +0 -3
- package/cjs/render/contributions/render/module.js +0 -23
- package/cjs/render/contributions/render/module.js.map +0 -1
- package/cjs/render/contributions/render/path-module.d.ts +0 -2
- package/cjs/render/contributions/render/path-module.js +0 -17
- package/cjs/render/contributions/render/path-module.js.map +0 -1
- package/cjs/render/contributions/render/polygon-module.d.ts +0 -2
- package/cjs/render/contributions/render/polygon-module.js +0 -16
- package/cjs/render/contributions/render/polygon-module.js.map +0 -1
- package/cjs/render/contributions/render/pyramid3d-module.d.ts +0 -2
- package/cjs/render/contributions/render/pyramid3d-module.js +0 -15
- package/cjs/render/contributions/render/pyramid3d-module.js.map +0 -1
- package/cjs/render/contributions/render/rect-module.d.ts +0 -2
- package/cjs/render/contributions/render/rect-module.js +0 -20
- package/cjs/render/contributions/render/rect-module.js.map +0 -1
- package/cjs/render/contributions/render/rect3d-module.d.ts +0 -2
- package/cjs/render/contributions/render/rect3d-module.js +0 -15
- package/cjs/render/contributions/render/rect3d-module.js.map +0 -1
- package/cjs/render/contributions/render/richtext-module.d.ts +0 -2
- package/cjs/render/contributions/render/richtext-module.js +0 -15
- package/cjs/render/contributions/render/richtext-module.js.map +0 -1
- package/cjs/render/contributions/render/star-module.d.ts +0 -2
- package/cjs/render/contributions/render/star-module.js +0 -15
- package/cjs/render/contributions/render/star-module.js.map +0 -1
- package/cjs/render/contributions/render/symbol-module.d.ts +0 -2
- package/cjs/render/contributions/render/symbol-module.js +0 -17
- package/cjs/render/contributions/render/symbol-module.js.map +0 -1
- package/cjs/render/contributions/render/text-module.d.ts +0 -2
- package/cjs/render/contributions/render/text-module.js +0 -16
- package/cjs/render/contributions/render/text-module.js.map +0 -1
- package/cjs/render/render-modules.d.ts +0 -3
- package/cjs/render/render-modules.js +0 -12
- package/cjs/render/render-modules.js.map +0 -1
- package/es/common/contribution-provider.d.ts +0 -20
- package/es/common/contribution-provider.js +0 -39
- package/es/common/contribution-provider.js.map +0 -1
- package/es/common/inversify/annotation/inject.d.ts +0 -1
- package/es/common/inversify/annotation/inject.js +0 -6
- package/es/common/inversify/annotation/inject.js.map +0 -1
- package/es/common/inversify/annotation/inject_base.d.ts +0 -14
- package/es/common/inversify/annotation/inject_base.js +0 -29
- package/es/common/inversify/annotation/inject_base.js.map +0 -1
- package/es/common/inversify/annotation/injectable.d.ts +0 -1
- package/es/common/inversify/annotation/injectable.js +0 -10
- package/es/common/inversify/annotation/injectable.js.map +0 -1
- package/es/common/inversify/annotation/multi_inject.d.ts +0 -1
- package/es/common/inversify/annotation/multi_inject.js +0 -6
- package/es/common/inversify/annotation/multi_inject.js.map +0 -1
- package/es/common/inversify/annotation/named.d.ts +0 -1
- package/es/common/inversify/annotation/named.js +0 -10
- package/es/common/inversify/annotation/named.js.map +0 -1
- package/es/common/inversify/annotation/optional.d.ts +0 -2
- package/es/common/inversify/annotation/optional.js +0 -12
- package/es/common/inversify/annotation/optional.js.map +0 -1
- package/es/common/inversify/binding.d.ts +0 -18
- package/es/common/inversify/binding.js +0 -22
- package/es/common/inversify/binding.js.map +0 -1
- package/es/common/inversify/container.d.ts +0 -28
- package/es/common/inversify/container.js +0 -158
- package/es/common/inversify/container.js.map +0 -1
- package/es/common/inversify/cotainer-module.d.ts +0 -6
- package/es/common/inversify/cotainer-module.js +0 -8
- package/es/common/inversify/cotainer-module.js.map +0 -1
- package/es/common/inversify/index.d.ts +0 -7
- package/es/common/inversify/index.js +0 -14
- package/es/common/inversify/index.js.map +0 -1
- package/es/common/inversify/interfaces.d.ts +0 -218
- package/es/common/inversify/interfaces.js +0 -2
- package/es/common/inversify/interfaces.js.map +0 -1
- package/es/common/inversify/literal_types.d.ts +0 -5
- package/es/common/inversify/literal_types.js +0 -20
- package/es/common/inversify/literal_types.js.map +0 -1
- package/es/common/inversify/meta-data.d.ts +0 -6
- package/es/common/inversify/meta-data.js +0 -11
- package/es/common/inversify/meta-data.js.map +0 -1
- package/es/common/inversify/metadata_keys.d.ts +0 -12
- package/es/common/inversify/metadata_keys.js +0 -28
- package/es/common/inversify/metadata_keys.js.map +0 -1
- package/es/common/inversify/metadata_reader.d.ts +0 -6
- package/es/common/inversify/metadata_reader.js +0 -18
- package/es/common/inversify/metadata_reader.js.map +0 -1
- package/es/common/inversify/syntax/binding_in_syntax.d.ts +0 -10
- package/es/common/inversify/syntax/binding_in_syntax.js +0 -24
- package/es/common/inversify/syntax/binding_in_syntax.js.map +0 -1
- package/es/common/inversify/syntax/binding_to_syntax.d.ts +0 -12
- package/es/common/inversify/syntax/binding_to_syntax.js +0 -36
- package/es/common/inversify/syntax/binding_to_syntax.js.map +0 -1
- package/es/common/inversify/syntax/constraint_helpers.d.ts +0 -2
- package/es/common/inversify/syntax/constraint_helpers.js +0 -18
- package/es/common/inversify/syntax/constraint_helpers.js.map +0 -1
- package/es/common/inversify-lite/annotation/decorator_utils.d.ts +0 -16
- package/es/common/inversify-lite/annotation/decorator_utils.js +0 -67
- package/es/common/inversify-lite/annotation/decorator_utils.js.map +0 -1
- package/es/common/inversify-lite/annotation/inject.d.ts +0 -2
- package/es/common/inversify-lite/annotation/inject.js +0 -8
- package/es/common/inversify-lite/annotation/inject.js.map +0 -1
- package/es/common/inversify-lite/annotation/inject_base.d.ts +0 -3
- package/es/common/inversify-lite/annotation/inject_base.js +0 -16
- package/es/common/inversify-lite/annotation/inject_base.js.map +0 -1
- package/es/common/inversify-lite/annotation/injectable.d.ts +0 -2
- package/es/common/inversify-lite/annotation/injectable.js +0 -16
- package/es/common/inversify-lite/annotation/injectable.js.map +0 -1
- package/es/common/inversify-lite/annotation/lazy_service_identifier.d.ts +0 -7
- package/es/common/inversify-lite/annotation/lazy_service_identifier.js +0 -9
- package/es/common/inversify-lite/annotation/lazy_service_identifier.js.map +0 -1
- package/es/common/inversify-lite/annotation/multi_inject.d.ts +0 -2
- package/es/common/inversify-lite/annotation/multi_inject.js +0 -8
- package/es/common/inversify-lite/annotation/multi_inject.js.map +0 -1
- package/es/common/inversify-lite/annotation/named.d.ts +0 -2
- package/es/common/inversify-lite/annotation/named.js +0 -12
- package/es/common/inversify-lite/annotation/named.js.map +0 -1
- package/es/common/inversify-lite/annotation/property_event_decorator.d.ts +0 -4
- package/es/common/inversify-lite/annotation/property_event_decorator.js +0 -14
- package/es/common/inversify-lite/annotation/property_event_decorator.js.map +0 -1
- package/es/common/inversify-lite/bindings/binding.d.ts +0 -20
- package/es/common/inversify-lite/bindings/binding.js +0 -23
- package/es/common/inversify-lite/bindings/binding.js.map +0 -1
- package/es/common/inversify-lite/bindings/binding_count.d.ts +0 -5
- package/es/common/inversify-lite/bindings/binding_count.js +0 -6
- package/es/common/inversify-lite/bindings/binding_count.js.map +0 -1
- package/es/common/inversify-lite/constants/error_msgs.d.ts +0 -32
- package/es/common/inversify-lite/constants/error_msgs.js +0 -64
- package/es/common/inversify-lite/constants/error_msgs.js.map +0 -1
- package/es/common/inversify-lite/constants/literal_types.d.ts +0 -5
- package/es/common/inversify-lite/constants/literal_types.js +0 -21
- package/es/common/inversify-lite/constants/literal_types.js.map +0 -1
- package/es/common/inversify-lite/constants/metadata_keys.d.ts +0 -13
- package/es/common/inversify-lite/constants/metadata_keys.js +0 -30
- package/es/common/inversify-lite/constants/metadata_keys.js.map +0 -1
- package/es/common/inversify-lite/container/container.d.ts +0 -46
- package/es/common/inversify-lite/container/container.js +0 -279
- package/es/common/inversify-lite/container/container.js.map +0 -1
- package/es/common/inversify-lite/container/container_module.d.ts +0 -11
- package/es/common/inversify-lite/container/container_module.js +0 -14
- package/es/common/inversify-lite/container/container_module.js.map +0 -1
- package/es/common/inversify-lite/container/lookup.d.ts +0 -16
- package/es/common/inversify-lite/container/lookup.js +0 -68
- package/es/common/inversify-lite/container/lookup.js.map +0 -1
- package/es/common/inversify-lite/index.d.ts +0 -1
- package/es/common/inversify-lite/index.js +0 -2
- package/es/common/inversify-lite/index.js.map +0 -1
- package/es/common/inversify-lite/interfaces/interfaces.d.ts +0 -237
- package/es/common/inversify-lite/interfaces/interfaces.js +0 -2
- package/es/common/inversify-lite/interfaces/interfaces.js.map +0 -1
- package/es/common/inversify-lite/planning/context.d.ts +0 -11
- package/es/common/inversify-lite/planning/context.js +0 -16
- package/es/common/inversify-lite/planning/context.js.map +0 -1
- package/es/common/inversify-lite/planning/metadata.d.ts +0 -8
- package/es/common/inversify-lite/planning/metadata.js +0 -13
- package/es/common/inversify-lite/planning/metadata.js.map +0 -1
- package/es/common/inversify-lite/planning/metadata_reader.d.ts +0 -6
- package/es/common/inversify-lite/planning/metadata_reader.js +0 -18
- package/es/common/inversify-lite/planning/metadata_reader.js.map +0 -1
- package/es/common/inversify-lite/planning/plan.d.ts +0 -7
- package/es/common/inversify-lite/planning/plan.js +0 -8
- package/es/common/inversify-lite/planning/plan.js.map +0 -1
- package/es/common/inversify-lite/planning/planner.d.ts +0 -5
- package/es/common/inversify-lite/planning/planner.js +0 -120
- package/es/common/inversify-lite/planning/planner.js.map +0 -1
- package/es/common/inversify-lite/planning/queryable_string.d.ts +0 -9
- package/es/common/inversify-lite/planning/queryable_string.js +0 -17
- package/es/common/inversify-lite/planning/queryable_string.js.map +0 -1
- package/es/common/inversify-lite/planning/reflection_utils.d.ts +0 -5
- package/es/common/inversify-lite/planning/reflection_utils.js +0 -99
- package/es/common/inversify-lite/planning/reflection_utils.js.map +0 -1
- package/es/common/inversify-lite/planning/request.d.ts +0 -14
- package/es/common/inversify-lite/planning/request.js +0 -16
- package/es/common/inversify-lite/planning/request.js.map +0 -1
- package/es/common/inversify-lite/planning/target.d.ts +0 -23
- package/es/common/inversify-lite/planning/target.js +0 -58
- package/es/common/inversify-lite/planning/target.js.map +0 -1
- package/es/common/inversify-lite/resolution/instantiation.d.ts +0 -3
- package/es/common/inversify-lite/resolution/instantiation.js +0 -117
- package/es/common/inversify-lite/resolution/instantiation.js.map +0 -1
- package/es/common/inversify-lite/resolution/resolver.d.ts +0 -3
- package/es/common/inversify-lite/resolution/resolver.js +0 -55
- package/es/common/inversify-lite/resolution/resolver.js.map +0 -1
- package/es/common/inversify-lite/scope/scope.d.ts +0 -3
- package/es/common/inversify-lite/scope/scope.js +0 -50
- package/es/common/inversify-lite/scope/scope.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_in_syntax.d.ts +0 -9
- package/es/common/inversify-lite/syntax/binding_in_syntax.js +0 -21
- package/es/common/inversify-lite/syntax/binding_in_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_in_when_on_syntax.d.ts +0 -12
- package/es/common/inversify-lite/syntax/binding_in_when_on_syntax.js +0 -25
- package/es/common/inversify-lite/syntax/binding_in_when_on_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_on_syntax.d.ts +0 -6
- package/es/common/inversify-lite/syntax/binding_on_syntax.js +0 -8
- package/es/common/inversify-lite/syntax/binding_on_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_to_syntax.d.ts +0 -18
- package/es/common/inversify-lite/syntax/binding_to_syntax.js +0 -63
- package/es/common/inversify-lite/syntax/binding_to_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_when_on_syntax.d.ts +0 -8
- package/es/common/inversify-lite/syntax/binding_when_on_syntax.js +0 -13
- package/es/common/inversify-lite/syntax/binding_when_on_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/binding_when_syntax.d.ts +0 -7
- package/es/common/inversify-lite/syntax/binding_when_syntax.js +0 -15
- package/es/common/inversify-lite/syntax/binding_when_syntax.js.map +0 -1
- package/es/common/inversify-lite/syntax/constraint_helpers.d.ts +0 -3
- package/es/common/inversify-lite/syntax/constraint_helpers.js +0 -11
- package/es/common/inversify-lite/syntax/constraint_helpers.js.map +0 -1
- package/es/common/inversify-lite/utils/async.d.ts +0 -3
- package/es/common/inversify-lite/utils/async.js +0 -10
- package/es/common/inversify-lite/utils/async.js.map +0 -1
- package/es/common/inversify-lite/utils/binding_utils.d.ts +0 -4
- package/es/common/inversify-lite/utils/binding_utils.js +0 -65
- package/es/common/inversify-lite/utils/binding_utils.js.map +0 -1
- package/es/common/inversify-lite/utils/clonable.d.ts +0 -3
- package/es/common/inversify-lite/utils/clonable.js +0 -6
- package/es/common/inversify-lite/utils/clonable.js.map +0 -1
- package/es/common/inversify-lite/utils/exceptions.d.ts +0 -2
- package/es/common/inversify-lite/utils/exceptions.js +0 -8
- package/es/common/inversify-lite/utils/exceptions.js.map +0 -1
- package/es/common/inversify-lite/utils/factory_type.d.ts +0 -5
- package/es/common/inversify-lite/utils/factory_type.js +0 -7
- package/es/common/inversify-lite/utils/factory_type.js.map +0 -1
- package/es/common/inversify-lite/utils/id.d.ts +0 -2
- package/es/common/inversify-lite/utils/id.js +0 -8
- package/es/common/inversify-lite/utils/id.js.map +0 -1
- package/es/common/inversify-lite/utils/js.d.ts +0 -1
- package/es/common/inversify-lite/utils/js.js +0 -8
- package/es/common/inversify-lite/utils/js.js.map +0 -1
- package/es/common/inversify-lite/utils/serialization.d.ts +0 -10
- package/es/common/inversify-lite/utils/serialization.js +0 -66
- package/es/common/inversify-lite/utils/serialization.js.map +0 -1
- package/es/container.d.ts +0 -2
- package/es/container.js +0 -4
- package/es/container.js.map +0 -1
- package/es/core/contributions/env/modules.d.ts +0 -3
- package/es/core/contributions/env/modules.js +0 -10
- package/es/core/contributions/env/modules.js.map +0 -1
- package/es/core/contributions/layerHandler/modules.d.ts +0 -3
- package/es/core/contributions/layerHandler/modules.js +0 -10
- package/es/core/contributions/layerHandler/modules.js.map +0 -1
- package/es/core/contributions/textMeasure/modules.d.ts +0 -3
- package/es/core/contributions/textMeasure/modules.js +0 -11
- package/es/core/contributions/textMeasure/modules.js.map +0 -1
- package/es/core/core-modules.d.ts +0 -3
- package/es/core/core-modules.js +0 -20
- package/es/core/core-modules.js.map +0 -1
- package/es/core/global-module.d.ts +0 -1
- package/es/core/global-module.js +0 -3
- package/es/core/global-module.js.map +0 -1
- package/es/graphic/graphic-service/graphic-module.d.ts +0 -3
- package/es/graphic/graphic-service/graphic-module.js +0 -12
- package/es/graphic/graphic-service/graphic-module.js.map +0 -1
- package/es/picker/pick-modules.d.ts +0 -3
- package/es/picker/pick-modules.js +0 -18
- package/es/picker/pick-modules.js.map +0 -1
- package/es/plugins/plugin-modules.d.ts +0 -3
- package/es/plugins/plugin-modules.js +0 -14
- package/es/plugins/plugin-modules.js.map +0 -1
- package/es/render/contributions/modules.d.ts +0 -2
- package/es/render/contributions/modules.js +0 -6
- package/es/render/contributions/modules.js.map +0 -1
- package/es/render/contributions/render/arc-module.d.ts +0 -2
- package/es/render/contributions/render/arc-module.js +0 -21
- package/es/render/contributions/render/arc-module.js.map +0 -1
- package/es/render/contributions/render/arc3d-module.d.ts +0 -2
- package/es/render/contributions/render/arc3d-module.js +0 -13
- package/es/render/contributions/render/arc3d-module.js.map +0 -1
- package/es/render/contributions/render/area-module.d.ts +0 -2
- package/es/render/contributions/render/area-module.js +0 -23
- package/es/render/contributions/render/area-module.js.map +0 -1
- package/es/render/contributions/render/circle-module.d.ts +0 -2
- package/es/render/contributions/render/circle-module.js +0 -21
- package/es/render/contributions/render/circle-module.js.map +0 -1
- package/es/render/contributions/render/glyph-module.d.ts +0 -2
- package/es/render/contributions/render/glyph-module.js +0 -13
- package/es/render/contributions/render/glyph-module.js.map +0 -1
- package/es/render/contributions/render/image-module.d.ts +0 -2
- package/es/render/contributions/render/image-module.js +0 -20
- package/es/render/contributions/render/image-module.js.map +0 -1
- package/es/render/contributions/render/line-module.d.ts +0 -2
- package/es/render/contributions/render/line-module.js +0 -16
- package/es/render/contributions/render/line-module.js.map +0 -1
- package/es/render/contributions/render/module.d.ts +0 -3
- package/es/render/contributions/render/module.js +0 -28
- package/es/render/contributions/render/module.js.map +0 -1
- package/es/render/contributions/render/path-module.d.ts +0 -2
- package/es/render/contributions/render/path-module.js +0 -21
- package/es/render/contributions/render/path-module.js.map +0 -1
- package/es/render/contributions/render/polygon-module.d.ts +0 -2
- package/es/render/contributions/render/polygon-module.js +0 -20
- package/es/render/contributions/render/polygon-module.js.map +0 -1
- package/es/render/contributions/render/pyramid3d-module.d.ts +0 -2
- package/es/render/contributions/render/pyramid3d-module.js +0 -13
- package/es/render/contributions/render/pyramid3d-module.js.map +0 -1
- package/es/render/contributions/render/rect-module.d.ts +0 -2
- package/es/render/contributions/render/rect-module.js +0 -23
- package/es/render/contributions/render/rect-module.js.map +0 -1
- package/es/render/contributions/render/rect3d-module.d.ts +0 -2
- package/es/render/contributions/render/rect3d-module.js +0 -13
- package/es/render/contributions/render/rect3d-module.js.map +0 -1
- package/es/render/contributions/render/richtext-module.d.ts +0 -2
- package/es/render/contributions/render/richtext-module.js +0 -13
- package/es/render/contributions/render/richtext-module.js.map +0 -1
- package/es/render/contributions/render/star-module.d.ts +0 -2
- package/es/render/contributions/render/star-module.js +0 -13
- package/es/render/contributions/render/star-module.js.map +0 -1
- package/es/render/contributions/render/symbol-module.d.ts +0 -2
- package/es/render/contributions/render/symbol-module.js +0 -21
- package/es/render/contributions/render/symbol-module.js.map +0 -1
- package/es/render/contributions/render/text-module.d.ts +0 -2
- package/es/render/contributions/render/text-module.js +0 -20
- package/es/render/contributions/render/text-module.js.map +0 -1
- package/es/render/render-modules.d.ts +0 -3
- package/es/render/render-modules.js +0 -10
- package/es/render/render-modules.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/builtin-plugin/react-attribute-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/plugins/builtin-plugin/react-attribute-plugin.ts"],"names":[],"mappings":"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","file":"react-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService } from '../../interface';\nimport { vglobal } from '../../modules';\nimport { HtmlAttributePlugin } from './html-attribute-plugin';\nimport { isNil } from '@visactor/vutils';\nimport { Factory } from '../../factory';\n\nexport class ReactAttributePlugin extends HtmlAttributePlugin implements IPlugin {\n name: 'ReactAttributePlugin' = 'ReactAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n declare pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n htmlMap: Record<\n string,\n {\n root?: any;\n unmount?: () => void;\n wrapContainer: HTMLElement;\n nativeContainer: HTMLElement;\n container: string | HTMLElement | null;\n renderId: number;\n }\n > = {};\n\n removeElement(id: string) {\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { root, wrapContainer, unmount } = this.htmlMap[id];\n\n if (root) {\n const raf = vglobal.getRequestAnimationFrame();\n raf(() => {\n root.unmount();\n });\n } else if (unmount) {\n unmount();\n }\n\n wrapContainer && vglobal.removeDom(wrapContainer);\n\n this.htmlMap[id] = null;\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { react } = graphic.attribute;\n if (!react) {\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const ReactDOM = stage.params.ReactDOM;\n const { element, container } = react;\n if (!(element && ReactDOM && (ReactDOM.createRoot || ReactDOM.render))) {\n return;\n }\n const id = isNil(react.id) ? `${graphic.id ?? graphic._uid}_react` : react.id;\n\n if (this.htmlMap && this.htmlMap[id] && container && container !== this.htmlMap[id].container) {\n this.removeElement(id);\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n // createa a wrapper contianer to be the root of react element\n const { wrapContainer, nativeContainer } = this.getWrapContainer(stage, container);\n\n if (wrapContainer) {\n if (!this.htmlMap) {\n this.htmlMap = {};\n }\n if (ReactDOM.createRoot) {\n const root = ReactDOM.createRoot(wrapContainer);\n root.render(element);\n\n this.htmlMap[id] = { root, wrapContainer, nativeContainer, container, renderId: this.renderId };\n } else {\n ReactDOM.render(element, wrapContainer);\n\n this.htmlMap[id] = {\n wrapContainer,\n nativeContainer,\n container,\n renderId: this.renderId,\n unmount: () => {\n ReactDOM.unmountComponentAtNode(wrapContainer);\n }\n };\n }\n }\n } else {\n // update react element\n if (ReactDOM.createRoot) {\n this.htmlMap[id].root.render(element);\n } else {\n ReactDOM.render(element, this.htmlMap[id].wrapContainer);\n }\n }\n\n if (!this.htmlMap || !this.htmlMap[id]) {\n return;\n }\n\n const { wrapContainer, nativeContainer } = this.htmlMap[id];\n\n this.updateStyleOfWrapContainer(graphic, stage, wrapContainer, nativeContainer, react);\n this.htmlMap[id].renderId = this.renderId;\n }\n}\n\nexport const registerReactAttributePlugin = () => {\n Factory.registerPlugin('ReactAttributePlugin', ReactAttributePlugin);\n};\n"]}
|
|
@@ -6,7 +6,7 @@ import { createGroup, createLine, createRect, createRichText, getRichTextBounds,
|
|
|
6
6
|
|
|
7
7
|
import { EditModule, findConfigIndexByCursorIdx, getDefaultCharacterConfig } from "./edit-module";
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { vglobal } from "../../modules";
|
|
10
10
|
|
|
11
11
|
import { getWordStartEndIdx } from "../../graphic/richtext/utils";
|
|
12
12
|
|
|
@@ -160,14 +160,14 @@ export class RichTextEditPlugin {
|
|
|
160
160
|
capture: !0
|
|
161
161
|
}), context.stage.on("dblclick", this.handleDBLClick, {
|
|
162
162
|
capture: !0
|
|
163
|
-
}),
|
|
163
|
+
}), vglobal.addEventListener("keydown", this.handleKeyDown), this.editModule.onInput(this.handleInput),
|
|
164
164
|
this.editModule.onChange(this.handleChange), this.editModule.onFocusOut(this.handleFocusOut),
|
|
165
165
|
this.timeline = this.createTimeline && this.createTimeline(), this.ticker = this.createTicker && this.createTicker(context.stage);
|
|
166
166
|
}
|
|
167
167
|
copyToClipboard(e) {
|
|
168
|
-
if (
|
|
168
|
+
if (vglobal.isMacOS() && e.metaKey && "c" === e.key || !vglobal.isMacOS() && e.ctrlKey && "c" === e.key) {
|
|
169
169
|
const text = this.getSelection().getSelectionPureText();
|
|
170
|
-
return
|
|
170
|
+
return vglobal.copyToClipBoard(text), e.preventDefault(), !0;
|
|
171
171
|
}
|
|
172
172
|
return !1;
|
|
173
173
|
}
|
|
@@ -201,7 +201,7 @@ export class RichTextEditPlugin {
|
|
|
201
201
|
this.selectionRange(-.1, totalCursorCount + .1);
|
|
202
202
|
}
|
|
203
203
|
fullSelectionKeyHandler(e) {
|
|
204
|
-
return !!(
|
|
204
|
+
return !!(vglobal.isMacOS() && e.metaKey && "a" === e.key || !vglobal.isMacOS() && e.ctrlKey && "a" === e.key) && (this.fullSelection(),
|
|
205
205
|
e.preventDefault(), !0);
|
|
206
206
|
}
|
|
207
207
|
directKeyHandler(e) {
|
|
@@ -315,7 +315,7 @@ export class RichTextEditPlugin {
|
|
|
315
315
|
capture: !0
|
|
316
316
|
}), context.stage.off("dblclick", this.handleDBLClick, {
|
|
317
317
|
capture: !0
|
|
318
|
-
}),
|
|
318
|
+
}), vglobal.addEventListener("keydown", this.handleKeyDown);
|
|
319
319
|
}
|
|
320
320
|
stopPropagation(e) {
|
|
321
321
|
e.stopPropagation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/builtin-plugin/richtext-edit-plugin.ts"],"names":[],"mappings":"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","file":"richtext-edit-plugin.js","sourcesContent":["import type { IAABBBounds, IPointLike } from '@visactor/vutils';\nimport { isObject, isString, max, merge } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport {\n createGroup,\n createLine,\n createRect,\n createRichText,\n createText,\n getRichTextBounds,\n Graphic,\n RichText\n} from '../../graphic';\nimport type {\n IGraphic,\n IGroup,\n ILine,\n IPlugin,\n IPluginService,\n IRect,\n IRichText,\n IRichTextCharacter,\n IRichTextFrame,\n IRichTextIcon,\n IRichTextLine,\n IRichTextParagraph,\n IRichTextParagraphCharacter,\n ITicker,\n ITimeline\n} from '../../interface';\nimport { EditModule, findConfigIndexByCursorIdx, getDefaultCharacterConfig } from './edit-module';\nimport { application } from '../../application';\nimport { getWordStartEndIdx } from '../../graphic/richtext/utils';\n// import { testLetter, testLetter2 } from '../../graphic/richtext/utils';\n\ntype UpdateType =\n | 'input'\n | 'change'\n | 'onfocus'\n | 'beforeOnfocus'\n | 'defocus'\n | 'beforeDefocus'\n | 'selection'\n | 'dispatch';\n\nclass Selection {\n selectionStartCursorIdx: number;\n curCursorIdx: number;\n rt: IRichText;\n\n constructor(selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText) {\n this.curCursorIdx = curCursorIdx;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n this.rt = rt;\n }\n\n isEmpty(): boolean {\n return this.selectionStartCursorIdx === this.curCursorIdx;\n }\n\n getSelectionPureText(): string {\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return '';\n }\n const config = this.rt.attribute.textConfig as any;\n const startIdx = findConfigIndexByCursorIdx(config, Math.ceil(minCursorIdx));\n const endIdx = findConfigIndexByCursorIdx(config, Math.floor(maxCursorIdx));\n let str = '';\n for (let i = startIdx; i <= endIdx; i++) {\n str += config[i].text;\n }\n return str;\n }\n\n hasFormat(key: string): boolean {\n return this.getFormat(key) != null;\n }\n\n /**\n * 获取第idx中key的值\n * @param key\n * @param cursorIdx\n */\n _getFormat(key: string, cursorIdx: number) {\n if (!this.rt) {\n return null;\n }\n let idx = Math.round(cursorIdx);\n const config = this.rt.attribute.textConfig as any;\n if (!config.length) {\n return null;\n }\n for (let i = 0; i < config.length; i++) {\n if (config[i].text !== '\\n') {\n idx--;\n if (idx < 0) {\n return config[i][key];\n }\n }\n }\n return config[Math.min(idx, config.length - 1)][key] ?? (this.rt.attribute as any)[key];\n }\n getFormat(key: string, supportOutAttr: boolean = false): any {\n return this.getAllFormat(key, supportOutAttr)[0];\n }\n\n getAllFormat(key: string, supportOutAttr: boolean = false): any {\n const valSet = new Set();\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return supportOutAttr\n ? [this._getFormat(key, minCursorIdx) ?? (this.rt?.attribute as any)[key]]\n : [this._getFormat(key, minCursorIdx)];\n }\n for (let i = Math.ceil(minCursorIdx); i <= Math.floor(maxCursorIdx); i++) {\n const val = supportOutAttr\n ? (this._getFormat(key, i) ?? (this.rt?.attribute as any)[key])\n : this._getFormat(key, i);\n val && valSet.add(val);\n }\n return Array.from(valSet.values());\n }\n}\n\nexport const FORMAT_TEXT_COMMAND = 'FORMAT_TEXT_COMMAND';\nexport const FORMAT_ALL_TEXT_COMMAND = 'FORMAT_ALL_TEXT_COMMAND';\nexport const FORMAT_ELEMENT_COMMAND = 'FORMAT_ELEMENT_COMMAND';\nexport class RichTextEditPlugin implements IPlugin {\n name: 'RichTextEditPlugin' = 'RichTextEditPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n // 是否正在编辑\n editing: boolean = false;\n // 是否正在聚焦中\n focusing: boolean = false;\n // 鼠标是否按下,判断是否展示selection\n pointerDown: boolean = false;\n\n // selection组件\n editLine: ILine;\n editBg: IGroup;\n shadowPlaceHolder: IRichText;\n shadowBounds: IRect;\n\n ticker?: ITicker;\n timeline?: ITimeline;\n\n currRt: IRichText;\n\n // 当前的cursor信息\n // 0.1为第一个字符右侧, -0.1为第一个字符左侧\n // 1.1为第二个字符右侧,0.9为第二个字符左侧\n curCursorIdx: number;\n selectionStartCursorIdx: number;\n startCursorPos?: IPointLike;\n\n editModule: EditModule;\n\n protected commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;\n protected updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin, params?: any) => void>;\n\n // 富文本外部有align或者baseline的时候,需要对光标做偏移\n declare protected deltaX: number;\n declare protected deltaY: number;\n\n // static splitText(text: string) {\n // // 😁这种emoji长度算两个,所以得处理一下\n // return Array.from(text);\n // }\n\n static tryUpdateRichtext(richtext: IRichText) {\n const cache = richtext.getFrameCache();\n if (!RichText.AllSingleCharacter(cache)) {\n const tc = RichText.TransformTextConfig2SingleCharacter(richtext.attribute.textConfig);\n // richtext.attribute.textConfig.forEach((item: IRichTextParagraphCharacter) => {\n // const textList = RichTextEditPlugin.splitText(item.text.toString());\n // if (isString(item.text) && textList.length > 1) {\n // // 拆分\n // for (let i = 0; i < textList.length; i++) {\n // const t = textList[i];\n // tc.push({ ...item, text: t });\n // }\n // } else {\n // tc.push(item);\n // }\n // });\n richtext.setAttributes({ textConfig: tc });\n richtext.doUpdateFrameCache(tc);\n }\n }\n\n static CreateSelection(rt: IRichText) {\n if (!rt) {\n return null;\n }\n const { textConfig = [] } = rt.attribute;\n return new Selection(0, textConfig.length - 1, rt);\n }\n\n constructor() {\n this.commandCbs = new Map();\n this.commandCbs.set(FORMAT_TEXT_COMMAND, [this.formatTextCommandCb]);\n this.commandCbs.set(FORMAT_ALL_TEXT_COMMAND, [this.formatAllTextCommandCb]);\n this.updateCbs = [];\n this.deltaX = 0;\n this.deltaY = 0;\n }\n\n formatTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const selectionData = p.getSelection();\n if (!selectionData) {\n return;\n }\n const { selectionStartCursorIdx, curCursorIdx } = selectionData;\n const minCursorIdx = Math.min(selectionStartCursorIdx, curCursorIdx);\n const maxCursorIdx = Math.max(selectionStartCursorIdx, curCursorIdx);\n const minConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, minCursorIdx);\n const maxConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, maxCursorIdx);\n const config = rt.attribute.textConfig.slice(minConfigIdx, maxConfigIdx);\n this._formatTextCommand(payload, config, rt);\n };\n\n formatAllTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const config = rt.attribute.textConfig;\n this._formatTextCommand(payload, config, rt);\n };\n\n _formatTextCommand(payload: string, config: IRichTextCharacter[], rt: IRichText) {\n if (payload === 'bold') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontWeight = 'bold'));\n } else if (payload === 'italic') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontStyle = 'italic'));\n } else if (payload === 'underline') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.underline = true));\n } else if (payload === 'lineThrough') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.lineThrough = true));\n } else if (isObject(payload)) {\n config.forEach((item: IRichTextParagraphCharacter) => merge(item, payload));\n }\n rt.setAttributes(rt.attribute);\n // 重新渲染Selection位置,因为fontSize会影响文字大小\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n this.selectionRangeByCursorIdx(this.selectionStartCursorIdx, this.curCursorIdx, cache);\n // 设置属性的时候,Bounds也要更改\n this.tryShowInputBounds();\n }\n\n dispatchCommand(command: string, payload: any) {\n const cbs = this.commandCbs.get(command);\n cbs && cbs.forEach(cb => cb(payload, this));\n this.updateCbs.forEach(cb => cb('dispatch', this));\n }\n\n registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n cbs.push(cb);\n }\n\n removeCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n cbs.push(cb);\n }\n\n removeUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.editModule = new EditModule();\n // context.stage.on('click', this.handleClick);\n context.stage.on('pointermove', this.handleMove, { capture: true });\n context.stage.on('pointerdown', this.handlePointerDown, { capture: true });\n context.stage.on('pointerup', this.handlePointerUp, { capture: true });\n context.stage.on('pointerleave', this.handlePointerUp, { capture: true });\n context.stage.on('dblclick', this.handleDBLClick, { capture: true });\n application.global.addEventListener('keydown', this.handleKeyDown);\n\n this.editModule.onInput(this.handleInput);\n this.editModule.onChange(this.handleChange);\n this.editModule.onFocusOut(this.handleFocusOut);\n\n this.timeline = (this as any).createTimeline && (this as any).createTimeline();\n this.ticker = (this as any).createTicker && (this as any).createTicker(context.stage);\n }\n\n copyToClipboard(e: KeyboardEvent): boolean {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'c') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'c')\n ) {\n const selection = this.getSelection();\n const text = selection.getSelectionPureText();\n application.global.copyToClipBoard(text);\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n /**\n * 选中某一个区间,startIdx和endIdx分别是开始结束的光标位置\n * 设置光标为endIdx,设置开始位置为startIdx\n * @param startIdx 开始位置\n * @param endIdx 结束位置\n * @returns\n */\n selectionRange(startIdx: number, endIdx: number) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n // 对startIdx和endIdx约束\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n startIdx = Math.min(Math.max(startIdx, -0.1), totalCursorCount + 0.1);\n endIdx = Math.min(Math.max(endIdx, -0.1), totalCursorCount + 0.1);\n\n this.selectionRangeByCursorIdx(startIdx, endIdx, cache);\n }\n\n selectionRangeByCursorIdx(startCursorIdx: number, endCursorIdx: number, cache: IRichTextFrame) {\n this.curCursorIdx = endCursorIdx;\n this.selectionStartCursorIdx = startCursorIdx;\n const { x, y1, y2 } = this.computedCursorPosByCursorIdx(this.selectionStartCursorIdx, this.currRt);\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this._tryShowSelection(pos, cache);\n }\n\n fullSelection() {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n const { lines } = cache;\n if (!(lines.length && lines[0].paragraphs.length)) {\n return;\n }\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n this.selectionRange(-0.1, totalCursorCount + 0.1);\n }\n\n protected fullSelectionKeyHandler(e: KeyboardEvent) {\n if (\n (application.global.isMacOS() && e.metaKey && e.key === 'a') ||\n (!application.global.isMacOS() && e.ctrlKey && e.key === 'a')\n ) {\n this.fullSelection();\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n directKeyHandler(e: KeyboardEvent) {\n if (!(e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n return false;\n }\n const cache = this.currRt.getFrameCache();\n if (!cache) {\n return false;\n }\n let x = 0;\n let y = 0;\n if (e.key === 'ArrowUp') {\n y = -1;\n } else if (e.key === 'ArrowDown') {\n y = 1;\n } else if (e.key === 'ArrowLeft') {\n x = -1;\n } else if (e.key === 'ArrowRight') {\n x = 1;\n }\n\n // const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const { lineInfo, columnInfo } = this.getColumnByIndex(cache, Math.round(this.curCursorIdx));\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (x) {\n // 快接近首尾需要特殊处理\n if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 2] &&\n this.curCursorIdx < Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 0.2;\n } else if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 1] &&\n this.curCursorIdx > Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 1 - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx > Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx < Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 1 + 0.2;\n } else {\n this.curCursorIdx += x;\n }\n if (this.curCursorIdx < -0.1) {\n this.curCursorIdx = -0.1;\n } else if (this.curCursorIdx > totalCursorCount + 0.1) {\n this.curCursorIdx = totalCursorCount + 0.1;\n }\n\n this.selectionStartCursorIdx = this.curCursorIdx;\n\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this.hideSelection();\n }\n\n if (y) {\n if (y > 0 && lineInfo === cache.lines[cache.lines.length - 1]) {\n return;\n }\n if (y < 0 && lineInfo === cache.lines[0]) {\n return;\n }\n const lineIdx = cache.lines.findIndex(item => item === lineInfo) + y;\n if (lineIdx < 0 || lineIdx >= cache.lines.length) {\n return;\n }\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const posX = pos.x;\n let posY = (pos.y1 + pos.y2) / 2;\n posY += y * lineInfo.height;\n const nextLineInfo = cache.lines[lineIdx];\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(nextLineInfo, { x: posX, y: posY });\n if (!columnInfo) {\n return;\n }\n let cursorIdx = this.getColumnIndex(cache, columnInfo) + delta;\n const data = this.computedCursorPosByCursorIdx(cursorIdx, this.currRt);\n\n if (cursorIdx < -0.1) {\n cursorIdx = -0.1;\n } else if (cursorIdx > totalCursorCount + 0.1) {\n cursorIdx = totalCursorCount + 0.1;\n }\n\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n this.setCursorAndTextArea(data.x, data.y1, data.y2, this.currRt);\n }\n\n return true;\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!(this.currRt && this.editing)) {\n return;\n }\n // 复制到剪贴板\n // cmd/ctl + C\n if (this.copyToClipboard(e)) {\n return;\n }\n // 全选\n // cmd/ctl + A\n if (this.fullSelectionKeyHandler(e)) {\n return;\n }\n // 方向键\n // 上、下、左、右\n if (this.directKeyHandler(e)) {\n return;\n }\n };\n\n handleInput = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n // 如果文字被删除光了,那么展示一个shadowRoot\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,但并不同步到curIdx,因为这可能是临时的\n // const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n // console.log(this.curCursorIdx, cursorIdx);\n this.hideSelection();\n // this.setCursor(p.x, p.y1, p.y2);\n this.updateCbs.forEach(cb => cb('input', this));\n };\n\n handleChange = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,并同步到editModule\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n const p = this.computedCursorPosByCursorIdx(cursorIdx, rt);\n this.setCursorAndTextArea(p.x, p.y1, p.y2, rt);\n this.hideSelection();\n this.updateCbs.forEach(cb => cb('change', this));\n };\n\n tryShowShadowPlaceholder() {\n if (!this.currRt) {\n return;\n }\n // 删除富文本影子节点\n const shadowRoot = this.currRt.shadowRoot;\n if (shadowRoot) {\n const placeholder = shadowRoot.getElementsByType('richtext')[0];\n placeholder && shadowRoot.removeChild(placeholder);\n }\n const { textConfig, editOptions = {} } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const {\n placeholder,\n placeholderColor = 'rgba(0, 0, 0, 0.6)',\n placeholderFontFamily,\n placeholderFontSize\n } = editOptions;\n const shadow = this.getShadow(this.currRt);\n const textConfigItem = { ...getDefaultCharacterConfig(this.currRt.attribute), text: placeholder };\n if (placeholderColor) {\n textConfigItem.fill = placeholderColor;\n }\n if (placeholderFontFamily) {\n textConfigItem.fontFamily = placeholderFontFamily;\n }\n if (placeholderFontSize) {\n textConfigItem.fontSize = placeholderFontSize;\n }\n\n this.shadowPlaceHolder = createRichText({\n ...this.currRt.attribute,\n x: 0,\n y: 0,\n // 倒回去,因为shadowPlace能够适用富文本的align和baseline\n dx: -this.deltaX,\n dy: -this.deltaY,\n angle: 0,\n textConfig: [textConfigItem]\n });\n shadow.add(this.shadowPlaceHolder);\n }\n\n /**\n * 获取富文本的AABBBounds,如果内部没有内容的话高度依然要保持,同时如果有placeholder的话,需要把placeholder宽度加上\n * @param rt\n */\n getRichTextAABBBounds(rt: IRichText) {\n const { attribute } = rt;\n if (!attribute.textConfig.length) {\n return getRichTextBounds({\n ...this.shadowPlaceHolder.attribute,\n x: attribute.x,\n y: attribute.y,\n textAlign: attribute.textAlign,\n boundsMode: 'accurate'\n });\n }\n return rt.AABBBounds;\n }\n\n tryShowInputBounds() {\n if (!(this.currRt && this.focusing)) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n const { boundsStrokeWhenInput } = editOptions;\n\n if (!editOptions || !boundsStrokeWhenInput) {\n return;\n }\n // 得先偏移,不然上一次的Bounds会影响后续的计算\n this.offsetShadowRoot();\n // const { attribute } = this.currRt;\n const b = this.getRichTextAABBBounds(this.currRt);\n const height = b.height();\n const width = b.width();\n // if (!attribute.textConfig.length && this.editLine) {\n // const { points } = this.editLine.attribute;\n // height = points[1].y - points[0].y;\n // }\n this.shadowBounds = this.shadowBounds || createRect({});\n this.shadowBounds.setAttributes({\n x: 0,\n y: 0,\n scaleX: 1 / (this.currRt.attribute.scaleX ?? 1),\n scaleY: 1 / (this.currRt.attribute.scaleY ?? 1),\n width,\n height,\n fill: false,\n stroke: boundsStrokeWhenInput,\n lineWidth: 1,\n zIndex: -1\n });\n const shadow = this.getShadow(this.currRt);\n this.addEditLineOrBgOrBounds(this.shadowBounds, shadow);\n // shadow.add(this.shadowBounds);\n\n this.offsetLineBgAndShadowBounds();\n }\n\n trySyncPlaceholderToTextConfig() {\n if (!this.currRt) {\n return;\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder && editOptions.syncPlaceholderToTextConfig)) {\n return;\n }\n const { placeholder } = editOptions;\n this.currRt.setAttributes({\n textConfig: [\n {\n text: placeholder,\n ...getDefaultCharacterConfig(this.currRt.attribute)\n }\n ]\n });\n }\n\n handleFocusIn = () => {\n throw new Error('不会走到这里 handleFocusIn');\n // this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n\n handleFocusOut = () => {\n throw new Error('不会走到这里 handleFocusOut');\n // console.log('abc')\n // this.editing = false;\n // this.deFocus();\n // this.pointerDown = false;\n // this.triggerRender();\n // this.updateCbs.forEach(cb => cb('defocus', this));\n };\n\n deactivate(context: IPluginService): void {\n // context.stage.off('pointerdown', this.handleClick);\n context.stage.off('pointermove', this.handleMove, { capture: true });\n context.stage.off('pointerdown', this.handlePointerDown, { capture: true });\n context.stage.off('pointerup', this.handlePointerUp, { capture: true });\n context.stage.off('pointerleave', this.handlePointerUp, { capture: true });\n context.stage.off('dblclick', this.handleDBLClick, { capture: true });\n\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleMove = (e: PointerEvent) => {\n // 如果发现当前的richtext不是editable的richtext,那么需要强行defocus一下,这可能是用户手动设置了richtext的editable为false\n if (this.currRt && !this.currRt.attribute.editable) {\n this.deFocus(true);\n }\n if (!this.isEditableRichtext(e)) {\n this.handleLeave();\n return;\n }\n // this.currRt = e.target as IRichText;\n this.handleEnter();\n (e.target as any).once('pointerleave', this.handleLeave, { capture: true });\n\n this.tryShowSelection(e, false);\n };\n\n // 鼠标进入\n handleEnter = () => {\n this.editing = true;\n this.pluginService.stage.setCursor('text');\n };\n\n // 鼠标离开\n handleLeave = () => {\n this.editing = false;\n this.pluginService.stage.setCursor('default');\n };\n\n handlePointerDown = (e: PointerEvent) => {\n if (!this.editing || !this.isEditableRichtext(e)) {\n this.deFocus(true);\n } else {\n this.onFocus(e);\n }\n this.triggerRender();\n this.pointerDown = true;\n this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n handlePointerUp = (e: PointerEvent) => {\n this.pointerDown = false;\n };\n handleDBLClick = (e: PointerEvent) => {\n if (!this.editing) {\n return;\n }\n\n this.tryShowSelection(e, true);\n };\n\n protected stopPropagation(e: Event) {\n e.stopPropagation();\n }\n\n addEditLineOrBgOrBounds(graphic: IGraphic, shadowRoot: IGroup) {\n let group = shadowRoot.getElementById('emptyBoundsContainer');\n if (!group) {\n group = createGroup({ x: 0, y: 0, width: 0, height: 0, boundsMode: 'empty' });\n group.id = 'emptyBoundsContainer';\n shadowRoot.add(group);\n }\n group.add(graphic);\n }\n\n removeEditLineOrBgOrBounds(graphic: IGraphic, shadowRoot: IGroup) {\n const group = shadowRoot.getElementById('emptyBoundsContainer');\n if (!group) {\n return;\n }\n group.removeChild(graphic);\n }\n\n onFocus(e: PointerEvent, data?: any) {\n this.updateCbs && this.updateCbs.forEach(cb => cb('beforeOnfocus', this));\n this.deFocus(false);\n this.focusing = true;\n this.editing = true;\n const target = e.target as IRichText;\n if (!(target && target.type === 'richtext')) {\n return;\n }\n this.currRt = target as IRichText;\n\n // 创建shadowGraphic\n RichTextEditPlugin.tryUpdateRichtext(target);\n const shadowRoot = this.getShadow(target);\n const cache = target.getFrameCache();\n if (!cache) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n if (editOptions.stopPropagation) {\n target.addEventListener('*', this.stopPropagation);\n }\n // 计算全局偏移\n this.offsetShadowRoot(target);\n if (!this.editLine) {\n const line = createLine({ x: 0, y: 0, lineWidth: 1, stroke: 'black' });\n // 不使用stage的Ticker,避免影响其他的动画以及受到其他动画影响\n this.addAnimateToLine(line);\n this.editLine = line;\n this.ticker && this.ticker.start(true);\n\n const g = createGroup({ x: 0, y: 0, width: 0, height: 0 });\n this.editBg = g;\n this.addEditLineOrBgOrBounds(this.editLine, shadowRoot);\n this.addEditLineOrBgOrBounds(this.editBg, shadowRoot);\n // shadowRoot.add(this.editLine);\n // shadowRoot.add(this.editBg);\n }\n\n data = data || this.computedCursorPosByEvent(e, cache);\n\n if (data) {\n const { x, y1, y2, cursorIndex } = data;\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = cursorIndex;\n this.selectionStartCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1, y2, target);\n } else {\n const x = 0;\n const y1 = 0;\n const y2 = getRichTextBounds({ ...target.attribute, textConfig: [{ text: 'a' }], scaleX: 1, scaleY: 1 }).height();\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = -0.1;\n this.selectionStartCursorIdx = -0.1;\n this.setCursorAndTextArea(x, y1, y2, target);\n }\n\n // 聚焦的时候也判断,这样在最开始就能展示placeholder,否则需要等用户输入\n this.tryShowShadowPlaceholder();\n // 聚焦的时候也判断,这样在最开始就能展示bounds,否则需要等用户输入\n this.tryShowInputBounds();\n // 触发Bounds更新\n this.currRt.addUpdateBoundTag();\n }\n\n offsetShadowRoot(rt?: IRichText) {\n rt = rt || this.currRt;\n if (!rt) {\n return;\n }\n const shadowRoot = this.getShadow(rt);\n if (!shadowRoot) {\n return;\n }\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n // 计算全局偏移\n this.computeGlobalDelta(cache);\n\n // 添加cursor节点,shadowRoot在上面\n shadowRoot.setAttributes({ shadowRootIdx: 1, pickable: false, x: this.deltaX, y: this.deltaY });\n this.shadowPlaceHolder && this.shadowPlaceHolder.setAttributes({ dx: -this.deltaX, dy: -this.deltaY });\n }\n\n // 偏移线和背景,因为文字的baseline可能是middle或者bottom\n protected offsetLineBgAndShadowBounds() {\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n let attr = rt.attribute;\n let b: IAABBBounds;\n if (textBaseline === 'middle' || textBaseline === 'bottom') {\n if (!attr.textConfig.length) {\n attr = { ...attr, textConfig: [{ text: 'a' }] };\n }\n b = getRichTextBounds({ ...attr, scaleX: 1, scaleY: 1 });\n }\n if (textBaseline === 'middle') {\n dy = -b.height() / 2;\n } else if (textBaseline === 'bottom') {\n dy = -b.height();\n }\n this.editLine && this.editLine.setAttributes({ dy });\n this.editBg && this.editBg.setAttributes({ dy });\n if (this.shadowBounds) {\n this.shadowBounds.setAttributes({ dy });\n }\n }\n\n protected deFocus(trulyDeFocus = false) {\n this.editing = false;\n this.updateCbs && this.updateCbs.forEach(cb => cb('beforeDefocus', this, { trulyDeFocus }));\n const currRt = this.currRt as IRichText;\n if (!currRt) {\n return;\n }\n const { editOptions = {} } = currRt.attribute;\n if (editOptions.stopPropagation) {\n currRt.removeEventListener('*', this.stopPropagation);\n }\n if (trulyDeFocus) {\n this.trySyncPlaceholderToTextConfig();\n currRt.detachShadow();\n }\n this.currRt = null;\n this.editModule.currRt = null;\n const shadowRoot = this.getShadow(currRt);\n if (this.editLine) {\n this.removeEditLineOrBgOrBounds(this.editLine, shadowRoot);\n this.editLine.release();\n this.editLine = null;\n\n this.removeEditLineOrBgOrBounds(this.editBg, shadowRoot);\n this.editBg.release();\n this.editBg = null;\n }\n\n if (trulyDeFocus) {\n if (this.shadowBounds) {\n this.removeEditLineOrBgOrBounds(this.shadowBounds, shadowRoot);\n this.shadowBounds.release();\n this.shadowBounds = null;\n }\n if (this.shadowPlaceHolder) {\n this.shadowPlaceHolder.parent && this.shadowPlaceHolder.parent.removeChild(this.shadowPlaceHolder);\n this.shadowPlaceHolder.release();\n this.shadowPlaceHolder = null;\n }\n }\n this.focusing = false;\n\n // 清理textConfig,不让最后有换行符\n // const textConfig = currRt.attribute.textConfig;\n // let lastConfig = textConfig[textConfig.length - 1];\n // let cleared = false;\n // while (lastConfig && (lastConfig as any).text === '\\n') {\n // textConfig.pop();\n // lastConfig = textConfig[textConfig.length - 1];\n // cleared = true;\n // }\n // cleared && currRt.setAttributes({ textConfig });\n\n // TODO 因为handlerLeave可能不会执行,所以这里需要手动清除\n currRt.removeEventListener('pointerleave', this.handleLeave);\n }\n\n protected addAnimateToLine(line: ILine) {\n if (!line.animate) {\n return;\n }\n line.setAttributes({ opacity: 1 });\n line.animates &&\n line.animates.forEach(animate => {\n animate.stop();\n animate.release();\n });\n const animate = line.animate({\n timeline: this.timeline\n });\n animate.to({ opacity: 1 }, 10, 'linear').wait(700).to({ opacity: 0 }, 10, 'linear').wait(700).loop(Infinity);\n }\n\n // 显示selection\n tryShowSelection(e: PointerEvent, dblclick: boolean) {\n const cache = (e.target as IRichText).getFrameCache();\n if (!(cache && this.editBg && this.startCursorPos)) {\n return;\n }\n\n if (!dblclick) {\n if (this.pointerDown) {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n this.curCursorIdx = currCursorData.cursorIndex;\n this._tryShowSelection(currCursorData, cache);\n }\n } else {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n // const curCursorIdx = currCursorData.cursorIndex;\n const lineInfo = currCursorData.lineInfo;\n const columnIndex = lineInfo.paragraphs.findIndex(item => item === currCursorData.columnInfo);\n if (columnIndex < 0) {\n return;\n }\n const str = lineInfo.paragraphs.reduce((str, item) => {\n return str + item.text;\n }, '');\n\n let idx = 0;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n if (line === lineInfo) {\n break;\n }\n idx += line.paragraphs.length;\n }\n\n const { startIdx, endIdx } = getWordStartEndIdx(str, columnIndex);\n\n this.selectionRange(idx + startIdx - 0.1, idx + endIdx - 0.1);\n }\n }\n\n _tryShowSelection(\n currCursorData: {\n x: any;\n y1: number;\n y2: number;\n },\n cache: IRichTextFrame\n ) {\n let startCursorPos = this.startCursorPos;\n let endCursorPos = {\n x: currCursorData.x,\n y: (currCursorData.y1 + currCursorData.y2) / 2\n };\n let line0Info = this.getLineByPoint(cache, startCursorPos);\n let line1Info = this.getLineByPoint(cache, endCursorPos);\n\n if (\n startCursorPos.y > endCursorPos.y ||\n (startCursorPos.y === endCursorPos.y && startCursorPos.x > endCursorPos.x)\n ) {\n [startCursorPos, endCursorPos] = [endCursorPos, startCursorPos];\n [line1Info, line0Info] = [line0Info, line1Info];\n }\n\n this.hideSelection();\n if (line0Info === line1Info) {\n // 同行\n this.editBg.setAttributes({\n x: startCursorPos.x,\n y: line0Info.top,\n width: endCursorPos.x - startCursorPos.x,\n height: line0Info.height,\n fill: '#336df4',\n fillOpacity: 0.2\n });\n } else {\n this.editBg.setAttributes({ x: 0, y: line0Info.top, width: 0, height: 0 });\n const startIdx = cache.lines.findIndex(item => item === line0Info);\n const endIdx = cache.lines.findIndex(item => item === line1Info);\n let y = 0;\n for (let i = startIdx; i <= endIdx; i++) {\n const line = cache.lines[i];\n if (i === startIdx) {\n const p = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: startCursorPos.x,\n y,\n width: p.left + p.width - startCursorPos.x,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else if (i === endIdx) {\n const p = line.paragraphs[0];\n this.editBg.add(\n createRect({\n x: p.left,\n y,\n width: endCursorPos.x - p.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else {\n const p0 = line.paragraphs[0];\n const p1 = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.left,\n y,\n width: p1.left + p1.width - p0.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n }\n y += line.height;\n }\n }\n\n this.setCursorAndTextArea(currCursorData.x, currCursorData.y1, currCursorData.y2, this.currRt as IRichText);\n\n this.triggerRender();\n this.updateCbs.forEach(cb => cb('selection', this));\n }\n\n hideSelection() {\n if (this.editBg) {\n this.editBg.removeAllChild();\n this.editBg.setAttributes({ fill: 'transparent' });\n }\n }\n\n protected getShadow(rt: IRichText) {\n const sr = rt.shadowRoot || rt.attachShadow();\n // TODO 这里比较hack,因为emptyBoundsContainer是empty,导致shadowRoot的Bounds为空,所以这里给一个1*1的rect,让其能绘制\n sr.setAttributes({ width: 0, height: 0 });\n return sr;\n }\n\n protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine {\n let lineInfo = cache.lines[0];\n for (let i = 0; i < cache.lines.length; i++) {\n if (lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y) {\n break;\n }\n lineInfo = cache.lines[i + 1];\n }\n\n return lineInfo;\n }\n protected getColumnAndIndexByLinePoint(\n lineInfo: IRichTextLine,\n p1: IPointLike\n ): {\n columnInfo: IRichTextParagraph | IRichTextIcon;\n delta: number;\n } {\n let columnInfo = lineInfo.paragraphs[0];\n let delta = 0;\n if (lineInfo.paragraphs.length) {\n const start = lineInfo.paragraphs[0];\n const end = lineInfo.paragraphs[lineInfo.paragraphs.length - 1];\n if (p1.x <= start.left) {\n delta = -0.1;\n columnInfo = start;\n } else if (p1.x >= end.left + end.width) {\n delta = 0.1;\n columnInfo = end;\n }\n }\n\n if (!delta) {\n for (let i = 0; i < lineInfo.paragraphs.length; i++) {\n columnInfo = lineInfo.paragraphs[i];\n if (columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x) {\n if (p1.x > columnInfo.left + columnInfo.width / 2) {\n delta = 0.1;\n } else {\n delta = -0.1;\n }\n break;\n }\n }\n }\n\n return {\n columnInfo,\n delta\n };\n }\n /* 工具函数 */\n /**\n * 根据给定的ParagraphInfo得到对应的index\n * @param cache 富文本缓存\n * @param cInfo ParagraphInfo\n * @returns\n */\n protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon) {\n // TODO 【注意】认为cache都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n for (let j = 0; j < line.paragraphs.length; j++) {\n inputIndex++;\n if (cInfo === line.paragraphs[j]) {\n return inputIndex;\n }\n }\n }\n return -1;\n }\n\n protected isRichtext(e: PointerEvent) {\n return !!(e.target && (e.target as any).type === 'richtext');\n }\n\n protected isEditableRichtext(e: PointerEvent) {\n return this.isRichtext(e) && !!(e.target as any).attribute.editable;\n }\n\n // 如果没有开自动渲染,得触发重绘\n protected triggerRender() {\n this.pluginService.stage.renderNextFrame();\n }\n\n protected computeGlobalDelta(cache: IRichTextFrame) {\n this.deltaX = 0;\n this.deltaY = 0;\n if (cache.lines.length === 0 && this.shadowPlaceHolder) {\n cache = this.shadowPlaceHolder.getFrameCache();\n }\n const height = cache.height;\n const actualHeight = cache.actualHeight;\n const width = cache.lines.reduce((w, item) => Math.max(w, item.actualWidth), 0);\n if (cache.globalAlign === 'center') {\n this.deltaX = -width / 2;\n } else if (cache.globalAlign === 'right') {\n this.deltaX = -width;\n }\n if (cache.verticalDirection === 'middle') {\n this.deltaY = height / 2 - actualHeight / 2;\n } else if (cache.verticalDirection === 'bottom') {\n this.deltaY = height - actualHeight;\n }\n }\n\n protected getEventPosition(e: PointerEvent): IPointLike {\n const p = this.pluginService.stage.eventPointTransform(e);\n\n const p1 = { x: 0, y: 0 };\n (e.target as IRichText).globalTransMatrix.transformPoint(p, p1);\n p1.x -= this.deltaX;\n p1.y -= this.deltaY;\n\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n if (textBaseline === 'middle') {\n const b = getRichTextBounds({ ...rt.attribute, scaleX: 1, scaleY: 1 });\n dy = b.height() / 2;\n } else if (textBaseline === 'bottom') {\n const b = getRichTextBounds({ ...rt.attribute, scaleX: 1, scaleY: 1 });\n dy = b.height();\n }\n p1.y += dy;\n return p1;\n }\n\n protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n this.addAnimateToLine(this.editLine);\n const out = { x: 0, y: 0 };\n rt.globalTransMatrix.getInverse().transformPoint({ x, y: y1 }, out);\n // TODO 考虑stage变换\n const { left, top } = this.pluginService.stage.window.getBoundingClientRect();\n out.x += left;\n out.y += top;\n\n this.offsetLineBgAndShadowBounds();\n this.offsetShadowRoot();\n\n this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);\n }\n\n /**\n * 根据Event算出光标位置等信息\n * @param e Event\n * @param cache 富文本缓存\n * @returns\n */\n protected computedCursorPosByEvent(e: PointerEvent, cache: IRichTextFrame) {\n const p1 = this.getEventPosition(e);\n const lineInfo = this.getLineByPoint(cache, p1);\n if (!lineInfo) {\n return;\n }\n\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(lineInfo, p1);\n if (!columnInfo) {\n return;\n }\n\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n\n let cursorIndex = this.getColumnIndex(cache, columnInfo);\n cursorIndex += delta;\n const x = columnInfo.left + (delta > 0 ? columnInfo.width : 0);\n\n return {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n };\n }\n\n /**\n * 根据cursorIdx计算出点的位置\n * @param cursorIdx index\n * @param rt 富文本\n * @returns\n */\n protected computedCursorPosByCursorIdx(cursorIdx: number, rt: IRichText) {\n const idx = Math.round(cursorIdx);\n const leftRight = cursorIdx - idx; // >0 向右,<0 向左\n const cache = rt.getFrameCache();\n const column = this.getColumnByIndex(cache, idx);\n const height = rt.attribute.fontSize ?? (rt.attribute.textConfig?.[0] as any)?.fontSize;\n if (!column) {\n // 检查是不是空文本\n if (!cache.lines.length) {\n const b = getRichTextBounds({ ...rt.attribute, textConfig: [{ text: 'a' }] });\n return {\n x: 0,\n y1: 0,\n y2: b.height()\n };\n }\n return {\n x: 0,\n y1: 0,\n y2: height\n };\n }\n const { lineInfo, columnInfo } = column;\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n const x = columnInfo.left + (leftRight < 0 ? 0 : columnInfo.width);\n\n return { x, y1, y2, lineInfo, columnInfo };\n }\n\n /**\n * 根据index获取columnInfo\n * @param cache 缓存\n * @param index index\n * @returns\n */\n protected getColumnByIndex(\n cache: IRichTextFrame,\n index: number\n ): {\n lineInfo: IRichTextLine;\n columnInfo: IRichTextParagraph | IRichTextIcon;\n } | null {\n // TODO 认为都是单个字符拆分的\n for (let i = 0, inputIndex = 0; i < cache.lines.length; i++) {\n const lineInfo = cache.lines[i];\n for (let j = 0; j < lineInfo.paragraphs.length; j++) {\n const columnInfo = lineInfo.paragraphs[j];\n if (inputIndex === index) {\n return {\n lineInfo,\n columnInfo\n };\n }\n inputIndex++;\n }\n }\n return null;\n }\n\n release() {\n this.deactivate(this.pluginService);\n this.editModule.release();\n }\n\n /**\n * 获取当前选择的区间范围\n * @param defaultAll 如果force为true,又没有选择,则认为选择了所有然后进行匹配,如果为false,则认为什么都没有选择,返回null\n * @returns\n */\n getSelection(defaultAll: boolean = false) {\n if (!this.currRt) {\n return null;\n }\n if (\n this.selectionStartCursorIdx != null &&\n this.curCursorIdx != null\n // this.selectionStartCursorIdx !== this.curCursorIdx &&\n ) {\n return new Selection(this.selectionStartCursorIdx, this.curCursorIdx, this.currRt);\n } else if (defaultAll) {\n return RichTextEditPlugin.CreateSelection(this.currRt);\n }\n return null;\n }\n\n forceFocus(params: { e?: PointerEvent; target: IRichText | null; cursorIndex?: number }) {\n const { target, e, cursorIndex } = params;\n if (!target) {\n return;\n }\n this.currRt = target;\n if (e) {\n this._forceFocusByEvent(e);\n } else {\n this._forceFocusByCursorIndex(cursorIndex ?? -0.1);\n }\n }\n\n protected _forceFocusByEvent(e: PointerEvent) {\n this.handleEnter();\n this.handlePointerDown(e);\n this.handlePointerUp(e);\n }\n\n protected _forceFocusByCursorIndex(cursorIndex: number) {\n const richtext = this.currRt;\n if (!richtext) {\n return;\n }\n\n let x = 0;\n let y1 = 0;\n let y2 = 2;\n let lineInfo = null;\n let columnInfo = null;\n const data = this.computedCursorPosByCursorIdx(cursorIndex, richtext);\n x = data.x;\n y1 = data.y1;\n y2 = data.y2;\n lineInfo = data.lineInfo;\n columnInfo = data.columnInfo;\n\n this.onFocus({ target: this.currRt } as any, {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugins/builtin-plugin/richtext-edit-plugin.ts"],"names":[],"mappings":"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","file":"richtext-edit-plugin.js","sourcesContent":["import type { IAABBBounds, IPointLike } from '@visactor/vutils';\nimport { isObject, isString, max, merge } from '@visactor/vutils';\nimport { Generator } from '../../common/generator';\nimport {\n createGroup,\n createLine,\n createRect,\n createRichText,\n createText,\n getRichTextBounds,\n Graphic,\n RichText\n} from '../../graphic';\nimport type {\n IGraphic,\n IGroup,\n ILine,\n IPlugin,\n IPluginService,\n IRect,\n IRichText,\n IRichTextCharacter,\n IRichTextFrame,\n IRichTextIcon,\n IRichTextLine,\n IRichTextParagraph,\n IRichTextParagraphCharacter,\n ITicker,\n ITimeline\n} from '../../interface';\nimport { EditModule, findConfigIndexByCursorIdx, getDefaultCharacterConfig } from './edit-module';\nimport { vglobal } from '../../modules';\nimport { getWordStartEndIdx } from '../../graphic/richtext/utils';\n// import { testLetter, testLetter2 } from '../../graphic/richtext/utils';\n\ntype UpdateType =\n | 'input'\n | 'change'\n | 'onfocus'\n | 'beforeOnfocus'\n | 'defocus'\n | 'beforeDefocus'\n | 'selection'\n | 'dispatch';\n\nclass Selection {\n selectionStartCursorIdx: number;\n curCursorIdx: number;\n rt: IRichText;\n\n constructor(selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText) {\n this.curCursorIdx = curCursorIdx;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n this.rt = rt;\n }\n\n isEmpty(): boolean {\n return this.selectionStartCursorIdx === this.curCursorIdx;\n }\n\n getSelectionPureText(): string {\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return '';\n }\n const config = this.rt.attribute.textConfig as any;\n const startIdx = findConfigIndexByCursorIdx(config, Math.ceil(minCursorIdx));\n const endIdx = findConfigIndexByCursorIdx(config, Math.floor(maxCursorIdx));\n let str = '';\n for (let i = startIdx; i <= endIdx; i++) {\n str += config[i].text;\n }\n return str;\n }\n\n hasFormat(key: string): boolean {\n return this.getFormat(key) != null;\n }\n\n /**\n * 获取第idx中key的值\n * @param key\n * @param cursorIdx\n */\n _getFormat(key: string, cursorIdx: number) {\n if (!this.rt) {\n return null;\n }\n let idx = Math.round(cursorIdx);\n const config = this.rt.attribute.textConfig as any;\n if (!config.length) {\n return null;\n }\n for (let i = 0; i < config.length; i++) {\n if (config[i].text !== '\\n') {\n idx--;\n if (idx < 0) {\n return config[i][key];\n }\n }\n }\n return config[Math.min(idx, config.length - 1)][key] ?? (this.rt.attribute as any)[key];\n }\n getFormat(key: string, supportOutAttr: boolean = false): any {\n return this.getAllFormat(key, supportOutAttr)[0];\n }\n\n getAllFormat(key: string, supportOutAttr: boolean = false): any {\n const valSet = new Set();\n const minCursorIdx = Math.min(this.selectionStartCursorIdx, this.curCursorIdx);\n const maxCursorIdx = Math.max(this.selectionStartCursorIdx, this.curCursorIdx);\n if (minCursorIdx === maxCursorIdx) {\n return supportOutAttr\n ? [this._getFormat(key, minCursorIdx) ?? (this.rt?.attribute as any)[key]]\n : [this._getFormat(key, minCursorIdx)];\n }\n for (let i = Math.ceil(minCursorIdx); i <= Math.floor(maxCursorIdx); i++) {\n const val = supportOutAttr\n ? this._getFormat(key, i) ?? (this.rt?.attribute as any)[key]\n : this._getFormat(key, i);\n val && valSet.add(val);\n }\n return Array.from(valSet.values());\n }\n}\n\nexport const FORMAT_TEXT_COMMAND = 'FORMAT_TEXT_COMMAND';\nexport const FORMAT_ALL_TEXT_COMMAND = 'FORMAT_ALL_TEXT_COMMAND';\nexport const FORMAT_ELEMENT_COMMAND = 'FORMAT_ELEMENT_COMMAND';\nexport class RichTextEditPlugin implements IPlugin {\n name: 'RichTextEditPlugin' = 'RichTextEditPlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n // 是否正在编辑\n editing: boolean = false;\n // 是否正在聚焦中\n focusing: boolean = false;\n // 鼠标是否按下,判断是否展示selection\n pointerDown: boolean = false;\n\n // selection组件\n editLine: ILine;\n editBg: IGroup;\n shadowPlaceHolder: IRichText;\n shadowBounds: IRect;\n\n ticker?: ITicker;\n timeline?: ITimeline;\n\n currRt: IRichText;\n\n // 当前的cursor信息\n // 0.1为第一个字符右侧, -0.1为第一个字符左侧\n // 1.1为第二个字符右侧,0.9为第二个字符左侧\n curCursorIdx: number;\n selectionStartCursorIdx: number;\n startCursorPos?: IPointLike;\n\n editModule: EditModule;\n\n protected commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;\n protected updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin, params?: any) => void>;\n\n // 富文本外部有align或者baseline的时候,需要对光标做偏移\n protected declare deltaX: number;\n protected declare deltaY: number;\n\n // static splitText(text: string) {\n // // 😁这种emoji长度算两个,所以得处理一下\n // return Array.from(text);\n // }\n\n static tryUpdateRichtext(richtext: IRichText) {\n const cache = richtext.getFrameCache();\n if (!RichText.AllSingleCharacter(cache)) {\n const tc = RichText.TransformTextConfig2SingleCharacter(richtext.attribute.textConfig);\n // richtext.attribute.textConfig.forEach((item: IRichTextParagraphCharacter) => {\n // const textList = RichTextEditPlugin.splitText(item.text.toString());\n // if (isString(item.text) && textList.length > 1) {\n // // 拆分\n // for (let i = 0; i < textList.length; i++) {\n // const t = textList[i];\n // tc.push({ ...item, text: t });\n // }\n // } else {\n // tc.push(item);\n // }\n // });\n richtext.setAttributes({ textConfig: tc });\n richtext.doUpdateFrameCache(tc);\n }\n }\n\n static CreateSelection(rt: IRichText) {\n if (!rt) {\n return null;\n }\n const { textConfig = [] } = rt.attribute;\n return new Selection(0, textConfig.length - 1, rt);\n }\n\n constructor() {\n this.commandCbs = new Map();\n this.commandCbs.set(FORMAT_TEXT_COMMAND, [this.formatTextCommandCb]);\n this.commandCbs.set(FORMAT_ALL_TEXT_COMMAND, [this.formatAllTextCommandCb]);\n this.updateCbs = [];\n this.deltaX = 0;\n this.deltaY = 0;\n }\n\n formatTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const selectionData = p.getSelection();\n if (!selectionData) {\n return;\n }\n const { selectionStartCursorIdx, curCursorIdx } = selectionData;\n const minCursorIdx = Math.min(selectionStartCursorIdx, curCursorIdx);\n const maxCursorIdx = Math.max(selectionStartCursorIdx, curCursorIdx);\n const minConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, minCursorIdx);\n const maxConfigIdx = findConfigIndexByCursorIdx(rt.attribute.textConfig, maxCursorIdx);\n const config = rt.attribute.textConfig.slice(minConfigIdx, maxConfigIdx);\n this._formatTextCommand(payload, config, rt);\n };\n\n formatAllTextCommandCb = (payload: string, p: RichTextEditPlugin) => {\n const rt = p.currRt;\n if (!rt) {\n return;\n }\n const config = rt.attribute.textConfig;\n this._formatTextCommand(payload, config, rt);\n };\n\n _formatTextCommand(payload: string, config: IRichTextCharacter[], rt: IRichText) {\n if (payload === 'bold') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontWeight = 'bold'));\n } else if (payload === 'italic') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.fontStyle = 'italic'));\n } else if (payload === 'underline') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.underline = true));\n } else if (payload === 'lineThrough') {\n config.forEach((item: IRichTextParagraphCharacter) => (item.lineThrough = true));\n } else if (isObject(payload)) {\n config.forEach((item: IRichTextParagraphCharacter) => merge(item, payload));\n }\n rt.setAttributes(rt.attribute);\n // 重新渲染Selection位置,因为fontSize会影响文字大小\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n this.selectionRangeByCursorIdx(this.selectionStartCursorIdx, this.curCursorIdx, cache);\n // 设置属性的时候,Bounds也要更改\n this.tryShowInputBounds();\n }\n\n dispatchCommand(command: string, payload: any) {\n const cbs = this.commandCbs.get(command);\n cbs && cbs.forEach(cb => cb(payload, this));\n this.updateCbs.forEach(cb => cb('dispatch', this));\n }\n\n registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n cbs.push(cb);\n }\n\n removeCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void) {\n const cbs: Array<(payload: any, p: RichTextEditPlugin) => void> = this.commandCbs.get(command) || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n cbs.push(cb);\n }\n\n removeUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void) {\n const cbs = this.updateCbs || [];\n const idx = cbs.indexOf(cb);\n if (idx > -1) {\n cbs.splice(idx, 1);\n }\n }\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n this.editModule = new EditModule();\n // context.stage.on('click', this.handleClick);\n context.stage.on('pointermove', this.handleMove, { capture: true });\n context.stage.on('pointerdown', this.handlePointerDown, { capture: true });\n context.stage.on('pointerup', this.handlePointerUp, { capture: true });\n context.stage.on('pointerleave', this.handlePointerUp, { capture: true });\n context.stage.on('dblclick', this.handleDBLClick, { capture: true });\n vglobal.addEventListener('keydown', this.handleKeyDown);\n\n this.editModule.onInput(this.handleInput);\n this.editModule.onChange(this.handleChange);\n this.editModule.onFocusOut(this.handleFocusOut);\n\n this.timeline = (this as any).createTimeline && (this as any).createTimeline();\n this.ticker = (this as any).createTicker && (this as any).createTicker(context.stage);\n }\n\n copyToClipboard(e: KeyboardEvent): boolean {\n if ((vglobal.isMacOS() && e.metaKey && e.key === 'c') || (!vglobal.isMacOS() && e.ctrlKey && e.key === 'c')) {\n const selection = this.getSelection();\n const text = selection.getSelectionPureText();\n vglobal.copyToClipBoard(text);\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n /**\n * 选中某一个区间,startIdx和endIdx分别是开始结束的光标位置\n * 设置光标为endIdx,设置开始位置为startIdx\n * @param startIdx 开始位置\n * @param endIdx 结束位置\n * @returns\n */\n selectionRange(startIdx: number, endIdx: number) {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n // 对startIdx和endIdx约束\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n startIdx = Math.min(Math.max(startIdx, -0.1), totalCursorCount + 0.1);\n endIdx = Math.min(Math.max(endIdx, -0.1), totalCursorCount + 0.1);\n\n this.selectionRangeByCursorIdx(startIdx, endIdx, cache);\n }\n\n selectionRangeByCursorIdx(startCursorIdx: number, endCursorIdx: number, cache: IRichTextFrame) {\n this.curCursorIdx = endCursorIdx;\n this.selectionStartCursorIdx = startCursorIdx;\n const { x, y1, y2 } = this.computedCursorPosByCursorIdx(this.selectionStartCursorIdx, this.currRt);\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this._tryShowSelection(pos, cache);\n }\n\n fullSelection() {\n const currRt = this.currRt;\n if (!currRt) {\n return;\n }\n const cache = currRt.getFrameCache();\n if (!cache) {\n return;\n }\n const { lines } = cache;\n if (!(lines.length && lines[0].paragraphs.length)) {\n return;\n }\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n this.selectionRange(-0.1, totalCursorCount + 0.1);\n }\n\n protected fullSelectionKeyHandler(e: KeyboardEvent) {\n if ((vglobal.isMacOS() && e.metaKey && e.key === 'a') || (!vglobal.isMacOS() && e.ctrlKey && e.key === 'a')) {\n this.fullSelection();\n e.preventDefault();\n return true;\n }\n return false;\n }\n\n directKeyHandler(e: KeyboardEvent) {\n if (!(e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n return false;\n }\n const cache = this.currRt.getFrameCache();\n if (!cache) {\n return false;\n }\n let x = 0;\n let y = 0;\n if (e.key === 'ArrowUp') {\n y = -1;\n } else if (e.key === 'ArrowDown') {\n y = 1;\n } else if (e.key === 'ArrowLeft') {\n x = -1;\n } else if (e.key === 'ArrowRight') {\n x = 1;\n }\n\n // const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const { lineInfo, columnInfo } = this.getColumnByIndex(cache, Math.round(this.curCursorIdx));\n const { lines } = cache;\n const totalCursorCount = lines.reduce((total, line) => total + line.paragraphs.length, 0) - 1;\n if (x) {\n // 快接近首尾需要特殊处理\n if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 2] &&\n this.curCursorIdx < Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 0.2;\n } else if (\n x > 0 &&\n columnInfo === lineInfo.paragraphs[lineInfo.paragraphs.length - 1] &&\n this.curCursorIdx > Math.round(this.curCursorIdx)\n ) {\n this.curCursorIdx = this.curCursorIdx + 1 - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx > Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 0.2;\n } else if (x < 0 && columnInfo === lineInfo.paragraphs[0] && this.curCursorIdx < Math.round(this.curCursorIdx)) {\n this.curCursorIdx = this.curCursorIdx - 1 + 0.2;\n } else {\n this.curCursorIdx += x;\n }\n if (this.curCursorIdx < -0.1) {\n this.curCursorIdx = -0.1;\n } else if (this.curCursorIdx > totalCursorCount + 0.1) {\n this.curCursorIdx = totalCursorCount + 0.1;\n }\n\n this.selectionStartCursorIdx = this.curCursorIdx;\n\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n this.setCursorAndTextArea(pos.x, pos.y1, pos.y2, this.currRt);\n this.hideSelection();\n }\n\n if (y) {\n if (y > 0 && lineInfo === cache.lines[cache.lines.length - 1]) {\n return;\n }\n if (y < 0 && lineInfo === cache.lines[0]) {\n return;\n }\n const lineIdx = cache.lines.findIndex(item => item === lineInfo) + y;\n if (lineIdx < 0 || lineIdx >= cache.lines.length) {\n return;\n }\n const pos = this.computedCursorPosByCursorIdx(this.curCursorIdx, this.currRt);\n const posX = pos.x;\n let posY = (pos.y1 + pos.y2) / 2;\n posY += y * lineInfo.height;\n const nextLineInfo = cache.lines[lineIdx];\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(nextLineInfo, { x: posX, y: posY });\n if (!columnInfo) {\n return;\n }\n let cursorIdx = this.getColumnIndex(cache, columnInfo) + delta;\n const data = this.computedCursorPosByCursorIdx(cursorIdx, this.currRt);\n\n if (cursorIdx < -0.1) {\n cursorIdx = -0.1;\n } else if (cursorIdx > totalCursorCount + 0.1) {\n cursorIdx = totalCursorCount + 0.1;\n }\n\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n this.setCursorAndTextArea(data.x, data.y1, data.y2, this.currRt);\n }\n\n return true;\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (!(this.currRt && this.editing)) {\n return;\n }\n // 复制到剪贴板\n // cmd/ctl + C\n if (this.copyToClipboard(e)) {\n return;\n }\n // 全选\n // cmd/ctl + A\n if (this.fullSelectionKeyHandler(e)) {\n return;\n }\n // 方向键\n // 上、下、左、右\n if (this.directKeyHandler(e)) {\n return;\n }\n };\n\n handleInput = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n // 如果文字被删除光了,那么展示一个shadowRoot\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,但并不同步到curIdx,因为这可能是临时的\n // const p = this.getPointByColumnIdx(cursorIdx, rt, orient);\n // console.log(this.curCursorIdx, cursorIdx);\n this.hideSelection();\n // this.setCursor(p.x, p.y1, p.y2);\n this.updateCbs.forEach(cb => cb('input', this));\n };\n\n handleChange = (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => {\n if (!this.currRt) {\n return;\n }\n this.tryShowShadowPlaceholder();\n this.tryShowInputBounds();\n\n // 修改cursor的位置,并同步到editModule\n this.curCursorIdx = cursorIdx;\n this.selectionStartCursorIdx = cursorIdx;\n const p = this.computedCursorPosByCursorIdx(cursorIdx, rt);\n this.setCursorAndTextArea(p.x, p.y1, p.y2, rt);\n this.hideSelection();\n this.updateCbs.forEach(cb => cb('change', this));\n };\n\n tryShowShadowPlaceholder() {\n if (!this.currRt) {\n return;\n }\n // 删除富文本影子节点\n const shadowRoot = this.currRt.shadowRoot;\n if (shadowRoot) {\n const placeholder = shadowRoot.getElementsByType('richtext')[0];\n placeholder && shadowRoot.removeChild(placeholder);\n }\n const { textConfig, editOptions = {} } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder)) {\n return;\n }\n const {\n placeholder,\n placeholderColor = 'rgba(0, 0, 0, 0.6)',\n placeholderFontFamily,\n placeholderFontSize\n } = editOptions;\n const shadow = this.getShadow(this.currRt);\n const textConfigItem = { ...getDefaultCharacterConfig(this.currRt.attribute), text: placeholder };\n if (placeholderColor) {\n textConfigItem.fill = placeholderColor;\n }\n if (placeholderFontFamily) {\n textConfigItem.fontFamily = placeholderFontFamily;\n }\n if (placeholderFontSize) {\n textConfigItem.fontSize = placeholderFontSize;\n }\n\n this.shadowPlaceHolder = createRichText({\n ...this.currRt.attribute,\n x: 0,\n y: 0,\n // 倒回去,因为shadowPlace能够适用富文本的align和baseline\n dx: -this.deltaX,\n dy: -this.deltaY,\n angle: 0,\n textConfig: [textConfigItem]\n });\n shadow.add(this.shadowPlaceHolder);\n }\n\n /**\n * 获取富文本的AABBBounds,如果内部没有内容的话高度依然要保持,同时如果有placeholder的话,需要把placeholder宽度加上\n * @param rt\n */\n getRichTextAABBBounds(rt: IRichText) {\n const { attribute } = rt;\n if (!attribute.textConfig.length) {\n return getRichTextBounds({\n ...this.shadowPlaceHolder.attribute,\n x: attribute.x,\n y: attribute.y,\n textAlign: attribute.textAlign,\n boundsMode: 'accurate'\n });\n }\n return rt.AABBBounds;\n }\n\n tryShowInputBounds() {\n if (!(this.currRt && this.focusing)) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n const { boundsStrokeWhenInput } = editOptions;\n\n if (!editOptions || !boundsStrokeWhenInput) {\n return;\n }\n // 得先偏移,不然上一次的Bounds会影响后续的计算\n this.offsetShadowRoot();\n // const { attribute } = this.currRt;\n const b = this.getRichTextAABBBounds(this.currRt);\n const height = b.height();\n const width = b.width();\n // if (!attribute.textConfig.length && this.editLine) {\n // const { points } = this.editLine.attribute;\n // height = points[1].y - points[0].y;\n // }\n this.shadowBounds = this.shadowBounds || createRect({});\n this.shadowBounds.setAttributes({\n x: 0,\n y: 0,\n scaleX: 1 / (this.currRt.attribute.scaleX ?? 1),\n scaleY: 1 / (this.currRt.attribute.scaleY ?? 1),\n width,\n height,\n fill: false,\n stroke: boundsStrokeWhenInput,\n lineWidth: 1,\n zIndex: -1\n });\n const shadow = this.getShadow(this.currRt);\n this.addEditLineOrBgOrBounds(this.shadowBounds, shadow);\n // shadow.add(this.shadowBounds);\n\n this.offsetLineBgAndShadowBounds();\n }\n\n trySyncPlaceholderToTextConfig() {\n if (!this.currRt) {\n return;\n }\n const { textConfig, editOptions } = this.currRt.attribute;\n if (textConfig && textConfig.length) {\n return;\n }\n if (!(editOptions && editOptions.placeholder && editOptions.syncPlaceholderToTextConfig)) {\n return;\n }\n const { placeholder } = editOptions;\n this.currRt.setAttributes({\n textConfig: [\n {\n text: placeholder,\n ...getDefaultCharacterConfig(this.currRt.attribute)\n }\n ]\n });\n }\n\n handleFocusIn = () => {\n throw new Error('不会走到这里 handleFocusIn');\n // this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n\n handleFocusOut = () => {\n throw new Error('不会走到这里 handleFocusOut');\n // console.log('abc')\n // this.editing = false;\n // this.deFocus();\n // this.pointerDown = false;\n // this.triggerRender();\n // this.updateCbs.forEach(cb => cb('defocus', this));\n };\n\n deactivate(context: IPluginService): void {\n // context.stage.off('pointerdown', this.handleClick);\n context.stage.off('pointermove', this.handleMove, { capture: true });\n context.stage.off('pointerdown', this.handlePointerDown, { capture: true });\n context.stage.off('pointerup', this.handlePointerUp, { capture: true });\n context.stage.off('pointerleave', this.handlePointerUp, { capture: true });\n context.stage.off('dblclick', this.handleDBLClick, { capture: true });\n\n vglobal.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleMove = (e: PointerEvent) => {\n // 如果发现当前的richtext不是editable的richtext,那么需要强行defocus一下,这可能是用户手动设置了richtext的editable为false\n if (this.currRt && !this.currRt.attribute.editable) {\n this.deFocus(true);\n }\n if (!this.isEditableRichtext(e)) {\n this.handleLeave();\n return;\n }\n // this.currRt = e.target as IRichText;\n this.handleEnter();\n (e.target as any).once('pointerleave', this.handleLeave, { capture: true });\n\n this.tryShowSelection(e, false);\n };\n\n // 鼠标进入\n handleEnter = () => {\n this.editing = true;\n this.pluginService.stage.setCursor('text');\n };\n\n // 鼠标离开\n handleLeave = () => {\n this.editing = false;\n this.pluginService.stage.setCursor('default');\n };\n\n handlePointerDown = (e: PointerEvent) => {\n if (!this.editing || !this.isEditableRichtext(e)) {\n this.deFocus(true);\n } else {\n this.onFocus(e);\n }\n this.triggerRender();\n this.pointerDown = true;\n this.updateCbs.forEach(cb => cb(this.editing ? 'onfocus' : 'defocus', this));\n };\n handlePointerUp = (e: PointerEvent) => {\n this.pointerDown = false;\n };\n handleDBLClick = (e: PointerEvent) => {\n if (!this.editing) {\n return;\n }\n\n this.tryShowSelection(e, true);\n };\n\n protected stopPropagation(e: Event) {\n e.stopPropagation();\n }\n\n addEditLineOrBgOrBounds(graphic: IGraphic, shadowRoot: IGroup) {\n let group = shadowRoot.getElementById('emptyBoundsContainer');\n if (!group) {\n group = createGroup({ x: 0, y: 0, width: 0, height: 0, boundsMode: 'empty' });\n group.id = 'emptyBoundsContainer';\n shadowRoot.add(group);\n }\n group.add(graphic);\n }\n\n removeEditLineOrBgOrBounds(graphic: IGraphic, shadowRoot: IGroup) {\n const group = shadowRoot.getElementById('emptyBoundsContainer');\n if (!group) {\n return;\n }\n group.removeChild(graphic);\n }\n\n onFocus(e: PointerEvent, data?: any) {\n this.updateCbs && this.updateCbs.forEach(cb => cb('beforeOnfocus', this));\n this.deFocus(false);\n this.focusing = true;\n this.editing = true;\n const target = e.target as IRichText;\n if (!(target && target.type === 'richtext')) {\n return;\n }\n this.currRt = target as IRichText;\n\n // 创建shadowGraphic\n RichTextEditPlugin.tryUpdateRichtext(target);\n const shadowRoot = this.getShadow(target);\n const cache = target.getFrameCache();\n if (!cache) {\n return;\n }\n const { editOptions = {} } = this.currRt.attribute;\n if (editOptions.stopPropagation) {\n target.addEventListener('*', this.stopPropagation);\n }\n // 计算全局偏移\n this.offsetShadowRoot(target);\n if (!this.editLine) {\n const line = createLine({ x: 0, y: 0, lineWidth: 1, stroke: 'black' });\n // 不使用stage的Ticker,避免影响其他的动画以及受到其他动画影响\n this.addAnimateToLine(line);\n this.editLine = line;\n this.ticker && this.ticker.start(true);\n\n const g = createGroup({ x: 0, y: 0, width: 0, height: 0 });\n this.editBg = g;\n this.addEditLineOrBgOrBounds(this.editLine, shadowRoot);\n this.addEditLineOrBgOrBounds(this.editBg, shadowRoot);\n // shadowRoot.add(this.editLine);\n // shadowRoot.add(this.editBg);\n }\n\n data = data || this.computedCursorPosByEvent(e, cache);\n\n if (data) {\n const { x, y1, y2, cursorIndex } = data;\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = cursorIndex;\n this.selectionStartCursorIdx = cursorIndex;\n this.setCursorAndTextArea(x, y1, y2, target);\n } else {\n const x = 0;\n const y1 = 0;\n const y2 = getRichTextBounds({ ...target.attribute, textConfig: [{ text: 'a' }], scaleX: 1, scaleY: 1 }).height();\n this.startCursorPos = { x, y: (y1 + y2) / 2 };\n this.curCursorIdx = -0.1;\n this.selectionStartCursorIdx = -0.1;\n this.setCursorAndTextArea(x, y1, y2, target);\n }\n\n // 聚焦的时候也判断,这样在最开始就能展示placeholder,否则需要等用户输入\n this.tryShowShadowPlaceholder();\n // 聚焦的时候也判断,这样在最开始就能展示bounds,否则需要等用户输入\n this.tryShowInputBounds();\n // 触发Bounds更新\n this.currRt.addUpdateBoundTag();\n }\n\n offsetShadowRoot(rt?: IRichText) {\n rt = rt || this.currRt;\n if (!rt) {\n return;\n }\n const shadowRoot = this.getShadow(rt);\n if (!shadowRoot) {\n return;\n }\n const cache = rt.getFrameCache();\n if (!cache) {\n return;\n }\n // 计算全局偏移\n this.computeGlobalDelta(cache);\n\n // 添加cursor节点,shadowRoot在上面\n shadowRoot.setAttributes({ shadowRootIdx: 1, pickable: false, x: this.deltaX, y: this.deltaY });\n this.shadowPlaceHolder && this.shadowPlaceHolder.setAttributes({ dx: -this.deltaX, dy: -this.deltaY });\n }\n\n // 偏移线和背景,因为文字的baseline可能是middle或者bottom\n protected offsetLineBgAndShadowBounds() {\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n let attr = rt.attribute;\n let b: IAABBBounds;\n if (textBaseline === 'middle' || textBaseline === 'bottom') {\n if (!attr.textConfig.length) {\n attr = { ...attr, textConfig: [{ text: 'a' }] };\n }\n b = getRichTextBounds({ ...attr, scaleX: 1, scaleY: 1 });\n }\n if (textBaseline === 'middle') {\n dy = -b.height() / 2;\n } else if (textBaseline === 'bottom') {\n dy = -b.height();\n }\n this.editLine && this.editLine.setAttributes({ dy });\n this.editBg && this.editBg.setAttributes({ dy });\n if (this.shadowBounds) {\n this.shadowBounds.setAttributes({ dy });\n }\n }\n\n protected deFocus(trulyDeFocus = false) {\n this.editing = false;\n this.updateCbs && this.updateCbs.forEach(cb => cb('beforeDefocus', this, { trulyDeFocus }));\n const currRt = this.currRt as IRichText;\n if (!currRt) {\n return;\n }\n const { editOptions = {} } = currRt.attribute;\n if (editOptions.stopPropagation) {\n currRt.removeEventListener('*', this.stopPropagation);\n }\n if (trulyDeFocus) {\n this.trySyncPlaceholderToTextConfig();\n currRt.detachShadow();\n }\n this.currRt = null;\n this.editModule.currRt = null;\n const shadowRoot = this.getShadow(currRt);\n if (this.editLine) {\n this.removeEditLineOrBgOrBounds(this.editLine, shadowRoot);\n this.editLine.release();\n this.editLine = null;\n\n this.removeEditLineOrBgOrBounds(this.editBg, shadowRoot);\n this.editBg.release();\n this.editBg = null;\n }\n\n if (trulyDeFocus) {\n if (this.shadowBounds) {\n this.removeEditLineOrBgOrBounds(this.shadowBounds, shadowRoot);\n this.shadowBounds.release();\n this.shadowBounds = null;\n }\n if (this.shadowPlaceHolder) {\n this.shadowPlaceHolder.parent && this.shadowPlaceHolder.parent.removeChild(this.shadowPlaceHolder);\n this.shadowPlaceHolder.release();\n this.shadowPlaceHolder = null;\n }\n }\n this.focusing = false;\n\n // 清理textConfig,不让最后有换行符\n // const textConfig = currRt.attribute.textConfig;\n // let lastConfig = textConfig[textConfig.length - 1];\n // let cleared = false;\n // while (lastConfig && (lastConfig as any).text === '\\n') {\n // textConfig.pop();\n // lastConfig = textConfig[textConfig.length - 1];\n // cleared = true;\n // }\n // cleared && currRt.setAttributes({ textConfig });\n\n // TODO 因为handlerLeave可能不会执行,所以这里需要手动清除\n currRt.removeEventListener('pointerleave', this.handleLeave);\n }\n\n protected addAnimateToLine(line: ILine) {\n if (!line.animate) {\n return;\n }\n line.setAttributes({ opacity: 1 });\n line.animates &&\n line.animates.forEach(animate => {\n animate.stop();\n animate.release();\n });\n const animate = line.animate({\n timeline: this.timeline\n });\n animate.to({ opacity: 1 }, 10, 'linear').wait(700).to({ opacity: 0 }, 10, 'linear').wait(700).loop(Infinity);\n }\n\n // 显示selection\n tryShowSelection(e: PointerEvent, dblclick: boolean) {\n const cache = (e.target as IRichText).getFrameCache();\n if (!(cache && this.editBg && this.startCursorPos)) {\n return;\n }\n\n if (!dblclick) {\n if (this.pointerDown) {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n this.curCursorIdx = currCursorData.cursorIndex;\n this._tryShowSelection(currCursorData, cache);\n }\n } else {\n const currCursorData = this.computedCursorPosByEvent(e, cache);\n if (!currCursorData) {\n return;\n }\n // const curCursorIdx = currCursorData.cursorIndex;\n const lineInfo = currCursorData.lineInfo;\n const columnIndex = lineInfo.paragraphs.findIndex(item => item === currCursorData.columnInfo);\n if (columnIndex < 0) {\n return;\n }\n const str = lineInfo.paragraphs.reduce((str, item) => {\n return str + item.text;\n }, '');\n\n let idx = 0;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n if (line === lineInfo) {\n break;\n }\n idx += line.paragraphs.length;\n }\n\n const { startIdx, endIdx } = getWordStartEndIdx(str, columnIndex);\n\n this.selectionRange(idx + startIdx - 0.1, idx + endIdx - 0.1);\n }\n }\n\n _tryShowSelection(\n currCursorData: {\n x: any;\n y1: number;\n y2: number;\n },\n cache: IRichTextFrame\n ) {\n let startCursorPos = this.startCursorPos;\n let endCursorPos = {\n x: currCursorData.x,\n y: (currCursorData.y1 + currCursorData.y2) / 2\n };\n let line0Info = this.getLineByPoint(cache, startCursorPos);\n let line1Info = this.getLineByPoint(cache, endCursorPos);\n\n if (\n startCursorPos.y > endCursorPos.y ||\n (startCursorPos.y === endCursorPos.y && startCursorPos.x > endCursorPos.x)\n ) {\n [startCursorPos, endCursorPos] = [endCursorPos, startCursorPos];\n [line1Info, line0Info] = [line0Info, line1Info];\n }\n\n this.hideSelection();\n if (line0Info === line1Info) {\n // 同行\n this.editBg.setAttributes({\n x: startCursorPos.x,\n y: line0Info.top,\n width: endCursorPos.x - startCursorPos.x,\n height: line0Info.height,\n fill: '#336df4',\n fillOpacity: 0.2\n });\n } else {\n this.editBg.setAttributes({ x: 0, y: line0Info.top, width: 0, height: 0 });\n const startIdx = cache.lines.findIndex(item => item === line0Info);\n const endIdx = cache.lines.findIndex(item => item === line1Info);\n let y = 0;\n for (let i = startIdx; i <= endIdx; i++) {\n const line = cache.lines[i];\n if (i === startIdx) {\n const p = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: startCursorPos.x,\n y,\n width: p.left + p.width - startCursorPos.x,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else if (i === endIdx) {\n const p = line.paragraphs[0];\n this.editBg.add(\n createRect({\n x: p.left,\n y,\n width: endCursorPos.x - p.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n } else {\n const p0 = line.paragraphs[0];\n const p1 = line.paragraphs[line.paragraphs.length - 1];\n this.editBg.add(\n createRect({\n x: p0.left,\n y,\n width: p1.left + p1.width - p0.left,\n height: line.height,\n fill: '#336df4',\n fillOpacity: 0.2\n })\n );\n }\n y += line.height;\n }\n }\n\n this.setCursorAndTextArea(currCursorData.x, currCursorData.y1, currCursorData.y2, this.currRt as IRichText);\n\n this.triggerRender();\n this.updateCbs.forEach(cb => cb('selection', this));\n }\n\n hideSelection() {\n if (this.editBg) {\n this.editBg.removeAllChild();\n this.editBg.setAttributes({ fill: 'transparent' });\n }\n }\n\n protected getShadow(rt: IRichText) {\n const sr = rt.shadowRoot || rt.attachShadow();\n // TODO 这里比较hack,因为emptyBoundsContainer是empty,导致shadowRoot的Bounds为空,所以这里给一个1*1的rect,让其能绘制\n sr.setAttributes({ width: 0, height: 0 });\n return sr;\n }\n\n protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine {\n let lineInfo = cache.lines[0];\n for (let i = 0; i < cache.lines.length; i++) {\n if (lineInfo.top <= p1.y && lineInfo.top + lineInfo.height >= p1.y) {\n break;\n }\n lineInfo = cache.lines[i + 1];\n }\n\n return lineInfo;\n }\n protected getColumnAndIndexByLinePoint(\n lineInfo: IRichTextLine,\n p1: IPointLike\n ): {\n columnInfo: IRichTextParagraph | IRichTextIcon;\n delta: number;\n } {\n let columnInfo = lineInfo.paragraphs[0];\n let delta = 0;\n if (lineInfo.paragraphs.length) {\n const start = lineInfo.paragraphs[0];\n const end = lineInfo.paragraphs[lineInfo.paragraphs.length - 1];\n if (p1.x <= start.left) {\n delta = -0.1;\n columnInfo = start;\n } else if (p1.x >= end.left + end.width) {\n delta = 0.1;\n columnInfo = end;\n }\n }\n\n if (!delta) {\n for (let i = 0; i < lineInfo.paragraphs.length; i++) {\n columnInfo = lineInfo.paragraphs[i];\n if (columnInfo.left <= p1.x && columnInfo.left + columnInfo.width >= p1.x) {\n if (p1.x > columnInfo.left + columnInfo.width / 2) {\n delta = 0.1;\n } else {\n delta = -0.1;\n }\n break;\n }\n }\n }\n\n return {\n columnInfo,\n delta\n };\n }\n /* 工具函数 */\n /**\n * 根据给定的ParagraphInfo得到对应的index\n * @param cache 富文本缓存\n * @param cInfo ParagraphInfo\n * @returns\n */\n protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon) {\n // TODO 【注意】认为cache都是单个字符拆分的\n let inputIndex = -1;\n for (let i = 0; i < cache.lines.length; i++) {\n const line = cache.lines[i];\n for (let j = 0; j < line.paragraphs.length; j++) {\n inputIndex++;\n if (cInfo === line.paragraphs[j]) {\n return inputIndex;\n }\n }\n }\n return -1;\n }\n\n protected isRichtext(e: PointerEvent) {\n return !!(e.target && (e.target as any).type === 'richtext');\n }\n\n protected isEditableRichtext(e: PointerEvent) {\n return this.isRichtext(e) && !!(e.target as any).attribute.editable;\n }\n\n // 如果没有开自动渲染,得触发重绘\n protected triggerRender() {\n this.pluginService.stage.renderNextFrame();\n }\n\n protected computeGlobalDelta(cache: IRichTextFrame) {\n this.deltaX = 0;\n this.deltaY = 0;\n if (cache.lines.length === 0 && this.shadowPlaceHolder) {\n cache = this.shadowPlaceHolder.getFrameCache();\n }\n const height = cache.height;\n const actualHeight = cache.actualHeight;\n const width = cache.lines.reduce((w, item) => Math.max(w, item.actualWidth), 0);\n if (cache.globalAlign === 'center') {\n this.deltaX = -width / 2;\n } else if (cache.globalAlign === 'right') {\n this.deltaX = -width;\n }\n if (cache.verticalDirection === 'middle') {\n this.deltaY = height / 2 - actualHeight / 2;\n } else if (cache.verticalDirection === 'bottom') {\n this.deltaY = height - actualHeight;\n }\n }\n\n protected getEventPosition(e: PointerEvent): IPointLike {\n const p = this.pluginService.stage.eventPointTransform(e);\n\n const p1 = { x: 0, y: 0 };\n (e.target as IRichText).globalTransMatrix.transformPoint(p, p1);\n p1.x -= this.deltaX;\n p1.y -= this.deltaY;\n\n const rt = this.currRt;\n const { textBaseline } = rt.attribute;\n let dy = 0;\n if (textBaseline === 'middle') {\n const b = getRichTextBounds({ ...rt.attribute, scaleX: 1, scaleY: 1 });\n dy = b.height() / 2;\n } else if (textBaseline === 'bottom') {\n const b = getRichTextBounds({ ...rt.attribute, scaleX: 1, scaleY: 1 });\n dy = b.height();\n }\n p1.y += dy;\n return p1;\n }\n\n protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText) {\n this.editLine.setAttributes({\n points: [\n { x, y: y1 },\n { x, y: y2 }\n ]\n });\n this.addAnimateToLine(this.editLine);\n const out = { x: 0, y: 0 };\n rt.globalTransMatrix.getInverse().transformPoint({ x, y: y1 }, out);\n // TODO 考虑stage变换\n const { left, top } = this.pluginService.stage.window.getBoundingClientRect();\n out.x += left;\n out.y += top;\n\n this.offsetLineBgAndShadowBounds();\n this.offsetShadowRoot();\n\n this.editModule.moveTo(out.x, out.y, rt, this.curCursorIdx, this.selectionStartCursorIdx);\n }\n\n /**\n * 根据Event算出光标位置等信息\n * @param e Event\n * @param cache 富文本缓存\n * @returns\n */\n protected computedCursorPosByEvent(e: PointerEvent, cache: IRichTextFrame) {\n const p1 = this.getEventPosition(e);\n const lineInfo = this.getLineByPoint(cache, p1);\n if (!lineInfo) {\n return;\n }\n\n const { columnInfo, delta } = this.getColumnAndIndexByLinePoint(lineInfo, p1);\n if (!columnInfo) {\n return;\n }\n\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n\n let cursorIndex = this.getColumnIndex(cache, columnInfo);\n cursorIndex += delta;\n const x = columnInfo.left + (delta > 0 ? columnInfo.width : 0);\n\n return {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n };\n }\n\n /**\n * 根据cursorIdx计算出点的位置\n * @param cursorIdx index\n * @param rt 富文本\n * @returns\n */\n protected computedCursorPosByCursorIdx(cursorIdx: number, rt: IRichText) {\n const idx = Math.round(cursorIdx);\n const leftRight = cursorIdx - idx; // >0 向右,<0 向左\n const cache = rt.getFrameCache();\n const column = this.getColumnByIndex(cache, idx);\n const height = rt.attribute.fontSize ?? (rt.attribute.textConfig?.[0] as any)?.fontSize;\n if (!column) {\n // 检查是不是空文本\n if (!cache.lines.length) {\n const b = getRichTextBounds({ ...rt.attribute, textConfig: [{ text: 'a' }] });\n return {\n x: 0,\n y1: 0,\n y2: b.height()\n };\n }\n return {\n x: 0,\n y1: 0,\n y2: height\n };\n }\n const { lineInfo, columnInfo } = column;\n const y1 = lineInfo.top;\n const y2 = lineInfo.top + lineInfo.height;\n const x = columnInfo.left + (leftRight < 0 ? 0 : columnInfo.width);\n\n return { x, y1, y2, lineInfo, columnInfo };\n }\n\n /**\n * 根据index获取columnInfo\n * @param cache 缓存\n * @param index index\n * @returns\n */\n protected getColumnByIndex(\n cache: IRichTextFrame,\n index: number\n ): {\n lineInfo: IRichTextLine;\n columnInfo: IRichTextParagraph | IRichTextIcon;\n } | null {\n // TODO 认为都是单个字符拆分的\n for (let i = 0, inputIndex = 0; i < cache.lines.length; i++) {\n const lineInfo = cache.lines[i];\n for (let j = 0; j < lineInfo.paragraphs.length; j++) {\n const columnInfo = lineInfo.paragraphs[j];\n if (inputIndex === index) {\n return {\n lineInfo,\n columnInfo\n };\n }\n inputIndex++;\n }\n }\n return null;\n }\n\n release() {\n this.deactivate(this.pluginService);\n this.editModule.release();\n }\n\n /**\n * 获取当前选择的区间范围\n * @param defaultAll 如果force为true,又没有选择,则认为选择了所有然后进行匹配,如果为false,则认为什么都没有选择,返回null\n * @returns\n */\n getSelection(defaultAll: boolean = false) {\n if (!this.currRt) {\n return null;\n }\n if (\n this.selectionStartCursorIdx != null &&\n this.curCursorIdx != null\n // this.selectionStartCursorIdx !== this.curCursorIdx &&\n ) {\n return new Selection(this.selectionStartCursorIdx, this.curCursorIdx, this.currRt);\n } else if (defaultAll) {\n return RichTextEditPlugin.CreateSelection(this.currRt);\n }\n return null;\n }\n\n forceFocus(params: { e?: PointerEvent; target: IRichText | null; cursorIndex?: number }) {\n const { target, e, cursorIndex } = params;\n if (!target) {\n return;\n }\n this.currRt = target;\n if (e) {\n this._forceFocusByEvent(e);\n } else {\n this._forceFocusByCursorIndex(cursorIndex ?? -0.1);\n }\n }\n\n protected _forceFocusByEvent(e: PointerEvent) {\n this.handleEnter();\n this.handlePointerDown(e);\n this.handlePointerUp(e);\n }\n\n protected _forceFocusByCursorIndex(cursorIndex: number) {\n const richtext = this.currRt;\n if (!richtext) {\n return;\n }\n\n let x = 0;\n let y1 = 0;\n let y2 = 2;\n let lineInfo = null;\n let columnInfo = null;\n const data = this.computedCursorPosByCursorIdx(cursorIndex, richtext);\n x = data.x;\n y1 = data.y1;\n y2 = data.y2;\n lineInfo = data.lineInfo;\n columnInfo = data.columnInfo;\n\n this.onFocus({ target: this.currRt } as any, {\n x,\n y1,\n y2,\n cursorIndex,\n lineInfo,\n columnInfo\n });\n }\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { IContributionProvider, IPlugin, IPluginService, IStage } from '../interface';
|
|
2
2
|
export declare class DefaultPluginService implements IPluginService {
|
|
3
|
-
protected readonly autoEnablePlugins: IContributionProvider<IPlugin>;
|
|
4
3
|
onStartupFinishedPlugin: IPlugin[];
|
|
5
4
|
onRegisterPlugin: IPlugin[];
|
|
6
5
|
stage: IStage;
|
|
7
6
|
actived: boolean;
|
|
8
|
-
|
|
7
|
+
protected readonly autoEnablePlugins: IContributionProvider<IPlugin>;
|
|
8
|
+
constructor(autoEnablePlugins?: IContributionProvider<IPlugin>);
|
|
9
9
|
active(stage: IStage, params: {
|
|
10
10
|
pluginList?: string[];
|
|
11
11
|
}): void;
|
|
@@ -1,32 +1,17 @@
|
|
|
1
|
-
var __decorate = this && this.__decorate || function(decorators, target, key, desc) {
|
|
2
|
-
var d, c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc;
|
|
3
|
-
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) (d = decorators[i]) && (r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r);
|
|
4
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
5
|
-
}, __metadata = this && this.__metadata || function(k, v) {
|
|
6
|
-
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
|
|
7
|
-
}, __param = this && this.__param || function(paramIndex, decorator) {
|
|
8
|
-
return function(target, key) {
|
|
9
|
-
decorator(target, key, paramIndex);
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
import { injectable, inject, named } from "../common/inversify-lite";
|
|
14
|
-
|
|
15
|
-
import { ContributionProvider } from "../common/contribution-provider";
|
|
16
|
-
|
|
17
1
|
import { AutoEnablePlugins } from "./constants";
|
|
18
2
|
|
|
19
|
-
import {
|
|
3
|
+
import { contributionRegistry } from "../common/registry";
|
|
20
4
|
|
|
21
|
-
|
|
5
|
+
export class DefaultPluginService {
|
|
22
6
|
constructor(autoEnablePlugins) {
|
|
23
|
-
this.autoEnablePlugins = autoEnablePlugins
|
|
24
|
-
|
|
7
|
+
this.autoEnablePlugins = autoEnablePlugins || {
|
|
8
|
+
getContributions: () => contributionRegistry.get(AutoEnablePlugins)
|
|
9
|
+
}, this.onStartupFinishedPlugin = [], this.onRegisterPlugin = [], this.actived = !1;
|
|
25
10
|
}
|
|
26
11
|
active(stage, params) {
|
|
27
12
|
this.stage = stage, this.actived = !0;
|
|
28
13
|
const {pluginList: pluginList} = params;
|
|
29
|
-
pluginList &&
|
|
14
|
+
pluginList && contributionRegistry.has(AutoEnablePlugins) && this.autoEnablePlugins.getContributions().forEach((p => {
|
|
30
15
|
pluginList.includes(p.name) && this.register(p);
|
|
31
16
|
}));
|
|
32
17
|
}
|
|
@@ -53,9 +38,5 @@ let DefaultPluginService = class {
|
|
|
53
38
|
plugin.deactivate(this);
|
|
54
39
|
})), this.onRegisterPlugin = [];
|
|
55
40
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
DefaultPluginService = __decorate([ injectable(), __param(0, inject(ContributionProvider)), __param(0, named(AutoEnablePlugins)), __metadata("design:paramtypes", [ Object ]) ], DefaultPluginService);
|
|
59
|
-
|
|
60
|
-
export { DefaultPluginService };
|
|
41
|
+
}
|
|
61
42
|
//# sourceMappingURL=plugin-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/plugin-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/plugins/plugin-service.ts"],"names":[],"mappings":"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","file":"plugin-service.js","sourcesContent":["import type { IContributionProvider, IPlugin, IPluginService, IStage } from '../interface';\nimport { AutoEnablePlugins } from './constants';\nimport { contributionRegistry } from '../common/registry';\n\nexport class DefaultPluginService implements IPluginService {\n declare onStartupFinishedPlugin: IPlugin[];\n declare onRegisterPlugin: IPlugin[];\n declare stage: IStage;\n declare actived: boolean;\n\n protected readonly autoEnablePlugins: IContributionProvider<IPlugin>;\n\n constructor(autoEnablePlugins?: IContributionProvider<IPlugin>) {\n // 如果没有传入,则使用 registry 获取\n this.autoEnablePlugins =\n autoEnablePlugins ||\n ({\n getContributions: () => contributionRegistry.get<IPlugin>(AutoEnablePlugins)\n } as IContributionProvider<IPlugin>);\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin = [];\n this.actived = false;\n }\n\n active(stage: IStage, params: { pluginList?: string[] }) {\n this.stage = stage;\n this.actived = true;\n\n // 启动插件\n const { pluginList } = params;\n if (pluginList && contributionRegistry.has(AutoEnablePlugins)) {\n this.autoEnablePlugins.getContributions().forEach(p => {\n if (pluginList.includes(p.name)) {\n this.register(p);\n }\n });\n }\n }\n\n findPluginsByName(name: string): IPlugin[] {\n const arr: IPlugin[] = [];\n this.onStartupFinishedPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n this.onRegisterPlugin.forEach(plugin => {\n if (plugin.name === name) {\n arr.push(plugin);\n }\n });\n return arr;\n }\n\n register(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.push(plugin);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.push(plugin);\n plugin.activate(this);\n }\n }\n unRegister(plugin: IPlugin) {\n if (plugin.activeEvent === 'onStartupFinished') {\n this.onStartupFinishedPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n } else if (plugin.activeEvent === 'onRegister') {\n this.onRegisterPlugin.splice(this.onStartupFinishedPlugin.indexOf(plugin), 1);\n }\n plugin.deactivate(this);\n }\n\n release(...params: any): void {\n this.onStartupFinishedPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onStartupFinishedPlugin = [];\n this.onRegisterPlugin.forEach(plugin => {\n plugin.deactivate(this);\n });\n this.onRegisterPlugin = [];\n }\n}\n"]}
|