ooxml-core 1.5.0 → 1.6.1
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/dist/{PptxHandler-ZPJNHEZZ.mjs → PptxHandler-BTXB54UC.mjs} +2 -2
- package/dist/automation/index.cjs +15757 -8955
- package/dist/automation/index.mjs +15757 -8955
- package/dist/chart/gradient-definition.d.ts +2 -0
- package/dist/chart/gradient-definition.d.ts.map +1 -1
- package/dist/chart/index.cjs +1 -1
- package/dist/chart/index.mjs +1 -1
- package/dist/{chunk-BB55ASTX.mjs → chunk-4L4UB3RQ.mjs} +3 -3
- package/dist/{chunk-QPQDLSJQ.mjs → chunk-5CJRDY7Q.mjs} +1 -1
- package/dist/{chunk-XGLKW3JJ.mjs → chunk-CS7HRNHL.mjs} +26 -3
- package/dist/{chunk-H4TPDZV4.mjs → chunk-Q5LESLDA.mjs} +1 -1
- package/dist/{chunk-IVDC75E5.mjs → chunk-RIFVZP2S.mjs} +1 -1
- package/dist/diagram/engine/text-measure.d.ts +1 -1
- package/dist/diagram/layout/smartart-font-table.d.ts +1 -1
- package/dist/diagram/layout/smartart-layout-interpreter-linear-content-size.d.ts +1 -1
- package/dist/diagram/layout/smartart-layout-item-font-size.d.ts +1 -1
- package/dist/diagram/layout/smartart-layout-item-font-tier-fit.d.ts +1 -1
- package/dist/diagram/layout/smartart-line-pitch.d.ts +1 -1
- package/dist/diagram/layout/smartart-text-wrap-fit.d.ts +1 -1
- package/dist/docx/index.cjs +1 -1
- package/dist/docx/index.mjs +1 -1
- package/dist/docx/layout/index.cjs +1 -1
- package/dist/docx/layout/index.mjs +1 -1
- package/dist/docx/ui/index.cjs +1 -1
- package/dist/docx/ui/index.mjs +1 -1
- package/dist/drawingml/index.cjs +102 -24
- package/dist/drawingml/index.d.ts +1 -0
- package/dist/drawingml/index.d.ts.map +1 -1
- package/dist/drawingml/index.mjs +102 -25
- package/dist/drawingml/write-theme.d.ts +17 -0
- package/dist/drawingml/write-theme.d.ts.map +1 -0
- package/dist/geometry/auto-align.d.ts +32 -0
- package/dist/geometry/auto-align.d.ts.map +1 -0
- package/dist/geometry/graph-layout.d.ts +37 -0
- package/dist/geometry/graph-layout.d.ts.map +1 -0
- package/dist/geometry/index.cjs +361 -7
- package/dist/geometry/index.d.ts +2 -0
- package/dist/geometry/index.d.ts.map +1 -1
- package/dist/geometry/index.mjs +359 -8
- package/dist/index.cjs +625 -123
- package/dist/index.mjs +625 -123
- package/dist/pptx/automation/index.cjs +26 -2
- package/dist/pptx/automation/index.d.ts +3 -3
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{index-JNv7AJx5.d.ts → index-CKIUurnd.d.ts} +2 -2
- package/dist/pptx/chunks/{index-JNv7AJx5.d.ts.map → index-CKIUurnd.d.ts.map} +1 -1
- package/dist/pptx/chunks/{index-EZJZ7USt.d.ts → index-DkHgeV1p.d.ts} +3 -3
- package/dist/pptx/chunks/{index-EZJZ7USt.d.ts.map → index-DkHgeV1p.d.ts.map} +1 -1
- package/dist/pptx/chunks/{text-operations-DtCxXrMh.d.ts → text-operations-BHfAm5K9.d.ts} +8 -1
- package/dist/pptx/chunks/text-operations-BHfAm5K9.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +26 -2
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/index.cjs +26 -2
- package/dist/pptx/index.d.ts +3 -3
- package/dist/pptx/index.mjs +5 -5
- package/dist/text/change-case.d.ts +20 -0
- package/dist/text/change-case.d.ts.map +1 -0
- package/dist/text/font-metrics/font-advance-widths-aptos-display.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-aptos.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-arial.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-calibri-light.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-calibri.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-segoe-ui.generated.d.ts +1 -1
- package/dist/text/font-metrics/font-advance-widths-times-new-roman.generated.d.ts +1 -1
- package/dist/text/index.cjs +70 -0
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.mjs +68 -1
- package/dist/visio/arrow-shapes.d.ts +16 -0
- package/dist/visio/arrow-shapes.d.ts.map +1 -0
- package/dist/visio/basic-shapes.d.ts +2 -0
- package/dist/visio/basic-shapes.d.ts.map +1 -1
- package/dist/visio/comments.d.ts +39 -0
- package/dist/visio/comments.d.ts.map +1 -0
- package/dist/visio/connector-route.d.ts +31 -0
- package/dist/visio/connector-route.d.ts.map +1 -0
- package/dist/visio/data-recordsets.d.ts +66 -0
- package/dist/visio/data-recordsets.d.ts.map +1 -0
- package/dist/visio/edit-change-shape-commands.d.ts +17 -0
- package/dist/visio/edit-change-shape-commands.d.ts.map +1 -0
- package/dist/visio/edit-change-shape.d.ts +4 -0
- package/dist/visio/edit-change-shape.d.ts.map +1 -0
- package/dist/visio/edit-commands.d.ts +41 -6
- package/dist/visio/edit-commands.d.ts.map +1 -1
- package/dist/visio/edit-comment-commands.d.ts +32 -0
- package/dist/visio/edit-comment-commands.d.ts.map +1 -0
- package/dist/visio/edit-comments.d.ts +7 -0
- package/dist/visio/edit-comments.d.ts.map +1 -0
- package/dist/visio/edit-connection-points.d.ts +19 -0
- package/dist/visio/edit-connection-points.d.ts.map +1 -0
- package/dist/visio/edit-connector-commands.d.ts +57 -0
- package/dist/visio/edit-connector-commands.d.ts.map +1 -0
- package/dist/visio/edit-connector-glue.d.ts +43 -0
- package/dist/visio/edit-connector-glue.d.ts.map +1 -0
- package/dist/visio/edit-connector-layout.d.ts +37 -0
- package/dist/visio/edit-connector-layout.d.ts.map +1 -0
- package/dist/visio/edit-connector-reroute.d.ts +30 -0
- package/dist/visio/edit-connector-reroute.d.ts.map +1 -0
- package/dist/visio/edit-connector.d.ts +42 -0
- package/dist/visio/edit-connector.d.ts.map +1 -0
- package/dist/visio/edit-data-commands.d.ts +49 -0
- package/dist/visio/edit-data-commands.d.ts.map +1 -0
- package/dist/visio/edit-data-parts.d.ts +34 -0
- package/dist/visio/edit-data-parts.d.ts.map +1 -0
- package/dist/visio/edit-data.d.ts +8 -0
- package/dist/visio/edit-data.d.ts.map +1 -0
- package/dist/visio/edit-delete.d.ts.map +1 -1
- package/dist/visio/edit-diagram-parts-commands.d.ts +55 -0
- package/dist/visio/edit-diagram-parts-commands.d.ts.map +1 -0
- package/dist/visio/edit-diagram-parts.d.ts +16 -0
- package/dist/visio/edit-diagram-parts.d.ts.map +1 -0
- package/dist/visio/edit-ellipse-geometry.d.ts +2 -0
- package/dist/visio/edit-ellipse-geometry.d.ts.map +1 -1
- package/dist/visio/edit-foreign-bitmap.d.ts +7 -0
- package/dist/visio/edit-foreign-bitmap.d.ts.map +1 -0
- package/dist/visio/edit-formatting-cell-admission.d.ts +2 -0
- package/dist/visio/edit-formatting-cell-admission.d.ts.map +1 -1
- package/dist/visio/edit-formatting-commands.d.ts +14 -1
- package/dist/visio/edit-formatting-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-effects.d.ts +50 -0
- package/dist/visio/edit-formatting-effects.d.ts.map +1 -0
- package/dist/visio/edit-formatting-glow.d.ts +43 -0
- package/dist/visio/edit-formatting-glow.d.ts.map +1 -0
- package/dist/visio/edit-formatting-paint-scope.d.ts.map +1 -1
- package/dist/visio/edit-formatting-paint.d.ts +6 -0
- package/dist/visio/edit-formatting-paint.d.ts.map +1 -1
- package/dist/visio/edit-formatting-scope.d.ts.map +1 -1
- package/dist/visio/edit-formatting-text-commands.d.ts +56 -0
- package/dist/visio/edit-formatting-text-commands.d.ts.map +1 -0
- package/dist/visio/edit-formatting-text-extra.d.ts +11 -0
- package/dist/visio/edit-formatting-text-extra.d.ts.map +1 -0
- package/dist/visio/edit-formatting-text.d.ts.map +1 -1
- package/dist/visio/edit-formatting-theme-context.d.ts +14 -0
- package/dist/visio/edit-formatting-theme-context.d.ts.map +1 -0
- package/dist/visio/edit-formatting.d.ts +2 -0
- package/dist/visio/edit-formatting.d.ts.map +1 -1
- package/dist/visio/edit-geometry-admission.d.ts +1 -1
- package/dist/visio/edit-geometry-admission.d.ts.map +1 -1
- package/dist/visio/edit-geometry.d.ts.map +1 -1
- package/dist/visio/edit-group-commands.d.ts +22 -0
- package/dist/visio/edit-group-commands.d.ts.map +1 -0
- package/dist/visio/edit-group-rotation.d.ts +7 -1
- package/dist/visio/edit-group-rotation.d.ts.map +1 -1
- package/dist/visio/edit-group.d.ts +17 -0
- package/dist/visio/edit-group.d.ts.map +1 -0
- package/dist/visio/edit-guide-commands.d.ts +26 -0
- package/dist/visio/edit-guide-commands.d.ts.map +1 -0
- package/dist/visio/edit-guides.d.ts +4 -0
- package/dist/visio/edit-guides.d.ts.map +1 -0
- package/dist/visio/edit-layer-commands.d.ts +20 -0
- package/dist/visio/edit-layer-commands.d.ts.map +1 -0
- package/dist/visio/edit-layers.d.ts +7 -0
- package/dist/visio/edit-layers.d.ts.map +1 -0
- package/dist/visio/edit-metadata-commands.d.ts +46 -0
- package/dist/visio/edit-metadata-commands.d.ts.map +1 -0
- package/dist/visio/edit-metadata.d.ts +4 -0
- package/dist/visio/edit-metadata.d.ts.map +1 -0
- package/dist/visio/edit-page-auto-size.d.ts +19 -0
- package/dist/visio/edit-page-auto-size.d.ts.map +1 -0
- package/dist/visio/edit-page-create.d.ts +24 -0
- package/dist/visio/edit-page-create.d.ts.map +1 -0
- package/dist/visio/edit-page-decoration.d.ts +14 -0
- package/dist/visio/edit-page-decoration.d.ts.map +1 -0
- package/dist/visio/edit-page-setup-commands.d.ts +57 -0
- package/dist/visio/edit-page-setup-commands.d.ts.map +1 -0
- package/dist/visio/edit-page-setup.d.ts +13 -0
- package/dist/visio/edit-page-setup.d.ts.map +1 -0
- package/dist/visio/edit-page-size.d.ts +4 -0
- package/dist/visio/edit-page-size.d.ts.map +1 -1
- package/dist/visio/edit-page-theme-commands.d.ts +15 -0
- package/dist/visio/edit-page-theme-commands.d.ts.map +1 -0
- package/dist/visio/edit-page-theme-recolor.d.ts +3 -0
- package/dist/visio/edit-page-theme-recolor.d.ts.map +1 -0
- package/dist/visio/edit-page-theme.d.ts +10 -0
- package/dist/visio/edit-page-theme.d.ts.map +1 -0
- package/dist/visio/edit-pages.d.ts.map +1 -1
- package/dist/visio/edit-path-commands.d.ts +19 -0
- package/dist/visio/edit-path-commands.d.ts.map +1 -0
- package/dist/visio/edit-path-create.d.ts +23 -0
- package/dist/visio/edit-path-create.d.ts.map +1 -0
- package/dist/visio/edit-picture.d.ts +7 -0
- package/dist/visio/edit-picture.d.ts.map +1 -0
- package/dist/visio/edit-recalculate-index.d.ts +2 -0
- package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
- package/dist/visio/edit-resize-anchor.d.ts +1 -1
- package/dist/visio/edit-resize-anchor.d.ts.map +1 -1
- package/dist/visio/edit-scope.d.ts.map +1 -1
- package/dist/visio/edit-shape-create.d.ts +8 -0
- package/dist/visio/edit-shape-create.d.ts.map +1 -1
- package/dist/visio/edit-shape-data-commands.d.ts +34 -0
- package/dist/visio/edit-shape-data-commands.d.ts.map +1 -0
- package/dist/visio/edit-shape-data.d.ts +22 -0
- package/dist/visio/edit-shape-data.d.ts.map +1 -0
- package/dist/visio/edit-shape-order.d.ts.map +1 -1
- package/dist/visio/edit-subprocess-commands.d.ts +27 -0
- package/dist/visio/edit-subprocess-commands.d.ts.map +1 -0
- package/dist/visio/edit-subprocess.d.ts +9 -0
- package/dist/visio/edit-subprocess.d.ts.map +1 -0
- package/dist/visio/edit-text-field-commands.d.ts +21 -0
- package/dist/visio/edit-text-field-commands.d.ts.map +1 -0
- package/dist/visio/edit-text-field.d.ts +5 -0
- package/dist/visio/edit-text-field.d.ts.map +1 -0
- package/dist/visio/edit-text-range-plan.d.ts.map +1 -1
- package/dist/visio/edit-text-ranges.d.ts.map +1 -1
- package/dist/visio/edit-text.d.ts.map +1 -1
- package/dist/visio/edit.d.ts +2 -1
- package/dist/visio/edit.d.ts.map +1 -1
- package/dist/visio/effects.d.ts +13 -0
- package/dist/visio/effects.d.ts.map +1 -0
- package/dist/visio/formula-evaluate.d.ts.map +1 -1
- package/dist/visio/index.cjs +26474 -19318
- package/dist/visio/index.d.ts +25 -1
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +26406 -19319
- package/dist/visio/model.d.ts +125 -0
- package/dist/visio/model.d.ts.map +1 -1
- package/dist/visio/page-decoration.d.ts +66 -0
- package/dist/visio/page-decoration.d.ts.map +1 -0
- package/dist/visio/page-scale.d.ts.map +1 -1
- package/dist/visio/page-setup.d.ts +8 -0
- package/dist/visio/page-setup.d.ts.map +1 -0
- package/dist/visio/page-theme.d.ts +9 -0
- package/dist/visio/page-theme.d.ts.map +1 -0
- package/dist/visio/paper-sizes.d.ts +24 -0
- package/dist/visio/paper-sizes.d.ts.map +1 -0
- package/dist/visio/parser.d.ts.map +1 -1
- package/dist/visio/path-fit.d.ts +69 -0
- package/dist/visio/path-fit.d.ts.map +1 -0
- package/dist/visio/shadow.d.ts +9 -0
- package/dist/visio/shadow.d.ts.map +1 -0
- package/dist/visio/shape-connections.d.ts +5 -0
- package/dist/visio/shape-connections.d.ts.map +1 -0
- package/dist/visio/shape-metadata.d.ts +3 -0
- package/dist/visio/shape-metadata.d.ts.map +1 -1
- package/dist/visio/shape-structure.d.ts +10 -0
- package/dist/visio/shape-structure.d.ts.map +1 -0
- package/dist/visio/shapes.d.ts.map +1 -1
- package/dist/visio/stencil-shapes.d.ts +20 -0
- package/dist/visio/stencil-shapes.d.ts.map +1 -0
- package/dist/visio/stencils.d.ts +30 -0
- package/dist/visio/stencils.d.ts.map +1 -0
- package/dist/visio/style.d.ts +3 -0
- package/dist/visio/style.d.ts.map +1 -1
- package/dist/visio/text-character.d.ts +5 -0
- package/dist/visio/text-character.d.ts.map +1 -0
- package/dist/visio/text-field-context.d.ts +6 -0
- package/dist/visio/text-field-context.d.ts.map +1 -0
- package/dist/visio/text-field-display.d.ts +12 -0
- package/dist/visio/text-field-display.d.ts.map +1 -0
- package/dist/visio/text-fields.d.ts +65 -0
- package/dist/visio/text-fields.d.ts.map +1 -0
- package/dist/visio/theme-builtins.d.ts +32 -0
- package/dist/visio/theme-builtins.d.ts.map +1 -0
- package/dist/visio/theme-write.d.ts +4 -0
- package/dist/visio/theme-write.d.ts.map +1 -0
- package/dist/visio/theme.d.ts +2 -0
- package/dist/visio/theme.d.ts.map +1 -1
- package/dist/visio/ui/auto-layout.d.ts +38 -0
- package/dist/visio/ui/auto-layout.d.ts.map +1 -0
- package/dist/visio/ui/change-case.d.ts +12 -0
- package/dist/visio/ui/change-case.d.ts.map +1 -0
- package/dist/visio/ui/connection-points.d.ts +45 -0
- package/dist/visio/ui/connection-points.d.ts.map +1 -0
- package/dist/visio/ui/connector-preview.d.ts +24 -0
- package/dist/visio/ui/connector-preview.d.ts.map +1 -0
- package/dist/visio/ui/data-graphic-rules.d.ts +45 -0
- package/dist/visio/ui/data-graphic-rules.d.ts.map +1 -0
- package/dist/visio/ui/data-graphics.d.ts +15 -0
- package/dist/visio/ui/data-graphics.d.ts.map +1 -0
- package/dist/visio/ui/data-table.d.ts +33 -0
- package/dist/visio/ui/data-table.d.ts.map +1 -0
- package/dist/visio/ui/diagram-check.d.ts +32 -0
- package/dist/visio/ui/diagram-check.d.ts.map +1 -0
- package/dist/visio/ui/diagram-parts.d.ts +20 -0
- package/dist/visio/ui/diagram-parts.d.ts.map +1 -0
- package/dist/visio/ui/draw-path-plan.d.ts +21 -0
- package/dist/visio/ui/draw-path-plan.d.ts.map +1 -0
- package/dist/visio/ui/draw-plan.d.ts +11 -3
- package/dist/visio/ui/draw-plan.d.ts.map +1 -1
- package/dist/visio/ui/edit-commands.d.ts.map +1 -1
- package/dist/visio/ui/format-painter.d.ts +25 -0
- package/dist/visio/ui/format-painter.d.ts.map +1 -0
- package/dist/visio/ui/guides.d.ts +34 -0
- package/dist/visio/ui/guides.d.ts.map +1 -0
- package/dist/visio/ui/index.cjs +8006 -2705
- package/dist/visio/ui/index.d.ts +25 -0
- package/dist/visio/ui/index.d.ts.map +1 -1
- package/dist/visio/ui/index.mjs +7894 -2706
- package/dist/visio/ui/insert.d.ts +26 -0
- package/dist/visio/ui/insert.d.ts.map +1 -0
- package/dist/visio/ui/layer-assign.d.ts +31 -0
- package/dist/visio/ui/layer-assign.d.ts.map +1 -0
- package/dist/visio/ui/page-edit.d.ts.map +1 -1
- package/dist/visio/ui/page-setup.d.ts +50 -0
- package/dist/visio/ui/page-setup.d.ts.map +1 -0
- package/dist/visio/ui/page-size.d.ts +2 -11
- package/dist/visio/ui/page-size.d.ts.map +1 -1
- package/dist/visio/ui/paste-text.d.ts +13 -0
- package/dist/visio/ui/paste-text.d.ts.map +1 -0
- package/dist/visio/ui/scene-data.d.ts +4 -0
- package/dist/visio/ui/scene-data.d.ts.map +1 -0
- package/dist/visio/ui/scene-details.d.ts.map +1 -1
- package/dist/visio/ui/scene-validation-text.d.ts +8 -0
- package/dist/visio/ui/scene-validation-text.d.ts.map +1 -0
- package/dist/visio/ui/scene-validation.d.ts.map +1 -1
- package/dist/visio/ui/select-by-type.d.ts +35 -0
- package/dist/visio/ui/select-by-type.d.ts.map +1 -0
- package/dist/visio/ui/shape-arrange.d.ts.map +1 -1
- package/dist/visio/ui/shape-change.d.ts +11 -0
- package/dist/visio/ui/shape-change.d.ts.map +1 -0
- package/dist/visio/ui/shape-effects.d.ts +14 -0
- package/dist/visio/ui/shape-effects.d.ts.map +1 -0
- package/dist/visio/ui/shape-formatting.d.ts +5 -0
- package/dist/visio/ui/shape-formatting.d.ts.map +1 -1
- package/dist/visio/ui/shape-group.d.ts +9 -0
- package/dist/visio/ui/shape-group.d.ts.map +1 -0
- package/dist/visio/ui/shape-move.d.ts +5 -2
- package/dist/visio/ui/shape-move.d.ts.map +1 -1
- package/dist/visio/ui/shape-report.d.ts +37 -0
- package/dist/visio/ui/shape-report.d.ts.map +1 -0
- package/dist/visio/ui/shape-resize.d.ts.map +1 -1
- package/dist/visio/ui/shape-rotation.d.ts.map +1 -1
- package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
- package/dist/visio/ui/subprocess.d.ts +13 -0
- package/dist/visio/ui/subprocess.d.ts.map +1 -0
- package/dist/visio/ui/text-block.d.ts +42 -0
- package/dist/visio/ui/text-block.d.ts.map +1 -0
- package/dist/visio/ui/text-dialog.d.ts +54 -0
- package/dist/visio/ui/text-dialog.d.ts.map +1 -0
- package/dist/visio/ui/text-draft.d.ts +25 -0
- package/dist/visio/ui/text-draft.d.ts.map +1 -0
- package/dist/visio/ui/text-field-catalog.d.ts +17 -0
- package/dist/visio/ui/text-field-catalog.d.ts.map +1 -0
- package/dist/xlsx/formula/test-helpers.d.ts +9 -9
- package/dist/xlsx/index.cjs +1 -1
- package/dist/xlsx/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/pptx/chunks/text-operations-DtCxXrMh.d.ts.map +0 -1
package/dist/drawingml/index.mjs
CHANGED
|
@@ -838,7 +838,7 @@ function drawingFillXml(fill) {
|
|
|
838
838
|
const root = doc.documentElement;
|
|
839
839
|
if (root.namespaceURI !== NS.a || root.localName !== "gradFill")
|
|
840
840
|
throw new Error("Invalid gradient source XML");
|
|
841
|
-
const
|
|
841
|
+
const fragment2 = (xml) => doc.importNode(elements(parseXml(`<w xmlns:a="${NS.a}">${xml}</w>`).documentElement)[0], true);
|
|
842
842
|
let list = first(root, "gsLst", NS.a);
|
|
843
843
|
if (!list) {
|
|
844
844
|
list = doc.createElementNS(NS.a, "a:gsLst");
|
|
@@ -853,7 +853,7 @@ function drawingFillXml(fill) {
|
|
|
853
853
|
node.setAttribute("pos", String(Math.round(stop.position * 1e3)));
|
|
854
854
|
for (const old of elements(node))
|
|
855
855
|
if (old.namespaceURI === NS.a && old.localName.endsWith("Clr")) node.removeChild(old);
|
|
856
|
-
node.insertBefore(
|
|
856
|
+
node.insertBefore(fragment2(drawingColorXml(stop.color)), node.firstChild);
|
|
857
857
|
});
|
|
858
858
|
for (const stop of stops.slice(fill.stops.length)) list.removeChild(stop);
|
|
859
859
|
for (const node of elements(root))
|
|
@@ -903,6 +903,105 @@ function drawingFillXml(fill) {
|
|
|
903
903
|
return buildXml(doc);
|
|
904
904
|
}
|
|
905
905
|
|
|
906
|
+
// drawingml/theme-model.ts
|
|
907
|
+
var THEME_COLOR_SLOTS = [
|
|
908
|
+
"dk1",
|
|
909
|
+
"lt1",
|
|
910
|
+
"dk2",
|
|
911
|
+
"lt2",
|
|
912
|
+
"accent1",
|
|
913
|
+
"accent2",
|
|
914
|
+
"accent3",
|
|
915
|
+
"accent4",
|
|
916
|
+
"accent5",
|
|
917
|
+
"accent6",
|
|
918
|
+
"hlink",
|
|
919
|
+
"folHlink"
|
|
920
|
+
];
|
|
921
|
+
var DEFAULT_THEME_COLOR_MAP = {
|
|
922
|
+
bg1: "lt1",
|
|
923
|
+
tx1: "dk1",
|
|
924
|
+
bg2: "lt2",
|
|
925
|
+
tx2: "dk2"
|
|
926
|
+
};
|
|
927
|
+
|
|
928
|
+
// drawingml/write-theme.ts
|
|
929
|
+
function fragment(host, xml, namespaces) {
|
|
930
|
+
const declarations = Object.entries({ a: NS.a, ...namespaces }).map(([prefix, uri]) => ` xmlns:${prefix}="${uri}"`).join("");
|
|
931
|
+
const wrapper = parseXml(`<w${declarations}>${xml}</w>`, { label: "DrawingML theme fragment" });
|
|
932
|
+
return elements(wrapper.documentElement).map(
|
|
933
|
+
(node) => host.ownerDocument.importNode(node, true)
|
|
934
|
+
);
|
|
935
|
+
}
|
|
936
|
+
function extensionList(parent, extensions, namespaces) {
|
|
937
|
+
const entries = Object.entries(extensions ?? {});
|
|
938
|
+
if (!entries.length) return;
|
|
939
|
+
const doc = parent.ownerDocument;
|
|
940
|
+
const list = doc.createElementNS(NS.a, "a:extLst");
|
|
941
|
+
for (const [uri, xml] of entries) {
|
|
942
|
+
const ext = doc.createElementNS(NS.a, "a:ext");
|
|
943
|
+
ext.setAttribute("uri", uri);
|
|
944
|
+
for (const node of fragment(ext, xml, namespaces)) ext.appendChild(node);
|
|
945
|
+
list.appendChild(ext);
|
|
946
|
+
}
|
|
947
|
+
parent.appendChild(list);
|
|
948
|
+
}
|
|
949
|
+
function fontCollection(parent, name, fonts) {
|
|
950
|
+
const doc = parent.ownerDocument;
|
|
951
|
+
const node = doc.createElementNS(NS.a, `a:${name}`);
|
|
952
|
+
for (const [local, face] of [
|
|
953
|
+
["latin", fonts.latin],
|
|
954
|
+
["ea", fonts.eastAsia],
|
|
955
|
+
["cs", fonts.complexScript]
|
|
956
|
+
]) {
|
|
957
|
+
const font = doc.createElementNS(NS.a, `a:${local}`);
|
|
958
|
+
font.setAttribute("typeface", face ?? "");
|
|
959
|
+
node.appendChild(font);
|
|
960
|
+
}
|
|
961
|
+
for (const [script, face] of Object.entries(fonts.scripts)) {
|
|
962
|
+
const font = doc.createElementNS(NS.a, "a:font");
|
|
963
|
+
font.setAttribute("script", script);
|
|
964
|
+
font.setAttribute("typeface", face);
|
|
965
|
+
node.appendChild(font);
|
|
966
|
+
}
|
|
967
|
+
parent.appendChild(node);
|
|
968
|
+
}
|
|
969
|
+
function drawingThemeXml(theme, parts) {
|
|
970
|
+
const namespaces = parts.namespaces ?? {};
|
|
971
|
+
const doc = parseXml(
|
|
972
|
+
`<a:theme xmlns:a="${NS.a}"${Object.entries(namespaces).map(([prefix, uri]) => ` xmlns:${prefix}="${uri}"`).join("")}/>`
|
|
973
|
+
);
|
|
974
|
+
const root = doc.documentElement;
|
|
975
|
+
if (theme.name !== void 0) root.setAttribute("name", theme.name);
|
|
976
|
+
const elementsNode = doc.createElementNS(NS.a, "a:themeElements");
|
|
977
|
+
root.appendChild(elementsNode);
|
|
978
|
+
const scheme = doc.createElementNS(NS.a, "a:clrScheme");
|
|
979
|
+
scheme.setAttribute("name", theme.colorScheme.name ?? theme.name ?? "Custom");
|
|
980
|
+
for (const slot of THEME_COLOR_SLOTS) {
|
|
981
|
+
const color = theme.colorScheme.colors[slot];
|
|
982
|
+
if (!color) throw new Error(`The theme colour scheme has no ${slot} colour.`);
|
|
983
|
+
const node = doc.createElementNS(NS.a, `a:${slot}`);
|
|
984
|
+
for (const child of fragment(node, drawingColorXml(color), namespaces)) node.appendChild(child);
|
|
985
|
+
scheme.appendChild(node);
|
|
986
|
+
}
|
|
987
|
+
extensionList(scheme, parts.colorSchemeExtensions, namespaces);
|
|
988
|
+
elementsNode.appendChild(scheme);
|
|
989
|
+
const fonts = doc.createElementNS(NS.a, "a:fontScheme");
|
|
990
|
+
fonts.setAttribute("name", theme.fontScheme.name ?? theme.name ?? "Custom");
|
|
991
|
+
fontCollection(fonts, "majorFont", theme.fontScheme.major);
|
|
992
|
+
fontCollection(fonts, "minorFont", theme.fontScheme.minor);
|
|
993
|
+
elementsNode.appendChild(fonts);
|
|
994
|
+
const format = fragment(elementsNode, parts.formatScheme, namespaces);
|
|
995
|
+
if (format.length !== 1 || format[0].localName !== "fmtScheme" || format[0].namespaceURI !== NS.a)
|
|
996
|
+
throw new Error("The theme format scheme must be one a:fmtScheme element.");
|
|
997
|
+
elementsNode.appendChild(format[0]);
|
|
998
|
+
extensionList(elementsNode, parts.themeElementsExtensions, namespaces);
|
|
999
|
+
root.appendChild(doc.createElementNS(NS.a, "a:objectDefaults"));
|
|
1000
|
+
root.appendChild(doc.createElementNS(NS.a, "a:extraClrSchemeLst"));
|
|
1001
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
1002
|
+
${buildXml(doc)}`;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
906
1005
|
// drawingml/gradient-preset-data.ts
|
|
907
1006
|
var OFFICE_GRADIENT_PRESET_DATA = [
|
|
908
1007
|
[
|
|
@@ -1357,28 +1456,6 @@ function buildRectPathGradientImage(stops, focalPoint, fillToRect) {
|
|
|
1357
1456
|
return `url("data:image/svg+xml,${encodeURIComponent(markup)}")`;
|
|
1358
1457
|
}
|
|
1359
1458
|
|
|
1360
|
-
// drawingml/theme-model.ts
|
|
1361
|
-
var THEME_COLOR_SLOTS = [
|
|
1362
|
-
"dk1",
|
|
1363
|
-
"lt1",
|
|
1364
|
-
"dk2",
|
|
1365
|
-
"lt2",
|
|
1366
|
-
"accent1",
|
|
1367
|
-
"accent2",
|
|
1368
|
-
"accent3",
|
|
1369
|
-
"accent4",
|
|
1370
|
-
"accent5",
|
|
1371
|
-
"accent6",
|
|
1372
|
-
"hlink",
|
|
1373
|
-
"folHlink"
|
|
1374
|
-
];
|
|
1375
|
-
var DEFAULT_THEME_COLOR_MAP = {
|
|
1376
|
-
bg1: "lt1",
|
|
1377
|
-
tx1: "dk1",
|
|
1378
|
-
bg2: "lt2",
|
|
1379
|
-
tx2: "dk2"
|
|
1380
|
-
};
|
|
1381
|
-
|
|
1382
1459
|
// drawingml/theme.ts
|
|
1383
1460
|
var MAP_KEYS = [
|
|
1384
1461
|
"bg1",
|
|
@@ -1494,4 +1571,4 @@ function themeDrawingColorTheme(scheme, colorMap) {
|
|
|
1494
1571
|
};
|
|
1495
1572
|
}
|
|
1496
1573
|
|
|
1497
|
-
export { DEFAULT_THEME_COLOR_MAP, OFFICE_GRADIENT_PRESETS, RECT_GRADIENT_DIRECTIONS, THEME_COLOR_SLOTS, attributeReader, booleanAttribute, buildRectPathGradientImage, buildRectPathGradientSvg, descendants, drawingColorBrightness, drawingColorCss, drawingColorXml, drawingFillXml, fillElementOf, integerAttribute, isThemeColorSlot, officeGradientPresetFill, officeGradientPresetId, orderedColorTransforms, parseDrawingColor, parseDrawingColorIn, parseDrawingColorList, parseDrawingFill, parseDrawingGeometry, parseDrawingLine, parseDrawingTextBody, parseFrame, parseTheme, parseThemeColorMap, parseThemeColorScheme, parseThemeFontScheme, parseThemeXml, parseTransform, rectGradientDirection, rectGradientFocus, resolveDrawingColor, resolveDrawingShadow, resolveDrawingShadowXml, resolveSchemeColor, setDrawingFillXml, stringAttribute, svgDropShadowElement, themeColorSlotFor, themeDrawingColorTheme, themeSlotHex, withDrawingColorBrightness, withDrawingGradientGeometry };
|
|
1574
|
+
export { DEFAULT_THEME_COLOR_MAP, OFFICE_GRADIENT_PRESETS, RECT_GRADIENT_DIRECTIONS, THEME_COLOR_SLOTS, attributeReader, booleanAttribute, buildRectPathGradientImage, buildRectPathGradientSvg, descendants, drawingColorBrightness, drawingColorCss, drawingColorXml, drawingFillXml, drawingThemeXml, fillElementOf, integerAttribute, isThemeColorSlot, officeGradientPresetFill, officeGradientPresetId, orderedColorTransforms, parseDrawingColor, parseDrawingColorIn, parseDrawingColorList, parseDrawingFill, parseDrawingGeometry, parseDrawingLine, parseDrawingTextBody, parseFrame, parseTheme, parseThemeColorMap, parseThemeColorScheme, parseThemeFontScheme, parseThemeXml, parseTransform, rectGradientDirection, rectGradientFocus, resolveDrawingColor, resolveDrawingShadow, resolveDrawingShadowXml, resolveSchemeColor, setDrawingFillXml, stringAttribute, svgDropShadowElement, themeColorSlotFor, themeDrawingColorTheme, themeSlotHex, withDrawingColorBrightness, withDrawingGradientGeometry };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DrawingTheme } from './theme-model.js';
|
|
2
|
+
export interface DrawingThemeXmlParts {
|
|
3
|
+
/** The `a:fmtScheme` element (required by the schema), as one `a:` fragment. */
|
|
4
|
+
formatScheme: string;
|
|
5
|
+
/** Children of an `a:ext` appended to `a:clrScheme`, keyed by extension URI. */
|
|
6
|
+
colorSchemeExtensions?: Readonly<Record<string, string>>;
|
|
7
|
+
/** Children of an `a:ext` appended to `a:themeElements`, keyed by extension URI. */
|
|
8
|
+
themeElementsExtensions?: Readonly<Record<string, string>>;
|
|
9
|
+
/** Extra namespace prefixes the fragments use (the `a` prefix is always declared). */
|
|
10
|
+
namespaces?: Readonly<Record<string, string>>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A complete `a:theme` part. Every one of the twelve colour slots must be present in the model;
|
|
14
|
+
* the format scheme and extensions are product data and are copied as given.
|
|
15
|
+
*/
|
|
16
|
+
export declare function drawingThemeXml(theme: DrawingTheme, parts: DrawingThemeXmlParts): string;
|
|
17
|
+
//# sourceMappingURL=write-theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-theme.d.ts","sourceRoot":"","sources":["../../drawingml/write-theme.ts"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,YAAY,EAA4B,MAAM,eAAe,CAAC;AAE/F,MAAM,WAAW,oBAAoB;IACpC,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,oFAAoF;IACpF,uBAAuB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,sFAAsF;IACtF,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C;AAuDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAuCxF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format-neutral "Auto Align & Space": boxes whose centres nearly line up are snapped into
|
|
3
|
+
* shared rows and columns, then the rows and columns are spaced evenly.
|
|
4
|
+
*
|
|
5
|
+
* Boxes use `{ x, y }` as the top-left corner with y growing downward. Clustering compares
|
|
6
|
+
* centres: a centre joins the current row (column) while it stays within `tolerance` of that
|
|
7
|
+
* row's mean centre; the default tolerance is half the median box height (width). Rows keep the
|
|
8
|
+
* top of the first row and columns the left of the first column; the gap between neighbouring
|
|
9
|
+
* rows (columns) becomes their current average gap, clamped to at least `minimumGap`.
|
|
10
|
+
*/
|
|
11
|
+
export interface AutoAlignBox {
|
|
12
|
+
id: string;
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
export interface AutoAlignOptions {
|
|
19
|
+
/** Centre distance that still counts as the same row or column. */
|
|
20
|
+
tolerance?: {
|
|
21
|
+
x?: number;
|
|
22
|
+
y?: number;
|
|
23
|
+
};
|
|
24
|
+
/** Smallest gap kept between rows and between columns. */
|
|
25
|
+
minimumGap?: number;
|
|
26
|
+
}
|
|
27
|
+
/** New top-left corners for every box. Boxes need not overlap-free input; ids must be unique. */
|
|
28
|
+
export declare function autoAlignBoxes(boxes: readonly AutoAlignBox[], options?: AutoAlignOptions): Map<string, {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=auto-align.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-align.d.ts","sourceRoot":"","sources":["../../geometry/auto-align.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,gBAAgB;IAChC,mEAAmE;IACnE,SAAS,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,iGAAiG;AACjG,wBAAgB,cAAc,CAC7B,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,OAAO,GAAE,gBAAqB,GAC5B,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BvC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format-neutral automatic layout of a directed graph of boxes: layered (a small Sugiyama
|
|
3
|
+
* variant for flowcharts and hierarchies), an indented compact tree and a circle per connected
|
|
4
|
+
* component. Unconnected boxes are placed in a grid after the connected ones.
|
|
5
|
+
*
|
|
6
|
+
* Coordinates are abstract units with y growing downward; results are box centres relative to
|
|
7
|
+
* the top-left corner of the whole layout. No DOM and no format semantics: callers map their
|
|
8
|
+
* own shapes and connections in and apply the positions themselves.
|
|
9
|
+
*/
|
|
10
|
+
export interface GraphLayoutNode {
|
|
11
|
+
id: string;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}
|
|
15
|
+
/** A directed connection; edges naming unknown nodes, self loops and duplicates are ignored. */
|
|
16
|
+
export interface GraphLayoutEdge {
|
|
17
|
+
from: string;
|
|
18
|
+
to: string;
|
|
19
|
+
}
|
|
20
|
+
export type GraphLayoutStyle = 'flowchart-tb' | 'flowchart-lr' | 'hierarchy' | 'compact-tree' | 'circular';
|
|
21
|
+
export declare const GRAPH_LAYOUT_STYLES: readonly GraphLayoutStyle[];
|
|
22
|
+
export interface GraphLayoutOptions {
|
|
23
|
+
/** Gap between neighbouring boxes in the same layer, row or circle. */
|
|
24
|
+
spacing?: number;
|
|
25
|
+
/** Gap between layers (or tree levels). Defaults to `spacing`. */
|
|
26
|
+
layerSpacing?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface GraphLayoutPoint {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Lay out every node. Components are packed side by side (stacked for left-to-right flowcharts),
|
|
34
|
+
* then unconnected nodes follow in a grid. Returns centres relative to the layout's top left.
|
|
35
|
+
*/
|
|
36
|
+
export declare function layoutGraph(nodes: readonly GraphLayoutNode[], edges: readonly GraphLayoutEdge[], style: GraphLayoutStyle, options?: GraphLayoutOptions): Map<string, GraphLayoutPoint>;
|
|
37
|
+
//# sourceMappingURL=graph-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-layout.d.ts","sourceRoot":"","sources":["../../geometry/graph-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AACD,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AACD,MAAM,MAAM,gBAAgB,GACzB,cAAc,GACd,cAAc,GACd,WAAW,GACX,cAAc,GACd,UAAU,CAAC;AACd,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAM1D,CAAC;AACF,MAAM,WAAW,kBAAkB;IAClC,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,WAAW,gBAAgB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACV;AA+QD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,KAAK,EAAE,SAAS,eAAe,EAAE,EACjC,KAAK,EAAE,gBAAgB,EACvB,OAAO,GAAE,kBAAuB,GAC9B,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAyD/B"}
|
package/dist/geometry/index.cjs
CHANGED
|
@@ -15478,11 +15478,11 @@ function createRotationDrag(center, startPointer, startRotation, options = {}) {
|
|
|
15478
15478
|
|
|
15479
15479
|
// geometry/rotate-handle-placement.ts
|
|
15480
15480
|
function resolveRotateHandlePlacement(input) {
|
|
15481
|
-
const { preferred, selection, bounds, hitWidth, hitHeight, obstacles } = input;
|
|
15481
|
+
const { preferred, selection, bounds: bounds2, hitWidth, hitHeight, obstacles } = input;
|
|
15482
15482
|
if (![
|
|
15483
15483
|
...Object.values(preferred),
|
|
15484
15484
|
...Object.values(selection),
|
|
15485
|
-
...Object.values(
|
|
15485
|
+
...Object.values(bounds2),
|
|
15486
15486
|
hitWidth,
|
|
15487
15487
|
hitHeight
|
|
15488
15488
|
].every(Number.isFinite) || hitWidth <= 0 || hitHeight <= 0) {
|
|
@@ -15496,7 +15496,7 @@ function resolveRotateHandlePlacement(input) {
|
|
|
15496
15496
|
};
|
|
15497
15497
|
const fits = ({ x, y }) => {
|
|
15498
15498
|
const rect2 = { left: x - halfX, right: x + halfX, top: y - halfY, bottom: y + halfY };
|
|
15499
|
-
return rect2.left >=
|
|
15499
|
+
return rect2.left >= bounds2.left + 1 && rect2.right <= bounds2.right - 1 && rect2.top >= bounds2.top + 1 && rect2.bottom <= bounds2.bottom - 1 && // A target over the rotation center has no usable initial bearing.
|
|
15500
15500
|
!(center.x >= rect2.left && center.x <= rect2.right && center.y >= rect2.top && center.y <= rect2.bottom) && !obstacles.some(
|
|
15501
15501
|
(other) => rect2.left < other.right + 2 && rect2.right > other.left - 2 && rect2.top < other.bottom + 2 && rect2.bottom > other.top - 2
|
|
15502
15502
|
);
|
|
@@ -15524,10 +15524,10 @@ function resolveRotateHandlePlacement(input) {
|
|
|
15524
15524
|
{ x: center.x, y: selection.bottom + padY },
|
|
15525
15525
|
{ x: selection.left - padX, y: center.y }
|
|
15526
15526
|
];
|
|
15527
|
-
const left = Math.max(selection.left,
|
|
15528
|
-
const right = Math.min(selection.right,
|
|
15529
|
-
const top = Math.max(selection.top,
|
|
15530
|
-
const bottom = Math.min(selection.bottom,
|
|
15527
|
+
const left = Math.max(selection.left, bounds2.left) + halfX + 3;
|
|
15528
|
+
const right = Math.min(selection.right, bounds2.right) - halfX - 3;
|
|
15529
|
+
const top = Math.max(selection.top, bounds2.top) + halfY + 3;
|
|
15530
|
+
const bottom = Math.min(selection.bottom, bounds2.bottom) - halfY - 3;
|
|
15531
15531
|
if (left <= right && top <= bottom) {
|
|
15532
15532
|
for (const fraction of [0.25, 0.75]) {
|
|
15533
15533
|
const x = left + (right - left) * fraction;
|
|
@@ -15541,6 +15541,357 @@ function resolveRotateHandlePlacement(input) {
|
|
|
15541
15541
|
})[0] ?? null;
|
|
15542
15542
|
}
|
|
15543
15543
|
|
|
15544
|
+
// geometry/graph-layout.ts
|
|
15545
|
+
var GRAPH_LAYOUT_STYLES = [
|
|
15546
|
+
"flowchart-tb",
|
|
15547
|
+
"flowchart-lr",
|
|
15548
|
+
"hierarchy",
|
|
15549
|
+
"compact-tree",
|
|
15550
|
+
"circular"
|
|
15551
|
+
];
|
|
15552
|
+
function components(graph) {
|
|
15553
|
+
const seen = /* @__PURE__ */ new Set();
|
|
15554
|
+
const connected = [];
|
|
15555
|
+
const isolated = [];
|
|
15556
|
+
for (const node of graph.nodes) {
|
|
15557
|
+
if (seen.has(node.id)) continue;
|
|
15558
|
+
const ids = [];
|
|
15559
|
+
const stack = [node.id];
|
|
15560
|
+
seen.add(node.id);
|
|
15561
|
+
while (stack.length) {
|
|
15562
|
+
const id = stack.pop();
|
|
15563
|
+
ids.push(id);
|
|
15564
|
+
for (const next of [...graph.out.get(id), ...graph.into.get(id)])
|
|
15565
|
+
if (!seen.has(next)) {
|
|
15566
|
+
seen.add(next);
|
|
15567
|
+
stack.push(next);
|
|
15568
|
+
}
|
|
15569
|
+
}
|
|
15570
|
+
if (ids.length === 1) isolated.push(node.id);
|
|
15571
|
+
else {
|
|
15572
|
+
const order = new Map(graph.nodes.map((entry, index) => [entry.id, index]));
|
|
15573
|
+
connected.push(ids.sort((a, b) => order.get(a) - order.get(b)));
|
|
15574
|
+
}
|
|
15575
|
+
}
|
|
15576
|
+
return { connected, isolated };
|
|
15577
|
+
}
|
|
15578
|
+
function roots(ids, graph) {
|
|
15579
|
+
const found = ids.filter((id) => !graph.into.get(id).some((from) => ids.includes(from)));
|
|
15580
|
+
return found.length ? found : [ids[0]];
|
|
15581
|
+
}
|
|
15582
|
+
function forwardEdges(ids, graph) {
|
|
15583
|
+
const state = /* @__PURE__ */ new Map();
|
|
15584
|
+
const forward = new Map(ids.map((id) => [id, []]));
|
|
15585
|
+
const visit = (start) => {
|
|
15586
|
+
const stack = [{ id: start, next: 0 }];
|
|
15587
|
+
state.set(start, 1);
|
|
15588
|
+
while (stack.length) {
|
|
15589
|
+
const top = stack.at(-1);
|
|
15590
|
+
const targets = graph.out.get(top.id);
|
|
15591
|
+
if (top.next >= targets.length) {
|
|
15592
|
+
state.set(top.id, 2);
|
|
15593
|
+
stack.pop();
|
|
15594
|
+
continue;
|
|
15595
|
+
}
|
|
15596
|
+
const target = targets[top.next++];
|
|
15597
|
+
const mark = state.get(target);
|
|
15598
|
+
if (mark === 1) continue;
|
|
15599
|
+
forward.get(top.id).push(target);
|
|
15600
|
+
if (mark === void 0) {
|
|
15601
|
+
state.set(target, 1);
|
|
15602
|
+
stack.push({ id: target, next: 0 });
|
|
15603
|
+
}
|
|
15604
|
+
}
|
|
15605
|
+
};
|
|
15606
|
+
for (const root of roots(ids, graph)) if (!state.has(root)) visit(root);
|
|
15607
|
+
for (const id of ids) if (!state.has(id)) visit(id);
|
|
15608
|
+
return forward;
|
|
15609
|
+
}
|
|
15610
|
+
function layers(ids, forward, shortest) {
|
|
15611
|
+
const rank = /* @__PURE__ */ new Map();
|
|
15612
|
+
const incoming = new Map(ids.map((id) => [id, 0]));
|
|
15613
|
+
for (const targets of forward.values())
|
|
15614
|
+
for (const target of targets) incoming.set(target, incoming.get(target) + 1);
|
|
15615
|
+
const queue = ids.filter((id) => incoming.get(id) === 0);
|
|
15616
|
+
for (const id of queue) rank.set(id, 0);
|
|
15617
|
+
for (let index = 0; index < queue.length; index++) {
|
|
15618
|
+
const id = queue[index];
|
|
15619
|
+
for (const target of forward.get(id)) {
|
|
15620
|
+
const candidate = rank.get(id) + 1;
|
|
15621
|
+
if (shortest) {
|
|
15622
|
+
if (!rank.has(target)) rank.set(target, candidate);
|
|
15623
|
+
} else rank.set(target, Math.max(rank.get(target) ?? 0, candidate));
|
|
15624
|
+
incoming.set(target, incoming.get(target) - 1);
|
|
15625
|
+
if (incoming.get(target) === 0) queue.push(target);
|
|
15626
|
+
}
|
|
15627
|
+
}
|
|
15628
|
+
const result = [];
|
|
15629
|
+
for (const id of ids) {
|
|
15630
|
+
const level = rank.get(id) ?? 0;
|
|
15631
|
+
(result[level] ??= []).push(id);
|
|
15632
|
+
}
|
|
15633
|
+
return result.filter((layer) => layer.length);
|
|
15634
|
+
}
|
|
15635
|
+
function orderLayers(layered, graph) {
|
|
15636
|
+
const result = layered.map((layer) => [...layer]);
|
|
15637
|
+
const position = /* @__PURE__ */ new Map();
|
|
15638
|
+
const index = () => result.forEach((layer) => layer.forEach((id, at2) => position.set(id, at2)));
|
|
15639
|
+
index();
|
|
15640
|
+
for (let sweep = 0; sweep < 4; sweep++) {
|
|
15641
|
+
const down = sweep % 2 === 0;
|
|
15642
|
+
const range = down ? result.map((_, at2) => at2).slice(1) : result.map((_, at2) => at2).slice(0, -1).reverse();
|
|
15643
|
+
for (const at2 of range) {
|
|
15644
|
+
const neighbour = new Set(result[down ? at2 - 1 : at2 + 1]);
|
|
15645
|
+
const weight = (id) => {
|
|
15646
|
+
const linked = [...graph.out.get(id), ...graph.into.get(id)].filter(
|
|
15647
|
+
(other) => neighbour.has(other)
|
|
15648
|
+
);
|
|
15649
|
+
return linked.length ? linked.reduce((sum, other) => sum + position.get(other), 0) / linked.length : position.get(id);
|
|
15650
|
+
};
|
|
15651
|
+
const weights = new Map(result[at2].map((id) => [id, weight(id)]));
|
|
15652
|
+
result[at2].sort(
|
|
15653
|
+
(a, b) => weights.get(a) - weights.get(b) || position.get(a) - position.get(b)
|
|
15654
|
+
);
|
|
15655
|
+
index();
|
|
15656
|
+
}
|
|
15657
|
+
}
|
|
15658
|
+
return result;
|
|
15659
|
+
}
|
|
15660
|
+
function placeLayers(ordered, size, horizontal, spacing, layerSpacing) {
|
|
15661
|
+
const placed = [];
|
|
15662
|
+
const along = (node) => horizontal ? node.width : node.height;
|
|
15663
|
+
const across = (node) => horizontal ? node.height : node.width;
|
|
15664
|
+
let cursor = 0;
|
|
15665
|
+
for (const layer of ordered) {
|
|
15666
|
+
const nodes = layer.map((id) => size.get(id));
|
|
15667
|
+
const depth = Math.max(...nodes.map(along));
|
|
15668
|
+
const span = nodes.reduce((sum, node) => sum + across(node), 0) + spacing * (nodes.length - 1);
|
|
15669
|
+
let offset = -span / 2;
|
|
15670
|
+
for (const node of nodes) {
|
|
15671
|
+
const centre = offset + across(node) / 2;
|
|
15672
|
+
const primary = cursor + depth / 2;
|
|
15673
|
+
placed.push({
|
|
15674
|
+
id: node.id,
|
|
15675
|
+
x: horizontal ? primary : centre,
|
|
15676
|
+
y: horizontal ? centre : primary,
|
|
15677
|
+
width: node.width,
|
|
15678
|
+
height: node.height
|
|
15679
|
+
});
|
|
15680
|
+
offset += across(node) + spacing;
|
|
15681
|
+
}
|
|
15682
|
+
cursor += depth + layerSpacing;
|
|
15683
|
+
}
|
|
15684
|
+
return placed;
|
|
15685
|
+
}
|
|
15686
|
+
function placeCompactTree(ids, forward, graph, size, spacing, layerSpacing) {
|
|
15687
|
+
const placed = [];
|
|
15688
|
+
const seen = /* @__PURE__ */ new Set();
|
|
15689
|
+
const indent = Math.max(...ids.map((id) => size.get(id).width)) / 2 + layerSpacing / 2;
|
|
15690
|
+
let y = 0;
|
|
15691
|
+
const visit = (start) => {
|
|
15692
|
+
const stack = [{ id: start, depth: 0 }];
|
|
15693
|
+
while (stack.length) {
|
|
15694
|
+
const { id, depth } = stack.pop();
|
|
15695
|
+
if (seen.has(id)) continue;
|
|
15696
|
+
seen.add(id);
|
|
15697
|
+
const node = size.get(id);
|
|
15698
|
+
placed.push({
|
|
15699
|
+
id,
|
|
15700
|
+
x: depth * indent + node.width / 2,
|
|
15701
|
+
y: y + node.height / 2,
|
|
15702
|
+
width: node.width,
|
|
15703
|
+
height: node.height
|
|
15704
|
+
});
|
|
15705
|
+
y += node.height + spacing;
|
|
15706
|
+
const children = forward.get(id).filter((child) => !seen.has(child));
|
|
15707
|
+
for (const child of children.reverse()) stack.push({ id: child, depth: depth + 1 });
|
|
15708
|
+
}
|
|
15709
|
+
};
|
|
15710
|
+
for (const root of roots(ids, graph)) visit(root);
|
|
15711
|
+
for (const id of ids) visit(id);
|
|
15712
|
+
return placed;
|
|
15713
|
+
}
|
|
15714
|
+
function placeCircle(ids, forward, size, spacing) {
|
|
15715
|
+
const order = [];
|
|
15716
|
+
const seen = /* @__PURE__ */ new Set();
|
|
15717
|
+
for (const start of ids) {
|
|
15718
|
+
const stack = [start];
|
|
15719
|
+
while (stack.length) {
|
|
15720
|
+
const id = stack.pop();
|
|
15721
|
+
if (seen.has(id)) continue;
|
|
15722
|
+
seen.add(id);
|
|
15723
|
+
order.push(id);
|
|
15724
|
+
stack.push(...[...forward.get(id)].reverse());
|
|
15725
|
+
}
|
|
15726
|
+
}
|
|
15727
|
+
const extent = (id) => Math.hypot(size.get(id).width, size.get(id).height);
|
|
15728
|
+
const circumference = order.reduce((sum, id) => sum + extent(id) + spacing, 0);
|
|
15729
|
+
const radius = Math.max(circumference / (2 * Math.PI), Math.max(...order.map(extent)));
|
|
15730
|
+
return order.map((id, index) => {
|
|
15731
|
+
const angle = -Math.PI / 2 + 2 * Math.PI * index / order.length;
|
|
15732
|
+
const node = size.get(id);
|
|
15733
|
+
return {
|
|
15734
|
+
id,
|
|
15735
|
+
x: radius * Math.cos(angle),
|
|
15736
|
+
y: radius * Math.sin(angle),
|
|
15737
|
+
width: node.width,
|
|
15738
|
+
height: node.height
|
|
15739
|
+
};
|
|
15740
|
+
});
|
|
15741
|
+
}
|
|
15742
|
+
function bounds(placed) {
|
|
15743
|
+
const left = Math.min(...placed.map((box) => box.x - box.width / 2));
|
|
15744
|
+
const top = Math.min(...placed.map((box) => box.y - box.height / 2));
|
|
15745
|
+
const right = Math.max(...placed.map((box) => box.x + box.width / 2));
|
|
15746
|
+
const bottom = Math.max(...placed.map((box) => box.y + box.height / 2));
|
|
15747
|
+
return { left, top, width: right - left, height: bottom - top };
|
|
15748
|
+
}
|
|
15749
|
+
function placeGrid(ids, size, spacing) {
|
|
15750
|
+
const columns = Math.ceil(Math.sqrt(ids.length));
|
|
15751
|
+
const cellWidth = Math.max(...ids.map((id) => size.get(id).width));
|
|
15752
|
+
const cellHeight = Math.max(...ids.map((id) => size.get(id).height));
|
|
15753
|
+
return ids.map((id, index) => ({
|
|
15754
|
+
id,
|
|
15755
|
+
x: index % columns * (cellWidth + spacing) + cellWidth / 2,
|
|
15756
|
+
y: Math.floor(index / columns) * (cellHeight + spacing) + cellHeight / 2,
|
|
15757
|
+
width: size.get(id).width,
|
|
15758
|
+
height: size.get(id).height
|
|
15759
|
+
}));
|
|
15760
|
+
}
|
|
15761
|
+
function layoutGraph(nodes, edges, style, options = {}) {
|
|
15762
|
+
if (!GRAPH_LAYOUT_STYLES.includes(style)) throw new Error("Unknown graph layout style.");
|
|
15763
|
+
const spacing = options.spacing ?? 0.5;
|
|
15764
|
+
const layerSpacing = options.layerSpacing ?? spacing;
|
|
15765
|
+
if (![spacing, layerSpacing].every((value) => Number.isFinite(value) && value >= 0))
|
|
15766
|
+
throw new Error("Layout spacing must be finite and not negative.");
|
|
15767
|
+
const size = /* @__PURE__ */ new Map();
|
|
15768
|
+
for (const node of nodes) {
|
|
15769
|
+
if (size.has(node.id)) throw new Error("Layout node IDs must be unique.");
|
|
15770
|
+
if (![node.width, node.height].every((value) => Number.isFinite(value) && value >= 0))
|
|
15771
|
+
throw new Error("Layout node sizes must be finite and not negative.");
|
|
15772
|
+
size.set(node.id, node);
|
|
15773
|
+
}
|
|
15774
|
+
const graph = {
|
|
15775
|
+
nodes,
|
|
15776
|
+
out: new Map(nodes.map((node) => [node.id, []])),
|
|
15777
|
+
into: new Map(nodes.map((node) => [node.id, []]))
|
|
15778
|
+
};
|
|
15779
|
+
for (const edge of edges) {
|
|
15780
|
+
if (!size.has(edge.from) || !size.has(edge.to) || edge.from === edge.to) continue;
|
|
15781
|
+
if (graph.out.get(edge.from).includes(edge.to)) continue;
|
|
15782
|
+
graph.out.get(edge.from).push(edge.to);
|
|
15783
|
+
graph.into.get(edge.to).push(edge.from);
|
|
15784
|
+
}
|
|
15785
|
+
const { connected, isolated } = components(graph);
|
|
15786
|
+
const horizontal = style === "flowchart-lr";
|
|
15787
|
+
const blocks = connected.map((ids) => {
|
|
15788
|
+
const forward = forwardEdges(ids, graph);
|
|
15789
|
+
if (style === "circular") return placeCircle(ids, forward, size, spacing);
|
|
15790
|
+
if (style === "compact-tree")
|
|
15791
|
+
return placeCompactTree(ids, forward, graph, size, spacing, layerSpacing);
|
|
15792
|
+
const ordered = orderLayers(layers(ids, forward, style === "hierarchy"), graph);
|
|
15793
|
+
return placeLayers(ordered, size, horizontal, spacing, layerSpacing);
|
|
15794
|
+
});
|
|
15795
|
+
const result = /* @__PURE__ */ new Map();
|
|
15796
|
+
let cursor = 0;
|
|
15797
|
+
let extent = 0;
|
|
15798
|
+
for (const block of blocks) {
|
|
15799
|
+
const box = bounds(block);
|
|
15800
|
+
for (const item of block)
|
|
15801
|
+
result.set(item.id, {
|
|
15802
|
+
x: item.x - box.left + (horizontal ? 0 : cursor),
|
|
15803
|
+
y: item.y - box.top + (horizontal ? cursor : 0)
|
|
15804
|
+
});
|
|
15805
|
+
cursor += (horizontal ? box.height : box.width) + spacing * 2;
|
|
15806
|
+
extent = Math.max(extent, horizontal ? box.width : box.height);
|
|
15807
|
+
}
|
|
15808
|
+
if (isolated.length) {
|
|
15809
|
+
const grid = placeGrid(isolated, size, spacing);
|
|
15810
|
+
const offset = blocks.length ? extent + layerSpacing * 2 : 0;
|
|
15811
|
+
for (const item of grid)
|
|
15812
|
+
result.set(item.id, {
|
|
15813
|
+
x: item.x + (horizontal ? offset : 0),
|
|
15814
|
+
y: item.y + (horizontal ? 0 : offset)
|
|
15815
|
+
});
|
|
15816
|
+
}
|
|
15817
|
+
return result;
|
|
15818
|
+
}
|
|
15819
|
+
|
|
15820
|
+
// geometry/auto-align.ts
|
|
15821
|
+
var median = (values) => {
|
|
15822
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
15823
|
+
const middle = Math.floor(sorted.length / 2);
|
|
15824
|
+
return sorted.length % 2 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
|
|
15825
|
+
};
|
|
15826
|
+
function clusters(boxes, centre, tolerance) {
|
|
15827
|
+
const sorted = [...boxes].sort((a, b) => centre(a) - centre(b));
|
|
15828
|
+
const result = [];
|
|
15829
|
+
let mean = 0;
|
|
15830
|
+
for (const box of sorted) {
|
|
15831
|
+
const current = result.at(-1);
|
|
15832
|
+
if (current && Math.abs(centre(box) - mean) <= tolerance) {
|
|
15833
|
+
current.push(box);
|
|
15834
|
+
mean += (centre(box) - mean) / current.length;
|
|
15835
|
+
} else {
|
|
15836
|
+
result.push([box]);
|
|
15837
|
+
mean = centre(box);
|
|
15838
|
+
}
|
|
15839
|
+
}
|
|
15840
|
+
return result;
|
|
15841
|
+
}
|
|
15842
|
+
function space(groups, start, size, minimumGap) {
|
|
15843
|
+
const extents = groups.map((group) => {
|
|
15844
|
+
const centre = group.reduce((sum, box) => sum + start(box) + size(box) / 2, 0) / group.length;
|
|
15845
|
+
const half = Math.max(...group.map((box) => size(box) / 2));
|
|
15846
|
+
return { centre, half };
|
|
15847
|
+
});
|
|
15848
|
+
const gaps = extents.slice(1).map(
|
|
15849
|
+
(extent, index) => extent.centre - extent.half - extents[index].centre - extents[index].half
|
|
15850
|
+
);
|
|
15851
|
+
const gap = Math.max(
|
|
15852
|
+
minimumGap,
|
|
15853
|
+
gaps.length ? gaps.reduce((sum, value) => sum + value, 0) / gaps.length : 0
|
|
15854
|
+
);
|
|
15855
|
+
const result = /* @__PURE__ */ new Map();
|
|
15856
|
+
let cursor = extents[0] ? extents[0].centre - extents[0].half : 0;
|
|
15857
|
+
groups.forEach((group, index) => {
|
|
15858
|
+
const { half } = extents[index];
|
|
15859
|
+
for (const box of group) result.set(box.id, cursor + half);
|
|
15860
|
+
cursor += half * 2 + gap;
|
|
15861
|
+
});
|
|
15862
|
+
return result;
|
|
15863
|
+
}
|
|
15864
|
+
function autoAlignBoxes(boxes, options = {}) {
|
|
15865
|
+
if (new Set(boxes.map((box) => box.id)).size !== boxes.length)
|
|
15866
|
+
throw new Error("Auto align box IDs must be unique.");
|
|
15867
|
+
if (!boxes.every(
|
|
15868
|
+
(box) => [box.x, box.y, box.width, box.height].every((value) => Number.isFinite(value))
|
|
15869
|
+
))
|
|
15870
|
+
throw new Error("Auto align boxes must be finite.");
|
|
15871
|
+
const result = /* @__PURE__ */ new Map();
|
|
15872
|
+
if (!boxes.length) return result;
|
|
15873
|
+
const toleranceX = options.tolerance?.x ?? median(boxes.map((box) => box.width)) / 2;
|
|
15874
|
+
const toleranceY = options.tolerance?.y ?? median(boxes.map((box) => box.height)) / 2;
|
|
15875
|
+
const minimumGap = options.minimumGap ?? 0;
|
|
15876
|
+
const rows = clusters(boxes, (box) => box.y + box.height / 2, toleranceY);
|
|
15877
|
+
const columns = clusters(boxes, (box) => box.x + box.width / 2, toleranceX);
|
|
15878
|
+
const ys = space(
|
|
15879
|
+
rows,
|
|
15880
|
+
(box) => box.y,
|
|
15881
|
+
(box) => box.height,
|
|
15882
|
+
minimumGap
|
|
15883
|
+
);
|
|
15884
|
+
const xs = space(
|
|
15885
|
+
columns,
|
|
15886
|
+
(box) => box.x,
|
|
15887
|
+
(box) => box.width,
|
|
15888
|
+
minimumGap
|
|
15889
|
+
);
|
|
15890
|
+
for (const box of boxes)
|
|
15891
|
+
result.set(box.id, { x: xs.get(box.id) - box.width / 2, y: ys.get(box.id) - box.height / 2 });
|
|
15892
|
+
return result;
|
|
15893
|
+
}
|
|
15894
|
+
|
|
15544
15895
|
exports.ACTION_BUTTON_CONNECTION_SITES = ACTION_BUTTON_CONNECTION_SITES;
|
|
15545
15896
|
exports.ACTION_BUTTON_PRESET_DEFINITIONS = ACTION_BUTTON_PRESET_DEFINITIONS;
|
|
15546
15897
|
exports.ACTION_BUTTON_TEXT_RECTS = ACTION_BUTTON_TEXT_RECTS;
|
|
@@ -15576,6 +15927,7 @@ exports.FLOWCHART_CONNECTION_SITES = FLOWCHART_CONNECTION_SITES;
|
|
|
15576
15927
|
exports.FLOWCHART_PRESET_DEFINITIONS = FLOWCHART_PRESET_DEFINITIONS;
|
|
15577
15928
|
exports.FLOWCHART_TEXT_RECTS = FLOWCHART_TEXT_RECTS;
|
|
15578
15929
|
exports.GEAR9_CONNECTION_SITES = GEAR9_CONNECTION_SITES;
|
|
15930
|
+
exports.GRAPH_LAYOUT_STYLES = GRAPH_LAYOUT_STYLES;
|
|
15579
15931
|
exports.IDENTITY_AFFINE = IDENTITY_AFFINE;
|
|
15580
15932
|
exports.LEFT_CIRCULAR_ARROW_CONNECTION_SITES = LEFT_CIRCULAR_ARROW_CONNECTION_SITES;
|
|
15581
15933
|
exports.LEFT_RIGHT_CIRCULAR_ARROW_CONNECTION_SITES = LEFT_RIGHT_CIRCULAR_ARROW_CONNECTION_SITES;
|
|
@@ -15612,6 +15964,7 @@ exports._internalForTests = _internalForTests;
|
|
|
15612
15964
|
exports.alignElements = alignElements;
|
|
15613
15965
|
exports.angleToRadians = angleToRadians;
|
|
15614
15966
|
exports.at = at;
|
|
15967
|
+
exports.autoAlignBoxes = autoAlignBoxes;
|
|
15615
15968
|
exports.buildCalloutLeaderLineSvgPath = buildCalloutLeaderLineSvgPath;
|
|
15616
15969
|
exports.clipPolygons = clipPolygons;
|
|
15617
15970
|
exports.combineShapes = combineShapes;
|
|
@@ -15661,6 +16014,7 @@ exports.isCalloutShape = isCalloutShape;
|
|
|
15661
16014
|
exports.isConvex = isConvex;
|
|
15662
16015
|
exports.isHorizontalPrimaryAxis = isHorizontalPrimaryAxis;
|
|
15663
16016
|
exports.isStShapeType = isStShapeType;
|
|
16017
|
+
exports.layoutGraph = layoutGraph;
|
|
15664
16018
|
exports.lineIntersection = lineIntersection;
|
|
15665
16019
|
exports.lookupPresetConnectionSites = lookupPresetConnectionSites;
|
|
15666
16020
|
exports.lookupPresetTextRectOverride = lookupPresetTextRectOverride;
|