@antv/infographic 0.1.2 → 0.1.4
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/README.md +26 -2
- package/README.zh-CN.md +26 -3
- package/dist/infographic.min.js +491 -81
- package/dist/infographic.min.js.map +1 -1
- package/esm/constants/components.d.ts +1 -0
- package/esm/constants/components.js +1 -0
- package/esm/constants/element.d.ts +17 -6
- package/esm/constants/index.d.ts +3 -0
- package/esm/constants/index.js +3 -0
- package/esm/constants/service.d.ts +1 -0
- package/esm/constants/service.js +1 -0
- package/esm/constants/shape.d.ts +16 -0
- package/esm/designs/components/Btn.js +2 -2
- package/esm/designs/components/BtnsGroup.js +1 -1
- package/esm/designs/components/Illus.js +2 -2
- package/esm/designs/components/ItemDesc.js +1 -2
- package/esm/designs/components/ItemIcon.js +1 -1
- package/esm/designs/components/ItemLabel.js +1 -2
- package/esm/designs/components/ItemValue.js +1 -2
- package/esm/designs/components/ItemsGroup.js +1 -1
- package/esm/designs/components/Title.js +2 -5
- package/esm/designs/items/CandyCardLite.js +1 -1
- package/esm/designs/items/CircularProgress.js +2 -1
- package/esm/designs/items/HorizontalIconArrow.js +1 -2
- package/esm/designs/items/HorizontalIconLine.js +1 -1
- package/esm/designs/items/IconBadge.js +1 -1
- package/esm/designs/items/LinedText.d.ts +12 -0
- package/esm/designs/items/LinedText.js +57 -0
- package/esm/designs/items/PlainText.d.ts +1 -0
- package/esm/designs/items/PlainText.js +16 -3
- package/esm/designs/items/QuarterCircular.js +1 -31
- package/esm/designs/items/index.d.ts +1 -0
- package/esm/designs/items/index.js +1 -0
- package/esm/designs/layouts/Align.js +31 -45
- package/esm/designs/layouts/Flex.js +33 -29
- package/esm/designs/structures/chart-bar.d.ts +15 -0
- package/esm/designs/structures/chart-bar.js +99 -0
- package/esm/designs/structures/chart-line.d.ts +12 -0
- package/esm/designs/structures/chart-line.js +164 -0
- package/esm/designs/structures/chart-pie.d.ts +9 -0
- package/esm/designs/structures/chart-pie.js +127 -0
- package/esm/designs/structures/chart-wordcloud.d.ts +11 -0
- package/esm/designs/structures/chart-wordcloud.js +156 -0
- package/esm/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.js +1 -1
- package/esm/designs/structures/hierarchy-mindmap.d.ts +24 -0
- package/esm/designs/structures/hierarchy-mindmap.js +199 -0
- package/esm/designs/structures/hierarchy-tree.d.ts +2 -0
- package/esm/designs/structures/hierarchy-tree.js +179 -50
- package/esm/designs/structures/index.d.ts +6 -0
- package/esm/designs/structures/index.js +6 -0
- package/esm/designs/structures/list-sector.js +1 -1
- package/esm/designs/structures/sequence-circular.js +1 -1
- package/esm/designs/structures/sequence-cylinders-3d.js +4 -4
- package/esm/designs/structures/sequence-roadmap-vertical.js +1 -1
- package/esm/designs/structures/sequence-stairs-front.d.ts +8 -0
- package/esm/designs/structures/sequence-stairs-front.js +116 -0
- package/esm/designs/structures/sequence-zigzag-pucks-3d.js +5 -5
- package/esm/designs/types.d.ts +8 -0
- package/esm/editor/commands/Batch.d.ts +11 -0
- package/esm/editor/commands/Batch.js +21 -0
- package/esm/editor/commands/UpdateElement.d.ts +16 -0
- package/esm/editor/commands/UpdateElement.js +83 -0
- package/esm/editor/commands/UpdateOptions.d.ts +14 -0
- package/esm/editor/commands/UpdateOptions.js +25 -0
- package/esm/editor/commands/UpdateText.d.ts +16 -0
- package/esm/editor/commands/UpdateText.js +40 -0
- package/esm/editor/commands/index.d.ts +4 -0
- package/esm/editor/commands/index.js +4 -0
- package/esm/editor/editor.d.ts +16 -0
- package/esm/editor/editor.js +50 -0
- package/esm/editor/index.d.ts +4 -0
- package/esm/editor/index.js +3 -0
- package/esm/editor/interactions/base.d.ts +12 -0
- package/esm/editor/interactions/base.js +5 -0
- package/esm/editor/interactions/brush-select.d.ts +23 -0
- package/esm/editor/interactions/brush-select.js +167 -0
- package/esm/editor/interactions/click-select.d.ts +12 -0
- package/esm/editor/interactions/click-select.js +67 -0
- package/esm/editor/interactions/dblclick-edit-text.d.ts +10 -0
- package/esm/editor/interactions/dblclick-edit-text.js +204 -0
- package/esm/editor/interactions/drag-element.d.ts +41 -0
- package/esm/editor/interactions/drag-element.js +391 -0
- package/esm/editor/interactions/hotkey-history.d.ts +10 -0
- package/esm/editor/interactions/hotkey-history.js +27 -0
- package/esm/editor/interactions/index.d.ts +8 -0
- package/esm/editor/interactions/index.js +8 -0
- package/esm/editor/interactions/select-highlight.d.ts +16 -0
- package/esm/editor/interactions/select-highlight.js +99 -0
- package/esm/editor/interactions/zoom-wheel.d.ts +8 -0
- package/esm/editor/interactions/zoom-wheel.js +46 -0
- package/esm/editor/managers/command.d.ts +19 -0
- package/esm/editor/managers/command.js +63 -0
- package/esm/editor/managers/index.d.ts +4 -0
- package/esm/editor/managers/index.js +4 -0
- package/esm/editor/managers/interaction.d.ts +33 -0
- package/esm/editor/managers/interaction.js +196 -0
- package/esm/editor/managers/plugin.d.ts +14 -0
- package/esm/editor/managers/plugin.js +45 -0
- package/esm/editor/managers/state.d.ts +22 -0
- package/esm/editor/managers/state.js +141 -0
- package/esm/editor/plugins/base.d.ts +12 -0
- package/esm/editor/plugins/base.js +5 -0
- package/esm/editor/plugins/edit-bar/components/button.d.ts +12 -0
- package/esm/editor/plugins/edit-bar/components/button.js +53 -0
- package/esm/editor/plugins/edit-bar/components/color-picker.d.ts +10 -0
- package/esm/editor/plugins/edit-bar/components/color-picker.js +351 -0
- package/esm/editor/plugins/edit-bar/components/icons.d.ts +26 -0
- package/esm/editor/plugins/edit-bar/components/icons.js +30 -0
- package/esm/editor/plugins/edit-bar/components/index.d.ts +5 -0
- package/esm/editor/plugins/edit-bar/components/index.js +5 -0
- package/esm/editor/plugins/edit-bar/components/popover.d.ts +23 -0
- package/esm/editor/plugins/edit-bar/components/popover.js +378 -0
- package/esm/editor/plugins/edit-bar/components/select.d.ts +22 -0
- package/esm/editor/plugins/edit-bar/components/select.js +201 -0
- package/esm/editor/plugins/edit-bar/edit-bar.d.ts +32 -0
- package/esm/editor/plugins/edit-bar/edit-bar.js +211 -0
- package/esm/editor/plugins/edit-bar/edit-items/align-elements.d.ts +2 -0
- package/esm/editor/plugins/edit-bar/edit-items/align-elements.js +312 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-align.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-align.js +81 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-color.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-color.js +77 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-family.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-family.js +115 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-size.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/edit-items/font-size.js +88 -0
- package/esm/editor/plugins/edit-bar/edit-items/icon-color.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/edit-items/icon-color.js +77 -0
- package/esm/editor/plugins/edit-bar/edit-items/index.d.ts +7 -0
- package/esm/editor/plugins/edit-bar/edit-items/index.js +6 -0
- package/esm/editor/plugins/edit-bar/edit-items/types.d.ts +3 -0
- package/esm/editor/plugins/edit-bar/index.d.ts +4 -0
- package/esm/editor/plugins/edit-bar/index.js +2 -0
- package/esm/editor/plugins/edit-bar/utils.d.ts +4 -0
- package/esm/editor/plugins/edit-bar/utils.js +14 -0
- package/esm/editor/plugins/index.d.ts +3 -0
- package/esm/editor/plugins/index.js +3 -0
- package/esm/editor/plugins/resize-element.d.ts +45 -0
- package/esm/editor/plugins/resize-element.js +393 -0
- package/esm/editor/types/command.d.ts +28 -0
- package/esm/editor/types/command.js +1 -0
- package/esm/editor/types/editor.d.ts +4 -0
- package/esm/editor/types/editor.js +1 -0
- package/esm/editor/types/index.d.ts +7 -0
- package/esm/editor/types/index.js +1 -0
- package/esm/editor/types/interaction.d.ts +44 -0
- package/esm/editor/types/interaction.js +1 -0
- package/esm/editor/types/plugin.d.ts +30 -0
- package/esm/editor/types/plugin.js +1 -0
- package/esm/editor/types/selection.d.ts +2 -0
- package/esm/editor/types/selection.js +1 -0
- package/esm/editor/types/shape.d.ts +16 -0
- package/esm/editor/types/shape.js +1 -0
- package/esm/editor/types/state.d.ts +57 -0
- package/esm/editor/types/state.js +1 -0
- package/esm/editor/utils/click-handler.d.ts +28 -0
- package/esm/editor/utils/click-handler.js +97 -0
- package/esm/editor/utils/coordinate.d.ts +6 -0
- package/esm/editor/utils/coordinate.js +31 -0
- package/esm/editor/utils/data.d.ts +10 -0
- package/esm/editor/utils/data.js +18 -0
- package/esm/editor/utils/element.d.ts +2 -0
- package/esm/editor/utils/element.js +9 -0
- package/esm/editor/utils/event.d.ts +3 -0
- package/esm/editor/utils/event.js +63 -0
- package/esm/editor/utils/extension.d.ts +13 -0
- package/esm/editor/utils/extension.js +39 -0
- package/esm/editor/utils/hotkey.d.ts +20 -0
- package/esm/editor/utils/hotkey.js +109 -0
- package/esm/editor/utils/index.d.ts +7 -0
- package/esm/editor/utils/index.js +7 -0
- package/esm/exporter/svg.js +7 -5
- package/esm/index.d.ts +7 -2
- package/esm/index.js +3 -0
- package/esm/jsx/components/Polygon.js +2 -1
- package/esm/jsx/components/Text.js +66 -68
- package/esm/options/parser.d.ts +1 -1
- package/esm/options/parser.js +33 -15
- package/esm/options/types.d.ts +15 -2
- package/esm/renderer/composites/background.js +2 -2
- package/esm/renderer/composites/button.js +4 -3
- package/esm/renderer/composites/icon.d.ts +1 -1
- package/esm/renderer/composites/icon.js +3 -1
- package/esm/renderer/composites/illus.js +1 -1
- package/esm/renderer/composites/text.js +2 -1
- package/esm/renderer/renderer.js +3 -2
- package/esm/renderer/stylize/rough.js +3 -7
- package/esm/renderer/types/index.d.ts +0 -1
- package/esm/resource/loader.d.ts +2 -2
- package/esm/resource/loader.js +22 -11
- package/esm/resource/loaders/index.d.ts +1 -0
- package/esm/resource/loaders/index.js +1 -0
- package/esm/resource/loaders/remote.d.ts +1 -1
- package/esm/resource/loaders/remote.js +10 -2
- package/esm/resource/loaders/search.d.ts +1 -0
- package/esm/resource/loaders/search.js +51 -0
- package/esm/resource/types/index.d.ts +1 -0
- package/esm/resource/types/resource.d.ts +8 -1
- package/esm/resource/types/scene.d.ts +1 -0
- package/esm/resource/types/scene.js +1 -0
- package/esm/resource/utils/data-uri.js +20 -11
- package/esm/resource/utils/index.d.ts +0 -1
- package/esm/resource/utils/index.js +0 -1
- package/esm/resource/utils/parser.js +92 -1
- package/esm/resource/utils/ref.js +3 -3
- package/esm/runtime/Infographic.d.ts +14 -7
- package/esm/runtime/Infographic.js +70 -10
- package/esm/runtime/options.d.ts +2 -0
- package/esm/runtime/options.js +24 -0
- package/esm/runtime/utils.d.ts +4 -0
- package/esm/runtime/utils.js +38 -0
- package/esm/syntax/index.d.ts +3 -0
- package/esm/syntax/index.js +101 -0
- package/esm/syntax/mapper.d.ts +3 -0
- package/esm/syntax/mapper.js +238 -0
- package/esm/syntax/parser.d.ts +14 -0
- package/esm/syntax/parser.js +142 -0
- package/esm/syntax/schema.d.ts +6 -0
- package/esm/syntax/schema.js +74 -0
- package/esm/syntax/types.d.ts +61 -0
- package/esm/syntax/types.js +1 -0
- package/esm/templates/built-in.js +116 -1
- package/esm/templates/hierarchy-mindmap.d.ts +2 -0
- package/esm/templates/hierarchy-mindmap.js +61 -0
- package/esm/templates/hierarchy-tree.js +25 -11
- package/esm/templates/sequence-stairs.d.ts +2 -0
- package/esm/templates/sequence-stairs.js +42 -0
- package/esm/templates/word-cloud.d.ts +2 -0
- package/esm/templates/word-cloud.js +19 -0
- package/esm/themes/types.d.ts +1 -1
- package/esm/types/attrs.d.ts +15 -13
- package/esm/types/data.d.ts +2 -0
- package/esm/types/element.d.ts +1 -1
- package/esm/types/event.d.ts +6 -0
- package/esm/types/event.js +1 -0
- package/esm/types/index.d.ts +2 -0
- package/esm/{renderer/types → types}/text.d.ts +0 -1
- package/esm/types/text.js +1 -0
- package/esm/utils/attrs.d.ts +1 -0
- package/esm/utils/attrs.js +9 -0
- package/esm/utils/design.d.ts +2 -0
- package/esm/utils/design.js +10 -0
- package/esm/utils/element.d.ts +4 -0
- package/esm/utils/element.js +13 -0
- package/esm/utils/font.js +11 -1
- package/esm/utils/icon.d.ts +5 -3
- package/esm/utils/icon.js +38 -19
- package/esm/utils/index.d.ts +6 -0
- package/esm/utils/index.js +6 -0
- package/esm/utils/measure-text.d.ts +5 -0
- package/esm/utils/measure-text.js +22 -0
- package/esm/utils/recognizer.d.ts +15 -0
- package/esm/utils/recognizer.js +61 -1
- package/esm/utils/style.d.ts +1 -0
- package/esm/utils/style.js +8 -0
- package/esm/utils/text.d.ts +7 -0
- package/esm/utils/text.js +110 -35
- package/lib/constants/components.d.ts +1 -0
- package/lib/constants/components.js +4 -0
- package/lib/constants/element.d.ts +17 -6
- package/lib/constants/index.d.ts +3 -0
- package/lib/constants/index.js +3 -0
- package/lib/constants/service.d.ts +1 -0
- package/lib/constants/service.js +4 -0
- package/lib/constants/shape.d.ts +16 -0
- package/lib/designs/components/Btn.js +2 -2
- package/lib/designs/components/BtnsGroup.js +1 -1
- package/lib/designs/components/Illus.js +2 -2
- package/lib/designs/components/ItemDesc.js +1 -2
- package/lib/designs/components/ItemIcon.js +1 -1
- package/lib/designs/components/ItemLabel.js +1 -2
- package/lib/designs/components/ItemValue.js +1 -2
- package/lib/designs/components/ItemsGroup.js +1 -1
- package/lib/designs/components/Title.js +2 -5
- package/lib/designs/items/CandyCardLite.js +1 -1
- package/lib/designs/items/CircularProgress.js +2 -1
- package/lib/designs/items/HorizontalIconArrow.js +1 -2
- package/lib/designs/items/HorizontalIconLine.js +1 -1
- package/lib/designs/items/IconBadge.js +1 -1
- package/lib/designs/items/LinedText.d.ts +12 -0
- package/lib/designs/items/LinedText.js +61 -0
- package/lib/designs/items/PlainText.d.ts +1 -0
- package/lib/designs/items/PlainText.js +16 -3
- package/lib/designs/items/QuarterCircular.js +1 -31
- package/lib/designs/items/index.d.ts +1 -0
- package/lib/designs/items/index.js +1 -0
- package/lib/designs/layouts/Align.js +31 -45
- package/lib/designs/layouts/Flex.js +33 -29
- package/lib/designs/structures/chart-bar.d.ts +15 -0
- package/lib/designs/structures/chart-bar.js +103 -0
- package/lib/designs/structures/chart-line.d.ts +12 -0
- package/lib/designs/structures/chart-line.js +168 -0
- package/lib/designs/structures/chart-pie.d.ts +9 -0
- package/lib/designs/structures/chart-pie.js +131 -0
- package/lib/designs/structures/chart-wordcloud.d.ts +11 -0
- package/lib/designs/structures/chart-wordcloud.js +160 -0
- package/lib/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.js +1 -1
- package/lib/designs/structures/hierarchy-mindmap.d.ts +24 -0
- package/lib/designs/structures/hierarchy-mindmap.js +203 -0
- package/lib/designs/structures/hierarchy-tree.d.ts +2 -0
- package/lib/designs/structures/hierarchy-tree.js +179 -50
- package/lib/designs/structures/index.d.ts +6 -0
- package/lib/designs/structures/index.js +6 -0
- package/lib/designs/structures/list-sector.js +1 -1
- package/lib/designs/structures/sequence-circular.js +1 -1
- package/lib/designs/structures/sequence-cylinders-3d.js +4 -4
- package/lib/designs/structures/sequence-roadmap-vertical.js +1 -1
- package/lib/designs/structures/sequence-stairs-front.d.ts +8 -0
- package/lib/designs/structures/sequence-stairs-front.js +120 -0
- package/lib/designs/structures/sequence-zigzag-pucks-3d.js +5 -5
- package/lib/designs/types.d.ts +8 -0
- package/lib/editor/commands/Batch.d.ts +11 -0
- package/lib/editor/commands/Batch.js +25 -0
- package/lib/editor/commands/UpdateElement.d.ts +16 -0
- package/lib/editor/commands/UpdateElement.js +87 -0
- package/lib/editor/commands/UpdateOptions.d.ts +14 -0
- package/lib/editor/commands/UpdateOptions.js +29 -0
- package/lib/editor/commands/UpdateText.d.ts +16 -0
- package/lib/editor/commands/UpdateText.js +44 -0
- package/lib/editor/commands/index.d.ts +4 -0
- package/lib/editor/commands/index.js +20 -0
- package/lib/editor/editor.d.ts +16 -0
- package/lib/editor/editor.js +54 -0
- package/lib/editor/index.d.ts +4 -0
- package/lib/editor/index.js +21 -0
- package/lib/editor/interactions/base.d.ts +12 -0
- package/lib/editor/interactions/base.js +9 -0
- package/lib/editor/interactions/brush-select.d.ts +23 -0
- package/lib/editor/interactions/brush-select.js +171 -0
- package/lib/editor/interactions/click-select.d.ts +12 -0
- package/lib/editor/interactions/click-select.js +71 -0
- package/lib/editor/interactions/dblclick-edit-text.d.ts +10 -0
- package/lib/editor/interactions/dblclick-edit-text.js +208 -0
- package/lib/editor/interactions/drag-element.d.ts +41 -0
- package/lib/editor/interactions/drag-element.js +395 -0
- package/lib/editor/interactions/hotkey-history.d.ts +10 -0
- package/lib/editor/interactions/hotkey-history.js +31 -0
- package/lib/editor/interactions/index.d.ts +8 -0
- package/lib/editor/interactions/index.js +19 -0
- package/lib/editor/interactions/select-highlight.d.ts +16 -0
- package/lib/editor/interactions/select-highlight.js +103 -0
- package/lib/editor/interactions/zoom-wheel.d.ts +8 -0
- package/lib/editor/interactions/zoom-wheel.js +50 -0
- package/lib/editor/managers/command.d.ts +19 -0
- package/lib/editor/managers/command.js +67 -0
- package/lib/editor/managers/index.d.ts +4 -0
- package/lib/editor/managers/index.js +20 -0
- package/lib/editor/managers/interaction.d.ts +33 -0
- package/lib/editor/managers/interaction.js +200 -0
- package/lib/editor/managers/plugin.d.ts +14 -0
- package/lib/editor/managers/plugin.js +49 -0
- package/lib/editor/managers/state.d.ts +22 -0
- package/lib/editor/managers/state.js +145 -0
- package/lib/editor/plugins/base.d.ts +12 -0
- package/lib/editor/plugins/base.js +9 -0
- package/lib/editor/plugins/edit-bar/components/button.d.ts +12 -0
- package/lib/editor/plugins/edit-bar/components/button.js +57 -0
- package/lib/editor/plugins/edit-bar/components/color-picker.d.ts +10 -0
- package/lib/editor/plugins/edit-bar/components/color-picker.js +354 -0
- package/lib/editor/plugins/edit-bar/components/icons.d.ts +26 -0
- package/lib/editor/plugins/edit-bar/components/icons.js +33 -0
- package/lib/editor/plugins/edit-bar/components/index.d.ts +5 -0
- package/lib/editor/plugins/edit-bar/components/index.js +21 -0
- package/lib/editor/plugins/edit-bar/components/popover.d.ts +23 -0
- package/lib/editor/plugins/edit-bar/components/popover.js +381 -0
- package/lib/editor/plugins/edit-bar/components/select.d.ts +22 -0
- package/lib/editor/plugins/edit-bar/components/select.js +204 -0
- package/lib/editor/plugins/edit-bar/edit-bar.d.ts +32 -0
- package/lib/editor/plugins/edit-bar/edit-bar.js +215 -0
- package/lib/editor/plugins/edit-bar/edit-items/align-elements.d.ts +2 -0
- package/lib/editor/plugins/edit-bar/edit-items/align-elements.js +316 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-align.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-align.js +85 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-color.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-color.js +81 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-family.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-family.js +119 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-size.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/edit-items/font-size.js +92 -0
- package/lib/editor/plugins/edit-bar/edit-items/icon-color.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/edit-items/icon-color.js +81 -0
- package/lib/editor/plugins/edit-bar/edit-items/index.d.ts +7 -0
- package/lib/editor/plugins/edit-bar/edit-items/index.js +22 -0
- package/lib/editor/plugins/edit-bar/edit-items/types.d.ts +3 -0
- package/lib/editor/plugins/edit-bar/index.d.ts +4 -0
- package/lib/editor/plugins/edit-bar/index.js +9 -0
- package/lib/editor/plugins/edit-bar/utils.d.ts +4 -0
- package/lib/editor/plugins/edit-bar/utils.js +17 -0
- package/lib/editor/plugins/index.d.ts +3 -0
- package/lib/editor/plugins/index.js +22 -0
- package/lib/editor/plugins/resize-element.d.ts +45 -0
- package/lib/editor/plugins/resize-element.js +397 -0
- package/lib/editor/types/command.d.ts +28 -0
- package/lib/editor/types/command.js +2 -0
- package/lib/editor/types/editor.d.ts +4 -0
- package/lib/editor/types/editor.js +2 -0
- package/lib/editor/types/index.d.ts +7 -0
- package/lib/editor/types/index.js +2 -0
- package/lib/editor/types/interaction.d.ts +44 -0
- package/lib/editor/types/interaction.js +2 -0
- package/lib/editor/types/plugin.d.ts +30 -0
- package/lib/editor/types/plugin.js +2 -0
- package/lib/editor/types/selection.d.ts +2 -0
- package/lib/editor/types/selection.js +2 -0
- package/lib/editor/types/shape.d.ts +16 -0
- package/lib/editor/types/shape.js +2 -0
- package/lib/editor/types/state.d.ts +57 -0
- package/lib/editor/types/state.js +2 -0
- package/lib/editor/utils/click-handler.d.ts +28 -0
- package/lib/editor/utils/click-handler.js +101 -0
- package/lib/editor/utils/coordinate.d.ts +6 -0
- package/lib/editor/utils/coordinate.js +38 -0
- package/lib/editor/utils/data.d.ts +10 -0
- package/lib/editor/utils/data.js +22 -0
- package/lib/editor/utils/element.d.ts +2 -0
- package/lib/editor/utils/element.js +12 -0
- package/lib/editor/utils/event.d.ts +3 -0
- package/lib/editor/utils/event.js +67 -0
- package/lib/editor/utils/extension.d.ts +13 -0
- package/lib/editor/utils/extension.js +43 -0
- package/lib/editor/utils/hotkey.d.ts +20 -0
- package/lib/editor/utils/hotkey.js +113 -0
- package/lib/editor/utils/index.d.ts +7 -0
- package/lib/editor/utils/index.js +23 -0
- package/lib/exporter/svg.js +6 -4
- package/lib/index.d.ts +7 -2
- package/lib/index.js +17 -1
- package/lib/jsx/components/Polygon.js +2 -1
- package/lib/jsx/components/Text.js +66 -68
- package/lib/options/parser.d.ts +1 -1
- package/lib/options/parser.js +32 -14
- package/lib/options/types.d.ts +15 -2
- package/lib/renderer/composites/background.js +1 -1
- package/lib/renderer/composites/button.js +3 -2
- package/lib/renderer/composites/icon.d.ts +1 -1
- package/lib/renderer/composites/icon.js +3 -1
- package/lib/renderer/composites/illus.js +1 -1
- package/lib/renderer/composites/text.js +2 -1
- package/lib/renderer/renderer.js +2 -1
- package/lib/renderer/stylize/rough.js +3 -7
- package/lib/renderer/types/index.d.ts +0 -1
- package/lib/resource/loader.d.ts +2 -2
- package/lib/resource/loader.js +21 -10
- package/lib/resource/loaders/index.d.ts +1 -0
- package/lib/resource/loaders/index.js +1 -0
- package/lib/resource/loaders/remote.d.ts +1 -1
- package/lib/resource/loaders/remote.js +10 -2
- package/lib/resource/loaders/search.d.ts +1 -0
- package/lib/resource/loaders/search.js +54 -0
- package/lib/resource/types/index.d.ts +1 -0
- package/lib/resource/types/resource.d.ts +8 -1
- package/lib/resource/types/scene.d.ts +1 -0
- package/lib/resource/types/scene.js +2 -0
- package/lib/resource/utils/data-uri.js +20 -11
- package/lib/resource/utils/index.d.ts +0 -1
- package/lib/resource/utils/index.js +0 -1
- package/lib/resource/utils/parser.js +92 -1
- package/lib/resource/utils/ref.js +4 -4
- package/lib/runtime/Infographic.d.ts +14 -7
- package/lib/runtime/Infographic.js +73 -10
- package/lib/runtime/options.d.ts +2 -0
- package/lib/runtime/options.js +27 -0
- package/lib/runtime/utils.d.ts +4 -0
- package/lib/runtime/utils.js +43 -0
- package/lib/syntax/index.d.ts +3 -0
- package/lib/syntax/index.js +104 -0
- package/lib/syntax/mapper.d.ts +3 -0
- package/lib/syntax/mapper.js +242 -0
- package/lib/syntax/parser.d.ts +14 -0
- package/lib/syntax/parser.js +146 -0
- package/lib/syntax/schema.d.ts +6 -0
- package/lib/syntax/schema.js +77 -0
- package/lib/syntax/types.d.ts +61 -0
- package/lib/syntax/types.js +2 -0
- package/lib/templates/built-in.js +116 -1
- package/lib/templates/hierarchy-mindmap.d.ts +2 -0
- package/lib/templates/hierarchy-mindmap.js +64 -0
- package/lib/templates/hierarchy-tree.js +25 -11
- package/lib/templates/sequence-stairs.d.ts +2 -0
- package/lib/templates/sequence-stairs.js +45 -0
- package/lib/templates/word-cloud.d.ts +2 -0
- package/lib/templates/word-cloud.js +22 -0
- package/lib/themes/types.d.ts +1 -1
- package/lib/types/attrs.d.ts +15 -13
- package/lib/types/data.d.ts +2 -0
- package/lib/types/element.d.ts +1 -1
- package/lib/types/event.d.ts +6 -0
- package/lib/types/event.js +2 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/{renderer/types → types}/text.d.ts +0 -1
- package/lib/types/text.js +2 -0
- package/lib/utils/attrs.d.ts +1 -0
- package/lib/utils/attrs.js +12 -0
- package/lib/utils/design.d.ts +2 -0
- package/lib/utils/design.js +13 -0
- package/lib/utils/element.d.ts +4 -0
- package/lib/utils/element.js +18 -0
- package/lib/utils/font.js +11 -1
- package/lib/utils/icon.d.ts +5 -3
- package/lib/utils/icon.js +42 -21
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/index.js +6 -0
- package/lib/utils/measure-text.d.ts +5 -0
- package/lib/utils/measure-text.js +28 -0
- package/lib/utils/recognizer.d.ts +15 -0
- package/lib/utils/recognizer.js +72 -2
- package/lib/utils/style.d.ts +1 -0
- package/lib/utils/style.js +11 -0
- package/lib/utils/text.d.ts +7 -0
- package/lib/utils/text.js +113 -32
- package/package.json +7 -3
- package/src/constants/components.ts +1 -0
- package/src/constants/element.ts +17 -5
- package/src/constants/index.ts +3 -0
- package/src/constants/service.ts +1 -0
- package/src/constants/shape.ts +16 -0
- package/src/designs/components/Btn.tsx +3 -2
- package/src/designs/components/BtnsGroup.tsx +2 -1
- package/src/designs/components/Illus.tsx +3 -2
- package/src/designs/components/ItemDesc.tsx +2 -2
- package/src/designs/components/ItemIcon.tsx +3 -2
- package/src/designs/components/ItemLabel.tsx +2 -2
- package/src/designs/components/ItemValue.tsx +2 -2
- package/src/designs/components/ItemsGroup.tsx +2 -1
- package/src/designs/components/Title.tsx +8 -5
- package/src/designs/items/CandyCardLite.tsx +3 -3
- package/src/designs/items/CircularProgress.tsx +19 -8
- package/src/designs/items/HorizontalIconArrow.tsx +4 -5
- package/src/designs/items/HorizontalIconLine.tsx +7 -10
- package/src/designs/items/IconBadge.tsx +3 -3
- package/src/designs/items/LinedText.tsx +131 -0
- package/src/designs/items/PlainText.tsx +25 -3
- package/src/designs/items/QuarterCircular.tsx +2 -31
- package/src/designs/items/index.ts +1 -0
- package/src/designs/layouts/Align.tsx +31 -48
- package/src/designs/layouts/Flex.tsx +33 -31
- package/src/designs/structures/chart-bar.tsx +289 -0
- package/src/designs/structures/chart-line.tsx +415 -0
- package/src/designs/structures/chart-pie.tsx +298 -0
- package/src/designs/structures/chart-wordcloud.tsx +278 -0
- package/src/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.tsx +2 -2
- package/src/designs/structures/hierarchy-mindmap.tsx +394 -0
- package/src/designs/structures/hierarchy-tree.tsx +212 -59
- package/src/designs/structures/index.ts +6 -0
- package/src/designs/structures/list-sector.tsx +2 -1
- package/src/designs/structures/sequence-ascending-steps.tsx +0 -1
- package/src/designs/structures/sequence-circular.tsx +1 -1
- package/src/designs/structures/sequence-cylinders-3d.tsx +5 -5
- package/src/designs/structures/sequence-roadmap-vertical.tsx +2 -1
- package/src/designs/structures/sequence-stairs-front.tsx +291 -0
- package/src/designs/structures/sequence-zigzag-pucks-3d.tsx +18 -25
- package/src/designs/types.ts +9 -0
- package/src/editor/commands/Batch.ts +24 -0
- package/src/editor/commands/UpdateElement.ts +115 -0
- package/src/editor/commands/UpdateOptions.ts +31 -0
- package/src/editor/commands/UpdateText.ts +54 -0
- package/src/editor/commands/index.ts +4 -0
- package/src/editor/editor.ts +78 -0
- package/src/editor/index.ts +4 -0
- package/src/editor/interactions/base.ts +25 -0
- package/src/editor/interactions/brush-select.ts +204 -0
- package/src/editor/interactions/click-select.ts +72 -0
- package/src/editor/interactions/dblclick-edit-text.ts +260 -0
- package/src/editor/interactions/drag-element.ts +516 -0
- package/src/editor/interactions/hotkey-history.ts +34 -0
- package/src/editor/interactions/index.ts +8 -0
- package/src/editor/interactions/select-highlight.ts +140 -0
- package/src/editor/interactions/zoom-wheel.ts +52 -0
- package/src/editor/managers/command.ts +83 -0
- package/src/editor/managers/index.ts +4 -0
- package/src/editor/managers/interaction.ts +244 -0
- package/src/editor/managers/plugin.ts +66 -0
- package/src/editor/managers/state.ts +186 -0
- package/src/editor/plugins/base.ts +25 -0
- package/src/editor/plugins/edit-bar/components/button.ts +77 -0
- package/src/editor/plugins/edit-bar/components/color-picker.ts +397 -0
- package/src/editor/plugins/edit-bar/components/icons.ts +86 -0
- package/src/editor/plugins/edit-bar/components/index.ts +5 -0
- package/src/editor/plugins/edit-bar/components/popover.ts +446 -0
- package/src/editor/plugins/edit-bar/components/select.ts +247 -0
- package/src/editor/plugins/edit-bar/edit-bar.ts +292 -0
- package/src/editor/plugins/edit-bar/edit-items/align-elements.ts +447 -0
- package/src/editor/plugins/edit-bar/edit-items/font-align.ts +129 -0
- package/src/editor/plugins/edit-bar/edit-items/font-color.ts +101 -0
- package/src/editor/plugins/edit-bar/edit-items/font-family.ts +147 -0
- package/src/editor/plugins/edit-bar/edit-items/font-size.ts +116 -0
- package/src/editor/plugins/edit-bar/edit-items/icon-color.ts +101 -0
- package/src/editor/plugins/edit-bar/edit-items/index.ts +7 -0
- package/src/editor/plugins/edit-bar/edit-items/types.ts +9 -0
- package/src/editor/plugins/edit-bar/index.ts +18 -0
- package/src/editor/plugins/edit-bar/utils.ts +16 -0
- package/src/editor/plugins/index.ts +3 -0
- package/src/editor/plugins/resize-element.ts +518 -0
- package/src/editor/types/command.ts +32 -0
- package/src/editor/types/editor.ts +4 -0
- package/src/editor/types/index.ts +7 -0
- package/src/editor/types/interaction.ts +56 -0
- package/src/editor/types/plugin.ts +34 -0
- package/src/editor/types/selection.ts +3 -0
- package/src/editor/types/shape.ts +28 -0
- package/src/editor/types/state.ts +51 -0
- package/src/editor/utils/click-handler.ts +114 -0
- package/src/editor/utils/coordinate.ts +54 -0
- package/src/editor/utils/data.ts +30 -0
- package/src/editor/utils/element.ts +13 -0
- package/src/editor/utils/event.ts +92 -0
- package/src/editor/utils/extension.ts +45 -0
- package/src/editor/utils/hotkey.ts +139 -0
- package/src/editor/utils/index.ts +7 -0
- package/src/exporter/svg.ts +15 -5
- package/src/index.ts +16 -3
- package/src/jsx/components/Polygon.ts +2 -1
- package/src/jsx/components/Text.ts +70 -71
- package/src/options/parser.ts +57 -28
- package/src/options/types.ts +17 -2
- package/src/renderer/composites/background.ts +2 -2
- package/src/renderer/composites/button.ts +4 -3
- package/src/renderer/composites/icon.ts +3 -1
- package/src/renderer/composites/illus.ts +1 -1
- package/src/renderer/composites/text.ts +2 -1
- package/src/renderer/renderer.ts +4 -2
- package/src/renderer/stylize/rough.ts +3 -7
- package/src/renderer/types/index.ts +0 -1
- package/src/resource/loader.ts +22 -8
- package/src/resource/loaders/index.ts +1 -0
- package/src/resource/loaders/remote.ts +9 -2
- package/src/resource/loaders/search.ts +52 -0
- package/src/resource/types/index.ts +2 -1
- package/src/resource/types/resource.ts +12 -1
- package/src/resource/types/scene.ts +1 -0
- package/src/resource/utils/data-uri.ts +20 -11
- package/src/resource/utils/index.ts +0 -1
- package/src/resource/utils/parser.ts +103 -2
- package/src/resource/utils/ref.ts +3 -3
- package/src/runtime/Infographic.tsx +106 -13
- package/src/runtime/options.ts +37 -0
- package/src/runtime/utils.ts +45 -0
- package/src/syntax/index.ts +124 -0
- package/src/syntax/mapper.ts +362 -0
- package/src/syntax/parser.ts +171 -0
- package/src/syntax/schema.ts +98 -0
- package/src/syntax/types.ts +89 -0
- package/src/templates/built-in.ts +116 -1
- package/src/templates/hierarchy-mindmap.ts +129 -0
- package/src/templates/hierarchy-tree.ts +34 -11
- package/src/templates/sequence-stairs.ts +44 -0
- package/src/templates/word-cloud.ts +21 -0
- package/src/themes/types.ts +1 -1
- package/src/types/attrs.ts +17 -13
- package/src/types/data.ts +2 -0
- package/src/types/element.ts +1 -1
- package/src/types/event.ts +6 -0
- package/src/types/index.ts +2 -0
- package/src/{renderer/types → types}/text.ts +0 -1
- package/src/utils/attrs.ts +9 -0
- package/src/utils/design.ts +14 -0
- package/src/utils/element.ts +26 -0
- package/src/utils/font.ts +11 -1
- package/src/utils/icon.ts +45 -25
- package/src/utils/index.ts +6 -0
- package/src/utils/measure-text.ts +38 -0
- package/src/utils/recognizer.ts +75 -1
- package/src/utils/style.ts +8 -0
- package/src/utils/text.ts +135 -40
- package/esm/resource/types/font.d.ts +0 -12
- package/lib/resource/types/font.d.ts +0 -12
- package/src/resource/types/font.ts +0 -23
- /package/esm/{renderer/types/text.js → constants/shape.js} +0 -0
- /package/esm/{resource/types/font.js → editor/plugins/edit-bar/edit-items/types.js} +0 -0
- /package/esm/{resource/utils → utils}/hash.d.ts +0 -0
- /package/esm/{resource/utils → utils}/hash.js +0 -0
- /package/lib/{renderer/types/text.js → constants/shape.js} +0 -0
- /package/lib/{resource/types/font.js → editor/plugins/edit-bar/edit-items/types.js} +0 -0
- /package/lib/{resource/utils → utils}/hash.d.ts +0 -0
- /package/lib/{resource/utils → utils}/hash.js +0 -0
- /package/src/{resource/utils → utils}/hash.ts +0 -0
|
@@ -5,6 +5,10 @@ import { BtnAdd, BtnRemove, BtnsGroup, ItemsGroup, ShapesGroup, } from '../compo
|
|
|
5
5
|
import { FlexLayout } from '../layouts';
|
|
6
6
|
import { getColorPrimary, getHierarchyColorIndexes, getItemComponent, getPaletteColor, getThemeColors, } from '../utils';
|
|
7
7
|
import { registerStructure } from './registry';
|
|
8
|
+
const distributedPadding = (rawPadding, size) => {
|
|
9
|
+
const maxPadding = Math.max(0, size / 2 - 1);
|
|
10
|
+
return Math.min(rawPadding, maxPadding);
|
|
11
|
+
};
|
|
8
12
|
export const HierarchyTree = (props) => {
|
|
9
13
|
const { Title, Items, data,
|
|
10
14
|
// 布局配置
|
|
@@ -16,7 +20,11 @@ export const HierarchyTree = (props) => {
|
|
|
16
20
|
// 装饰元素配置
|
|
17
21
|
edgeMarker = 'none', markerSize = 12,
|
|
18
22
|
// 着色模式配置
|
|
19
|
-
colorMode = 'branch',
|
|
23
|
+
colorMode = 'branch',
|
|
24
|
+
// 布局方向
|
|
25
|
+
orientation = 'top-bottom', options, } = props;
|
|
26
|
+
const isHorizontal = orientation === 'left-right' || orientation === 'right-left';
|
|
27
|
+
const mainSign = orientation === 'bottom-top' || orientation === 'right-left' ? -1 : 1;
|
|
20
28
|
const { title, desc } = data;
|
|
21
29
|
const colorPrimary = getColorPrimary(options);
|
|
22
30
|
// 内置工具方法:数据预处理
|
|
@@ -29,19 +37,52 @@ export const HierarchyTree = (props) => {
|
|
|
29
37
|
return list;
|
|
30
38
|
};
|
|
31
39
|
// 内置工具方法:生成圆角路径
|
|
32
|
-
const createRoundedPath = (x1, y1, x2, y2, radius) => {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
40
|
+
const createRoundedPath = (x1, y1, x2, y2, radius, direction = 'vertical') => {
|
|
41
|
+
const isVertical = direction === 'vertical';
|
|
42
|
+
const deltaMain = isVertical ? y2 - y1 : x2 - x1;
|
|
43
|
+
const deltaCross = isVertical ? x2 - x1 : y2 - y1;
|
|
44
|
+
const signMain = deltaMain === 0 ? 1 : Math.sign(deltaMain);
|
|
45
|
+
const signCross = deltaCross === 0 ? 1 : Math.sign(deltaCross);
|
|
46
|
+
const midMain = isVertical ? y1 + deltaMain / 2 : x1 + deltaMain / 2;
|
|
47
|
+
const effectiveRadius = Math.min(radius, Math.abs(deltaMain) / 2, Math.abs(deltaCross) / 2);
|
|
35
48
|
if (effectiveRadius === 0) {
|
|
36
|
-
return
|
|
49
|
+
return isVertical
|
|
50
|
+
? `M ${x1} ${y1} L ${x1} ${midMain} L ${x2} ${midMain} L ${x2} ${y2}`
|
|
51
|
+
: `M ${x1} ${y1} L ${midMain} ${y1} L ${midMain} ${y2} L ${x2} ${y2}`;
|
|
52
|
+
}
|
|
53
|
+
if (isVertical) {
|
|
54
|
+
return `M ${x1} ${y1}
|
|
55
|
+
L ${x1} ${midMain - signMain * effectiveRadius}
|
|
56
|
+
Q ${x1} ${midMain} ${x1 + signCross * effectiveRadius} ${midMain}
|
|
57
|
+
L ${x2 - signCross * effectiveRadius} ${midMain}
|
|
58
|
+
Q ${x2} ${midMain} ${x2} ${midMain + signMain * effectiveRadius}
|
|
59
|
+
L ${x2} ${y2}`;
|
|
37
60
|
}
|
|
38
61
|
return `M ${x1} ${y1}
|
|
39
|
-
L ${
|
|
40
|
-
Q ${
|
|
41
|
-
L ${
|
|
42
|
-
Q ${
|
|
62
|
+
L ${midMain - signMain * effectiveRadius} ${y1}
|
|
63
|
+
Q ${midMain} ${y1} ${midMain} ${y1 + signCross * effectiveRadius}
|
|
64
|
+
L ${midMain} ${y2 - signCross * effectiveRadius}
|
|
65
|
+
Q ${midMain} ${y2} ${midMain + signMain * effectiveRadius} ${y2}
|
|
43
66
|
L ${x2} ${y2}`;
|
|
44
67
|
};
|
|
68
|
+
const getLayoutPoint = (node) => {
|
|
69
|
+
const { x, y } = node;
|
|
70
|
+
return isHorizontal ? { x: y * mainSign, y: x } : { x, y: y * mainSign };
|
|
71
|
+
};
|
|
72
|
+
const getNodeRect = (node, bounds, offsets) => {
|
|
73
|
+
const { x, y } = getLayoutPoint(node);
|
|
74
|
+
const centerX = x + offsets.x;
|
|
75
|
+
const top = y + offsets.y;
|
|
76
|
+
const centerY = top + bounds.height / 2;
|
|
77
|
+
return {
|
|
78
|
+
centerX,
|
|
79
|
+
centerY,
|
|
80
|
+
left: centerX - bounds.width / 2,
|
|
81
|
+
right: centerX + bounds.width / 2,
|
|
82
|
+
top,
|
|
83
|
+
bottom: top + bounds.height,
|
|
84
|
+
};
|
|
85
|
+
};
|
|
45
86
|
// 内置工具方法:构建层级数据
|
|
46
87
|
const buildHierarchyData = (list) => {
|
|
47
88
|
if (!list.length)
|
|
@@ -94,12 +135,13 @@ export const HierarchyTree = (props) => {
|
|
|
94
135
|
};
|
|
95
136
|
// 内置工具方法:渲染单个节点
|
|
96
137
|
const renderNode = (node, levelBounds, btnBounds, offsets, gradientDefs, allNodes) => {
|
|
97
|
-
const {
|
|
138
|
+
const { depth, data: nodeData, parent } = node;
|
|
98
139
|
const indexes = nodeData._originalIndex;
|
|
99
140
|
const NodeComponent = getItemComponent(Items, depth);
|
|
100
141
|
const bounds = levelBounds.get(depth);
|
|
101
|
-
const
|
|
102
|
-
const
|
|
142
|
+
const nodeRect = getNodeRect(node, bounds, offsets);
|
|
143
|
+
const nodeX = nodeRect.left;
|
|
144
|
+
const nodeY = nodeRect.top;
|
|
103
145
|
const elements = {
|
|
104
146
|
items: [],
|
|
105
147
|
btns: [],
|
|
@@ -122,45 +164,94 @@ export const HierarchyTree = (props) => {
|
|
|
122
164
|
// 父子连线
|
|
123
165
|
if (parent) {
|
|
124
166
|
const parentBounds = levelBounds.get(parent.depth);
|
|
167
|
+
const parentRect = getNodeRect(parent, parentBounds, offsets);
|
|
125
168
|
// 计算父节点的子节点数量和当前节点在兄弟中的索引
|
|
126
169
|
const siblings = allNodes.filter((n) => n.parent === parent);
|
|
127
170
|
const siblingIndex = siblings.findIndex((s) => s === node);
|
|
128
171
|
const siblingCount = siblings.length;
|
|
129
172
|
// 计算连接线起点
|
|
130
173
|
let parentX;
|
|
174
|
+
let parentY;
|
|
131
175
|
if (edgeOrigin === 'distributed' && siblingCount > 1) {
|
|
132
176
|
// 分布式起点:根据子节点数量分配起点位置
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
177
|
+
if (isHorizontal) {
|
|
178
|
+
const padding = distributedPadding(edgeOriginPadding, parentBounds.height);
|
|
179
|
+
const startY = parentRect.top + padding;
|
|
180
|
+
const endY = parentRect.bottom - padding;
|
|
181
|
+
const segmentHeight = (endY - startY) / siblingCount;
|
|
182
|
+
parentY = startY + segmentHeight * siblingIndex + segmentHeight / 2;
|
|
183
|
+
parentX =
|
|
184
|
+
(mainSign > 0 ? parentRect.right : parentRect.left) +
|
|
185
|
+
edgeOffset * mainSign;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const padding = distributedPadding(edgeOriginPadding, parentBounds.width);
|
|
189
|
+
const startX = parentRect.left + padding;
|
|
190
|
+
const endX = parentRect.right - padding;
|
|
191
|
+
const segmentWidth = (endX - startX) / siblingCount;
|
|
192
|
+
parentX = startX + segmentWidth * siblingIndex + segmentWidth / 2;
|
|
193
|
+
parentY =
|
|
194
|
+
(mainSign > 0 ? parentRect.bottom : parentRect.top) +
|
|
195
|
+
edgeOffset * mainSign;
|
|
196
|
+
}
|
|
137
197
|
}
|
|
138
198
|
else {
|
|
139
199
|
// 中心起点:所有线从节点中心出发
|
|
140
|
-
parentX =
|
|
200
|
+
parentX = isHorizontal
|
|
201
|
+
? (mainSign > 0 ? parentRect.right : parentRect.left) +
|
|
202
|
+
edgeOffset * mainSign
|
|
203
|
+
: parentRect.centerX;
|
|
204
|
+
parentY = isHorizontal
|
|
205
|
+
? parentRect.centerY
|
|
206
|
+
: (mainSign > 0 ? parentRect.bottom : parentRect.top) +
|
|
207
|
+
edgeOffset * mainSign;
|
|
141
208
|
}
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
209
|
+
const baseChildX = isHorizontal
|
|
210
|
+
? (mainSign > 0 ? nodeRect.left : nodeRect.right) -
|
|
211
|
+
edgeOffset * mainSign
|
|
212
|
+
: nodeRect.centerX;
|
|
213
|
+
const baseChildY = isHorizontal
|
|
214
|
+
? nodeRect.centerY
|
|
215
|
+
: (mainSign > 0 ? nodeRect.top : nodeRect.bottom) -
|
|
216
|
+
edgeOffset * mainSign;
|
|
217
|
+
let childX = baseChildX;
|
|
218
|
+
let childY = baseChildY;
|
|
145
219
|
// 调整终点位置(为箭头留出空间)
|
|
146
220
|
if (edgeMarker === 'arrow') {
|
|
147
|
-
|
|
221
|
+
if (isHorizontal) {
|
|
222
|
+
childX -= markerSize * mainSign;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
childY -= markerSize * mainSign;
|
|
226
|
+
}
|
|
148
227
|
}
|
|
149
228
|
// 生成路径
|
|
150
229
|
let pathD;
|
|
151
230
|
if (edgeType === 'curved') {
|
|
152
231
|
// 使用贝塞尔曲线绘制曲线连接
|
|
153
|
-
|
|
154
|
-
|
|
232
|
+
if (isHorizontal) {
|
|
233
|
+
const midX = parentX + (childX - parentX) / 2;
|
|
234
|
+
pathD = `M ${parentX} ${parentY} C ${midX} ${parentY}, ${midX} ${childY}, ${childX} ${childY}`;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
const midY = parentY + (childY - parentY) / 2;
|
|
238
|
+
pathD = `M ${parentX} ${parentY} C ${parentX} ${midY}, ${childX} ${midY}, ${childX} ${childY}`;
|
|
239
|
+
}
|
|
155
240
|
}
|
|
156
241
|
else if (edgeCornerRadius > 0) {
|
|
157
242
|
// 使用圆角路径
|
|
158
|
-
pathD = createRoundedPath(parentX, parentY, childX, childY, edgeCornerRadius);
|
|
243
|
+
pathD = createRoundedPath(parentX, parentY, childX, childY, edgeCornerRadius, isHorizontal ? 'horizontal' : 'vertical');
|
|
159
244
|
}
|
|
160
245
|
else {
|
|
161
246
|
// 使用直角折线
|
|
162
|
-
|
|
163
|
-
|
|
247
|
+
if (isHorizontal) {
|
|
248
|
+
const midX = parentX + (childX - parentX) / 2;
|
|
249
|
+
pathD = `M ${parentX} ${parentY} L ${midX} ${parentY} L ${midX} ${childY} L ${childX} ${childY}`;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const midY = parentY + (childY - parentY) / 2;
|
|
253
|
+
pathD = `M ${parentX} ${parentY} L ${parentX} ${midY} L ${childX} ${midY} L ${childX} ${childY}`;
|
|
254
|
+
}
|
|
164
255
|
}
|
|
165
256
|
// 确定连接线颜色
|
|
166
257
|
let strokeColor = colorPrimary;
|
|
@@ -192,17 +283,29 @@ export const HierarchyTree = (props) => {
|
|
|
192
283
|
? getPaletteColor(options, colorIndexes)
|
|
193
284
|
: getColorPrimary(options);
|
|
194
285
|
// 三角形箭头
|
|
195
|
-
const arrowPoints =
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
286
|
+
const arrowPoints = isHorizontal
|
|
287
|
+
? [
|
|
288
|
+
{ x: baseChildX, y: baseChildY },
|
|
289
|
+
{
|
|
290
|
+
x: baseChildX - markerSize * mainSign,
|
|
291
|
+
y: baseChildY - markerSize / 2,
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
x: baseChildX - markerSize * mainSign,
|
|
295
|
+
y: baseChildY + markerSize / 2,
|
|
296
|
+
},
|
|
297
|
+
]
|
|
298
|
+
: [
|
|
299
|
+
{ x: baseChildX, y: baseChildY },
|
|
300
|
+
{
|
|
301
|
+
x: baseChildX - markerSize / 2,
|
|
302
|
+
y: baseChildY - markerSize * mainSign,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
x: baseChildX + markerSize / 2,
|
|
306
|
+
y: baseChildY - markerSize * mainSign,
|
|
307
|
+
},
|
|
308
|
+
];
|
|
206
309
|
elements.deco.push(_jsx(Polygon, { points: arrowPoints, fill: arrowColor, width: markerSize, height: markerSize }));
|
|
207
310
|
}
|
|
208
311
|
// 添加连接点装饰
|
|
@@ -216,16 +319,20 @@ export const HierarchyTree = (props) => {
|
|
|
216
319
|
? getPaletteColor(options, parentColorIndexes)
|
|
217
320
|
: getColorPrimary(options);
|
|
218
321
|
// 父节点连接点
|
|
219
|
-
elements.deco.push(_jsx(Ellipse, { x:
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
322
|
+
elements.deco.push(_jsx(Ellipse, { x: (isHorizontal
|
|
323
|
+
? mainSign > 0
|
|
324
|
+
? parentRect.right + edgeOffset
|
|
325
|
+
: parentRect.left - edgeOffset
|
|
326
|
+
: parentX) - markerSize, y: (isHorizontal
|
|
327
|
+
? parentY
|
|
328
|
+
: mainSign > 0
|
|
329
|
+
? parentRect.bottom + edgeOffset
|
|
330
|
+
: parentRect.top - edgeOffset) - markerSize, width: markerSize * 2, height: markerSize * 2, fill: parentDotColor }));
|
|
224
331
|
// 子节点连接点
|
|
225
332
|
const childDotColor = edgeColorMode === 'gradient'
|
|
226
333
|
? getPaletteColor(options, colorIndexes)
|
|
227
334
|
: getColorPrimary(options);
|
|
228
|
-
elements.deco.push(_jsx(Ellipse, { x:
|
|
335
|
+
elements.deco.push(_jsx(Ellipse, { x: baseChildX - markerSize, y: baseChildY - markerSize, width: markerSize * 2, height: markerSize * 2, fill: childDotColor }));
|
|
229
336
|
}
|
|
230
337
|
}
|
|
231
338
|
return elements;
|
|
@@ -243,13 +350,30 @@ export const HierarchyTree = (props) => {
|
|
|
243
350
|
nodesByParent.forEach((siblings) => {
|
|
244
351
|
if (siblings.length <= 1)
|
|
245
352
|
return;
|
|
246
|
-
const sorted = siblings
|
|
247
|
-
|
|
353
|
+
const sorted = siblings
|
|
354
|
+
.slice()
|
|
355
|
+
.sort((a, b) => isHorizontal
|
|
356
|
+
? getLayoutPoint(a).y - getLayoutPoint(b).y
|
|
357
|
+
: getLayoutPoint(a).x - getLayoutPoint(b).x);
|
|
358
|
+
if (sorted.length === 0)
|
|
359
|
+
return;
|
|
248
360
|
for (let i = 0; i < sorted.length - 1; i++) {
|
|
249
|
-
const
|
|
361
|
+
const current = getLayoutPoint(sorted[i]);
|
|
362
|
+
const next = getLayoutPoint(sorted[i + 1]);
|
|
250
363
|
const parentIndexes = sorted[i].data._originalIndex.slice(0, -1);
|
|
251
364
|
const insertIndex = sorted[i].data._originalIndex.at(-1) + 1;
|
|
252
|
-
|
|
365
|
+
if (isHorizontal) {
|
|
366
|
+
const btnX = current.x +
|
|
367
|
+
offsets.x +
|
|
368
|
+
(mainSign > 0 ? -btnBounds.width - 5 : btnBounds.width + 5);
|
|
369
|
+
const btnY = (current.y + next.y) / 2 + offsets.y - btnBounds.height / 2;
|
|
370
|
+
btns.push(_jsx(BtnAdd, { indexes: [...parentIndexes, insertIndex], x: btnX, y: btnY }));
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
const siblingY = current.y + offsets.y - btnBounds.height - 5;
|
|
374
|
+
const btnX = (current.x + next.x) / 2 + offsets.x - btnBounds.width / 2;
|
|
375
|
+
btns.push(_jsx(BtnAdd, { indexes: [...parentIndexes, insertIndex], x: btnX, y: siblingY }));
|
|
376
|
+
}
|
|
253
377
|
}
|
|
254
378
|
});
|
|
255
379
|
return btns;
|
|
@@ -268,12 +392,15 @@ export const HierarchyTree = (props) => {
|
|
|
268
392
|
const { levelBounds, maxWidth, maxHeight } = computeLevelBounds(root);
|
|
269
393
|
const treeLayout = d3
|
|
270
394
|
.tree()
|
|
271
|
-
.nodeSize(
|
|
395
|
+
.nodeSize(isHorizontal
|
|
396
|
+
? [maxHeight + nodeGap, maxWidth + levelGap]
|
|
397
|
+
: [maxWidth + nodeGap, maxHeight + levelGap])
|
|
272
398
|
.separation(() => 1);
|
|
273
399
|
const nodes = treeLayout(root).descendants();
|
|
274
400
|
// 计算偏移量
|
|
275
|
-
const
|
|
276
|
-
const
|
|
401
|
+
const layoutPoints = nodes.map((d) => getLayoutPoint(d));
|
|
402
|
+
const minX = Math.min(...layoutPoints.map((d) => d.x));
|
|
403
|
+
const minY = Math.min(...layoutPoints.map((d) => d.y));
|
|
277
404
|
const offsets = {
|
|
278
405
|
x: Math.max(0, -minX + maxWidth / 2),
|
|
279
406
|
y: Math.max(0, -minY + btnBounds.height + 10),
|
|
@@ -287,6 +414,8 @@ export const HierarchyTree = (props) => {
|
|
|
287
414
|
nodes.forEach((node, index) => {
|
|
288
415
|
// 将扁平索引附加到节点数据上,用于 node-flat 模式
|
|
289
416
|
node.data._flatIndex = index;
|
|
417
|
+
const { x, y } = getLayoutPoint(node);
|
|
418
|
+
node.__layout = { x, y };
|
|
290
419
|
});
|
|
291
420
|
nodes.forEach((node) => {
|
|
292
421
|
const { items, btns, deco } = renderNode(node, levelBounds, btnBounds, offsets, gradientDefs, nodes);
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
export * from './chart-bar';
|
|
1
2
|
export * from './chart-column';
|
|
3
|
+
export * from './chart-line';
|
|
4
|
+
export * from './chart-pie';
|
|
5
|
+
export * from './chart-wordcloud';
|
|
2
6
|
export * from './compare-binary-horizontal';
|
|
3
7
|
export * from './compare-hierarchy-left-right';
|
|
4
8
|
export * from './compare-hierarchy-row';
|
|
9
|
+
export * from './hierarchy-mindmap';
|
|
5
10
|
export * from './hierarchy-tree';
|
|
6
11
|
export * from './list-column';
|
|
7
12
|
export * from './list-grid';
|
|
@@ -26,6 +31,7 @@ export * from './sequence-mountain';
|
|
|
26
31
|
export * from './sequence-pyramid';
|
|
27
32
|
export * from './sequence-roadmap-vertical';
|
|
28
33
|
export * from './sequence-snake-steps';
|
|
34
|
+
export * from './sequence-stairs-front';
|
|
29
35
|
export * from './sequence-steps';
|
|
30
36
|
export * from './sequence-timeline';
|
|
31
37
|
export * from './sequence-zigzag-pucks-3d';
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
export * from './chart-bar';
|
|
1
2
|
export * from './chart-column';
|
|
3
|
+
export * from './chart-line';
|
|
4
|
+
export * from './chart-pie';
|
|
5
|
+
export * from './chart-wordcloud';
|
|
2
6
|
export * from './compare-binary-horizontal';
|
|
3
7
|
export * from './compare-hierarchy-left-right';
|
|
4
8
|
export * from './compare-hierarchy-row';
|
|
9
|
+
export * from './hierarchy-mindmap';
|
|
5
10
|
export * from './hierarchy-tree';
|
|
6
11
|
export * from './list-column';
|
|
7
12
|
export * from './list-grid';
|
|
@@ -26,6 +31,7 @@ export * from './sequence-mountain';
|
|
|
26
31
|
export * from './sequence-pyramid';
|
|
27
32
|
export * from './sequence-roadmap-vertical';
|
|
28
33
|
export * from './sequence-snake-steps';
|
|
34
|
+
export * from './sequence-stairs-front';
|
|
29
35
|
export * from './sequence-steps';
|
|
30
36
|
export * from './sequence-timeline';
|
|
31
37
|
export * from './sequence-zigzag-pucks-3d';
|
|
@@ -139,7 +139,7 @@ export const ListSector = (props) => {
|
|
|
139
139
|
Z
|
|
140
140
|
`.trim();
|
|
141
141
|
}
|
|
142
|
-
return (_jsxs(Group, { id: "infographic-container", children: [_jsx(Group, { children: sectorElements }), isFullCircle ? (_jsx(Ellipse, { id: "shape-center-circle", x: centerX - centerRadius, y: centerY - centerRadius, width: centerRadius * 2, height: centerRadius * 2, fill: themeColors.colorPrimaryBg, fillOpacity: 0.5, "data-element-type": "shape" })) : (_jsx(Path, { id: "shape-center-sector", d: centerSectorPath, fill: themeColors.colorPrimaryBg, fillOpacity: 0.5, width: outerRadius * 2 + 200, height: outerRadius * 2 + 200, "data-element-type": "shape" })), _jsx(Text, {
|
|
142
|
+
return (_jsxs(Group, { id: "infographic-container", children: [_jsx(Group, { children: sectorElements }), isFullCircle ? (_jsx(Ellipse, { id: "shape-center-circle", x: centerX - centerRadius, y: centerY - centerRadius, width: centerRadius * 2, height: centerRadius * 2, fill: themeColors.colorPrimaryBg, fillOpacity: 0.5, "data-element-type": "shape" })) : (_jsx(Path, { id: "shape-center-sector", d: centerSectorPath, fill: themeColors.colorPrimaryBg, fillOpacity: 0.5, width: outerRadius * 2 + 200, height: outerRadius * 2 + 200, "data-element-type": "shape" })), _jsx(Text, { x: titleCenterX - titleWidth / 2, y: titleCenterY - titleHeight / 2, width: titleWidth, height: titleHeight, alignHorizontal: "center", alignVertical: "middle", fontSize: 24, fontWeight: "bold", fill: themeColors.colorText, "data-element-type": "title" /* ElementTypeEnum.Title */, children: title }), _jsx(ItemsGroup, { children: itemElements }), _jsx(BtnsGroup, { children: btnElements })] }));
|
|
143
143
|
};
|
|
144
144
|
registerStructure('list-sector', {
|
|
145
145
|
component: ListSector,
|
|
@@ -163,7 +163,7 @@ export const SequenceCircular = (props) => {
|
|
|
163
163
|
btnBounds,
|
|
164
164
|
});
|
|
165
165
|
btnElements.unshift(_jsx(BtnAdd, { indexes: [0], x: firstAddBtnX, y: firstAddBtnY }));
|
|
166
|
-
return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", gap:
|
|
166
|
+
return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", gap: 70, children: [titleContent, _jsxs(Group, { children: [_jsx(Group, { children: arcElements }), _jsx(Group, { children: iconElements }), _jsx(ItemsGroup, { children: itemElements }), _jsx(BtnsGroup, { children: btnElements })] })] }));
|
|
167
167
|
};
|
|
168
168
|
registerStructure('sequence-circular', {
|
|
169
169
|
component: SequenceCircular,
|
|
@@ -135,12 +135,12 @@ const createCylinderElements = (index, cylinderPos, cylinderRx, cylinderRy) => {
|
|
|
135
135
|
`, fill: `url(#cylinderGradient${index})`, stroke: "none" }));
|
|
136
136
|
elements.push(_jsx(Rect, { id: `cylinder-glow-${index}`, x: x - cylinderRx, y: topY - cylinderRy * 3, width: cylinderRx * 2, height: cylinderRy * 3, fill: `url(#glowGradient${index})` }));
|
|
137
137
|
elements.push(_jsx("ellipse", { id: `cylinder-top-${index}`, cx: x, cy: topY, rx: cylinderRx, ry: cylinderRy, fill: `url(#topGradient${index})` }));
|
|
138
|
-
const numberX = x;
|
|
139
|
-
const numberY = topY
|
|
138
|
+
const numberX = x - 10;
|
|
139
|
+
const numberY = topY - 15;
|
|
140
140
|
const scaleY = 0.6;
|
|
141
141
|
const skewX = -0.6;
|
|
142
|
-
const transformValue = `translate(${numberX}, ${numberY}) matrix(1, 0, ${skewX}, ${scaleY}, 0, 0)
|
|
143
|
-
elements.push(_jsx(Text, { id: `cylinder-number-${index}`,
|
|
142
|
+
const transformValue = `translate(${numberX}, ${numberY}) matrix(1, 0, ${skewX}, ${scaleY}, 0, 0)`;
|
|
143
|
+
elements.push(_jsx(Text, { id: `cylinder-number-${index}`, width: 50, height: 50, fontFamily: "Arial Black, sans-serif", fontSize: 32, fontWeight: 900, fill: `url(#numberGradient${index})`, alignHorizontal: "center", alignVertical: "middle", transform: transformValue, children: index + 1 }));
|
|
144
144
|
return elements;
|
|
145
145
|
};
|
|
146
146
|
const createDecorationElements = (index, lineStartX, lineEndX, lineY, color) => {
|
|
@@ -45,7 +45,7 @@ function renderItemRow({ i, direction, x, y, color, data, itemBounds, item, Item
|
|
|
45
45
|
: 'flipped';
|
|
46
46
|
return {
|
|
47
47
|
icon: (_jsx(ItemIconCircle, { indexes: [i], x: iconX, y: iconY, size: iconSize, fill: color })),
|
|
48
|
-
label: (_jsx(Text, { x: isLeft ? iconX -
|
|
48
|
+
label: (_jsx(Text, { width: 40, x: isLeft ? iconX - 50 : iconX + iconSize + 10, y: iconY + iconSize / 2 - 15, fontSize: 30, fill: color, alignHorizontal: isLeft ? 'right' : 'left', children: String(i + 1).padStart(2, '0') })),
|
|
49
49
|
item: (_jsx(Item, { indexes: [i], data: data, datum: item, x: itemX, y: itemY, positionH: positionH })),
|
|
50
50
|
};
|
|
51
51
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentType } from '../../jsx';
|
|
2
|
+
import type { BaseStructureProps } from './types';
|
|
3
|
+
export interface SequenceStairsFrontProps extends BaseStructureProps {
|
|
4
|
+
gap?: number;
|
|
5
|
+
perspectiveFactor?: number;
|
|
6
|
+
width?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const SequenceStairsFront: ComponentType<SequenceStairsFrontProps>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@antv/infographic/jsx-runtime";
|
|
2
|
+
import { getElementBounds, Group, Path, Polygon, Rect, Text } from '../../jsx';
|
|
3
|
+
import { BtnAdd, BtnRemove, BtnsGroup, ItemsGroup } from '../components';
|
|
4
|
+
import { FlexLayout } from '../layouts';
|
|
5
|
+
import { getColorPrimary, getPaletteColor } from '../utils';
|
|
6
|
+
import { registerStructure } from './registry';
|
|
7
|
+
export const SequenceStairsFront = (props) => {
|
|
8
|
+
const { Title, Item, data, options, gap = 16, perspectiveFactor = 0.2, width = 720, } = props;
|
|
9
|
+
const { title, desc, items = [] } = data;
|
|
10
|
+
const TitleComponent = Title;
|
|
11
|
+
const titleContent = TitleComponent ? (_jsx(TitleComponent, { title: title, desc: desc })) : null;
|
|
12
|
+
if (items.length === 0) {
|
|
13
|
+
const btnAddElement = _jsx(BtnAdd, { indexes: [0], x: 0, y: 0 });
|
|
14
|
+
return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: [titleContent, _jsx(Group, { children: _jsx(BtnsGroup, { children: btnAddElement }) })] }));
|
|
15
|
+
}
|
|
16
|
+
const colorPrimary = getColorPrimary(options);
|
|
17
|
+
const btnBounds = getElementBounds(_jsx(BtnAdd, { indexes: [0] }));
|
|
18
|
+
const itemBounds = getElementBounds(_jsx(Item, { indexes: [0], data: data, datum: items[0] || {}, positionH: "center" }));
|
|
19
|
+
const connectorGap = 12;
|
|
20
|
+
const baseConnectorWidth = Math.min(width * 0.1, 100);
|
|
21
|
+
const bottomStepWidth = Math.min(width * 0.45, Math.max(80, width - itemBounds.width - connectorGap - baseConnectorWidth));
|
|
22
|
+
const baseDepth = Math.max(24, bottomStepWidth * perspectiveFactor * 0.35);
|
|
23
|
+
const baseStepHeight = 56;
|
|
24
|
+
const minStepHeight = baseStepHeight * 0.7;
|
|
25
|
+
const heightStep = items.length > 1
|
|
26
|
+
? (baseStepHeight - minStepHeight) / (items.length - 1)
|
|
27
|
+
: 0;
|
|
28
|
+
const topMargin = Math.max(btnBounds.height + baseDepth + 20, baseDepth + 28);
|
|
29
|
+
const centerX = bottomStepWidth / 2;
|
|
30
|
+
const itemX = bottomStepWidth + baseConnectorWidth + connectorGap;
|
|
31
|
+
const stepHeights = items.map((_, index) => baseStepHeight - heightStep * index);
|
|
32
|
+
const stepDepths = items.map((_, index) => Math.max(baseDepth * (1 - index * 0.05), baseDepth * 0.7));
|
|
33
|
+
const stepYs = [];
|
|
34
|
+
const depthFromTop = [];
|
|
35
|
+
const lastIndex = items.length - 1;
|
|
36
|
+
stepYs[lastIndex] = topMargin;
|
|
37
|
+
depthFromTop[lastIndex] = 0;
|
|
38
|
+
for (let i = lastIndex - 1; i >= 0; i -= 1) {
|
|
39
|
+
depthFromTop[i] = depthFromTop[i + 1] + stepDepths[i] + gap;
|
|
40
|
+
stepYs[i] = stepYs[i + 1] + stepDepths[i] + stepHeights[i + 1] + gap;
|
|
41
|
+
}
|
|
42
|
+
const totalDepthSpan = depthFromTop[0] || stepDepths[0] || baseDepth;
|
|
43
|
+
const minStepWidth = bottomStepWidth * (0.55 + perspectiveFactor * 0.1);
|
|
44
|
+
const widthShrink = bottomStepWidth - minStepWidth;
|
|
45
|
+
const stepWidths = items.map((_, index) => {
|
|
46
|
+
const ratio = totalDepthSpan === 0 ? 1 : depthFromTop[index] / totalDepthSpan;
|
|
47
|
+
return minStepWidth + widthShrink * ratio;
|
|
48
|
+
});
|
|
49
|
+
const connectorWidths = stepWidths.map((stepWidth) => {
|
|
50
|
+
const connectorStartX = centerX + stepWidth / 2;
|
|
51
|
+
return Math.max(0, itemX - connectorGap - connectorStartX);
|
|
52
|
+
});
|
|
53
|
+
const stepElements = [];
|
|
54
|
+
const itemElements = [];
|
|
55
|
+
const btnElements = [];
|
|
56
|
+
const connectorElements = [];
|
|
57
|
+
const spineElements = [];
|
|
58
|
+
const spineTop = 0;
|
|
59
|
+
const spineBottom = (stepYs[0] || topMargin) + (stepHeights[0] || baseStepHeight);
|
|
60
|
+
const arrowHeight = spineBottom - spineTop;
|
|
61
|
+
const arrowHeadHeight = 35;
|
|
62
|
+
const topStepWidth = stepWidths[lastIndex] || minStepWidth;
|
|
63
|
+
const arrowTopWidth = topStepWidth * 0.8;
|
|
64
|
+
const arrowNeckWidth = arrowTopWidth * 0.65;
|
|
65
|
+
const arrowBottomWidth = (stepWidths[0] || bottomStepWidth) * 0.9;
|
|
66
|
+
spineElements.push(_jsx(Polygon, { points: [
|
|
67
|
+
{ x: centerX, y: spineTop },
|
|
68
|
+
{ x: centerX + arrowTopWidth / 2, y: spineTop + arrowHeadHeight },
|
|
69
|
+
{ x: centerX + arrowNeckWidth / 2, y: spineTop + arrowHeadHeight },
|
|
70
|
+
{ x: centerX + arrowBottomWidth / 2, y: spineBottom },
|
|
71
|
+
{ x: centerX - arrowBottomWidth / 2, y: spineBottom },
|
|
72
|
+
{ x: centerX - arrowNeckWidth / 2, y: spineTop + arrowHeadHeight },
|
|
73
|
+
{ x: centerX - arrowTopWidth / 2, y: spineTop + arrowHeadHeight },
|
|
74
|
+
], fill: "rgba(0,0,0,0.12)", width: arrowBottomWidth, height: arrowHeight, "data-element-type": "shape" }));
|
|
75
|
+
let previousCenterY = stepYs[lastIndex] + stepHeights[lastIndex] / 2;
|
|
76
|
+
items.forEach((item, index) => {
|
|
77
|
+
const indexes = [index];
|
|
78
|
+
const stepWidth = stepWidths[index];
|
|
79
|
+
const stepDepth = stepDepths[index];
|
|
80
|
+
const stepX = centerX - stepWidth / 2;
|
|
81
|
+
const stepHeight = stepHeights[index];
|
|
82
|
+
const stepY = stepYs[index];
|
|
83
|
+
const topY = stepY - stepDepth;
|
|
84
|
+
const rectCenterY = stepY + stepHeight / 2;
|
|
85
|
+
const stepColor = getPaletteColor(options, indexes) || colorPrimary;
|
|
86
|
+
stepElements.push(_jsx(Rect, { x: stepX, y: stepY, width: stepWidth, height: stepHeight, fill: stepColor, "data-element-type": "shape" }), _jsx(Polygon, { points: [
|
|
87
|
+
{ x: stepX, y: stepY },
|
|
88
|
+
{ x: stepX + stepWidth, y: stepY },
|
|
89
|
+
{ x: stepX + stepWidth - stepDepth / 2, y: topY },
|
|
90
|
+
{ x: stepX + stepDepth / 2, y: topY },
|
|
91
|
+
], fill: stepColor, opacity: "0.3", width: stepWidth, height: stepDepth, "data-element-type": "shape" }), _jsx(Text, { x: stepX, y: stepY, width: stepWidth, height: stepHeight, fontSize: stepHeight / 2, fontWeight: "bold", alignHorizontal: "center", alignVertical: "middle", fill: "#ffffff", children: String(index + 1).padStart(2, '0') }));
|
|
92
|
+
const connectorStartX = stepX + stepWidth;
|
|
93
|
+
const connectorEndY = rectCenterY;
|
|
94
|
+
const connectorWidth = connectorWidths[index];
|
|
95
|
+
const lineEndX = connectorStartX + connectorWidth;
|
|
96
|
+
connectorElements.push(_jsx(Path, { d: `M ${connectorStartX} ${connectorEndY} L ${lineEndX} ${connectorEndY}`, stroke: stepColor, strokeWidth: 2, fill: "none", width: connectorWidth, height: 2, "data-element-type": "shape" }), _jsx(Path, { d: `M ${lineEndX} ${connectorEndY} L ${lineEndX} ${connectorEndY}`, stroke: stepColor, strokeWidth: 6, strokeLinecap: "round", width: 1, height: 1, "data-element-type": "shape" }));
|
|
97
|
+
const itemY = rectCenterY - itemBounds.height / 2;
|
|
98
|
+
itemElements.push(_jsx(Item, { indexes: indexes, datum: item, data: data, x: itemX, y: itemY, positionV: "middle" }));
|
|
99
|
+
btnElements.push(_jsx(BtnRemove, { indexes: indexes, x: itemX + itemBounds.width + 10, y: itemY + itemBounds.height / 2 - btnBounds.height / 2 }));
|
|
100
|
+
if (index === 0) {
|
|
101
|
+
btnElements.push(_jsx(BtnAdd, { indexes: [0], x: itemX + (itemBounds.width - btnBounds.width) / 2, y: itemY - btnBounds.height - 12 }));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
btnElements.push(_jsx(BtnAdd, { indexes: indexes, x: itemX + (itemBounds.width - btnBounds.width) / 2, y: (previousCenterY + rectCenterY) / 2 - btnBounds.height / 2 }));
|
|
105
|
+
}
|
|
106
|
+
previousCenterY = rectCenterY;
|
|
107
|
+
});
|
|
108
|
+
const lastCenterY = previousCenterY;
|
|
109
|
+
const lastItemY = lastCenterY - itemBounds.height / 2;
|
|
110
|
+
btnElements.push(_jsx(BtnAdd, { indexes: [items.length], x: itemX + (itemBounds.width - btnBounds.width) / 2, y: lastItemY + itemBounds.height + 12 }));
|
|
111
|
+
return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: [titleContent, _jsxs(Group, { children: [_jsx(Group, { children: spineElements }), _jsx(Group, { children: stepElements }), _jsx(Group, { children: connectorElements }), _jsx(ItemsGroup, { children: itemElements }), _jsx(BtnsGroup, { children: btnElements })] })] }));
|
|
112
|
+
};
|
|
113
|
+
registerStructure('sequence-stairs-front', {
|
|
114
|
+
component: SequenceStairsFront,
|
|
115
|
+
composites: ['title', 'item'],
|
|
116
|
+
});
|
|
@@ -7,10 +7,10 @@ import { registerStructure } from './registry';
|
|
|
7
7
|
const PUCK_WIDTH = 120;
|
|
8
8
|
const PUCK_HEIGHT = 108;
|
|
9
9
|
const ITEM_TO_PUCK_GAP = 30;
|
|
10
|
-
const PUCK_TOP_PATH = '
|
|
11
|
-
const PUCK_MIDDLE_PATH = '
|
|
12
|
-
const PUCK_BOTTOM_PATH = 'M0 53.
|
|
13
|
-
const DropShadowFilter = (_jsxs("filter", { id: "sequence-zigzag-pucks-3d-shadow-filter", x: "-50%", y: "-50%", width: "200%", height: "200%", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB", children: [_jsx("
|
|
10
|
+
const PUCK_TOP_PATH = 'M4.49144e-05 34.4898C4.49144e-05 37.8786 0.848973 41.152 2.43571 44.2444C4.23516 47.7642 6.98514 51.0472 10.517 54.0009C21.331 63.047 39.4615 68.9814 59.9991 68.9814C80.5385 68.9814 98.6672 63.047 109.483 54.0009C113.013 51.0472 115.765 47.7642 117.564 44.2444C119.149 41.152 120 37.8786 120 34.4898C120 15.4407 93.1364 0 59.9991 0C26.8635 0 4.49144e-05 15.4407 4.49144e-05 34.4898Z';
|
|
11
|
+
const PUCK_MIDDLE_PATH = 'M4.49145e-05 34.4898V53.9991C4.49145e-05 57.3879 0.848973 60.6613 2.43571 63.7556C9.75425 78.0545 32.7562 88.4907 59.999 88.4907C87.2438 88.4907 110.246 78.0545 117.564 63.7556C119.149 60.6613 120 57.3879 120 53.9991V34.4898C120 37.8786 119.149 41.152 117.564 44.2444C115.765 47.7642 113.013 51.0472 109.483 54.0009C98.6672 63.047 80.5385 68.9814 59.999 68.9814C39.4615 68.9814 21.3309 63.047 10.5169 54.0009C6.98509 51.0472 4.23516 47.7642 2.43567 44.2444C0.848928 41.152 4.49145e-05 37.8786 4.49145e-05 34.4898Z';
|
|
12
|
+
const PUCK_BOTTOM_PATH = 'M0 53.9991V73.5102C0 92.5593 26.8634 108 59.999 108C93.1363 108 120 92.5593 120 73.5102V53.9991C120 57.3879 119.149 60.6613 117.564 63.7556C110.246 78.0545 87.2438 88.4907 59.999 88.4907C32.7562 88.4907 9.75425 78.0545 2.43571 63.7556C0.848973 60.6613 0 57.3879 0 53.9991Z';
|
|
13
|
+
const DropShadowFilter = (_jsxs("filter", { id: "sequence-zigzag-pucks-3d-shadow-filter", x: "-50%", y: "-50%", width: "200%", height: "200%", filterUnits: "userSpaceOnUse", colorInterpolationFilters: "sRGB", children: [_jsx("feOffset", { dx: "-7", dy: "7", in: "SourceAlpha", result: "offset" }), _jsx("feGaussianBlur", { stdDeviation: "7.5", in: "offset", result: "blurred" }), _jsx("feColorMatrix", { in: "blurred", type: "matrix", values: "0 0 0 0 0 \n 0 0 0 0 0 \n 0 0 0 0 0 \n 0 0 0 0.3 0", result: "shadow" }), _jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "shadow" })] }));
|
|
14
14
|
export const SequenceZigzagPucks3d = (props) => {
|
|
15
15
|
const { Title, Item, data, options, gap = 80 } = props;
|
|
16
16
|
const puckWidth = PUCK_WIDTH;
|
|
@@ -39,7 +39,7 @@ export const SequenceZigzagPucks3d = (props) => {
|
|
|
39
39
|
minY = Math.min(minY, puckY);
|
|
40
40
|
const gradientId1 = `puck-gradient-middle-${index}`;
|
|
41
41
|
const gradientId2 = `puck-gradient-bottom-${index}`;
|
|
42
|
-
puckElements.push(_jsxs(Group, { x: puckX, y: puckY, id: `puck-${index}`, width: puckWidth, height: puckHeight, filter: "url(#sequence-zigzag-pucks-3d-shadow-filter)", children: [_jsxs(Defs, { children: [_jsxs("linearGradient", { id: gradientId1, x1: "115", y1: "55.9991", x2: "15.0002", y2: "55.9991", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0", stopColor: currentColor || colorPrimary }), _jsx("stop", { offset: "1", stopColor: currentColor || colorPrimary, stopOpacity: "0.6" })] }), _jsxs("linearGradient", { id: gradientId2, x1: "115", y1: "72.1803", x2: "15.0002", y2: "72.1803", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0", stopColor: "#F4F4FB" }), _jsx("stop", { offset: "1", stopColor: "#8E8C90" })] })] }), _jsxs(ShapesGroup, { width: PUCK_WIDTH, height: PUCK_HEIGHT, children: [_jsx(Path, { d: PUCK_TOP_PATH, fill: currentColor || colorPrimary }), _jsx(Path, { d: PUCK_MIDDLE_PATH, fill: `url(#${gradientId1})` }), _jsx(Path, { d: PUCK_BOTTOM_PATH, fill: `url(#${gradientId2})` })] }), _jsx("text", { x: 65, y: 40, width: 50, height: 50, fontSize: 40, fontWeight: "bold", fill: "#FFFFFF", textAnchor: "middle", dominantBaseline: "middle", transform: "rotate(-15 65 40) scale(1, 0.8)", children: index + 1 })] }));
|
|
42
|
+
puckElements.push(_jsxs(Group, { x: puckX, y: puckY, id: `puck-${index}`, width: puckWidth, height: puckHeight, filter: "url(#sequence-zigzag-pucks-3d-shadow-filter)", children: [_jsxs(Defs, { children: [_jsxs("linearGradient", { id: gradientId1, x1: "115", y1: "55.9991", x2: "15.0002", y2: "55.9991", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0", stopColor: currentColor || colorPrimary }), _jsx("stop", { offset: "1", stopColor: currentColor || colorPrimary, stopOpacity: "0.6" })] }), _jsxs("linearGradient", { id: gradientId2, x1: "115", y1: "72.1803", x2: "15.0002", y2: "72.1803", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0", stopColor: "#F4F4FB" }), _jsx("stop", { offset: "1", stopColor: "#8E8C90" })] })] }), _jsxs(ShapesGroup, { width: PUCK_WIDTH, height: PUCK_HEIGHT, children: [_jsx(Path, { d: PUCK_TOP_PATH, fill: currentColor || colorPrimary }), _jsx(Path, { d: PUCK_MIDDLE_PATH, fill: `url(#${gradientId1})` }), _jsx(Path, { d: PUCK_BOTTOM_PATH, fill: `url(#${gradientId2})` }), _jsx("rect", { fill: "transparent", y: PUCK_HEIGHT, width: PUCK_WIDTH, height: 20 })] }), _jsx("text", { x: 65, y: 40, width: 50, height: 50, fontSize: 40, fontWeight: "bold", fill: "#FFFFFF", textAnchor: "middle", dominantBaseline: "middle", transform: "rotate(-15 65 40) scale(1, 0.8)", children: index + 1 })] }));
|
|
43
43
|
const itemX = puckX + (puckWidth - itemBounds.width) / 2;
|
|
44
44
|
const itemY = isEven
|
|
45
45
|
? puckY + puckHeight + ITEM_TO_PUCK_GAP
|
package/esm/designs/types.d.ts
CHANGED
|
@@ -20,6 +20,14 @@ export interface ParsedDesignsOptions {
|
|
|
20
20
|
item: WithProps<Item>;
|
|
21
21
|
items: WithProps<Item>[];
|
|
22
22
|
}
|
|
23
|
+
export interface NullableParsedDesignsOptions {
|
|
24
|
+
structure: WithProps<Structure> | null;
|
|
25
|
+
title: {
|
|
26
|
+
component: ComponentType<any> | null;
|
|
27
|
+
};
|
|
28
|
+
item: WithProps<Item> | null;
|
|
29
|
+
items: (WithProps<Item> | null)[];
|
|
30
|
+
}
|
|
23
31
|
type WithType<T> = T & {
|
|
24
32
|
type: string;
|
|
25
33
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ICommand, IStateManager } from '../types';
|
|
2
|
+
export declare class BatchCommand implements ICommand {
|
|
3
|
+
private commands;
|
|
4
|
+
constructor(commands: ICommand[]);
|
|
5
|
+
apply(state: IStateManager): Promise<void>;
|
|
6
|
+
undo(state: IStateManager): Promise<void>;
|
|
7
|
+
serialize(): {
|
|
8
|
+
type: string;
|
|
9
|
+
commands: any[];
|
|
10
|
+
};
|
|
11
|
+
}
|