@seatlayer/core 0.48.2 → 0.49.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.
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/core/seatConfidence.ts
21
+ var seatConfidence_exports = {};
22
+ __export(seatConfidence_exports, {
23
+ seatConfidenceDisclosure: () => seatConfidenceDisclosure
24
+ });
25
+ module.exports = __toCommonJS(seatConfidence_exports);
26
+ function coverageLabel(coverage) {
27
+ if (coverage === "exact-seat") return "Exact seat in the model";
28
+ if (coverage === "row-representative") return "Representative row evidence";
29
+ if (coverage === "section-representative") return "Representative section evidence";
30
+ if (coverage === "floor-representative") return "Representative floor evidence";
31
+ return "Representative venue evidence";
32
+ }
33
+ function dateLabel(value) {
34
+ if (!value) return "No assessment date supplied";
35
+ const date = new Date(value);
36
+ if (!Number.isFinite(date.getTime())) return "No assessment date supplied";
37
+ return `Assessed ${date.toISOString().slice(0, 10)}`;
38
+ }
39
+ function seatConfidenceDisclosure(evidence) {
40
+ if (!evidence) {
41
+ return {
42
+ headline: "Generated view \xB7 unverified",
43
+ model: "No geometry or event-configuration verification supplied",
44
+ reality: "No real-world check supplied",
45
+ coverage: "Selected chart seat",
46
+ provenance: "Chart-derived model",
47
+ freshness: "No evidence date supplied",
48
+ limitations: ["Generated view is not surveyed sightline truth."]
49
+ };
50
+ }
51
+ const synthetic = evidence.evidenceKind === "synthetic-model";
52
+ const model = evidence.modelLevel === "configuration-verified" ? "Event configuration verified" : evidence.modelLevel === "geometry-verified" ? "Venue geometry verified" : synthetic ? "Versioned synthetic model" : "Generated model \xB7 not verified";
53
+ const reality = evidence.realityLevel === "actual-build-checked" ? "Actual event build reality checked" : evidence.realityLevel === "comparable-build-reference" ? "Comparable-build reference only" : "No real-world check supplied";
54
+ const headline = synthetic ? "Synthetic model evidence" : evidence.modelLevel === "configuration-verified" ? "Configuration verified" : evidence.modelLevel === "geometry-verified" ? "Geometry verified" : "Generated view \xB7 unverified";
55
+ const limitations = [
56
+ ...evidence.limitations ?? [],
57
+ ...synthetic ? ["Synthetic demo; not surveyed or venue-certified."] : []
58
+ ];
59
+ const modeledTarget = evidence.modeledTarget ? `${evidence.modeledTarget.clearRayCount}/${evidence.modeledTarget.totalRayCount} target rays clear \xB7 ${evidence.modeledTarget.classification} in bounded model` : void 0;
60
+ if (modeledTarget) limitations.push("Modeled target is not a percentage of the show visible.");
61
+ return {
62
+ headline,
63
+ model,
64
+ reality,
65
+ coverage: coverageLabel(evidence.coverage),
66
+ provenance: evidence.sourceLabel ?? evidence.approvedByRole ?? "Source not supplied",
67
+ freshness: dateLabel(evidence.assessedAt),
68
+ limitations,
69
+ ...modeledTarget ? { modeledTarget } : {}
70
+ };
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ seatConfidenceDisclosure
75
+ });
76
+ //# sourceMappingURL=seatConfidence.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/seatConfidence.ts"],"sourcesContent":["import type { ResolvedSeatConfidenceEvidence, SeatConfidenceCoverage } from './types';\n\nexport interface SeatConfidenceDisclosure {\n headline: string;\n model: string;\n reality: string;\n coverage: string;\n provenance: string;\n freshness: string;\n limitations: string[];\n modeledTarget?: string;\n}\n\nfunction coverageLabel(coverage: SeatConfidenceCoverage): string {\n if (coverage === 'exact-seat') return 'Exact seat in the model';\n if (coverage === 'row-representative') return 'Representative row evidence';\n if (coverage === 'section-representative') return 'Representative section evidence';\n if (coverage === 'floor-representative') return 'Representative floor evidence';\n return 'Representative venue evidence';\n}\n\nfunction dateLabel(value: string | undefined): string {\n if (!value) return 'No assessment date supplied';\n const date = new Date(value);\n if (!Number.isFinite(date.getTime())) return 'No assessment date supplied';\n return `Assessed ${date.toISOString().slice(0, 10)}`;\n}\n\n/** Buyer-safe copy for one resolved passport. This function never upgrades a\n * generated record into a verified claim and keeps modeled and reality\n * evidence visibly separate. */\nexport function seatConfidenceDisclosure(\n evidence: ResolvedSeatConfidenceEvidence | undefined,\n): SeatConfidenceDisclosure {\n if (!evidence) {\n return {\n headline: 'Generated view · unverified',\n model: 'No geometry or event-configuration verification supplied',\n reality: 'No real-world check supplied',\n coverage: 'Selected chart seat',\n provenance: 'Chart-derived model',\n freshness: 'No evidence date supplied',\n limitations: ['Generated view is not surveyed sightline truth.'],\n };\n }\n\n const synthetic = evidence.evidenceKind === 'synthetic-model';\n const model = evidence.modelLevel === 'configuration-verified'\n ? 'Event configuration verified'\n : evidence.modelLevel === 'geometry-verified'\n ? 'Venue geometry verified'\n : synthetic\n ? 'Versioned synthetic model'\n : 'Generated model · not verified';\n const reality = evidence.realityLevel === 'actual-build-checked'\n ? 'Actual event build reality checked'\n : evidence.realityLevel === 'comparable-build-reference'\n ? 'Comparable-build reference only'\n : 'No real-world check supplied';\n const headline = synthetic\n ? 'Synthetic model evidence'\n : evidence.modelLevel === 'configuration-verified'\n ? 'Configuration verified'\n : evidence.modelLevel === 'geometry-verified'\n ? 'Geometry verified'\n : 'Generated view · unverified';\n const limitations = [\n ...(evidence.limitations ?? []),\n ...(synthetic ? ['Synthetic demo; not surveyed or venue-certified.'] : []),\n ];\n const modeledTarget = evidence.modeledTarget\n ? `${evidence.modeledTarget.clearRayCount}/${evidence.modeledTarget.totalRayCount} target rays clear · ${evidence.modeledTarget.classification} in bounded model`\n : undefined;\n if (modeledTarget) limitations.push('Modeled target is not a percentage of the show visible.');\n\n return {\n headline,\n model,\n reality,\n coverage: coverageLabel(evidence.coverage),\n provenance: evidence.sourceLabel ?? evidence.approvedByRole ?? 'Source not supplied',\n freshness: dateLabel(evidence.assessedAt),\n limitations,\n ...(modeledTarget ? { modeledTarget } : {}),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,SAAS,cAAc,UAA0C;AAC/D,MAAI,aAAa,aAAc,QAAO;AACtC,MAAI,aAAa,qBAAsB,QAAO;AAC9C,MAAI,aAAa,yBAA0B,QAAO;AAClD,MAAI,aAAa,uBAAwB,QAAO;AAChD,SAAO;AACT;AAEA,SAAS,UAAU,OAAmC;AACpD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,EAAG,QAAO;AAC7C,SAAO,YAAY,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACpD;AAKO,SAAS,yBACd,UAC0B;AAC1B,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,aAAa,CAAC,iDAAiD;AAAA,IACjE;AAAA,EACF;AAEA,QAAM,YAAY,SAAS,iBAAiB;AAC5C,QAAM,QAAQ,SAAS,eAAe,2BAClC,iCACA,SAAS,eAAe,sBACtB,4BACA,YACE,8BACA;AACR,QAAM,UAAU,SAAS,iBAAiB,yBACtC,uCACA,SAAS,iBAAiB,+BACxB,oCACA;AACN,QAAM,WAAW,YACb,6BACA,SAAS,eAAe,2BACtB,2BACA,SAAS,eAAe,sBACtB,sBACA;AACR,QAAM,cAAc;AAAA,IAClB,GAAI,SAAS,eAAe,CAAC;AAAA,IAC7B,GAAI,YAAY,CAAC,kDAAkD,IAAI,CAAC;AAAA,EAC1E;AACA,QAAM,gBAAgB,SAAS,gBAC3B,GAAG,SAAS,cAAc,aAAa,IAAI,SAAS,cAAc,aAAa,2BAAwB,SAAS,cAAc,cAAc,sBAC5I;AACJ,MAAI,cAAe,aAAY,KAAK,yDAAyD;AAE7F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,cAAc,SAAS,QAAQ;AAAA,IACzC,YAAY,SAAS,eAAe,SAAS,kBAAkB;AAAA,IAC/D,WAAW,UAAU,SAAS,UAAU;AAAA,IACxC;AAAA,IACA,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,EAC3C;AACF;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { R as ResolvedSeatConfidenceEvidence } from '../types-DR54nqKL.cjs';
2
+
3
+ interface SeatConfidenceDisclosure {
4
+ headline: string;
5
+ model: string;
6
+ reality: string;
7
+ coverage: string;
8
+ provenance: string;
9
+ freshness: string;
10
+ limitations: string[];
11
+ modeledTarget?: string;
12
+ }
13
+ /** Buyer-safe copy for one resolved passport. This function never upgrades a
14
+ * generated record into a verified claim and keeps modeled and reality
15
+ * evidence visibly separate. */
16
+ declare function seatConfidenceDisclosure(evidence: ResolvedSeatConfidenceEvidence | undefined): SeatConfidenceDisclosure;
17
+
18
+ export { type SeatConfidenceDisclosure, seatConfidenceDisclosure };
@@ -0,0 +1,18 @@
1
+ import { R as ResolvedSeatConfidenceEvidence } from '../types-DR54nqKL.js';
2
+
3
+ interface SeatConfidenceDisclosure {
4
+ headline: string;
5
+ model: string;
6
+ reality: string;
7
+ coverage: string;
8
+ provenance: string;
9
+ freshness: string;
10
+ limitations: string[];
11
+ modeledTarget?: string;
12
+ }
13
+ /** Buyer-safe copy for one resolved passport. This function never upgrades a
14
+ * generated record into a verified claim and keeps modeled and reality
15
+ * evidence visibly separate. */
16
+ declare function seatConfidenceDisclosure(evidence: ResolvedSeatConfidenceEvidence | undefined): SeatConfidenceDisclosure;
17
+
18
+ export { type SeatConfidenceDisclosure, seatConfidenceDisclosure };
@@ -0,0 +1,51 @@
1
+ // src/core/seatConfidence.ts
2
+ function coverageLabel(coverage) {
3
+ if (coverage === "exact-seat") return "Exact seat in the model";
4
+ if (coverage === "row-representative") return "Representative row evidence";
5
+ if (coverage === "section-representative") return "Representative section evidence";
6
+ if (coverage === "floor-representative") return "Representative floor evidence";
7
+ return "Representative venue evidence";
8
+ }
9
+ function dateLabel(value) {
10
+ if (!value) return "No assessment date supplied";
11
+ const date = new Date(value);
12
+ if (!Number.isFinite(date.getTime())) return "No assessment date supplied";
13
+ return `Assessed ${date.toISOString().slice(0, 10)}`;
14
+ }
15
+ function seatConfidenceDisclosure(evidence) {
16
+ if (!evidence) {
17
+ return {
18
+ headline: "Generated view \xB7 unverified",
19
+ model: "No geometry or event-configuration verification supplied",
20
+ reality: "No real-world check supplied",
21
+ coverage: "Selected chart seat",
22
+ provenance: "Chart-derived model",
23
+ freshness: "No evidence date supplied",
24
+ limitations: ["Generated view is not surveyed sightline truth."]
25
+ };
26
+ }
27
+ const synthetic = evidence.evidenceKind === "synthetic-model";
28
+ const model = evidence.modelLevel === "configuration-verified" ? "Event configuration verified" : evidence.modelLevel === "geometry-verified" ? "Venue geometry verified" : synthetic ? "Versioned synthetic model" : "Generated model \xB7 not verified";
29
+ const reality = evidence.realityLevel === "actual-build-checked" ? "Actual event build reality checked" : evidence.realityLevel === "comparable-build-reference" ? "Comparable-build reference only" : "No real-world check supplied";
30
+ const headline = synthetic ? "Synthetic model evidence" : evidence.modelLevel === "configuration-verified" ? "Configuration verified" : evidence.modelLevel === "geometry-verified" ? "Geometry verified" : "Generated view \xB7 unverified";
31
+ const limitations = [
32
+ ...evidence.limitations ?? [],
33
+ ...synthetic ? ["Synthetic demo; not surveyed or venue-certified."] : []
34
+ ];
35
+ const modeledTarget = evidence.modeledTarget ? `${evidence.modeledTarget.clearRayCount}/${evidence.modeledTarget.totalRayCount} target rays clear \xB7 ${evidence.modeledTarget.classification} in bounded model` : void 0;
36
+ if (modeledTarget) limitations.push("Modeled target is not a percentage of the show visible.");
37
+ return {
38
+ headline,
39
+ model,
40
+ reality,
41
+ coverage: coverageLabel(evidence.coverage),
42
+ provenance: evidence.sourceLabel ?? evidence.approvedByRole ?? "Source not supplied",
43
+ freshness: dateLabel(evidence.assessedAt),
44
+ limitations,
45
+ ...modeledTarget ? { modeledTarget } : {}
46
+ };
47
+ }
48
+ export {
49
+ seatConfidenceDisclosure
50
+ };
51
+ //# sourceMappingURL=seatConfidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/seatConfidence.ts"],"sourcesContent":["import type { ResolvedSeatConfidenceEvidence, SeatConfidenceCoverage } from './types';\n\nexport interface SeatConfidenceDisclosure {\n headline: string;\n model: string;\n reality: string;\n coverage: string;\n provenance: string;\n freshness: string;\n limitations: string[];\n modeledTarget?: string;\n}\n\nfunction coverageLabel(coverage: SeatConfidenceCoverage): string {\n if (coverage === 'exact-seat') return 'Exact seat in the model';\n if (coverage === 'row-representative') return 'Representative row evidence';\n if (coverage === 'section-representative') return 'Representative section evidence';\n if (coverage === 'floor-representative') return 'Representative floor evidence';\n return 'Representative venue evidence';\n}\n\nfunction dateLabel(value: string | undefined): string {\n if (!value) return 'No assessment date supplied';\n const date = new Date(value);\n if (!Number.isFinite(date.getTime())) return 'No assessment date supplied';\n return `Assessed ${date.toISOString().slice(0, 10)}`;\n}\n\n/** Buyer-safe copy for one resolved passport. This function never upgrades a\n * generated record into a verified claim and keeps modeled and reality\n * evidence visibly separate. */\nexport function seatConfidenceDisclosure(\n evidence: ResolvedSeatConfidenceEvidence | undefined,\n): SeatConfidenceDisclosure {\n if (!evidence) {\n return {\n headline: 'Generated view · unverified',\n model: 'No geometry or event-configuration verification supplied',\n reality: 'No real-world check supplied',\n coverage: 'Selected chart seat',\n provenance: 'Chart-derived model',\n freshness: 'No evidence date supplied',\n limitations: ['Generated view is not surveyed sightline truth.'],\n };\n }\n\n const synthetic = evidence.evidenceKind === 'synthetic-model';\n const model = evidence.modelLevel === 'configuration-verified'\n ? 'Event configuration verified'\n : evidence.modelLevel === 'geometry-verified'\n ? 'Venue geometry verified'\n : synthetic\n ? 'Versioned synthetic model'\n : 'Generated model · not verified';\n const reality = evidence.realityLevel === 'actual-build-checked'\n ? 'Actual event build reality checked'\n : evidence.realityLevel === 'comparable-build-reference'\n ? 'Comparable-build reference only'\n : 'No real-world check supplied';\n const headline = synthetic\n ? 'Synthetic model evidence'\n : evidence.modelLevel === 'configuration-verified'\n ? 'Configuration verified'\n : evidence.modelLevel === 'geometry-verified'\n ? 'Geometry verified'\n : 'Generated view · unverified';\n const limitations = [\n ...(evidence.limitations ?? []),\n ...(synthetic ? ['Synthetic demo; not surveyed or venue-certified.'] : []),\n ];\n const modeledTarget = evidence.modeledTarget\n ? `${evidence.modeledTarget.clearRayCount}/${evidence.modeledTarget.totalRayCount} target rays clear · ${evidence.modeledTarget.classification} in bounded model`\n : undefined;\n if (modeledTarget) limitations.push('Modeled target is not a percentage of the show visible.');\n\n return {\n headline,\n model,\n reality,\n coverage: coverageLabel(evidence.coverage),\n provenance: evidence.sourceLabel ?? evidence.approvedByRole ?? 'Source not supplied',\n freshness: dateLabel(evidence.assessedAt),\n limitations,\n ...(modeledTarget ? { modeledTarget } : {}),\n };\n}\n"],"mappings":";AAaA,SAAS,cAAc,UAA0C;AAC/D,MAAI,aAAa,aAAc,QAAO;AACtC,MAAI,aAAa,qBAAsB,QAAO;AAC9C,MAAI,aAAa,yBAA0B,QAAO;AAClD,MAAI,aAAa,uBAAwB,QAAO;AAChD,SAAO;AACT;AAEA,SAAS,UAAU,OAAmC;AACpD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,EAAG,QAAO;AAC7C,SAAO,YAAY,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AACpD;AAKO,SAAS,yBACd,UAC0B;AAC1B,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,aAAa,CAAC,iDAAiD;AAAA,IACjE;AAAA,EACF;AAEA,QAAM,YAAY,SAAS,iBAAiB;AAC5C,QAAM,QAAQ,SAAS,eAAe,2BAClC,iCACA,SAAS,eAAe,sBACtB,4BACA,YACE,8BACA;AACR,QAAM,UAAU,SAAS,iBAAiB,yBACtC,uCACA,SAAS,iBAAiB,+BACxB,oCACA;AACN,QAAM,WAAW,YACb,6BACA,SAAS,eAAe,2BACtB,2BACA,SAAS,eAAe,sBACtB,sBACA;AACR,QAAM,cAAc;AAAA,IAClB,GAAI,SAAS,eAAe,CAAC;AAAA,IAC7B,GAAI,YAAY,CAAC,kDAAkD,IAAI,CAAC;AAAA,EAC1E;AACA,QAAM,gBAAgB,SAAS,gBAC3B,GAAG,SAAS,cAAc,aAAa,IAAI,SAAS,cAAc,aAAa,2BAAwB,SAAS,cAAc,cAAc,sBAC5I;AACJ,MAAI,cAAe,aAAY,KAAK,yDAAyD;AAE7F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,cAAc,SAAS,QAAQ;AAAA,IACzC,YAAY,SAAS,eAAe,SAAS,kBAAkB;AAAA,IAC/D,WAAW,UAAU,SAAS,UAAU;AAAA,IACxC;AAAA,IACA,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,EAC3C;AACF;","names":[]}
package/dist/index.cjs CHANGED
@@ -652,7 +652,8 @@ function resolveSegmentedRowGroups(objects) {
652
652
  totalSeats,
653
653
  canonical: ordered[0],
654
654
  viewFromSeatUrl: first.viewFromSeatUrl,
655
- viewFromSeatMeta: first.viewFromSeatMeta
655
+ viewFromSeatMeta: first.viewFromSeatMeta,
656
+ confidenceEvidence: first.confidenceEvidence
656
657
  });
657
658
  adjacencyOffset += row.seatCount;
658
659
  displayOffset += row.seatCount;
@@ -1530,15 +1531,24 @@ function stackFloors(doc, spread = 900) {
1530
1531
  });
1531
1532
  return { ...doc, objects, floors: void 0 };
1532
1533
  }
1533
- function expandFloorObjects(objects, zones, fallbackFocal, viewFallback) {
1534
+ function expandFloorObjects(objects, zones, fallbackFocal, activeConfigurationId, viewFallback, confidenceFallback) {
1534
1535
  const out = [];
1535
1536
  const segmented = resolveSegmentedRowGroups(objects);
1537
+ const appliesToConfiguration = (meta) => !meta?.eventConfigurationId || meta.eventConfigurationId === activeConfigurationId;
1538
+ const confidenceApplies = (evidence) => !!evidence && (!evidence.eventConfigurationId || evidence.eventConfigurationId === activeConfigurationId);
1539
+ const resolvedConfidence = (evidence, coverage) => confidenceApplies(evidence) ? { ...evidence, coverage } : void 0;
1536
1540
  for (const obj of objects) {
1537
1541
  let seats = [];
1538
1542
  if (obj.type === "row") seats = expandRow(obj);
1539
1543
  else if (obj.type === "table") seats = expandTable(obj);
1540
1544
  else if (obj.type === "booth") seats = expandBooth(obj);
1541
1545
  if (!seats.length) continue;
1546
+ for (const seat of seats) {
1547
+ if (seat.viewUrl && !appliesToConfiguration(seat.viewMeta)) {
1548
+ seat.viewUrl = void 0;
1549
+ seat.viewMeta = void 0;
1550
+ }
1551
+ }
1542
1552
  if (obj.type === "row") {
1543
1553
  const logical = segmented.get(obj.id);
1544
1554
  if (logical) {
@@ -1551,10 +1561,12 @@ function expandFloorObjects(objects, zones, fallbackFocal, viewFallback) {
1551
1561
  if (!overrides2.get(physicalIndex)?.displayLabel) {
1552
1562
  seat.displayLabel = seatDisplayLabel(obj, physicalIndex, logical);
1553
1563
  }
1554
- if (!seat.viewUrl && logical.viewFromSeatUrl) {
1564
+ if (!seat.viewUrl && logical.viewFromSeatUrl && appliesToConfiguration(logical.viewFromSeatMeta)) {
1555
1565
  seat.viewUrl = logical.viewFromSeatUrl;
1556
1566
  seat.viewMeta = logical.viewFromSeatMeta;
1557
1567
  }
1568
+ const exactEvidence = overrides2.get(physicalIndex)?.confidenceEvidence;
1569
+ seat.confidenceEvidence = resolvedConfidence(exactEvidence, "exact-seat") ?? resolvedConfidence(obj.confidenceEvidence, "row-representative") ?? resolvedConfidence(logical.confidenceEvidence, "row-representative");
1558
1570
  }
1559
1571
  }
1560
1572
  }
@@ -1563,11 +1575,17 @@ function expandFloorObjects(objects, zones, fallbackFocal, viewFallback) {
1563
1575
  const zone = owner?.zone ? zones?.find((candidate) => candidate.id === owner.zone) : void 0;
1564
1576
  const resolvedFocal = zone?.focalPoint ?? fallbackFocal;
1565
1577
  for (const seat of seats) {
1566
- if (!seat.viewUrl && inheritedView) {
1578
+ if (!seat.confidenceEvidence) {
1579
+ const physicalIndex = Number(seat.id.slice(seat.id.lastIndexOf(":") + 1));
1580
+ const exactEvidence = (obj.type === "row" || obj.type === "table") && Number.isInteger(physicalIndex) ? obj.overrides?.find((override) => override.index === physicalIndex)?.confidenceEvidence : void 0;
1581
+ seat.confidenceEvidence = resolvedConfidence(exactEvidence, "exact-seat") ?? (obj.type === "row" ? resolvedConfidence(obj.confidenceEvidence, "row-representative") : void 0);
1582
+ }
1583
+ seat.confidenceEvidence ??= resolvedConfidence(owner?.confidenceEvidence, "section-representative") ?? (confidenceFallback ? resolvedConfidence(confidenceFallback.evidence, confidenceFallback.coverage) : void 0);
1584
+ if (!seat.viewUrl && inheritedView && appliesToConfiguration(owner?.viewFromSeatMeta)) {
1567
1585
  seat.viewUrl = inheritedView;
1568
1586
  seat.viewMeta = owner?.viewFromSeatMeta;
1569
1587
  }
1570
- if (!seat.viewUrl && viewFallback) {
1588
+ if (!seat.viewUrl && viewFallback && appliesToConfiguration(viewFallback.meta)) {
1571
1589
  seat.viewUrl = viewFallback.url;
1572
1590
  seat.viewMeta = viewFallback.meta;
1573
1591
  }
@@ -1585,7 +1603,15 @@ function expandChart(doc, options = {}) {
1585
1603
  for (const floor of doc.floors) {
1586
1604
  const floorFocal = floor.focalPoint ?? doc.focalPoint;
1587
1605
  const floorView = floor.viewFromSeatUrl ? { url: floor.viewFromSeatUrl, meta: floor.viewFromSeatMeta } : doc.viewFromSeatUrl ? { url: doc.viewFromSeatUrl, meta: doc.viewFromSeatMeta } : void 0;
1588
- const seats = expandFloorObjects(floor.objects, doc.zones, floorFocal, floorView);
1606
+ const confidenceFallback = floor.confidenceEvidence ? { evidence: floor.confidenceEvidence, coverage: "floor-representative" } : doc.confidenceEvidence ? { evidence: doc.confidenceEvidence, coverage: "venue-representative" } : void 0;
1607
+ const seats = expandFloorObjects(
1608
+ floor.objects,
1609
+ doc.zones,
1610
+ floorFocal,
1611
+ doc.eventConfigurationId,
1612
+ floorView,
1613
+ confidenceFallback
1614
+ );
1589
1615
  if (options.resolveEyeHeights !== false) {
1590
1616
  assignEyeHeights(floor.objects, floor.focalPoint ?? doc.focalPoint, floor.baseHeightM ?? 0, seats);
1591
1617
  }
@@ -1597,7 +1623,9 @@ function expandChart(doc, options = {}) {
1597
1623
  doc.objects,
1598
1624
  doc.zones,
1599
1625
  doc.focalPoint,
1600
- doc.viewFromSeatUrl ? { url: doc.viewFromSeatUrl, meta: doc.viewFromSeatMeta } : void 0
1626
+ doc.eventConfigurationId,
1627
+ doc.viewFromSeatUrl ? { url: doc.viewFromSeatUrl, meta: doc.viewFromSeatMeta } : void 0,
1628
+ doc.confidenceEvidence ? { evidence: doc.confidenceEvidence, coverage: "venue-representative" } : void 0
1601
1629
  );
1602
1630
  if (options.resolveEyeHeights !== false) {
1603
1631
  assignEyeHeights(doc.objects, doc.focalPoint, options.floorBaseHeightM ?? 0, out);