ducjs 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/flatbuffers/duc/alternate-units.d.ts +21 -0
- package/dist/flatbuffers/duc/alternate-units.js +66 -0
- package/dist/flatbuffers/duc/angular-unit-system.d.ts +17 -0
- package/dist/flatbuffers/duc/angular-unit-system.js +50 -0
- package/dist/flatbuffers/duc/angular-units-format.d.ts +7 -0
- package/dist/flatbuffers/duc/angular-units-format.js +10 -0
- package/dist/flatbuffers/duc/axis.d.ts +5 -0
- package/dist/flatbuffers/duc/axis.js +8 -0
- package/dist/flatbuffers/duc/bezier-mirroring.d.ts +5 -0
- package/dist/flatbuffers/duc/bezier-mirroring.js +8 -0
- package/dist/flatbuffers/duc/blending.d.ts +9 -0
- package/dist/flatbuffers/duc/blending.js +12 -0
- package/dist/flatbuffers/duc/block-attachment.d.ts +4 -0
- package/dist/flatbuffers/duc/block-attachment.js +7 -0
- package/dist/flatbuffers/duc/boolean-operation.d.ts +6 -0
- package/dist/flatbuffers/duc/boolean-operation.js +9 -0
- package/dist/flatbuffers/duc/bound-element.d.ts +17 -0
- package/dist/flatbuffers/duc/bound-element.js +48 -0
- package/dist/flatbuffers/duc/checkpoint.d.ts +22 -0
- package/dist/flatbuffers/duc/checkpoint.js +75 -0
- package/dist/flatbuffers/duc/column-layout.d.ts +22 -0
- package/dist/flatbuffers/duc/column-layout.js +72 -0
- package/dist/flatbuffers/duc/column-type.d.ts +5 -0
- package/dist/flatbuffers/duc/column-type.js +8 -0
- package/dist/flatbuffers/duc/custom-hatch-pattern.d.ts +23 -0
- package/dist/flatbuffers/duc/custom-hatch-pattern.js +71 -0
- package/dist/flatbuffers/duc/datum-bracket-style.d.ts +5 -0
- package/dist/flatbuffers/duc/datum-bracket-style.js +8 -0
- package/dist/flatbuffers/duc/datum-reference.d.ts +17 -0
- package/dist/flatbuffers/duc/datum-reference.js +49 -0
- package/dist/flatbuffers/duc/datum-target-type.d.ts +6 -0
- package/dist/flatbuffers/duc/datum-target-type.js +9 -0
- package/dist/flatbuffers/duc/decimal-separator.d.ts +4 -0
- package/dist/flatbuffers/duc/decimal-separator.js +7 -0
- package/dist/flatbuffers/duc/delta.d.ts +20 -0
- package/dist/flatbuffers/duc/delta.js +64 -0
- package/dist/flatbuffers/duc/dictionary-entry.d.ts +17 -0
- package/dist/flatbuffers/duc/dictionary-entry.js +49 -0
- package/dist/flatbuffers/duc/dimension-baseline-data.d.ts +14 -0
- package/dist/flatbuffers/duc/dimension-baseline-data.js +40 -0
- package/dist/flatbuffers/duc/dimension-bindings.d.ts +17 -0
- package/dist/flatbuffers/duc/dimension-bindings.js +50 -0
- package/dist/flatbuffers/duc/dimension-continue-data.d.ts +14 -0
- package/dist/flatbuffers/duc/dimension-continue-data.js +40 -0
- package/dist/flatbuffers/duc/dimension-definition-points.d.ts +21 -0
- package/dist/flatbuffers/duc/dimension-definition-points.js +64 -0
- package/dist/flatbuffers/duc/dimension-ext-line-style.d.ts +18 -0
- package/dist/flatbuffers/duc/dimension-ext-line-style.js +57 -0
- package/dist/flatbuffers/duc/dimension-fit-rule.d.ts +6 -0
- package/dist/flatbuffers/duc/dimension-fit-rule.js +9 -0
- package/dist/flatbuffers/duc/dimension-fit-style.d.ts +19 -0
- package/dist/flatbuffers/duc/dimension-fit-style.js +58 -0
- package/dist/flatbuffers/duc/dimension-line-style.d.ts +16 -0
- package/dist/flatbuffers/duc/dimension-line-style.js +49 -0
- package/dist/flatbuffers/duc/dimension-symbol-style.d.ts +22 -0
- package/dist/flatbuffers/duc/dimension-symbol-style.js +72 -0
- package/dist/flatbuffers/duc/dimension-text-placement.d.ts +5 -0
- package/dist/flatbuffers/duc/dimension-text-placement.js +8 -0
- package/dist/flatbuffers/duc/dimension-tolerance-style.d.ts +24 -0
- package/dist/flatbuffers/duc/dimension-tolerance-style.js +71 -0
- package/dist/flatbuffers/duc/dimension-type.d.ts +15 -0
- package/dist/flatbuffers/duc/dimension-type.js +18 -0
- package/dist/flatbuffers/duc/dimension-units-format.d.ts +7 -0
- package/dist/flatbuffers/duc/dimension-units-format.js +10 -0
- package/dist/flatbuffers/duc/dimension-validation-rules.d.ts +25 -0
- package/dist/flatbuffers/duc/dimension-validation-rules.js +74 -0
- package/dist/flatbuffers/duc/duc-arrow-element.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-arrow-element.js +49 -0
- package/dist/flatbuffers/duc/duc-block-attribute-definition-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-block-attribute-definition-entry.js +44 -0
- package/dist/flatbuffers/duc/duc-block-attribute-definition.d.ts +22 -0
- package/dist/flatbuffers/duc/duc-block-attribute-definition.js +64 -0
- package/dist/flatbuffers/duc/duc-block-duplication-array.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-block-duplication-array.js +64 -0
- package/dist/flatbuffers/duc/duc-block-instance-element.d.ts +30 -0
- package/dist/flatbuffers/duc/duc-block-instance-element.js +94 -0
- package/dist/flatbuffers/duc/duc-block.d.ts +34 -0
- package/dist/flatbuffers/duc/duc-block.js +111 -0
- package/dist/flatbuffers/duc/duc-common-style.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-common-style.js +44 -0
- package/dist/flatbuffers/duc/duc-dimension-element.d.ts +45 -0
- package/dist/flatbuffers/duc/duc-dimension-element.js +120 -0
- package/dist/flatbuffers/duc/duc-dimension-style.d.ts +28 -0
- package/dist/flatbuffers/duc/duc-dimension-style.js +76 -0
- package/dist/flatbuffers/duc/duc-doc-element.d.ts +33 -0
- package/dist/flatbuffers/duc/duc-doc-element.js +95 -0
- package/dist/flatbuffers/duc/duc-doc-style.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-doc-style.js +52 -0
- package/dist/flatbuffers/duc/duc-element-base.d.ts +88 -0
- package/dist/flatbuffers/duc/duc-element-base.js +269 -0
- package/dist/flatbuffers/duc/duc-element-styles-base.d.ts +30 -0
- package/dist/flatbuffers/duc/duc-element-styles-base.js +103 -0
- package/dist/flatbuffers/duc/duc-ellipse-element.d.ts +22 -0
- package/dist/flatbuffers/duc/duc-ellipse-element.js +73 -0
- package/dist/flatbuffers/duc/duc-embeddable-element.d.ts +14 -0
- package/dist/flatbuffers/duc/duc-embeddable-element.js +41 -0
- package/dist/flatbuffers/duc/duc-external-file-data.d.ts +27 -0
- package/dist/flatbuffers/duc/duc-external-file-data.js +92 -0
- package/dist/flatbuffers/duc/duc-external-file-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-external-file-entry.js +44 -0
- package/dist/flatbuffers/duc/duc-feature-control-frame-element.d.ts +31 -0
- package/dist/flatbuffers/duc/duc-feature-control-frame-element.js +89 -0
- package/dist/flatbuffers/duc/duc-feature-control-frame-style.d.ts +25 -0
- package/dist/flatbuffers/duc/duc-feature-control-frame-style.js +68 -0
- package/dist/flatbuffers/duc/duc-frame-element.d.ts +14 -0
- package/dist/flatbuffers/duc/duc-frame-element.js +41 -0
- package/dist/flatbuffers/duc/duc-free-draw-element.d.ts +52 -0
- package/dist/flatbuffers/duc/duc-free-draw-element.js +154 -0
- package/dist/flatbuffers/duc/duc-free-draw-ends.d.ts +18 -0
- package/dist/flatbuffers/duc/duc-free-draw-ends.js +56 -0
- package/dist/flatbuffers/duc/duc-global-state.d.ts +37 -0
- package/dist/flatbuffers/duc/duc-global-state.js +121 -0
- package/dist/flatbuffers/duc/duc-group.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-group.js +44 -0
- package/dist/flatbuffers/duc/duc-hatch-style.d.ts +28 -0
- package/dist/flatbuffers/duc/duc-hatch-style.js +79 -0
- package/dist/flatbuffers/duc/duc-head.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-head.js +57 -0
- package/dist/flatbuffers/duc/duc-image-element.d.ts +35 -0
- package/dist/flatbuffers/duc/duc-image-element.js +91 -0
- package/dist/flatbuffers/duc/duc-image-filter.d.ts +15 -0
- package/dist/flatbuffers/duc/duc-image-filter.js +48 -0
- package/dist/flatbuffers/duc/duc-layer-overrides.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-layer-overrides.js +44 -0
- package/dist/flatbuffers/duc/duc-layer.d.ts +21 -0
- package/dist/flatbuffers/duc/duc-layer.js +59 -0
- package/dist/flatbuffers/duc/duc-leader-element.d.ts +22 -0
- package/dist/flatbuffers/duc/duc-leader-element.js +60 -0
- package/dist/flatbuffers/duc/duc-leader-style.d.ts +30 -0
- package/dist/flatbuffers/duc/duc-leader-style.js +87 -0
- package/dist/flatbuffers/duc/duc-line-reference.d.ts +15 -0
- package/dist/flatbuffers/duc/duc-line-reference.js +43 -0
- package/dist/flatbuffers/duc/duc-line.d.ts +15 -0
- package/dist/flatbuffers/duc/duc-line.js +43 -0
- package/dist/flatbuffers/duc/duc-linear-element-base.d.ts +38 -0
- package/dist/flatbuffers/duc/duc-linear-element-base.js +124 -0
- package/dist/flatbuffers/duc/duc-linear-element.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-linear-element.js +49 -0
- package/dist/flatbuffers/duc/duc-local-state.d.ts +68 -0
- package/dist/flatbuffers/duc/duc-local-state.js +206 -0
- package/dist/flatbuffers/duc/duc-mermaid-element.d.ts +23 -0
- package/dist/flatbuffers/duc/duc-mermaid-element.js +65 -0
- package/dist/flatbuffers/duc/duc-parametric-element.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-parametric-element.js +44 -0
- package/dist/flatbuffers/duc/duc-path.d.ts +26 -0
- package/dist/flatbuffers/duc/duc-path.js +69 -0
- package/dist/flatbuffers/duc/duc-pdf-element.d.ts +17 -0
- package/dist/flatbuffers/duc/duc-pdf-element.js +49 -0
- package/dist/flatbuffers/duc/duc-plot-element.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-plot-element.js +52 -0
- package/dist/flatbuffers/duc/duc-plot-style.d.ts +14 -0
- package/dist/flatbuffers/duc/duc-plot-style.js +41 -0
- package/dist/flatbuffers/duc/duc-point-binding.d.ts +26 -0
- package/dist/flatbuffers/duc/duc-point-binding.js +73 -0
- package/dist/flatbuffers/duc/duc-point.d.ts +18 -0
- package/dist/flatbuffers/duc/duc-point.js +57 -0
- package/dist/flatbuffers/duc/duc-polygon-element.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-polygon-element.js +49 -0
- package/dist/flatbuffers/duc/duc-rectangle-element.d.ts +14 -0
- package/dist/flatbuffers/duc/duc-rectangle-element.js +41 -0
- package/dist/flatbuffers/duc/duc-region.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-region.js +51 -0
- package/dist/flatbuffers/duc/duc-stack-base.d.ts +27 -0
- package/dist/flatbuffers/duc/duc-stack-base.js +78 -0
- package/dist/flatbuffers/duc/duc-stack-element-base.d.ts +23 -0
- package/dist/flatbuffers/duc/duc-stack-element-base.js +65 -0
- package/dist/flatbuffers/duc/duc-stack-like-styles.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-stack-like-styles.js +48 -0
- package/dist/flatbuffers/duc/duc-table-auto-size.d.ts +15 -0
- package/dist/flatbuffers/duc/duc-table-auto-size.js +48 -0
- package/dist/flatbuffers/duc/duc-table-cell-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-table-cell-entry.js +44 -0
- package/dist/flatbuffers/duc/duc-table-cell-span.d.ts +15 -0
- package/dist/flatbuffers/duc/duc-table-cell-span.js +48 -0
- package/dist/flatbuffers/duc/duc-table-cell-style.d.ts +22 -0
- package/dist/flatbuffers/duc/duc-table-cell-style.js +59 -0
- package/dist/flatbuffers/duc/duc-table-cell.d.ts +27 -0
- package/dist/flatbuffers/duc/duc-table-cell.js +72 -0
- package/dist/flatbuffers/duc/duc-table-column-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-table-column-entry.js +44 -0
- package/dist/flatbuffers/duc/duc-table-column.d.ts +18 -0
- package/dist/flatbuffers/duc/duc-table-column.js +51 -0
- package/dist/flatbuffers/duc/duc-table-element.d.ts +51 -0
- package/dist/flatbuffers/duc/duc-table-element.js +167 -0
- package/dist/flatbuffers/duc/duc-table-row-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-table-row-entry.js +44 -0
- package/dist/flatbuffers/duc/duc-table-row.d.ts +18 -0
- package/dist/flatbuffers/duc/duc-table-row.js +51 -0
- package/dist/flatbuffers/duc/duc-table-style.d.ts +23 -0
- package/dist/flatbuffers/duc/duc-table-style.js +65 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-dictionary-source.d.ts +14 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-dictionary-source.js +40 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-element-source.d.ts +17 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-element-source.js +49 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-part.d.ts +22 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-part.js +58 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-source-data.d.ts +9 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-source-data.js +26 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-source.d.ts +19 -0
- package/dist/flatbuffers/duc/duc-text-dynamic-source.js +58 -0
- package/dist/flatbuffers/duc/duc-text-element.d.ts +33 -0
- package/dist/flatbuffers/duc/duc-text-element.js +94 -0
- package/dist/flatbuffers/duc/duc-text-style.d.ts +44 -0
- package/dist/flatbuffers/duc/duc-text-style.js +128 -0
- package/dist/flatbuffers/duc/duc-ucs.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-ucs.js +49 -0
- package/dist/flatbuffers/duc/duc-view.d.ts +24 -0
- package/dist/flatbuffers/duc/duc-view.js +71 -0
- package/dist/flatbuffers/duc/duc-viewport-element.d.ts +36 -0
- package/dist/flatbuffers/duc/duc-viewport-element.js +102 -0
- package/dist/flatbuffers/duc/duc-viewport-style.d.ts +16 -0
- package/dist/flatbuffers/duc/duc-viewport-style.js +49 -0
- package/dist/flatbuffers/duc/duc-xray-element.d.ts +23 -0
- package/dist/flatbuffers/duc/duc-xray-element.js +66 -0
- package/dist/flatbuffers/duc/duc-xray-style.d.ts +17 -0
- package/dist/flatbuffers/duc/duc-xray-style.js +49 -0
- package/dist/flatbuffers/duc/dynamic-snap-settings.d.ts +17 -0
- package/dist/flatbuffers/duc/dynamic-snap-settings.js +56 -0
- package/dist/flatbuffers/duc/element-background.d.ts +14 -0
- package/dist/flatbuffers/duc/element-background.js +41 -0
- package/dist/flatbuffers/duc/element-content-base.d.ts +29 -0
- package/dist/flatbuffers/duc/element-content-base.js +80 -0
- package/dist/flatbuffers/duc/element-content-preference.d.ts +8 -0
- package/dist/flatbuffers/duc/element-content-preference.js +11 -0
- package/dist/flatbuffers/duc/element-stroke.d.ts +24 -0
- package/dist/flatbuffers/duc/element-stroke.js +66 -0
- package/dist/flatbuffers/duc/element-wrapper.d.ts +16 -0
- package/dist/flatbuffers/duc/element-wrapper.js +49 -0
- package/dist/flatbuffers/duc/element.d.ts +49 -0
- package/dist/flatbuffers/duc/element.js +106 -0
- package/dist/flatbuffers/duc/exported-data-state.d.ts +87 -0
- package/dist/flatbuffers/duc/exported-data-state.js +290 -0
- package/dist/flatbuffers/duc/fcfbetween-modifier.d.ts +17 -0
- package/dist/flatbuffers/duc/fcfbetween-modifier.js +48 -0
- package/dist/flatbuffers/duc/fcfdatum-definition.d.ts +16 -0
- package/dist/flatbuffers/duc/fcfdatum-definition.js +43 -0
- package/dist/flatbuffers/duc/fcfdatum-style.d.ts +14 -0
- package/dist/flatbuffers/duc/fcfdatum-style.js +41 -0
- package/dist/flatbuffers/duc/fcfframe-modifiers.d.ts +22 -0
- package/dist/flatbuffers/duc/fcfframe-modifiers.js +65 -0
- package/dist/flatbuffers/duc/fcflayout-style.d.ts +17 -0
- package/dist/flatbuffers/duc/fcflayout-style.js +56 -0
- package/dist/flatbuffers/duc/fcfprojected-zone-modifier.d.ts +13 -0
- package/dist/flatbuffers/duc/fcfprojected-zone-modifier.js +40 -0
- package/dist/flatbuffers/duc/fcfsegment-row.d.ts +17 -0
- package/dist/flatbuffers/duc/fcfsegment-row.js +55 -0
- package/dist/flatbuffers/duc/fcfsymbol-style.d.ts +13 -0
- package/dist/flatbuffers/duc/fcfsymbol-style.js +40 -0
- package/dist/flatbuffers/duc/feature-control-frame-segment.d.ts +22 -0
- package/dist/flatbuffers/duc/feature-control-frame-segment.js +65 -0
- package/dist/flatbuffers/duc/feature-modifier.d.ts +18 -0
- package/dist/flatbuffers/duc/feature-modifier.js +21 -0
- package/dist/flatbuffers/duc/gdt-symbol.d.ts +22 -0
- package/dist/flatbuffers/duc/gdt-symbol.js +25 -0
- package/dist/flatbuffers/duc/geometric-point.d.ts +10 -0
- package/dist/flatbuffers/duc/geometric-point.js +27 -0
- package/dist/flatbuffers/duc/grid-display-type.d.ts +6 -0
- package/dist/flatbuffers/duc/grid-display-type.js +9 -0
- package/dist/flatbuffers/duc/grid-settings.d.ts +54 -0
- package/dist/flatbuffers/duc/grid-settings.js +165 -0
- package/dist/flatbuffers/duc/grid-style.d.ts +26 -0
- package/dist/flatbuffers/duc/grid-style.js +74 -0
- package/dist/flatbuffers/duc/grid-type.d.ts +7 -0
- package/dist/flatbuffers/duc/grid-type.js +10 -0
- package/dist/flatbuffers/duc/handle-type.d.ts +4 -0
- package/dist/flatbuffers/duc/handle-type.js +7 -0
- package/dist/flatbuffers/duc/hatch-pattern-line.d.ts +35 -0
- package/dist/flatbuffers/duc/hatch-pattern-line.js +93 -0
- package/dist/flatbuffers/duc/hatch-style.d.ts +5 -0
- package/dist/flatbuffers/duc/hatch-style.js +8 -0
- package/dist/flatbuffers/duc/identified-common-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-common-style.js +44 -0
- package/dist/flatbuffers/duc/identified-dimension-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-dimension-style.js +44 -0
- package/dist/flatbuffers/duc/identified-doc-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-doc-style.js +44 -0
- package/dist/flatbuffers/duc/identified-fcfstyle.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-fcfstyle.js +44 -0
- package/dist/flatbuffers/duc/identified-grid-settings.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-grid-settings.js +44 -0
- package/dist/flatbuffers/duc/identified-hatch-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-hatch-style.js +44 -0
- package/dist/flatbuffers/duc/identified-leader-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-leader-style.js +44 -0
- package/dist/flatbuffers/duc/identified-snap-settings.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-snap-settings.js +44 -0
- package/dist/flatbuffers/duc/identified-stack-like-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-stack-like-style.js +44 -0
- package/dist/flatbuffers/duc/identified-table-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-table-style.js +44 -0
- package/dist/flatbuffers/duc/identified-text-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-text-style.js +44 -0
- package/dist/flatbuffers/duc/identified-ucs.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-ucs.js +44 -0
- package/dist/flatbuffers/duc/identified-view.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-view.js +44 -0
- package/dist/flatbuffers/duc/identified-viewport-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-viewport-style.js +44 -0
- package/dist/flatbuffers/duc/identified-xray-style.d.ts +16 -0
- package/dist/flatbuffers/duc/identified-xray-style.js +44 -0
- package/dist/flatbuffers/duc/identifier.d.ts +20 -0
- package/dist/flatbuffers/duc/identifier.js +57 -0
- package/dist/flatbuffers/duc/image-crop.d.ts +23 -0
- package/dist/flatbuffers/duc/image-crop.js +80 -0
- package/dist/flatbuffers/duc/image-status.d.ts +5 -0
- package/dist/flatbuffers/duc/image-status.js +8 -0
- package/dist/flatbuffers/duc/isometric-grid-settings.d.ts +15 -0
- package/dist/flatbuffers/duc/isometric-grid-settings.js +48 -0
- package/dist/flatbuffers/duc/jsonpatch-operation.d.ts +23 -0
- package/dist/flatbuffers/duc/jsonpatch-operation.js +64 -0
- package/dist/flatbuffers/duc/layer-snap-filters.d.ts +23 -0
- package/dist/flatbuffers/duc/layer-snap-filters.js +76 -0
- package/dist/flatbuffers/duc/layer-validation-rules.d.ts +17 -0
- package/dist/flatbuffers/duc/layer-validation-rules.js +54 -0
- package/dist/flatbuffers/duc/leader-block-content.d.ts +25 -0
- package/dist/flatbuffers/duc/leader-block-content.js +85 -0
- package/dist/flatbuffers/duc/leader-content-data.d.ts +9 -0
- package/dist/flatbuffers/duc/leader-content-data.js +26 -0
- package/dist/flatbuffers/duc/leader-content-type.d.ts +4 -0
- package/dist/flatbuffers/duc/leader-content-type.js +7 -0
- package/dist/flatbuffers/duc/leader-content.d.ts +19 -0
- package/dist/flatbuffers/duc/leader-content.js +58 -0
- package/dist/flatbuffers/duc/leader-text-block-content.d.ts +14 -0
- package/dist/flatbuffers/duc/leader-text-block-content.js +40 -0
- package/dist/flatbuffers/duc/line-head.d.ts +17 -0
- package/dist/flatbuffers/duc/line-head.js +20 -0
- package/dist/flatbuffers/duc/line-spacing-type.d.ts +5 -0
- package/dist/flatbuffers/duc/line-spacing-type.js +8 -0
- package/dist/flatbuffers/duc/line-spacing.d.ts +16 -0
- package/dist/flatbuffers/duc/line-spacing.js +49 -0
- package/dist/flatbuffers/duc/linear-unit-system.d.ts +24 -0
- package/dist/flatbuffers/duc/linear-unit-system.js +75 -0
- package/dist/flatbuffers/duc/margins.d.ts +19 -0
- package/dist/flatbuffers/duc/margins.js +64 -0
- package/dist/flatbuffers/duc/mark-ellipse-center.d.ts +4 -0
- package/dist/flatbuffers/duc/mark-ellipse-center.js +7 -0
- package/dist/flatbuffers/duc/material-condition.d.ts +5 -0
- package/dist/flatbuffers/duc/material-condition.js +8 -0
- package/dist/flatbuffers/duc/object-snap-mode.d.ts +22 -0
- package/dist/flatbuffers/duc/object-snap-mode.js +25 -0
- package/dist/flatbuffers/duc/paragraph-formatting.d.ts +33 -0
- package/dist/flatbuffers/duc/paragraph-formatting.js +106 -0
- package/dist/flatbuffers/duc/parametric-source-type.d.ts +4 -0
- package/dist/flatbuffers/duc/parametric-source-type.js +7 -0
- package/dist/flatbuffers/duc/parametric-source.d.ts +20 -0
- package/dist/flatbuffers/duc/parametric-source.js +57 -0
- package/dist/flatbuffers/duc/plot-layout.d.ts +14 -0
- package/dist/flatbuffers/duc/plot-layout.js +41 -0
- package/dist/flatbuffers/duc/point-binding-point.d.ts +15 -0
- package/dist/flatbuffers/duc/point-binding-point.js +48 -0
- package/dist/flatbuffers/duc/polar-grid-settings.d.ts +17 -0
- package/dist/flatbuffers/duc/polar-grid-settings.js +56 -0
- package/dist/flatbuffers/duc/polar-tracking-settings.d.ts +29 -0
- package/dist/flatbuffers/duc/polar-tracking-settings.js +90 -0
- package/dist/flatbuffers/duc/primary-units.d.ts +16 -0
- package/dist/flatbuffers/duc/primary-units.js +44 -0
- package/dist/flatbuffers/duc/pruning-level.d.ts +5 -0
- package/dist/flatbuffers/duc/pruning-level.js +8 -0
- package/dist/flatbuffers/duc/snap-marker-settings.d.ts +23 -0
- package/dist/flatbuffers/duc/snap-marker-settings.js +79 -0
- package/dist/flatbuffers/duc/snap-marker-shape.d.ts +6 -0
- package/dist/flatbuffers/duc/snap-marker-shape.js +9 -0
- package/dist/flatbuffers/duc/snap-marker-style-entry.d.ts +16 -0
- package/dist/flatbuffers/duc/snap-marker-style-entry.js +43 -0
- package/dist/flatbuffers/duc/snap-marker-style.d.ts +17 -0
- package/dist/flatbuffers/duc/snap-marker-style.js +49 -0
- package/dist/flatbuffers/duc/snap-mode.d.ts +4 -0
- package/dist/flatbuffers/duc/snap-mode.js +7 -0
- package/dist/flatbuffers/duc/snap-override-behavior.d.ts +5 -0
- package/dist/flatbuffers/duc/snap-override-behavior.js +8 -0
- package/dist/flatbuffers/duc/snap-override.d.ts +17 -0
- package/dist/flatbuffers/duc/snap-override.js +49 -0
- package/dist/flatbuffers/duc/snap-settings.d.ts +75 -0
- package/dist/flatbuffers/duc/snap-settings.js +245 -0
- package/dist/flatbuffers/duc/stack-format-properties.d.ts +18 -0
- package/dist/flatbuffers/duc/stack-format-properties.js +57 -0
- package/dist/flatbuffers/duc/stack-format.d.ts +21 -0
- package/dist/flatbuffers/duc/stack-format.js +64 -0
- package/dist/flatbuffers/duc/stacked-text-align.d.ts +5 -0
- package/dist/flatbuffers/duc/stacked-text-align.js +8 -0
- package/dist/flatbuffers/duc/standard-overrides.d.ts +63 -0
- package/dist/flatbuffers/duc/standard-overrides.js +162 -0
- package/dist/flatbuffers/duc/standard-styles.d.ts +77 -0
- package/dist/flatbuffers/duc/standard-styles.js +285 -0
- package/dist/flatbuffers/duc/standard-units.d.ts +16 -0
- package/dist/flatbuffers/duc/standard-units.js +44 -0
- package/dist/flatbuffers/duc/standard-validation.d.ts +16 -0
- package/dist/flatbuffers/duc/standard-validation.js +44 -0
- package/dist/flatbuffers/duc/standard-view-settings.d.ts +35 -0
- package/dist/flatbuffers/duc/standard-view-settings.js +124 -0
- package/dist/flatbuffers/duc/standard.d.ts +33 -0
- package/dist/flatbuffers/duc/standard.js +90 -0
- package/dist/flatbuffers/duc/string-value-entry.d.ts +17 -0
- package/dist/flatbuffers/duc/string-value-entry.js +49 -0
- package/dist/flatbuffers/duc/stroke-cap.d.ts +5 -0
- package/dist/flatbuffers/duc/stroke-cap.js +8 -0
- package/dist/flatbuffers/duc/stroke-join.d.ts +5 -0
- package/dist/flatbuffers/duc/stroke-join.js +8 -0
- package/dist/flatbuffers/duc/stroke-placement.d.ts +5 -0
- package/dist/flatbuffers/duc/stroke-placement.js +8 -0
- package/dist/flatbuffers/duc/stroke-preference.d.ts +6 -0
- package/dist/flatbuffers/duc/stroke-preference.js +9 -0
- package/dist/flatbuffers/duc/stroke-side-preference.d.ts +8 -0
- package/dist/flatbuffers/duc/stroke-side-preference.js +11 -0
- package/dist/flatbuffers/duc/stroke-sides.d.ts +24 -0
- package/dist/flatbuffers/duc/stroke-sides.js +67 -0
- package/dist/flatbuffers/duc/stroke-style.d.ts +37 -0
- package/dist/flatbuffers/duc/stroke-style.js +111 -0
- package/dist/flatbuffers/duc/stroke-width.d.ts +5 -0
- package/dist/flatbuffers/duc/stroke-width.js +8 -0
- package/dist/flatbuffers/duc/table-cell-alignment.d.ts +11 -0
- package/dist/flatbuffers/duc/table-cell-alignment.js +14 -0
- package/dist/flatbuffers/duc/table-flow-direction.d.ts +4 -0
- package/dist/flatbuffers/duc/table-flow-direction.js +7 -0
- package/dist/flatbuffers/duc/text-align.d.ts +5 -0
- package/dist/flatbuffers/duc/text-align.js +8 -0
- package/dist/flatbuffers/duc/text-column.d.ts +15 -0
- package/dist/flatbuffers/duc/text-column.js +48 -0
- package/dist/flatbuffers/duc/text-field-source-property.d.ts +13 -0
- package/dist/flatbuffers/duc/text-field-source-property.js +16 -0
- package/dist/flatbuffers/duc/text-field-source-type.d.ts +4 -0
- package/dist/flatbuffers/duc/text-field-source-type.js +7 -0
- package/dist/flatbuffers/duc/text-flow-direction.d.ts +6 -0
- package/dist/flatbuffers/duc/text-flow-direction.js +9 -0
- package/dist/flatbuffers/duc/tiling-properties.d.ts +21 -0
- package/dist/flatbuffers/duc/tiling-properties.js +75 -0
- package/dist/flatbuffers/duc/tolerance-clause.d.ts +27 -0
- package/dist/flatbuffers/duc/tolerance-clause.js +84 -0
- package/dist/flatbuffers/duc/tolerance-display.d.ts +7 -0
- package/dist/flatbuffers/duc/tolerance-display.js +10 -0
- package/dist/flatbuffers/duc/tolerance-type.d.ts +5 -0
- package/dist/flatbuffers/duc/tolerance-type.js +8 -0
- package/dist/flatbuffers/duc/tolerance-zone-type.d.ts +7 -0
- package/dist/flatbuffers/duc/tolerance-zone-type.js +10 -0
- package/dist/flatbuffers/duc/tracking-line-style.d.ts +26 -0
- package/dist/flatbuffers/duc/tracking-line-style.js +74 -0
- package/dist/flatbuffers/duc/unit-precision.d.ts +19 -0
- package/dist/flatbuffers/duc/unit-precision.js +64 -0
- package/dist/flatbuffers/duc/unit-system-base.d.ts +20 -0
- package/dist/flatbuffers/duc/unit-system-base.js +65 -0
- package/dist/flatbuffers/duc/unit-system.d.ts +4 -0
- package/dist/flatbuffers/duc/unit-system.js +7 -0
- package/dist/flatbuffers/duc/version-base.d.ts +27 -0
- package/dist/flatbuffers/duc/version-base.js +80 -0
- package/dist/flatbuffers/duc/version-graph-metadata.d.ts +15 -0
- package/dist/flatbuffers/duc/version-graph-metadata.js +48 -0
- package/dist/flatbuffers/duc/version-graph.d.ts +31 -0
- package/dist/flatbuffers/duc/version-graph.js +94 -0
- package/dist/flatbuffers/duc/vertical-align.d.ts +5 -0
- package/dist/flatbuffers/duc/vertical-align.js +8 -0
- package/dist/flatbuffers/duc/viewport-shade-plot.d.ts +6 -0
- package/dist/flatbuffers/duc/viewport-shade-plot.js +9 -0
- package/dist/flatbuffers/duc/youtube-states.d.ts +8 -0
- package/dist/flatbuffers/duc/youtube-states.js +11 -0
- package/dist/flatbuffers/duc.d.ts +227 -0
- package/dist/flatbuffers/duc.js +229 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/legacy/index.d.ts +1 -0
- package/dist/legacy/index.js +1 -0
- package/dist/legacy/v1/duc/app-state.d.ts +124 -0
- package/dist/legacy/v1/duc/app-state.js +388 -0
- package/dist/legacy/v1/duc/binary-file-data.d.ts +27 -0
- package/dist/legacy/v1/duc/binary-file-data.js +90 -0
- package/dist/legacy/v1/duc/binary-files-entry.d.ts +16 -0
- package/dist/legacy/v1/duc/binary-files-entry.js +43 -0
- package/dist/legacy/v1/duc/binary-files.d.ts +17 -0
- package/dist/legacy/v1/duc/binary-files.js +55 -0
- package/dist/legacy/v1/duc/binding-point.d.ts +15 -0
- package/dist/legacy/v1/duc/binding-point.js +48 -0
- package/dist/legacy/v1/duc/bound-element.d.ts +17 -0
- package/dist/legacy/v1/duc/bound-element.js +48 -0
- package/dist/legacy/v1/duc/duc-block-attribute-details.d.ts +22 -0
- package/dist/legacy/v1/duc/duc-block-attribute-details.js +57 -0
- package/dist/legacy/v1/duc/duc-block-attribute.d.ts +16 -0
- package/dist/legacy/v1/duc/duc-block-attribute.js +43 -0
- package/dist/legacy/v1/duc/duc-block-instance-element-override.d.ts +17 -0
- package/dist/legacy/v1/duc/duc-block-instance-element-override.js +48 -0
- package/dist/legacy/v1/duc/duc-block.d.ts +34 -0
- package/dist/legacy/v1/duc/duc-block.js +110 -0
- package/dist/legacy/v1/duc/duc-element.d.ts +273 -0
- package/dist/legacy/v1/duc/duc-element.js +865 -0
- package/dist/legacy/v1/duc/duc-group.d.ts +40 -0
- package/dist/legacy/v1/duc/duc-group.js +114 -0
- package/dist/legacy/v1/duc/duc-line-reference.d.ts +15 -0
- package/dist/legacy/v1/duc/duc-line-reference.js +43 -0
- package/dist/legacy/v1/duc/duc-line.d.ts +15 -0
- package/dist/legacy/v1/duc/duc-line.js +43 -0
- package/dist/legacy/v1/duc/duc-path.d.ts +26 -0
- package/dist/legacy/v1/duc/duc-path.js +69 -0
- package/dist/legacy/v1/duc/duc-table-cell.d.ts +22 -0
- package/dist/legacy/v1/duc/duc-table-cell.js +57 -0
- package/dist/legacy/v1/duc/duc-table-column.d.ts +18 -0
- package/dist/legacy/v1/duc/duc-table-column.js +50 -0
- package/dist/legacy/v1/duc/duc-table-row.d.ts +18 -0
- package/dist/legacy/v1/duc/duc-table-row.js +50 -0
- package/dist/legacy/v1/duc/duc-table-style-props.d.ts +39 -0
- package/dist/legacy/v1/duc/duc-table-style-props.js +114 -0
- package/dist/legacy/v1/duc/duc-table-style.d.ts +14 -0
- package/dist/legacy/v1/duc/duc-table-style.js +41 -0
- package/dist/legacy/v1/duc/element-background.d.ts +14 -0
- package/dist/legacy/v1/duc/element-background.js +41 -0
- package/dist/legacy/v1/duc/element-content-base.d.ts +22 -0
- package/dist/legacy/v1/duc/element-content-base.js +64 -0
- package/dist/legacy/v1/duc/element-stroke.d.ts +23 -0
- package/dist/legacy/v1/duc/element-stroke.js +66 -0
- package/dist/legacy/v1/duc/exported-data-state.d.ts +51 -0
- package/dist/legacy/v1/duc/exported-data-state.js +155 -0
- package/dist/legacy/v1/duc/image-crop.d.ts +23 -0
- package/dist/legacy/v1/duc/image-crop.js +80 -0
- package/dist/legacy/v1/duc/linear-element-editor.d.ts +44 -0
- package/dist/legacy/v1/duc/linear-element-editor.js +119 -0
- package/dist/legacy/v1/duc/point-binding.d.ts +25 -0
- package/dist/legacy/v1/duc/point-binding.js +72 -0
- package/dist/legacy/v1/duc/point.d.ts +20 -0
- package/dist/legacy/v1/duc/point.js +63 -0
- package/dist/legacy/v1/duc/pointer-down-state.d.ts +32 -0
- package/dist/legacy/v1/duc/pointer-down-state.js +90 -0
- package/dist/legacy/v1/duc/renderer-state.d.ts +17 -0
- package/dist/legacy/v1/duc/renderer-state.js +54 -0
- package/dist/legacy/v1/duc/segment-midpoint-state.d.ts +18 -0
- package/dist/legacy/v1/duc/segment-midpoint-state.js +57 -0
- package/dist/legacy/v1/duc/simple-point.d.ts +15 -0
- package/dist/legacy/v1/duc/simple-point.js +48 -0
- package/dist/legacy/v1/duc/stroke-sides.d.ts +23 -0
- package/dist/legacy/v1/duc/stroke-sides.js +66 -0
- package/dist/legacy/v1/duc/stroke-style.d.ts +31 -0
- package/dist/legacy/v1/duc/stroke-style.js +102 -0
- package/dist/legacy/v1/duc/tiling-properties.d.ts +21 -0
- package/dist/legacy/v1/duc/tiling-properties.js +75 -0
- package/dist/legacy/v1/duc.d.ts +35 -0
- package/dist/legacy/v1/duc.js +37 -0
- package/dist/legacy/v1/index.d.ts +1 -0
- package/dist/legacy/v1/index.js +1 -0
- package/dist/legacy/v1/parse/index.d.ts +67 -0
- package/dist/legacy/v1/parse/index.js +101 -0
- package/dist/legacy/v1/parse/parseAppStateFromBinary.d.ts +3 -0
- package/dist/legacy/v1/parse/parseAppStateFromBinary.js +139 -0
- package/dist/legacy/v1/parse/parseBinaryFilesFromBinary.d.ts +4 -0
- package/dist/legacy/v1/parse/parseBinaryFilesFromBinary.js +32 -0
- package/dist/legacy/v1/parse/parseBlockFromBinary.d.ts +3 -0
- package/dist/legacy/v1/parse/parseBlockFromBinary.js +70 -0
- package/dist/legacy/v1/parse/parseElementFromBinary.d.ts +8 -0
- package/dist/legacy/v1/parse/parseElementFromBinary.js +387 -0
- package/dist/legacy/v1/parse/parseGroupFromBinary.d.ts +4 -0
- package/dist/legacy/v1/parse/parseGroupFromBinary.js +36 -0
- package/dist/legacy/v1/parse/parseRendererStateFromBinary.d.ts +4 -0
- package/dist/legacy/v1/parse/parseRendererStateFromBinary.js +15 -0
- package/dist/legacy/v1/serialize/index.d.ts +5 -0
- package/dist/legacy/v1/serialize/index.js +81 -0
- package/dist/legacy/v1/serialize/serializationUtils.d.ts +17 -0
- package/dist/legacy/v1/serialize/serializationUtils.js +27 -0
- package/dist/legacy/v1/serialize/serializeAppStateFromDuc.d.ts +4 -0
- package/dist/legacy/v1/serialize/serializeAppStateFromDuc.js +145 -0
- package/dist/legacy/v1/serialize/serializeBinaryFilesFromDuc.d.ts +4 -0
- package/dist/legacy/v1/serialize/serializeBinaryFilesFromDuc.js +46 -0
- package/dist/legacy/v1/serialize/serializeBlockFromDuc.d.ts +3 -0
- package/dist/legacy/v1/serialize/serializeBlockFromDuc.js +60 -0
- package/dist/legacy/v1/serialize/serializeElementFromDuc.d.ts +8 -0
- package/dist/legacy/v1/serialize/serializeElementFromDuc.js +435 -0
- package/dist/legacy/v1/serialize/serializeGroupFromDuc.d.ts +3 -0
- package/dist/legacy/v1/serialize/serializeGroupFromDuc.js +37 -0
- package/dist/legacy/v1/serialize/serializeRendererStateFromDuc.d.ts +4 -0
- package/dist/legacy/v1/serialize/serializeRendererStateFromDuc.js +7 -0
- package/dist/legacy/v1/types/elements/index.d.ts +480 -0
- package/dist/legacy/v1/types/elements/index.js +1 -0
- package/dist/legacy/v1/types/elements/typeChecks.d.ts +40 -0
- package/dist/legacy/v1/types/elements/typeChecks.js +179 -0
- package/dist/legacy/v1/types/geometryTypes.d.ts +78 -0
- package/dist/legacy/v1/types/geometryTypes.js +1 -0
- package/dist/legacy/v1/types/index.d.ts +496 -0
- package/dist/legacy/v1/types/index.js +1 -0
- package/dist/legacy/v1/types/utility-types.d.ts +31 -0
- package/dist/legacy/v1/types/utility-types.js +1 -0
- package/dist/legacy/v1/utils/bounds.d.ts +76 -0
- package/dist/legacy/v1/utils/bounds.js +415 -0
- package/dist/legacy/v1/utils/constants.d.ts +370 -0
- package/dist/legacy/v1/utils/constants.js +571 -0
- package/dist/legacy/v1/utils/elements/index.d.ts +26 -0
- package/dist/legacy/v1/utils/elements/index.js +108 -0
- package/dist/legacy/v1/utils/elements/linearElement.d.ts +133 -0
- package/dist/legacy/v1/utils/elements/linearElement.js +544 -0
- package/dist/legacy/v1/utils/elements/textElement.d.ts +89 -0
- package/dist/legacy/v1/utils/elements/textElement.js +563 -0
- package/dist/legacy/v1/utils/index.d.ts +26 -0
- package/dist/legacy/v1/utils/index.js +40 -0
- package/dist/legacy/v1/utils/math/algebra/ga.d.ts +63 -0
- package/dist/legacy/v1/utils/math/algebra/ga.js +268 -0
- package/dist/legacy/v1/utils/math/algebra/gadirections.d.ts +9 -0
- package/dist/legacy/v1/utils/math/algebra/gadirections.js +18 -0
- package/dist/legacy/v1/utils/math/algebra/galines.d.ts +23 -0
- package/dist/legacy/v1/utils/math/algebra/galines.js +32 -0
- package/dist/legacy/v1/utils/math/algebra/gapoints.d.ts +8 -0
- package/dist/legacy/v1/utils/math/algebra/gapoints.js +30 -0
- package/dist/legacy/v1/utils/math/algebra/gatransforms.d.ts +10 -0
- package/dist/legacy/v1/utils/math/algebra/gatransforms.js +23 -0
- package/dist/legacy/v1/utils/math/bbox.d.ts +10 -0
- package/dist/legacy/v1/utils/math/bbox.js +42 -0
- package/dist/legacy/v1/utils/math/geometry.d.ts +102 -0
- package/dist/legacy/v1/utils/math/geometry.js +790 -0
- package/dist/legacy/v1/utils/math/index.d.ts +309 -0
- package/dist/legacy/v1/utils/math/index.js +1140 -0
- package/dist/legacy/v1/utils/math/random.d.ts +4 -0
- package/dist/legacy/v1/utils/math/random.js +25 -0
- package/dist/legacy/v1/utils/measurements.d.ts +33 -0
- package/dist/legacy/v1/utils/measurements.js +65 -0
- package/dist/legacy/v1/utils/normalize.d.ts +14 -0
- package/dist/legacy/v1/utils/normalize.js +49 -0
- package/dist/legacy/v1/utils/restore.d.ts +197 -0
- package/dist/legacy/v1/utils/restore.js +1255 -0
- package/dist/legacy/v1/utils/scopes.d.ts +260 -0
- package/dist/legacy/v1/utils/scopes.js +661 -0
- package/dist/legacy/v1/utils/standards.d.ts +12 -0
- package/dist/legacy/v1/utils/standards.js +10 -0
- package/dist/legacy/v1/utils/state/index.d.ts +2 -0
- package/dist/legacy/v1/utils/state/index.js +68 -0
- package/dist/legacy/v1/utils/url.d.ts +8 -0
- package/dist/legacy/v1/utils/url.js +33 -0
- package/dist/parse.d.ts +54 -0
- package/dist/parse.js +1318 -0
- package/dist/restore/index.d.ts +3 -0
- package/dist/restore/index.js +3 -0
- package/dist/restore/restoreDataState.d.ts +191 -0
- package/dist/restore/restoreDataState.js +716 -0
- package/dist/restore/restoreElements.d.ts +34 -0
- package/dist/restore/restoreElements.js +1281 -0
- package/dist/restore/restoreStandards.d.ts +8 -0
- package/dist/restore/restoreStandards.js +224 -0
- package/dist/serialize.d.ts +3 -0
- package/dist/serialize.js +2465 -0
- package/dist/technical/index.d.ts +3 -0
- package/dist/technical/index.js +3 -0
- package/dist/technical/measurements.d.ts +31 -0
- package/dist/technical/measurements.js +64 -0
- package/dist/technical/scopes.d.ts +261 -0
- package/dist/technical/scopes.js +661 -0
- package/dist/technical/standards.d.ts +124 -0
- package/dist/technical/standards.js +10 -0
- package/dist/types/elements/index.d.ts +1356 -0
- package/dist/types/elements/index.js +1 -0
- package/dist/types/elements/typeChecks.d.ts +40 -0
- package/dist/types/elements/typeChecks.js +188 -0
- package/dist/types/geometryTypes.d.ts +90 -0
- package/dist/types/geometryTypes.js +1 -0
- package/dist/types/index.d.ts +591 -0
- package/dist/types/index.js +3 -0
- package/dist/types/utility-types.d.ts +31 -0
- package/dist/types/utility-types.js +1 -0
- package/dist/utils/bounds.d.ts +75 -0
- package/dist/utils/bounds.js +414 -0
- package/dist/utils/constants.d.ts +288 -0
- package/dist/utils/constants.js +529 -0
- package/dist/utils/elements/frameElement.d.ts +4 -0
- package/dist/utils/elements/frameElement.js +16 -0
- package/dist/utils/elements/freedrawElement.d.ts +2 -0
- package/dist/utils/elements/freedrawElement.js +46 -0
- package/dist/utils/elements/index.d.ts +51 -0
- package/dist/utils/elements/index.js +215 -0
- package/dist/utils/elements/linearElement.d.ts +53 -0
- package/dist/utils/elements/linearElement.js +539 -0
- package/dist/utils/elements/newElement.d.ts +72 -0
- package/dist/utils/elements/newElement.js +268 -0
- package/dist/utils/elements/textElement.d.ts +89 -0
- package/dist/utils/elements/textElement.js +565 -0
- package/dist/utils/elements/viewportElement.d.ts +6 -0
- package/dist/utils/elements/viewportElement.js +9 -0
- package/dist/utils/filebyte.d.ts +39 -0
- package/dist/utils/filebyte.js +117 -0
- package/dist/utils/functionCodec.d.ts +5 -0
- package/dist/utils/functionCodec.js +86 -0
- package/dist/utils/index.d.ts +32 -0
- package/dist/utils/index.js +53 -0
- package/dist/utils/math/algebra/ga.d.ts +63 -0
- package/dist/utils/math/algebra/ga.js +268 -0
- package/dist/utils/math/algebra/gadirections.d.ts +9 -0
- package/dist/utils/math/algebra/gadirections.js +18 -0
- package/dist/utils/math/algebra/galines.d.ts +23 -0
- package/dist/utils/math/algebra/galines.js +32 -0
- package/dist/utils/math/algebra/gapoints.d.ts +8 -0
- package/dist/utils/math/algebra/gapoints.js +30 -0
- package/dist/utils/math/algebra/gatransforms.d.ts +10 -0
- package/dist/utils/math/algebra/gatransforms.js +23 -0
- package/dist/utils/math/algebra/index.d.ts +5 -0
- package/dist/utils/math/algebra/index.js +5 -0
- package/dist/utils/math/bbox.d.ts +10 -0
- package/dist/utils/math/bbox.js +42 -0
- package/dist/utils/math/geometry.d.ts +102 -0
- package/dist/utils/math/geometry.js +790 -0
- package/dist/utils/math/index.d.ts +323 -0
- package/dist/utils/math/index.js +1188 -0
- package/dist/utils/math/random.d.ts +4 -0
- package/dist/utils/math/random.js +25 -0
- package/dist/utils/normalize.d.ts +14 -0
- package/dist/utils/normalize.js +49 -0
- package/dist/utils/shape.d.ts +15 -0
- package/dist/utils/shape.js +254 -0
- package/dist/utils/state/grid.d.ts +7 -0
- package/dist/utils/state/grid.js +25 -0
- package/dist/utils/state/index.d.ts +9 -0
- package/dist/utils/state/index.js +131 -0
- package/dist/utils/url.d.ts +8 -0
- package/dist/utils/url.js +33 -0
- package/dist/utils/version.d.ts +1 -0
- package/dist/utils/version.js +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,1255 @@
|
|
|
1
|
+
import { isElbowArrow, isLinearElement, isTextElement } from "ducjs/legacy/v1/types/elements/typeChecks";
|
|
2
|
+
import { arrayToMap, getUpdatedTimestamp, isFiniteNumber, updateActiveTool, } from "ducjs/legacy/v1/utils";
|
|
3
|
+
import { getContainerElement } from "ducjs/legacy/v1/utils/bounds";
|
|
4
|
+
import { BEZIER_MIRRORING, BLENDING, DEFAULT_ELEMENT_PROPS, DEFAULT_ELLIPSE_ELEMENT, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FREEDRAW_ELEMENT, DEFAULT_POLYGON_SIDES, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, DEFAULT_ZOOM_STEP, ELEMENT_CONTENT_PREFERENCE, ELEMENT_SUBSET, FONT_FAMILY, IMAGE_STATUS, LINE_CONFIRM_THRESHOLD, LINE_HEAD, MAX_ZOOM_STEP, MIN_ZOOM_STEP, STROKE_CAP, STROKE_JOIN, STROKE_PLACEMENT, STROKE_PREFERENCE, STROKE_SIDE_PREFERENCE, TEXT_ALIGN, VERTICAL_ALIGN } from "ducjs/legacy/v1/utils/constants";
|
|
5
|
+
import { bumpVersion, getDefaultStackProperties, getNonDeletedElements, isInvisiblySmallElement, migratePoints } from "ducjs/legacy/v1/utils/elements";
|
|
6
|
+
import { getNormalizedPoints, mergeOverlappingPoints, validateClosedPath } from "ducjs/legacy/v1/utils/elements/linearElement";
|
|
7
|
+
import { detectLineHeight, refreshTextDimensions } from "ducjs/legacy/v1/utils/elements/textElement";
|
|
8
|
+
import { getSizeFromPoints } from "ducjs/legacy/v1/utils/math";
|
|
9
|
+
import { randomId } from "ducjs/legacy/v1/utils/math/random";
|
|
10
|
+
import { getPrecisionScope, ScaleFactors } from "ducjs/legacy/v1/utils/measurements";
|
|
11
|
+
import { getNormalizedDimensions, getNormalizedGridSize, getNormalizedGridStep, getNormalizedZoom, normalizeFixedPoint, } from "ducjs/legacy/v1/utils/normalize";
|
|
12
|
+
import { getPrecisionValueFromRaw, getPrecisionValueFromScoped, getScaledZoomValueForScope, getScopedBezierPointFromDucPoint, getScopedZoomValue, NEUTRAL_SCOPE } from "ducjs/legacy/v1/utils/scopes";
|
|
13
|
+
import { DESIGN_STANDARD } from "ducjs/legacy/v1/utils/standards";
|
|
14
|
+
import { getDefaultDucState } from "ducjs/legacy/v1/utils/state";
|
|
15
|
+
import { normalizeLink } from "ducjs/legacy/v1/utils/url";
|
|
16
|
+
import tinycolor from "tinycolor2";
|
|
17
|
+
export const AllowedDucActiveTools = {
|
|
18
|
+
selection: true,
|
|
19
|
+
text: true,
|
|
20
|
+
rectangle: true,
|
|
21
|
+
polygon: true,
|
|
22
|
+
ellipse: true,
|
|
23
|
+
line: true,
|
|
24
|
+
image: true,
|
|
25
|
+
arrow: true,
|
|
26
|
+
freedraw: true,
|
|
27
|
+
eraser: false,
|
|
28
|
+
custom: true,
|
|
29
|
+
frame: true,
|
|
30
|
+
embeddable: true,
|
|
31
|
+
hand: true,
|
|
32
|
+
laser: false,
|
|
33
|
+
ruler: false,
|
|
34
|
+
magicframe: false,
|
|
35
|
+
lasso: true,
|
|
36
|
+
table: true,
|
|
37
|
+
};
|
|
38
|
+
export const isValidElementScopeValue = (value, appState) => {
|
|
39
|
+
var _a;
|
|
40
|
+
// Only check if the provided value is valid
|
|
41
|
+
if (value !== undefined && Object.keys(ScaleFactors).includes(value)) {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
return (_a = appState === null || appState === void 0 ? void 0 : appState.mainScope) !== null && _a !== void 0 ? _a : NEUTRAL_SCOPE;
|
|
45
|
+
};
|
|
46
|
+
export const isValidAppStateScopeValue = (value) => {
|
|
47
|
+
// Only check if the provided value is valid
|
|
48
|
+
if (value !== undefined && Object.keys(ScaleFactors).includes(value)) {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
return NEUTRAL_SCOPE;
|
|
52
|
+
};
|
|
53
|
+
export const isValidAppStateScopeExponentThresholdValue = (value, defaultValue) => {
|
|
54
|
+
const finite = isValidFinitePositiveByteValue(value, defaultValue);
|
|
55
|
+
if (finite >= 1 && finite <= 36) {
|
|
56
|
+
return finite;
|
|
57
|
+
}
|
|
58
|
+
return defaultValue;
|
|
59
|
+
};
|
|
60
|
+
export const isValidPrecisionScopeValue = (zoom, mainScope, scopeExponentThreshold) => {
|
|
61
|
+
return getPrecisionScope(zoom, mainScope, scopeExponentThreshold);
|
|
62
|
+
};
|
|
63
|
+
const createHeadOnlyBinding = (head, currentScope) => {
|
|
64
|
+
return {
|
|
65
|
+
elementId: "",
|
|
66
|
+
focus: 0,
|
|
67
|
+
gap: getPrecisionValueFromRaw(0, currentScope, currentScope),
|
|
68
|
+
fixedPoint: null,
|
|
69
|
+
point: null,
|
|
70
|
+
head: isValidLineHeadValue(head),
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
const restoreElementWithProperties = (element, extra, appState) => {
|
|
74
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
75
|
+
const _element = Object.assign(Object.assign({}, element), extra);
|
|
76
|
+
const elementScope = isValidElementScopeValue(_element.scope, appState);
|
|
77
|
+
const currentScope = isValidElementScopeValue(appState === null || appState === void 0 ? void 0 : appState.scope, appState);
|
|
78
|
+
// Handle legacy stroke properties first
|
|
79
|
+
let stroke = [DEFAULT_ELEMENT_PROPS.stroke];
|
|
80
|
+
if (_element.strokeColor) {
|
|
81
|
+
// Legacy strokeColor property
|
|
82
|
+
stroke = [Object.assign(Object.assign({}, DEFAULT_ELEMENT_PROPS.stroke), { content: validateDeprecatedElementContent(_element.strokeColor, DEFAULT_ELEMENT_PROPS.stroke.content), width: restorePrecisionValue((_element.strokeWidth) || DEFAULT_ELEMENT_PROPS.stroke.width.value, elementScope, currentScope, DEFAULT_ELEMENT_PROPS.stroke.width.value) })];
|
|
83
|
+
}
|
|
84
|
+
else if (_element.stroke) {
|
|
85
|
+
// New stroke array property
|
|
86
|
+
stroke = _element.stroke.map(s => validateStroke(s, elementScope, currentScope));
|
|
87
|
+
}
|
|
88
|
+
// Handle legacy background properties
|
|
89
|
+
let background = [DEFAULT_ELEMENT_PROPS.background];
|
|
90
|
+
if (_element.backgroundColor) {
|
|
91
|
+
// Legacy backgroundColor property
|
|
92
|
+
background = [Object.assign(Object.assign({}, DEFAULT_ELEMENT_PROPS.background), { content: validateDeprecatedElementContent(_element.backgroundColor, DEFAULT_ELEMENT_PROPS.background.content) })];
|
|
93
|
+
}
|
|
94
|
+
else if (_element.background) {
|
|
95
|
+
// New background array property
|
|
96
|
+
background = _element.background.map(bg => validateBackground(bg));
|
|
97
|
+
}
|
|
98
|
+
const base = {
|
|
99
|
+
type: _element.type,
|
|
100
|
+
id: _element.id || randomId(),
|
|
101
|
+
version: _element.version || 1,
|
|
102
|
+
versionNonce: (_a = _element.versionNonce) !== null && _a !== void 0 ? _a : 0,
|
|
103
|
+
index: (_b = _element.index) !== null && _b !== void 0 ? _b : null,
|
|
104
|
+
isDeleted: isValidBoolean(_element.isDeleted, false),
|
|
105
|
+
blending: isValidBlendingValue(_element.blending),
|
|
106
|
+
stroke,
|
|
107
|
+
background,
|
|
108
|
+
opacity: isValidPercentageValue(_element.opacity, DEFAULT_ELEMENT_PROPS.opacity),
|
|
109
|
+
angle: isValidRadianValue(_element.angle, DEFAULT_ELEMENT_PROPS.angle),
|
|
110
|
+
x: restorePrecisionValue(_element.x, elementScope, currentScope, 0),
|
|
111
|
+
y: restorePrecisionValue(_element.y, elementScope, currentScope, 0),
|
|
112
|
+
scope: elementScope,
|
|
113
|
+
subset: isValidSubsetValue(_element.subset),
|
|
114
|
+
label: (_c = _element.label) !== null && _c !== void 0 ? _c : "Lost Element Label",
|
|
115
|
+
isVisible: isValidBoolean(_element.isVisible, DEFAULT_ELEMENT_PROPS.isVisible),
|
|
116
|
+
width: restorePrecisionValue(_element.width, elementScope, currentScope, 0),
|
|
117
|
+
height: restorePrecisionValue(_element.height, elementScope, currentScope, 0),
|
|
118
|
+
seed: (_d = _element.seed) !== null && _d !== void 0 ? _d : 1,
|
|
119
|
+
groupIds: (_e = _element.groupIds) !== null && _e !== void 0 ? _e : [],
|
|
120
|
+
frameId: (_f = _element.frameId) !== null && _f !== void 0 ? _f : null,
|
|
121
|
+
roundness: restorePrecisionValue(_element.roundness, elementScope, currentScope, DEFAULT_ELEMENT_PROPS.roundness.value),
|
|
122
|
+
boundElements: (_g = _element.boundElements) !== null && _g !== void 0 ? _g : [],
|
|
123
|
+
updated: (_h = _element.updated) !== null && _h !== void 0 ? _h : getUpdatedTimestamp(),
|
|
124
|
+
link: _element.link ? normalizeLink(_element.link) : null,
|
|
125
|
+
locked: isValidBoolean(_element.locked, false),
|
|
126
|
+
};
|
|
127
|
+
if ("customData" in element || "customData" in extra) {
|
|
128
|
+
base.customData = _element.customData;
|
|
129
|
+
}
|
|
130
|
+
const normalizedRaw = getNormalizedDimensions(base);
|
|
131
|
+
const normalized = {
|
|
132
|
+
x: restorePrecisionValue(normalizedRaw.x, elementScope, currentScope, 0, true),
|
|
133
|
+
y: restorePrecisionValue(normalizedRaw.y, elementScope, currentScope, 0, true),
|
|
134
|
+
width: restorePrecisionValue(normalizedRaw.width, elementScope, currentScope, 0, true),
|
|
135
|
+
height: restorePrecisionValue(normalizedRaw.height, elementScope, currentScope, 0, true),
|
|
136
|
+
};
|
|
137
|
+
return Object.assign(Object.assign(Object.assign({}, _element), base), normalized);
|
|
138
|
+
};
|
|
139
|
+
const restoreElement = (element, currentScope, appState) => {
|
|
140
|
+
var _a, _b;
|
|
141
|
+
// Migration: convert deprecated 'diamond' to 'polygon' with 4 sides
|
|
142
|
+
if (element.type === "diamond") {
|
|
143
|
+
const migrated = Object.assign(Object.assign({}, element), { type: "polygon", sides: 4 });
|
|
144
|
+
return restoreElement(migrated, currentScope, appState);
|
|
145
|
+
}
|
|
146
|
+
switch (element.type) {
|
|
147
|
+
case "text": {
|
|
148
|
+
let fontSize = element.fontSize;
|
|
149
|
+
let fontFamily = element.fontFamily;
|
|
150
|
+
if ("font" in element) {
|
|
151
|
+
try {
|
|
152
|
+
const fontParts = String(element.font).split(" ");
|
|
153
|
+
if (fontParts.length === 2) {
|
|
154
|
+
const [fontSizeStr, fontFamilyName] = fontParts;
|
|
155
|
+
const parsedSize = parseFloat(fontSizeStr);
|
|
156
|
+
if (!isNaN(parsedSize) && Number.isFinite(parsedSize)) {
|
|
157
|
+
fontSize = parsedSize;
|
|
158
|
+
fontFamily = getFontFamilyByName(fontFamilyName);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error("Failed to parse legacy font value:", error);
|
|
164
|
+
fontSize = DEFAULT_FONT_SIZE;
|
|
165
|
+
fontFamily = DEFAULT_FONT_FAMILY;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const text = (typeof element.text === "string" && element.text) || "";
|
|
169
|
+
const lineHeight = element.lineHeight && Number.isFinite(element.lineHeight)
|
|
170
|
+
? element.lineHeight
|
|
171
|
+
: element.height && Number.isFinite(element.height)
|
|
172
|
+
? detectLineHeight(element)
|
|
173
|
+
// : getLineHeight(element.fontFamily);
|
|
174
|
+
: 1; // FIXME: We need better handling to get the font line height
|
|
175
|
+
const textElementScope = isValidElementScopeValue(element.scope, appState);
|
|
176
|
+
const finalFontSize = restorePrecisionValue(fontSize, textElementScope, currentScope, DEFAULT_FONT_SIZE);
|
|
177
|
+
const textElement = restoreElementWithProperties(element, {
|
|
178
|
+
fontSize: finalFontSize,
|
|
179
|
+
fontFamily,
|
|
180
|
+
text,
|
|
181
|
+
textAlign: isValidTextAlignValue(element.textAlign),
|
|
182
|
+
verticalAlign: isValidVerticalAlignValue(element.verticalAlign),
|
|
183
|
+
containerId: (_a = element.containerId) !== null && _a !== void 0 ? _a : null,
|
|
184
|
+
originalText: element.originalText || text,
|
|
185
|
+
autoResize: isValidBoolean(element.autoResize, true),
|
|
186
|
+
lineHeight,
|
|
187
|
+
}, appState);
|
|
188
|
+
// if empty text, mark as deleted. We keep in array
|
|
189
|
+
// for data integrity purposes (collab etc.)
|
|
190
|
+
if (!text && !isValidBoolean(element.isDeleted, false)) {
|
|
191
|
+
element = Object.assign(Object.assign({}, element), { originalText: text, isDeleted: true });
|
|
192
|
+
element = bumpVersion(element);
|
|
193
|
+
}
|
|
194
|
+
return textElement;
|
|
195
|
+
}
|
|
196
|
+
case "freedraw": {
|
|
197
|
+
const elementScope = isValidElementScopeValue(element.scope, appState);
|
|
198
|
+
const points = restoreElementPoints({
|
|
199
|
+
points: element.points,
|
|
200
|
+
x: element.x,
|
|
201
|
+
y: element.y,
|
|
202
|
+
width: element.width,
|
|
203
|
+
height: element.height,
|
|
204
|
+
elementScope,
|
|
205
|
+
currentScope,
|
|
206
|
+
});
|
|
207
|
+
return restoreElementWithProperties(element, {
|
|
208
|
+
points,
|
|
209
|
+
size: restorePrecisionValue(element.size, elementScope, currentScope, DEFAULT_FREEDRAW_ELEMENT.size),
|
|
210
|
+
lastCommittedPoint: element.lastCommittedPoint
|
|
211
|
+
? restorePoint(element.lastCommittedPoint, elementScope, currentScope)
|
|
212
|
+
: null,
|
|
213
|
+
simulatePressure: isValidBoolean(element.simulatePressure, false),
|
|
214
|
+
pressures: Array.isArray(element.pressures) ? element.pressures : [],
|
|
215
|
+
thinning: isValidPercentageValue(element.thinning, DEFAULT_FREEDRAW_ELEMENT.thinning, true),
|
|
216
|
+
smoothing: isValidPercentageValue(element.smoothing, DEFAULT_FREEDRAW_ELEMENT.smoothing),
|
|
217
|
+
streamline: isValidPercentageValue(element.streamline, DEFAULT_FREEDRAW_ELEMENT.streamline),
|
|
218
|
+
easing: isValidFreeDrawEasingValue(element.easing),
|
|
219
|
+
start: restoreFreeDrawEnds(element.start),
|
|
220
|
+
end: restoreFreeDrawEnds(element.end),
|
|
221
|
+
}, appState);
|
|
222
|
+
}
|
|
223
|
+
case "image":
|
|
224
|
+
return restoreElementWithProperties(element, {
|
|
225
|
+
status: isValidImageStatusValue(element.status),
|
|
226
|
+
fileId: element.fileId,
|
|
227
|
+
scale: isValidImageScaleValue(element.scale),
|
|
228
|
+
}, appState);
|
|
229
|
+
case "line": {
|
|
230
|
+
// Don't normalize points if there are bindings
|
|
231
|
+
const hasBindings = !!(element.startBinding || element.endBinding);
|
|
232
|
+
const elementScope = isValidElementScopeValue(element.scope, appState);
|
|
233
|
+
const { points, lines } = restoreLinearElementPointsAndLines({
|
|
234
|
+
points: element.points,
|
|
235
|
+
lines: element.lines,
|
|
236
|
+
x: element.x,
|
|
237
|
+
y: element.y,
|
|
238
|
+
width: element.width,
|
|
239
|
+
height: element.height,
|
|
240
|
+
elementScope,
|
|
241
|
+
currentScope,
|
|
242
|
+
skipNormalization: hasBindings,
|
|
243
|
+
});
|
|
244
|
+
const isEditing = false; // TODO: Handle editingLinearElement properly
|
|
245
|
+
let finalPoints = points;
|
|
246
|
+
// Ensure we have at least 2 points for visibility check
|
|
247
|
+
if (finalPoints.length < 2 && !isEditing) {
|
|
248
|
+
const elementWidth = restorePrecisionValue(element.width, elementScope, currentScope, 0);
|
|
249
|
+
const elementHeight = restorePrecisionValue(element.height, elementScope, currentScope, 0);
|
|
250
|
+
finalPoints = [
|
|
251
|
+
{
|
|
252
|
+
x: getPrecisionValueFromRaw(0, elementScope, currentScope),
|
|
253
|
+
y: getPrecisionValueFromRaw(0, elementScope, currentScope),
|
|
254
|
+
mirroring: undefined,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
x: elementWidth,
|
|
258
|
+
y: elementHeight,
|
|
259
|
+
mirroring: undefined,
|
|
260
|
+
}
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
// Handle bindings, with special case for head-only bindings
|
|
264
|
+
const startBinding = element.startBinding;
|
|
265
|
+
const endBinding = element.endBinding;
|
|
266
|
+
// Process bindings
|
|
267
|
+
const processedStartBinding = startBinding && startBinding.head !== undefined &&
|
|
268
|
+
(!startBinding.elementId || startBinding.elementId === "")
|
|
269
|
+
? createHeadOnlyBinding(startBinding.head, currentScope)
|
|
270
|
+
: repairBinding(element, startBinding, currentScope);
|
|
271
|
+
const processedEndBinding = endBinding && endBinding.head !== undefined &&
|
|
272
|
+
(!endBinding.elementId || endBinding.elementId === "")
|
|
273
|
+
? createHeadOnlyBinding(endBinding.head, currentScope)
|
|
274
|
+
: repairBinding(element, endBinding, currentScope);
|
|
275
|
+
// Create the base restored element
|
|
276
|
+
const sizeFromPoints = !hasBindings && getSizeFromPoints(finalPoints.map(getScopedBezierPointFromDucPoint));
|
|
277
|
+
let restoredElement = restoreElementWithProperties(element, Object.assign({ points: finalPoints, lines, lastCommittedPoint: element.lastCommittedPoint ? restorePoint(element.lastCommittedPoint, element.scope, currentScope) : null, startBinding: processedStartBinding, endBinding: processedEndBinding, x: element.x, y: element.y }, (!sizeFromPoints ? {} : {
|
|
278
|
+
width: getPrecisionValueFromScoped(sizeFromPoints.width, element.scope, currentScope),
|
|
279
|
+
height: getPrecisionValueFromScoped(sizeFromPoints.height, element.scope, currentScope),
|
|
280
|
+
})), appState);
|
|
281
|
+
const { points: updatedPoints, lines: updatedLines } = mergeOverlappingPoints(finalPoints, lines, LINE_CONFIRM_THRESHOLD);
|
|
282
|
+
restoredElement = Object.assign(Object.assign({}, restoredElement), { points: updatedPoints, lines: updatedLines });
|
|
283
|
+
// Validate path overrides after we have the final points and lines
|
|
284
|
+
const validatedPathOverrides = validatePathOverrides(element.pathOverrides, restoredElement, elementScope, currentScope);
|
|
285
|
+
return Object.assign(Object.assign({}, restoredElement), { pathOverrides: validatedPathOverrides });
|
|
286
|
+
}
|
|
287
|
+
case "arrow": {
|
|
288
|
+
// since arrow is deprecated, we convert it to line
|
|
289
|
+
return restoreElement(Object.assign(Object.assign({}, element), { type: "line" }), currentScope, appState);
|
|
290
|
+
}
|
|
291
|
+
case "ellipse": {
|
|
292
|
+
const ratio = isValidPercentageValue(element.ratio, DEFAULT_ELLIPSE_ELEMENT.ratio);
|
|
293
|
+
const startAngle = isValidCutAngleValue(element.startAngle, DEFAULT_ELLIPSE_ELEMENT.startAngle);
|
|
294
|
+
const endAngle = isValidCutAngleValue(element.endAngle, DEFAULT_ELLIPSE_ELEMENT.endAngle);
|
|
295
|
+
const showAuxCrosshair = (_b = element.showAuxCrosshair) !== null && _b !== void 0 ? _b : DEFAULT_ELLIPSE_ELEMENT.showAuxCrosshair;
|
|
296
|
+
return restoreElementWithProperties(element, {
|
|
297
|
+
ratio,
|
|
298
|
+
startAngle,
|
|
299
|
+
endAngle,
|
|
300
|
+
showAuxCrosshair,
|
|
301
|
+
}, appState);
|
|
302
|
+
}
|
|
303
|
+
case "rectangle":
|
|
304
|
+
case "embeddable":
|
|
305
|
+
return restoreElementWithProperties(element, {}, appState);
|
|
306
|
+
case "polygon": {
|
|
307
|
+
const sides = isValidPolygonSides(element.sides);
|
|
308
|
+
return restoreElementWithProperties(Object.assign(Object.assign({}, element), { sides }), {}, appState);
|
|
309
|
+
}
|
|
310
|
+
case "frame": {
|
|
311
|
+
const frameElement = element;
|
|
312
|
+
return restoreElementWithProperties(frameElement, Object.assign({}, restoreDucStackProperties(frameElement, currentScope)), appState);
|
|
313
|
+
}
|
|
314
|
+
case "table": {
|
|
315
|
+
const tableElement = element;
|
|
316
|
+
return restoreElementWithProperties(tableElement, {
|
|
317
|
+
columnOrder: tableElement.columnOrder || [],
|
|
318
|
+
rowOrder: tableElement.rowOrder || [],
|
|
319
|
+
columns: restoreTableColumns(tableElement.columns, element.scope, currentScope),
|
|
320
|
+
rows: restoreTableRows(tableElement.rows, element.scope, currentScope),
|
|
321
|
+
cells: restoreTableCells(tableElement.cells, element.scope, currentScope),
|
|
322
|
+
style: tableElement.style ? restoreTableStyleProps(tableElement.style, element.scope, currentScope) : undefined,
|
|
323
|
+
}, appState);
|
|
324
|
+
}
|
|
325
|
+
case "doc": {
|
|
326
|
+
const docElement = element;
|
|
327
|
+
return restoreElementWithProperties(docElement, {
|
|
328
|
+
content: docElement.content || "",
|
|
329
|
+
}, appState);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* Converts a plain number or legacy value to a PrecisionValue object
|
|
336
|
+
* @param value - The value to convert (can be a raw number or legacy value)
|
|
337
|
+
* @param elementScope - The scope to use for the precision value
|
|
338
|
+
* @returns A properly formatted PrecisionValue object
|
|
339
|
+
*/
|
|
340
|
+
export const restorePrecisionValue = (value, elementScope, currentScope, defaultValue, fromScoped = false) => {
|
|
341
|
+
const fallbackValue = getPrecisionValueFromRaw((defaultValue !== null && defaultValue !== void 0 ? defaultValue : 0), currentScope, currentScope);
|
|
342
|
+
if (value === undefined || value === null) {
|
|
343
|
+
// Return default value with given scope
|
|
344
|
+
return fallbackValue;
|
|
345
|
+
}
|
|
346
|
+
if (typeof value === 'number') {
|
|
347
|
+
// If value is a number, check if it's finite. Otherwise, use fallback.
|
|
348
|
+
if (!Number.isFinite(value)) {
|
|
349
|
+
return fallbackValue;
|
|
350
|
+
}
|
|
351
|
+
// Legacy value (finite number), convert to PrecisionValue
|
|
352
|
+
return fromScoped
|
|
353
|
+
? getPrecisionValueFromScoped(value, elementScope, currentScope)
|
|
354
|
+
: getPrecisionValueFromRaw(value, elementScope, currentScope);
|
|
355
|
+
}
|
|
356
|
+
return getPrecisionValueFromRaw(value.value, elementScope, currentScope);
|
|
357
|
+
};
|
|
358
|
+
/**
|
|
359
|
+
* Restores a point that might have legacy format (x,y as numbers)
|
|
360
|
+
* @param point - The point to restore
|
|
361
|
+
* @param elementScope - The scope to use for the precision values
|
|
362
|
+
* @returns A properly formatted DucPoint
|
|
363
|
+
*/
|
|
364
|
+
export const restorePoint = (point, elementScope, currentScope) => {
|
|
365
|
+
if (!point) {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
// Handle x and y conversion
|
|
369
|
+
const xValue = restorePrecisionValue(point.x, elementScope, currentScope);
|
|
370
|
+
const yValue = restorePrecisionValue(point.y, elementScope, currentScope);
|
|
371
|
+
if (!xValue || !yValue) {
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
// Only keep the new DucPoint structure, ignore legacy properties
|
|
375
|
+
return {
|
|
376
|
+
x: xValue,
|
|
377
|
+
y: yValue,
|
|
378
|
+
mirroring: isValidBezierMirroringValue(point.mirroring),
|
|
379
|
+
};
|
|
380
|
+
};
|
|
381
|
+
const restoreElementPoints = ({ points: oldPoints, x, y, width, height, elementScope, currentScope, }) => {
|
|
382
|
+
// Convert input parameters to plain numbers if they're precision values
|
|
383
|
+
const validatedWidth = restorePrecisionValue(width, elementScope, currentScope, 0);
|
|
384
|
+
const validatedHeight = restorePrecisionValue(height, elementScope, currentScope, 0);
|
|
385
|
+
// Process the points array with proper conversion
|
|
386
|
+
let points = [];
|
|
387
|
+
if (typeof oldPoints === "object" && Array.isArray(oldPoints)) {
|
|
388
|
+
const migratedPoints = migratePoints(oldPoints);
|
|
389
|
+
points = migratedPoints
|
|
390
|
+
.map((point) => {
|
|
391
|
+
const restoredPoint = restorePoint(point, elementScope, currentScope);
|
|
392
|
+
if (!restoredPoint) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
return restoredPoint;
|
|
396
|
+
})
|
|
397
|
+
.filter(Boolean);
|
|
398
|
+
// Ensure we have at least 2 points for linear elements
|
|
399
|
+
if (points.length === 1) {
|
|
400
|
+
points.push({
|
|
401
|
+
x: validatedWidth,
|
|
402
|
+
y: validatedHeight,
|
|
403
|
+
mirroring: undefined,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
// Default two points
|
|
409
|
+
points = [
|
|
410
|
+
{
|
|
411
|
+
x: getPrecisionValueFromRaw(0, elementScope, currentScope),
|
|
412
|
+
y: getPrecisionValueFromRaw(0, elementScope, currentScope),
|
|
413
|
+
mirroring: undefined,
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
x: validatedWidth,
|
|
417
|
+
y: validatedHeight,
|
|
418
|
+
mirroring: undefined,
|
|
419
|
+
},
|
|
420
|
+
];
|
|
421
|
+
}
|
|
422
|
+
if (points.length === 2 &&
|
|
423
|
+
points[1] && // Should always be true if points.length === 2
|
|
424
|
+
points[1].x.value === 0 &&
|
|
425
|
+
points[1].y.value === 0 &&
|
|
426
|
+
(validatedWidth.value !== 0 || validatedHeight.value !== 0)) {
|
|
427
|
+
points[1] = Object.assign(Object.assign({}, points[1]), { x: validatedWidth, y: validatedHeight });
|
|
428
|
+
}
|
|
429
|
+
return points;
|
|
430
|
+
};
|
|
431
|
+
const restoreLinearElementPointsAndLines = ({ points: oldPoints, lines: oldLines, x, y, width, height, elementScope, currentScope, skipNormalization, }) => {
|
|
432
|
+
const validatedX = restorePrecisionValue(x, elementScope, currentScope, 0);
|
|
433
|
+
const validatedY = restorePrecisionValue(y, elementScope, currentScope, 0);
|
|
434
|
+
const validatedWidth = restorePrecisionValue(width, elementScope, currentScope, 0);
|
|
435
|
+
const validatedHeight = restorePrecisionValue(height, elementScope, currentScope, 0);
|
|
436
|
+
let points = restoreElementPoints({
|
|
437
|
+
points: oldPoints,
|
|
438
|
+
x,
|
|
439
|
+
y,
|
|
440
|
+
width,
|
|
441
|
+
height,
|
|
442
|
+
elementScope,
|
|
443
|
+
currentScope,
|
|
444
|
+
});
|
|
445
|
+
let lines = oldLines;
|
|
446
|
+
if (lines === undefined || lines === null) {
|
|
447
|
+
lines = [];
|
|
448
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
449
|
+
lines.push([
|
|
450
|
+
{ index: i, handle: null },
|
|
451
|
+
{ index: i + 1, handle: null },
|
|
452
|
+
]);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
lines = lines.map((line) => {
|
|
457
|
+
return [
|
|
458
|
+
{
|
|
459
|
+
index: line[0].index,
|
|
460
|
+
handle: line[0].handle
|
|
461
|
+
? restorePoint(line[0].handle, elementScope, currentScope)
|
|
462
|
+
: null,
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
index: line[1].index,
|
|
466
|
+
handle: line[1].handle
|
|
467
|
+
? restorePoint(line[1].handle, elementScope, currentScope)
|
|
468
|
+
: null,
|
|
469
|
+
},
|
|
470
|
+
];
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
if (!skipNormalization &&
|
|
474
|
+
points.length >= 2 &&
|
|
475
|
+
(points[0].x.value !== 0 || points[0].y.value !== 0)) {
|
|
476
|
+
const normalizedResult = getNormalizedPoints({
|
|
477
|
+
points,
|
|
478
|
+
lines,
|
|
479
|
+
x: validatedX,
|
|
480
|
+
y: validatedY,
|
|
481
|
+
scope: elementScope,
|
|
482
|
+
}, currentScope);
|
|
483
|
+
const firstPoint = points[0];
|
|
484
|
+
const lastPoint = points[points.length - 1];
|
|
485
|
+
points = normalizedResult.points;
|
|
486
|
+
lines = normalizedResult.lines;
|
|
487
|
+
if (oldPoints && oldPoints.length === points.length) {
|
|
488
|
+
if (firstPoint.x.value !== 0 || firstPoint.y.value !== 0) {
|
|
489
|
+
points[0] = Object.assign({}, points[0]);
|
|
490
|
+
}
|
|
491
|
+
if (lastPoint.x.value !== validatedWidth.value ||
|
|
492
|
+
lastPoint.y.value !== validatedHeight.value) {
|
|
493
|
+
points[points.length - 1] = Object.assign({}, points[points.length - 1]);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return { points, lines };
|
|
498
|
+
};
|
|
499
|
+
/**
|
|
500
|
+
* Repairs container element's boundElements array by removing duplicates and
|
|
501
|
+
* fixing containerId of bound elements if not present. Also removes any
|
|
502
|
+
* bound elements that do not exist in the elements array.
|
|
503
|
+
*
|
|
504
|
+
* NOTE mutates elements.
|
|
505
|
+
*/
|
|
506
|
+
const repairContainerElement = (container, elementsMap) => {
|
|
507
|
+
if (container.boundElements) {
|
|
508
|
+
const boundElements = container.boundElements.slice();
|
|
509
|
+
const boundIds = new Set();
|
|
510
|
+
container.boundElements = boundElements.reduce((acc, binding) => {
|
|
511
|
+
const boundElement = elementsMap.get(binding.id);
|
|
512
|
+
if (boundElement && !boundIds.has(binding.id)) {
|
|
513
|
+
boundIds.add(binding.id);
|
|
514
|
+
if (boundElement.isDeleted) {
|
|
515
|
+
return acc;
|
|
516
|
+
}
|
|
517
|
+
acc.push(binding);
|
|
518
|
+
if (isTextElement(boundElement) &&
|
|
519
|
+
!boundElement.containerId) {
|
|
520
|
+
boundElement.containerId =
|
|
521
|
+
container.id;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
return acc;
|
|
525
|
+
}, []);
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
/**
|
|
529
|
+
* Repairs target bound element's container's boundElements array,
|
|
530
|
+
* or removes contaienrId if container does not exist.
|
|
531
|
+
*
|
|
532
|
+
* NOTE mutates elements.
|
|
533
|
+
*/
|
|
534
|
+
const repairBoundElement = (boundElement, elementsMap) => {
|
|
535
|
+
const container = boundElement.containerId
|
|
536
|
+
? elementsMap.get(boundElement.containerId)
|
|
537
|
+
: null;
|
|
538
|
+
if (!container) {
|
|
539
|
+
boundElement.containerId = null;
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
if (boundElement.isDeleted) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
if (container.boundElements &&
|
|
546
|
+
!container.boundElements.find((binding) => binding.id === boundElement.id)) {
|
|
547
|
+
const boundElements = (container.boundElements || (container.boundElements = [])).slice();
|
|
548
|
+
boundElements.push({ type: "text", id: boundElement.id });
|
|
549
|
+
container.boundElements = boundElements;
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
/**
|
|
553
|
+
* Remove an element's frameId if its containing frame is non-existent
|
|
554
|
+
*
|
|
555
|
+
* NOTE mutates elements.
|
|
556
|
+
*/
|
|
557
|
+
const repairFrameMembership = (element, elementsMap) => {
|
|
558
|
+
if (element.frameId) {
|
|
559
|
+
const containingFrame = elementsMap.get(element.frameId);
|
|
560
|
+
if (!containingFrame) {
|
|
561
|
+
element.frameId = null;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
// Add this function to handle migrating from array-based ordering to explicit z-index
|
|
566
|
+
/**
|
|
567
|
+
* Assigns z-index values to elements based on their position in the array.
|
|
568
|
+
* This recreates the original visual stacking that was implied by array order
|
|
569
|
+
* before explicit z-index support was added.
|
|
570
|
+
*/
|
|
571
|
+
export const migrateArrayOrderToZIndex = (elements) => {
|
|
572
|
+
// Check if we need to do a migration (if any element lacks z-index)
|
|
573
|
+
const needsMigration = elements.some(el => el.zIndex === undefined || el.zIndex === null);
|
|
574
|
+
if (!needsMigration) {
|
|
575
|
+
return elements;
|
|
576
|
+
}
|
|
577
|
+
// Create a new array with explicit z-index values
|
|
578
|
+
return elements.map((element, index) => {
|
|
579
|
+
// Only update elements that don't already have a valid z-index
|
|
580
|
+
if (element.zIndex === undefined || element.zIndex === null) {
|
|
581
|
+
return Object.assign(Object.assign({}, element), { zIndex: index });
|
|
582
|
+
}
|
|
583
|
+
return element;
|
|
584
|
+
});
|
|
585
|
+
};
|
|
586
|
+
// Now update the restoreElements function to use our migration function
|
|
587
|
+
export const restoreElements = (elements, currentScope,
|
|
588
|
+
/** NOTE doesn't serve for reconciliation */
|
|
589
|
+
localElements, opts) => {
|
|
590
|
+
const existingIds = new Set();
|
|
591
|
+
const localElementsMap = localElements ? arrayToMap(localElements) : null;
|
|
592
|
+
// First restore all elements with their original properties
|
|
593
|
+
const restored = (elements || []).reduce((elements, element) => {
|
|
594
|
+
if (element.type !== "selection") {
|
|
595
|
+
let migratedElement = restoreElement(element, currentScope, opts === null || opts === void 0 ? void 0 : opts.appState);
|
|
596
|
+
const isEditing = false; // TODO: Handle editingLinearElement properly
|
|
597
|
+
if (migratedElement &&
|
|
598
|
+
(!isInvisiblySmallElement(migratedElement) || isEditing)) {
|
|
599
|
+
const localElement = localElementsMap === null || localElementsMap === void 0 ? void 0 : localElementsMap.get(element.id);
|
|
600
|
+
if (localElement && localElement.version > migratedElement.version) {
|
|
601
|
+
migratedElement = bumpVersion(migratedElement, localElement.version);
|
|
602
|
+
}
|
|
603
|
+
if (existingIds.has(migratedElement.id)) {
|
|
604
|
+
migratedElement = Object.assign(Object.assign({}, migratedElement), { id: randomId() });
|
|
605
|
+
}
|
|
606
|
+
existingIds.add(migratedElement.id);
|
|
607
|
+
elements.push(migratedElement);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
return elements;
|
|
611
|
+
}, []);
|
|
612
|
+
let restoredElements = (opts === null || opts === void 0 ? void 0 : opts.syncInvalidIndices)
|
|
613
|
+
? opts.syncInvalidIndices(restored, currentScope)
|
|
614
|
+
: restored;
|
|
615
|
+
// Migrate array ordering to explicit z-index values if needed
|
|
616
|
+
restoredElements = migrateArrayOrderToZIndex(restoredElements);
|
|
617
|
+
if (!(opts === null || opts === void 0 ? void 0 : opts.repairBindings)) {
|
|
618
|
+
return restoredElements;
|
|
619
|
+
}
|
|
620
|
+
const restoredElementsMap = arrayToMap(restoredElements);
|
|
621
|
+
for (const element of restoredElements) {
|
|
622
|
+
if (element.frameId) {
|
|
623
|
+
repairFrameMembership(element, restoredElementsMap);
|
|
624
|
+
}
|
|
625
|
+
if (isTextElement(element) && element.containerId) {
|
|
626
|
+
repairBoundElement(element, restoredElementsMap);
|
|
627
|
+
}
|
|
628
|
+
else if (element.boundElements) {
|
|
629
|
+
repairContainerElement(element, restoredElementsMap);
|
|
630
|
+
}
|
|
631
|
+
if (opts.refreshDimensions && isTextElement(element)) {
|
|
632
|
+
Object.assign(element, refreshTextDimensions(element, getContainerElement(element, restoredElementsMap), restoredElementsMap, currentScope));
|
|
633
|
+
}
|
|
634
|
+
if (isLinearElement(element)) {
|
|
635
|
+
// Helper function to check if we should keep a binding
|
|
636
|
+
const shouldKeepBinding = (binding) => {
|
|
637
|
+
if (!binding)
|
|
638
|
+
return true; // No binding, nothing to remove
|
|
639
|
+
// Keep head-only bindings
|
|
640
|
+
if (binding.head !== undefined && (!binding.elementId || binding.elementId === "")) {
|
|
641
|
+
return true;
|
|
642
|
+
}
|
|
643
|
+
// If binding has an elementId, check if it points to a valid element
|
|
644
|
+
const elementExists = restoredElementsMap.has(binding.elementId);
|
|
645
|
+
// For linear-to-linear bindings, ensure the point attribute is valid
|
|
646
|
+
if (binding.point && elementExists) {
|
|
647
|
+
const targetElement = restoredElementsMap.get(binding.elementId);
|
|
648
|
+
if (isLinearElement(targetElement)) {
|
|
649
|
+
// Check if the point index is within bounds of the target element's points
|
|
650
|
+
if (binding.point.index >= 0 &&
|
|
651
|
+
binding.point.index < targetElement.points.length &&
|
|
652
|
+
Math.abs(binding.point.offset) <= 1) {
|
|
653
|
+
return true;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
return elementExists;
|
|
658
|
+
};
|
|
659
|
+
// Process start binding
|
|
660
|
+
if (element.startBinding && !shouldKeepBinding(element.startBinding)) {
|
|
661
|
+
element.startBinding = null;
|
|
662
|
+
}
|
|
663
|
+
// Process end binding
|
|
664
|
+
if (element.endBinding && !shouldKeepBinding(element.endBinding)) {
|
|
665
|
+
element.endBinding = null;
|
|
666
|
+
}
|
|
667
|
+
// Update the bound elements reference for each valid binding
|
|
668
|
+
// This ensures both sides of the binding relationship are updated
|
|
669
|
+
const updateBoundElementsRef = (binding) => {
|
|
670
|
+
var _a;
|
|
671
|
+
if (!binding || !binding.elementId)
|
|
672
|
+
return;
|
|
673
|
+
const targetElement = restoredElementsMap.get(binding.elementId);
|
|
674
|
+
if (targetElement && !targetElement.isDeleted) {
|
|
675
|
+
// Add the linear element to the target's boundElements if not already there
|
|
676
|
+
if (!((_a = targetElement.boundElements) === null || _a === void 0 ? void 0 : _a.some((be) => be.id === element.id))) {
|
|
677
|
+
const boundElements = targetElement.boundElements || [];
|
|
678
|
+
targetElement.boundElements = [...boundElements, {
|
|
679
|
+
id: element.id,
|
|
680
|
+
type: element.type
|
|
681
|
+
}];
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
};
|
|
685
|
+
// Update bound elements references
|
|
686
|
+
updateBoundElementsRef(element.startBinding);
|
|
687
|
+
updateBoundElementsRef(element.endBinding);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
return restoredElements;
|
|
691
|
+
};
|
|
692
|
+
export const restoreDucState = (ducState, localDucState) => {
|
|
693
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
694
|
+
ducState = ducState || {};
|
|
695
|
+
const defaultDucState = getDefaultDucState();
|
|
696
|
+
const scopeExponentThreshold = isValidAppStateScopeExponentThresholdValue(ducState.scopeExponentThreshold, defaultDucState.scopeExponentThreshold);
|
|
697
|
+
const mainScope = isValidAppStateScopeValue(ducState.mainScope);
|
|
698
|
+
const zoomValue = getNormalizedZoom(isFiniteNumber(ducState.zoom)
|
|
699
|
+
? ducState.zoom
|
|
700
|
+
: (_b = (_a = ducState.zoom) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : defaultDucState.zoom.value);
|
|
701
|
+
const scope = isValidPrecisionScopeValue(zoomValue, mainScope, scopeExponentThreshold);
|
|
702
|
+
const scopedZoom = getScopedZoomValue(zoomValue, scope);
|
|
703
|
+
return Object.assign(Object.assign({}, defaultDucState), { viewBackgroundColor: (_c = ducState.viewBackgroundColor) !== null && _c !== void 0 ? _c : defaultDucState.viewBackgroundColor, scope,
|
|
704
|
+
mainScope, standard: (_d = isValidStandard(ducState.standard)) !== null && _d !== void 0 ? _d : defaultDucState.standard, scrollX: ducState.scrollX ?
|
|
705
|
+
restorePrecisionValue(ducState.scrollX, NEUTRAL_SCOPE, scope) :
|
|
706
|
+
getPrecisionValueFromRaw(defaultDucState.scrollX.value, NEUTRAL_SCOPE, scope), scrollY: ducState.scrollY ?
|
|
707
|
+
restorePrecisionValue(ducState.scrollY, NEUTRAL_SCOPE, scope) :
|
|
708
|
+
getPrecisionValueFromRaw(defaultDucState.scrollY.value, NEUTRAL_SCOPE, scope), zoom: {
|
|
709
|
+
value: zoomValue,
|
|
710
|
+
scoped: scopedZoom,
|
|
711
|
+
scaled: getScaledZoomValueForScope(scopedZoom, scope),
|
|
712
|
+
}, name: (_e = ducState.name) !== null && _e !== void 0 ? _e : defaultDucState.name, scrolledOutside: isValidBoolean(ducState.scrolledOutside, defaultDucState.scrolledOutside), selectedElementIds: (_f = ducState.selectedElementIds) !== null && _f !== void 0 ? _f : defaultDucState.selectedElementIds, selectedGroupIds: (_g = ducState.selectedGroupIds) !== null && _g !== void 0 ? _g : defaultDucState.selectedGroupIds, displayAllPointDistances: isValidBoolean(ducState.displayAllPointDistances, defaultDucState.displayAllPointDistances), displayDistanceOnDrawing: isValidBoolean(ducState.displayDistanceOnDrawing, defaultDucState.displayDistanceOnDrawing), displayAllPointCoordinates: isValidBoolean(ducState.displayAllPointCoordinates, defaultDucState.displayAllPointCoordinates), displayAllPointInfoSelected: isValidBoolean(ducState.displayAllPointInfoSelected, defaultDucState.displayAllPointInfoSelected), displayRootAxis: isValidBoolean(ducState.displayRootAxis, defaultDucState.displayRootAxis), lineBendingMode: isValidBoolean(ducState.lineBendingMode, defaultDucState.lineBendingMode), coordDecimalPlaces: isValidFinitePositiveByteValue(ducState.coordDecimalPlaces, defaultDucState.coordDecimalPlaces), activeGridSettings: (_h = ducState.activeGridSettings) !== null && _h !== void 0 ? _h : defaultDucState.activeGridSettings, activeSnapSettings: (_j = ducState.activeSnapSettings) !== null && _j !== void 0 ? _j : defaultDucState.activeSnapSettings, gridSize: getNormalizedGridSize(isFiniteNumber(ducState.gridSize) ? ducState.gridSize : defaultDucState.gridSize), gridStep: getNormalizedGridStep(isFiniteNumber(ducState.gridStep) ? ducState.gridStep : defaultDucState.gridStep), debugRendering: isValidBoolean(ducState.debugRendering, defaultDucState.debugRendering), editingLinearElement: (_k = ducState.editingLinearElement) !== null && _k !== void 0 ? _k : defaultDucState.editingLinearElement, scopeExponentThreshold, elementHovered: (_l = ducState.elementHovered) !== null && _l !== void 0 ? _l : defaultDucState.elementHovered, elementsPendingErasure: (_m = ducState.elementsPendingErasure) !== null && _m !== void 0 ? _m : defaultDucState.elementsPendingErasure, suggestedBindings: (_o = ducState.suggestedBindings) !== null && _o !== void 0 ? _o : defaultDucState.suggestedBindings, isBindingEnabled: isValidBoolean(ducState.isBindingEnabled, defaultDucState.isBindingEnabled), penMode: isValidBoolean(ducState.penMode, defaultDucState.penMode), activeTool: Object.assign(Object.assign({}, updateActiveTool(defaultDucState, ((_p = ducState.activeTool) === null || _p === void 0 ? void 0 : _p.type) && AllowedDucActiveTools[ducState.activeTool.type]
|
|
713
|
+
? ducState.activeTool
|
|
714
|
+
: { type: "selection" })), { lastActiveTool: null, locked: isValidBoolean((_q = ducState.activeTool) === null || _q === void 0 ? void 0 : _q.locked, false) }), currentItemBackground: validateBackground(ducState.currentItemBackground), currentItemStroke: validateStroke(ducState.currentItemStroke, scope, scope), currentItemStartLineHead: isValidLineHeadValue(ducState.currentItemStartLineHead), currentItemEndLineHead: isValidLineHeadValue(ducState.currentItemEndLineHead), currentItemOpacity: isValidPercentageValue(ducState.currentItemOpacity, DEFAULT_ELEMENT_PROPS.opacity) });
|
|
715
|
+
};
|
|
716
|
+
/**
|
|
717
|
+
* Creates an extended AppState restorer function that can be provided as a prop.
|
|
718
|
+
* This handles restoration of extended AppState that wraps around DucState.
|
|
719
|
+
*
|
|
720
|
+
* @param restoreExtendedProps - Function to restore extended properties beyond DucState
|
|
721
|
+
* @returns A function that can restore the full extended AppState
|
|
722
|
+
*/
|
|
723
|
+
export const createExtendedAppStateRestorer = (restoreExtendedProps) => {
|
|
724
|
+
return (extendedAppState, localExtendedAppState, restoredDucState) => {
|
|
725
|
+
// Restore the extended properties
|
|
726
|
+
const extendedProps = restoreExtendedProps(extendedAppState, localExtendedAppState, restoredDucState);
|
|
727
|
+
// Combine DucState with extended properties
|
|
728
|
+
return Object.assign(Object.assign({}, restoredDucState), extendedProps);
|
|
729
|
+
};
|
|
730
|
+
};
|
|
731
|
+
// Old restore function
|
|
732
|
+
// export const restore = (
|
|
733
|
+
// data: Pick<ImportedDataState, "appState" | "elements" | "files" | "rendererState" | "blocks" | "groups"> | null,
|
|
734
|
+
// /**
|
|
735
|
+
// * Local DucState (`this.state` or initial state from localStorage) so that we
|
|
736
|
+
// * don't overwrite local state with default values (when values not
|
|
737
|
+
// * explicitly specified).
|
|
738
|
+
// * Supply `null` if you can't get access to it.
|
|
739
|
+
// */
|
|
740
|
+
// localDucState: Partial<DucState> | null | undefined,
|
|
741
|
+
// localElements: readonly DucElement[] | null | undefined,
|
|
742
|
+
// elementsConfig?: ElementsConfig,
|
|
743
|
+
// ): RestoredDataState => {
|
|
744
|
+
// const restoredDucState = restoreDucState(data?.appState, localDucState || null);
|
|
745
|
+
// const restoredBlocks = restoreBlocks(data?.blocks, restoredDucState.scope);
|
|
746
|
+
// const restoredGroups = restoreGroups(data?.groups, restoredDucState.scope);
|
|
747
|
+
// return {
|
|
748
|
+
// elements: restoreElements(data?.elements, restoredDucState.scope, localElements, {
|
|
749
|
+
// ...elementsConfig,
|
|
750
|
+
// appState: restoredDucState
|
|
751
|
+
// }),
|
|
752
|
+
// appState: restoredDucState,
|
|
753
|
+
// files: data?.files || {},
|
|
754
|
+
// rendererState: data?.rendererState || null,
|
|
755
|
+
// blocks: restoredBlocks,
|
|
756
|
+
// groups: restoredGroups,
|
|
757
|
+
// };
|
|
758
|
+
// };
|
|
759
|
+
export const noopExtendedAppStateRestorer = (extendedAppState, localExtendedAppState, restoredDucState) => {
|
|
760
|
+
return restoredDucState;
|
|
761
|
+
};
|
|
762
|
+
/**
|
|
763
|
+
* Extended restore function that supports restoring extended AppState.
|
|
764
|
+
* This allows users of the library to provide their own AppState restoration logic.
|
|
765
|
+
*/
|
|
766
|
+
export function restore(data,
|
|
767
|
+
/**
|
|
768
|
+
* Local extended AppState for fallback values.
|
|
769
|
+
* Supply `null` if you can't get access to it.
|
|
770
|
+
*/
|
|
771
|
+
localExtendedAppState, localElements,
|
|
772
|
+
/**
|
|
773
|
+
* Extended AppState restorer function that handles the extended properties.
|
|
774
|
+
* This should be created using `createExtendedAppStateRestorer`.
|
|
775
|
+
*/
|
|
776
|
+
extendedAppStateRestorer, elementsConfig) {
|
|
777
|
+
// First restore the DucState portion
|
|
778
|
+
const restoredDucState = restoreDucState(data === null || data === void 0 ? void 0 : data.appState, localExtendedAppState);
|
|
779
|
+
// Use the provided restorer to handle the full extended AppState
|
|
780
|
+
const restoredExtendedAppState = extendedAppStateRestorer(data === null || data === void 0 ? void 0 : data.appState, localExtendedAppState, restoredDucState);
|
|
781
|
+
const restoredBlocks = restoreBlocks(data === null || data === void 0 ? void 0 : data.blocks, restoredDucState.scope);
|
|
782
|
+
const restoredGroups = restoreGroups(data === null || data === void 0 ? void 0 : data.groups, restoredDucState.scope);
|
|
783
|
+
return {
|
|
784
|
+
elements: restoreElements(data === null || data === void 0 ? void 0 : data.elements, restoredDucState.scope, localElements, Object.assign(Object.assign({}, elementsConfig), { appState: restoredDucState })),
|
|
785
|
+
appState: restoredExtendedAppState,
|
|
786
|
+
files: (data === null || data === void 0 ? void 0 : data.files) || {},
|
|
787
|
+
rendererState: (data === null || data === void 0 ? void 0 : data.rendererState) || null,
|
|
788
|
+
blocks: restoredBlocks,
|
|
789
|
+
groups: restoredGroups,
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
const restoreLibraryItem = (libraryItem, currentScope) => {
|
|
793
|
+
const elements = restoreElements(getNonDeletedElements(libraryItem.elements), currentScope, null);
|
|
794
|
+
return elements.length ? Object.assign(Object.assign({}, libraryItem), { elements }) : null;
|
|
795
|
+
};
|
|
796
|
+
export const restoreLibraryItems = (libraryItems = [], defaultStatus, currentScope) => {
|
|
797
|
+
const restoredItems = [];
|
|
798
|
+
for (const item of libraryItems) {
|
|
799
|
+
if (Array.isArray(item)) {
|
|
800
|
+
const restoredItem = restoreLibraryItem({
|
|
801
|
+
status: defaultStatus,
|
|
802
|
+
elements: item,
|
|
803
|
+
id: randomId(),
|
|
804
|
+
created: Date.now(),
|
|
805
|
+
}, currentScope);
|
|
806
|
+
if (restoredItem) {
|
|
807
|
+
restoredItems.push(restoredItem);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
else {
|
|
811
|
+
const _item = item;
|
|
812
|
+
const restoredItem = restoreLibraryItem(Object.assign(Object.assign({}, _item), { id: _item.id || randomId(), status: _item.status || defaultStatus, created: _item.created || Date.now() }), currentScope);
|
|
813
|
+
if (restoredItem) {
|
|
814
|
+
restoredItems.push(restoredItem);
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
return restoredItems;
|
|
819
|
+
};
|
|
820
|
+
export const isValidFillStyleValue = (value) => {
|
|
821
|
+
if (value === undefined || !Object.values(ELEMENT_CONTENT_PREFERENCE).includes(value))
|
|
822
|
+
return ELEMENT_CONTENT_PREFERENCE.solid;
|
|
823
|
+
return value;
|
|
824
|
+
};
|
|
825
|
+
export const isValidStrokePreferenceValue = (value) => {
|
|
826
|
+
if (value === undefined || !Object.values(STROKE_PREFERENCE).includes(value))
|
|
827
|
+
return STROKE_PREFERENCE.solid;
|
|
828
|
+
return value;
|
|
829
|
+
};
|
|
830
|
+
export const isValidVerticalAlignValue = (value) => {
|
|
831
|
+
if (value === undefined || !Object.values(VERTICAL_ALIGN).includes(value))
|
|
832
|
+
return DEFAULT_VERTICAL_ALIGN;
|
|
833
|
+
return value;
|
|
834
|
+
};
|
|
835
|
+
export const isValidTextAlignValue = (value) => {
|
|
836
|
+
if (value === undefined || !Object.values(TEXT_ALIGN).includes(value))
|
|
837
|
+
return DEFAULT_TEXT_ALIGN;
|
|
838
|
+
return value;
|
|
839
|
+
};
|
|
840
|
+
export const isValidScopeValue = (value, appState) => {
|
|
841
|
+
// First check if the provided value is valid
|
|
842
|
+
if (value !== undefined && Object.keys(ScaleFactors).includes(value)) {
|
|
843
|
+
return value;
|
|
844
|
+
}
|
|
845
|
+
// Then check appState.mainScope if available
|
|
846
|
+
if ((appState === null || appState === void 0 ? void 0 : appState.mainScope) && Object.keys(ScaleFactors).includes(appState.mainScope)) {
|
|
847
|
+
return appState.mainScope;
|
|
848
|
+
}
|
|
849
|
+
// Then check appState.scope if available
|
|
850
|
+
if ((appState === null || appState === void 0 ? void 0 : appState.scope) && Object.keys(ScaleFactors).includes(appState.scope)) {
|
|
851
|
+
return appState.scope;
|
|
852
|
+
}
|
|
853
|
+
// Finally, use the default scope as last resort
|
|
854
|
+
return NEUTRAL_SCOPE;
|
|
855
|
+
};
|
|
856
|
+
export const isValidImageStatusValue = (value) => {
|
|
857
|
+
if (value === undefined || !Object.values(IMAGE_STATUS).includes(value))
|
|
858
|
+
return IMAGE_STATUS.pending;
|
|
859
|
+
return value;
|
|
860
|
+
};
|
|
861
|
+
export const isValidLineHeadValue = (value) => {
|
|
862
|
+
if (value === undefined || value === null || !Object.values(LINE_HEAD).includes(value))
|
|
863
|
+
return null;
|
|
864
|
+
return value;
|
|
865
|
+
};
|
|
866
|
+
export const isValidZoomStepValue = (value) => {
|
|
867
|
+
if (value === undefined || value < MIN_ZOOM_STEP || value > MAX_ZOOM_STEP)
|
|
868
|
+
return DEFAULT_ZOOM_STEP;
|
|
869
|
+
return value;
|
|
870
|
+
};
|
|
871
|
+
export const isValidImageScaleValue = (value) => {
|
|
872
|
+
if (value === undefined || value[0] === 0 || value[1] === 0)
|
|
873
|
+
return [1, 1];
|
|
874
|
+
return value;
|
|
875
|
+
};
|
|
876
|
+
export const isValidBezierMirroringValue = (value) => {
|
|
877
|
+
if (value === undefined || !Object.values(BEZIER_MIRRORING).includes(value))
|
|
878
|
+
return undefined;
|
|
879
|
+
return value;
|
|
880
|
+
};
|
|
881
|
+
export const isValidSubsetValue = (value) => {
|
|
882
|
+
if (value === undefined || value === null || !Object.values(ELEMENT_SUBSET).includes(value))
|
|
883
|
+
return null;
|
|
884
|
+
return value;
|
|
885
|
+
};
|
|
886
|
+
export const isValidStrokeSidePreferenceValue = (value) => {
|
|
887
|
+
if (value === undefined || !Object.values(STROKE_SIDE_PREFERENCE).includes(value))
|
|
888
|
+
return STROKE_SIDE_PREFERENCE.top;
|
|
889
|
+
return value;
|
|
890
|
+
};
|
|
891
|
+
export const isValidStrokeCapValue = (value) => {
|
|
892
|
+
if (value === undefined || !Object.values(STROKE_CAP).includes(value))
|
|
893
|
+
return STROKE_CAP.butt;
|
|
894
|
+
return value;
|
|
895
|
+
};
|
|
896
|
+
export const isValidStrokeJoinValue = (value) => {
|
|
897
|
+
if (value === undefined || !Object.values(STROKE_JOIN).includes(value))
|
|
898
|
+
return STROKE_JOIN.miter;
|
|
899
|
+
return value;
|
|
900
|
+
};
|
|
901
|
+
export const isValidStrokeDashValue = (value) => {
|
|
902
|
+
if (!value || !Array.isArray(value))
|
|
903
|
+
return [];
|
|
904
|
+
return value;
|
|
905
|
+
};
|
|
906
|
+
export const isValidStrokeMiterLimitValue = (value) => {
|
|
907
|
+
if (value === undefined || value < 0 || value > 100)
|
|
908
|
+
return 4;
|
|
909
|
+
return value;
|
|
910
|
+
};
|
|
911
|
+
export const isValidBlendingValue = (value) => {
|
|
912
|
+
if (value === undefined || !Object.values(BLENDING).includes(value))
|
|
913
|
+
return undefined;
|
|
914
|
+
return value;
|
|
915
|
+
};
|
|
916
|
+
const getFontFamilyByName = (fontFamilyName) => {
|
|
917
|
+
if (Object.keys(FONT_FAMILY).includes(fontFamilyName)) {
|
|
918
|
+
return FONT_FAMILY[fontFamilyName];
|
|
919
|
+
}
|
|
920
|
+
return DEFAULT_FONT_FAMILY;
|
|
921
|
+
};
|
|
922
|
+
const repairBinding = (element, binding, currentScope) => {
|
|
923
|
+
var _a;
|
|
924
|
+
if (!binding) {
|
|
925
|
+
return null;
|
|
926
|
+
}
|
|
927
|
+
// If this is a head-only binding, normalize it
|
|
928
|
+
if (binding.head !== undefined && (!binding.elementId || binding.elementId === "")) {
|
|
929
|
+
return createHeadOnlyBinding(binding.head, currentScope);
|
|
930
|
+
}
|
|
931
|
+
// Get the element's scope for conversion
|
|
932
|
+
const elementScope = element.scope;
|
|
933
|
+
// Ensure we preserve the point attribute for linear-to-linear bindings
|
|
934
|
+
const pointData = binding.point ? {
|
|
935
|
+
point: {
|
|
936
|
+
index: typeof binding.point.index === 'number' ? binding.point.index : 0,
|
|
937
|
+
offset: typeof binding.point.offset === 'number' ?
|
|
938
|
+
// Clamp offset between -1 and 1
|
|
939
|
+
Math.max(-1, Math.min(1, binding.point.offset)) :
|
|
940
|
+
0
|
|
941
|
+
}
|
|
942
|
+
} : { point: null };
|
|
943
|
+
return Object.assign({ elementId: binding.elementId || "", focus: typeof binding.focus === 'number' ? binding.focus : 0, gap: restorePrecisionValue(typeof binding.gap === 'number' ? Math.max(0, binding.gap) : 0, elementScope, currentScope), head: isValidLineHeadValue(binding.head), fixedPoint: isElbowArrow(element)
|
|
944
|
+
? normalizeFixedPoint((_a = binding.fixedPoint) !== null && _a !== void 0 ? _a : { x: 0.5, y: 0.5 })
|
|
945
|
+
: null }, pointData);
|
|
946
|
+
};
|
|
947
|
+
const validateElementContent = ({ content, defaultContent, }) => {
|
|
948
|
+
var _a;
|
|
949
|
+
return {
|
|
950
|
+
preference: isValidFillStyleValue(content === null || content === void 0 ? void 0 : content.preference),
|
|
951
|
+
src: (_a = content === null || content === void 0 ? void 0 : content.src) !== null && _a !== void 0 ? _a : defaultContent.src,
|
|
952
|
+
visible: isValidBoolean(content === null || content === void 0 ? void 0 : content.visible, defaultContent.visible),
|
|
953
|
+
opacity: isValidPercentageValue(content === null || content === void 0 ? void 0 : content.opacity, defaultContent.opacity),
|
|
954
|
+
tiling: (content === null || content === void 0 ? void 0 : content.tiling) || defaultContent.tiling,
|
|
955
|
+
};
|
|
956
|
+
};
|
|
957
|
+
const validateDeprecatedElementContent = (color, defaultContent) => {
|
|
958
|
+
const oldContent = tinycolor(color);
|
|
959
|
+
return Object.assign(Object.assign({}, defaultContent), { src: isValidColor(oldContent.toHexString(), defaultContent.src), opacity: oldContent.getAlpha() });
|
|
960
|
+
};
|
|
961
|
+
const validateStrokeStyle = (style) => {
|
|
962
|
+
if (!style) {
|
|
963
|
+
return {
|
|
964
|
+
preference: STROKE_PREFERENCE.solid,
|
|
965
|
+
cap: STROKE_CAP.butt,
|
|
966
|
+
join: STROKE_JOIN.miter,
|
|
967
|
+
dash: [],
|
|
968
|
+
miterLimit: 4,
|
|
969
|
+
};
|
|
970
|
+
}
|
|
971
|
+
return {
|
|
972
|
+
preference: isValidStrokePreferenceValue(style.preference),
|
|
973
|
+
cap: isValidStrokeCapValue(style.cap),
|
|
974
|
+
join: isValidStrokeJoinValue(style.join),
|
|
975
|
+
dash: isValidStrokeDashValue(style.dash),
|
|
976
|
+
miterLimit: isValidStrokeMiterLimitValue(style.miterLimit),
|
|
977
|
+
};
|
|
978
|
+
};
|
|
979
|
+
const validateStrokeSides = (sides) => {
|
|
980
|
+
if (!sides)
|
|
981
|
+
return undefined;
|
|
982
|
+
return {
|
|
983
|
+
preference: isValidStrokeSidePreferenceValue(sides.preference),
|
|
984
|
+
values: sides.values || undefined,
|
|
985
|
+
};
|
|
986
|
+
};
|
|
987
|
+
const validateStroke = (stroke, elementScope, currentScope) => {
|
|
988
|
+
var _a;
|
|
989
|
+
return {
|
|
990
|
+
content: validateElementContent({
|
|
991
|
+
content: stroke === null || stroke === void 0 ? void 0 : stroke.content,
|
|
992
|
+
defaultContent: DEFAULT_ELEMENT_PROPS.stroke.content,
|
|
993
|
+
}),
|
|
994
|
+
placement: (_a = stroke === null || stroke === void 0 ? void 0 : stroke.placement) !== null && _a !== void 0 ? _a : STROKE_PLACEMENT.center,
|
|
995
|
+
width: restorePrecisionValue(stroke === null || stroke === void 0 ? void 0 : stroke.width, elementScope, currentScope, DEFAULT_ELEMENT_PROPS.stroke.width.value),
|
|
996
|
+
style: validateStrokeStyle(stroke === null || stroke === void 0 ? void 0 : stroke.style),
|
|
997
|
+
strokeSides: validateStrokeSides(stroke === null || stroke === void 0 ? void 0 : stroke.strokeSides),
|
|
998
|
+
};
|
|
999
|
+
};
|
|
1000
|
+
const validateBackground = (bg) => {
|
|
1001
|
+
return {
|
|
1002
|
+
content: validateElementContent({
|
|
1003
|
+
content: bg === null || bg === void 0 ? void 0 : bg.content,
|
|
1004
|
+
defaultContent: DEFAULT_ELEMENT_PROPS.background.content,
|
|
1005
|
+
}),
|
|
1006
|
+
};
|
|
1007
|
+
};
|
|
1008
|
+
/**
|
|
1009
|
+
* Validates a DucPath object and ensures its line indices form a valid closed path
|
|
1010
|
+
*/
|
|
1011
|
+
const validateDucPath = (path, element, elementScope, currentScope) => {
|
|
1012
|
+
if (!path || !path.lineIndices || !Array.isArray(path.lineIndices)) {
|
|
1013
|
+
return null;
|
|
1014
|
+
}
|
|
1015
|
+
// Validate line indices are numbers and within valid range
|
|
1016
|
+
const validLineIndices = path.lineIndices.filter((index) => typeof index === 'number' &&
|
|
1017
|
+
Number.isInteger(index) &&
|
|
1018
|
+
index >= 0 &&
|
|
1019
|
+
index < element.lines.length);
|
|
1020
|
+
if (validLineIndices.length === 0) {
|
|
1021
|
+
return null;
|
|
1022
|
+
}
|
|
1023
|
+
// Check if the line indices form a valid closed path
|
|
1024
|
+
const isValidClosedPath = validateClosedPath(element, validLineIndices);
|
|
1025
|
+
if (!isValidClosedPath) {
|
|
1026
|
+
return null;
|
|
1027
|
+
}
|
|
1028
|
+
return {
|
|
1029
|
+
lineIndices: validLineIndices,
|
|
1030
|
+
background: path.background ? validateBackground(path.background) : null,
|
|
1031
|
+
stroke: path.stroke ? validateStroke(path.stroke, elementScope, currentScope) : null,
|
|
1032
|
+
};
|
|
1033
|
+
};
|
|
1034
|
+
/**
|
|
1035
|
+
* Validates and filters path overrides for a linear element
|
|
1036
|
+
*/
|
|
1037
|
+
const validatePathOverrides = (pathOverrides, element, elementScope, currentScope) => {
|
|
1038
|
+
if (!pathOverrides || !Array.isArray(pathOverrides)) {
|
|
1039
|
+
return [];
|
|
1040
|
+
}
|
|
1041
|
+
const validPaths = [];
|
|
1042
|
+
const usedLineIndices = new Set();
|
|
1043
|
+
for (const pathOverride of pathOverrides) {
|
|
1044
|
+
const validatedPath = validateDucPath(pathOverride, element, elementScope, currentScope);
|
|
1045
|
+
if (validatedPath) {
|
|
1046
|
+
// Check for overlapping line indices with previously validated paths
|
|
1047
|
+
const hasOverlap = validatedPath.lineIndices.some(index => usedLineIndices.has(index));
|
|
1048
|
+
if (!hasOverlap) {
|
|
1049
|
+
// Mark these line indices as used
|
|
1050
|
+
validatedPath.lineIndices.forEach(index => usedLineIndices.add(index));
|
|
1051
|
+
validPaths.push(validatedPath);
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
return validPaths;
|
|
1056
|
+
};
|
|
1057
|
+
export const isValidFinitePositiveByteValue = (value, defaultValue) => {
|
|
1058
|
+
// Return default if value is undefined or not a finite number
|
|
1059
|
+
if (value === undefined || !Number.isFinite(value)) {
|
|
1060
|
+
return defaultValue;
|
|
1061
|
+
}
|
|
1062
|
+
// Round the value to the nearest integer
|
|
1063
|
+
const roundedValue = Math.round(value);
|
|
1064
|
+
// Clamp the rounded value to the byte range [0, 255]
|
|
1065
|
+
return Math.max(0, Math.min(255, roundedValue));
|
|
1066
|
+
};
|
|
1067
|
+
/**
|
|
1068
|
+
* Validates and returns a DesignStandard value, or the default if invalid.
|
|
1069
|
+
*/
|
|
1070
|
+
export const isValidStandard = (value) => {
|
|
1071
|
+
const validValues = Object.values(DESIGN_STANDARD);
|
|
1072
|
+
if (validValues.includes(value))
|
|
1073
|
+
return value;
|
|
1074
|
+
return DESIGN_STANDARD.DUC;
|
|
1075
|
+
};
|
|
1076
|
+
// Utility to validate polygon sides
|
|
1077
|
+
export const isValidPolygonSides = (sides) => {
|
|
1078
|
+
// Validate sides: integer >= 3
|
|
1079
|
+
if (sides >= 3) {
|
|
1080
|
+
if (Number.isInteger(sides)) {
|
|
1081
|
+
return sides;
|
|
1082
|
+
}
|
|
1083
|
+
else {
|
|
1084
|
+
return Math.round(sides);
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
return DEFAULT_POLYGON_SIDES;
|
|
1088
|
+
};
|
|
1089
|
+
/**
|
|
1090
|
+
* Restores the groups array for AppState, ensuring correct structure and types.
|
|
1091
|
+
*/
|
|
1092
|
+
export const restoreGroups = (groups, currentScope) => {
|
|
1093
|
+
if (!Array.isArray(groups))
|
|
1094
|
+
return [];
|
|
1095
|
+
return groups
|
|
1096
|
+
.filter((g) => g && typeof g === "object" && typeof g.id === "string" && typeof g.type === "string" && g.type === "group")
|
|
1097
|
+
.map((g) => (Object.assign(Object.assign({ id: g.id, type: "group" }, restoreDucStackProperties(g, currentScope)), { clip: isValidBoolean(g.clip, false) })));
|
|
1098
|
+
};
|
|
1099
|
+
/**
|
|
1100
|
+
* Restores common properties for elements leveraging _DucStackBase.
|
|
1101
|
+
*/
|
|
1102
|
+
export const restoreDucStackProperties = (stack, currentScope) => {
|
|
1103
|
+
const defaultStackProperties = getDefaultStackProperties();
|
|
1104
|
+
return {
|
|
1105
|
+
label: typeof stack.label === "string" ? stack.label : "",
|
|
1106
|
+
description: typeof stack.description === "string" ? stack.description : null,
|
|
1107
|
+
isCollapsed: isValidBoolean(stack.isCollapsed, defaultStackProperties.isCollapsed),
|
|
1108
|
+
noPlot: isValidBoolean(stack.noPlot, defaultStackProperties.noPlot),
|
|
1109
|
+
locked: isValidBoolean(stack.locked, defaultStackProperties.locked),
|
|
1110
|
+
isVisible: isValidBoolean(stack.isVisible, defaultStackProperties.isVisible),
|
|
1111
|
+
opacity: isValidPercentageValue(stack.opacity, defaultStackProperties.opacity),
|
|
1112
|
+
labelingColor: isValidColor(stack.labelingColor, defaultStackProperties.labelingColor),
|
|
1113
|
+
strokeOverride: stack.strokeOverride ? validateStroke(stack.strokeOverride, currentScope, currentScope) : defaultStackProperties.strokeOverride,
|
|
1114
|
+
backgroundOverride: stack.backgroundOverride ? validateBackground(stack.backgroundOverride) : defaultStackProperties.backgroundOverride,
|
|
1115
|
+
clip: isValidBoolean(stack.clip, defaultStackProperties.clip),
|
|
1116
|
+
};
|
|
1117
|
+
};
|
|
1118
|
+
/**
|
|
1119
|
+
* Restores the blocks array, ensuring correct structure and types.
|
|
1120
|
+
*/
|
|
1121
|
+
export const restoreBlocks = (blocks, currentScope) => {
|
|
1122
|
+
if (!Array.isArray(blocks))
|
|
1123
|
+
return [];
|
|
1124
|
+
return blocks
|
|
1125
|
+
.filter((b) => b && typeof b === "object" && typeof b.id === "string")
|
|
1126
|
+
.map((b) => ({
|
|
1127
|
+
id: b.id,
|
|
1128
|
+
label: typeof b.label === "string" ? b.label : "",
|
|
1129
|
+
description: typeof b.description === "string" ? b.description : undefined,
|
|
1130
|
+
version: typeof b.version === "number" ? b.version : 1,
|
|
1131
|
+
elements: restoreElements(b.elements, currentScope, null),
|
|
1132
|
+
attributes: b.attributes || undefined,
|
|
1133
|
+
}));
|
|
1134
|
+
};
|
|
1135
|
+
const restoreTableStyleProps = (style, elementScope, currentScope) => {
|
|
1136
|
+
if (!style)
|
|
1137
|
+
return undefined;
|
|
1138
|
+
const border = style.border ? {
|
|
1139
|
+
width: style.border.width ? restorePrecisionValue(style.border.width, elementScope, currentScope, 1) : undefined,
|
|
1140
|
+
dashes: style.border.dashes || undefined,
|
|
1141
|
+
color: style.border.color ? isValidColor(style.border.color) : undefined,
|
|
1142
|
+
} : undefined;
|
|
1143
|
+
const text = style.text ? {
|
|
1144
|
+
color: style.text.color ? isValidColor(style.text.color) : undefined,
|
|
1145
|
+
size: style.text.size ? restorePrecisionValue(style.text.size, elementScope, currentScope, DEFAULT_FONT_SIZE) : undefined,
|
|
1146
|
+
font: style.text.font || undefined,
|
|
1147
|
+
align: isValidTextAlignValue(style.text.align) || DEFAULT_TEXT_ALIGN,
|
|
1148
|
+
} : undefined;
|
|
1149
|
+
const restoredStyle = {};
|
|
1150
|
+
if (style.background)
|
|
1151
|
+
restoredStyle.background = style.background;
|
|
1152
|
+
if (border && Object.values(border).some(v => v !== undefined))
|
|
1153
|
+
restoredStyle.border = border;
|
|
1154
|
+
if (text && Object.values(text).some(v => v !== undefined))
|
|
1155
|
+
restoredStyle.text = text;
|
|
1156
|
+
return Object.keys(restoredStyle).length > 0 ? restoredStyle : undefined;
|
|
1157
|
+
};
|
|
1158
|
+
const restoreTableColumns = (columns, elementScope, currentScope) => {
|
|
1159
|
+
if (!columns)
|
|
1160
|
+
return {};
|
|
1161
|
+
const restoredColumns = {};
|
|
1162
|
+
for (const colId in columns) {
|
|
1163
|
+
const col = columns[colId];
|
|
1164
|
+
restoredColumns[colId] = {
|
|
1165
|
+
id: col.id,
|
|
1166
|
+
width: col.width ? restorePrecisionValue(col.width, elementScope, currentScope) : undefined,
|
|
1167
|
+
style: col.style ? restoreTableStyleProps(col.style, elementScope, currentScope) : undefined,
|
|
1168
|
+
};
|
|
1169
|
+
}
|
|
1170
|
+
return restoredColumns;
|
|
1171
|
+
};
|
|
1172
|
+
const restoreTableRows = (rows, elementScope, currentScope) => {
|
|
1173
|
+
if (!rows)
|
|
1174
|
+
return {};
|
|
1175
|
+
const restoredRows = {};
|
|
1176
|
+
for (const rowId in rows) {
|
|
1177
|
+
const row = rows[rowId];
|
|
1178
|
+
restoredRows[rowId] = {
|
|
1179
|
+
id: row.id,
|
|
1180
|
+
height: row.height ? restorePrecisionValue(row.height, elementScope, currentScope) : undefined,
|
|
1181
|
+
style: row.style ? restoreTableStyleProps(row.style, elementScope, currentScope) : undefined,
|
|
1182
|
+
};
|
|
1183
|
+
}
|
|
1184
|
+
return restoredRows;
|
|
1185
|
+
};
|
|
1186
|
+
const restoreTableCells = (cells, elementScope, currentScope) => {
|
|
1187
|
+
if (!cells)
|
|
1188
|
+
return {};
|
|
1189
|
+
const restoredCells = {};
|
|
1190
|
+
for (const cellKey in cells) {
|
|
1191
|
+
const cell = cells[cellKey];
|
|
1192
|
+
restoredCells[cellKey] = {
|
|
1193
|
+
rowId: cell.rowId,
|
|
1194
|
+
columnId: cell.columnId,
|
|
1195
|
+
data: cell.data || "",
|
|
1196
|
+
style: cell.style ? restoreTableStyleProps(cell.style, elementScope, currentScope) : undefined,
|
|
1197
|
+
};
|
|
1198
|
+
}
|
|
1199
|
+
return restoredCells;
|
|
1200
|
+
};
|
|
1201
|
+
export const isValidRadianValue = (value, defaultValue) => {
|
|
1202
|
+
if (value === undefined || !Number.isFinite(value)) {
|
|
1203
|
+
return defaultValue;
|
|
1204
|
+
}
|
|
1205
|
+
if (value > Math.PI * 2 || value < -Math.PI * 2) {
|
|
1206
|
+
return defaultValue;
|
|
1207
|
+
}
|
|
1208
|
+
return value;
|
|
1209
|
+
};
|
|
1210
|
+
/**
|
|
1211
|
+
* Validates a Percentage value.
|
|
1212
|
+
* Returns a clamped value within the <0,1> range or a provided default.
|
|
1213
|
+
*/
|
|
1214
|
+
export const isValidPercentageValue = (value, defaultValue, allowNegative = false) => {
|
|
1215
|
+
if (value === undefined || !Number.isFinite(value)) {
|
|
1216
|
+
return defaultValue;
|
|
1217
|
+
}
|
|
1218
|
+
// If the value is between 1 and 100, assume it's a percentage that needs to be divided by 100
|
|
1219
|
+
if (value > 1 && value <= 100) {
|
|
1220
|
+
value /= 100;
|
|
1221
|
+
}
|
|
1222
|
+
return Math.max(allowNegative ? -1 : 0, Math.min(1, value));
|
|
1223
|
+
};
|
|
1224
|
+
/**
|
|
1225
|
+
* Ensures the supplied easing function is valid. Falls back to the default easing otherwise.
|
|
1226
|
+
*/
|
|
1227
|
+
export const isValidFreeDrawEasingValue = (value) => {
|
|
1228
|
+
return typeof value === "function" ? value : DEFAULT_FREEDRAW_ELEMENT.easing;
|
|
1229
|
+
};
|
|
1230
|
+
/**
|
|
1231
|
+
* Restores the FreeDrawEnds structure validating its members.
|
|
1232
|
+
*/
|
|
1233
|
+
const restoreFreeDrawEnds = (ends) => {
|
|
1234
|
+
if (!ends)
|
|
1235
|
+
return null;
|
|
1236
|
+
return {
|
|
1237
|
+
cap: isValidBoolean(ends.cap, false),
|
|
1238
|
+
taper: isValidPercentageValue(ends.taper, 0),
|
|
1239
|
+
easing: isValidFreeDrawEasingValue(ends.easing),
|
|
1240
|
+
};
|
|
1241
|
+
};
|
|
1242
|
+
const isValidCutAngleValue = (value, defaultValue) => {
|
|
1243
|
+
const radian = isValidRadianValue(value, defaultValue);
|
|
1244
|
+
if (radian < 0) {
|
|
1245
|
+
return defaultValue;
|
|
1246
|
+
}
|
|
1247
|
+
return radian;
|
|
1248
|
+
};
|
|
1249
|
+
export const isValidBoolean = (value, defaultValue = false) => {
|
|
1250
|
+
return typeof value === "boolean" ? value : defaultValue;
|
|
1251
|
+
};
|
|
1252
|
+
export const isValidColor = (value, defaultValue = "#000000") => {
|
|
1253
|
+
const color = tinycolor(value);
|
|
1254
|
+
return color.isValid() ? color.toHexString() : defaultValue;
|
|
1255
|
+
};
|