@seatlayer/core 0.53.0 → 0.55.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.
Files changed (78) hide show
  1. package/README.md +2 -2
  2. package/dist/categoryInventory-BwarniiK.d.ts +109 -0
  3. package/dist/categoryInventory-D3qPwfKz.d.cts +109 -0
  4. package/dist/chunk-55NOSZK5.js +1 -0
  5. package/dist/chunk-6VTTBC5F.js +1 -0
  6. package/dist/chunk-6XJN4REG.js +1 -0
  7. package/dist/chunk-7PT7OQUO.js +1 -0
  8. package/dist/chunk-AQKYUJBX.js +1 -0
  9. package/dist/chunk-CXF32VPG.js +1 -0
  10. package/dist/chunk-DNGP2HDT.js +1 -0
  11. package/dist/chunk-EQM4FFN5.js +1 -0
  12. package/dist/chunk-HHM3PB66.js +1 -0
  13. package/dist/chunk-PXWKSYCK.js +1 -0
  14. package/dist/chunk-VDZ24QVV.js +1 -0
  15. package/dist/chunk-VI2CLV3Y.js +1 -0
  16. package/dist/core/chart-ops/index.cjs +1 -0
  17. package/dist/core/chart-ops/index.d.cts +1235 -0
  18. package/dist/core/chart-ops/index.d.ts +1235 -0
  19. package/dist/core/chart-ops/index.js +1 -0
  20. package/dist/core/color.cjs +1 -0
  21. package/dist/core/color.d.cts +192 -0
  22. package/dist/core/color.d.ts +192 -0
  23. package/dist/core/color.js +1 -0
  24. package/dist/core/inventory/index.cjs +1 -0
  25. package/dist/core/inventory/index.d.cts +209 -0
  26. package/dist/core/inventory/index.d.ts +209 -0
  27. package/dist/core/inventory/index.js +1 -0
  28. package/dist/core/layout/index.cjs +1 -0
  29. package/dist/core/layout/index.d.cts +376 -0
  30. package/dist/core/layout/index.d.ts +376 -0
  31. package/dist/core/layout/index.js +1 -0
  32. package/dist/core/quality/index.cjs +1 -0
  33. package/dist/core/quality/index.d.cts +132 -0
  34. package/dist/core/quality/index.d.ts +132 -0
  35. package/dist/core/quality/index.js +1 -0
  36. package/dist/core/render-assets/index.cjs +1 -0
  37. package/dist/core/render-assets/index.d.cts +99 -0
  38. package/dist/core/render-assets/index.d.ts +99 -0
  39. package/dist/core/render-assets/index.js +1 -0
  40. package/dist/core/seatConfidence.cjs +1 -1
  41. package/dist/core/seatConfidence.d.cts +1 -1
  42. package/dist/core/seatConfidence.d.ts +1 -1
  43. package/dist/core/seatConfidence.js +1 -1
  44. package/dist/core/sections/index.cjs +1 -0
  45. package/dist/core/sections/index.d.cts +346 -0
  46. package/dist/core/sections/index.d.ts +346 -0
  47. package/dist/core/sections/index.js +1 -0
  48. package/dist/{de-75NWRKC5.js → de-WPX4D3SY.js} +1 -1
  49. package/dist/{es-BM7EJ7PW.js → es-6KAJQVVX.js} +1 -1
  50. package/dist/{fr-HPXQHIB4.js → fr-5DTMRBN5.js} +1 -1
  51. package/dist/index.cjs +1 -1
  52. package/dist/index.d.cts +85 -534
  53. package/dist/index.d.ts +85 -534
  54. package/dist/index.js +1 -1
  55. package/dist/labeling-BmCzW50y.d.ts +90 -0
  56. package/dist/labeling-VfJBEOn0.d.cts +90 -0
  57. package/dist/layout-ClQkmixY.d.ts +181 -0
  58. package/dist/layout-Dlv5bIf2.d.cts +181 -0
  59. package/dist/renderedQuality-B3jgdgPO.d.ts +113 -0
  60. package/dist/renderedQuality-bDkUOyBL.d.cts +113 -0
  61. package/dist/renderer-B_g-W_QB.d.ts +534 -0
  62. package/dist/renderer-DySMcKAR.d.cts +534 -0
  63. package/dist/sections-DIzgtDjF.d.ts +123 -0
  64. package/dist/sections-Dna1nZgR.d.cts +123 -0
  65. package/dist/segmentedRowModel-BNXEUeHp.d.cts +75 -0
  66. package/dist/segmentedRowModel-COXw4GCh.d.ts +75 -0
  67. package/dist/ticketRestrictions-CzchbX_o.d.cts +72 -0
  68. package/dist/ticketRestrictions-DaYOCpEw.d.ts +72 -0
  69. package/dist/{types-tLOunI-B.d.cts → types-DTSG6_Hq.d.cts} +238 -761
  70. package/dist/{types-tLOunI-B.d.ts → types-DTSG6_Hq.d.ts} +238 -761
  71. package/dist/view3d/crossfade/panorama.d.cts +1 -1
  72. package/dist/view3d/crossfade/panorama.d.ts +1 -1
  73. package/dist/view3d/index.cjs +27 -27
  74. package/dist/view3d/index.d.cts +109 -2
  75. package/dist/view3d/index.d.ts +109 -2
  76. package/dist/view3d/index.js +26 -26
  77. package/package.json +94 -5
  78. package/dist/chunk-54A7LIL5.js +0 -1
@@ -0,0 +1,132 @@
1
+ import { A as AccessibilityType } from '../../types-DTSG6_Hq.js';
2
+ import { contrastRatioOrNull } from '../color.js';
3
+ export { R as RENDERED_QUALITY_REPORT_VERSION, a as RenderedEvidenceState, b as RenderedQualityFinding, c as RenderedQualityFindingCode, d as RenderedQualityReport, e as RenderedQualitySample, i as inspectRenderedQualityEvidence } from '../../renderedQuality-B3jgdgPO.js';
4
+ import '../../renderer-B_g-W_QB.js';
5
+
6
+ /**
7
+ * Rendering constants that quality inspection must agree with.
8
+ *
9
+ * Keep these in core rather than inside the Konva renderer so headless catalog,
10
+ * API, and MCP checks can evaluate the text that the buyer/designer will see.
11
+ */
12
+
13
+ /** Seat and table-seat labels are authored at this many chart units. */
14
+ declare const SEAT_LABEL_FONT_SIZE = 7;
15
+ /** Booth labels are authored at this many chart units. */
16
+ declare const BOOTH_LABEL_FONT_SIZE = 10;
17
+ /** GA area captions and their capacity sublabels. */
18
+ declare const GA_LABEL_FONT_SIZE = 15;
19
+ declare const GA_CAPACITY_LABEL_FONT_SIZE = 11;
20
+ /**
21
+ * GA category paint remains slightly translucent, but must still separate from
22
+ * both supported canvas surfaces by the shared 3:1 graphical-object floor.
23
+ */
24
+ declare const GA_FILL_OPACITY = 0.85;
25
+ /**
26
+ * Small labels below this rendered CSS-pixel size are hidden by LOD instead of
27
+ * being painted as unreadable specks.
28
+ */
29
+ declare const MIN_VISIBLE_BOOKABLE_LABEL_PX = 12;
30
+ /** WCAG contrast for normal/small text. */
31
+ declare const SMALL_TEXT_CONTRAST = 4.5;
32
+ /** WCAG contrast for genuinely large text. */
33
+ declare const LARGE_TEXT_CONTRAST = 3;
34
+ /** Dark/light label candidates used only when a transient rendered state
35
+ * changes the authored category fill (selected, held, unavailable, and so on). */
36
+ declare const DARK_BOOKABLE_LABEL_INK = "#000000";
37
+ declare const LIGHT_BOOKABLE_LABEL_INK = "#ffffff";
38
+ declare function minimumTextContrast(renderedFontPx: number, fontWeight?: number): number;
39
+ declare function isBookableLabelLegibleAtScale(fontSize: number, effectiveScale: number): boolean;
40
+ /** Square viewBox every accessibility glyph path's coordinates live in. */
41
+ declare const ACCESS_GLYPH_VIEWBOX = 24;
42
+ /**
43
+ * Per-accommodation pictograms drawn centred on accessible seats. Each is a
44
+ * SOLID filled silhouette in the 0 0 24 24 viewBox, designed to stay legible at
45
+ * the ~13px it renders on a seat dot (bold shapes, no thin strokes). A vector
46
+ * path renders crisply at small sizes on every platform, unlike a colour emoji
47
+ * whose canvas metrics/alignment are inconsistent cross-browser.
48
+ *
49
+ * The owner directive (OV-89): every accessibility type must render ITS OWN
50
+ * meaningful glyph so a buyer *sees* what the seat provides — the coloured ring
51
+ * still encodes the type by colour, but the on-seat icon now matches the
52
+ * filter's meaning instead of every non-wheelchair type showing a bare ring.
53
+ *
54
+ * Every path below is numerically validated (bbox centred within 12±1.5, longer
55
+ * axis spans 14–22 units) — see scratchpad/validate-glyphs.mjs in the authoring
56
+ * session. Keep any edit passing that check.
57
+ */
58
+ declare const ACCESS_TYPE_GLYPH_PATHS: Record<AccessibilityType, string>;
59
+ /**
60
+ * Legacy default access pictogram — now the ISO-style wheelchair symbol. Kept as
61
+ * an alias of {@link ACCESS_TYPE_GLYPH_PATHS.wheelchair} for back-compat with
62
+ * callers that drew a single wheelchair glyph.
63
+ */
64
+ declare const ACCESS_GLYPH_PATH: string;
65
+ /**
66
+ * The glyph to draw for a seat's PRIMARY accommodation. Wheelchair wins whenever
67
+ * present (its physical provision is the headline fact); otherwise the first
68
+ * listed accommodation is shown. Returns null for a seat with no accommodations,
69
+ * so callers can skip drawing a glyph.
70
+ */
71
+ declare function accessGlyphPath(accessibility: AccessibilityType[]): string | null;
72
+ /**
73
+ * Keep the public seat label as the inventory identity while rendering only
74
+ * its terminal seat number inside the physical marker. Generated row seats use
75
+ * `<row label>-<number>`; a custom label without that suffix remains unchanged.
76
+ */
77
+ declare function bookableMarkerLabel(publicLabel: string): string;
78
+ /** WCAG contrast for the actual opaque hex paints used by bookable labels. */
79
+ declare const renderedTextContrast: typeof contrastRatioOrNull;
80
+ /**
81
+ * Resolve the opaque pixel under text painted over a translucent category
82
+ * shape. Quality evidence must compare against this composite—not the raw
83
+ * category colour or the canvas alone.
84
+ */
85
+ declare function compositeHexOver(foreground: string, background: string, opacity: number): string;
86
+ /**
87
+ * Bookable fills can vary per category and per transient state, while a chart
88
+ * exposes only one preferred label token. Preserve that preference whenever it
89
+ * passes, then deterministically choose the strongest normal-text candidate.
90
+ */
91
+ /**
92
+ * Acceptance bar for AUTHORED seat-number / row-label colors (the theme
93
+ * swatches). These are short bold marks whose information is duplicated in
94
+ * tooltips/chips, so the WCAG non-text 3:1 bar applies — under the 4.5:1
95
+ * small-text bar a normal mid-tone category palette rejects EVERY authored
96
+ * color (each seat silently falls back to black/white and the control feels
97
+ * broken; owner-found 07-23). Auto-swap still guards anything below 3:1.
98
+ */
99
+ declare const AUTHORED_LABEL_MIN_CONTRAST = 3;
100
+ declare function stateAwareBookableLabelInk(fill: string, preferred: string, minContrast?: number): string;
101
+ declare function accessGlyphInk(fill: string): string;
102
+ /** Is a solid hex fill light enough to read as a light surface? Feedback helpers
103
+ * use this to pick the neutral section shell a label sits on. */
104
+ declare function isLightFill(fill: string): boolean;
105
+ /**
106
+ * Neutral section shell fills the renderer paints when a section has no custom
107
+ * colour, mirrored here so contrast feedback can evaluate uncoloured sections.
108
+ */
109
+ declare const LIGHT_NEUTRAL_SECTION_FILL = "#e5e7eb";
110
+ declare const DARK_NEUTRAL_SECTION_FILL = "#273142";
111
+ declare function neutralSectionFill(canvasBackground: string): string;
112
+ interface LabelInkContrastSummary {
113
+ /** Backgrounds that could be evaluated (valid preferred + valid fill hex). */
114
+ total: number;
115
+ /** Backgrounds where the preferred ink is auto-swapped for legibility. */
116
+ overridden: number;
117
+ /** `applies` = preferred survives everywhere; `overridden` = swapped
118
+ * everywhere; `mixed` = some of each; `none` = nothing evaluable. */
119
+ status: 'applies' | 'overridden' | 'mixed' | 'none';
120
+ /** Fallback ink chosen where the preferred was overridden (black/white), or
121
+ * null when nothing was overridden — names the swap in user-facing copy. */
122
+ overrideInk: string | null;
123
+ }
124
+ /**
125
+ * Feedback-only companion to {@link stateAwareBookableLabelInk}: does a preferred
126
+ * label ink survive across a set of backgrounds, or does the shared auto-contrast
127
+ * rule silently swap it for black/white on some of them? Reuses the exact same
128
+ * per-fill decision so a report can never disagree with what the renderer paints.
129
+ */
130
+ declare function summarizeLabelInkContrast(preferred: string, backgrounds: Iterable<string>, minContrast?: number): LabelInkContrastSummary;
131
+
132
+ export { ACCESS_GLYPH_PATH, ACCESS_GLYPH_VIEWBOX, ACCESS_TYPE_GLYPH_PATHS, AUTHORED_LABEL_MIN_CONTRAST, BOOTH_LABEL_FONT_SIZE, DARK_BOOKABLE_LABEL_INK, DARK_NEUTRAL_SECTION_FILL, GA_CAPACITY_LABEL_FONT_SIZE, GA_FILL_OPACITY, GA_LABEL_FONT_SIZE, LARGE_TEXT_CONTRAST, LIGHT_BOOKABLE_LABEL_INK, LIGHT_NEUTRAL_SECTION_FILL, type LabelInkContrastSummary, MIN_VISIBLE_BOOKABLE_LABEL_PX, SEAT_LABEL_FONT_SIZE, SMALL_TEXT_CONTRAST, accessGlyphInk, accessGlyphPath, bookableMarkerLabel, compositeHexOver, isBookableLabelLegibleAtScale, isLightFill, minimumTextContrast, neutralSectionFill, renderedTextContrast, stateAwareBookableLabelInk, summarizeLabelInkContrast };
@@ -0,0 +1 @@
1
+ import{a as B,b as C}from"../../chunk-HHM3PB66.js";import{A,a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d,m as g,n as h,o as i,p as j,q as k,r as l,s as n,t as q,u as s,v as u,w as v,x as w,y,z}from"../../chunk-VI2CLV3Y.js";import"../../chunk-CXF32VPG.js";export{i as ACCESS_GLYPH_PATH,g as ACCESS_GLYPH_VIEWBOX,h as ACCESS_TYPE_GLYPH_PATHS,q as AUTHORED_LABEL_MIN_CONTRAST,r as BOOTH_LABEL_FONT_SIZE,a as DARK_BOOKABLE_LABEL_INK,y as DARK_NEUTRAL_SECTION_FILL,f as GA_CAPACITY_LABEL_FONT_SIZE,m as GA_FILL_OPACITY,e as GA_LABEL_FONT_SIZE,x as LARGE_TEXT_CONTRAST,b as LIGHT_BOOKABLE_LABEL_INK,w as LIGHT_NEUTRAL_SECTION_FILL,p as MIN_VISIBLE_BOOKABLE_LABEL_PX,B as RENDERED_QUALITY_REPORT_VERSION,o as SEAT_LABEL_FONT_SIZE,t as SMALL_TEXT_CONTRAST,u as accessGlyphInk,j as accessGlyphPath,k as bookableMarkerLabel,n as compositeHexOver,C as inspectRenderedQualityEvidence,d as isBookableLabelLegibleAtScale,v as isLightFill,c as minimumTextContrast,z as neutralSectionFill,l as renderedTextContrast,s as stateAwareBookableLabelInk,A as summarizeLabelInkContrast};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var m=(e,n)=>{for(var a in n)o(e,a,{get:n[a],enumerable:!0})},I=(e,n,a,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of v(n))!y.call(e,t)&&t!==a&&o(e,t,{get:()=>n[t],enumerable:!(r=k(n,t))||r.enumerable});return e};var E=e=>I(o({},"__esModule",{value:!0}),e);var F={};m(F,{DECOR_STAMP_ICON_PATHS:()=>H,DEFAULT_SHAPE_LINE_CAP:()=>d,DEFAULT_SHAPE_LINE_ENDING:()=>c,DEFAULT_SHAPE_LINE_JOIN:()=>M,SHAPE_LINE_CAPS:()=>Z,SHAPE_LINE_ENDINGS:()=>j,SHAPE_LINE_JOINS:()=>R,VENUE_ICONS:()=>i,VENUE_ICON_GROUP_LABELS:()=>L,VENUE_ICON_GROUP_ORDER:()=>O,VENUE_ICON_KEYS:()=>P,VENUE_ICON_STROKE:()=>w,VENUE_ICON_VIEWBOX:()=>T,buyerBackgroundImage:()=>u,buyerFacingChartDoc:()=>V,hasConflictingLegacyTrace:()=>_,isOpenShapeKind:()=>f,isPointShapeKind:()=>B,isVenueIconKey:()=>A,migrateLegacyBackgroundLayersInPlace:()=>C,resolvedShapeLineStyle:()=>D,shapeArrowMetrics:()=>U,traceReferenceImage:()=>S,venueIcon:()=>h,venueIconPath:()=>N});module.exports=E(F);function S(e){return e.referenceImage??(e.backgroundImage?.assetId?e.backgroundImage:void 0)}function u(e){let n=e.backgroundImage;return n?.url&&!n.assetId?n:void 0}function s(e){let n=u(e);if(!n?.url)return;let{calibration:a,derivedScale:r,assetId:t,...b}=n;return b}function C(e){let n=a=>{let r=a.backgroundImage;r?.assetId&&(a.referenceImage||(a.referenceImage=r,a.backgroundImage=void 0))};n(e);for(let a of e.floors??[])n(a);return e}function l(e){let n={...e};return delete n.referenceScan,delete n.referenceInventorySource,delete n.referenceSource,delete n.referenceInventoryExclusion,delete n.editor,n}function x(e){let n={...e};return delete n.referenceCategorySource,n}function V(e){let n=s(e),a=e.floors?.map(r=>({...r,objects:r.objects.map(l),referenceImage:void 0,backgroundImage:s(r)}));return{...e,categories:e.categories.map(x),objects:e.objects.map(l),referenceImage:void 0,backgroundImage:n,...a?{floors:a}:{}}}function _(e){return!!e.referenceImage?.assetId&&!!e.backgroundImage?.assetId&&e.referenceImage.assetId!==e.backgroundImage.assetId}var T=24,w=2,L={facilities:"Facilities","food-drink":"Food & drink",navigation:"Getting around",accessibility:"Accessibility"},O=["facilities","food-drink","navigation","accessibility"],g="M13 4.6a1.6 1.6 0 1 0-3.2 0 1.6 1.6 0 0 0 3.2 0 M11 6.5V13h5l2.4 6 M15 16.4A5 5 0 1 1 9 11.3",i=[{key:"restroom-men",label:"Men's restroom",group:"facilities",path:"M16 7a4 4 0 1 0-8 0 4 4 0 0 0 8 0 M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"},{key:"restroom-women",label:"Women's restroom",group:"facilities",path:"M15 5a3 3 0 1 0-6 0 3 3 0 0 0 6 0 M12 8l-4 10h8l-4-10 M10 18v4 M14 18v4"},{key:"restroom-accessible",label:"Accessible restroom",group:"facilities",path:g},{key:"first-aid",label:"First aid",group:"facilities",path:"M5 4h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Z M12 8v8 M8 12h8"},{key:"coat-check",label:"Coat check",group:"facilities",path:"M12 6a2 2 0 0 1 0-4 2 2 0 0 1 1.6 3.2L21 13H3l8.4-7.8 M3 13h18"},{key:"atm",label:"ATM / cash",group:"facilities",path:"M2 6h20v12H2V6Z M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0 M6 9h.01 M18 15h.01"},{key:"info",label:"Info point",group:"facilities",path:"M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18 M12 11v5 M12 8h.01"},{key:"lost-found",label:"Lost & found",group:"facilities",path:"M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14 M16 16l5 5 M9 8.5a2 2 0 1 1 3 1.7c-.8.5-1 .8-1 1.8 M11 15h.01"},{key:"restrooms",label:"Restrooms",group:"facilities",path:"M6 3h12a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Z M12 8a2 2 0 1 0 0 4 2 2 0 0 0 0-4 M9 18v-3.5a3 3 0 0 1 6 0V18"},{key:"charging",label:"Charging point",group:"facilities",path:"M3 8h13v8H3V8Z M16 10h3v4h-3 M9.6 9l-2 3.5h2.5l-1.5 3"},{key:"smoking",label:"Smoking area",group:"facilities",path:"M2 15h13v3H2v-3Z M18 16h2 M19 8c0 1 1 1.5 1 2.5S19 12 19 13"},{key:"no-smoking",label:"No smoking",group:"facilities",path:"M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18 M5.6 5.6l12.8 12.8 M7 13h6v2H7v-2Z"},{key:"food",label:"Food",group:"food-drink",path:"M7 3v6a2 2 0 0 0 4 0V3 M9 11v10 M17 3c-1.6 1-2.2 3-2.2 6 0 2 .9 3.2 2.2 3.6V21"},{key:"bar",label:"Bar",group:"food-drink",path:"M4 5h16l-8 8-8-8Z M12 13v6 M8 20h8"},{key:"coffee",label:"Caf\xE9 / coffee",group:"food-drink",path:"M4 8h13v4a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5V8Z M17 9h2a2 2 0 0 1 0 4h-2 M8 2v2 M11 2v2 M4 21h14"},{key:"water",label:"Water / drinks",group:"food-drink",path:"M12 22a7 7 0 0 1-7-7c0-5 7-12 7-12s7 7 7 12a7 7 0 0 1-7 7Z"},{key:"merch",label:"Merch / shop",group:"food-drink",path:"M6 8h12l-1 12H7L6 8Z M9 8V6a3 3 0 0 1 6 0v2"},{key:"screen",label:"Screen",group:"facilities",path:"M3 4h18v12H3V4Z M9 20h6 M12 16v4 M10 8l4 2-4 2V8Z"},{key:"sound-booth",label:"Sound booth",group:"facilities",path:"M6 4v16 M6 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4 M12 4v16 M12 8a2 2 0 1 0 0 4 2 2 0 0 0 0-4 M18 4v16 M18 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4"},{key:"entrance",label:"Entrance",group:"navigation",path:"M14 3h5a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-5 M3 12h11 M10 8l4 4-4 4"},{key:"exit",label:"Exit",group:"navigation",path:"M10 3H5a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h5 M14 12h7 M17 8l4 4-4 4"},{key:"emergency-exit",label:"Emergency exit",group:"navigation",path:"M14 4.6a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0 M12.5 8l-3.5 2 1.6 3.6-2 4.4 M12.5 10l3.5 1.5 M9 10.5l-3.5 1 M15 12h6 M18 9l3 3-3 3"},{key:"stairs",label:"Stairs",group:"navigation",path:"M3 20v-4h4v-4h4v-4h4V4h5"},{key:"elevator",label:"Elevator",group:"navigation",path:"M5 3h14a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Z M8 11l1.5-2 1.5 2 M8 14l1.5 2 1.5-2 M15 8v8"},{key:"parking",label:"Parking",group:"navigation",path:"M5 3h14a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Z M9 17V7h4a3 3 0 0 1 0 6H9"},{key:"wheelchair",label:"Wheelchair access",group:"accessibility",path:g},{key:"hearing",label:"Hearing assistance",group:"accessibility",path:"M8 20a4 4 0 0 1-2-3c0-1 .5-2 .5-3a4.5 4.5 0 1 1 9 0c0 1.4-1 2-2 2.4-1.2.5-1.5 1-1.5 2.2 M17 6a5 5 0 0 1 1 6 M19.5 4a8 8 0 0 1 1.2 9"}],H={wall:"M3 5h18v14H3V5Z M3 9.7h18 M3 14.3h18 M9 5v4.7 M15 5v4.7 M6 9.7v4.6 M12 9.7v4.6 M18 9.7v4.6 M9 14.3v4.7 M15 14.3v4.7",rail:"M3 7h18 M4 17h16 M6 7v10 M10 7v10 M14 7v10 M18 7v10",suite:"M3 4h18v16H3V4Z M6 17v-5h12v5 M8 12V9h8v3",obstruction:"M8 3h8l-1 4v10l1 4H8l1-4V7L8 3Z M9 7h6 M9 17h6"},p=new Map(i.map(e=>[e.key,e]));function h(e){return e?p.get(e):void 0}function N(e){return h(e)?.path}function A(e){return typeof e=="string"&&p.has(e)}var P=i.map(e=>e.key);var Z=["butt","round","square"],R=["miter","round","bevel"],j=["none","arrow"],d="round",M="round",c="none";function f(e){return e==="line"||e==="polyline"}function B(e){return e==="polygon"||f(e)}function D(e){return{lineCap:e.lineCap??d,lineJoin:e.lineJoin??M,startEnding:e.startEnding??c,endEnding:e.endEnding??c}}function U(e){return{pointerLength:Math.min(48,Math.max(8,e*3)),pointerWidth:Math.min(40,Math.max(8,e*2.25))}}0&&(module.exports={DECOR_STAMP_ICON_PATHS,DEFAULT_SHAPE_LINE_CAP,DEFAULT_SHAPE_LINE_ENDING,DEFAULT_SHAPE_LINE_JOIN,SHAPE_LINE_CAPS,SHAPE_LINE_ENDINGS,SHAPE_LINE_JOINS,VENUE_ICONS,VENUE_ICON_GROUP_LABELS,VENUE_ICON_GROUP_ORDER,VENUE_ICON_KEYS,VENUE_ICON_STROKE,VENUE_ICON_VIEWBOX,buyerBackgroundImage,buyerFacingChartDoc,hasConflictingLegacyTrace,isOpenShapeKind,isPointShapeKind,isVenueIconKey,migrateLegacyBackgroundLayersInPlace,resolvedShapeLineStyle,shapeArrowMetrics,traceReferenceImage,venueIcon,venueIconPath});
@@ -0,0 +1,99 @@
1
+ import { C as ChartDoc, F as Floor, m as ChartReferenceImage, n as ShapeLineCap, o as ShapeLineEnding, p as ShapeLineJoin, q as ShapeObject } from '../../types-DTSG6_Hq.cjs';
2
+
3
+ type BackgroundOwner = Pick<ChartDoc, 'referenceImage' | 'backgroundImage'> | Pick<Floor, 'referenceImage' | 'backgroundImage'>;
4
+ /**
5
+ * Canonical trace lookup with backward compatibility for documents authored
6
+ * before reference and buyer backgrounds became separate fields.
7
+ *
8
+ * Any historical `backgroundImage` carrying a private `assetId` is trace-only,
9
+ * even if it also contains a URL. That fail-closed rule prevents a mistakenly
10
+ * persisted runtime URL from making a private blueprint buyer-visible.
11
+ */
12
+ declare function traceReferenceImage(owner: BackgroundOwner): ChartReferenceImage | undefined;
13
+ /** Buyer-visible aesthetic background; private asset-backed values fail closed. */
14
+ declare function buyerBackgroundImage(owner: BackgroundOwner): ChartReferenceImage | undefined;
15
+ /**
16
+ * Promote historical private `backgroundImage.assetId` values into the
17
+ * canonical `referenceImage` field in place. The migration is deterministic,
18
+ * keeps placement/calibration bytes intact, and never overwrites an explicit
19
+ * canonical trace. A conflicting second legacy asset is left in place so
20
+ * validation can report it instead of silently dropping authored data.
21
+ */
22
+ declare function migrateLegacyBackgroundLayersInPlace(doc: ChartDoc): ChartDoc;
23
+ /**
24
+ * Produce the document a buyer is allowed to receive. This is deliberately a
25
+ * projection, not a mutation: immutable publications and organizer drafts keep
26
+ * their trace evidence, while every public response loses the trace bitmap,
27
+ * calibration/source coordinates and object/category reference provenance.
28
+ */
29
+ declare function buyerFacingChartDoc(doc: ChartDoc): ChartDoc;
30
+ /** True when a scope has two different trace candidates and cannot be migrated safely. */
31
+ declare function hasConflictingLegacyTrace(owner: BackgroundOwner): boolean;
32
+
33
+ /** Logical grouping for the Designer palette (plain-language section headers). */
34
+ type VenueIconGroup = 'facilities' | 'food-drink' | 'navigation' | 'accessibility';
35
+ interface VenueIcon {
36
+ /** Stable registry key persisted on the object as `iconKey`. Never shown to users. */
37
+ key: string;
38
+ /** Plain-language name (button label, tooltip, accessible name). */
39
+ label: string;
40
+ group: VenueIconGroup;
41
+ /** SVG path `d` in a 0 0 24 24 viewBox, stroke-styled (fill:none). */
42
+ path: string;
43
+ }
44
+ /** The viewBox side length every icon path is authored against. */
45
+ declare const VENUE_ICON_VIEWBOX = 24;
46
+ /** Stroke width in viewBox units; scales with the object's size like a font. */
47
+ declare const VENUE_ICON_STROKE = 2;
48
+ /** Human-readable section headers for the palette groups. */
49
+ declare const VENUE_ICON_GROUP_LABELS: Record<VenueIconGroup, string>;
50
+ /** Display order of the groups in the palette. */
51
+ declare const VENUE_ICON_GROUP_ORDER: VenueIconGroup[];
52
+ declare const VENUE_ICONS: VenueIcon[];
53
+ /**
54
+ * Décor-stamp-only glyphs. Some Designer décor presets (e.g. a structural wall)
55
+ * are not buyer-placeable wayfinding markers, so they must NOT appear in the
56
+ * IconPalette / VENUE_ICONS registry — but their flyout stamp button still needs
57
+ * a vector preview in the same stroke language so the Décor row reads as one
58
+ * system (OV-82). Authored against the same 0 0 24 24 viewBox / 2-unit stroke.
59
+ */
60
+ declare const DECOR_STAMP_ICON_PATHS: Record<string, string>;
61
+ /** Resolve a registry entry by key, or undefined for legacy/unknown keys. */
62
+ declare function venueIcon(key: string | undefined | null): VenueIcon | undefined;
63
+ /** Vector path for a key, or undefined when the key is not in the registry. */
64
+ declare function venueIconPath(key: string | undefined | null): string | undefined;
65
+ /** True when `key` names a real registry icon (MCP/validation fail-closed guard). */
66
+ declare function isVenueIconKey(key: unknown): key is string;
67
+ /** Every valid registry key (for MCP enum + validation messages). */
68
+ declare const VENUE_ICON_KEYS: string[];
69
+
70
+ declare const SHAPE_LINE_CAPS: readonly ["butt", "round", "square"];
71
+ declare const SHAPE_LINE_JOINS: readonly ["miter", "round", "bevel"];
72
+ declare const SHAPE_LINE_ENDINGS: readonly ["none", "arrow"];
73
+ /** These defaults match the renderer behaviour that predates persisted line styling. */
74
+ declare const DEFAULT_SHAPE_LINE_CAP: ShapeLineCap;
75
+ declare const DEFAULT_SHAPE_LINE_JOIN: ShapeLineJoin;
76
+ declare const DEFAULT_SHAPE_LINE_ENDING: ShapeLineEnding;
77
+ declare function isOpenShapeKind(kind: ShapeObject['kind']): kind is 'line' | 'polyline';
78
+ /**
79
+ * Shape kinds whose geometry is a `points[]` array, so they can be edited
80
+ * vertex by vertex. Lives here rather than in the Designer because both the
81
+ * controller's boundary/handle code and `controller/shapesTextDecorFacet` need
82
+ * the same answer, and the Designer previously carried a private copy of the
83
+ * open-shape rule alongside `isOpenShapeKind`.
84
+ */
85
+ declare function isPointShapeKind(kind: ShapeObject['kind']): kind is 'polygon' | 'line' | 'polyline';
86
+ declare function resolvedShapeLineStyle(shape: Pick<ShapeObject, 'lineCap' | 'lineJoin' | 'startEnding' | 'endEnding'>): {
87
+ lineCap: ShapeLineCap;
88
+ lineJoin: ShapeLineJoin;
89
+ startEnding: ShapeLineEnding;
90
+ endEnding: ShapeLineEnding;
91
+ };
92
+ /** Keep arrowheads legible for hairlines without letting a 40-unit stroke
93
+ * create unbounded decorations. Both renderers consume this exact contract. */
94
+ declare function shapeArrowMetrics(strokeWidth: number): {
95
+ pointerLength: number;
96
+ pointerWidth: number;
97
+ };
98
+
99
+ export { DECOR_STAMP_ICON_PATHS, DEFAULT_SHAPE_LINE_CAP, DEFAULT_SHAPE_LINE_ENDING, DEFAULT_SHAPE_LINE_JOIN, SHAPE_LINE_CAPS, SHAPE_LINE_ENDINGS, SHAPE_LINE_JOINS, VENUE_ICONS, VENUE_ICON_GROUP_LABELS, VENUE_ICON_GROUP_ORDER, VENUE_ICON_KEYS, VENUE_ICON_STROKE, VENUE_ICON_VIEWBOX, type VenueIcon, type VenueIconGroup, buyerBackgroundImage, buyerFacingChartDoc, hasConflictingLegacyTrace, isOpenShapeKind, isPointShapeKind, isVenueIconKey, migrateLegacyBackgroundLayersInPlace, resolvedShapeLineStyle, shapeArrowMetrics, traceReferenceImage, venueIcon, venueIconPath };
@@ -0,0 +1,99 @@
1
+ import { C as ChartDoc, F as Floor, m as ChartReferenceImage, n as ShapeLineCap, o as ShapeLineEnding, p as ShapeLineJoin, q as ShapeObject } from '../../types-DTSG6_Hq.js';
2
+
3
+ type BackgroundOwner = Pick<ChartDoc, 'referenceImage' | 'backgroundImage'> | Pick<Floor, 'referenceImage' | 'backgroundImage'>;
4
+ /**
5
+ * Canonical trace lookup with backward compatibility for documents authored
6
+ * before reference and buyer backgrounds became separate fields.
7
+ *
8
+ * Any historical `backgroundImage` carrying a private `assetId` is trace-only,
9
+ * even if it also contains a URL. That fail-closed rule prevents a mistakenly
10
+ * persisted runtime URL from making a private blueprint buyer-visible.
11
+ */
12
+ declare function traceReferenceImage(owner: BackgroundOwner): ChartReferenceImage | undefined;
13
+ /** Buyer-visible aesthetic background; private asset-backed values fail closed. */
14
+ declare function buyerBackgroundImage(owner: BackgroundOwner): ChartReferenceImage | undefined;
15
+ /**
16
+ * Promote historical private `backgroundImage.assetId` values into the
17
+ * canonical `referenceImage` field in place. The migration is deterministic,
18
+ * keeps placement/calibration bytes intact, and never overwrites an explicit
19
+ * canonical trace. A conflicting second legacy asset is left in place so
20
+ * validation can report it instead of silently dropping authored data.
21
+ */
22
+ declare function migrateLegacyBackgroundLayersInPlace(doc: ChartDoc): ChartDoc;
23
+ /**
24
+ * Produce the document a buyer is allowed to receive. This is deliberately a
25
+ * projection, not a mutation: immutable publications and organizer drafts keep
26
+ * their trace evidence, while every public response loses the trace bitmap,
27
+ * calibration/source coordinates and object/category reference provenance.
28
+ */
29
+ declare function buyerFacingChartDoc(doc: ChartDoc): ChartDoc;
30
+ /** True when a scope has two different trace candidates and cannot be migrated safely. */
31
+ declare function hasConflictingLegacyTrace(owner: BackgroundOwner): boolean;
32
+
33
+ /** Logical grouping for the Designer palette (plain-language section headers). */
34
+ type VenueIconGroup = 'facilities' | 'food-drink' | 'navigation' | 'accessibility';
35
+ interface VenueIcon {
36
+ /** Stable registry key persisted on the object as `iconKey`. Never shown to users. */
37
+ key: string;
38
+ /** Plain-language name (button label, tooltip, accessible name). */
39
+ label: string;
40
+ group: VenueIconGroup;
41
+ /** SVG path `d` in a 0 0 24 24 viewBox, stroke-styled (fill:none). */
42
+ path: string;
43
+ }
44
+ /** The viewBox side length every icon path is authored against. */
45
+ declare const VENUE_ICON_VIEWBOX = 24;
46
+ /** Stroke width in viewBox units; scales with the object's size like a font. */
47
+ declare const VENUE_ICON_STROKE = 2;
48
+ /** Human-readable section headers for the palette groups. */
49
+ declare const VENUE_ICON_GROUP_LABELS: Record<VenueIconGroup, string>;
50
+ /** Display order of the groups in the palette. */
51
+ declare const VENUE_ICON_GROUP_ORDER: VenueIconGroup[];
52
+ declare const VENUE_ICONS: VenueIcon[];
53
+ /**
54
+ * Décor-stamp-only glyphs. Some Designer décor presets (e.g. a structural wall)
55
+ * are not buyer-placeable wayfinding markers, so they must NOT appear in the
56
+ * IconPalette / VENUE_ICONS registry — but their flyout stamp button still needs
57
+ * a vector preview in the same stroke language so the Décor row reads as one
58
+ * system (OV-82). Authored against the same 0 0 24 24 viewBox / 2-unit stroke.
59
+ */
60
+ declare const DECOR_STAMP_ICON_PATHS: Record<string, string>;
61
+ /** Resolve a registry entry by key, or undefined for legacy/unknown keys. */
62
+ declare function venueIcon(key: string | undefined | null): VenueIcon | undefined;
63
+ /** Vector path for a key, or undefined when the key is not in the registry. */
64
+ declare function venueIconPath(key: string | undefined | null): string | undefined;
65
+ /** True when `key` names a real registry icon (MCP/validation fail-closed guard). */
66
+ declare function isVenueIconKey(key: unknown): key is string;
67
+ /** Every valid registry key (for MCP enum + validation messages). */
68
+ declare const VENUE_ICON_KEYS: string[];
69
+
70
+ declare const SHAPE_LINE_CAPS: readonly ["butt", "round", "square"];
71
+ declare const SHAPE_LINE_JOINS: readonly ["miter", "round", "bevel"];
72
+ declare const SHAPE_LINE_ENDINGS: readonly ["none", "arrow"];
73
+ /** These defaults match the renderer behaviour that predates persisted line styling. */
74
+ declare const DEFAULT_SHAPE_LINE_CAP: ShapeLineCap;
75
+ declare const DEFAULT_SHAPE_LINE_JOIN: ShapeLineJoin;
76
+ declare const DEFAULT_SHAPE_LINE_ENDING: ShapeLineEnding;
77
+ declare function isOpenShapeKind(kind: ShapeObject['kind']): kind is 'line' | 'polyline';
78
+ /**
79
+ * Shape kinds whose geometry is a `points[]` array, so they can be edited
80
+ * vertex by vertex. Lives here rather than in the Designer because both the
81
+ * controller's boundary/handle code and `controller/shapesTextDecorFacet` need
82
+ * the same answer, and the Designer previously carried a private copy of the
83
+ * open-shape rule alongside `isOpenShapeKind`.
84
+ */
85
+ declare function isPointShapeKind(kind: ShapeObject['kind']): kind is 'polygon' | 'line' | 'polyline';
86
+ declare function resolvedShapeLineStyle(shape: Pick<ShapeObject, 'lineCap' | 'lineJoin' | 'startEnding' | 'endEnding'>): {
87
+ lineCap: ShapeLineCap;
88
+ lineJoin: ShapeLineJoin;
89
+ startEnding: ShapeLineEnding;
90
+ endEnding: ShapeLineEnding;
91
+ };
92
+ /** Keep arrowheads legible for hairlines without letting a 40-unit stroke
93
+ * create unbounded decorations. Both renderers consume this exact contract. */
94
+ declare function shapeArrowMetrics(strokeWidth: number): {
95
+ pointerLength: number;
96
+ pointerWidth: number;
97
+ };
98
+
99
+ export { DECOR_STAMP_ICON_PATHS, DEFAULT_SHAPE_LINE_CAP, DEFAULT_SHAPE_LINE_ENDING, DEFAULT_SHAPE_LINE_JOIN, SHAPE_LINE_CAPS, SHAPE_LINE_ENDINGS, SHAPE_LINE_JOINS, VENUE_ICONS, VENUE_ICON_GROUP_LABELS, VENUE_ICON_GROUP_ORDER, VENUE_ICON_KEYS, VENUE_ICON_STROKE, VENUE_ICON_VIEWBOX, type VenueIcon, type VenueIconGroup, buyerBackgroundImage, buyerFacingChartDoc, hasConflictingLegacyTrace, isOpenShapeKind, isPointShapeKind, isVenueIconKey, migrateLegacyBackgroundLayersInPlace, resolvedShapeLineStyle, shapeArrowMetrics, traceReferenceImage, venueIcon, venueIconPath };
@@ -0,0 +1 @@
1
+ import{a as o,b as r,c as e,d as f,e as m,f as p,g as t,h as x,i as a,j as b,k as c,l as d,m as g,n as h,o as i,p as j,q as k,r as l,s as n,t as q,u as s,v as u,w as v,x as w,y}from"../../chunk-DNGP2HDT.js";export{c as DECOR_STAMP_ICON_PATHS,n as DEFAULT_SHAPE_LINE_CAP,s as DEFAULT_SHAPE_LINE_ENDING,q as DEFAULT_SHAPE_LINE_JOIN,j as SHAPE_LINE_CAPS,l as SHAPE_LINE_ENDINGS,k as SHAPE_LINE_JOINS,b as VENUE_ICONS,x as VENUE_ICON_GROUP_LABELS,a as VENUE_ICON_GROUP_ORDER,i as VENUE_ICON_KEYS,t as VENUE_ICON_STROKE,p as VENUE_ICON_VIEWBOX,r as buyerBackgroundImage,f as buyerFacingChartDoc,m as hasConflictingLegacyTrace,u as isOpenShapeKind,v as isPointShapeKind,h as isVenueIconKey,e as migrateLegacyBackgroundLayersInPlace,w as resolvedShapeLineStyle,y as shapeArrowMetrics,o as traceReferenceImage,d as venueIcon,g as venueIconPath};
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var u=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},f=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of l(t))!c.call(e,i)&&i!==r&&s(e,i,{get:()=>t[i],enumerable:!(n=d(t,i))||n.enumerable});return e};var v=e=>f(s({},"__esModule",{value:!0}),e);var y={};u(y,{seatConfidenceDisclosure:()=>p});module.exports=v(y);function m(e){return e==="exact-seat"?"Exact seat in the model":e==="row-representative"?"Representative row evidence":e==="section-representative"?"Representative section evidence":e==="floor-representative"?"Representative floor evidence":"Representative venue evidence"}function g(e){if(!e)return"No assessment date supplied";let t=new Date(e);return Number.isFinite(t.getTime())?`Assessed ${t.toISOString().slice(0,10)}`:"No assessment date supplied"}function p(e){if(!e)return{headline:"Generated view \xB7 unverified",model:"No geometry or event-configuration verification supplied",reality:"No real-world check supplied",coverage:"Selected chart seat",provenance:"Chart-derived model",freshness:"No evidence date supplied",limitations:["Generated view is not surveyed sightline truth."]};let t=e.evidenceKind==="synthetic-model",r=e.modelLevel==="configuration-verified"?"Event configuration verified":e.modelLevel==="geometry-verified"?"Venue geometry verified":t?"Versioned synthetic model":"Generated model \xB7 not verified",n=e.realityLevel==="actual-build-checked"?"Actual event build reality checked":e.realityLevel==="comparable-build-reference"?"Comparable-build reference only":"No real-world check supplied",i=t?"Synthetic model evidence":e.modelLevel==="configuration-verified"?"Configuration verified":e.modelLevel==="geometry-verified"?"Geometry verified":"Generated view \xB7 unverified",a=[...e.limitations??[],...t?["Synthetic demo; not surveyed or venue-certified."]:[]],o=e.modeledTarget?`${e.modeledTarget.clearRayCount}/${e.modeledTarget.totalRayCount} target rays clear \xB7 ${e.modeledTarget.classification} in bounded model`:void 0;return o&&a.push("Modeled target is not a percentage of the show visible."),{headline:i,model:r,reality:n,coverage:m(e.coverage),provenance:e.sourceLabel??e.approvedByRole??"Source not supplied",freshness:g(e.assessedAt),limitations:a,...o?{modeledTarget:o}:{}}}0&&(module.exports={seatConfidenceDisclosure});
1
+ "use strict";var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},u=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of l(t))!c.call(e,i)&&i!==r&&s(e,i,{get:()=>t[i],enumerable:!(n=d(t,i))||n.enumerable});return e};var m=e=>u(s({},"__esModule",{value:!0}),e);var y={};f(y,{seatConfidenceDisclosure:()=>p});module.exports=m(y);function v(e){return e==="exact-seat"?"Exact seat in the model":e==="row-representative"?"Representative row evidence":e==="section-representative"?"Representative section evidence":e==="floor-representative"?"Representative floor evidence":"Representative venue evidence"}function g(e){if(!e)return"No assessment date supplied";let t=new Date(e);return Number.isFinite(t.getTime())?`Assessed ${t.toISOString().slice(0,10)}`:"No assessment date supplied"}function p(e){if(!e)return{headline:"Generated view \xB7 unverified",model:"No geometry or event-configuration verification supplied",reality:"No real-world check supplied",coverage:"Selected chart seat",provenance:"Chart-derived model",freshness:"No evidence date supplied",limitations:["Generated view is not surveyed sightline truth."]};let t=e.evidenceKind==="synthetic-model",r=e.modelLevel==="configuration-verified"?"Event configuration verified":e.modelLevel==="geometry-verified"?"Venue geometry verified":t?"Versioned synthetic model":"Generated model \xB7 not verified",n=e.realityLevel==="actual-build-checked"?"Actual event build reality checked":e.realityLevel==="comparable-build-reference"?"Comparable-build reference only":"No real-world check supplied",i=t?"Synthetic model evidence":e.modelLevel==="configuration-verified"?"Configuration verified":e.modelLevel==="geometry-verified"?"Geometry verified":"Generated view \xB7 unverified",a=[...e.limitations??[],...t?["Synthetic demo; not surveyed or venue-certified."]:[]],o=e.modeledTarget?`${e.modeledTarget.clearRayCount}/${e.modeledTarget.totalRayCount} target rays clear \xB7 ${e.modeledTarget.classification} in bounded model`:void 0;return o&&a.push("Modeled target is not a percentage of the show visible."),{headline:i,model:r,reality:n,coverage:v(e.coverage),provenance:e.sourceLabel??e.approvedByRole??"Source not supplied",freshness:g(e.assessedAt),limitations:a,...o?{modeledTarget:o}:{}}}0&&(module.exports={seatConfidenceDisclosure});
@@ -1,4 +1,4 @@
1
- import { R as ResolvedSeatConfidenceEvidence } from '../types-tLOunI-B.cjs';
1
+ import { g as ResolvedSeatConfidenceEvidence } from '../types-DTSG6_Hq.cjs';
2
2
 
3
3
  interface SeatConfidenceDisclosure {
4
4
  headline: string;
@@ -1,4 +1,4 @@
1
- import { R as ResolvedSeatConfidenceEvidence } from '../types-tLOunI-B.js';
1
+ import { g as ResolvedSeatConfidenceEvidence } from '../types-DTSG6_Hq.js';
2
2
 
3
3
  interface SeatConfidenceDisclosure {
4
4
  headline: string;
@@ -1 +1 @@
1
- function a(e){return e==="exact-seat"?"Exact seat in the model":e==="row-representative"?"Representative row evidence":e==="section-representative"?"Representative section evidence":e==="floor-representative"?"Representative floor evidence":"Representative venue evidence"}function d(e){if(!e)return"No assessment date supplied";let t=new Date(e);return Number.isFinite(t.getTime())?`Assessed ${t.toISOString().slice(0,10)}`:"No assessment date supplied"}function l(e){if(!e)return{headline:"Generated view \xB7 unverified",model:"No geometry or event-configuration verification supplied",reality:"No real-world check supplied",coverage:"Selected chart seat",provenance:"Chart-derived model",freshness:"No evidence date supplied",limitations:["Generated view is not surveyed sightline truth."]};let t=e.evidenceKind==="synthetic-model",n=e.modelLevel==="configuration-verified"?"Event configuration verified":e.modelLevel==="geometry-verified"?"Venue geometry verified":t?"Versioned synthetic model":"Generated model \xB7 not verified",o=e.realityLevel==="actual-build-checked"?"Actual event build reality checked":e.realityLevel==="comparable-build-reference"?"Comparable-build reference only":"No real-world check supplied",s=t?"Synthetic model evidence":e.modelLevel==="configuration-verified"?"Configuration verified":e.modelLevel==="geometry-verified"?"Geometry verified":"Generated view \xB7 unverified",r=[...e.limitations??[],...t?["Synthetic demo; not surveyed or venue-certified."]:[]],i=e.modeledTarget?`${e.modeledTarget.clearRayCount}/${e.modeledTarget.totalRayCount} target rays clear \xB7 ${e.modeledTarget.classification} in bounded model`:void 0;return i&&r.push("Modeled target is not a percentage of the show visible."),{headline:s,model:n,reality:o,coverage:a(e.coverage),provenance:e.sourceLabel??e.approvedByRole??"Source not supplied",freshness:d(e.assessedAt),limitations:r,...i?{modeledTarget:i}:{}}}export{l as seatConfidenceDisclosure};
1
+ import{a as o}from"../chunk-EQM4FFN5.js";export{o as seatConfidenceDisclosure};
@@ -0,0 +1 @@
1
+ "use strict";var ae=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var ot=Object.prototype.hasOwnProperty;var rt=(e,t)=>{for(var n in t)ae(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of nt(t))!ot.call(e,r)&&r!==n&&ae(e,r,{get:()=>t[r],enumerable:!(o=tt(t,r))||o.enumerable});return e};var st=e=>it(ae({},"__esModule",{value:!0}),e);var mn={};rt(mn,{DEFAULT_SECTION_CORNER_SMOOTHING:()=>Gt,MAX_EDGE_SAGITTA_RATIO:()=>Ne,TIER_HEIGHT_M:()=>ge,UNGROUPED_ID:()=>ce,applyHidden:()=>pn,arcLevelAt:()=>gt,bearingDeg:()=>Re,buildSectionRake:()=>Ct,computeSections:()=>Qe,distanceToPolyline:()=>ue,fitBowlProfile:()=>xt,fitCircle:()=>ee,hiddenObjectIds:()=>et,indexLabel:()=>Oe,isSectionHidden:()=>Ze,logicalNumberingRow:()=>Te,relabelRows:()=>Pt,resolveSection:()=>dt,reverseSectionOutlinePath:()=>Vt,sampleSectionOutlinePath:()=>Ft,seatConfidenceDisclosure:()=>Tt,seatDisplayLabel:()=>pe,seatInventoryLabel:()=>he,seatLabelPart:()=>ie,sectionCornerSmoothingPath:()=>zt,sectionGeometry:()=>He,sectionOutlinePathFrom:()=>De,sectionPathSegmentEnd:()=>Nt,toBijectiveBase:()=>fe,toLetters:()=>oe,toRoman:()=>de,transformSectionOutlinePath:()=>Le,translateSectionOutlinePath:()=>Bt,validSectionOutlinePath:()=>be});module.exports=st(mn);function ve(e){let t=e.length;return t<=3?[...e]:[e[Math.floor(t*.25)],e[Math.floor(t*.5)],e[Math.floor(t*.75)]]}function ue(e,t,n){if(!e.length)return 1/0;if(e.length===1)return Math.hypot(t-e[0].x,n-e[0].y);let o=1/0;for(let r=0;r+1<e.length;r++){let i=e[r],s=e[r+1],f=s.x-i.x,u=s.y-i.y,m=f*f+u*u,c=m>1e-12?((t-i.x)*f+(n-i.y)*u)/m:0;c<0?c=0:c>1&&(c=1);let b=Math.hypot(t-(i.x+c*f),n-(i.y+c*u));b<o&&(o=b)}return o}function ct(e){let t=0,n=0;for(let i of e)t+=i.x,n+=i.y;let o=e.length||1;t/=o,n/=o;let r=0;for(let i of e){let s=Math.hypot(i.x-t,i.y-n);s>r&&(r=s)}return{cx:t,cy:n,r}}function Ie(e,t){return Math.hypot(e.cx-t.cx,e.cy-t.cy)-e.r-t.r}function le(e,t){let n=1/0;for(let o of ve(e)){let r=ue(t,o.x,o.y);r<n&&(n=r)}for(let o of ve(t)){let r=ue(e,o.x,o.y);r<n&&(n=r)}return n}function at(e,t){if(e.length<3)return{pts:e,seatIndices:t};let n=0,o=0;for(let c of e)n+=c.x,o+=c.y;n/=e.length,o/=e.length;let r=-1,i=e[0];for(let c of e){let b=Math.hypot(c.x-n,c.y-o);b>r&&(r=b,i=c)}let s=i.x-n,f=i.y-o,u=Math.hypot(s,f);u>1e-9?(s/=u,f/=u):(s=1,f=0);let m=e.map((c,b)=>({p:c,i:b,t:(c.x-n)*s+(c.y-o)*f})).sort((c,b)=>c.t-b.t);return{pts:m.map(c=>c.p),seatIndices:m.map(c=>t[c.i])}}function ee(e){let t=e.length;if(t<3)return null;let n=0,o=0;for(let g of e)n+=g.x,o+=g.y;n/=t,o/=t;let r=0,i=0,s=0,f=0,u=0,m=0,c=0;for(let g of e){let y=g.x-n,a=g.y-o;r+=y*y,s+=a*a,i+=y*a,f+=y*y*y,u+=a*a*a,m+=y*a*a,c+=a*y*y}let b=r*s-i*i;if(Math.abs(b)<1e-9)return null;let d=(f+m)/2,l=(u+c)/2,h=(d*s-l*i)/b,I=(l*r-d*i)/b,p=h+n,x=I+o;return!Number.isFinite(p)||!Number.isFinite(x)?null:{cx:p,cy:x}}var lt=.15;function ut(e){if(e.length<2)return null;let t=e.map(g=>{let y=0,a=0;for(let v of g.pts)y+=v.x,a+=v.y;return{x:y/g.pts.length,y:a/g.pts.length}}),n=0,o=0;for(let g of t)n+=g.x,o+=g.y;n/=t.length,o/=t.length;let r=0,i=0,s=0;for(let g of t){let y=g.x-n,a=g.y-o;r+=y*y,i+=y*a,s+=a*a}let f=r+s,u=r*s-i*i,m=f/2+Math.sqrt(Math.max(0,f*f/4-u)),c,b;Math.abs(i)>1e-12?(c=m-s,b=i):r>=s?(c=1,b=0):(c=0,b=1);let d=Math.hypot(c,b);if(!(d>1e-12))return null;c/=d,b/=d;let l=1/0,h=-1/0,I=[];for(let g of e){let y=1/0,a=-1/0;for(let v of g.pts){let M=v.x*c+v.y*b;M<y&&(y=M),M>a&&(a=M),M<l&&(l=M),M>h&&(h=M)}I.push(a-y)}let p=h-l;return p>1e-9?(I.sort((g,y)=>g-y),I[Math.min(I.length-1,Math.floor(I.length*.9))]/p<=ft?{x:c,y:b}:null):null}var ft=.35;function dt(e,t,n,o){let r=new Map;for(let p of n){let x=t[p],g=x.rowId||`__seat-${p}`,y=r.get(g);y||(y={pts:[],idx:[]},r.set(g,y)),y.pts.push({x:x.x,y:x.y}),y.idx.push(p)}if(!r.size)return{sectionId:e,rows:[],blockCount:0};let i=[];for(let[p,x]of r){let g=at(x.pts,x.idx),y=0;for(let a of g.pts)y+=Math.hypot(a.x-o.x,a.y-o.y);i.push({id:p,pts:g.pts,seatIndices:g.seatIndices,blockId:-1,ordinal:0,blockDepth:0,focalDistance:y/g.pts.length})}let s=i.map(p=>ct(p.pts)),f=[];for(let p=0;p<i.length;p++){let x=1/0;for(let g=0;g<i.length;g++){if(p===g||Ie(s[p],s[g])>=x)continue;let y=le(i[p].pts,i[g].pts);y<x&&(x=y)}Number.isFinite(x)&&f.push(x)}f.sort((p,x)=>p-x);let u=f.length?f[Math.floor(f.length/2)]:1,m=Math.max(u*1.8,1e-6),c=i.map(()=>[]);for(let p=0;p<i.length;p++)for(let x=p+1;x<i.length;x++)Ie(s[p],s[x])>m||le(i[p].pts,i[x].pts)<=m&&(c[p].push(x),c[x].push(p));let b=0;for(let p=0;p<i.length;p++){if(i[p].blockId!==-1)continue;let x=b++,g=[p];for(i[p].blockId=x;g.length;){let y=g.pop();for(let a of c[y])i[a].blockId===-1&&(i[a].blockId=x,g.push(a))}}let d=new Map;for(let p of i){let x=d.get(p.blockId)??[];x.push(p),d.set(p.blockId,x)}let l=[];for(let p of i){if(p.pts.length<4)continue;let x=ee(p.pts);x&&(!Number.isFinite(x.cx)||!Number.isFinite(x.cy)||l.push({x:x.cx,y:x.cy}))}let h=l.length>=2?(()=>{let p=l.map(y=>y.x).sort((y,a)=>y-a),x=l.map(y=>y.y).sort((y,a)=>y-a),g=Math.floor(l.length/2);return{cx:p[g],cy:x[g]}})():null;if(h){let p=M=>Math.hypot(M.x-h.cx,M.y-h.cy),x=1/0,g=-1/0,y=[];for(let M of i){let A=1/0,T=-1/0;for(let N of M.pts){let B=p(N);B<A&&(A=B),B>T&&(T=B)}y.push(T-A),A<x&&(x=A),T>g&&(g=T)}let a=g-x;y.sort((M,A)=>M-A);let v=y[Math.min(y.length-1,Math.floor(y.length*.9))];if(a>1e-9&&v/a<=lt){let M=i.map(k=>{let S=0;for(let P of k.pts)S+=p(P);return{row:k,radius:S/k.pts.length}}),A=1/0;for(let k of M)k.radius<A&&(A=k.radius);M.sort((k,S)=>k.radius-S.radius);let T=-1,N=-1/0,B=a/Math.max(1,M.length)*.5,z=[];for(let k of M)k.radius-N>B&&(T++,N=k.radius),k.row.ordinal=T,k.row.blockDepth=k.radius-A,z.push(k.row);return{sectionId:e,rows:z,blockCount:b}}}let I=[];for(let[,p]of d){let x=ut(p);if(x){let g=a=>{let v=0;for(let M of a.pts)v+=M.x*x.x+M.y*x.y;return v/a.pts.length};p.sort((a,v)=>g(a)-g(v));let y=0;for(let a=0;a<p.length;a++)a>0&&(y+=le(p[a-1].pts,p[a].pts)),p[a].ordinal=a,p[a].blockDepth=y,I.push(p[a])}else{let g=1/0;for(let y of p)y.focalDistance<g&&(g=y.focalDistance);p.sort((y,a)=>y.focalDistance-a.focalDistance);for(let y=0;y<p.length;y++)p[y].ordinal=y,p[y].blockDepth=Math.max(0,p[y].focalDistance-g),I.push(p[y])}}return{sectionId:e,rows:I,blockCount:b}}var ht=Math.PI/180,R=96,pt=6,mt=60,bt=150,Ae=.2,yt=.35;function Re(e,t){let n=Math.atan2(t.x-e.x,t.y-e.y)/ht;return n<0?n+360:n}function te(e){if(!e.length)return NaN;let t=[...e].sort((n,o)=>n-o);return t[Math.floor(t.length/2)]}function ne(e,t,n=2){let o=e.length,r=new Float64Array(o);for(let i=0;i<o;i++){let s=0,f=0;for(let u=-n;u<=n;u++){let m=i+u;if(t)m=(m%o+o)%o;else if(m<0||m>=o)continue;s+=e[m],f++}r[i]=s/f}return r}function xt(e,t){let n=e.filter(d=>d.rows.length>=1);if(n.length<1)return null;let o=[],r=0,i=0,s=0;for(let d of n)for(let l of d.rows){for(let h of l.pts)r+=h.x,i+=h.y,s++;if(l.pts.length>=4){let h=ee(l.pts);h&&Number.isFinite(h.cx)&&Number.isFinite(h.cy)&&o.push({x:h.cx,y:h.cy})}}if(!s)return null;let f={x:r/s,y:i/s},u=f;if(o.length>=8){let d=te(o.map(x=>x.x)),l=te(o.map(x=>x.y)),h=0;for(let x of n)for(let g of x.rows)for(let y of g.pts){let a=Math.hypot(y.x-f.x,y.y-f.y);a>h&&(h=a)}let I=0,p=h*.2;for(let x of n)for(let g of x.rows)for(let y of g.pts)Math.hypot(y.x-d,y.y-l)<p&&I++;Math.hypot(d-f.x,l-f.y)<=h&&I/s<.01&&(u={x:d,y:l})}let m=[];for(let d of n){let l={sectionId:d.sectionId,rMin:1/0,rMax:-1/0,samples:[]};for(let h of d.rows)for(let I of h.pts){let p=Math.hypot(I.x-u.x,I.y-u.y),x=Math.min(R-1,Math.floor(Re(u,I)/(360/R)));l.samples.push({r:p,bin:x,levelM:h.levelM}),p<l.rMin&&(l.rMin=p),p>l.rMax&&(l.rMax=p)}l.samples.length&&m.push(l)}if(!m.length)return null;m.sort((d,l)=>d.rMin+d.rMax-(l.rMin+l.rMax));let c=[];for(let d of m){let l=!1;for(let h of c){let I=Math.min(d.rMax,h.rMax)-Math.max(d.rMin,h.rMin),p=Math.min(d.rMax-d.rMin,h.rMax-h.rMin);if(p>1e-9&&I>=yt*p){h.members.push(d),h.rMin=Math.min(h.rMin,d.rMin),h.rMax=Math.max(h.rMax,d.rMax),l=!0;break}}l||c.push({members:[d],rMin:d.rMin,rMax:d.rMax})}let b=[];for(let d of c){let l=new Array(R).fill(null);for(let S of d.members)for(let P of S.samples){let O=l[P.bin];O||(O={samples:[]},l[P.bin]=O),O.samples.push({r:P.r,levelM:P.levelM})}let h=l.map(S=>!!S);if(!h.filter(Boolean).length)continue;let p=[],x=[];for(let S of l){if(!S)continue;let P=1/0,O=-1/0;for(let _ of S.samples)_.r<P&&(P=_.r),_.r>O&&(O=_.r);p.push(P),x.push(O)}let g=te(p),y=te(x);if(!(g>=Ae*y)||!(y>0))continue;let a=[...p].sort((S,P)=>S-P);if(!(a[Math.floor(a.length*.1)]>=Ae*y))continue;let M=l.map(S=>{if(!S)return null;let P=[...S.samples].sort((j,D)=>j.r-D.r),O=P[0].r,_=P[P.length-1].r,G=P[0].levelM,K=-1/0;for(let j of P)j.levelM>K&&(K=j.levelM);let C=[];for(let j of P){let D={r:j.r,l:j.levelM};for(;C.length&&Math.abs(C[C.length-1].r-D.r)<1e-9;){if(C[C.length-1].l<=D.l){D.skip=!0;break}C.pop()}if(!D.skip){for(;C.length>=2;){let V=C[C.length-2],W=C[C.length-1];if((W.r-V.r)*(D.l-V.l)-(W.l-V.l)*(D.r-V.r)<=0)C.pop();else break}C.push(D)}}let U=C.map(j=>j.r),H=C.map(j=>j.l);return{inner:O,outer:_,front:G,top:K,profile:{rs:U,ls:H}}}),A=h.slice();for(let S=0;S<R;S++){if(A[S])continue;let P=-1,O=-1,_=0;for(let w=1;w<=R;w++){let E=(S-w+R*2)%R;if(A[E]){P=E;break}}for(let w=1;w<=R;w++){let E=(S+w)%R;if(A[E]){O=E,_=w;break}}if(P<0||O<0)continue;let G=0;for(let w=1;w<=R;w++){let E=(S-w+R*2)%R;if(h[E]){G=w;break}}if(G-1+_>pt)continue;let C=M[P],U=M[O],H=G/(G+_),j=C.inner+(U.inner-C.inner)*H,D=C.outer+(U.outer-C.outer)*H,V=C.front+(U.front-C.front)*H,W=C.top+(U.top-C.top)*H;M[S]={inner:j,outer:D,front:V,top:W,profile:{rs:[j,D],ls:[V,W]}}}for(let S=0;S<R;S++)M[S]&&(A[S]=!0);let T=360/R,N=[],B=A.filter(Boolean).length,z=[];if(B===R)z.push({start:0,len:R});else{let S=0;for(;A[S];)S=(S+1)%R;let P=-1;for(let O=0;O<=R;O++){let _=(S+O)%R,G=O<R&&A[_];if(G&&P<0)P=_;else if(!G&&P>=0){let K=(_-P+R)%R||R;z.push({start:P,len:K}),P=-1}}}for(let S of z){if(S.len*T<mt&&S.len<R)continue;let P=S.len===R,O=new Float64Array(S.len),_=new Float64Array(S.len),G=new Float64Array(S.len),K=new Float64Array(S.len),C=[];for(let w=0;w<S.len;w++){let E=M[(S.start+w)%R];O[w]=E.inner,_[w]=E.outer,G[w]=E.front,K[w]=E.top,C.push(E.profile??{rs:[E.inner,E.outer],ls:[E.front,E.top]})}let U=ne(O,P),H=ne(_,P),j=ne(G,P),D=ne(K,P);for(let w=0;w<S.len;w++)U[w]>O[w]&&(U[w]=O[w]),H[w]<_[w]&&(H[w]=_[w]),U[w]>H[w]-1e-6&&(U[w]=Math.max(0,H[w]-1e-6)),D[w]<j[w]&&(D[w]=j[w]);let V={startBin:S.start,binCount:S.len,closed:P,innerR:U,outerR:H,frontLevelM:j,topLevelM:D,profiles:C},W=(w,E,F)=>{let Q=C[w],X=Q.rs,$=Q.ls;if(E<=X[0]){$[0]>F&&($[0]=F);return}if(E>=X[X.length-1]){$[$.length-1]>F&&($[$.length-1]=F);return}for(let Y=0;Y+1<X.length;Y++)if(E<=X[Y+1]){$[Y]>F&&($[Y]=F),$[Y+1]>F&&($[Y+1]=F);return}};for(let w=0;w<S.len;w++){let E=l[(S.start+w)%R];if(E)for(let F of E.samples){W(w,F.r,F.levelM);let Q=P?(w-1+S.len)%S.len:w-1,X=P?(w+1)%S.len:w+1;Q>=0&&W(Q,F.r,F.levelM),X<S.len&&W(X,F.r,F.levelM)}}N.push(V)}N.reduce((S,P)=>S+P.binCount*T,0)<bt||b.push({arcs:N,sectionIds:d.members.map(S=>S.sectionId),innerRMedian:g,outerRMedian:y})}if(!b.length)return null;if(b.sort((d,l)=>d.innerRMedian-l.innerRMedian),t){let d=b[b.length-1].outerRMedian;if(Math.hypot(t.x-u.x,t.y-u.y)>.9*d)return null}return{centre:u,binCount:R,binStepDeg:360/R,rings:b}}function gt(e,t,n,o){let r=e.binStepDeg,i=n/r-.5-t.startBin;i=(i%e.binCount+e.binCount)%e.binCount,i>t.binCount-1&&(t.closed?i=i-t.binCount<t.binCount-i?0:t.binCount-1:i=i-(t.binCount-1)<e.binCount-i?t.binCount-1:0);let s=Math.floor(i),f=t.closed?(s+1)%t.binCount:Math.min(t.binCount-1,s+1),u=i-s,m=c=>{let b=t.profiles[c],d=b.rs,l=b.ls;if(o<=d[0])return l[0];if(o>=d[d.length-1])return l[l.length-1];for(let h=0;h+1<d.length;h++)if(o<=d[h+1]){let I=d[h+1]-d[h],p=I>1e-9?(o-d[h])/I:0;return l[h]+(l[h+1]-l[h])*p}return l[l.length-1]};return m(s)*(1-u)+m(f)*u}var Ce="ABCDEFGHIJKLMNOPQRSTUVWXYZ",St="ABCDEFGHJKLMNPQRSTUVWXYZ",Mt="abcdefghijklmnopqrstuvwxyz";function fe(e,t){let n=t.length,o=e+1,r="";for(;o>0;){o-=1;let i=o%n;r=t[i]+r,o=Math.floor(o/n)}return r}function Oe(e,t){let n=t.startAt-1,o=e+n;if(t.scheme==="numbers")return String(o+1);let r=t.skipAmbiguous?St:Ce;return fe(o,r)}function oe(e,t=!1){let n=t?Mt:Ce;return fe(Math.max(0,Math.floor(e)-1),n)}var wt=[[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]];function de(e){if(!Number.isFinite(e)||e<=0)return String(e);let t=Math.floor(e),n="";for(let[o,r]of wt)for(;t>=o;)n+=r,t-=o;return n}function Pt(e,t){let n=e.length;return e.map((o,r)=>{let i=t.reverse?n-1-r:r;return{...o,label:Oe(i,t)}})}function vt(e){return{kind:"radial",rowCount:0,rows:[],nearestRow:()=>-1,depthAt:(t,n)=>Math.hypot(t-e.x,n-e.y),gradientAt:(t,n)=>{let o=t-e.x,r=n-e.y,i=Math.hypot(o,r);return i<1e-9?[0,0]:[o/i,r/i]}}}function It(e,t){if(!e.length)return null;let n=0,o=0,r=0;for(let l of e)n+=l.x,o+=l.y,r+=Math.hypot(l.x-t.x,l.y-t.y);let i=e.length;n/=i,o/=i,r/=i;let s=e[0],f=-1;for(let l of e){let h=Math.hypot(l.x-n,l.y-o);h>f&&(f=h,s=l)}let u=s.x-n,m=s.y-o,c=Math.hypot(u,m);c>1e-9?(u/=c,m/=c):(u=1,m=0);let b=[...e].sort((l,h)=>(l.x-n)*u+(l.y-o)*m-((h.x-n)*u+(h.y-o)*m)),d=0;for(let l of b){let h=Math.hypot(l.x-n,l.y-o);h>d&&(d=h)}return{pts:b,cx:n,cy:o,radius:d,depth:r}}function Ee(e,t,n){let o=e.pts;if(o.length===1)return Math.hypot(t-o[0].x,n-o[0].y);let r=1/0;for(let i=0;i+1<o.length;i++){let s=o[i],f=o[i+1],u=f.x-s.x,m=f.y-s.y,c=u*u+m*m,b=c>1e-12?((t-s.x)*u+(n-s.y)*m)/c:0;b<0?b=0:b>1&&(b=1);let d=Math.hypot(t-(s.x+b*u),n-(s.y+b*m));d<r&&(r=d)}return r}var re=8;function At(e,t,n){let o=new Array(re).fill(1/0),r=new Array(re).fill(-1);for(let c=0;c<e.length;c++){let b=e[c],d=Math.hypot(t-b.cx,n-b.cy)-b.radius;for(let l=0;l<re;l++)if(d<o[l]){for(let h=re-1;h>l;h--)o[h]=o[h-1],r[h]=r[h-1];o[l]=d,r[l]=c;break}}let i=new Array(3).fill(1/0),s=new Array(3).fill(-1);for(let c of r){if(c<0)continue;let b=Ee(e[c],t,n);for(let d=0;d<3;d++)if(b<i[d]){for(let l=2;l>d;l--)i[l]=i[l-1],s[l]=s[l-1];i[d]=b,s[d]=c;break}}if(s[0]<0)return 0;if(i[0]<1e-6)return e[s[0]].depth;let f=i[0]*2.2,u=0,m=0;for(let c=0;c<3;c++){let b=s[c];if(b<0||i[c]>f)continue;let d=1/(i[c]*i[c]);u+=d*e[b].depth,m+=d}return m>0?u/m:e[s[0]].depth}function Rt(e){let t=(o,r)=>At(e,o,r),n=(o,r)=>{let i=1/0,s=-1;for(let f=0;f<e.length;f++){let u=e[f];if(Math.hypot(o-u.cx,r-u.cy)-u.radius>=i)continue;let m=Ee(u,o,r);m<i&&(i=m,s=f)}return s};return{kind:"rows",rowCount:e.length,rows:e,nearestRow:n,depthAt:t,gradientAt:(o,r)=>{let i=(t(o+.5,r)-t(o-.5,r))/1,s=(t(o,r+.5)-t(o,r-.5))/(2*.5),f=Math.hypot(i,s);return f<1e-9?[0,0]:[i/f,s/f]}}}function Ct(e,t){let n=[];for(let o of e){let r=It(o.points,t);r&&n.push(r)}return n.length<2?vt(t):(n.sort((o,r)=>o.depth-r.depth),Rt(n))}function Ot(e){return e==="exact-seat"?"Exact seat in the model":e==="row-representative"?"Representative row evidence":e==="section-representative"?"Representative section evidence":e==="floor-representative"?"Representative floor evidence":"Representative venue evidence"}function Et(e){if(!e)return"No assessment date supplied";let t=new Date(e);return Number.isFinite(t.getTime())?`Assessed ${t.toISOString().slice(0,10)}`:"No assessment date supplied"}function Tt(e){if(!e)return{headline:"Generated view \xB7 unverified",model:"No geometry or event-configuration verification supplied",reality:"No real-world check supplied",coverage:"Selected chart seat",provenance:"Chart-derived model",freshness:"No evidence date supplied",limitations:["Generated view is not surveyed sightline truth."]};let t=e.evidenceKind==="synthetic-model",n=e.modelLevel==="configuration-verified"?"Event configuration verified":e.modelLevel==="geometry-verified"?"Venue geometry verified":t?"Versioned synthetic model":"Generated model \xB7 not verified",o=e.realityLevel==="actual-build-checked"?"Actual event build reality checked":e.realityLevel==="comparable-build-reference"?"Comparable-build reference only":"No real-world check supplied",r=t?"Synthetic model evidence":e.modelLevel==="configuration-verified"?"Configuration verified":e.modelLevel==="geometry-verified"?"Geometry verified":"Generated view \xB7 unverified",i=[...e.limitations??[],...t?["Synthetic demo; not surveyed or venue-certified."]:[]],s=e.modeledTarget?`${e.modeledTarget.clearRayCount}/${e.modeledTarget.totalRayCount} target rays clear \xB7 ${e.modeledTarget.classification} in bounded model`:void 0;return s&&i.push("Modeled target is not a percentage of the show visible."),{headline:r,model:n,reality:o,coverage:Ot(e.coverage),provenance:e.sourceLabel??e.approvedByRole??"Source not supplied",freshness:Et(e.assessedAt),limitations:i,...s?{modeledTarget:s}:{}}}function _t(e){let t=new Array(e);return Array.from({length:e},(n,o)=>o).sort((n,o)=>Math.abs(2*n-(e-1))-Math.abs(2*o-(e-1))||n-o).forEach((n,o)=>t[n]=o),t}function ie(e,t){let n=e.seatLabelStart??1,o=e.seatNumbering?.direction??"ltr",r=e.seatNumbering?.step??1,i=e.seatNumbering?.scheme??"decimal",s=e.seatNumbering?.prefix??"",f=e.seatNumbering?.endAt,u=e.seatCount;if(i==="updown"||i==="updown-descending"){let l=Math.ceil(u/2),h=i==="updown"?t<l?n+2*t:n-1+2*(u-t):t<l?n+2*(l-1-t):n+1+2*(t-l);return`${s}${h}`}let m=i==="odd"||i==="even"?2:r,c=f!=null&&Number.isFinite(f)?f-(u-1)*m:n,b=o==="center"?_t(u)[t]:o==="rtl"?u-1-t:t,d;switch(i){case"odd":{let l=c%2===1?c:c+1;d=String(l+b*2);break}case"even":{let l=c%2===0?c:c+1;d=String(l+b*2);break}case"roman":d=de(c+b*r);break;case"letters-upper":d=oe(c+b*r,!1);break;case"letters-lower":d=oe(c+b*r,!0);break;default:d=String(c+b*r);break}return`${s}${d}`}function Te(e){return{...e.canonical,seatCount:e.totalSeats,label:e.displayLabel,displayLabel:e.displayLabel}}function he(e,t,n){return n?.label??`${e.label}-${ie(e,t)}`}function pe(e,t,n,o){if(o?.displayLabel)return o.displayLabel;if(!n)return`${e.displayLabel??e.label}-${ie(e,t)}`;let r=Te(n),i=n.displayOffset+t;return`${n.displayLabel}-${ie(r,i)}`}function kt(e,t,n){return Math.max(t,Math.min(n,e))}function jt(e){return kt(e,0,1)}function _e(e){let t=jt(e);return t*t*(3-2*t)}var An=Math.PI/180;function L(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function me(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}var q=Math.PI*2;function J(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)}function Lt(e,t,n){let o=t-e;if(n){for(;o<0;)o+=q;for(;o>=q;)o-=q}else{for(;o>0;)o-=q;for(;o<=-q;)o+=q}return o}function Nt(e){return e.end}function be(e){if(e.version!==1||e.closed!==!0||!J(e.start)||!Array.isArray(e.segments)||e.segments.length<2||e.segments.length>512)return!1;let t=e.start;for(let n of e.segments){if(!n||!J(n.end))return!1;if(n.kind==="line"){if(L(t,n.end)<=1e-9)return!1}else if(n.kind==="bezier"){if(!J(n.control1)||!J(n.control2)||L(t,n.end)<=1e-9)return!1}else if(n.kind==="arc"){if(!J(n.center)||!Number.isFinite(n.radius)||n.radius<=1e-6||Math.abs(L(t,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||Math.abs(L(n.end,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||L(t,n.end)<=1e-9)return!1}else return!1;t=n.end}return L(t,e.start)<=1e-4}function Dt(e,t,n){let o=1-n;return{x:o**3*e.x+3*o**2*n*t.control1.x+3*o*n**2*t.control2.x+n**3*t.end.x,y:o**3*e.y+3*o**2*n*t.control1.y+3*o*n**2*t.control2.y+n**3*t.end.y}}function Ft(e,t=2){if(!be(e))throw new Error("Section outline path is invalid");let n=Math.max(.25,t),o=[{...e.start}],r=e.start;for(let i of e.segments){if(i.kind==="line")o.push({...i.end});else if(i.kind==="arc"){let s=Math.atan2(r.y-i.center.y,r.x-i.center.x),f=Math.atan2(i.end.y-i.center.y,i.end.x-i.center.x),u=Lt(s,f,i.clockwise),m=Math.max(2,Math.ceil(Math.abs(u)*i.radius/n));for(let c=1;c<=m;c+=1){let b=s+u*c/m;o.push({x:i.center.x+Math.cos(b)*i.radius,y:i.center.y+Math.sin(b)*i.radius})}}else{let s=L(r,i.control1)+L(i.control1,i.control2)+L(i.control2,i.end),f=Math.max(2,Math.ceil(s/n));for(let u=1;u<=f;u+=1)o.push(Dt(r,i,u/f))}r=i.end}return L(o[o.length-1],o[0])<=1e-4&&o.pop(),o}function Bt(e,t,n){return Le(e,r=>({x:r.x+t,y:r.y+n}))}function Le(e,t,n=1,o=!1){return{...e,start:t(e.start),segments:e.segments.map(r=>r.kind==="line"?{...r,end:t(r.end)}:r.kind==="arc"?{...r,center:t(r.center),radius:r.radius*Math.abs(n),clockwise:o?!r.clockwise:r.clockwise,end:t(r.end)}:{...r,control1:t(r.control1),control2:t(r.control2),end:t(r.end)})}}var Gt=45,Ut=150,ke=.5523;function je(e,t){return Math.abs(e.x-t.x)<=1e-6&&Math.abs(e.y-t.y)<=1e-6}function Ht(e){let t=[],n=[];for(e.forEach((o,r)=>{J(o)&&(t.length&&je(t[t.length-1],o)||(t.push({x:o.x,y:o.y}),n.push(r)))});t.length>1&&je(t[0],t[t.length-1]);)t.pop(),n.pop();return{points:t,sourceIndex:n}}function zt(e,t,n){return De(e,{cornerSmoothing:t,...n})}var Ne=.5,$t=4/3;function Kt(e,t,n){let o=t.x-e.x,r=t.y-e.y,i=Math.hypot(o,r);if(i<=1e-9)return{kind:"line",end:{...t}};let s=-r/i,f=o/i,u=n*$t;return{kind:"bezier",control1:{x:e.x+o/3+s*u,y:e.y+r/3+f*u},control2:{x:e.x+o*2/3+s*u,y:e.y+r*2/3+f*u},end:{...t}}}function De(e,t){let{points:n,sourceIndex:o}=Ht(e),r=n.length;if(r<3)return null;let i=Math.min(100,Math.max(0,t.cornerSmoothing??0))/100,s=t.edgeCurvature,f=new Array(r).fill(0);if(s?.length)for(let a=0;a<r;a+=1){let v=s[o[a]];f[a]=Number.isFinite(v)?Math.min(100,Math.max(-100,v))/100:0}let u=f.some(a=>Math.abs(a)>1e-6);if(i<=0&&!u)return null;let m=t.wideAngleThresholdDeg??Ut,c=[];for(let a=0;a<r;a+=1)c[a]=L(n[a],n[(a+1)%r]);let b=new Array(r).fill(0);for(let a=0;a<r;a+=1){let v=n[(a-1+r)%r],M=n[a],A=n[(a+1)%r],T={x:v.x-M.x,y:v.y-M.y},N={x:A.x-M.x,y:A.y-M.y},B=Math.hypot(T.x,T.y),z=Math.hypot(N.x,N.y);if(B<=1e-9||z<=1e-9)continue;let k=Math.min(1,Math.max(-1,(T.x*N.x+T.y*N.y)/(B*z))),S=Math.acos(k)*180/Math.PI;if(S<m)continue;let P=_e((S-m)/(180-m));b[a]=i*P*.5*Math.min(B,z)}for(let a=0;a<r;a+=1){let v=(a+1)%r,M=b[a]+b[v];if(M>c[a]&&M>1e-9){let A=c[a]/M;b[a]*=A,b[v]*=A}}let d=new Array(r),l=new Array(r);for(let a=0;a<r;a+=1){let v=n[(a-1+r)%r],M=n[a],A=n[(a+1)%r];if(b[a]<=1e-6){d[a]={...M},l[a]={...M};continue}let T=L(M,v)||1,N=L(M,A)||1;d[a]={x:M.x+(v.x-M.x)/T*b[a],y:M.y+(v.y-M.y)/T*b[a]},l[a]={x:M.x+(A.x-M.x)/N*b[a],y:M.y+(A.y-M.y)/N*b[a]}}if(b.every(a=>a<=1e-6)&&!u)return null;let h=[],I={...l[0]},p=I,x=(a,v)=>{if(L(p,a)<=1e-9)return;let M=f[v];Math.abs(M)>1e-6?h.push(Kt(p,a,M*Ne*c[v])):h.push({kind:"line",end:{...a}}),p=a};for(let a=1;a<=r;a+=1){let v=a%r,M=n[v];x(d[v],(a-1)%r),b[v]>1e-6&&L(d[v],l[v])>1e-9&&(h.push({kind:"bezier",control1:me(d[v],M,ke),control2:me(l[v],M,ke),end:{...l[v]}}),p=l[v])}if(!h.length)return null;let g=h[h.length-1];L(g.end,I)>1e-9&&(g.kind==="line"?g.end={...I}:h.push({kind:"line",end:{...I}}));let y={version:1,closed:!0,start:I,segments:h};return be(y)?y:null}function Vt(e){let t=[],n=e.start;for(let r of e.segments)t.push(n),n=r.end;let o=[];for(let r=e.segments.length-1;r>=0;r-=1){let i=e.segments[r],s=t[r];i.kind==="line"?o.push({kind:"line",end:{...s}}):i.kind==="arc"?o.push({kind:"arc",center:{...i.center},radius:i.radius,clockwise:!i.clockwise,end:{...s}}):o.push({kind:"bezier",control1:{...i.control2},control2:{...i.control1},end:{...s}})}return{version:1,closed:!0,start:{...e.start},segments:o}}function Fe(e,t){let n=1-t,o=n*n*n,r=3*n*n*t,i=3*n*t*t,s=t*t*t;return{x:o*e.start.x+r*e.control1.x+i*e.control2.x+s*e.end.x,y:o*e.start.y+r*e.control1.y+i*e.control2.y+s*e.end.y}}function Be(e,t,n=192){if(!Number.isInteger(t)||t<1)throw new Error("Path point count must be a positive integer");if(t===1)return[Fe(e,.5)];let o=Array.from({length:n+1},(u,m)=>Fe(e,m/n)),r=new Float64Array(o.length);for(let u=1;u<o.length;u+=1){let m=o[u].x-o[u-1].x,c=o[u].y-o[u-1].y;r[u]=r[u-1]+Math.hypot(m,c)}let i=r[r.length-1];if(i<=1e-9)return Array.from({length:t},()=>({...e.start}));let s=[],f=1;for(let u=0;u<t;u+=1){let m=i*u/(t-1);for(;f<r.length-1&&r[f]<m;)f+=1;let c=r[f-1],b=r[f],d=b===c?0:(m-c)/(b-c);s.push({x:o[f-1].x+(o[f].x-o[f-1].x)*d,y:o[f-1].y+(o[f].y-o[f-1].y)*d})}return s}var Ue=.02291666666666667,_n=1/Ue,Wt=58,ge=Wt*Ue;var Xt=3,Ge=0,ye=120,Yt=0,qt=45,Jt=7;function xe(e,t,n,o){return Number.isFinite(e)?Math.max(t,Math.min(n,e)):o}function Qt(e){return!Number.isFinite(e)||!Number.isInteger(e)||e<0?0:e<=Jt?e:Xt}function He(e,t={}){let n=xe(t.floorBaseHeightM,Ge,ye,0),o=Math.min(ye,n+Qt(e.elevation)*ge),r=e.height===void 0?o:xe(e.height,Ge,ye,o),i=xe(e.rake,Yt,qt,0);return{height:r,rake:i}}function Ve(e){return e?e.accessibility&&e.accessibility.length?e.wheelchairSpaceType&&!e.accessibility.includes("wheelchair")?["wheelchair",...e.accessibility]:e.accessibility:e.wheelchairSpaceType?["wheelchair"]:e.accessible?["wheelchair"]:[]:[]}var se=Math.PI/180;var Z=16;function Me(e,t,n,o){let r=n*se,i=Math.cos(r),s=Math.sin(r);return{x:o.x+e*i-t*s,y:o.y+e*s+t*i}}function Zt(e){let{seatCount:t,seatSpacing:n,curve:o,rotation:r,origin:i}=e,s=[];if(e.path)return Be(e.path,t);if(t<=1)return t===1&&s.push({x:i.x,y:i.y}),s;if(o===0){for(let m=0;m<t;m++)s.push(Me(m*n,0,r,i));return s}let f=o/(t-1)*se,u=n/(2*Math.sin(Math.abs(f)/2));for(let m=0;m<t;m++){let c=m*f,b=u*Math.sin(c),d=-u+u*Math.cos(c);s.push(Me(b,d,r,i))}return s}function en(e){let t=new Map;if(e.overrides)for(let n of e.overrides)t.set(n.index,n);return t}function tn(e,t){let n=en(e);return Zt(e).map((o,r)=>{let i=n.get(r),s=Ve(i),f=he(e,r,i),u={...e.commercial,...i?.commercial};return{index:r,x:o.x+(i?.dx??0),y:o.y+(i?.dy??0),label:f,displayLabel:pe(e,r,t,i),categoryKey:i?.categoryKey??e.categoryKey,skipped:!!i?.skip,accessible:s.length>0,accessibility:s,wheelchairSpaceType:i?.wheelchairSpaceType,commercial:Object.values(u).some(m=>m!==void 0&&m!==!1&&m!=="")?u:void 0,viewUrl:i?.viewFromSeatUrl??e.viewFromSeatUrl,viewMeta:i?.viewFromSeatUrl?i.viewFromSeatMeta:e.viewFromSeatMeta,labelStyle:i?.labelStyle}})}function we(e){let t=[];for(let n of tn(e))n.skipped||t.push({id:`${e.id}:${n.index}`,label:n.label,displayLabel:n.displayLabel===n.label?void 0:n.displayLabel,x:n.x,y:n.y,rowId:e.id,categoryKey:n.categoryKey,accessible:n.accessible||void 0,accessibility:n.accessibility.length?n.accessibility:void 0,wheelchairSpaceType:n.wheelchairSpaceType,commercial:n.commercial,viewUrl:n.viewUrl,viewMeta:n.viewMeta,labelStyle:n.labelStyle});return t}function nn(e){if(e.seatCountsBySide)return{...e.seatCountsBySide};let t=e.sides&&e.sides.length?e.sides:["top","bottom"],n=["top","bottom","left","right"].filter(i=>t.includes(i)),o={top:0,bottom:0,left:0,right:0};if(!n.length)return o;let r=Math.max(0,Math.round(e.seatCount));for(let i=0;i<r;i++)o[n[i%n.length]]+=1;return o}function on(e){let t=[],n=Math.max(0,Math.round(e.seatCount));if(n===0)return t;let o=new Map((e.overrides??[]).map(c=>[c.index,c])),r=(c,b,d,l)=>{let h=o.get(c),I=Ve(h),p=h?.label??`${e.label}-${c+1}`,x=e.displayLabel??e.label;return{index:c,label:p,displayLabel:h?.displayLabel??`${x}-${c+1}`,x:b+(h?.dx??0),y:d+(h?.dy??0),categoryKey:h?.categoryKey??e.categoryKey,skipped:!!h?.skip,accessible:I.length>0,accessibility:I,wheelchairSpaceType:h?.wheelchairSpaceType,commercial:h?.commercial,viewUrl:h?.viewFromSeatUrl,viewMeta:h?.viewFromSeatUrl?h.viewFromSeatMeta:void 0,labelStyle:h?.labelStyle,...l?{side:l}:{}}};if(e.shape==="round"){let c=(e.radius??40)+Z,b=e.rotation*se,d=Math.max(0,Math.min(360,e.seatArc??360));if(d>=360||n===1){for(let p=0;p<n;p++){let x=b+p/n*2*Math.PI;t.push(r(p,e.center.x+c*Math.cos(x),e.center.y+c*Math.sin(x)))}return t}let l=d*se,h=(2*Math.PI-l)/2,I=b+h;for(let p=0;p<n;p++){let x=I+p/(n-1)*l;t.push(r(p,e.center.x+c*Math.cos(x),e.center.y+c*Math.sin(x)))}return t}let i=e.width??80,s=e.height??50,f=nn(e),u=["top","bottom","left","right"],m=0;for(let c of u){let b=f[c];for(let d=0;d<b;d++){let l,h;c==="top"?(l=-i/2+(d+.5)*i/b,h=-s/2-Z):c==="bottom"?(l=-i/2+(d+.5)*i/b,h=s/2+Z):c==="left"?(l=-i/2-Z,h=-s/2+(d+.5)*s/b):(l=i/2+Z,h=-s/2+(d+.5)*s/b);let I=Me(l,h,e.rotation,e.center);t.push(r(m++,I.x,I.y,c))}}return t}function We(e){return on(e).filter(t=>!t.skipped).map(t=>({id:`${e.id}:${t.index}`,label:t.label,...t.displayLabel!==t.label?{displayLabel:t.displayLabel}:{},x:t.x,y:t.y,rowId:e.id,categoryKey:t.categoryKey,...t.accessible?{accessible:!0}:{},...t.accessibility.length?{accessibility:t.accessibility}:{},...t.wheelchairSpaceType?{wheelchairSpaceType:t.wheelchairSpaceType}:{},...t.commercial?{commercial:t.commercial}:{},...t.viewUrl?{viewUrl:t.viewUrl}:{},...t.viewUrl&&t.viewMeta?{viewMeta:t.viewMeta}:{},...t.labelStyle?{labelStyle:t.labelStyle}:{}}))}function Xe(e){return[{id:`${e.id}:0`,label:e.label,...e.displayLabel&&e.displayLabel!==e.label?{displayLabel:e.displayLabel}:{},x:e.center.x,y:e.center.y,rowId:e.id,categoryKey:e.categoryKey,kind:"booth"}]}function ze(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[o].x,s=t[o].y,f=t[r].x,u=t[r].y;s>e.y!=u>e.y&&e.x<(f-i)*(e.y-s)/(u-s)+i&&(n=!n)}return n}function rn(e,t){return t.some((n,o)=>{let r=t[(o+1)%t.length],i=(e.y-n.y)*(r.x-n.x)-(e.x-n.x)*(r.y-n.y);if(Math.abs(i)>1e-7)return!1;let s=(e.x-n.x)*(r.x-n.x)+(e.y-n.y)*(r.y-n.y),f=(r.x-n.x)**2+(r.y-n.y)**2;return s>=-1e-7&&s<=f+1e-7})}function $e(e,t,n){return ze(e,t)&&!(n??[]).some(o=>ze(e,o)||rn(e,o))}function Se(e){if(!e.length)return{x:0,y:0};let t=0,n=0;for(let o of e)t+=o.x,n+=o.y;return{x:t/e.length,y:n/e.length}}function sn(e){switch(e.type){case"row":{let t=we(e);if(!t.length)return{x:e.origin.x,y:e.origin.y};let n=0,o=0;for(let r of t)n+=r.x,o+=r.y;return{x:n/t.length,y:o/t.length}}case"table":case"booth":return{x:e.center.x,y:e.center.y};case"gaArea":return Se(e.points);case"section":return Se(e.outline);case"text":return{x:e.position.x,y:e.position.y};case"shape":return e.points&&e.points.length?Se(e.points):e.x!=null&&e.y!=null&&e.width!=null&&e.height!=null?{x:e.x+e.width/2,y:e.y+e.height/2}:{x:e.x??0,y:e.y??0};case"decorImage":return{x:e.x+e.width/2,y:e.y+e.height/2}}}function Ke(e,t){return e.length===t.length&&e.every((n,o)=>n.x===t[o].x&&n.y===t[o].y)}function cn(e,t){if(e.type!=="gaArea"||!Ke(e.points,t.outline))return!1;let n=e.holes??[],o=t.holes??[];return n.length===o.length&&n.every((r,i)=>Ke(r,o[i]))}function Ye(e,t){let n=e.filter(s=>s.type==="section"),o="referenceInventorySource"in t?t.referenceInventorySource?.logicalSectionId:void 0,r=sn(t);return(o?n.find(s=>(s.logicalSectionId??s.id)===o&&(cn(t,s)||$e(r,s.outline,s.holes))):void 0)??n.find(s=>$e(r,s.outline,s.holes))}function qe(e){return e.floors&&e.floors.length?e.floors.flatMap(t=>t.objects):e.objects}var an="__sl_ga__",Pe=1e5;function ln(e,t){return`${an}${encodeURIComponent(e)}__${t+1}`}function un(e){let t=e.inventorySegments;if(t===void 0)return!0;if(!Array.isArray(t)||t.length<1||t.length>256)return!1;let n=0,o=new Map;for(let r of t){if(!r||typeof r.sourceAreaId!="string"||!r.sourceAreaId.trim()||r.sourceAreaId.length>160||!Number.isInteger(r.startIndex)||r.startIndex<0||!Number.isInteger(r.count)||r.count<1||r.startIndex+r.count>Pe||(n+=r.count,n>Pe))return!1;let i=o.get(r.sourceAreaId)??[],s=r.startIndex+r.count;if(i.some(f=>r.startIndex<f.end&&s>f.start))return!1;i.push({start:r.startIndex,end:s}),o.set(r.sourceAreaId,i)}return n===e.capacity}function fn(e){let t=Math.min(Pe,Math.max(0,Math.floor(e.capacity)));return e.inventorySegments===void 0?t?[{sourceAreaId:e.id,startIndex:0,count:t}]:[]:un(e)?e.inventorySegments.map(n=>({...n})):[]}function Je(e){return fn(e).flatMap(t=>Array.from({length:t.count},(n,o)=>ln(t.sourceAreaId,t.startIndex+o)))}var ce="__ungrouped__";function dn(e){return e.type==="row"?we(e).map(t=>t.label):e.type==="table"?We(e).map(t=>t.label):e.type==="booth"?Xe(e).map(t=>t.label):e.type==="gaArea"?Je(e):[]}function hn(e){return e.type==="row"||e.type==="table"||e.type==="booth"||e.type==="gaArea"}function Qe(e){let t=qe(e),n=t.filter(s=>s.type==="section"),o=new Map;for(let s of n){let f=s.logicalSectionId??s.id;o.get(f)||o.set(f,{id:f,label:s.displayLabel||s.label||"Section",zone:s.zone,seatCount:0,objectIds:[],seatLabels:[]})}let r={id:ce,label:"Other seats",seatCount:0,objectIds:[],seatLabels:[]},i=new Map;for(let s of t){if(!hn(s))continue;let f=dn(s);if(f.length===0)continue;let u=Ye(t,s),m=u?o.get(u.logicalSectionId??u.id):r;m.seatCount+=f.length,m.objectIds.push(s.id),m.seatLabels.push(...f),i.set(s.id,m.id)}return{sections:[...o.values()],ungrouped:r.objectIds.length?r:null,objectToSection:i}}function Ze(e,t){return t.has(e.id)||!!e.logicalSectionId&&t.has(e.logicalSectionId)||!!e.zone&&t.has(e.zone)}function et(e,t){let n=new Set;if(!t.size)return n;let{sections:o,ungrouped:r,objectToSection:i}=Qe(e),s=new Set,f=new Map(o.map(m=>[m.id,m.zone]));for(let m of o){let c=f.get(m.id);(t.has(m.id)||c&&t.has(c))&&s.add(m.id)}let u=!!r&&t.has(ce);for(let[m,c]of i)(s.has(c)||u&&c===ce)&&n.add(m);return n}function pn(e,t){if(!t.size)return e;let n=et(e,t),o=t instanceof Set?t:new Set(t),r=s=>!(n.has(s.id)||s.type==="section"&&Ze(s,o));if(e.floors&&e.floors.length){let s=!1,f=e.floors.map(u=>{let m=u.objects.filter(r);return m.length!==u.objects.length&&(s=!0),m.length===u.objects.length?u:{...u,objects:m}});return s?{...e,floors:f,objects:f[0].objects}:e}let i=e.objects.filter(r);return i.length===e.objects.length?e:{...e,objects:i}}0&&(module.exports={DEFAULT_SECTION_CORNER_SMOOTHING,MAX_EDGE_SAGITTA_RATIO,TIER_HEIGHT_M,UNGROUPED_ID,applyHidden,arcLevelAt,bearingDeg,buildSectionRake,computeSections,distanceToPolyline,fitBowlProfile,fitCircle,hiddenObjectIds,indexLabel,isSectionHidden,logicalNumberingRow,relabelRows,resolveSection,reverseSectionOutlinePath,sampleSectionOutlinePath,seatConfidenceDisclosure,seatDisplayLabel,seatInventoryLabel,seatLabelPart,sectionCornerSmoothingPath,sectionGeometry,sectionOutlinePathFrom,sectionPathSegmentEnd,toBijectiveBase,toLetters,toRoman,transformSectionOutlinePath,translateSectionOutlinePath,validSectionOutlinePath});