@seatlayer/core 0.29.0 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -721,6 +721,25 @@ interface SectionObject {
721
721
  * Phase A. Range 0–45°.
722
722
  */
723
723
  rake?: number;
724
+ /**
725
+ * Override how 3D builds this section's seating surface. Absent = inferred.
726
+ *
727
+ * The renderer infers structure from the authored geometry — which rows form a
728
+ * stand, where its front is, whether the rows are concentric arcs or straight
729
+ * blocks — and that inference is correct across every shipped template. But
730
+ * inference cannot be right on every chart a customer will ever draw, and when
731
+ * it is wrong the author needs a way to say so without us inventing a second
732
+ * source of truth for the geometry itself.
733
+ *
734
+ * - `flat`: a level deck, whatever the rake says. Terraces, boxes, standing.
735
+ * - `rakedRows`: level ribbons stepping back, the default for a raked stand.
736
+ *
737
+ * Deliberately NOT a "venue type" picker: the chart is authored once in 2D,
738
+ * and every 3D-only property that is not derived from that authoring is a
739
+ * source of drift. This is a per-section correction, in the same place and of
740
+ * the same kind as {@link height} and {@link rake}.
741
+ */
742
+ surfaceKind?: 'flat' | 'rakedRows';
724
743
  /** Uniform scale about the outline centroid (1 = as drawn). Scales members too. */
725
744
  scale?: number;
726
745
  /** 0–100: reviewed strength last used to bend member rows toward a common fitted arc. */
@@ -740,6 +759,19 @@ interface SectionObject {
740
759
  * Coordinate-free, so it round-trips over MCP (`update_sections`).
741
760
  */
742
761
  cornerSmoothing?: number;
762
+ /**
763
+ * Per-edge curvature, one entry per edge of {@link sourceOutline}, -100..100,
764
+ * 0 = straight. Edge `i` runs from clicked vertex `i` to vertex `i+1`.
765
+ *
766
+ * Positive bows to the LEFT of that edge's own direction. The sign is relative
767
+ * to the edge, never to world axes, which is what lets curvature survive
768
+ * rotate / flip / mirror / radial repeat with no per-operation handling.
769
+ *
770
+ * Coordinate-free like {@link cornerSmoothing}, so it round-trips over MCP and
771
+ * the server never accepts client geometry. Absent/all-zero = straight edges;
772
+ * zeroing it restores the exact clicked polygon.
773
+ */
774
+ edgeCurvature?: number[];
743
775
  /** Degrees clockwise about the outline centroid (default 0). Rotates members too. */
744
776
  rotation?: number;
745
777
  }
@@ -857,6 +889,14 @@ interface Floor {
857
889
  * by the background compatibility helpers.
858
890
  */
859
891
  backgroundImage?: ChartDoc['backgroundImage'];
892
+ /**
893
+ * Per-floor override of the venue-wide view-from-seat fallback: a single
894
+ * organizer 360° (or wide photo) inherited by every seat on THIS floor that
895
+ * has no closer row/section photo. Falls below section photos and above the
896
+ * chart-level `viewFromSeatUrl`. Absent ⇒ the venue default (then a synthetic
897
+ * panorama) applies.
898
+ */
899
+ viewFromSeatUrl?: string;
860
900
  }
861
901
  interface ReferenceCalibration {
862
902
  type: 'two-point';
@@ -994,6 +1034,13 @@ interface ReferenceSectionTraceProposal {
994
1034
  measuredVectorErrorPx: number;
995
1035
  /** Source component footprint, as a percentage of the analyzed image. */
996
1036
  sourceAreaPercent?: number;
1037
+ /**
1038
+ * The name already printed on the plan for this region, when one has been
1039
+ * read. The review proposes it instead of a generated number — a venue plan
1040
+ * names its own sections, and retyping forty of them is work the author
1041
+ * should never have to do. Absent means fall back to numbering.
1042
+ */
1043
+ visibleLabel?: string;
997
1044
  };
998
1045
  }
999
1046
  /** Read-only whole-reference proposal. The author may approve each proposal or
@@ -1007,6 +1054,9 @@ interface ReferenceSectionTraceBatchProposal {
1007
1054
  proposalCount: number;
1008
1055
  alreadyTracedCount: number;
1009
1056
  withinToleranceCount: number;
1057
+ /** Regions that could not be traced into a usable boundary and were left
1058
+ * out. One unusable region must not cost the author the rest of the plan. */
1059
+ unusableRegionCount?: number;
1010
1060
  };
1011
1061
  }
1012
1062
  /** Coordinate-free physical scale derived by server code from a confirmed
@@ -1080,6 +1130,12 @@ interface ChartDoc {
1080
1130
  family: string;
1081
1131
  targetSeats: number;
1082
1132
  };
1133
+ /**
1134
+ * Venue-wide view-from-seat fallback: a single organizer 360° (or wide photo)
1135
+ * inherited by every seat that has no closer row/section/floor photo. Absent ⇒
1136
+ * the picker generates a synthetic panorama.
1137
+ */
1138
+ viewFromSeatUrl?: string;
1083
1139
  }
1084
1140
  interface ExpandedSeat {
1085
1141
  /** Stable id: `${rowId}:${index}` */
@@ -721,6 +721,25 @@ interface SectionObject {
721
721
  * Phase A. Range 0–45°.
722
722
  */
723
723
  rake?: number;
724
+ /**
725
+ * Override how 3D builds this section's seating surface. Absent = inferred.
726
+ *
727
+ * The renderer infers structure from the authored geometry — which rows form a
728
+ * stand, where its front is, whether the rows are concentric arcs or straight
729
+ * blocks — and that inference is correct across every shipped template. But
730
+ * inference cannot be right on every chart a customer will ever draw, and when
731
+ * it is wrong the author needs a way to say so without us inventing a second
732
+ * source of truth for the geometry itself.
733
+ *
734
+ * - `flat`: a level deck, whatever the rake says. Terraces, boxes, standing.
735
+ * - `rakedRows`: level ribbons stepping back, the default for a raked stand.
736
+ *
737
+ * Deliberately NOT a "venue type" picker: the chart is authored once in 2D,
738
+ * and every 3D-only property that is not derived from that authoring is a
739
+ * source of drift. This is a per-section correction, in the same place and of
740
+ * the same kind as {@link height} and {@link rake}.
741
+ */
742
+ surfaceKind?: 'flat' | 'rakedRows';
724
743
  /** Uniform scale about the outline centroid (1 = as drawn). Scales members too. */
725
744
  scale?: number;
726
745
  /** 0–100: reviewed strength last used to bend member rows toward a common fitted arc. */
@@ -740,6 +759,19 @@ interface SectionObject {
740
759
  * Coordinate-free, so it round-trips over MCP (`update_sections`).
741
760
  */
742
761
  cornerSmoothing?: number;
762
+ /**
763
+ * Per-edge curvature, one entry per edge of {@link sourceOutline}, -100..100,
764
+ * 0 = straight. Edge `i` runs from clicked vertex `i` to vertex `i+1`.
765
+ *
766
+ * Positive bows to the LEFT of that edge's own direction. The sign is relative
767
+ * to the edge, never to world axes, which is what lets curvature survive
768
+ * rotate / flip / mirror / radial repeat with no per-operation handling.
769
+ *
770
+ * Coordinate-free like {@link cornerSmoothing}, so it round-trips over MCP and
771
+ * the server never accepts client geometry. Absent/all-zero = straight edges;
772
+ * zeroing it restores the exact clicked polygon.
773
+ */
774
+ edgeCurvature?: number[];
743
775
  /** Degrees clockwise about the outline centroid (default 0). Rotates members too. */
744
776
  rotation?: number;
745
777
  }
@@ -857,6 +889,14 @@ interface Floor {
857
889
  * by the background compatibility helpers.
858
890
  */
859
891
  backgroundImage?: ChartDoc['backgroundImage'];
892
+ /**
893
+ * Per-floor override of the venue-wide view-from-seat fallback: a single
894
+ * organizer 360° (or wide photo) inherited by every seat on THIS floor that
895
+ * has no closer row/section photo. Falls below section photos and above the
896
+ * chart-level `viewFromSeatUrl`. Absent ⇒ the venue default (then a synthetic
897
+ * panorama) applies.
898
+ */
899
+ viewFromSeatUrl?: string;
860
900
  }
861
901
  interface ReferenceCalibration {
862
902
  type: 'two-point';
@@ -994,6 +1034,13 @@ interface ReferenceSectionTraceProposal {
994
1034
  measuredVectorErrorPx: number;
995
1035
  /** Source component footprint, as a percentage of the analyzed image. */
996
1036
  sourceAreaPercent?: number;
1037
+ /**
1038
+ * The name already printed on the plan for this region, when one has been
1039
+ * read. The review proposes it instead of a generated number — a venue plan
1040
+ * names its own sections, and retyping forty of them is work the author
1041
+ * should never have to do. Absent means fall back to numbering.
1042
+ */
1043
+ visibleLabel?: string;
997
1044
  };
998
1045
  }
999
1046
  /** Read-only whole-reference proposal. The author may approve each proposal or
@@ -1007,6 +1054,9 @@ interface ReferenceSectionTraceBatchProposal {
1007
1054
  proposalCount: number;
1008
1055
  alreadyTracedCount: number;
1009
1056
  withinToleranceCount: number;
1057
+ /** Regions that could not be traced into a usable boundary and were left
1058
+ * out. One unusable region must not cost the author the rest of the plan. */
1059
+ unusableRegionCount?: number;
1010
1060
  };
1011
1061
  }
1012
1062
  /** Coordinate-free physical scale derived by server code from a confirmed
@@ -1080,6 +1130,12 @@ interface ChartDoc {
1080
1130
  family: string;
1081
1131
  targetSeats: number;
1082
1132
  };
1133
+ /**
1134
+ * Venue-wide view-from-seat fallback: a single organizer 360° (or wide photo)
1135
+ * inherited by every seat that has no closer row/section/floor photo. Absent ⇒
1136
+ * the picker generates a synthetic panorama.
1137
+ */
1138
+ viewFromSeatUrl?: string;
1083
1139
  }
1084
1140
  interface ExpandedSeat {
1085
1141
  /** Stable id: `${rowId}:${index}` */