@visactor/vrender-core 0.22.11 → 0.22.12
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/animate/config.d.ts +1 -2
- package/cjs/animate/config.js +1 -5
- package/cjs/animate/config.js.map +1 -1
- package/cjs/application.d.ts +2 -1
- package/cjs/application.js.map +1 -1
- package/cjs/canvas/constants.js +1 -2
- package/cjs/canvas/empty-context.d.ts +1 -0
- package/cjs/canvas/empty-context.js +4 -0
- package/cjs/canvas/empty-context.js.map +1 -1
- package/cjs/color-string/interpolate.d.ts +1 -0
- package/cjs/color-string/interpolate.js +12 -4
- package/cjs/color-string/interpolate.js.map +1 -1
- package/cjs/color-string/store.js +2 -1
- package/cjs/common/custom-path2d.js +2 -2
- package/cjs/common/custom-path2d.js.map +1 -1
- package/cjs/common/diff.d.ts +1 -0
- package/cjs/common/diff.js +19 -0
- package/cjs/common/diff.js.map +1 -0
- package/cjs/common/enums.d.ts +0 -16
- package/cjs/common/enums.js +2 -11
- package/cjs/common/enums.js.map +1 -1
- package/cjs/common/morphing-utils.js +32 -124
- package/cjs/common/morphing-utils.js.map +1 -1
- package/cjs/common/performance-raf.d.ts +8 -0
- package/cjs/common/performance-raf.js +32 -0
- package/cjs/common/performance-raf.js.map +1 -0
- package/cjs/common/polygon.js +5 -2
- package/cjs/common/polygon.js.map +1 -1
- package/cjs/common/segment/curve/cubic-bezier.d.ts +1 -2
- package/cjs/common/segment/curve/cubic-bezier.js +3 -8
- package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
- package/cjs/common/segment/curve/quadratic-bezier.d.ts +1 -0
- package/cjs/common/segment/curve/quadratic-bezier.js +10 -3
- package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/cjs/common/segment/index.d.ts +1 -0
- package/cjs/common/segment/index.js +1 -1
- package/cjs/common/segment/index.js.map +1 -1
- package/cjs/common/shape/arc.d.ts +1 -1
- package/cjs/common/shape/arc.js +7 -3
- package/cjs/common/shape/arc.js.map +1 -1
- package/cjs/common/simplify.js +1 -2
- package/cjs/common/sort.js +1 -1
- package/cjs/common/split-path.js +2 -2
- package/cjs/common/split-path.js.map +1 -1
- package/cjs/common/store.js +1 -1
- package/cjs/common/text.js +1 -1
- package/cjs/common/utils.d.ts +0 -2
- package/cjs/common/utils.js +5 -9
- package/cjs/common/utils.js.map +1 -1
- package/cjs/core/application.js +1 -1
- package/cjs/core/camera.js +1 -1
- package/cjs/core/global.d.ts +3 -0
- package/cjs/core/global.js +14 -3
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/stage.d.ts +8 -3
- package/cjs/core/stage.js +34 -20
- package/cjs/core/stage.js.map +1 -1
- package/cjs/graphic/arc.d.ts +1 -2
- package/cjs/graphic/arc.js +3 -2
- package/cjs/graphic/arc.js.map +1 -1
- package/cjs/graphic/area.d.ts +1 -2
- package/cjs/graphic/area.js +4 -1
- package/cjs/graphic/area.js.map +1 -1
- package/cjs/graphic/circle.d.ts +1 -2
- package/cjs/graphic/circle.js +5 -2
- package/cjs/graphic/circle.js.map +1 -1
- package/cjs/graphic/config.js +2 -1
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-module.js +1 -2
- package/cjs/graphic/graphic-service/graphic-module.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.js +2 -3
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +9 -12
- package/cjs/graphic/graphic.js +48 -105
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.js +8 -8
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/line.d.ts +1 -2
- package/cjs/graphic/line.js +5 -1
- package/cjs/graphic/line.js.map +1 -1
- package/cjs/graphic/rect.js +5 -2
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/graphic/richtext/icon.d.ts +1 -1
- package/cjs/graphic/richtext/icon.js.map +1 -1
- package/cjs/graphic/richtext/paragraph.js +2 -2
- package/cjs/graphic/richtext/paragraph.js.map +1 -1
- package/cjs/graphic/star.d.ts +1 -2
- package/cjs/graphic/star.js +4 -2
- package/cjs/graphic/star.js.map +1 -1
- package/cjs/index.d.ts +2 -3
- package/cjs/index.js +14 -16
- package/cjs/index.js.map +1 -1
- package/cjs/interface/animate.d.ts +1 -160
- package/cjs/interface/animate.js +1 -4
- package/cjs/interface/animate.js.map +1 -1
- package/cjs/interface/animation/animate.d.ts +117 -0
- package/cjs/interface/animation/animate.js +10 -0
- package/cjs/interface/animation/animate.js.map +1 -0
- package/cjs/interface/animation/easing.d.ts +3 -0
- package/cjs/interface/animation/easing.js +6 -0
- package/cjs/interface/animation/easing.js.map +1 -0
- package/cjs/interface/animation/index.d.ts +5 -0
- package/cjs/{animate/Ticker → interface/animation}/index.js +3 -3
- package/cjs/interface/animation/index.js.map +1 -0
- package/cjs/interface/animation/ticker.d.ts +39 -0
- package/cjs/{animate/Ticker/type.js → interface/animation/ticker.js} +1 -1
- package/cjs/interface/animation/ticker.js.map +1 -0
- package/cjs/interface/animation/timeline.d.ts +17 -0
- package/cjs/interface/animation/timeline.js +6 -0
- package/cjs/interface/animation/timeline.js.map +1 -0
- package/cjs/interface/animation/type.d.ts +13 -0
- package/cjs/interface/animation/type.js +15 -0
- package/cjs/interface/animation/type.js.map +1 -0
- package/cjs/interface/context.d.ts +1 -0
- package/cjs/interface/context.js.map +1 -1
- package/cjs/interface/global.d.ts +2 -0
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/graphic.d.ts +11 -3
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/index.d.ts +1 -1
- package/cjs/interface/index.js +9 -9
- package/cjs/interface/index.js.map +1 -1
- package/cjs/interface/render.d.ts +7 -0
- package/cjs/interface/render.js.map +1 -1
- package/cjs/interface/stage.d.ts +4 -1
- package/cjs/interface/stage.js.map +1 -1
- package/cjs/modules.d.ts +2 -1
- package/cjs/modules.js +4 -3
- package/cjs/modules.js.map +1 -1
- package/cjs/plugins/builtin-plugin/auto-render-plugin.js +9 -8
- package/cjs/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +14 -11
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +13 -10
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
- package/cjs/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +2 -2
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +6 -5
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/cjs/render/contributions/render/arc-render.d.ts +4 -2
- package/cjs/render/contributions/render/arc-render.js +19 -17
- package/cjs/render/contributions/render/arc-render.js.map +1 -1
- package/cjs/render/contributions/render/area-render.js +2 -2
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-render.d.ts +2 -2
- package/cjs/render/contributions/render/base-render.js +2 -2
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +1 -0
- package/cjs/render/contributions/render/draw-contribution.js +23 -19
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.js +2 -1
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/group-render.d.ts +2 -2
- package/cjs/render/contributions/render/group-render.js +15 -11
- package/cjs/render/contributions/render/group-render.js.map +1 -1
- package/cjs/render/contributions/render/line-render.js +1 -1
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/rect-render.d.ts +3 -1
- package/cjs/render/contributions/render/rect-render.js +17 -15
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/symbol-render.d.ts +4 -2
- package/cjs/render/contributions/render/symbol-render.js +16 -11
- package/cjs/render/contributions/render/symbol-render.js.map +1 -1
- package/cjs/render/render-service.d.ts +1 -1
- package/cjs/render/render-service.js.map +1 -1
- package/dist/index.es.js +5990 -8837
- package/es/animate/config.d.ts +1 -2
- package/es/animate/config.js +0 -5
- package/es/animate/config.js.map +1 -1
- package/es/application.d.ts +2 -1
- package/es/application.js.map +1 -1
- package/es/canvas/constants.js +1 -2
- package/es/canvas/empty-context.d.ts +1 -0
- package/es/canvas/empty-context.js +4 -0
- package/es/canvas/empty-context.js.map +1 -1
- package/es/color-string/interpolate.d.ts +1 -0
- package/es/color-string/interpolate.js +8 -1
- package/es/color-string/interpolate.js.map +1 -1
- package/es/color-string/store.js +2 -1
- package/es/common/custom-path2d.js +2 -2
- package/es/common/custom-path2d.js.map +1 -1
- package/es/common/diff.d.ts +1 -0
- package/es/common/diff.js +11 -0
- package/es/common/diff.js.map +1 -0
- package/es/common/enums.d.ts +0 -16
- package/es/common/enums.js +0 -20
- package/es/common/enums.js.map +1 -1
- package/es/common/morphing-utils.js +29 -124
- package/es/common/morphing-utils.js.map +1 -1
- package/es/common/performance-raf.d.ts +8 -0
- package/es/common/performance-raf.js +24 -0
- package/es/common/performance-raf.js.map +1 -0
- package/es/common/polygon.js +6 -3
- package/es/common/polygon.js.map +1 -1
- package/es/common/segment/curve/cubic-bezier.d.ts +1 -2
- package/es/common/segment/curve/cubic-bezier.js +1 -8
- package/es/common/segment/curve/cubic-bezier.js.map +1 -1
- package/es/common/segment/curve/quadratic-bezier.d.ts +1 -0
- package/es/common/segment/curve/quadratic-bezier.js +5 -2
- package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
- package/es/common/segment/index.d.ts +1 -0
- package/es/common/segment/index.js +2 -0
- package/es/common/segment/index.js.map +1 -1
- package/es/common/shape/arc.d.ts +1 -1
- package/es/common/shape/arc.js +7 -3
- package/es/common/shape/arc.js.map +1 -1
- package/es/common/simplify.js +1 -2
- package/es/common/sort.js +1 -1
- package/es/common/split-path.js +2 -2
- package/es/common/split-path.js.map +1 -1
- package/es/common/store.js +1 -1
- package/es/common/text.js +1 -1
- package/es/common/utils.d.ts +0 -2
- package/es/common/utils.js +1 -5
- package/es/common/utils.js.map +1 -1
- package/es/core/application.js +1 -1
- package/es/core/camera.js +1 -1
- package/es/core/global.d.ts +3 -0
- package/es/core/global.js +15 -2
- package/es/core/global.js.map +1 -1
- package/es/core/stage.d.ts +8 -3
- package/es/core/stage.js +35 -22
- package/es/core/stage.js.map +1 -1
- package/es/graphic/arc.d.ts +1 -2
- package/es/graphic/arc.js +3 -2
- package/es/graphic/arc.js.map +1 -1
- package/es/graphic/area.d.ts +1 -2
- package/es/graphic/area.js +4 -1
- package/es/graphic/area.js.map +1 -1
- package/es/graphic/circle.d.ts +1 -2
- package/es/graphic/circle.js +4 -2
- package/es/graphic/circle.js.map +1 -1
- package/es/graphic/config.js +2 -1
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/graphic-service/graphic-module.js +1 -1
- package/es/graphic/graphic-service/graphic-module.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.js +1 -4
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +9 -12
- package/es/graphic/graphic.js +52 -109
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.js +7 -7
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/line.d.ts +1 -2
- package/es/graphic/line.js +5 -1
- package/es/graphic/line.js.map +1 -1
- package/es/graphic/rect.js +5 -2
- package/es/graphic/rect.js.map +1 -1
- package/es/graphic/richtext/icon.d.ts +1 -1
- package/es/graphic/richtext/icon.js.map +1 -1
- package/es/graphic/richtext/paragraph.js +2 -2
- package/es/graphic/richtext/paragraph.js.map +1 -1
- package/es/graphic/star.d.ts +1 -2
- package/es/graphic/star.js +4 -2
- package/es/graphic/star.js.map +1 -1
- package/es/index.d.ts +2 -3
- package/es/index.js +4 -6
- package/es/index.js.map +1 -1
- package/es/interface/animate.d.ts +1 -160
- package/es/interface/animate.js +2 -1
- package/es/interface/animate.js.map +1 -1
- package/es/interface/animation/animate.d.ts +117 -0
- package/es/interface/animation/animate.js +6 -0
- package/es/interface/animation/animate.js.map +1 -0
- package/es/interface/animation/easing.d.ts +3 -0
- package/es/interface/animation/easing.js +2 -0
- package/es/interface/animation/easing.js.map +1 -0
- package/es/interface/animation/index.d.ts +5 -0
- package/es/interface/animation/index.js +10 -0
- package/es/interface/animation/index.js.map +1 -0
- package/es/interface/animation/ticker.d.ts +39 -0
- package/es/{animate/Ticker/type.js → interface/animation/ticker.js} +1 -1
- package/es/interface/animation/ticker.js.map +1 -0
- package/es/interface/animation/timeline.d.ts +17 -0
- package/es/interface/animation/timeline.js +2 -0
- package/es/interface/animation/timeline.js.map +1 -0
- package/es/interface/animation/type.d.ts +13 -0
- package/es/interface/animation/type.js +14 -0
- package/es/interface/animation/type.js.map +1 -0
- package/es/interface/context.d.ts +1 -0
- package/es/interface/context.js.map +1 -1
- package/es/interface/global.d.ts +2 -0
- package/es/interface/global.js.map +1 -1
- package/es/interface/graphic.d.ts +11 -3
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/index.d.ts +1 -1
- package/es/interface/index.js +2 -2
- package/es/interface/index.js.map +1 -1
- package/es/interface/render.d.ts +7 -0
- package/es/interface/render.js.map +1 -1
- package/es/interface/stage.d.ts +4 -1
- package/es/interface/stage.js.map +1 -1
- package/es/modules.d.ts +2 -1
- package/es/modules.js +6 -0
- package/es/modules.js.map +1 -1
- package/es/plugins/builtin-plugin/auto-render-plugin.js +8 -8
- package/es/plugins/builtin-plugin/auto-render-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +13 -12
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +12 -11
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +0 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js +8 -5
- package/es/plugins/builtin-plugin/incremental-auto-render-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +2 -2
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js +4 -5
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/es/render/contributions/render/arc-render.d.ts +4 -2
- package/es/render/contributions/render/arc-render.js +19 -17
- package/es/render/contributions/render/arc-render.js.map +1 -1
- package/es/render/contributions/render/area-render.js +2 -2
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-render.d.ts +2 -2
- package/es/render/contributions/render/base-render.js +2 -2
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +1 -0
- package/es/render/contributions/render/draw-contribution.js +23 -19
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.js +2 -1
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/group-render.d.ts +2 -2
- package/es/render/contributions/render/group-render.js +15 -11
- package/es/render/contributions/render/group-render.js.map +1 -1
- package/es/render/contributions/render/line-render.js +1 -1
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/rect-render.d.ts +3 -1
- package/es/render/contributions/render/rect-render.js +17 -14
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/symbol-render.d.ts +4 -2
- package/es/render/contributions/render/symbol-render.js +16 -11
- package/es/render/contributions/render/symbol-render.js.map +1 -1
- package/es/render/render-service.d.ts +1 -1
- package/es/render/render-service.js.map +1 -1
- package/package.json +4 -4
- package/cjs/animate/Ticker/default-ticker.d.ts +0 -40
- package/cjs/animate/Ticker/default-ticker.js +0 -140
- package/cjs/animate/Ticker/default-ticker.js.map +0 -1
- package/cjs/animate/Ticker/index.d.ts +0 -5
- package/cjs/animate/Ticker/index.js.map +0 -1
- package/cjs/animate/Ticker/manual-ticker-handler.d.ts +0 -15
- package/cjs/animate/Ticker/manual-ticker-handler.js +0 -36
- package/cjs/animate/Ticker/manual-ticker-handler.js.map +0 -1
- package/cjs/animate/Ticker/manual-ticker.d.ts +0 -19
- package/cjs/animate/Ticker/manual-ticker.js +0 -37
- package/cjs/animate/Ticker/manual-ticker.js.map +0 -1
- package/cjs/animate/Ticker/raf-tick-handler.d.ts +0 -9
- package/cjs/animate/Ticker/raf-tick-handler.js +0 -30
- package/cjs/animate/Ticker/raf-tick-handler.js.map +0 -1
- package/cjs/animate/Ticker/timeout-tick-handler.d.ts +0 -9
- package/cjs/animate/Ticker/timeout-tick-handler.js +0 -28
- package/cjs/animate/Ticker/timeout-tick-handler.js.map +0 -1
- package/cjs/animate/Ticker/type.d.ts +0 -6
- package/cjs/animate/Ticker/type.js.map +0 -1
- package/cjs/animate/animate.d.ts +0 -147
- package/cjs/animate/animate.js +0 -403
- package/cjs/animate/animate.js.map +0 -1
- package/cjs/animate/custom-animate.d.ts +0 -236
- package/cjs/animate/custom-animate.js +0 -726
- package/cjs/animate/custom-animate.js.map +0 -1
- package/cjs/animate/default-ticker.d.ts +0 -2
- package/cjs/animate/default-ticker.js +0 -14
- package/cjs/animate/default-ticker.js.map +0 -1
- package/cjs/animate/easing-func.d.ts +0 -1
- package/cjs/animate/easing-func.js +0 -16
- package/cjs/animate/easing-func.js.map +0 -1
- package/cjs/animate/easing.d.ts +0 -49
- package/cjs/animate/easing.js +0 -141
- package/cjs/animate/easing.js.map +0 -1
- package/cjs/animate/group-fade.d.ts +0 -16
- package/cjs/animate/group-fade.js +0 -66
- package/cjs/animate/group-fade.js.map +0 -1
- package/cjs/animate/index.d.ts +0 -8
- package/cjs/animate/index.js +0 -24
- package/cjs/animate/index.js.map +0 -1
- package/cjs/animate/morphing.d.ts +0 -52
- package/cjs/animate/morphing.js +0 -292
- package/cjs/animate/morphing.js.map +0 -1
- package/cjs/animate/timeline.d.ts +0 -17
- package/cjs/animate/timeline.js +0 -46
- package/cjs/animate/timeline.js.map +0 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
- package/es/animate/Ticker/default-ticker.d.ts +0 -40
- package/es/animate/Ticker/default-ticker.js +0 -138
- package/es/animate/Ticker/default-ticker.js.map +0 -1
- package/es/animate/Ticker/index.d.ts +0 -5
- package/es/animate/Ticker/index.js +0 -10
- package/es/animate/Ticker/index.js.map +0 -1
- package/es/animate/Ticker/manual-ticker-handler.d.ts +0 -15
- package/es/animate/Ticker/manual-ticker-handler.js +0 -28
- package/es/animate/Ticker/manual-ticker-handler.js.map +0 -1
- package/es/animate/Ticker/manual-ticker.d.ts +0 -19
- package/es/animate/Ticker/manual-ticker.js +0 -31
- package/es/animate/Ticker/manual-ticker.js.map +0 -1
- package/es/animate/Ticker/raf-tick-handler.d.ts +0 -9
- package/es/animate/Ticker/raf-tick-handler.js +0 -22
- package/es/animate/Ticker/raf-tick-handler.js.map +0 -1
- package/es/animate/Ticker/timeout-tick-handler.d.ts +0 -9
- package/es/animate/Ticker/timeout-tick-handler.js +0 -20
- package/es/animate/Ticker/timeout-tick-handler.js.map +0 -1
- package/es/animate/Ticker/type.d.ts +0 -6
- package/es/animate/Ticker/type.js.map +0 -1
- package/es/animate/animate.d.ts +0 -147
- package/es/animate/animate.js +0 -398
- package/es/animate/animate.js.map +0 -1
- package/es/animate/custom-animate.d.ts +0 -236
- package/es/animate/custom-animate.js +0 -703
- package/es/animate/custom-animate.js.map +0 -1
- package/es/animate/default-ticker.d.ts +0 -2
- package/es/animate/default-ticker.js +0 -12
- package/es/animate/default-ticker.js.map +0 -1
- package/es/animate/easing-func.d.ts +0 -1
- package/es/animate/easing-func.js +0 -10
- package/es/animate/easing-func.js.map +0 -1
- package/es/animate/easing.d.ts +0 -49
- package/es/animate/easing.js +0 -134
- package/es/animate/easing.js.map +0 -1
- package/es/animate/group-fade.d.ts +0 -16
- package/es/animate/group-fade.js +0 -56
- package/es/animate/group-fade.js.map +0 -1
- package/es/animate/index.d.ts +0 -8
- package/es/animate/index.js +0 -16
- package/es/animate/index.js.map +0 -1
- package/es/animate/morphing.d.ts +0 -52
- package/es/animate/morphing.js +0 -295
- package/es/animate/morphing.js.map +0 -1
- package/es/animate/timeline.d.ts +0 -17
- package/es/animate/timeline.js +0 -42
- package/es/animate/timeline.js.map +0 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
- package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
package/es/common/enums.d.ts
CHANGED
|
@@ -36,22 +36,6 @@ export declare enum AttributeUpdateType {
|
|
|
36
36
|
ROTATE = 24,
|
|
37
37
|
ROTATE_TO = 25
|
|
38
38
|
}
|
|
39
|
-
export declare enum AnimateStatus {
|
|
40
|
-
INITIAL = 0,
|
|
41
|
-
RUNNING = 1,
|
|
42
|
-
PAUSED = 2,
|
|
43
|
-
END = 3
|
|
44
|
-
}
|
|
45
|
-
export declare enum AnimateMode {
|
|
46
|
-
NORMAL = 0,
|
|
47
|
-
SET_ATTR_IMMEDIATELY = 1
|
|
48
|
-
}
|
|
49
|
-
export declare enum AnimateStepType {
|
|
50
|
-
'wait' = "wait",
|
|
51
|
-
'from' = "from",
|
|
52
|
-
'to' = "to",
|
|
53
|
-
'customAnimate' = "customAnimate"
|
|
54
|
-
}
|
|
55
39
|
export declare enum Direction {
|
|
56
40
|
ROW = 1,
|
|
57
41
|
COLUMN = 2
|
package/es/common/enums.js
CHANGED
|
@@ -30,26 +30,6 @@ export var AttributeUpdateType;
|
|
|
30
30
|
AttributeUpdateType[AttributeUpdateType.ROTATE_TO = 25] = "ROTATE_TO";
|
|
31
31
|
}(AttributeUpdateType || (AttributeUpdateType = {}));
|
|
32
32
|
|
|
33
|
-
export var AnimateStatus;
|
|
34
|
-
|
|
35
|
-
!function(AnimateStatus) {
|
|
36
|
-
AnimateStatus[AnimateStatus.INITIAL = 0] = "INITIAL", AnimateStatus[AnimateStatus.RUNNING = 1] = "RUNNING",
|
|
37
|
-
AnimateStatus[AnimateStatus.PAUSED = 2] = "PAUSED", AnimateStatus[AnimateStatus.END = 3] = "END";
|
|
38
|
-
}(AnimateStatus || (AnimateStatus = {}));
|
|
39
|
-
|
|
40
|
-
export var AnimateMode;
|
|
41
|
-
|
|
42
|
-
!function(AnimateMode) {
|
|
43
|
-
AnimateMode[AnimateMode.NORMAL = 0] = "NORMAL", AnimateMode[AnimateMode.SET_ATTR_IMMEDIATELY = 1] = "SET_ATTR_IMMEDIATELY";
|
|
44
|
-
}(AnimateMode || (AnimateMode = {}));
|
|
45
|
-
|
|
46
|
-
export var AnimateStepType;
|
|
47
|
-
|
|
48
|
-
!function(AnimateStepType) {
|
|
49
|
-
AnimateStepType.wait = "wait", AnimateStepType.from = "from", AnimateStepType.to = "to",
|
|
50
|
-
AnimateStepType.customAnimate = "customAnimate";
|
|
51
|
-
}(AnimateStepType || (AnimateStepType = {}));
|
|
52
|
-
|
|
53
33
|
export var Direction;
|
|
54
34
|
|
|
55
35
|
!function(Direction) {
|
package/es/common/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/enums.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,yCAAiB,CAAA;IACjB,2DAA0B,CAAA;IAC1B,yDAAyB,CAAA;IACzB,yDAAwB,CAAA;IACxB,+EAAoC,CAAA;IACpC,2CAAiB,CAAA;IACjB,2DAAyB,CAAA;IACzB,0EAAiC,CAAA;IACjC,yEAAgC,CAAA;IAChC,wEAAgC,CAAA;IAChC,uEAA+B,CAAA;IAC/B,sFAAuC,CAAA;IACvC,6DAA0B,CAAA;IAC1B,2DAAyB,CAAA;AAC3B,CAAC,EAfW,SAAS,KAAT,SAAS,QAepB;AAED,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,6DAAmB,CAAA;IACnB,4DAAkB,CAAA;IAClB,+EAA4B,CAAA;IAC5B,8EAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,MAAM,CAAN,IAAY,mBAiBX;AAjBD,WAAY,mBAAmB;IAC7B,6DAAQ,CAAA;IACR,mEAAW,CAAA;IACX,+DAAS,CAAA;IAET,8EAAiB,CAAA;IACjB,8EAAiB,CAAA;IACjB,gFAAkB,CAAA;IAClB,kFAAmB,CAAA;IACnB,4EAAgB,CAAA;IAEhB,wEAAc,CAAA;IACd,8EAAiB,CAAA;IACjB,gEAAU,CAAA;IACV,sEAAa,CAAA;IACb,kEAAW,CAAA;IACX,wEAAc,CAAA;AAChB,CAAC,EAjBW,mBAAmB,KAAnB,mBAAmB,QAiB9B;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"sources":["../src/common/enums.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,yCAAiB,CAAA;IACjB,2DAA0B,CAAA;IAC1B,yDAAyB,CAAA;IACzB,yDAAwB,CAAA;IACxB,+EAAoC,CAAA;IACpC,2CAAiB,CAAA;IACjB,2DAAyB,CAAA;IACzB,0EAAiC,CAAA;IACjC,yEAAgC,CAAA;IAChC,wEAAgC,CAAA;IAChC,uEAA+B,CAAA;IAC/B,sFAAuC,CAAA;IACvC,6DAA0B,CAAA;IAC1B,2DAAyB,CAAA;AAC3B,CAAC,EAfW,SAAS,KAAT,SAAS,QAepB;AAED,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,6DAAmB,CAAA;IACnB,4DAAkB,CAAA;IAClB,+EAA4B,CAAA;IAC5B,8EAA2B,CAAA;AAC7B,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,MAAM,CAAN,IAAY,mBAiBX;AAjBD,WAAY,mBAAmB;IAC7B,6DAAQ,CAAA;IACR,mEAAW,CAAA;IACX,+DAAS,CAAA;IAET,8EAAiB,CAAA;IACjB,8EAAiB,CAAA;IACjB,gFAAkB,CAAA;IAClB,kFAAmB,CAAA;IACnB,4EAAgB,CAAA;IAEhB,wEAAc,CAAA;IACd,8EAAiB,CAAA;IACjB,gEAAU,CAAA;IACV,sEAAa,CAAA;IACb,kEAAW,CAAA;IACX,wEAAc,CAAA;AAChB,CAAC,EAjBW,mBAAmB,KAAnB,mBAAmB,QAiB9B;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uCAAO,CAAA;IACP,6CAAU,CAAA;AACZ,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,yEAAoB,CAAA;IACpB,iFAAwB,CAAA;IACxB,yDAAY,CAAA;IACZ,2DAAa,CAAA;IACb,iEAAgB,CAAA;IAChB,2DAAa,CAAA;AACf,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,CAAN,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,mGAAgB,CAAA;IAChB,iGAAe,CAAA;AACjB,CAAC,EAHW,0BAA0B,KAA1B,0BAA0B,QAGrC","file":"enums.js","sourcesContent":["export enum UpdateTag {\n NONE = 0b00000000,\n UPDATE_BOUNDS = 0b00000001, // bounds有更新\n UPDATE_SHAPE = 0b00000010, // shape有更新\n CLEAR_SHAPE = 0b11111101,\n UPDATE_SHAPE_AND_BOUNDS = 0b00000011, // shape&bounds有更新\n INIT = 0b10110011,\n CLEAR_BOUNDS = 0b11111110, // 清除bounds更新位\n UPDATE_GLOBAL_MATRIX = 0b00100000, // 更新全局matrix\n CLEAR_GLOBAL_MATRIX = 0b11011111, // 清除全局matrix\n UPDATE_LOCAL_MATRIX = 0b00010000, // 更新局部matrix\n CLEAR_LOCAL_MATRIX = 0b11101111, // 清除局部matrix\n UPDATE_GLOBAL_LOCAL_MATRIX = 0b00110000, // 更新全局和局部matrix\n UPDATE_LAYOUT = 0b10000000, // 布局需要更新\n CLEAR_LAYOUT = 0b01111111 // 清楚布局更新\n}\n\nexport enum IContainPointMode {\n GLOBAL = 0b00000001, // 传入的点是全局坐标\n LOCAL = 0b00010000, // 传入的点是局部坐标\n GLOBAL_ACCURATE = 0b00000011, // 使用精确的全局匹配\n LOCAL_ACCURATE = 0b00110000 // 使用精确的局部匹配\n}\n\nexport enum AttributeUpdateType {\n INIT = 0,\n DEFAULT = 1,\n STATE = 2,\n\n ANIMATE_BIND = 10,\n ANIMATE_PLAY = 11,\n ANIMATE_START = 12,\n ANIMATE_UPDATE = 13,\n ANIMATE_END = 14,\n\n TRANSLATE = 20,\n TRANSLATE_TO = 21,\n SCALE = 22,\n SCALE_TO = 23,\n ROTATE = 24,\n ROTATE_TO = 25\n}\n\nexport enum Direction {\n ROW = 1,\n COLUMN = 2\n}\n\nexport enum CurveTypeEnum {\n CubicBezierCurve = 0,\n QuadraticBezierCurve = 1,\n ArcCurve = 2,\n LineCurve = 3,\n EllipseCurve = 4,\n MoveCurve = 5\n}\n\nexport enum BaseRenderContributionTime {\n beforeFillStroke,\n afterFillStroke\n}\n"]}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import { getAngleByPoint, isNumberClose, PointService } from "@visactor/vutils";
|
|
2
|
-
|
|
3
1
|
import { CustomPath2D } from "./custom-path2d";
|
|
4
2
|
|
|
5
|
-
import { enumCommandMap } from "./path-svg";
|
|
6
|
-
|
|
7
|
-
import { addArcToBezierPath } from "./shape/arc";
|
|
8
|
-
|
|
9
3
|
export function cubicSubdivide(p0, p1, p2, p3, t, out) {
|
|
10
4
|
const p01 = (p1 - p0) * t + p0, p12 = (p2 - p1) * t + p1, p23 = (p3 - p2) * t + p2, p012 = (p12 - p01) * t + p01, p123 = (p23 - p12) * t + p12, p0123 = (p123 - p012) * t + p012;
|
|
11
5
|
out[0] = p0, out[1] = p01, out[2] = p012, out[3] = p0123, out[4] = p0123, out[5] = p123,
|
|
@@ -134,127 +128,38 @@ export function alignBezierCurves(array1, array2) {
|
|
|
134
128
|
return [ newArray1, newArray2 ];
|
|
135
129
|
}
|
|
136
130
|
|
|
137
|
-
const addLineToBezierPath = (bezierPath, x0, y0, x1, y1) => {
|
|
138
|
-
isNumberClose(x0, x1) && isNumberClose(y0, y1) || bezierPath.push(x0, y0, x1, y1, x1, y1);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
131
|
export function pathToBezierCurves(path) {
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
let
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
x1
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
break;
|
|
170
|
-
|
|
171
|
-
case enumCommandMap.A:
|
|
172
|
-
{
|
|
173
|
-
const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = rx, startAngle = cmd[4], endAngle = cmd[5], counterClockwise = !!cmd[6];
|
|
174
|
-
x1 = Math.cos(startAngle) * rx + cx, y1 = Math.sin(startAngle) * rx + cy, isFirst ? (x0 = x1,
|
|
175
|
-
y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
|
|
176
|
-
xi = Math.cos(endAngle) * rx + cx, yi = Math.sin(endAngle) * rx + cy;
|
|
177
|
-
const step = (counterClockwise ? -1 : 1) * Math.PI / 2;
|
|
178
|
-
for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {
|
|
179
|
-
const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
|
|
180
|
-
addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);
|
|
181
|
-
}
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
case enumCommandMap.E:
|
|
186
|
-
{
|
|
187
|
-
const cx = cmd[1], cy = cmd[2], rx = cmd[3], ry = cmd[4], rotate = cmd[5], startAngle = cmd[6], endAngle = cmd[7] + startAngle, anticlockwise = !!cmd[8], hasRotate = !isNumberClose(rotate, 0), rc = Math.cos(rotate), rs = Math.sin(rotate);
|
|
188
|
-
let xTemp = Math.cos(startAngle) * rx, yTemp = Math.sin(startAngle) * ry;
|
|
189
|
-
hasRotate ? (x1 = xTemp * rc - yTemp * rs + cx, y1 = xTemp * rs + yTemp * rc + cy) : (x1 = xTemp + cx,
|
|
190
|
-
y1 = yTemp + cy), isFirst ? (x0 = x1, y0 = y1, createNewSubpath(x0, y0)) : addLineToBezierPath(currentSubpath, xi, yi, x1, y1),
|
|
191
|
-
xTemp = Math.cos(endAngle) * rx, yTemp = Math.sin(endAngle) * ry, hasRotate ? (xi = xTemp * rc - yTemp * rs + cx,
|
|
192
|
-
yi = xTemp * rs + yTemp * rc + cy) : (xi = xTemp + cx, yi = yTemp + cy);
|
|
193
|
-
const step = (anticlockwise ? -1 : 1) * Math.PI / 2;
|
|
194
|
-
for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {
|
|
195
|
-
const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);
|
|
196
|
-
if (addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry), hasRotate) {
|
|
197
|
-
const curLen = currentSubpath.length;
|
|
198
|
-
for (let j = curLen - 6; j <= curLen - 1; j += 2) xTemp = currentSubpath[j], yTemp = currentSubpath[j + 1],
|
|
199
|
-
currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx, currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
case enumCommandMap.R:
|
|
206
|
-
x0 = xi = cmd[1], y0 = yi = cmd[2], x1 = x0 + cmd[3], y1 = y0 + cmd[4], createNewSubpath(x1, y0),
|
|
207
|
-
addLineToBezierPath(currentSubpath, x1, y0, x1, y1), addLineToBezierPath(currentSubpath, x1, y1, x0, y1),
|
|
208
|
-
addLineToBezierPath(currentSubpath, x0, y1, x0, y0), addLineToBezierPath(currentSubpath, x0, y0, x1, y0);
|
|
209
|
-
break;
|
|
210
|
-
|
|
211
|
-
case enumCommandMap.AT:
|
|
212
|
-
{
|
|
213
|
-
const tx1 = cmd[1], ty1 = cmd[2], tx2 = cmd[3], ty2 = cmd[4], r = cmd[5], dis1 = PointService.distancePP({
|
|
214
|
-
x: xi,
|
|
215
|
-
y: yi
|
|
216
|
-
}, {
|
|
217
|
-
x: tx1,
|
|
218
|
-
y: ty1
|
|
219
|
-
}), dis2 = PointService.distancePP({
|
|
220
|
-
x: tx2,
|
|
221
|
-
y: ty2
|
|
222
|
-
}, {
|
|
223
|
-
x: tx1,
|
|
224
|
-
y: ty1
|
|
225
|
-
}), theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2), dis = r / Math.sin(theta / 2), midX = (xi + tx2 - 2 * tx1) / 2, midY = (yi + ty2 - 2 * ty1) / 2, midLen = PointService.distancePP({
|
|
226
|
-
x: midX,
|
|
227
|
-
y: midY
|
|
228
|
-
}, {
|
|
229
|
-
x: 0,
|
|
230
|
-
y: 0
|
|
231
|
-
}), cx = tx1 + dis * midX / midLen, cy = tx2 + dis * midY / midLen, disP = Math.sqrt(dis * dis - r * r);
|
|
232
|
-
x0 = tx1 + disP * (xi - tx1) / dis1, y0 = ty1 + disP * (yi - ty1) / dis1, addLineToBezierPath(currentSubpath, xi, yi, x0, y0),
|
|
233
|
-
xi = tx1 + disP * (tx2 - tx1) / dis2, yi = ty1 + disP * (ty2 - ty1) / dis2;
|
|
234
|
-
const startAngle = getAngleByPoint({
|
|
235
|
-
x: cx,
|
|
236
|
-
y: cy
|
|
237
|
-
}, {
|
|
238
|
-
x: x0,
|
|
239
|
-
y: y0
|
|
240
|
-
}), endAngle = getAngleByPoint({
|
|
241
|
-
x: cx,
|
|
242
|
-
y: cy
|
|
243
|
-
}, {
|
|
244
|
-
x: xi,
|
|
245
|
-
y: yi
|
|
246
|
-
});
|
|
247
|
-
addArcToBezierPath(currentSubpath, startAngle, endAngle, cx, cy, r, r);
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
case enumCommandMap.Z:
|
|
252
|
-
currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0), xi = x0,
|
|
253
|
-
yi = y0;
|
|
132
|
+
const tempPath = new CustomPath2D, svgPathString = path.toString();
|
|
133
|
+
if (!svgPathString) return [];
|
|
134
|
+
tempPath.fromString(svgPathString);
|
|
135
|
+
const curves = tempPath.tryBuildCurves();
|
|
136
|
+
if (!curves || 0 === curves.length) return [];
|
|
137
|
+
const bezierSubpaths = [];
|
|
138
|
+
let currentSubpath = null;
|
|
139
|
+
currentSubpath = [];
|
|
140
|
+
let firstX = 0, firstY = 0, lastX = 0, lastY = 0, isSubpathStart = !0, isPathClosed = !1;
|
|
141
|
+
for (let i = 0; i < curves.length; i++) {
|
|
142
|
+
const curve = curves[i];
|
|
143
|
+
if (isSubpathStart && (firstX = curve.p0.x, firstY = curve.p0.y, lastX = firstX,
|
|
144
|
+
lastY = firstY, currentSubpath = [ firstX, firstY ], bezierSubpaths.push(currentSubpath),
|
|
145
|
+
isSubpathStart = !1), curve.p1 && curve.p2 && curve.p3) currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y),
|
|
146
|
+
lastX = curve.p3.x, lastY = curve.p3.y; else if (curve.p1 && curve.p2) {
|
|
147
|
+
const x1 = curve.p1.x, y1 = curve.p1.y, x2 = curve.p2.x, y2 = curve.p2.y;
|
|
148
|
+
currentSubpath.push(lastX + 2 / 3 * (x1 - lastX), lastY + 2 / 3 * (y1 - lastY), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2),
|
|
149
|
+
lastX = x2, lastY = y2;
|
|
150
|
+
} else if (curve.p1) {
|
|
151
|
+
const endX = curve.p1.x, endY = curve.p1.y;
|
|
152
|
+
Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10 || currentSubpath.push(lastX, lastY, endX, endY, endX, endY),
|
|
153
|
+
lastX = endX, lastY = endY;
|
|
154
|
+
}
|
|
155
|
+
if (i === curves.length - 1 && Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10 && (isPathClosed = !0),
|
|
156
|
+
i < curves.length - 1) {
|
|
157
|
+
const nextCurve = curves[i + 1];
|
|
158
|
+
(Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) && (isSubpathStart = !0);
|
|
254
159
|
}
|
|
255
160
|
}
|
|
256
|
-
|
|
257
|
-
|
|
161
|
+
const validSubpaths = bezierSubpaths.filter((subpath => subpath.length > 2));
|
|
162
|
+
return 1 === validSubpaths.length ? [ validSubpaths[0] ] : validSubpaths;
|
|
258
163
|
}
|
|
259
164
|
|
|
260
165
|
export function applyTransformOnBezierCurves(bezierCurves, martrix) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,GAAa;IACrG,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAEnC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACZ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACb,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAEf,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACf,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACb,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,QAAkB;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAC7B;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,kBAAkB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAEhD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;QACtC,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9B,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjB,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,SAAS;SACV;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;YAEhC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3C,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAG3C,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEhB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACxE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SAEjB;QACD,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;KACnC;IAED,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,WAAqB,EAAE,YAAsB;IAClE,MAAM,WAAW,GAAG,WAAW,IAAI,YAAY,CAAC;IAChD,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/C,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACtB,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;KAC3B;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACpC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAE/C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACnD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5B,UAAU,IAAI,CAAC,CAAC;QAChB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;KACrB;IAED,IAAI,UAAU,KAAK,CAAC,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KAC1C;IAED,OAAO,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC;AAKD,SAAS,sBAAsB,CAAC,cAAwB,EAAE,YAAsB,EAAE,MAAgB,EAAE,IAAc;IAChH,MAAM,WAAW,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAEzE,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEzC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACnB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SAC5B;QACD,IAAI,KAAK,GAAG,SAAS,EAAE;YACrB,SAAS,GAAG,KAAK,CAAC;YAClB,UAAU,GAAG,MAAM,CAAC;SACrB;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAOD,MAAM,UAAU,wBAAwB,CACtC,OAAmB,EACnB,KAAiB,EACjB,oBAA4B,EAC5B,gBAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,gBAAyB,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAEhD,IAAI,gBAAgB,IAAI,IAAI,EAAE;YAI5B,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAClD;QAED,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAG,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC;QACrC,IAAI,gBAAgB,EAAE;YAEpB,iBAAiB,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;SACvD;QACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5F,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAEhC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACjE,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACtE;QACD,oBAAoB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,oBAAoB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpE,IAAI,oBAAoB,GAAG,CAAC,EAAE;YAC5B,MAAM,IAAI,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;YACrD,KAAK,IAAI,KAAK,GAAG,CAAC,gBAAgB,GAAG,CAAC,EAAE,KAAK,IAAI,gBAAgB,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE;gBACpF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;gBAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;oBACpD,MAAM,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBACnC,MAAM,EAAE,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACxC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAG5C,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBAChC,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;oBAEhC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBAClB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;oBAEtB,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBAKtB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;iBAC5B;gBAED,IAAI,KAAK,GAAG,SAAS,EAAE;oBACrB,SAAS,GAAG,KAAK,CAAC;oBAClB,SAAS,GAAG,KAAK,CAAC;oBAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtC,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;qBACnC;iBACF;aACF;SACF;aAAM;YACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/B,kBAAkB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrD,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;aAC9D;SACF;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,oBAAoB;YAC1B,EAAE,EAAE,kBAAkB;YACtB,MAAM;YACN,IAAI;YACJ,QAAQ,EAAE,CAAC,SAAS;SACrB,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD,MAAM,UAAU,iBAAiB,CAAC,MAAkB,EAAE,MAAkB;IACtE,IAAI,YAAY,CAAC;IACjB,IAAI,YAAY,CAAC;IAEjB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,WAAW,CAAC;QAChB,IAAI,WAAW,CAAC;QAEhB,IAAI,CAAC,QAAQ,EAAE;YACb,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACpD,WAAW,GAAG,QAAQ,CAAC;SACxB;aAAM,IAAI,CAAC,QAAQ,EAAE;YACpB,WAAW,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACpD,WAAW,GAAG,QAAQ,CAAC;SACxB;aAAM;YACL,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9D,YAAY,GAAG,WAAW,CAAC;YAC3B,YAAY,GAAG,WAAW,CAAC;SAC5B;QAED,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC7B;IAED,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,UAAoB,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE;IACnG,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;QACrD,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KACzC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAErC,MAAM,iBAAiB,GAAe,EAAE,CAAC;IACzC,IAAI,cAAwB,CAAC;IAG7B,IAAI,EAAE,GAAW,CAAC,CAAC;IACnB,IAAI,EAAE,GAAW,CAAC,CAAC;IAEnB,IAAI,EAAE,GAAW,CAAC,CAAC;IACnB,IAAI,EAAE,GAAW,CAAC,CAAC;IAEnB,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QAEhD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACxC;QACD,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC;IAGF,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IAEf,IAAI,EAAU,CAAC;IACf,IAAI,EAAU,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACtD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,OAAO,EAAE;YAIX,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;YAC3B,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;YAE3B,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBAE3E,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAC3B;SACF;QAED,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE;YACd,KAAK,cAAc,CAAC,CAAC;gBAGnB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC3B,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAE3B,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzB,MAAM;YACR,KAAK,cAAc,CAAC,CAAC;gBACnB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;gBACR,MAAM;YACR,KAAK,cAAc,CAAC,CAAC;gBACnB,cAAc,CAAC,IAAI,CACjB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,GAAG,CAAC,CAAC,CAAW,EAChB,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC,EACvB,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC,CACxB,CAAC;gBACF,MAAM;YACR,KAAK,cAAc,CAAC,CAAC;gBACnB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACtB,cAAc,CAAC,IAAI,CAEjB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACxB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACxB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACxB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EACxB,EAAE,EACF,EAAE,CACH,CAAC;gBACF,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;gBACR,MAAM;YACR,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAElC,MAAM,gBAAgB,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAY,CAAC;gBAE9C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACpC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACpC,IAAI,OAAO,EAAE;oBAGX,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC1B;qBAAM;oBAEL,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACrD;gBAED,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAClC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAElC,MAAM,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAEzD,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE;oBAClG,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACzG,kBAAkB,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACtE;gBACD,MAAM;aACP;YACD,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAChC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBACpC,MAAM,QAAQ,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,UAAU,CAAC;gBAEjD,MAAM,aAAa,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAY,CAAC;gBAC3C,MAAM,SAAS,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE5B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBAEtC,IAAI,SAAS,EAAE;oBACb,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;oBAClC,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;iBACnC;qBAAM;oBACL,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBAChB,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;iBACjB;gBACD,IAAI,OAAO,EAAE;oBAGX,EAAE,GAAG,EAAE,CAAC;oBACR,EAAE,GAAG,EAAE,CAAC;oBACR,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC1B;qBAAM;oBAEL,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACrD;gBAED,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAChC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,SAAS,EAAE;oBACb,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;oBAClC,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;iBACnC;qBAAM;oBACL,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBAChB,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;iBACjB;gBAED,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAEtD,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE;oBAC/F,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACtG,kBAAkB,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAErE,IAAI,SAAS,EAAE;wBACb,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;wBAErC,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BAChD,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;4BAC1B,KAAK,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAE9B,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;4BAC/D,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;yBACpE;qBACF;iBACF;gBAED,MAAM;aACP;YACD,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;gBACrB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC3B,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC3B,EAAE,GAAG,EAAE,GAAI,GAAG,CAAC,CAAC,CAAY,CAAC;gBAC7B,EAAE,GAAG,EAAE,GAAI,GAAG,CAAC,CAAC,CAAY,CAAC;gBAG7B,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzB,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM;aACP;YACD,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;gBAE3B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC3E,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBACpF,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7E,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;gBACvC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACtC,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAGtC,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEpD,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBACvC,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAEvC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEvE,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAErE,kBAAkB,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEvE,MAAM;aACP;YACD,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;gBACrB,cAAc,IAAI,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtE,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,CAAC;gBACR,MAAM;aACP;SACF;KACF;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/C,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACxC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,YAAwB,EAAE,OAAgB;IACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAErB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAEtC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;SACxB;KACF;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAwB;IAC1D,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC1C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAChH;SACF;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\nconst addLineToBezierPath = (bezierPath: number[], x0: number, y0: number, x1: number, y1: number) => {\n if (!(isNumberClose(x0, x1) && isNumberClose(y0, y1))) {\n bezierPath.push(x0, y0, x1, y1, x1, y1);\n }\n};\n\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n const commandList = path.commandList;\n\n const bezierArrayGroups: number[][] = [];\n let currentSubpath: number[];\n\n // end point\n let xi: number = 0;\n let yi: number = 0;\n // start point\n let x0: number = 0;\n let y0: number = 0;\n\n const createNewSubpath = (x: number, y: number) => {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n };\n\n // the first control point\n let x1: number;\n let y1: number;\n // the second control point\n let x2: number;\n let y2: number;\n\n for (let i = 0, len = commandList.length; i < len; i++) {\n const cmd = commandList[i];\n\n const isFirst = i === 0;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n\n if ([enumCommandMap.L, enumCommandMap.C, enumCommandMap.Q].includes(cmd[0])) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd[0]) {\n case enumCommandMap.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = cmd[1] as number;\n yi = y0 = cmd[2] as number;\n\n createNewSubpath(x0, y0);\n break;\n case enumCommandMap.L:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case enumCommandMap.C:\n currentSubpath.push(\n cmd[1] as number,\n cmd[2] as number,\n cmd[3] as number,\n cmd[4] as number,\n (xi = cmd[5] as number),\n (yi = cmd[6] as number)\n );\n break;\n case enumCommandMap.Q:\n x1 = cmd[1] as number;\n y1 = cmd[2] as number;\n x2 = cmd[3] as number;\n y2 = cmd[4] as number;\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + (2 / 3) * (x1 - xi),\n yi + (2 / 3) * (y1 - yi),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n xi = x2;\n yi = y2;\n break;\n case enumCommandMap.A: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = rx;\n const startAngle = cmd[4] as number;\n const endAngle = cmd[5] as number;\n\n const counterClockwise = !!(cmd[6] as number);\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * rx + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * rx + cy;\n\n const step = ((counterClockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; counterClockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = counterClockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n }\n break;\n }\n case enumCommandMap.E: {\n const cx = cmd[1] as number;\n const cy = cmd[2] as number;\n const rx = cmd[3] as number;\n const ry = cmd[4] as number;\n const rotate = cmd[5] as number;\n const startAngle = cmd[6] as number;\n const endAngle = (cmd[7] as number) + startAngle;\n\n const anticlockwise = !!(cmd[8] as number);\n const hasRotate = !isNumberClose(rotate, 0);\n const rc = Math.cos(rotate);\n const rs = Math.sin(rotate);\n\n let xTemp = Math.cos(startAngle) * rx;\n let yTemp = Math.sin(startAngle) * ry;\n\n if (hasRotate) {\n x1 = xTemp * rc - yTemp * rs + cx;\n y1 = xTemp * rs + yTemp * rc + cy;\n } else {\n x1 = xTemp + cx;\n y1 = yTemp + cy;\n }\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n } else {\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x1, y1);\n }\n\n xTemp = Math.cos(endAngle) * rx;\n yTemp = Math.sin(endAngle) * ry;\n if (hasRotate) {\n xi = xTemp * rc - yTemp * rs + cx;\n yi = xTemp * rs + yTemp * rc + cy;\n } else {\n xi = xTemp + cx;\n yi = yTemp + cy;\n }\n\n const step = ((anticlockwise ? -1 : 1) * Math.PI) / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle) : Math.min(angle + step, endAngle);\n addArcToBezierPath(currentSubpath, angle, nextAngle, cx, cy, rx, ry);\n\n if (hasRotate) {\n const curLen = currentSubpath.length;\n\n for (let j = curLen - 6; j <= curLen - 1; j += 2) {\n xTemp = currentSubpath[j];\n yTemp = currentSubpath[j + 1];\n\n currentSubpath[j] = (xTemp - cx) * rc - (yTemp - cy) * rs + cx;\n currentSubpath[j + 1] = (xTemp - cx) * rs + (yTemp - cy) * rc + cy;\n }\n }\n }\n\n break;\n }\n case enumCommandMap.R: {\n x0 = xi = cmd[1] as number;\n y0 = yi = cmd[2] as number;\n x1 = x0 + (cmd[3] as number);\n y1 = y0 + (cmd[4] as number);\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLineToBezierPath(currentSubpath, x1, y0, x1, y1);\n addLineToBezierPath(currentSubpath, x1, y1, x0, y1);\n addLineToBezierPath(currentSubpath, x0, y1, x0, y0);\n addLineToBezierPath(currentSubpath, x0, y0, x1, y0);\n break;\n }\n case enumCommandMap.AT: {\n const tx1 = cmd[1] as number;\n const ty1 = cmd[2] as number;\n const tx2 = cmd[3] as number;\n const ty2 = cmd[4] as number;\n const r = cmd[5] as number;\n\n const dis1 = PointService.distancePP({ x: xi, y: yi }, { x: tx1, y: ty1 });\n const dis2 = PointService.distancePP({ x: tx2, y: ty2 }, { x: tx1, y: ty1 });\n const theta = ((xi - tx1) * (tx2 - tx1) + (yi - ty1) * (ty2 - ty1)) / (dis1 * dis2);\n const dis = r / Math.sin(theta / 2);\n const midX = (xi + tx2 - 2 * tx1) / 2;\n const midY = (yi + ty2 - 2 * ty1) / 2;\n const midLen = PointService.distancePP({ x: midX, y: midY }, { x: 0, y: 0 });\n const cx = tx1 + (dis * midX) / midLen;\n const cy = tx2 + (dis * midY) / midLen;\n const disP = Math.sqrt(dis * dis - r * r);\n x0 = tx1 + (disP * (xi - tx1)) / dis1;\n y0 = ty1 + (disP * (yi - ty1)) / dis1;\n\n // Connect a line between current point to arc start point.\n addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n\n xi = tx1 + (disP * (tx2 - tx1)) / dis2;\n yi = ty1 + (disP * (ty2 - ty1)) / dis2;\n\n const startAngle = getAngleByPoint({ x: cx, y: cy }, { x: x0, y: y0 });\n\n const endAngle = getAngleByPoint({ x: cx, y: cy }, { x: xi, y: yi });\n\n addArcToBezierPath(currentSubpath, startAngle, endAngle, cx, cy, r, r);\n\n break;\n }\n case enumCommandMap.Z: {\n currentSubpath && addLineToBezierPath(currentSubpath, xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n\n return bezierArrayGroups;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/morphing-utils.ts"],"names":[],"mappings":"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","file":"morphing-utils.js","sourcesContent":["/* Adapted from zrender by ecomfe\n * https://github.com/ecomfe/zrender\n * Licensed under the BSD-3-Clause\n\n * url: https://github.com/ecomfe/zrender/blob/master/src/tool/morphPath.ts\n * License: https://github.com/ecomfe/zrender/blob/master/LICENSE\n * @license\n */\n\nimport type { IMatrix } from '@visactor/vutils';\nimport { getAngleByPoint, isNumberClose, PointService } from '@visactor/vutils';\nimport type { ICustomPath2D } from '../interface';\nimport { CustomPath2D } from './custom-path2d';\nimport { enumCommandMap } from './path-svg';\nimport { addArcToBezierPath } from './shape/arc';\n\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\nexport function alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount);\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen; i += 6) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i];\n let y1 = shorterPath[i + 1];\n let x2 = shorterPath[i + 2];\n let y2 = shorterPath[i + 3];\n const x3 = shorterPath[i + 4];\n const y3 = shorterPath[i + 5];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n const actualSubDivCount = Math.min(remained, eachCurveSubDivCount) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpath: number[], otherSubpath: number[]) {\n const prevSubPath = lastSubpath || otherSubpath;\n const len = prevSubPath.length;\n const lastX = prevSubPath[len - 2];\n const lastY = prevSubPath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length; i += 2) {\n newSubpath[i] = lastX;\n newSubpath[i + 1] = lastY;\n }\n return newSubpath;\n}\n\nfunction reverseSubpath(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n/**\n * 用于计算内部不相交的多边形中心点\n */\nexport function centroidOfSubpath(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0, 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * 针对闭合的曲线,查找最适合的旋转offset\n */\nfunction findBestRotationOffset(fromSubBeziers: number[], toSubBeziers: number[], fromCp: number[], toCp: number[]) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n const idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2) + 2;\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nexport function findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n) {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroidOfSubpath(fromSubpathBezier);\n const toCp = centroidOfSubpath(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n const tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverseSubpath(fromSubpathBezier);\n }\n const offset = findBestRotationOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = ((offset + k) % len2) + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n } else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n let lastSubpath1;\n let lastSubpath2;\n\n const newArray1 = [];\n const newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1, subpath2);\n newSubpath2 = subpath2;\n } else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2, subpath1);\n newSubpath1 = subpath1;\n } else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\n/**\n * 将路径转换为贝塞尔曲线数组\n * 通过复用CustomPath2D中的方法,确保处理的一致性\n * @param path 要转换的路径\n * @returns 贝塞尔曲线数组\n */\nexport function pathToBezierCurves(path: ICustomPath2D): number[][] {\n // 创建临时路径和临时上下文\n const tempPath = new CustomPath2D();\n\n // 将路径转换为SVG路径字符串,这样可以利用CustomPath2D中的解析能力\n const svgPathString = path.toString();\n\n // 如果路径为空,直接返回空数组\n if (!svgPathString) {\n return [];\n }\n\n // 使用临时路径解析SVG字符串\n tempPath.fromString(svgPathString);\n\n // 确保曲线已经构建\n const curves = tempPath.tryBuildCurves();\n\n if (!curves || curves.length === 0) {\n return [];\n }\n\n // 用于存储分离的子路径\n const bezierSubpaths: number[][] = [];\n let currentSubpath: number[] = null;\n\n // 初始化当前子路径\n currentSubpath = [];\n let firstX = 0; // 记录子路径起点X (用于闭合路径)\n let firstY = 0; // 记录子路径起点Y (用于闭合路径)\n let lastX = 0; // 记录上一个点的X (用于连续线段)\n let lastY = 0; // 记录上一个点的Y (用于连续线段)\n let isSubpathStart = true;\n let isPathClosed = false;\n\n for (let i = 0; i < curves.length; i++) {\n const curve = curves[i];\n\n // 如果是新的子路径开始或者第一个点\n if (isSubpathStart) {\n firstX = curve.p0.x;\n firstY = curve.p0.y;\n lastX = firstX;\n lastY = firstY;\n currentSubpath = [firstX, firstY];\n bezierSubpaths.push(currentSubpath);\n isSubpathStart = false;\n }\n\n // 处理不同类型的曲线\n if (curve.p1 && curve.p2 && curve.p3) {\n // 三次贝塞尔曲线\n currentSubpath.push(curve.p1.x, curve.p1.y, curve.p2.x, curve.p2.y, curve.p3.x, curve.p3.y);\n lastX = curve.p3.x;\n lastY = curve.p3.y;\n } else if (curve.p1 && curve.p2) {\n // 二次贝塞尔曲线,转换为三次贝塞尔曲线\n const x1 = curve.p1.x;\n const y1 = curve.p1.y;\n const x2 = curve.p2.x;\n const y2 = curve.p2.y;\n\n currentSubpath.push(\n lastX + (2 / 3) * (x1 - lastX),\n lastY + (2 / 3) * (y1 - lastY),\n x2 + (2 / 3) * (x1 - x2),\n y2 + (2 / 3) * (y1 - y2),\n x2,\n y2\n );\n\n lastX = x2;\n lastY = y2;\n } else if (curve.p1) {\n // 直线段,转换为贝塞尔曲线格式\n // 直线的情况,p1就是终点\n const endX = curve.p1.x;\n const endY = curve.p1.y;\n\n // 避免添加长度为0的线段\n if (!(Math.abs(lastX - endX) < 1e-10 && Math.abs(lastY - endY) < 1e-10)) {\n // 使用addLineToBezierPath的逻辑:x0,y0, x1,y1, x1,y1\n // 第一个控制点等于起点,第二个控制点等于终点,终点等于终点\n currentSubpath.push(\n lastX,\n lastY, // 第一个控制点 = 起点\n endX,\n endY, // 第二个控制点 = 终点\n endX,\n endY // 终点\n );\n }\n\n lastX = endX;\n lastY = endY;\n }\n\n // 检查是否是闭合路径(最后一个点回到起点)\n if (i === curves.length - 1) {\n if (Math.abs(lastX - firstX) < 1e-10 && Math.abs(lastY - firstY) < 1e-10) {\n isPathClosed = true;\n }\n }\n\n // 检查是否需要开始新的子路径\n // 只有在检测到明确的路径中断(不连续的点)时才开始新子路径\n if (i < curves.length - 1) {\n const nextCurve = curves[i + 1];\n if (Math.abs(lastX - nextCurve.p0.x) > 1e-10 || Math.abs(lastY - nextCurve.p0.y) > 1e-10) {\n // 当前子路径结束,需要创建新的子路径\n isSubpathStart = true;\n }\n }\n }\n\n // 移除空的子路径\n const validSubpaths = bezierSubpaths.filter(subpath => subpath.length > 2);\n\n // 为了保持与原始函数一致,如果只有一个子路径,返回它的数组\n return validSubpaths.length === 1 ? [validSubpaths[0]] : validSubpaths;\n}\n\nexport function applyTransformOnBezierCurves(bezierCurves: number[][], martrix: IMatrix) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n for (let k = 0; k < subPath.length; k += 2) {\n const x = subPath[k];\n const y = subPath[k + 1];\n const res = { x, y };\n\n martrix.transformPoint({ x, y }, res);\n\n subPath[k] = res.x;\n subPath[k + 1] = res.y;\n }\n }\n}\n\nexport function bezierCurversToPath(bezierCurves: number[][]) {\n const path = new CustomPath2D();\n\n for (let i = 0; i < bezierCurves.length; i++) {\n const subPath = bezierCurves[i];\n\n if (subPath.length > 2) {\n path.moveTo(subPath[0], subPath[1]);\n for (let k = 2; k < subPath.length; k += 6) {\n path.bezierCurveTo(subPath[k], subPath[k + 1], subPath[k + 2], subPath[k + 3], subPath[k + 4], subPath[k + 5]);\n }\n }\n }\n\n return path;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class PerformanceRAF {
|
|
2
|
+
nextAnimationFrameCbs: Map<number, FrameRequestCallback>;
|
|
3
|
+
private _rafHandle;
|
|
4
|
+
addAnimationFrameCb(callback: FrameRequestCallback): number;
|
|
5
|
+
removeAnimationFrameCb(index: number): boolean;
|
|
6
|
+
protected runAnimationFrame: (time: number) => void;
|
|
7
|
+
protected tryRunAnimationFrameNextFrame: () => void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { application } from "../application";
|
|
2
|
+
|
|
3
|
+
let idx = 0;
|
|
4
|
+
|
|
5
|
+
export class PerformanceRAF {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.nextAnimationFrameCbs = new Map, this._rafHandle = null, this.runAnimationFrame = time => {
|
|
8
|
+
this._rafHandle = null;
|
|
9
|
+
const cbs = this.nextAnimationFrameCbs;
|
|
10
|
+
this.nextAnimationFrameCbs = new Map, cbs.forEach((cb => cb(time)));
|
|
11
|
+
}, this.tryRunAnimationFrameNextFrame = () => {
|
|
12
|
+
null === this._rafHandle && 0 !== this.nextAnimationFrameCbs.size && (this._rafHandle = application.global.getRequestAnimationFrame()(this.runAnimationFrame));
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
addAnimationFrameCb(callback) {
|
|
16
|
+
return this.nextAnimationFrameCbs.set(++idx, callback), this.tryRunAnimationFrameNextFrame(),
|
|
17
|
+
idx;
|
|
18
|
+
}
|
|
19
|
+
removeAnimationFrameCb(index) {
|
|
20
|
+
return !!this.nextAnimationFrameCbs.has(index) && (this.nextAnimationFrameCbs.delete(index),
|
|
21
|
+
!0);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=performance-raf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/performance-raf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,IAAI,GAAG,GAAG,CAAC,CAAC;AAKZ,MAAM,OAAO,cAAc;IAA3B;QACE,0BAAqB,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC7D,eAAU,GAAkB,IAAI,CAAC;QAsB/B,sBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACvC,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEQ,kCAA6B,GAAG,GAAG,EAAE;YAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE;gBACrE,OAAO;aACR;YACD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1F,CAAC,CAAC;IACJ,CAAC;IAjCC,mBAAmB,CAAC,QAA8B;QAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,sBAAsB,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAeF","file":"performance-raf.js","sourcesContent":["import { application } from '../application';\n\nlet idx = 0;\n\n/**\n * 性能优化,将requestAnimationFrame的回调函数存储起来,在下一帧执行\n */\nexport class PerformanceRAF {\n nextAnimationFrameCbs: Map<number, FrameRequestCallback> = new Map();\n private _rafHandle: number | null = null;\n\n addAnimationFrameCb(callback: FrameRequestCallback) {\n this.nextAnimationFrameCbs.set(++idx, callback);\n // 下一帧执行nextAnimationFrameCbs\n this.tryRunAnimationFrameNextFrame();\n return idx;\n }\n\n /**\n * 移除指定索引的回调函数\n * @param index raf索引,从1开始,相当于内部nextAnimationFrameCbs的idx + 1\n * @returns 是否移除成功\n */\n removeAnimationFrameCb(index: number): boolean {\n if (this.nextAnimationFrameCbs.has(index)) {\n this.nextAnimationFrameCbs.delete(index);\n return true;\n }\n return false;\n }\n\n protected runAnimationFrame = (time: number) => {\n this._rafHandle = null;\n const cbs = this.nextAnimationFrameCbs;\n this.nextAnimationFrameCbs = new Map();\n cbs.forEach(cb => cb(time));\n };\n\n protected tryRunAnimationFrameNextFrame = () => {\n if (this._rafHandle !== null || this.nextAnimationFrameCbs.size === 0) {\n return;\n }\n this._rafHandle = application.global.getRequestAnimationFrame()(this.runAnimationFrame);\n };\n}\n"]}
|
package/es/common/polygon.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export function drawPolygon(path, points, x, y) {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
if (points && points.length) {
|
|
3
|
+
path.moveTo(points[0].x + x, points[0].y + y);
|
|
4
|
+
for (let i = 1; i < points.length; i++) path.lineTo(points[i].x + x, points[i].y + y);
|
|
5
|
+
}
|
|
4
6
|
}
|
|
5
7
|
|
|
6
8
|
export function drawRoundedPolygon(path, points, x, y, cornerRadius, closePath = !0) {
|
|
@@ -35,4 +37,5 @@ function getProportionPoint(point, segment, length, dx, dy) {
|
|
|
35
37
|
x: point.x - dx * factor,
|
|
36
38
|
y: point.y - dy * factor
|
|
37
39
|
};
|
|
38
|
-
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=polygon.js.map
|
package/es/common/polygon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/polygon.ts"],"names":[],"mappings":"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","file":"polygon.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\n/**\n * 绘制闭合的常规多边形\n * TODO polygon 图元的xy属性没有意义\n * @param path\n * @param points\n * @param x\n * @param y\n */\nexport function drawPolygon(path: IPath2D, points: IPointLike[], x: number, y: number) {\n path.moveTo(points[0].x + x, points[0].y + y);\n for (let i = 1; i < points.length; i++) {\n path.lineTo(points[i].x + x, points[i].y + y);\n }\n}\n\n/**\n * algorithm detail see: https://stackoverflow.com/a/24780108\n */\nexport function drawRoundedPolygon(\n path: IPath2D,\n points: IPointLike[],\n x: number,\n y: number,\n cornerRadius: number | number[],\n closePath: boolean = true\n) {\n if (points.length < 3) {\n drawPolygon(path, points, x, y);\n return;\n }\n\n let startI = 0;\n let endI = points.length - 1;\n if (!closePath) {\n startI += 1;\n endI -= 1;\n path.moveTo(points[0].x + x, points[0].y + y);\n }\n for (let i = startI; i <= endI; i++) {\n const p1 = points[i === 0 ? endI : (i - 1) % points.length];\n const angularPoint = points[i % points.length];\n const p2 = points[(i + 1) % points.length];\n\n //Vector 1\n const dx1 = angularPoint.x - p1.x;\n const dy1 = angularPoint.y - p1.y;\n\n //Vector 2\n const dx2 = angularPoint.x - p2.x;\n const dy2 = angularPoint.y - p2.y;\n\n //Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n\n // get config radius\n let radius = Array.isArray(cornerRadius) ? cornerRadius[i % points.length] ?? 0 : cornerRadius;\n let segment = radius / tan;\n\n //Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.x * 2 - p1Cross.x - p2Cross.x;\n const dy = angularPoint.y * 2 - p1Cross.y - p2Cross.y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n //StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.y - circlePoint.y, p1Cross.x - circlePoint.x);\n const endAngle = Math.atan2(p2Cross.y - circlePoint.y, p2Cross.x - circlePoint.x);\n\n //Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n //Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) {\n sweepAngle = sweepAngle - Math.PI;\n }\n\n if (i === 0) {\n path.moveTo(p1Cross.x + x, p1Cross.y + y);\n } else {\n path.lineTo(p1Cross.x + x, p1Cross.y + y);\n }\n\n if (sweepAngle) {\n path.arcTo(angularPoint.x + x, angularPoint.y + y, p2Cross.x + x, p2Cross.y + y, radius);\n }\n\n path.lineTo(p2Cross.x + x, p2Cross.y + y);\n }\n\n if (!closePath) {\n path.lineTo(points[endI + 1].x + x, points[endI + 1].y + y);\n }\n}\n\nfunction getLength(dx: number, dy: number) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point: IPointLike, segment: number, length: number, dx: number, dy: number) {\n const factor = segment / length;\n\n return {\n x: point.x - dx * factor,\n y: point.y - dy * factor\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/polygon.ts"],"names":[],"mappings":"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","file":"polygon.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport type { IPath2D } from '../interface';\n\n/**\n * 绘制闭合的常规多边形\n * TODO polygon 图元的xy属性没有意义\n * @param path\n * @param points\n * @param x\n * @param y\n */\nexport function drawPolygon(path: IPath2D, points: IPointLike[], x: number, y: number) {\n if (!points || !points.length) {\n return;\n }\n path.moveTo(points[0].x + x, points[0].y + y);\n for (let i = 1; i < points.length; i++) {\n path.lineTo(points[i].x + x, points[i].y + y);\n }\n}\n\n/**\n * algorithm detail see: https://stackoverflow.com/a/24780108\n */\nexport function drawRoundedPolygon(\n path: IPath2D,\n points: IPointLike[],\n x: number,\n y: number,\n cornerRadius: number | number[],\n closePath: boolean = true\n) {\n if (points.length < 3) {\n drawPolygon(path, points, x, y);\n return;\n }\n\n let startI = 0;\n let endI = points.length - 1;\n if (!closePath) {\n startI += 1;\n endI -= 1;\n path.moveTo(points[0].x + x, points[0].y + y);\n }\n for (let i = startI; i <= endI; i++) {\n const p1 = points[i === 0 ? endI : (i - 1) % points.length];\n const angularPoint = points[i % points.length];\n const p2 = points[(i + 1) % points.length];\n\n //Vector 1\n const dx1 = angularPoint.x - p1.x;\n const dy1 = angularPoint.y - p1.y;\n\n //Vector 2\n const dx2 = angularPoint.x - p2.x;\n const dy2 = angularPoint.y - p2.y;\n\n //Angle between vector 1 and vector 2 divided by 2\n const angle = (Math.atan2(dy1, dx1) - Math.atan2(dy2, dx2)) / 2;\n\n // The length of segment between angular point and the\n // points of intersection with the circle of a given radius\n const tan = Math.abs(Math.tan(angle));\n\n // get config radius\n let radius = Array.isArray(cornerRadius) ? cornerRadius[i % points.length] ?? 0 : cornerRadius;\n let segment = radius / tan;\n\n //Check the segment\n const length1 = getLength(dx1, dy1);\n const length2 = getLength(dx2, dy2);\n\n const length = Math.min(length1, length2);\n\n if (segment > length) {\n segment = length;\n radius = length * tan;\n }\n\n // Points of intersection are calculated by the proportion between\n // the coordinates of the vector, length of vector and the length of the segment.\n const p1Cross = getProportionPoint(angularPoint, segment, length1, dx1, dy1);\n const p2Cross = getProportionPoint(angularPoint, segment, length2, dx2, dy2);\n\n // Calculation of the coordinates of the circle\n // center by the addition of angular vectors.\n const dx = angularPoint.x * 2 - p1Cross.x - p2Cross.x;\n const dy = angularPoint.y * 2 - p1Cross.y - p2Cross.y;\n\n const L = getLength(dx, dy);\n const d = getLength(segment, radius);\n\n const circlePoint = getProportionPoint(angularPoint, d, L, dx, dy);\n\n //StartAngle and EndAngle of arc\n let startAngle = Math.atan2(p1Cross.y - circlePoint.y, p1Cross.x - circlePoint.x);\n const endAngle = Math.atan2(p2Cross.y - circlePoint.y, p2Cross.x - circlePoint.x);\n\n //Sweep angle\n let sweepAngle = endAngle - startAngle;\n\n //Some additional checks\n if (sweepAngle < 0) {\n startAngle = endAngle;\n sweepAngle = -sweepAngle;\n }\n\n if (sweepAngle > Math.PI) {\n sweepAngle = sweepAngle - Math.PI;\n }\n\n if (i === 0) {\n path.moveTo(p1Cross.x + x, p1Cross.y + y);\n } else {\n path.lineTo(p1Cross.x + x, p1Cross.y + y);\n }\n\n if (sweepAngle) {\n path.arcTo(angularPoint.x + x, angularPoint.y + y, p2Cross.x + x, p2Cross.y + y, radius);\n }\n\n path.lineTo(p2Cross.x + x, p2Cross.y + y);\n }\n\n if (!closePath) {\n path.lineTo(points[endI + 1].x + x, points[endI + 1].y + y);\n }\n}\n\nfunction getLength(dx: number, dy: number) {\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction getProportionPoint(point: IPointLike, segment: number, length: number, dx: number, dy: number) {\n const factor = segment / length;\n\n return {\n x: point.x - dx * factor,\n y: point.y - dy * factor\n };\n}\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { IPoint, IPointLike } from '@visactor/vutils';
|
|
2
|
-
import type { ICubicBezierCurve, IDirection, IPath2D
|
|
2
|
+
import type { ICubicBezierCurve, IDirection, IPath2D } from '../../../interface';
|
|
3
3
|
import { Curve } from './base';
|
|
4
4
|
export declare function divideCubic(curve: ICubicBezierCurve, t: number): ICubicBezierCurve[];
|
|
5
|
-
export declare function divideQuad(curve: IQuadraticBezierCurve, t: number): IQuadraticBezierCurve[];
|
|
6
5
|
export declare class CubicBezierCurve extends Curve implements ICubicBezierCurve {
|
|
7
6
|
type: number;
|
|
8
7
|
originP1?: IPointLike;
|
|
@@ -4,20 +4,13 @@ import { Curve } from "./base";
|
|
|
4
4
|
|
|
5
5
|
import { CurveTypeEnum, Direction } from "../../enums";
|
|
6
6
|
|
|
7
|
-
import { cubicLength, cubicPointAt
|
|
8
|
-
|
|
9
|
-
import { QuadraticBezierCurve } from "./quadratic-bezier";
|
|
7
|
+
import { cubicLength, cubicPointAt } from "../../bezier-utils";
|
|
10
8
|
|
|
11
9
|
export function divideCubic(curve, t) {
|
|
12
10
|
const {p0: p0, p1: p1, p2: p2, p3: p3} = curve, pt = cubicPointAt(p0, p1, p2, p3, t), c1 = PointService.pointAtPP(p0, p1, t), c2 = PointService.pointAtPP(p1, p2, t), c3 = PointService.pointAtPP(p2, p3, t), c12 = PointService.pointAtPP(c1, c2, t), c23 = PointService.pointAtPP(c2, c3, t);
|
|
13
11
|
return [ new CubicBezierCurve(p0, c1, c12, pt), new CubicBezierCurve(pt, c23, c3, p3) ];
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
export function divideQuad(curve, t) {
|
|
17
|
-
const {p0: p0, p1: p1, p2: p2} = curve, pt = quadPointAt(p0, p1, p2, t), c1 = PointService.pointAtPP(p0, p1, t), c2 = PointService.pointAtPP(p1, p2, t);
|
|
18
|
-
return [ new QuadraticBezierCurve(p0, c1, pt), new QuadraticBezierCurve(pt, c2, p2) ];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
14
|
export class CubicBezierCurve extends Curve {
|
|
22
15
|
constructor(p0, p1, p2, p3) {
|
|
23
16
|
super(), this.type = CurveTypeEnum.CubicBezierCurve, this.p0 = p0, this.p1 = p1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/segment/curve/cubic-bezier.ts"],"names":[],"mappings":"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","file":"cubic-bezier.js","sourcesContent":["import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs, atan2, max, min, PointService } from '@visactor/vutils';\nimport type { ICubicBezierCurve, IDirection, IPath2D, IQuadraticBezierCurve } from '../../../interface';\nimport { Curve } from './base';\nimport { CurveTypeEnum, Direction } from '../../enums';\nimport { cubicLength, cubicPointAt, quadPointAt } from '../../bezier-utils';\nimport { QuadraticBezierCurve } from './quadratic-bezier';\n\n/**\n * 对三次贝塞尔曲线进行分割\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param t\n */\nexport function divideCubic(curve: ICubicBezierCurve, t: number): ICubicBezierCurve[] {\n const { p0, p1, p2, p3 } = curve;\n\n // 划分点\n const pt = cubicPointAt(p0, p1, p2, p3, t);\n // const xt = pt.x;\n // const yt = pt.y;\n\n // 计算两点之间的差值点\n const c1 = PointService.pointAtPP(p0, p1, t);\n const c2 = PointService.pointAtPP(p1, p2, t);\n const c3 = PointService.pointAtPP(p2, p3, t);\n const c12 = PointService.pointAtPP(c1, c2, t);\n const c23 = PointService.pointAtPP(c2, c3, t);\n // const direction = p1.x1 ? p1.y > p0.y ? 0 : 1 : p1.x > p0.x ? 0 : 1;\n\n const curve1 = new CubicBezierCurve(p0, c1, c12, pt);\n const curve2 = new CubicBezierCurve(pt, c23, c3, p3);\n\n return [curve1, curve2];\n}\n/**\n * 对三次贝塞尔曲线进行分割\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param t\n */\nexport function divideQuad(curve: IQuadraticBezierCurve, t: number): IQuadraticBezierCurve[] {\n const { p0, p1, p2 } = curve;\n\n // 划分点\n const pt = quadPointAt(p0, p1, p2, t);\n // const xt = pt.x;\n // const yt = pt.y;\n\n // 计算两点之间的差值点\n const c1 = PointService.pointAtPP(p0, p1, t);\n const c2 = PointService.pointAtPP(p1, p2, t);\n // const c3 = PointService.pointAtPP(p2, p3, t);\n // const c12 = PointService.pointAtPP(c1, c2, t);\n // const c23 = PointService.pointAtPP(c2, c3, t);\n // const direction = p1.x1 ? p1.y > p0.y ? 0 : 1 : p1.x > p0.x ? 0 : 1;\n\n const curve1 = new QuadraticBezierCurve(p0, c1, pt);\n const curve2 = new QuadraticBezierCurve(pt, c2, p2);\n\n return [curve1, curve2];\n}\n\nexport class CubicBezierCurve extends Curve implements ICubicBezierCurve {\n type: number = CurveTypeEnum.CubicBezierCurve;\n declare originP1?: IPointLike;\n declare originP2?: IPointLike;\n declare readonly p0: IPoint;\n declare readonly p1: IPoint;\n declare readonly p2: IPoint;\n declare readonly p3: IPoint;\n constructor(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint) {\n super();\n this.p0 = p0;\n this.p1 = p1;\n this.p2 = p2;\n this.p3 = p3;\n }\n\n protected _validPoint(): boolean {\n return Number.isFinite(\n this.p0.x + this.p0.y + this.p1.x + this.p1.y + this.p2.x + this.p2.y + this.p3.x + this.p3.y\n );\n }\n getPointAt(t: number): IPointLike {\n if (this.defined !== false) {\n return cubicPointAt(this.p0, this.p1, this.p2, this.p3, t);\n }\n throw new Error('defined为false的点不能getPointAt');\n }\n protected calcLength(): number {\n // throw new Error('CubicBezierCurve暂不支持updateLength');\n if (this._validPoint()) {\n return cubicLength(this.p0, this.p1, this.p2, this.p3, 0);\n }\n // return distance(this.p0.x || 0, this.p0.y || 0, this.p3.x || 0, this.p3.y || 0);\n // 默认长度不好给\n return 60;\n }\n\n protected calcProjLength(direction: IDirection): number {\n if (direction === Direction.ROW) {\n return abs(this.p0.x - this.p3.x);\n } else if (direction === Direction.COLUMN) {\n return abs(this.p0.y - this.p3.y);\n }\n return 0;\n }\n getAngleAt(t: number): number {\n const minT = max(t - 0.01, 0);\n const maxT = min(t + 0.01, 1);\n const minP = this.getPointAt(minT);\n const maxP = this.getPointAt(maxT);\n return atan2(maxP.y - minP.y, maxP.x - minP.x);\n }\n draw(path: IPath2D, x: number, y: number, sx: number, sy: number, percent: number) {\n path.moveTo(this.p0.x * sx + x, this.p0.y * sy + y);\n if (percent >= 1) {\n path.bezierCurveTo(\n this.p1.x * sx + x,\n this.p1.y * sy + y,\n this.p2.x * sx + x,\n this.p2.y * sy + y,\n this.p3.x * sx + x,\n this.p3.y * sy + y\n );\n } else if (percent > 0) {\n const [curve1] = divideCubic(this, percent);\n path.bezierCurveTo(\n curve1.p1.x * sx + x,\n curve1.p1.y * sy + y,\n curve1.p2.x * sx + x,\n curve1.p2.y * sy + y,\n curve1.p3.x * sx + x,\n curve1.p3.y * sy + y\n );\n }\n }\n\n includeX(x: number): boolean {\n const minX = min(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const maxX = max(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n return x >= minX && x <= maxX;\n }\n\n getYAt(x: number): number {\n const minX = min(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const maxX = max(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const t = (x - minX) / (maxX - minX);\n return this.getPointAt(t).y;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/segment/curve/cubic-bezier.ts"],"names":[],"mappings":"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","file":"cubic-bezier.js","sourcesContent":["import type { IPoint, IPointLike } from '@visactor/vutils';\nimport { abs, atan2, max, min, PointService } from '@visactor/vutils';\nimport type { ICubicBezierCurve, IDirection, IPath2D, IQuadraticBezierCurve } from '../../../interface';\nimport { Curve } from './base';\nimport { CurveTypeEnum, Direction } from '../../enums';\nimport { cubicLength, cubicPointAt, quadPointAt } from '../../bezier-utils';\nimport { QuadraticBezierCurve } from './quadratic-bezier';\n\n/**\n * 对三次贝塞尔曲线进行分割\n * @param p0 起点\n * @param p1 控制点1\n * @param p2 控制点2\n * @param p3 终点\n * @param t\n */\nexport function divideCubic(curve: ICubicBezierCurve, t: number): ICubicBezierCurve[] {\n const { p0, p1, p2, p3 } = curve;\n\n // 划分点\n const pt = cubicPointAt(p0, p1, p2, p3, t);\n // const xt = pt.x;\n // const yt = pt.y;\n\n // 计算两点之间的差值点\n const c1 = PointService.pointAtPP(p0, p1, t);\n const c2 = PointService.pointAtPP(p1, p2, t);\n const c3 = PointService.pointAtPP(p2, p3, t);\n const c12 = PointService.pointAtPP(c1, c2, t);\n const c23 = PointService.pointAtPP(c2, c3, t);\n // const direction = p1.x1 ? p1.y > p0.y ? 0 : 1 : p1.x > p0.x ? 0 : 1;\n\n const curve1 = new CubicBezierCurve(p0, c1, c12, pt);\n const curve2 = new CubicBezierCurve(pt, c23, c3, p3);\n\n return [curve1, curve2];\n}\n\nexport class CubicBezierCurve extends Curve implements ICubicBezierCurve {\n type: number = CurveTypeEnum.CubicBezierCurve;\n declare originP1?: IPointLike;\n declare originP2?: IPointLike;\n declare readonly p0: IPoint;\n declare readonly p1: IPoint;\n declare readonly p2: IPoint;\n declare readonly p3: IPoint;\n constructor(p0: IPoint, p1: IPoint, p2: IPoint, p3: IPoint) {\n super();\n this.p0 = p0;\n this.p1 = p1;\n this.p2 = p2;\n this.p3 = p3;\n }\n\n protected _validPoint(): boolean {\n return Number.isFinite(\n this.p0.x + this.p0.y + this.p1.x + this.p1.y + this.p2.x + this.p2.y + this.p3.x + this.p3.y\n );\n }\n getPointAt(t: number): IPointLike {\n if (this.defined !== false) {\n return cubicPointAt(this.p0, this.p1, this.p2, this.p3, t);\n }\n throw new Error('defined为false的点不能getPointAt');\n }\n protected calcLength(): number {\n // throw new Error('CubicBezierCurve暂不支持updateLength');\n if (this._validPoint()) {\n return cubicLength(this.p0, this.p1, this.p2, this.p3, 0);\n }\n // return distance(this.p0.x || 0, this.p0.y || 0, this.p3.x || 0, this.p3.y || 0);\n // 默认长度不好给\n return 60;\n }\n\n protected calcProjLength(direction: IDirection): number {\n if (direction === Direction.ROW) {\n return abs(this.p0.x - this.p3.x);\n } else if (direction === Direction.COLUMN) {\n return abs(this.p0.y - this.p3.y);\n }\n return 0;\n }\n getAngleAt(t: number): number {\n const minT = max(t - 0.01, 0);\n const maxT = min(t + 0.01, 1);\n const minP = this.getPointAt(minT);\n const maxP = this.getPointAt(maxT);\n return atan2(maxP.y - minP.y, maxP.x - minP.x);\n }\n draw(path: IPath2D, x: number, y: number, sx: number, sy: number, percent: number) {\n path.moveTo(this.p0.x * sx + x, this.p0.y * sy + y);\n if (percent >= 1) {\n path.bezierCurveTo(\n this.p1.x * sx + x,\n this.p1.y * sy + y,\n this.p2.x * sx + x,\n this.p2.y * sy + y,\n this.p3.x * sx + x,\n this.p3.y * sy + y\n );\n } else if (percent > 0) {\n const [curve1] = divideCubic(this, percent);\n path.bezierCurveTo(\n curve1.p1.x * sx + x,\n curve1.p1.y * sy + y,\n curve1.p2.x * sx + x,\n curve1.p2.y * sy + y,\n curve1.p3.x * sx + x,\n curve1.p3.y * sy + y\n );\n }\n }\n\n includeX(x: number): boolean {\n const minX = min(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const maxX = max(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n return x >= minX && x <= maxX;\n }\n\n getYAt(x: number): number {\n const minX = min(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const maxX = max(this.p0.x, this.p1.x, this.p2.x, this.p3.x);\n const t = (x - minX) / (maxX - minX);\n return this.getPointAt(t).y;\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IDirection, IPath2D, IQuadraticBezierCurve } from '../../../interface';
|
|
2
2
|
import { Curve } from './base';
|
|
3
3
|
import { type IPoint, type IPointLike } from '@visactor/vutils';
|
|
4
|
+
export declare function divideQuad(curve: IQuadraticBezierCurve, t: number): IQuadraticBezierCurve[];
|
|
4
5
|
export declare class QuadraticBezierCurve extends Curve implements IQuadraticBezierCurve {
|
|
5
6
|
type: number;
|
|
6
7
|
originP1?: IPointLike;
|