@seatlayer/core 0.73.0 → 0.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/ar-JOSU54ZZ.js +1 -0
- package/dist/be-UDIVAZGH.js +1 -0
- package/dist/bg-AJX2SNK4.js +1 -0
- package/dist/ca-MC23KMQH.js +1 -0
- package/dist/{categoryInventory-Bcmnr6ZH.d.ts → categoryInventory-C5I2U-EM.d.ts} +1 -1
- package/dist/{categoryInventory-DueSAIBX.d.cts → categoryInventory-DFp26meo.d.cts} +1 -1
- package/dist/chunk-KHFCTR3V.js +1 -0
- package/dist/{chunk-UX67GDLV.js → chunk-N3DPHRJ3.js} +1 -1
- package/dist/{chunk-JLYR66MT.js → chunk-OGIAQX62.js} +1 -1
- package/dist/chunk-QUOAQQMP.js +1 -0
- package/dist/chunk-SPM2LMKI.js +1 -0
- package/dist/{chunk-N5NRM4NW.js → chunk-TN6DFYEV.js} +1 -1
- package/dist/{chunk-ZMYRXJOA.js → chunk-UVAV3E7K.js} +1 -1
- package/dist/chunk-X2GZ5O7C.js +1 -0
- package/dist/{chunk-BAWUBGWY.js → chunk-YACNGDTE.js} +1 -1
- package/dist/core/chart-ops/index.cjs +1 -1
- package/dist/core/chart-ops/index.d.cts +4 -4
- package/dist/core/chart-ops/index.d.ts +4 -4
- package/dist/core/chart-ops/index.js +1 -1
- package/dist/core/inventory/index.cjs +1 -1
- package/dist/core/inventory/index.d.cts +4 -4
- package/dist/core/inventory/index.d.ts +4 -4
- package/dist/core/inventory/index.js +1 -1
- package/dist/core/layout/index.cjs +1 -1
- package/dist/core/layout/index.d.cts +5 -5
- package/dist/core/layout/index.d.ts +5 -5
- package/dist/core/layout/index.js +1 -1
- package/dist/core/quality/index.d.cts +3 -3
- package/dist/core/quality/index.d.ts +3 -3
- package/dist/core/render-assets/index.d.cts +1 -1
- package/dist/core/render-assets/index.d.ts +1 -1
- package/dist/core/render-assets/index.js +1 -1
- package/dist/core/seatConfidence.d.cts +1 -1
- package/dist/core/seatConfidence.d.ts +1 -1
- package/dist/core/sections/index.cjs +1 -1
- package/dist/core/sections/index.d.cts +5 -5
- package/dist/core/sections/index.d.ts +5 -5
- package/dist/core/sections/index.js +1 -1
- package/dist/cs-Q4OEV3NE.js +1 -0
- package/dist/cy-TPDRMPTK.js +1 -0
- package/dist/da-U6XXTCII.js +1 -0
- package/dist/de-ZV54ZWHR.js +1 -0
- package/dist/el-5VQKNNQV.js +1 -0
- package/dist/es-Y3BNIAEW.js +1 -0
- package/dist/et-HCCA6TE3.js +1 -0
- package/dist/{eventConfigurations-C7YAqkFR.d.ts → eventConfigurations-BQGuLLv0.d.ts} +1 -1
- package/dist/{eventConfigurations-DwXdrjqj.d.cts → eventConfigurations-DAaOaKJK.d.cts} +1 -1
- package/dist/fa-SZ3EAODM.js +1 -0
- package/dist/fi-S34TMT35.js +1 -0
- package/dist/fr-RQIXNHQ5.js +1 -0
- package/dist/he-PPNABESI.js +1 -0
- package/dist/hr-IZOGRWC5.js +1 -0
- package/dist/hu-K7EOGFAB.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +148 -14
- package/dist/index.d.ts +148 -14
- package/dist/index.js +1 -1
- package/dist/it-PD5WJDNR.js +1 -0
- package/dist/ja-3CFZ2KK6.js +1 -0
- package/dist/ku-MQJTRLDV.js +1 -0
- package/dist/{labeling-iugoy25P.d.cts → labeling-BZp91HiS.d.cts} +1 -1
- package/dist/{labeling-BUCj-kHU.d.ts → labeling-Duul2sao.d.ts} +1 -1
- package/dist/{layout-Dv3R0Mpw.d.ts → layout-DGbWo5fV.d.ts} +12 -3
- package/dist/{layout-DPJX6D9k.d.cts → layout-Gkx3fo5_.d.cts} +12 -3
- package/dist/localeLoaders-ETY2H7H3.js +1 -0
- package/dist/lt-6Q5DJHXR.js +1 -0
- package/dist/lv-BQ3LWGW6.js +1 -0
- package/dist/nl-ZPVH2YGT.js +1 -0
- package/dist/no-R7I6YW7N.js +1 -0
- package/dist/openPanorama-6FMXAJ6O.js +20 -0
- package/dist/pl-EU2O5DYI.js +1 -0
- package/dist/pt-UMSFOY5P.js +1 -0
- package/dist/{renderedQuality-CfonzUpl.d.ts → renderedQuality-BYhJ3Cer.d.ts} +1 -1
- package/dist/{renderedQuality-CSHrmnHf.d.cts → renderedQuality-CEPse8ir.d.cts} +1 -1
- package/dist/{renderer-Dn4Plcv9.d.cts → renderer-BlLKrW-U.d.ts} +17 -1
- package/dist/{renderer-C5avrVLy.d.ts → renderer-Cv_gzYvT.d.cts} +17 -1
- package/dist/ro-GR35LU2L.js +1 -0
- package/dist/ru-CXYAZQEV.js +1 -0
- package/dist/{sections-DhJ7TukF.d.cts → sections-CRSGPI3T.d.cts} +1 -1
- package/dist/{sections-uV7vqDHj.d.ts → sections-DIVvr8QN.d.ts} +1 -1
- package/dist/{segmentedRowModel-DgSEzAYd.d.ts → segmentedRowModel-CD-YT9bT.d.ts} +1 -1
- package/dist/{segmentedRowModel-DWOjcPrU.d.cts → segmentedRowModel-CvyOS6Bx.d.cts} +1 -1
- package/dist/sk-GUB52YMC.js +1 -0
- package/dist/sl-J7N6LDON.js +1 -0
- package/dist/sr-A7GQEH7K.js +1 -0
- package/dist/sv-ARLHHSPZ.js +1 -0
- package/dist/{ticketRestrictions-JT87K45q.d.cts → ticketRestrictions-C31mrE97.d.cts} +2 -2
- package/dist/{ticketRestrictions-DIh61MqE.d.ts → ticketRestrictions-DXO2eckD.d.ts} +2 -2
- package/dist/tr-6TE3U7WM.js +1 -0
- package/dist/{types-Dx4jA8aI.d.cts → types-BVRza86Q.d.cts} +15 -0
- package/dist/{types-Dx4jA8aI.d.ts → types-BVRza86Q.d.ts} +15 -0
- package/dist/uk-RMVPSRMH.js +1 -0
- package/dist/view3d/crossfade/panorama.cjs +1 -1
- package/dist/view3d/crossfade/panorama.d.cts +20 -2
- package/dist/view3d/crossfade/panorama.d.ts +20 -2
- package/dist/view3d/crossfade/panorama.js +1 -1
- package/dist/view3d/index.cjs +31 -31
- package/dist/view3d/index.d.cts +30 -3
- package/dist/view3d/index.d.ts +30 -3
- package/dist/view3d/index.js +25 -25
- package/dist/view3d/scene/scene.worker.cjs +1 -1
- package/dist/view3d/scene/scene.worker.js +1 -1
- package/dist/zh-Hans-SNO4DA32.js +1 -0
- package/dist/zh-Hant-TVIKBD5S.js +1 -0
- package/package.json +2 -2
- package/dist/ar-JP4VPYJ2.js +0 -1
- package/dist/be-ROTFZNMH.js +0 -1
- package/dist/bg-YMQ3B5NS.js +0 -1
- package/dist/ca-L2OMCHWL.js +0 -1
- package/dist/chunk-52MZJZMW.js +0 -1
- package/dist/chunk-5JB4VW6B.js +0 -1
- package/dist/chunk-BLPBTW6I.js +0 -1
- package/dist/chunk-HDY2MYYH.js +0 -1
- package/dist/chunk-KN7GLEAI.js +0 -1
- package/dist/chunk-YFV4DSSX.js +0 -1
- package/dist/cs-CHBOZAYY.js +0 -1
- package/dist/cy-ZIVBYZBX.js +0 -1
- package/dist/da-PUY5IIER.js +0 -1
- package/dist/de-ILFIEU77.js +0 -1
- package/dist/el-5EG3QS5T.js +0 -1
- package/dist/es-YXZQB5VZ.js +0 -1
- package/dist/et-FZIUC4FC.js +0 -1
- package/dist/fa-KKBNUDRE.js +0 -1
- package/dist/fi-B6JSP5Z5.js +0 -1
- package/dist/fr-T5LHFRKG.js +0 -1
- package/dist/he-JF4HU75D.js +0 -1
- package/dist/hr-S5OXZ3NI.js +0 -1
- package/dist/hu-ZZDYG6ZF.js +0 -1
- package/dist/it-A5VCFTQP.js +0 -1
- package/dist/ja-PAJD5HFJ.js +0 -1
- package/dist/ku-KV2AIB6I.js +0 -1
- package/dist/localeLoaders-VULFUGJH.js +0 -1
- package/dist/lt-OSFNYQ2L.js +0 -1
- package/dist/lv-5INNWEN5.js +0 -1
- package/dist/nl-YOLY3DXM.js +0 -1
- package/dist/no-C5MG5NPH.js +0 -1
- package/dist/openPanorama-HGRYMWKC.js +0 -20
- package/dist/pl-ERGM2HA3.js +0 -1
- package/dist/pt-S6SBTHES.js +0 -1
- package/dist/ro-NQ4LIATX.js +0 -1
- package/dist/ru-ICFP6U3S.js +0 -1
- package/dist/sk-VYH6WIZ2.js +0 -1
- package/dist/sl-AA54VE5P.js +0 -1
- package/dist/sr-Z27ZL5ZE.js +0 -1
- package/dist/sv-BT4MNMB5.js +0 -1
- package/dist/tr-3TSE3BBR.js +0 -1
- package/dist/uk-YD2PBENU.js +0 -1
- package/dist/zh-Hans-VPQE6LWU.js +0 -1
- package/dist/zh-Hant-PUKPX45I.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Ne=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var Zn=Object.getOwnPropertyNames;var Wn=Object.prototype.hasOwnProperty;var qn=(e,t)=>{for(var n in t)Ne(e,n,{get:t[n],enumerable:!0})},Qn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Zn(t))!Wn.call(e,r)&&r!==n&&Ne(e,r,{get:()=>t[r],enumerable:!(o=Yn(t,r))||o.enumerable});return e};var Jn=e=>Qn(Ne({},"__esModule",{value:!0}),e);var Wr={};qn(Wr,{CATEGORY_INVENTORY_FAMILIES:()=>Oe,GroupedTableProjectionError:()=>se,MAX_DIRECT_ROW_SWEEP:()=>yt,MAX_EVENT_INVENTORY:()=>Ae,MAX_GA_CAPACITY:()=>Y,MAX_ROW_BLOCK_ROWS:()=>bt,MAX_ROW_SEATS:()=>q,MIN_ROW_BLOCK_ROWS:()=>mt,MIN_ROW_SEATS:()=>W,applicableTicketTiers:()=>Hr,capacityControl:()=>Nn,categoryCapacity:()=>Nr,chartCapacity:()=>pt,companionSelectionIssue:()=>Hn,describeCategoryInventoryConflict:()=>it,effectiveSeatOwnerCategoryCounts:()=>me,gaAreasOf:()=>_o,gaInventorySegments:()=>qe,gaUnitLabel:()=>zt,gaUnitLabels:()=>Qe,groupedTableInventory:()=>Vr,growJoinedGAInventory:()=>jo,inspectCategoryInventoryConflicts:()=>ge,intactRowBlockMembers:()=>Br,isGaUnitLabel:()=>pe,pickBestAvailable:()=>St,pickBestAvailableInventory:()=>eo,remediateCategoryInventoryConflicts:()=>at,resizeChartCapacity:()=>$r,resolveRowBlockCount:()=>Dr,resolveRowStartCapacity:()=>Ur,resolveRowTerminalCapacity:()=>Kr,resolveTicketTierForSeat:()=>ht,rowBlockEdgePoint:()=>gt,rowBlockPreviewRows:()=>$n,rowStartEndpoint:()=>Un,rowTerminalEndpoint:()=>Kn,rowWithStartCapacity:()=>Gn,rowWithTerminalCapacity:()=>Bn,strandedSingles:()=>Fr,ticketOptionNotApplicableIssue:()=>Vn,ticketSelectionIssue:()=>Zr,ticketTierAppliesToSeat:()=>_e,validGAInventorySegments:()=>ke});module.exports=Jn(Wr);function $e(e,t){if(Number.isInteger(e.logicalSeatIndex))return e.logicalSeatIndex;let n=e.id.lastIndexOf(":");if(n<0)return t;let o=Number(e.id.slice(n+1));return Number.isFinite(o)?o:t}function xe(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}function vt(e){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 xt(e,t){return e.find(n=>n.focalPoint)?.focalPoint??t}function Fe(e){return e.commercial?.premium===!0}function St(e,t,n){let o=Math.floor(n.qty);if(!Number.isFinite(o)||o<=0)return{labels:[],reason:"sold_out"};let{categoryKey:r,zoneId:i,focal:s,preferPremium:c,accessibility:d,requireContiguous:l}=n,u=new Map,f=[];if(e.forEach((S,g)=>{let I=t.has(S.label)&&(!r||S.categoryKey===r)&&(!i||S.zoneId===i)&&(!d||d.some(w=>S.accessibility?.includes(w))),C=S.logicalRowId??S.rowId,v=u.get(C);v||(v=[],u.set(C,v)),v.push({seat:S,index:$e(S,g),elig:I}),I&&f.push(S)}),f.length===0)return{labels:[],reason:"sold_out"};let b=null,p=S=>{if(!b)return!0;if(c&&S.nonPremium!==b.nonPremium)return S.nonPremium<b.nonPremium;if(S.orphan!==b.orphan)return S.orphan<b.orphan;if(S.d2!==b.d2)return S.d2<b.d2;let g=S.rowId.localeCompare(b.rowId);return g!==0?g<0:S.startIndex<b.startIndex};for(let[S,g]of u){let I=[...g].sort((v,w)=>v.index-w.index),C=0;for(;C<I.length;){if(!I[C].elig){C++;continue}let v=C;for(;v<I.length&&I[v].elig&&(v===C||I[v].index===I[v-1].index+1);)v++;let w=v-C;for(let O=0;O+o<=w;O++){let L=O,T=w-(O+o),a=L===1||T===1?1:0,P=I.slice(C+O,C+O+o).map(x=>x.seat),m={labels:P.map(x=>x.label),seats:P,rowId:S,startIndex:I[C+O].index,orphan:a,nonPremium:c?P.reduce((x,h)=>x+(Fe(h)?0:1),0):0,d2:xe(vt(P),xt(P,s))};p(m)&&(b=m)}C=v}}return b?{labels:b.labels}:l?{labels:[],reason:f.length?"not_enough_together":"sold_out"}:f.length<o?{labels:[],reason:"not_enough_together"}:{labels:f.map((S,g)=>({seat:S,i:g,d2:xe(S,S.focalPoint??s)})).sort((S,g)=>{if(c){let C=Fe(S.seat)?0:1,v=Fe(g.seat)?0:1;if(C!==v)return C-v}if(S.d2!==g.d2)return S.d2-g.d2;let I=(S.seat.logicalRowId??S.seat.rowId).localeCompare(g.seat.logicalRowId??g.seat.rowId);return I!==0?I:$e(S.seat,S.i)-$e(g.seat,g.i)}).slice(0,o).map(S=>S.seat.label)}}function eo(e,t,n,o){let r=Math.floor(o.qty),i=St(e,n,o),c=t.filter(f=>f.bookingMode==="whole"&&f.capacity===r&&n.has(f.label)&&(!o.categoryKey||f.categoryKey===o.categoryKey)&&(!o.zoneId||f.zoneId===o.zoneId)&&!o.accessibility).map(f=>({table:f,d2:xe(f.center,f.focalPoint??o.focal)})).sort((f,b)=>f.d2-b.d2||f.table.label.localeCompare(b.table.label))[0];if(!c)return i;if(!i.labels.length)return{labels:[c.table.label]};let d=new Map(e.map(f=>[f.label,f])),l=i.labels.map(f=>d.get(f)).filter(f=>!!f),u=l.length?xe(vt(l),xt(l,o.focal)):Number.POSITIVE_INFINITY;return c.d2<u?{labels:[c.table.label]}:i}var It=e=>Math.max(1,e.fontSize*.6+(e.letterSpacing??0));function to(e,t){let n=e.text.split(/\r?\n/);if(!e.width)return Math.max(1,n.length);let o=Math.max(1,Math.floor(t/It(e))),r=0;for(let i of n){if(!i.length){r+=1;continue}let s=0;for(let c of i.split(/\s+/)){let d=c.length;s&&s+1+d<=o?s+=1+d:(r+=Math.max(1,Math.ceil(d/o)),s=d%o)}}return Math.max(1,r)}function wt(e){let t=e.background?.padding??0,n=e.text.split(/\r?\n/),o=Math.max(1,...n.map(c=>c.length))*It(e),r=e.width??o+t*2,i=Math.max(1,r-t*2),s=to(e,i);return{width:r,height:s*e.fontSize*(e.lineHeight??1.2)+t*2,lineCount:s,padding:t}}var no=Math.PI/180;function B(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function oo(e,t,n){let o=Math.cos(n),r=Math.sin(n),i=e.x-t.x,s=e.y-t.y;return{x:t.x+i*o-s*r,y:t.y+i*r+s*o}}function Ct(e,t){return oo(e,{x:0,y:0},t*no)}function ce(e){let t=0,n=0;for(let r of e)t+=r.x,n+=r.y;let o=e.length||1;return{x:t/o,y:n/o}}function Mt(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 Lt(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[Mt(e,.5)];let o=Array.from({length:n+1},(d,l)=>Mt(e,l/n)),r=new Float64Array(o.length);for(let d=1;d<o.length;d+=1){let l=o[d].x-o[d-1].x,u=o[d].y-o[d-1].y;r[d]=r[d-1]+Math.hypot(l,u)}let i=r[r.length-1];if(i<=1e-9)return Array.from({length:t},()=>({...e.start}));let s=[],c=1;for(let d=0;d<t;d+=1){let l=i*d/(t-1);for(;c<r.length-1&&r[c]<l;)c+=1;let u=r[c-1],f=r[c],b=f===u?0:(l-u)/(f-u);s.push({x:o[c-1].x+(o[c].x-o[c-1].x)*b,y:o[c-1].y+(o[c].y-o[c-1].y)*b})}return s}function U(e,t,n){return Math.max(t,Math.min(n,e))}var Q=Math.PI*2;function le(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)}function ro(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 De(e){if(e.version!==1||e.closed!==!0||!le(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||!le(n.end))return!1;if(n.kind==="line"){if(B(t,n.end)<=1e-9)return!1}else if(n.kind==="bezier"){if(!le(n.control1)||!le(n.control2)||B(t,n.end)<=1e-9)return!1}else if(n.kind==="arc"){if(!le(n.center)||!Number.isFinite(n.radius)||n.radius<=1e-6||Math.abs(B(t,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||Math.abs(B(n.end,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||B(t,n.end)<=1e-9)return!1}else return!1;t=n.end}return B(t,e.start)<=1e-4}function io(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 Et(e,t=2){if(!De(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),c=Math.atan2(i.end.y-i.center.y,i.end.x-i.center.x),d=ro(s,c,i.clockwise),l=Math.max(2,Math.ceil(Math.abs(d)*i.radius/n));for(let u=1;u<=l;u+=1){let f=s+d*u/l;o.push({x:i.center.x+Math.cos(f)*i.radius,y:i.center.y+Math.sin(f)*i.radius})}}else{let s=B(r,i.control1)+B(i.control1,i.control2)+B(i.control2,i.end),c=Math.max(2,Math.ceil(s/n));for(let d=1;d<=c;d+=1)o.push(io(r,i,d/c))}r=i.end}return B(o[o.length-1],o[0])<=1e-4&&o.pop(),o}var ii=4/3;function Pt(e){let t=new Map,n=new Map;for(let o of e){if(o.type!=="row"||!o.segmentedRow)continue;let r=n.get(o.segmentedRow.groupId)??[];r.push(o),n.set(o.segmentedRow.groupId,r)}for(let[o,r]of n){let i=r.slice().sort((b,p)=>b.segmentedRow.componentIndex-p.segmentedRow.componentIndex),s=i[0]?.segmentedRow?.componentCount??0,c=i[0]?.segmentedRow;if(!c||!(s>=2&&i.length===s&&c?.boundaryBefore==="start"&&i.every((b,p)=>b.segmentedRow?.kind==="segmented-row-v1"&&b.segmentedRow.groupId===o&&b.segmentedRow.componentCount===s&&b.segmentedRow.componentIndex===p&&b.segmentedRow.repeatLabelOnComponents===c.repeatLabelOnComponents&&(p===0?b.segmentedRow.boundaryBefore==="start":b.segmentedRow.boundaryBefore!=="start")&&b.segmentedRow.displayLabel===c.displayLabel)))continue;let l=i.reduce((b,p)=>b+p.seatCount,0),u=0,f=0;for(let b of i)b.segmentedRow.boundaryBefore==="break"&&(u+=1),t.set(b.id,{groupId:o,adjacencyOffset:u,displayOffset:f,displayLabel:c.displayLabel,totalSeats:l,canonical:i[0],viewFromSeatUrl:c.viewFromSeatUrl,viewFromSeatMeta:c.viewFromSeatMeta,confidenceEvidence:c.confidenceEvidence}),u+=b.seatCount,f+=b.seatCount}return t}var ao="ABCDEFGHIJKLMNOPQRSTUVWXYZ";var so="abcdefghijklmnopqrstuvwxyz";function co(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 Be(e,t=!1){let n=t?so:ao;return co(Math.max(0,Math.floor(e)-1),n)}var lo=[[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 At(e){if(!Number.isFinite(e)||e<=0)return String(e);let t=Math.floor(e),n="";for(let[o,r]of lo)for(;t>=o;)n+=r,t-=o;return n}function uo(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 Ge(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??"",c=e.seatNumbering?.endAt,d=e.seatCount;if(i==="updown"||i==="updown-descending"){let p=Math.ceil(d/2),y=i==="updown"?t<p?n+2*t:n-1+2*(d-t):t<p?n+2*(p-1-t):n+1+2*(t-p);return`${s}${y}`}let l=i==="odd"||i==="even"?2:r,u=c!=null&&Number.isFinite(c)?c-(d-1)*l:n,f=o==="center"?uo(d)[t]:o==="rtl"?d-1-t:t,b;switch(i){case"odd":{let p=u%2===1?u:u+1;b=String(p+f*2);break}case"even":{let p=u%2===0?u:u+1;b=String(p+f*2);break}case"roman":b=At(u+f*r);break;case"letters-upper":b=Be(u+f*r,!1);break;case"letters-lower":b=Be(u+f*r,!0);break;default:b=String(u+f*r);break}return`${s}${b}`}function fo(e){return{...e.canonical,seatCount:e.totalSeats,label:e.displayLabel,displayLabel:e.displayLabel}}function Se(e,t,n){return n?.label??`${e.label}-${Ge(e,t)}`}function Ke(e,t,n,o){if(o?.displayLabel)return o.displayLabel;if(!n)return`${e.displayLabel||e.label}-${Ge(e,t)}`;let r=fo(n),i=n.displayOffset+t;return`${n.displayLabel}-${Ge(r,i)}`}var Ie=.02291666666666667,di=1/Ie,po=58,kt=po*Ie,ze=0,J=3,H=0,z=120,we=0,Ce=45,Ve=7,Me=1.2;function Ue(e,t,n,o){return Number.isFinite(e)?Math.max(t,Math.min(n,e)):o}function go(e){return!Number.isFinite(e)||!Number.isInteger(e)||e<0?0:e<=Ve?e:J}function ue(e,t={}){let n=Ue(t.floorBaseHeightM,H,z,0),o=Math.min(z,n+go(e.elevation)*kt),r=e.height===void 0?o:Ue(e.height,H,z,o),i=Ue(e.rake,we,Ce,0);return{height:r,rake:i}}function Ot(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 Rt(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],c=s.x-i.x,d=s.y-i.y,l=c*c+d*d,u=l>1e-12?((t-i.x)*c+(n-i.y)*d)/l:0;u<0?u=0:u>1&&(u=1);let f=Math.hypot(t-(i.x+u*c),n-(i.y+u*d));f<o&&(o=f)}return o}function mo(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 Tt(e,t){return Math.hypot(e.cx-t.cx,e.cy-t.cy)-e.r-t.r}function He(e,t){let n=1/0;for(let o of Ot(e)){let r=Rt(t,o.x,o.y);r<n&&(n=r)}for(let o of Ot(t)){let r=Rt(e,o.x,o.y);r<n&&(n=r)}return n}function bo(e,t){if(e.length<3)return{pts:e,seatIndices:t};let n=0,o=0;for(let u of e)n+=u.x,o+=u.y;n/=e.length,o/=e.length;let r=-1,i=e[0];for(let u of e){let f=Math.hypot(u.x-n,u.y-o);f>r&&(r=f,i=u)}let s=i.x-n,c=i.y-o,d=Math.hypot(s,c);d>1e-9?(s/=d,c/=d):(s=1,c=0);let l=e.map((u,f)=>({p:u,i:f,t:(u.x-n)*s+(u.y-o)*c})).sort((u,f)=>u.t-f.t);return{pts:l.map(u=>u.p),seatIndices:l.map(u=>t[u.i])}}function yo(e){let t=e.length;if(t<3)return null;let n=0,o=0;for(let C of e)n+=C.x,o+=C.y;n/=t,o/=t;let r=0,i=0,s=0,c=0,d=0,l=0,u=0;for(let C of e){let v=C.x-n,w=C.y-o;r+=v*v,s+=w*w,i+=v*w,c+=v*v*v,d+=w*w*w,l+=v*w*w,u+=w*v*v}let f=r*s-i*i;if(Math.abs(f)<1e-9)return null;let b=(c+l)/2,p=(d+u)/2,y=(b*s-p*i)/f,S=(p*r-b*i)/f,g=y+n,I=S+o;return!Number.isFinite(g)||!Number.isFinite(I)?null:{cx:g,cy:I}}var ho=.15;function vo(e){if(e.length<2)return null;let t=e.map(C=>{let v=0,w=0;for(let O of C.pts)v+=O.x,w+=O.y;return{x:v/C.pts.length,y:w/C.pts.length}}),n=0,o=0;for(let C of t)n+=C.x,o+=C.y;n/=t.length,o/=t.length;let r=0,i=0,s=0;for(let C of t){let v=C.x-n,w=C.y-o;r+=v*v,i+=v*w,s+=w*w}let c=r+s,d=r*s-i*i,l=c/2+Math.sqrt(Math.max(0,c*c/4-d)),u,f;Math.abs(i)>1e-12?(u=l-s,f=i):r>=s?(u=1,f=0):(u=0,f=1);let b=Math.hypot(u,f);if(!(b>1e-12))return null;u/=b,f/=b;let p=1/0,y=-1/0,S=[];for(let C of e){let v=1/0,w=-1/0;for(let O of C.pts){let L=O.x*u+O.y*f;L<v&&(v=L),L>w&&(w=L),L<p&&(p=L),L>y&&(y=L)}S.push(w-v)}let g=y-p;return g>1e-9?(S.sort((C,v)=>C-v),S[Math.min(S.length-1,Math.floor(S.length*.9))]/g<=xo?{x:u,y:f}:null):null}var xo=.35;function jt(e,t,n,o){let r=new Map;for(let g of n){let I=t[g],C=I.rowId||`__seat-${g}`,v=r.get(C);v||(v={pts:[],idx:[]},r.set(C,v)),v.pts.push({x:I.x,y:I.y}),v.idx.push(g)}if(!r.size)return{sectionId:e,rows:[],blockCount:0};let i=[];for(let[g,I]of r){let C=bo(I.pts,I.idx),v=0;for(let w of C.pts)v+=Math.hypot(w.x-o.x,w.y-o.y);i.push({id:g,pts:C.pts,seatIndices:C.seatIndices,blockId:-1,ordinal:0,blockDepth:0,focalDistance:v/C.pts.length})}let s=i.map(g=>mo(g.pts)),c=[];for(let g=0;g<i.length;g++){let I=1/0;for(let C=0;C<i.length;C++){if(g===C||Tt(s[g],s[C])>=I)continue;let v=He(i[g].pts,i[C].pts);v<I&&(I=v)}Number.isFinite(I)&&c.push(I)}c.sort((g,I)=>g-I);let d=c.length?c[Math.floor(c.length/2)]:1,l=Math.max(d*1.8,1e-6),u=i.map(()=>[]);for(let g=0;g<i.length;g++)for(let I=g+1;I<i.length;I++)Tt(s[g],s[I])>l||He(i[g].pts,i[I].pts)<=l&&(u[g].push(I),u[I].push(g));let f=0;for(let g=0;g<i.length;g++){if(i[g].blockId!==-1)continue;let I=f++,C=[g];for(i[g].blockId=I;C.length;){let v=C.pop();for(let w of u[v])i[w].blockId===-1&&(i[w].blockId=I,C.push(w))}}let b=new Map;for(let g of i){let I=b.get(g.blockId)??[];I.push(g),b.set(g.blockId,I)}let p=[];for(let g of i){if(g.pts.length<4)continue;let I=yo(g.pts);I&&(!Number.isFinite(I.cx)||!Number.isFinite(I.cy)||p.push({x:I.cx,y:I.cy}))}let y=p.length>=2?(()=>{let g=p.map(v=>v.x).sort((v,w)=>v-w),I=p.map(v=>v.y).sort((v,w)=>v-w),C=Math.floor(p.length/2);return{cx:g[C],cy:I[C]}})():null;if(y){let g=L=>Math.hypot(L.x-y.cx,L.y-y.cy),I=1/0,C=-1/0,v=[];for(let L of i){let T=1/0,a=-1/0;for(let P of L.pts){let m=g(P);m<T&&(T=m),m>a&&(a=m)}v.push(a-T),T<I&&(I=T),a>C&&(C=a)}let w=C-I;v.sort((L,T)=>L-T);let O=v[Math.min(v.length-1,Math.floor(v.length*.9))];if(w>1e-9&&O/w<=ho){let L=i.map(A=>{let R=0;for(let D of A.pts)R+=g(D);return{row:A,radius:R/A.pts.length}}),T=0,a=0;for(let A of L)T+=A.radius,a+=A.row.focalDistance;T/=L.length,a/=L.length;let P=0;for(let A of L)P+=(A.radius-T)*(A.row.focalDistance-a);if(P<0)for(let A of L)A.radius=-A.radius;let x=1/0;for(let A of L)A.radius<x&&(x=A.radius);L.sort((A,R)=>A.radius-R.radius);let h=-1,E=-1/0,M=w/Math.max(1,L.length)*.5,k=[];for(let A of L)A.radius-E>M&&(h++,E=A.radius),A.row.ordinal=h,A.row.blockDepth=A.radius-x,k.push(A.row);return{sectionId:e,rows:k,blockCount:f}}}let S=[];for(let[,g]of b){let I=vo(g);if(I){let C=w=>{let O=0;for(let L of w.pts)O+=L.x*I.x+L.y*I.y;return O/w.pts.length};g.sort((w,O)=>C(w)-C(O)),g.length>=2&&g[0].focalDistance>g[g.length-1].focalDistance&&g.reverse();let v=0;for(let w=0;w<g.length;w++)w>0&&(v+=He(g[w-1].pts,g[w].pts)),g[w].ordinal=w,g[w].blockDepth=v,S.push(g[w])}else{let C=1/0;for(let v of g)v.focalDistance<C&&(C=v.focalDistance);g.sort((v,w)=>v.focalDistance-w.focalDistance);for(let v=0;v<g.length;v++)g[v].ordinal=v,g[v].blockDepth=Math.max(0,g[v].focalDistance-C),S.push(g[v])}}return{sectionId:e,rows:S,blockCount:f}}var So=/^\d{4}-\d{2}-\d{2}$/;function Io(e){let t=Date.parse(e);return Number.isFinite(t)?So.test(e)?t+864e5:t:null}function wo(e,t=Date.now()){if(e.validUntil===void 0){if(e.status!=="approved")return!0;let o=e.assessedAt?Date.parse(e.assessedAt):Number.NaN;return Number.isFinite(o)&&(t instanceof Date?t.getTime():t)<=o+366*864e5}let n=Io(e.validUntil);return n===null?!1:(t instanceof Date?t.getTime():t)<n}function Co(e,t,n){return!(e.eventConfigurationId&&e.eventConfigurationId!==t||e.eventConfigurationVersion!==void 0&&e.eventConfigurationVersion!==n)}function Mo(e){return e.status!=="draft"&&e.status!=="retracted"}function Lo(e,t){return e.status===void 0?t===void 0:e.status!=="approved"?!0:typeof t=="string"&&typeof e.basisSha256=="string"&&e.basisSha256===t}function _t(e,t={}){return!!e&&Mo(e)&&Co(e,t.activeConfigurationId,t.activeConfigurationVersion)&&Lo(e,t.activeBasisSha256)&&wo(e,t.now)}function Bt(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 Le=Math.PI/180;var de=16;function Ye(e,t,n,o){let r=n*Le,i=Math.cos(r),s=Math.sin(r);return{x:o.x+e*i-t*s,y:o.y+e*s+t*i}}function Eo(e){let{seatCount:t,seatSpacing:n,curve:o,rotation:r,origin:i}=e,s=[];if(e.path)return Lt(e.path,t);if(t<=1)return t===1&&s.push({x:i.x,y:i.y}),s;if(o===0){for(let l=0;l<t;l++)s.push(Ye(l*n,0,r,i));return s}let c=o/(t-1)*Le,d=n/(2*Math.sin(Math.abs(c)/2));for(let l=0;l<t;l++){let u=l*c,f=d*Math.sin(u),b=-d+d*Math.cos(u);s.push(Ye(f,b,r,i))}return s}function Po(e){let t=new Map;if(e.overrides)for(let n of e.overrides)t.set(n.index,n);return t}function Ee(e){let t=new Set((e.overrides??[]).filter(n=>n.skip&&Number.isInteger(n.index)&&n.index>=0&&n.index<e.seatCount).map(n=>n.index));return Math.max(0,e.seatCount-t.size)}function Ao(e,t){let n=Po(e);return Eo(e).map((o,r)=>{let i=n.get(r),s=Bt(i),c=Se(e,r,i),d={...e.commercial,...i?.commercial};return{index:r,x:o.x+(i?.dx??0),y:o.y+(i?.dy??0),label:c,displayLabel:Ke(e,r,t,i),categoryKey:i?.categoryKey??e.categoryKey,skipped:!!i?.skip,accessible:s.length>0,accessibility:s,wheelchairSpaceType:i?.wheelchairSpaceType,commercial:Object.values(d).some(l=>l!==void 0&&l!==!1&&l!=="")?d:void 0,glyph:i?.glyph,viewUrl:i?.viewFromSeatUrl??e.viewFromSeatUrl,viewMeta:i?.viewFromSeatUrl?i.viewFromSeatMeta:e.viewFromSeatMeta,labelStyle:i?.labelStyle}})}function $(e){let t=[];for(let n of Ao(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,glyph:n.glyph,viewUrl:n.viewUrl,viewMeta:n.viewMeta,labelStyle:n.labelStyle});return t}function fe(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 Gt(e){let t=[],n=Math.max(0,Math.round(e.seatCount));if(n===0)return t;let o=new Map((e.overrides??[]).map(u=>[u.index,u])),r=(u,f,b,p)=>{let y=o.get(u),S=Bt(y),g=y?.label??`${e.label}-${u+1}`,I=e.displayLabel??e.label;return{index:u,label:g,displayLabel:y?.displayLabel??`${I}-${u+1}`,x:f+(y?.dx??0),y:b+(y?.dy??0),categoryKey:y?.categoryKey??e.categoryKey,skipped:!!y?.skip,accessible:S.length>0,accessibility:S,wheelchairSpaceType:y?.wheelchairSpaceType,commercial:y?.commercial,glyph:y?.glyph,viewUrl:y?.viewFromSeatUrl,viewMeta:y?.viewFromSeatUrl?y.viewFromSeatMeta:void 0,labelStyle:y?.labelStyle,...p?{side:p}:{}}};if(e.shape==="round"){let u=(e.radius??40)+de,f=e.rotation*Le,b=Math.max(0,Math.min(360,e.seatArc??360));if(b>=360||n===1){for(let g=0;g<n;g++){let I=f+g/n*2*Math.PI;t.push(r(g,e.center.x+u*Math.cos(I),e.center.y+u*Math.sin(I)))}return t}let p=b*Le,y=(2*Math.PI-p)/2,S=f+y;for(let g=0;g<n;g++){let I=S+g/(n-1)*p;t.push(r(g,e.center.x+u*Math.cos(I),e.center.y+u*Math.sin(I)))}return t}let i=e.width??80,s=e.height??50,c=fe(e),d=["top","bottom","left","right"],l=0;for(let u of d){let f=c[u];for(let b=0;b<f;b++){let p,y;u==="top"?(p=-i/2+(b+.5)*i/f,y=-s/2-de):u==="bottom"?(p=-i/2+(b+.5)*i/f,y=s/2+de):u==="left"?(p=-i/2-de,y=-s/2+(b+.5)*s/f):(p=i/2+de,y=-s/2+(b+.5)*s/f);let S=Ye(p,y,e.rotation,e.center);t.push(r(l++,S.x,S.y,u))}}return t}function Kt(e){return e.bookAsWhole||e.variableOccupancy?Math.max(0,Math.round(e.seatCount)):Gt(e).filter(t=>!t.skipped).length}function G(e){return Gt(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.glyph?{glyph:t.glyph}:{},...t.viewUrl?{viewUrl:t.viewUrl}:{},...t.viewUrl&&t.viewMeta?{viewMeta:t.viewMeta}:{},...t.labelStyle?{labelStyle:t.labelStyle}:{}}))}function ko(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 Nt(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,c=t[r].x,d=t[r].y;s>e.y!=d>e.y&&e.x<(c-i)*(e.y-s)/(d-s)+i&&(n=!n)}return n}function Oo(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),c=(r.x-n.x)**2+(r.y-n.y)**2;return s>=-1e-7&&s<=c+1e-7})}function K(e,t,n){return Nt(e,t)&&!(n??[]).some(o=>Nt(e,o)||Oo(e,o))}function Xe(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 X(e){switch(e.type){case"row":{let t=$(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 Xe(e.points);case"section":return Xe(e.outline);case"text":return{x:e.position.x,y:e.position.y};case"shape":return e.points&&e.points.length?Xe(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 $t(e,t){return e.length===t.length&&e.every((n,o)=>n.x===t[o].x&&n.y===t[o].y)}function Ro(e,t){if(e.type!=="gaArea"||!$t(e.points,t.outline))return!1;let n=e.holes??[],o=t.holes??[];return n.length===o.length&&n.every((r,i)=>$t(r,o[i]))}function To(e,t){let n=e.filter(s=>s.type==="section"),o="referenceInventorySource"in t?t.referenceInventorySource?.logicalSectionId:void 0,r=X(t);return(o?n.find(s=>(s.logicalSectionId??s.id)===o&&(Ro(t,s)||K(r,s.outline,s.holes))):void 0)??n.find(s=>K(r,s.outline,s.holes))}function Ze(e){return e.floors&&e.floors.length?e.floors:[{id:"floor-0",name:"Main",objects:e.objects,focalPoint:e.focalPoint,referenceImage:e.referenceImage,backgroundImage:e.backgroundImage}]}function Pe(e){return e.floors&&e.floors.length?e.floors.flatMap(t=>t.objects):e.objects}function Ft(e,t,n,o,r,i,s,c,d){let l=[],u=Pt(e),f=y=>!y?.eventConfigurationId||y.eventConfigurationId===o&&(y.eventConfigurationVersion===void 0||y.eventConfigurationVersion===d),b=y=>_t(y,{activeConfigurationId:o,activeConfigurationVersion:d,activeBasisSha256:r,now:c}),p=(y,S)=>b(y)?{...y,coverage:S}:void 0;for(let y of e){let S=[];if(y.type==="row"?S=$(y):y.type==="table"?S=G(y):y.type==="booth"&&(S=ko(y)),!S.length)continue;for(let w of S)w.viewUrl&&!f(w.viewMeta)&&(w.viewUrl=void 0,w.viewMeta=void 0);if(y.type==="row"){let w=u.get(y.id);if(w){let O=new Map((y.overrides??[]).map(L=>[L.index,L]));for(let L of S){let T=Number(L.id.slice(L.id.lastIndexOf(":")+1));if(!Number.isInteger(T))continue;L.logicalRowId=w.groupId,L.logicalSeatIndex=w.adjacencyOffset+T,O.get(T)?.displayLabel||(L.displayLabel=Ke(y,T,w)),!L.viewUrl&&w.viewFromSeatUrl&&f(w.viewFromSeatMeta)&&(L.viewUrl=w.viewFromSeatUrl,L.viewMeta=w.viewFromSeatMeta);let a=O.get(T)?.confidenceEvidence;L.confidenceEvidence=p(a,"exact-seat")??p(y.confidenceEvidence,"row-representative")??p(w.confidenceEvidence,"row-representative")}}}let g=To(e,y),I=g?.viewFromSeatUrl,v=(g?.zone?t?.find(w=>w.id===g.zone):void 0)?.focalPoint??n;for(let w of S){if(!w.confidenceEvidence){let O=Number(w.id.slice(w.id.lastIndexOf(":")+1)),L=(y.type==="row"||y.type==="table")&&Number.isInteger(O)?y.overrides?.find(T=>T.index===O)?.confidenceEvidence:void 0;w.confidenceEvidence=p(L,"exact-seat")??(y.type==="row"?p(y.confidenceEvidence,"row-representative"):void 0)}w.confidenceEvidence??=p(g?.confidenceEvidence,"section-representative")??(s?p(s.evidence,s.coverage):void 0),!w.viewUrl&&I&&f(g?.viewFromSeatMeta)&&(w.viewUrl=I,w.viewMeta=g?.viewFromSeatMeta),!w.viewUrl&&i&&f(i.meta)&&(w.viewUrl=i.url,w.viewMeta=i.meta),g&&(w.sectionId=g.logicalSectionId??g.id),g?.zone&&(w.zoneId=g.zone),v&&(w.focalPoint={...v})}l.push(...S)}return l}function We(e,t={}){if(e.floors?.length){let o=[];for(let r of e.floors){let i=r.focalPoint??e.focalPoint,s=r.viewFromSeatUrl?{url:r.viewFromSeatUrl,meta:r.viewFromSeatMeta}:e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,c=r.confidenceEvidence?{evidence:r.confidenceEvidence,coverage:"floor-representative"}:e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,d=Ft(r.objects,e.zones,i,e.eventConfigurationId,e.confidenceBasisSha256,s,c,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);t.resolveEyeHeights!==!1&&Dt(r.objects,r.focalPoint??e.focalPoint,r.baseHeightM??0,d);for(let l of d)l.floorId=r.id;o.push(...d)}return o}let n=Ft(e.objects,e.zones,e.focalPoint,e.eventConfigurationId,e.confidenceBasisSha256,e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);return t.resolveEyeHeights!==!1&&Dt(e.objects,e.focalPoint,t.floorBaseHeightM??0,n),n}function Dt(e,t,n,o){let r=e.filter(u=>u.type==="section"),i=n>0||r.some(u=>u.height!==void 0||u.rake!==void 0||(u.elevation??0)>0);if(!r.length||!i||!t){for(let u of o)u.eyeHeightM=n+Me;return}let s=new Array(o.length),c=new Map,d=new Map;for(let u=0;u<o.length;u++){let f=o[u],p=(f.sectionId?r.find(S=>S.id===f.sectionId)??r.find(S=>S.logicalSectionId===f.sectionId&&K({x:f.x,y:f.y},S.outline,S.holes)):void 0)??r.find(S=>K({x:f.x,y:f.y},S.outline,S.holes))??null;if(s[u]=p,!p)continue;c.has(p.id)||c.set(p.id,ue(p,{floorBaseHeightM:n}));let y=d.get(p.id);y?y.push(u):d.set(p.id,[u])}let l=new Array(o.length).fill(void 0);for(let[u,f]of d){let b=c.get(u);if(!b)continue;let p=b.rake>0?Math.tan(b.rake*Math.PI/180):0,y=jt(u,o,f,t);for(let S of y.rows){let g=S.blockDepth*Ie*p,I=b.height+g;for(let C of S.seatIndices)l[C]=I}}for(let u=0;u<o.length;u++){let f=o[u],b=s[u];if(!b){f.eyeHeightM=n+Me;continue}let p=c.get(b.id);f.eyeHeightM=(l[u]??p.height)+Me}}var Ut="__sl_ga__",Y=1e5,Ae=1e5;function zt(e,t){return`${Ut}${encodeURIComponent(e)}__${t+1}`}function ke(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>Y||(n+=r.count,n>Y))return!1;let i=o.get(r.sourceAreaId)??[],s=r.startIndex+r.count;if(i.some(c=>r.startIndex<c.end&&s>c.start))return!1;i.push({start:r.startIndex,end:s}),o.set(r.sourceAreaId,i)}return n===e.capacity}function qe(e){let t=Math.min(Y,Math.max(0,Math.floor(e.capacity)));return e.inventorySegments===void 0?t?[{sourceAreaId:e.id,startIndex:0,count:t}]:[]:ke(e)?e.inventorySegments.map(n=>({...n})):[]}function Qe(e){return qe(e).flatMap(t=>Array.from({length:t.count},(n,o)=>zt(t.sourceAreaId,t.startIndex+o)))}function jo(e,t){if(e.inventorySegments===void 0||t===e.capacity)return e.inventorySegments;if(t<e.capacity)return;let n=qe(e);if(!n.length)return;let o=t-e.capacity;if(!o)return n;let i=n.filter(c=>c.sourceAreaId===e.id).reduce((c,d)=>Math.max(c,d.startIndex+d.count),0),s=n[n.length-1];if(s?.sourceAreaId===e.id&&s.startIndex+s.count===i)s.count+=o;else{if(n.length>=256)return;n.push({sourceAreaId:e.id,startIndex:i,count:o})}return n}function _o(e){return Pe(e).filter(t=>t.type==="gaArea")}function pe(e){return e.startsWith(Ut)}var No=.15,$o=1.6;function Vt(e){return U(e??1,No,$o)}var Fo=/^#?([\da-f]{3}|[\da-f]{6})$/i;function ee(e){let t=Fo.exec((e??"").trim());if(!t)return null;let n=t[1].length===3?t[1].split("").map(r=>r+r).join(""):t[1],o=parseInt(n,16);return[o>>16&255,o>>8&255,o&255]}function Ht(e,t){let n=i=>{let s=ee(i);if(!s)return null;let c=C=>{let v=C/255;return v<=.04045?v/12.92:((v+.055)/1.055)**2.4},d=c(s[0]),l=c(s[1]),u=c(s[2]),f=(.4124*d+.3576*l+.1805*u)/.95047,b=.2126*d+.7152*l+.0722*u,p=(.0193*d+.1192*l+.9505*u)/1.08883,y=C=>C>.008856?Math.cbrt(C):7.787*C+16/116,S=y(f),g=y(b),I=y(p);return[116*g-16,500*(S-g),200*(g-I)]},o=n(e),r=n(t);return o&&r?Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]):null}function Je(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function et(e){return .2126*Je(e[0])+.7152*Je(e[1])+.0722*Je(e[2])}function F(e,t){let n=ee(e),o=ee(t);if(!n||!o)return null;let r=et(n),i=et(o);return(Math.max(r,i)+.05)/(Math.min(r,i)+.05)}function Do(e){let t=1/0,n=1/0,o=-1/0,r=-1/0,i=!1;for(let s of e)!Number.isFinite(s.x)||!Number.isFinite(s.y)||(i=!0,s.x<t&&(t=s.x),s.y<n&&(n=s.y),s.x>o&&(o=s.x),s.y>r&&(r=s.y));return i?{minX:t,minY:n,maxX:o,maxY:r}:null}function Xt(e){let t=Do(e);return t?Bo(t):null}function Bo(e){return{x:e.minX,y:e.minY,width:e.maxX-e.minX,height:e.maxY-e.minY}}var Wt=7;var qt=10;var nt=.85,Qt=12,Jt=4.5,Go=3,Yt="#000000",Zt="#ffffff",Ko=24,Uo=18.67;function en(e,t=400){return e>=Ko||t>=700&&e>=Uo?Go:Jt}var zo={wheelchair:"M7.8 4.5a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM8 7L10.5 7L10.5 15L8 15ZM8 12.5L18 12.5L18 15L8 15ZM16 15L18 15L18 18L16 18ZM5.5 16a5.5 5.5 0 1 0 11 0a5.5 5.5 0 1 0 -11 0zM8 16a3 3 0 1 1 6 0a3 3 0 1 1 -6 0z",companion:"M5.5 6.5a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM4.5 18.5L6 11.5L11 11.5L12.5 18.5ZM12.5 7.5a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM11.5 19L13 12.5L18 12.5L19.5 19Z","semi-ambulatory":"M8.3 3.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM9 6.2L12 6.6L11 13.5L8.6 13L9 6.2ZM8.6 13L11 13L9.5 21L7 21ZM10.4 13L12.6 13L13.6 21L11.2 21ZM11.2 7.2L14 8L14.6 9.6L11.9 8.9ZM14.4 6.8L15.9 6.8L16.4 21L14.8 21Z","designated-aisle":"M3 5L6 5L6 14L3 14ZM3 12L13 12L13 15L3 15ZM5 15L7 15L7 20L5 20ZM11 15L13 15L13 20L11 20ZM13 7L20 7L17 4L19 4L23 8.5L19 13L17 13L20 10L13 10Z","step-free":"M4 4.5a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM4.4 7L7.5 7L7.5 13L11 15L9.5 17L5 14L4.4 7ZM2 19L8 19L17 10L22 10L22 13L18 13L10 21L2 21Z",hearing:"M15.5 3.5C9 2.2 5.5 6 5.5 11.5C5.5 16 8 19.5 10.5 21C13.2 22.6 16.4 20.8 15.4 18C14.8 16.4 12.9 16.1 13 14C13.1 11.9 15.8 11.4 15.8 8.5C15.8 5.4 13 4 15.5 3.5Z",cart:"M5.5 6L18.5 6a2.5 2.5 0 0 1 2.5 2.5L21 15.5a2.5 2.5 0 0 1 -2.5 2.5L11 18L7 20.5L7.5 18L5.5 18a2.5 2.5 0 0 1 -2.5 -2.5L3 8.5a2.5 2.5 0 0 1 2.5 -2.5zM6.5 11L17.5 11L17.5 12.6L6.5 12.6zM6.5 14L17.5 14L17.5 15.6L6.5 15.6z","sign-language":"M7 11L17 11L17 18a2 2 0 0 1 -2 2L9 20a2 2 0 0 1 -2 -2zM7.6 5L9.4 5L9.4 12L7.6 12zM9.9 3.5L11.7 3.5L11.7 12L9.9 12zM12.3 3.5L14.1 3.5L14.1 12L12.3 12zM14.6 5L16.4 5L16.4 12L14.6 12zM7.2 12.5L5 10.2L6.4 8.9L8.6 11.2Z","low-vision":"M2.5 12C6 6 18 6 21.5 12C18 18 6 18 2.5 12ZM9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM17.5 3L19 3L19 6L17.5 6ZM19 4L22 4L22 5.5L19 5.5Z","sensory-friendly":"M4 11C4 5 7 2.5 12 2.5S20 5 20 11L17 11C17 7 15.5 5.5 12 5.5S7 7 7 11ZM3 10L8 10L8 19L5 19a2 2 0 0 1 -2 -2ZM16 10L21 10L21 17a2 2 0 0 1 -2 2L16 19ZM9 12L15 12L15 14L9 14ZM10 16L14 16L14 18L10 18Z","plus-size":"M9.4 4.3a2.6 2.6 0 1 0 5.2 0a2.6 2.6 0 1 0 -5.2 0zM5 20L4 13C4 10.5 7 9.5 12 9.5C17 9.5 20 10.5 20 13L19 20Z","lift-armrest":"M5 6L8 6L8 19L5 19zM5 16L18 16L18 19L5 19zM8 12L17 12L17 14.5L8 14.5zM14 7L16 7L16 12L14 12zM12 7L18 7L15 3Z"},Oi=zo.wheelchair;var tt=F;function ot(e,t,n){let o=ee(e),r=ee(t);if(!o||!r)return t;let i=Math.max(0,Math.min(1,n));return`#${o.map((c,d)=>Math.round(c*i+r[d]*(1-i))).map(c=>c.toString(16).padStart(2,"0")).join("")}`}function tn(e,t,n=Jt){let o=tt(t,e);if(o!=null&&o>=n)return t;let r=tt(Yt,e)??0,i=tt(Zt,e)??0;return r===0&&i===0?t:r>=i?Yt:Zt}var te=[{key:"wheelchair",label:"Wheelchair space",short:"Wheelchair",icon:"\u267F"},{key:"companion",label:"Companion seat",short:"Companion",icon:"\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}"},{key:"semi-ambulatory",label:"Semi-ambulatory (limited mobility)",short:"Limited mobility",icon:"\u{1F9AF}"},{key:"designated-aisle",label:"Designated aisle / transfer seat",short:"Aisle transfer",icon:"AS"},{key:"step-free",label:"Step-free accessible seat",short:"Step-free",icon:"SF"},{key:"hearing",label:"Assistive listening",short:"Hearing",icon:"\u{1F9BB}"},{key:"cart",label:"CART live-caption view",short:"CART captions",icon:"CC"},{key:"sign-language",label:"Sign-language view",short:"Sign language",icon:"\u{1F91F}"},{key:"low-vision",label:"Blind / low-vision viewing",short:"Low vision",icon:"LV"},{key:"sensory-friendly",label:"Quiet / sensory-friendly seating",short:"Sensory-friendly",icon:"QS"},{key:"plus-size",label:"Plus-size seat",short:"Plus-size",icon:"\u{1F4BA}"},{key:"lift-armrest",label:"Lift-up armrest",short:"Lift armrest",icon:"\u2195\uFE0F"}],Ti=new Map(te.map(e=>[e.key,e]));var Vo=[{key:"obstructedView",label:"Obstructed view",short:"Obstructed",icon:"\u26D4"},{key:"restrictedView",label:"Restricted view",short:"Restricted",icon:"\u{1F441}"},{key:"premium",label:"Premium seat",short:"Premium",icon:"\u2605"}],ji=new Map(Vo.map(e=>[e.key,e]));var Ho=["reference-focal","bar","entrance","exit","restroom","screen","sound","concession","coat","wall","rail","suite","obstruction"],_i=new Set(Ho);var Xo=/^data:image\/(?:png|jpe?g|webp|gif|avif);base64,[a-z0-9+/]+={0,2}$/i,Yo=/[\s"'<>`\\]/;function rt(e){if(typeof e!="string"||!e||e.length>2e6||e!==e.trim())return!1;if(e.startsWith("data:"))return Xo.test(e);if(Yo.test(e))return!1;try{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password}catch{return!1}}function Zo(e){let t=0;for(let n=0,o=e.length;n<o;n+=1){let r=e[n],i=e[(n+1)%o];t+=r.x*i.y-i.x*r.y}return t/2}function ne(e){return Zo(e)*2}var Oe=[{key:"row-seats",label:"row seats",suffix:"rows",labelSuffix:"Rows",creationWord:"Seats",objectType:"row"},{key:"table-chairs",label:"table chairs",suffix:"tables",labelSuffix:"Tables",creationWord:"Tables",objectType:"table"},{key:"booth-units",label:"booth units",suffix:"booths",labelSuffix:"Booths",creationWord:"Booths",objectType:"booth"},{key:"ga-capacity",label:"GA capacity",suffix:"ga",labelSuffix:"GA",creationWord:"Standing",objectType:"gaArea"}];function nn(e){return e.floors?.length?e.floors:[{id:"floor-0",objects:e.objects}]}function Wo(e){return Oe.find(t=>t.key===e)}function me(e){let t=new Map,n=Math.max(0,Math.floor(e.seatCount)),o=new Map((e.overrides??[]).filter(i=>Number.isInteger(i.index)&&i.index>=0&&i.index<e.seatCount).map(i=>[i.index,i])),r=(i,s=1)=>{i&&s>0&&t.set(i,(t.get(i)??0)+s)};r(e.categoryKey,n-o.size);for(let i of o.values())i.skip||r(i.categoryKey??e.categoryKey);return t}function qo(e){return e.type==="row"||e.type==="table"?[...me(e).keys()]:e.type==="booth"?e.categoryKey?[e.categoryKey]:[]:e.type==="gaArea"?e.capacity>0&&e.categoryKey?[e.categoryKey]:[]:[]}function on(e){return Oe.find(t=>t.objectType===e.type)??null}function rn(e){return e.type==="row"||e.type==="table"||e.type==="booth"||e.type==="gaArea"}function ge(e){let t=new Map;for(let r of nn(e))for(let i of r.objects){if(!rn(i))continue;let s=on(i);for(let c of qo(i)){let d=t.get(c)??new Map,l=d.get(s.key)??[];if(!l.some(u=>u.id===i.id)){let u=i.displayLabel||i.label||i.id;l.push({id:i.id,label:u,type:s.objectType,floorId:r.id})}d.set(s.key,l),t.set(c,d)}}let n=new Map(e.categories.map(r=>[r.key,r.label]));return[...e.categories.map(r=>r.key),...[...t.keys()].filter(r=>!n.has(r)).sort()].flatMap(r=>{let i=t.get(r);if(!i||i.size<2)return[];let s=Oe.flatMap(c=>{let d=i.get(c.key);return d?.length?[{family:c.key,label:c.label,objectType:c.objectType,targets:d}]:[]});return[{categoryKey:r,categoryLabel:n.get(r)??r,families:s,objectIds:[...new Set(s.flatMap(c=>c.targets.map(d=>d.id)))]}]})}function it(e){let t=e.families.map(n=>`${n.label} (${n.targets.map(o=>o.label).join(", ")})`).join(" and ");return`Category \u201C${e.categoryLabel}\u201D is used by more than one kind of inventory \u2014 ${t}. Each category can belong to only one kind \u2014 use the safe split to separate them (prices, ticket tiers, accessibility, and provenance are preserved).`}function an(e){return e.normalize("NFKC").trim().toLocaleLowerCase("en")}function Qo(e,t,n){for(let o=1;o<=1e4;o+=1){let r=o===1?`--${t}`:`--${t}-${o}`,s=`${e.slice(0,Math.max(1,160-r.length))}${r}`;if(!n.has(s))return n.add(s),s}throw new Error(`Unable to allocate a category key for ${e} (${t})`)}function Jo(e,t,n){for(let o=1;o<=1e4;o+=1){let r=o===1?` (${t})`:` (${t} ${o})`,s=`${e.normalize("NFKC").trim().slice(0,Math.max(1,80-r.length)).trimEnd()}${r}`,c=an(s);if(!n.has(c))return n.add(c),s}throw new Error(`Unable to allocate a category label for ${e} (${t})`)}function er(e,t,n,o){let r=Wo(t);return{...structuredClone(e),key:Qo(e.key,r.suffix,n),label:Jo(e.label,r.labelSuffix,o)}}function tr(e,t,n){let o=[];for(let r of nn(e))for(let i of r.objects){if(!rn(i))continue;let s=on(i),c=n.get(s.key);if(!(!c||c===t))if(i.type==="row"||i.type==="table"){let d=[];i.categoryKey===t&&(i.categoryKey=c);for(let l of i.overrides??[])l.categoryKey===t&&(l.categoryKey=c,d.push(l.index));(i.categoryKey===c||d.length)&&o.push({family:s.key,floorId:r.id,objectId:i.id,objectType:s.objectType,fromCategoryKey:t,toCategoryKey:c,...d.length?{seatOverrideIndices:d.sort((l,u)=>l-u)}:{}})}else i.categoryKey===t&&(i.categoryKey=c,o.push({family:s.key,floorId:r.id,objectId:i.id,objectType:s.objectType,fromCategoryKey:t,toCategoryKey:c}))}return o}function at(e){let t=structuredClone(e),n=ge(t);if(!n.length)return{doc:t,changed:!1,changes:[],before:n,after:n};let o=new Set(t.categories.map(c=>c.key)),r=new Set(t.categories.map(c=>an(c.label))),i=[];for(let c of n){let d=t.categories.findIndex(y=>y.key===c.categoryKey);if(d<0)continue;let l=t.categories[d],u=c.families[0].family,f=new Map([[u,l.key]]),b=c.families.slice(1).map(y=>{let S=er(l,y.family,o,r);return f.set(y.family,S.key),{family:y.family,key:S.key,label:S.label,category:S}});t.categories.splice(d+1,0,...b.map(y=>y.category));let p=tr(t,l.key,f);i.push({categoryKey:l.key,categoryLabel:l.label,retainedFamily:u,clones:b.map(({family:y,key:S,label:g})=>({family:y,key:S,label:g})),reassignments:p})}t.floors?.length&&(t.objects=t.floors[0].objects);let s=ge(t);return{doc:t,changed:i.length>0,changes:i,before:n,after:s}}function nr(e,t){return Math.abs(e.x-t.x)<=1e-7&&Math.abs(e.y-t.y)<=1e-7}function be(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function Re(e,t,n){let o=be(t,n,e);return Math.abs(o)>1e-7?!1:e.x>=Math.min(t.x,n.x)-1e-7&&e.x<=Math.max(t.x,n.x)+1e-7&&e.y>=Math.min(t.y,n.y)-1e-7&&e.y<=Math.max(t.y,n.y)+1e-7}function or(e,t,n,o){let r=be(e,t,n),i=be(e,t,o),s=be(n,o,e),c=be(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)?!0:Math.abs(r)<=1e-7&&Re(n,e,t)||Math.abs(i)<=1e-7&&Re(o,e,t)||Math.abs(s)<=1e-7&&Re(e,n,o)||Math.abs(c)<=1e-7&&Re(t,n,o)}function rr(e){return e.reduce((t,n,o)=>{let r=e[(o+1)%e.length];return t+n.x*r.y-r.x*n.y},0)}function ir(e){for(let t=0;t<e.length;t+=1){let n=(t+1)%e.length;for(let o=t+1;o<e.length;o+=1){let r=(o+1)%e.length;if(!(t===o||n===o||r===t)&&or(e[t],e[n],e[o],e[r]))return!0}}return!1}function sn(e){return e.length<3?{ok:!1,code:"too_few_vertices",message:"Add at least three vertices to create a polygon."}:e.length>256?{ok:!1,code:"too_many_vertices",message:"A polygon can contain at most 256 vertices."}:e.some(t=>!Number.isFinite(t.x)||!Number.isFinite(t.y)||Math.abs(t.x)>1e7||Math.abs(t.y)>1e7)?{ok:!1,code:"invalid_coordinate",message:"Every polygon vertex must use a finite coordinate inside the safe chart range."}:e.some((t,n)=>nr(t,e[(n+1)%e.length]))?{ok:!1,code:"duplicate_vertex",message:"Move or remove duplicate neighbouring vertices."}:Math.abs(rr(e))<2?{ok:!1,code:"degenerate_polygon",message:"The polygon needs a visible enclosed area."}:ir(e)?{ok:!1,code:"self_intersection",message:"Polygon edges cannot cross or touch each other."}:{ok:!0}}var cn="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",ln=[{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:cn},{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:cn},{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"}];var ar=new Map(ln.map(e=>[e.key,e]));function un(e){return typeof e=="string"&&ar.has(e)}var Ui=ln.map(e=>e.key);var dn=["butt","round","square"],fn=["miter","round","bevel"],st=["none","arrow"];function ct(e){return e==="line"||e==="polyline"}function Z(e){return e.length>=3&&e.every(t=>Number.isFinite(t.x)&&Number.isFinite(t.y))}function oe(e,t,n){let o=(e.y-t.y)*(n.x-t.x)-(e.x-t.x)*(n.y-t.y);if(Math.abs(o)>1e-7)return!1;let r=(e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y);if(r<-1e-7)return!1;let i=(n.x-t.x)**2+(n.y-t.y)**2;return r<=i+1e-7}function re(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[r],s=t[o];if(oe(e,i,s))return!0;i.y>e.y!=s.y>e.y&&e.x<(s.x-i.x)*(e.y-i.y)/(s.y-i.y)+i.x&&(n=!n)}return n}function V(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function gn(e,t,n,o){let r=V(e,t,n),i=V(e,t,o),s=V(n,o,e),c=V(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)?!0:Math.abs(r)<=1e-7&&oe(n,e,t)||Math.abs(i)<=1e-7&&oe(o,e,t)||Math.abs(s)<=1e-7&&oe(e,n,o)||Math.abs(c)<=1e-7&&oe(t,n,o)}function ie(e){for(let t=0;t<e.length;t+=1){let n=(t+1)%e.length;for(let o=t+1;o<e.length;o+=1){let r=(o+1)%e.length;if(!(t===o||n===o||r===t)&&gn(e[t],e[n],e[o],e[r]))return!0}}return!1}function ye(e,t){for(let n=0;n<e.length;n+=1)for(let o=0;o<t.length;o+=1)if(gn(e[n],e[(n+1)%e.length],t[o],t[(o+1)%t.length]))return!0;return re(e[0],t)||re(t[0],e)}function pn(e,t){return!t.some((n,o)=>oe(e,n,t[(o+1)%t.length]))&&re(e,t)}function mn(e){let t=e.outlinePath;if(!t?.segments.length)return;let n=i=>Number.isFinite(i.x)&&Number.isFinite(i.y),o=(i,s)=>Math.hypot(i.x-s.x,i.y-s.y);if(!n(t.start))return 0;let r=t.start;for(let i=0;i<t.segments.length;i++){let s=t.segments[i];if(!s||!n(s.end)||o(r,s.end)<=1e-9||s.kind==="bezier"&&(!n(s.control1)||!n(s.control2)))return i;if(s.kind==="arc"){if(!n(s.center)||!Number.isFinite(s.radius)||s.radius<=1e-6)return i;let c=Math.max(1e-4,s.radius*1e-4);if(Math.abs(o(r,s.center)-s.radius)>c||Math.abs(o(s.end,s.center)-s.radius)>c)return i}r=s.end}return o(r,t.start)>1e-4,t.segments.length-1}function sr(e,t,n,o){let r=V(e,t,n),i=V(e,t,o),s=V(n,o,e),c=V(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)}function bn(e,t){for(let n=0;n<e.length;n+=1)for(let o=0;o<t.length;o+=1)if(sr(e[n],e[(n+1)%e.length],t[o],t[(o+1)%t.length]))return!0;return e.some(n=>pn(n,t))||t.some(n=>pn(n,e))}function yn(e){return e.role!=="reference-focal"||!e.points||!Z(e.points)?null:e.points}function hn(e){return!!e.referenceImage?.assetId&&!!e.backgroundImage?.assetId&&e.referenceImage.assetId!==e.backgroundImage.assetId}function xn(e,t){if(e.displayLabel!==void 0){let n=e.displayLabel.normalize("NFKC").trim();!(e.type==="row"&&e.displayLabel==="")&&(!n||n!==e.displayLabel||n.length>80)&&t.push({severity:"error",code:"invalid-display-label",message:`${e.type==="gaArea"?"GA area":e.type} "${e.label}" must use a normalized buyer label of 1 to 80 characters`,objectId:e.id})}if(e.displayType!==void 0){let n=e.displayType.normalize("NFKC").trim();(!n||n!==e.displayType||n.length>24)&&t.push({severity:"error",code:"invalid-display-type",message:`${e.type==="gaArea"?"GA area":e.type} "${e.label}" must use a normalized buyer type of 1 to 24 characters`,objectId:e.id})}}function vn(e,t,n,o){let r=e.crop,i=r&&(!Number.isFinite(r.x)||!Number.isFinite(r.y)||!Number.isFinite(r.width)||!Number.isFinite(r.height)||r.x<0||r.y<0||r.width<=0||r.height<=0||r.x+r.width>1.000001||r.y+r.height>1.000001);(!Number.isFinite(e.center?.x)||!Number.isFinite(e.center?.y)||!Number.isFinite(e.width)||e.width<=0||!Number.isFinite(e.opacity)||e.opacity<0||e.opacity>1||e.rotation!==void 0&&!Number.isFinite(e.rotation)||i)&&n.push({severity:"error",code:"invalid-background-placement",message:`The ${t} image has an invalid position, size, opacity, rotation, or crop`,...o?{floorId:o}:{}})}function lt(e,t,n,o){let r=e.referenceImage,i=e.backgroundImage;r&&(vn(r,"reference",t,o),!r.assetId&&!r.url&&t.push({severity:"error",code:"invalid-reference-image",message:"A trace reference must identify a private asset or self-contained image",...o?{floorId:o}:{}})),i&&(vn(i,i.assetId?"legacy reference":"buyer background",t,o),!i.assetId&&!i.url&&t.push({severity:"error",code:"invalid-buyer-background",message:"A buyer background must contain a renderable image URL",...o?{floorId:o}:{}}),i.assetId&&n.push({severity:"warning",code:"legacy-reference-background",message:"This legacy asset-backed background is trace-only and will migrate to the private reference layer when edited",...o?{floorId:o}:{}})),hn(e)&&t.push({severity:"error",code:"conflicting-reference-images",message:"The canonical reference and legacy asset-backed background identify different private sources",...o?{floorId:o}:{}})}function he(e){let t=new Set(te.map(n=>n.key));return!e||/^ref_[0-9a-f-]{36}$/.test(e.assetId)&&!!e.logicalSectionId.trim()&&["user-confirmed","authoritative-source"].includes(e.evidence)&&!!e.sourceDescription.trim()&&(e.derivation===void 0||["explicit-inventory","server-synthesized-from-aggregate"].includes(e.derivation))&&(e.aggregateEvidence===void 0||["user-confirmed","authoritative-source"].includes(e.aggregateEvidence))&&(e.derivation!=="server-synthesized-from-aggregate"||e.evidence==="user-confirmed")&&(e.sectionAssignmentEvidence===void 0||["user-confirmed","authoritative-source"].includes(e.sectionAssignmentEvidence))&&e.sectionAssignmentEvidence===void 0==!e.sectionAssignmentSourceDescription?.trim()&&(e.sectionAssignmentSourceDescription?.trim().length??0)<=240&&(e.numberingEvidence===void 0||e.numberingEvidence==="user-confirmed")&&e.numberingEvidence===void 0==!e.numberingSourceDescription?.trim()&&(e.numberingSourceDescription?.trim().length??0)<=240&&(!e.accessibility||e.accessibility.placementDerivation==="server-synthesized-row-edges"&&e.accessibility.groupLogicalSectionIds.length>0&&e.accessibility.groupLogicalSectionIds.length<=100&&new Set(e.accessibility.groupLogicalSectionIds).size===e.accessibility.groupLogicalSectionIds.length&&e.accessibility.groupLogicalSectionIds.includes(e.logicalSectionId)&&e.accessibility.groupLogicalSectionIds.every(n=>!!n.trim()&&n.length<=160)&&["user-confirmed","authoritative-source"].includes(e.accessibility.assignmentEvidence)&&!!e.accessibility.assignmentSourceDescription.trim()&&e.accessibility.assignmentSourceDescription.trim().length<=240&&e.accessibility.counts.length>0&&e.accessibility.counts.length<=te.length&&new Set(e.accessibility.counts.map(n=>n.type)).size===e.accessibility.counts.length&&e.accessibility.counts.every(n=>t.has(n.type)&&Number.isInteger(n.count)&&n.count>0&&["user-confirmed","authoritative-source"].includes(n.evidence)&&!!n.sourceDescription.trim()&&n.sourceDescription.trim().length<=240))}function Sn(e){let t=e.referenceInventoryExclusion;return!t||typeof t.assetId=="string"&&/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&t.assetId===e.referenceSource?.assetId&&typeof t.logicalSectionId=="string"&&t.logicalSectionId===(e.logicalSectionId??e.id)&&typeof t.reason=="string"&&!!t.reason.trim()&&t.reason.trim().length<=80&&["user-confirmed","authoritative-source"].includes(t.evidence)&&typeof t.sourceDescription=="string"&&!!t.sourceDescription.trim()&&t.sourceDescription.trim().length<=240}function In(e){let t=e.referenceCategorySource;return!t||/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&/^#[0-9a-f]{6}$/i.test(t.sourceColor)&&(t.sourceColors===void 0||t.sourceColors.length>0&&t.sourceColors.includes(t.sourceColor)&&new Set(t.sourceColors).size===t.sourceColors.length&&t.sourceColors.every(n=>/^#[0-9a-f]{6}$/i.test(n)&&`${n[1]}${n[3]}${n[5]}`.toLowerCase()===`${t.sourceColor[1]}${t.sourceColor[3]}${t.sourceColor[5]}`.toLowerCase()))&&(t.logicalSectionIds===void 0||t.logicalSectionIds.length>0&&new Set(t.logicalSectionIds).size===t.logicalSectionIds.length&&t.logicalSectionIds.every(n=>!!n.trim()&&n.length<=160))&&(t.assignmentDerivation===void 0||["source-color-class","confirmed-logical-sections"].includes(t.assignmentDerivation))&&t.assignmentEvidence===void 0==!t.assignmentSourceDescription?.trim()&&(t.assignmentEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.assignmentEvidence))&&(t.assignmentSourceDescription?.trim().length??0)<=240&&(t.assignmentDerivation!=="confirmed-logical-sections"||t.assignmentEvidence!==void 0&&!!t.assignmentSourceDescription?.trim())&&t.sourcePaletteColor===void 0==(t.sourcePaletteColorEvidence===void 0)&&t.sourcePaletteColorEvidence===void 0==!t.sourcePaletteColorSourceDescription?.trim()&&(t.sourcePaletteColor===void 0||/^#[0-9a-f]{6}$/i.test(t.sourcePaletteColor))&&(t.sourcePaletteColorEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.sourcePaletteColorEvidence))&&(t.sourcePaletteColorSourceDescription?.trim().length??0)<=240&&["user-confirmed","authoritative-source"].includes(t.labelEvidence)&&!!t.labelSourceDescription.trim()&&t.labelSourceDescription.trim().length<=240&&e.price!==void 0&&["user-confirmed","authoritative-source"].includes(t.priceEvidence)&&!!t.priceSourceDescription.trim()&&t.priceSourceDescription.trim().length<=240&&t.outputColorEvidence===void 0==!t.outputColorSourceDescription?.trim()&&(t.outputColorEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.outputColorEvidence))&&(t.outputColorSourceDescription?.trim().length??0)<=240&&(e.color.toLowerCase()===(t.sourcePaletteColor??t.sourceColor).toLowerCase()&&new Set((t.sourceColors??[t.sourceColor]).map(n=>`${n[1]}${n[3]}${n[5]}`.toLowerCase())).size===1||t.outputColorEvidence!==void 0&&["user-confirmed","authoritative-source"].includes(t.outputColorEvidence))}function wn(e){let t=e.referenceDirectSeatImport;return!t||/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&/^source-color:(?:#[0-9a-f]{6}(?:\+#[0-9a-f]{6})*|unclassified)$/i.test(t.familyId)}function Cn(e,t){let n=e.floors?.length?e.floors.map(i=>({id:i.id,objects:i.objects})):[{id:"floor-0",objects:e.objects}],o=new Map,r=new Map;for(let i of n){let s=i.objects.filter(l=>l.type==="row"),c=new Map,d=new Map;for(let l of s){if(l.segmentedRow){let u=c.get(l.segmentedRow.groupId)??[];u.push(l),c.set(l.segmentedRow.groupId,u)}if(l.rowBlockGeneration){let u=d.get(l.rowBlockGeneration.groupId)??[];u.push(l),d.set(l.rowBlockGeneration.groupId,u)}l.segmentedRow&&l.rowBlockGeneration&&t.push({severity:"error",code:"invalid-row-group-membership",message:`Row "${l.label}" cannot be both a segmented-row component and a generated row-block member`,objectId:l.id,floorId:i.id})}for(let[l,u]of c){let f=o.get(l);f&&f!==i.id&&t.push({severity:"error",code:"invalid-segmented-row",message:`Segmented row "${l}" cannot span multiple floors`,objectId:u[0].id,floorId:i.id}),o.set(l,i.id);let b=u.slice().sort((I,C)=>I.segmentedRow.componentIndex-C.segmentedRow.componentIndex),p=b[0]?.segmentedRow,y=p?.componentCount??0,S=p?JSON.stringify({displayLabel:p.displayLabel,repeatLabelOnComponents:p.repeatLabelOnComponents,displayType:p.displayType,labelPresentation:p.labelPresentation,viewFromSeatUrl:p.viewFromSeatUrl,viewFromSeatMeta:p.viewFromSeatMeta,confidenceEvidence:p.confidenceEvidence,smoothing:p.smoothing}):"";p&&y>=2&&y<=64&&b.length===y&&p.boundaryBefore==="start"&&b.every((I,C)=>{let v=I.segmentedRow;return v.kind==="segmented-row-v1"&&v.groupId===l&&v.componentCount===y&&v.componentIndex===C&&(C===0?v.boundaryBefore==="start":v.boundaryBefore!=="start")&&v.displayLabel.normalize("NFKC").trim()===v.displayLabel&&v.displayLabel.length>0&&v.displayLabel.length<=80&&JSON.stringify({displayLabel:v.displayLabel,repeatLabelOnComponents:v.repeatLabelOnComponents,displayType:v.displayType,labelPresentation:v.labelPresentation,viewFromSeatUrl:v.viewFromSeatUrl,viewFromSeatMeta:v.viewFromSeatMeta,confidenceEvidence:v.confidenceEvidence,smoothing:v.smoothing})===S})||t.push({severity:"error",code:"invalid-segmented-row",message:`Segmented row "${l}" has missing, duplicated, cyclic, or inconsistent component metadata`,objectId:u[0]?.id,floorId:i.id})}for(let[l,u]of d){let f=r.get(l);f&&f!==i.id&&t.push({severity:"error",code:"invalid-row-block-generation",message:"A generated row block cannot span multiple floors",objectId:u[0].id,floorId:i.id}),r.set(l,i.id)}}}function lr(e){return e.type==="row"||e.type==="table"||e.type==="booth"}function ur(e){let t=[],n=new Map((e.overrides??[]).map(o=>[o.index,o]));for(let o=0;o<e.seatCount;o++){let r=n.get(o);r?.skip||t.push({label:Se(e,o,r),index:o})}return t}function Mn(e){let t=[],n=new Map((e.overrides??[]).map(o=>[o.index,o]));for(let o=0;o<e.seatCount;o++){let r=n.get(o);r?.skip||t.push({label:r?.label??`${e.label}-${o+1}`,index:o})}return t}function Ln(e){let t=[];e.eventConfigurationId!==void 0&&(typeof e.eventConfigurationId!="string"||e.eventConfigurationId.normalize("NFKC").trim()!==e.eventConfigurationId||e.eventConfigurationId.length<1||e.eventConfigurationId.length>100)&&t.push({severity:"error",code:"invalid-event-configuration",message:"Active event configuration must contain 1 to 100 normalized characters"});let n=[],o=new Set(e.categories.map(a=>a.key)),r=new Set(te.map(a=>a.key)),i=new Map(e.categories.map(a=>[a.key,a.price!=null||a.notForSale===!0])),s=new Set;lt(e,t,n),e.theme?.logoUrl!==void 0&&!rt(e.theme.logoUrl)&&t.push({severity:"error",code:"invalid-theme-logo-url",message:"The buyer-facing theme logo URL is invalid"});let c=rt,d=(a,P,m,x={})=>{if(P===void 0)return;if(!P||typeof P!="object"||Array.isArray(P)){t.push({severity:"error",code:"invalid-seat-view-metadata",message:`${m} view metadata is invalid`,...x});return}let h=P;a||n.push({severity:"warning",code:"orphaned-seat-view-metadata",message:`${m} view metadata has no image`,...x});let E=new Set(["exact-seat","row-representative","section-representative","floor-representative","venue-representative"]);h.projection!==void 0&&h.projection!=="equirectangular"&&t.push({severity:"error",code:"invalid-seat-view-projection",message:`${m} view projection must be equirectangular`,...x}),h.coverage!==void 0&&!E.has(h.coverage)&&t.push({severity:"error",code:"invalid-seat-view-coverage",message:`${m} view coverage is invalid`,...x});let M=(k,A,R)=>typeof k=="number"&&Number.isFinite(k)&&k>=A&&k<=R;if(h.initialBearingDeg!==void 0&&!M(h.initialBearingDeg,-360,360)&&t.push({severity:"error",code:"invalid-seat-view-bearing",message:`${m} view bearing must be between -360\xB0 and 360\xB0`,...x}),h.initialPitchDeg!==void 0&&!M(h.initialPitchDeg,-90,90)&&t.push({severity:"error",code:"invalid-seat-view-pitch",message:`${m} view pitch must be between -90\xB0 and 90\xB0`,...x}),h.capturedAt!==void 0&&(typeof h.capturedAt!="string"||h.capturedAt.length>40||!Number.isFinite(Date.parse(h.capturedAt)))&&t.push({severity:"error",code:"invalid-seat-view-capture-date",message:`${m} view capture date is invalid`,...x}),h.sourceLabel!==void 0&&(typeof h.sourceLabel!="string"||h.sourceLabel.trim().length>100)&&t.push({severity:"error",code:"invalid-seat-view-source",message:`${m} view source label is invalid`,...x}),h.previewUrl!==void 0&&!c(h.previewUrl)&&t.push({severity:"error",code:"invalid-seat-view-preview-url",message:`${m} view preview URL is invalid`,...x}),h.variants!==void 0){let k=Array.isArray(h.variants)?h.variants:[];if(!Array.isArray(h.variants)||k.length<1||k.length>4)t.push({severity:"error",code:"invalid-seat-view-variants",message:`${m} view variants must contain between 1 and 4 tiers`,...x});else{let A=new Set;for(let R of k){if(!R||typeof R!="object"||!c(R.url)||!Number.isInteger(R.width)||R.width<1||R.width>12e3||!Number.isInteger(R.height)||R.height<1||R.height>12e3||R.width!==R.height*2||typeof R.sha256!="string"||!/^[a-f0-9]{64}$/.test(R.sha256)||A.has(R.width)){t.push({severity:"error",code:"invalid-seat-view-variant",message:`${m} view variant is not a unique immutable 2:1 equirectangular tier`,...x});break}A.add(R.width)}}}for(let[k,A]of[["width",h.sourceWidth],["height",h.sourceHeight],["preview width",h.previewWidth],["preview height",h.previewHeight]])A!==void 0&&(!Number.isInteger(A)||A<1||A>32768)&&t.push({severity:"error",code:"invalid-seat-view-dimensions",message:`${m} view source ${k} is invalid`,...x});h.captureEyeHeightM!==void 0&&!M(h.captureEyeHeightM,.5,3)&&t.push({severity:"error",code:"invalid-seat-view-eye-height",message:`${m} capture eye height must be between 0.5 m and 3 m`,...x}),h.eventConfigurationId!==void 0&&(typeof h.eventConfigurationId!="string"||!h.eventConfigurationId.trim()||h.eventConfigurationId.length>100)&&t.push({severity:"error",code:"invalid-seat-view-configuration",message:`${m} event configuration id is invalid`,...x}),h.eventConfigurationVersion!==void 0&&(!Number.isInteger(h.eventConfigurationVersion)||h.eventConfigurationVersion<1)&&t.push({severity:"error",code:"invalid-seat-view-configuration-version",message:`${m} event configuration version is invalid`,...x}),h.eventConfigurationVersion!==void 0&&!h.eventConfigurationId&&t.push({severity:"error",code:"invalid-seat-view-configuration-pin",message:`${m} event configuration version requires an id`,...x})},l=(a,P,m={})=>{if(a===void 0)return;let x=A=>{t.push({severity:"error",code:"invalid-seat-confidence-evidence",message:`${P} confidence evidence ${A}`,...m})};if(!a||typeof a!="object"||Array.isArray(a)){x("is invalid");return}let h=a;h.schema!=="seatlayer.seat-confidence/1"&&x("has an unsupported schema");let E=(A,R)=>typeof A=="string"&&A.normalize("NFKC").trim()===A&&A.length>0&&A.length<=R;E(h.evidenceId,120)||x("has an invalid evidence id"),E(h.modelVersion,120)||x("has an invalid model version"),new Set(["synthetic-model","organizer-approved","calibrated-provider"]).has(h.evidenceKind)||x("has an invalid evidence kind"),new Set(["generated","geometry-verified","configuration-verified"]).has(h.modelLevel)||x("has an invalid model level");let M=h.realityLevel??"none";new Set(["none","comparable-build-reference","actual-build-checked"]).has(M)||x("has an invalid reality level"),h.eventConfigurationId!==void 0&&!E(h.eventConfigurationId,100)&&x("has an invalid event configuration id"),h.eventConfigurationVersion!==void 0&&(!Number.isInteger(h.eventConfigurationVersion)||h.eventConfigurationVersion<1)&&x("has an invalid event configuration version"),h.status!==void 0&&!new Set(["draft","approved","retracted"]).has(h.status)&&x("has an invalid publication status"),h.basisSha256!==void 0&&!/^[a-f0-9]{64}$/.test(h.basisSha256)&&x("has an invalid venue basis SHA-256"),h.basisSha256!==void 0&&h.status!=="approved"&&x("can carry a venue basis SHA-256 only after approval");for(let[A,R]of[["assessment",h.assessedAt],["expiry",h.validUntil]])R!==void 0&&(!E(R,40)||!Number.isFinite(Date.parse(R)))&&x(`has an invalid ${A} date`);h.approvedByRole!==void 0&&!E(h.approvedByRole,100)&&x("has an invalid approving organization or role"),h.sourceLabel!==void 0&&!E(h.sourceLabel,120)&&x("has an invalid source label"),h.limitations!==void 0&&(!Array.isArray(h.limitations)||h.limitations.length>6||h.limitations.some(A=>!E(A,160)))&&x("has invalid limitations"),h.evidenceKind==="synthetic-model"&&(h.modelLevel!=="generated"||M!=="none")&&x("cannot describe synthetic data as verified or reality checked"),h.modelLevel!=="generated"&&(!h.assessedAt||!h.approvedByRole)&&x("requires an assessment date and approving organization or role for verified model levels"),h.modelLevel==="configuration-verified"&&!h.eventConfigurationId&&x("requires an event configuration id for configuration verification"),M!=="none"&&(!h.assessedAt||!h.sourceLabel)&&x("requires an assessment date and source for reality evidence"),M==="actual-build-checked"&&(h.modelLevel!=="configuration-verified"||!h.eventConfigurationId)&&x("requires a configuration-verified model and event configuration for an actual-build check");let k=h.modeledTarget;k!==void 0&&(!k||typeof k!="object"||Array.isArray(k)?x("has an invalid modeled target"):((!E(k.label,80)||!E(k.methodLabel,100))&&x("has invalid modeled-target labels"),(!Number.isInteger(k.totalRayCount)||k.totalRayCount<1||k.totalRayCount>1e3||!Number.isInteger(k.clearRayCount)||k.clearRayCount<0||k.clearRayCount>k.totalRayCount)&&x("has invalid modeled-target ray counts"),new Set(["clear","partial","obstructed"]).has(k.classification)||x("has an invalid modeled-target classification"),k.occluderLabels!==void 0&&(!Array.isArray(k.occluderLabels)||k.occluderLabels.length>10||k.occluderLabels.some(A=>!E(A,100)))&&x("has invalid modeled-target occluders")))};d(e.viewFromSeatUrl,e.viewFromSeatMeta,"Venue"),l(e.confidenceEvidence,"Venue"),e.viewFromSeatUrl!==void 0&&!c(e.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-venue-view-url",message:"The whole-venue view-from-seat image URL is invalid"});for(let a of e.floors??[])a.viewFromSeatUrl!==void 0&&!c(a.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-floor-view-url",message:`Floor "${a.name}" has an invalid view-from-seat image URL`}),d(a.viewFromSeatUrl,a.viewFromSeatMeta,`Floor "${a.name}"`,{floorId:a.id}),l(a.confidenceEvidence,`Floor "${a.name}"`,{floorId:a.id});let u=e.floors?.length?e.floors.flatMap(a=>a.objects):e.objects;for(let a of u)if((a.type==="row"||a.type==="section")&&(a.viewFromSeatUrl!==void 0&&!c(a.viewFromSeatUrl)&&t.push({severity:"error",code:a.type==="row"?"invalid-row-view-url":"invalid-section-view-url",message:`${a.type==="row"?"Row":"Section"} "${a.label}" has an invalid view-from-seat image URL`,objectId:a.id}),d(a.viewFromSeatUrl,a.viewFromSeatMeta,`${a.type==="row"?"Row":"Section"} "${a.label}"`,{objectId:a.id}),l(a.confidenceEvidence,`${a.type==="row"?"Row":"Section"} "${a.label}"`,{objectId:a.id})),a.type==="row"&&a.segmentedRow&&(a.segmentedRow.viewFromSeatUrl!==void 0&&!c(a.segmentedRow.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-segmented-row-view-url",message:`Segmented row "${a.segmentedRow.displayLabel}" has an invalid view-from-seat image URL`,objectId:a.id}),d(a.segmentedRow.viewFromSeatUrl,a.segmentedRow.viewFromSeatMeta,`Segmented row "${a.segmentedRow.displayLabel}"`,{objectId:a.id}),l(a.segmentedRow.confidenceEvidence,`Segmented row "${a.segmentedRow.displayLabel}"`,{objectId:a.id})),a.type==="row"||a.type==="table")for(let P of a.overrides??[])P.viewFromSeatUrl!==void 0&&!c(P.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-seat-view-url",message:`Seat ${P.index+1} has an invalid view-from-seat image URL`,objectId:a.id,seatIndices:[P.index]}),d(P.viewFromSeatUrl,P.viewFromSeatMeta,`Seat ${P.index+1}`,{objectId:a.id,seatIndices:[P.index]}),l(P.confidenceEvidence,`Seat ${P.index+1}`,{objectId:a.id,seatIndices:[P.index]});let f=new Set;for(let a of e.categories){f.has(a.key)&&t.push({severity:"error",code:"duplicate-category-key",message:`Category key "${a.key}" is used more than once`,categoryKey:a.key}),f.add(a.key);let P=new Set;for(let m of a.tiers??[]){if(P.has(m.id)&&t.push({severity:"error",code:"duplicate-category-tier-id",message:`Ticket tier id "${m.id}" is used more than once in category "${a.key}"`,categoryKey:a.key}),m.restriction!=null&&!["companion","child","senior","student","membership","custom"].includes(m.restriction)&&t.push({severity:"error",code:"invalid-category-tier-restriction",message:`Ticket tier "${m.name}" has an unknown restriction`,categoryKey:a.key}),m.buyerMessage!=null&&(!m.buyerMessage.trim()||m.buyerMessage.length>240)&&t.push({severity:"error",code:"invalid-category-tier-buyer-message",message:`Ticket tier "${m.name}" buyer guidance must contain 1 to 240 characters`,categoryKey:a.key}),m.currency!=null&&!/^[A-Z]{3}$/.test(m.currency)&&t.push({severity:"error",code:"invalid-category-tier-currency",message:`Ticket tier "${m.name}" must use a three-letter ISO currency`,categoryKey:a.key}),m.applicability!=null){let x=m.applicability.seatLabels,h=m.applicability.accessibility;(x!==void 0&&(!Array.isArray(x)||!x.length||x.length>1e4||x.some(E=>typeof E!="string"||!E.trim()||E.length>160)||new Set(x).size!==x.length)||h!==void 0&&(!Array.isArray(h)||!h.length||h.some(E=>!r.has(E))||new Set(h).size!==h.length))&&t.push({severity:"error",code:"invalid-category-tier-applicability",message:`Ticket tier "${m.name}" has invalid seat applicability`,categoryKey:a.key})}m.evidence!=null&&(!["public-host","public-event","user-confirmed"].includes(m.evidence.provenance)||!m.evidence.sourceDescription.trim()||m.evidence.sourceDescription.length>240||m.evidence.capturedAt!==void 0&&(m.evidence.capturedAt.length>40||!Number.isFinite(Date.parse(m.evidence.capturedAt))))&&t.push({severity:"error",code:"invalid-category-tier-evidence",message:`Ticket tier "${m.name}" has invalid evidence provenance`,categoryKey:a.key}),P.add(m.id)}In(a)||t.push({severity:"error",code:"invalid-reference-category-source",message:`Category ${a.label||a.key} has incomplete or invalid reference evidence`,categoryKey:a.key}),wn(a)||t.push({severity:"error",code:"invalid-reference-direct-seat-import",message:`Category ${a.label||a.key} has invalid direct-seat import provenance`,categoryKey:a.key})}let b=new Map,p=new Map,y=[],S=new Map,g=0,I=0,C=new Set;for(let a of e.floors??[])lt(a,t,n,a.id),C.has(a.id)&&t.push({severity:"error",code:"duplicate-floor-id",message:`Floor id "${a.id}" is used more than once`,floorId:a.id}),C.add(a.id),a.baseHeightM!==void 0&&(!Number.isFinite(a.baseHeightM)||a.baseHeightM<H||a.baseHeightM>z)&&t.push({severity:"error",code:"invalid-floor-base-height",message:`Floor "${a.name}" base height must be between ${H} and ${z} metres`,floorId:a.id});let v=e.floors&&e.floors.length?e.floors.flatMap(a=>a.objects):e.objects;Cn(e,t);let w=new Set;for(let a of v)w.has(a.id)&&t.push({severity:"error",code:"duplicate-object-id",message:`Object id "${a.id}" is used more than once`,objectId:a.id}),w.add(a.id);let O=new Set;for(let a of e.zones??[])O.has(a.id)&&t.push({severity:"error",code:"duplicate-zone-id",message:`Zone id "${a.id}" is used more than once`}),O.add(a.id),a.focalPoint!==void 0&&(!Number.isFinite(a.focalPoint.x)||!Number.isFinite(a.focalPoint.y))&&t.push({severity:"error",code:"invalid-zone-focal-point",message:`Zone "${a.label}" must use a finite focal point`});let L=new Map;for(let a of v)if(!(a.type!=="section"||!a.zone)){if(e.zones?.length&&!O.has(a.zone)){t.push({severity:"error",code:"unknown-section-zone",message:`Section "${a.displayLabel??a.label}" references unknown zone "${a.zone}"`,objectId:a.id});continue}L.has(a.zone)||L.set(a.zone,a)}for(let[a,P]of L){let m=e.zones?.find(x=>x.id===a);m&&(m?.focalPoint||n.push({severity:"warning",code:"missing-zone-focal-point",message:`Zone "${m?.label??a}" uses the legacy floor focal; set its own focal point before publishing`,objectId:P.id}))}for(let a of v)if((a.type==="row"||a.type==="table"||a.type==="booth"||a.type==="gaArea")&&xn(a,t),lr(a)){if(g++,I+=a.type==="booth"?1:a.type==="row"?Ee(a):a.bookAsWhole||a.variableOccupancy?a.seatCount:Mn(a).length,b.get(a.label)!==void 0?a.type!=="row"&&t.push({severity:"error",code:"duplicate-object-label",message:`Label "${a.label}" is used by more than one object`,objectId:a.id}):b.set(a.label,a.id),o.has(a.categoryKey)?s.add(a.categoryKey):t.push({severity:"error",code:"unknown-category",message:`"${a.label}" references unknown category "${a.categoryKey}"`,objectId:a.id,categoryKey:a.categoryKey}),a.type==="row"){he(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Row "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),a.seatCount<1&&t.push({severity:"error",code:"empty-row",message:`Row "${a.label}" has no seats`,objectId:a.id});let m=new Set;for(let x of a.overrides??[]){(x.accessibility??[]).filter(k=>!r.has(k)).length&&t.push({severity:"error",code:"invalid-accessibility-type",message:`Row "${a.label}" seat ${x.index+1} uses an unknown accessibility type`,objectId:a.id,seatIndices:[x.index]}),(!Number.isInteger(x.index)||x.index<0||x.index>=a.seatCount||m.has(x.index))&&t.push({severity:"error",code:"invalid-seat-override",message:`Row "${a.label}" has a duplicated or out-of-range seat override`,objectId:a.id,...Number.isInteger(x.index)?{seatIndices:[x.index]}:{}}),m.add(x.index);let E=x.wheelchairSpaceType,M=x.accessible===!0||x.accessibility?.includes("wheelchair");E!==void 0&&E!=="seat-present"&&E!=="no-seat"?t.push({severity:"error",code:"invalid-wheelchair-space",message:`Row "${a.label}" seat ${x.index+1} has an invalid wheelchair-space type`,objectId:a.id,seatIndices:[x.index]}):E&&(!M||x.skip)&&t.push({severity:"error",code:"invalid-wheelchair-space",message:x.skip?`Row "${a.label}" seat ${x.index+1} cannot have a wheelchair-space physical type while skipped from inventory`:`Row "${a.label}" seat ${x.index+1} must include wheelchair accessibility for its physical-space type`,objectId:a.id,seatIndices:[x.index]})}for(let x of ur(a))pe(x.label)&&t.push({severity:"error",code:"reserved-seat-label",message:`Seat label "${x.label}" uses SeatLayer's reserved GA namespace`,objectId:a.id,seatIndices:[x.index]}),p.get(x.label)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Seat label "${x.label}" is used more than once`,objectId:a.id,seatIndices:[x.index]}):p.set(x.label,a.id)}else if(a.type==="table"){let m=a.bookAsWhole===!0||a.variableOccupancy===!0;if(a.seatCountsBySide){let M=["top","bottom","left","right"],k=Object.keys(a.seatCountsBySide),A=M.every(D=>Number.isInteger(a.seatCountsBySide[D])&&a.seatCountsBySide[D]>=0&&a.seatCountsBySide[D]<=40),R=A?M.reduce((D,Xn)=>D+a.seatCountsBySide[Xn],0):Number.NaN;(a.shape!=="rect"||k.length!==M.length||k.some(D=>!M.includes(D))||!A||R!==a.seatCount||R<1||R>40)&&t.push({severity:"error",code:"invalid-table-side-counts",message:`Table "${a.label}" needs top, bottom, left, and right whole-number chair counts totaling its ${a.seatCount}-chair capacity`,objectId:a.id})}m&&a.overrides?.length&&t.push({severity:"error",code:"grouped-table-chair-overrides",message:`Grouped table "${a.label}" cannot carry individual-chair overrides`,objectId:a.id,seatIndices:a.overrides.map(M=>M.index)});let x=new Set;for(let M of a.overrides??[]){(M.accessibility??[]).filter(D=>!r.has(D)).length&&t.push({severity:"error",code:"invalid-accessibility-type",message:`Table "${a.label}" chair ${M.index+1} uses an unknown accessibility type`,objectId:a.id,seatIndices:[M.index]}),(!Number.isInteger(M.index)||M.index<0||M.index>=a.seatCount||x.has(M.index))&&t.push({severity:"error",code:"invalid-seat-override",message:`Table "${a.label}" has a duplicated or out-of-range chair override`,objectId:a.id,...Number.isInteger(M.index)?{seatIndices:[M.index]}:{}}),x.add(M.index),M.categoryKey&&!o.has(M.categoryKey)?t.push({severity:"error",code:"unknown-category",message:`Table "${a.label}" chair ${M.index+1} references unknown category "${M.categoryKey}"`,objectId:a.id,seatIndices:[M.index],categoryKey:M.categoryKey}):M.categoryKey&&s.add(M.categoryKey);let A=M.wheelchairSpaceType,R=M.accessible===!0||M.accessibility?.includes("wheelchair");A!==void 0&&A!=="seat-present"&&A!=="no-seat"?t.push({severity:"error",code:"invalid-wheelchair-space",message:`Table "${a.label}" chair ${M.index+1} has an invalid wheelchair-space type`,objectId:a.id,seatIndices:[M.index]}):A&&(!R||M.skip)&&t.push({severity:"error",code:"invalid-wheelchair-space",message:M.skip?`Table "${a.label}" chair ${M.index+1} cannot have a wheelchair-space physical type while skipped from inventory`:`Table "${a.label}" chair ${M.index+1} must include wheelchair accessibility for its physical-space type`,objectId:a.id,seatIndices:[M.index]})}a.bookAsWhole&&a.variableOccupancy?t.push({severity:"error",code:"invalid-table-booking-mode",message:`Table "${a.label}" cannot be sold both as a whole table and with variable occupancy`,objectId:a.id}):a.variableOccupancy?(!Number.isInteger(a.minOccupancy)||!Number.isInteger(a.maxOccupancy)||a.minOccupancy<1||a.maxOccupancy<a.minOccupancy||a.maxOccupancy>a.seatCount)&&t.push({severity:"error",code:"invalid-table-occupancy",message:`Table "${a.label}" needs whole-number minimum and maximum guests from 1 to its ${a.seatCount}-chair capacity`,objectId:a.id}):(a.minOccupancy!=null||a.maxOccupancy!=null)&&t.push({severity:"error",code:"invalid-table-occupancy",message:`Table "${a.label}" has guest bounds without variable-occupancy selling`,objectId:a.id}),he(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Table "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),(a.shape==="round"&&a.radius==null||a.shape==="rect"&&(a.width==null||a.height==null)||a.seatCount<1)&&t.push({severity:"error",code:"bad-table",message:`Table "${a.label}" is missing required dimensions or seats`,objectId:a.id});let E=m?[{label:a.label,index:void 0}]:Mn(a);for(let M of E)pe(M.label)&&t.push({severity:"error",code:"reserved-seat-label",message:`Inventory label "${M.label}" uses SeatLayer's reserved GA namespace`,objectId:a.id}),p.get(M.label)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Inventory label "${M.label}" is used more than once; grouped table labels must be unique`,objectId:a.id,...M.index===void 0?{}:{seatIndices:[M.index]}}):p.set(M.label,a.id)}else if(a.type==="booth"){he(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Booth "${a.label}" has invalid reference-inventory provenance`,objectId:a.id});let m=a.label;pe(m)&&t.push({severity:"error",code:"reserved-seat-label",message:`Seat label "${m}" uses SeatLayer's reserved GA namespace`,objectId:a.id}),p.get(m)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Seat label "${m}" is used more than once`,objectId:a.id}):p.set(m,a.id)}}else if(a.type==="gaArea"){if(!ke(a))t.push({severity:"error",code:"invalid-ga-inventory-segments",message:`GA area "${a.label}" has invalid joined-area inventory provenance`,objectId:a.id});else for(let h of Qe(a))p.get(h)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`GA inventory label "${h}" is used more than once`,objectId:a.id}):p.set(h,a.id);he(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`GA area "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),(!Z(a.points)||Math.abs(ne(a.points))<=1e-7||ie(a.points))&&t.push({severity:"error",code:"invalid-ga-outline",message:`GA area "${a.label}" must have a finite, non-self-intersecting polygon outline`,objectId:a.id});let m=a.holes??[],x=Array.isArray(m)&&m.length<=64?m.findIndex(h=>!Array.isArray(h)||h.length>512||!Z(h)||Math.abs(ne(h))<=1e-7||ie(h)?!0:!h.flatMap((M,k)=>{let A=h[(k+1)%h.length];return[M,{x:(M.x+A.x)/2,y:(M.y+A.y)/2}]}).every(M=>re(M,a.points))):0;if(x>=0)t.push({severity:"error",code:"invalid-ga-hole",message:`GA area "${a.label}" has a cutout outside its outline or with invalid geometry`,objectId:a.id,holeIndex:x});else if(m.some((h,E)=>m.slice(E+1).some(M=>ye(h,M)))){let h=m.findIndex((E,M)=>m.slice(M+1).some(k=>ye(E,k)));t.push({severity:"error",code:"overlapping-ga-holes",message:`GA area "${a.label}" has overlapping cutout polygons`,objectId:a.id,holeIndex:h})}o.has(a.categoryKey)?s.add(a.categoryKey):t.push({severity:"error",code:"unknown-category",message:`"${a.label}" references unknown category "${a.categoryKey}"`,objectId:a.id,categoryKey:a.categoryKey}),a.capacity<1&&t.push({severity:"error",code:"empty-ga",message:`GA area "${a.label}" has zero capacity`,objectId:a.id}),(!Number.isInteger(a.capacity)||a.capacity>Y)&&t.push({severity:"error",code:"invalid-ga-capacity",message:`GA area "${a.label}" capacity must be a whole number from 1 to ${Y}`,objectId:a.id}),g++,I+=Math.max(0,Math.floor(a.capacity))}else if(a.type==="section"){if(a.elevation!==void 0&&(!Number.isInteger(a.elevation)||a.elevation<ze||a.elevation>J)){let x=Number.isInteger(a.elevation)&&a.elevation>J&&a.elevation<=Ve;n.push({severity:"warning",code:x?"legacy-section-elevation":"invalid-section-elevation",message:x?`Section "${a.label}" uses legacy tier ${a.elevation}; set an exact height before normalizing it to tier ${J}`:`Section "${a.label}" elevation must be a whole-number tier from ${ze} to ${J}`,objectId:a.id})}if(a.height!==void 0&&(!Number.isFinite(a.height)||a.height<H||a.height>z)&&t.push({severity:"error",code:"invalid-section-height",message:`Section "${a.label}" exact height must be between ${H} and ${z} metres`,objectId:a.id}),a.rake!==void 0&&(!Number.isFinite(a.rake)||a.rake<we||a.rake>Ce)&&t.push({severity:"error",code:"invalid-section-rake",message:`Section "${a.label}" rake must be between ${we}\xB0 and ${Ce}\xB0`,objectId:a.id}),a.surfaceKind!==void 0&&a.surfaceKind!=="flat"&&a.surfaceKind!=="rakedRows"&&t.push({severity:"error",code:"invalid-section-surface-kind",message:`Section "${a.label}" surfaceKind must be 'flat' or 'rakedRows'`,objectId:a.id}),!Z(a.outline)||Math.abs(ne(a.outline))<=1e-7||ie(a.outline)){t.push({severity:"error",code:"invalid-section-outline",message:`Section "${a.label}" must have a finite, non-self-intersecting polygon outline`,objectId:a.id});continue}if(a.outlinePath){let x=[];try{x=Et(a.outlinePath)}catch{}(!De(a.outlinePath)||!x.length||Math.hypot(a.outlinePath.start.x-a.outline[0].x,a.outlinePath.start.y-a.outline[0].y)>1e-4||!Z(x)||Math.abs(ne(x))<=1e-7||ie(x))&&t.push({severity:"error",code:"invalid-section-outline-path",message:`Section "${a.label}" has an invalid or inconsistent curved outline path`,objectId:a.id,edgeIndex:mn(a)})}if(a.referenceSource&&(!/^ref_[0-9a-f-]{36}$/.test(a.referenceSource.assetId)||!/^(?:reg|ai)_[0-9a-f]{16}$/.test(a.referenceSource.regionId))&&t.push({severity:"error",code:"invalid-section-reference-source",message:`Section "${a.label}" has invalid opaque reference provenance`,objectId:a.id}),Sn(a)||t.push({severity:"error",code:"invalid-section-inventory-exclusion",message:`Section "${a.label}" has incomplete or mismatched non-sellable evidence`,objectId:a.id}),a.logicalSectionId!==void 0&&!a.logicalSectionId.trim())t.push({severity:"error",code:"invalid-logical-section-id",message:`Section "${a.label}" has an empty logical section id`,objectId:a.id});else if(a.logicalSectionId){let x=JSON.stringify({displayLabel:a.displayLabel??null,entrance:a.entrance??null,viewFromSeatUrl:a.viewFromSeatUrl??null,viewFromSeatMeta:a.viewFromSeatMeta??null,confidenceEvidence:a.confidenceEvidence??null,zone:a.zone??null,labelStyle:a.labelPresentation?.labelStyle??null,labelVisible:a.labelPresentation?.visible!==!1}),h=S.get(a.logicalSectionId);h&&(h.label!==a.label||h.semanticSignature!==x)?t.push({severity:"error",code:"inconsistent-logical-section",message:`Logical section "${a.logicalSectionId}" must use one technical label and buyer-facing presentation across every component`,objectId:a.id}):h||S.set(a.logicalSectionId,{label:a.label,semanticSignature:x})}let P=a.holes??[];if(!Array.isArray(P)||P.length>64){t.push({severity:"error",code:"invalid-section-hole",message:`Section "${a.label}" has an invalid opening collection`,objectId:a.id});continue}let m=-1;for(let x=0;x<P.length;x++){let h=P[x];if(!Array.isArray(h)||h.length>512||!Z(h)||Math.abs(ne(h))<=1e-7||ie(h)){m=x;break}if(!h.flatMap((M,k)=>{let A=h[(k+1)%h.length];return[M,{x:(M.x+A.x)/2,y:(M.y+A.y)/2}]}).every(M=>re(M,a.outline))){m=x;break}}if(m>=0)t.push({severity:"error",code:"invalid-section-hole",message:`Section "${a.label}" has an opening outside its outline or with an invalid shape`,objectId:a.id,holeIndex:m});else if(P.some((x,h)=>P.slice(h+1).some(E=>ye(x,E)))){let x=P.findIndex((h,E)=>P.slice(E+1).some(M=>ye(h,M)));t.push({severity:"error",code:"overlapping-section-holes",message:`Section "${a.label}" has overlapping openings`,objectId:a.id,holeIndex:x})}}let T=e.floors?.length?e.floors.map(a=>a.objects):[e.objects];for(let a of T){let P=a.filter(m=>m.type==="section");for(let m of a.filter(x=>x.type==="text")){let x=m.iconKey;x!==void 0&&!un(x)&&t.push({severity:"error",code:"invalid-icon-key",message:`Venue icon "${m.text||m.id}" references an unknown symbol`,objectId:m.id});let h=m.fontFamily;h!==void 0&&(typeof h!="string"||h.normalize("NFKC").trim()!==h||h.length<1||h.length>120)&&t.push({severity:"error",code:"invalid-text-font-family",message:`Text "${m.text||m.id}" font family must contain 1 to 120 normalized characters`,objectId:m.id});let E=m.background;(m.width!==void 0&&(!Number.isFinite(m.width)||m.width<40||m.width>1200)||m.align!==void 0&&!["left","center","right"].includes(m.align)||m.lineHeight!==void 0&&(!Number.isFinite(m.lineHeight)||m.lineHeight<.8||m.lineHeight>3)||m.letterSpacing!==void 0&&(!Number.isFinite(m.letterSpacing)||m.letterSpacing<-2||m.letterSpacing>20)||m.opacity!==void 0&&(!Number.isFinite(m.opacity)||m.opacity<.1||m.opacity>1)||E!==void 0&&(!/^#[0-9a-f]{6}$/i.test(E.color)||E.padding!==void 0&&(!Number.isFinite(E.padding)||E.padding<0||E.padding>40)||E.cornerRadius!==void 0&&(!Number.isFinite(E.cornerRadius)||E.cornerRadius<0||E.cornerRadius>40)||E.opacity!==void 0&&(!Number.isFinite(E.opacity)||E.opacity<.1||E.opacity>1)))&&t.push({severity:"error",code:"invalid-text-layout",message:`Text "${m.text||m.id}" has invalid width, spacing, opacity, alignment, or background layout`,objectId:m.id})}for(let m of a.filter(x=>x.type==="shape")){if(m.eventConfigurationIds!==void 0){let E=m.eventConfigurationIds;Array.isArray(E)&&E.length>0&&E.length<=20&&E.every(k=>typeof k=="string"&&k.normalize("NFKC").trim()===k&&k.length>=1&&k.length<=100)&&new Set(E).size===E.length||t.push({severity:"error",code:"invalid-shape-configurations",message:`Shape "${m.label||m.id}" must reference 1 to 20 unique event configuration ids`,objectId:m.id})}if(m.heightM!==void 0&&(!Number.isFinite(m.heightM)||m.heightM<.05||m.heightM>50)&&t.push({severity:"error",code:"invalid-shape-height",message:`Shape "${m.label||m.id}" height must be between 0.05 m and 50 m`,objectId:m.id}),m.stroke!==void 0&&(!m.stroke||typeof m.stroke.color!="string"||!/^#[0-9a-f]{6}$/i.test(m.stroke.color)||!Number.isFinite(m.stroke.width)||m.stroke.width<.5||m.stroke.width>40)&&t.push({severity:"error",code:"invalid-shape-stroke",message:`Shape "${m.label||m.id}" stroke must use a six-digit color and width from 0.5 to 40 chart units`,objectId:m.id}),(m.lineCap!==void 0||m.lineJoin!==void 0||m.startEnding!==void 0||m.endEnding!==void 0)&&!ct(m.kind)?t.push({severity:"error",code:"invalid-shape-line-style-applicability",message:`Shape "${m.label||m.id}" may use line caps, joins, and end decorations only when it is an open line or polyline`,objectId:m.id}):ct(m.kind)&&(m.lineCap!==void 0&&!dn.includes(m.lineCap)||m.lineJoin!==void 0&&!fn.includes(m.lineJoin)||m.startEnding!==void 0&&!st.includes(m.startEnding)||m.endEnding!==void 0&&!st.includes(m.endEnding))&&t.push({severity:"error",code:"invalid-shape-line-style",message:`Shape "${m.label||m.id}" has an unsupported line cap, join, or ending`,objectId:m.id}),m.kind==="polygon"){let E=sn(m.points??[]);E.ok||t.push({severity:"error",code:"invalid-shape-polygon",message:`Shape "${m.label||m.id}" has invalid polygon geometry: ${E.message}`,objectId:m.id})}let h=yn(m);if(h){for(let E of P)if(bn(h,E.outline)){t.push({severity:"error",code:"reference-focal-overlaps-section",message:`Reference focal area "${m.label??m.id}" overlaps section "${E.label}"`,objectId:m.id});break}}}}I>Ae&&t.push({severity:"error",code:"inventory-capacity-exceeded",message:`Chart has ${I} bookable units; the maximum is ${Ae}`}),t.push(...y.slice(0,5)),y.length>5&&t.push({severity:"error",code:"duplicate-seat-label",message:`${y.length} seats share a label with another seat; the first 5 are listed above. Seat labels must be unique across the whole chart.`});for(let a of ge(e)){let P=a.families[0]?.targets[0];n.push({severity:"warning",code:"category-inventory-family-conflict",message:it(a),categoryKey:a.categoryKey,...P?{objectId:P.id,floorId:P.floorId}:{},relatedObjectIds:a.objectIds,categoryInventoryFamilies:a.families})}e.focalPoint||n.push({severity:"warning",code:"missing-focal-point",message:"Chart has no focal point set"}),g===0&&n.push({severity:"warning",code:"no-bookables",message:"Chart has no rows, tables, booths, or GA areas"});for(let a of s)if(i.get(a)===!1){let P=e.categories.find(m=>m.key===a);n.push({severity:"warning",code:"unpriced-category",message:`Category "${P?.label??a}" is used but has no price`,categoryKey:a})}return[...t,...n]}var dr=9,kn="#f7f8fb",fr="#f5f6f8",On="#8b93a7",pr="#0b1220",gr="#0b1220",mr="#ffffff",br=100;function j(e,t=2){let n=10**t;return Math.round(e*n)/n}function _(e){return{source:"quality",...e}}function yr(e){return e.code==="missing-focal-point"||e.code==="missing-zone-focal-point"?"navigation":"structure"}function ft(e){return dr*Vt(e.theme?.seatScale)}function Rn(e){let t=[];for(let n of e.objects)n.type==="row"?t.push(...$(n)):n.type==="table"&&t.push(...G(n));return t}function hr(e){let t={rowSeats:0,tableSeats:0,booths:0,gaCapacity:0};for(let n of e)for(let o of n.objects)o.type==="row"?t.rowSeats+=$(o).length:o.type==="table"?t.tableSeats+=G(o).length:o.type==="booth"?t.booths+=1:o.type==="gaArea"&&(t.gaCapacity+=Math.max(0,Math.floor(o.capacity)));return{inventoryByKind:t,bookableUnits:t.rowSeats+t.tableSeats+t.booths+t.gaCapacity}}function N(e,t){e.filter(n=>n.code===t.code).length<br&&e.push(t)}function vr(e,t,n){let o=ft(e),r=2*o,i=2.3*o,s=0,c=0,d=1/0;for(let l of t){let u=new Map(l.objects.filter(g=>g.type==="row").map(g=>[g.id,g])),f=g=>{let I=l.objects.find(L=>L.id===g);if(!I||I.type!=="row"&&I.type!=="table")return"another seating object";let C=I.type==="row"?$(I):G(I),v=C.length?{x:C.reduce((L,T)=>L+T.x,0)/C.length,y:C.reduce((L,T)=>L+T.y,0)/C.length}:I.type==="row"?I.origin:I.center,w=l.objects.find(L=>L.type==="section"&&K(v,L.outline,L.holes)),O=I.type==="row"?`Row \u201C${I.label}\u201D`:`Table \u201C${I.label}\u201D`;return w?.type==="section"?`${O} in \u201C${w.label}\u201D`:O},b=Rn(l);s+=b.length;let p=i,y=new Map,S=new Map;for(let g of b){let I=Math.floor(g.x/p),C=Math.floor(g.y/p);for(let O=-1;O<=1;O++)for(let L=-1;L<=1;L++){let T=y.get(`${I+O}:${C+L}`)??[];for(let a of T){c++;let P=Math.hypot(g.x-a.x,g.y-a.y);if(d=Math.min(d,P),P>=i)continue;let x=(g.rowId<a.rowId?[g.rowId,a.rowId]:[a.rowId,g.rowId]).join("|"),h=S.get(x);(!h||P<h.distance)&&S.set(x,{a:g,b:a,distance:P})}}let v=`${I}:${C}`,w=y.get(v)??[];w.push(g),y.set(v,w)}for(let g of S.values()){let I=g.a.rowId===g.b.rowId,C=u.get(g.a.rowId),v=u.get(g.b.rowId),w=!I&&C?.segmentedRow?.repeatLabelOnComponents===!0&&v?.segmentedRow?.repeatLabelOnComponents===!0&&C.segmentedRow.groupId===v.segmentedRow.groupId,O=!!C?.referenceScan&&!!v?.referenceScan&&C.referenceScan.assetId===v.referenceScan.assetId&&C.referenceScan.sectionId===v.referenceScan.sectionId,L=g.distance<r?"error":"warning";if((w||O)&&L==="warning")continue;let T=L==="error"?"seat-overlap":"seat-cramped",a=f(g.a.rowId),P=f(g.b.rowId),m=j(L==="error"?r:i);N(n,_({severity:L,code:T,dimension:"geometry",title:I?`${a} has seats too close together`:`${a} and ${P} are too close together`,message:`The closest seats are ${j(g.distance)} chart units apart; at least ${m} are required.`,action:I?`Increase the seat spacing for ${a}, or use Review safe fixes.`:`Move ${a} or ${P} until they no longer overlap.`,objectId:g.a.rowId,relatedObjectIds:I?[g.a.rowId]:[g.a.rowId,g.b.rowId],floorId:l.id,measured:j(g.distance),minimum:j(L==="error"?r:i),autoFixable:I}))}}return{seats:s,checkedSeatPairs:c,minimumSeatDistance:Number.isFinite(d)?j(d):null}}function Te(e){let{width:t,height:n}=wt(e);if(!e.rotation)return{x:e.position.x,y:e.position.y,width:t,height:n};let o=[{x:0,y:0},{x:t,y:0},{x:t,y:n},{x:0,y:n}].map(r=>{let i=Ct(r,e.rotation);return{x:e.position.x+i.x,y:e.position.y+i.y}});return Xt(o)}function Tn(e,t,n=0){return e.x<t.x+t.width+n&&e.x+e.width+n>t.x&&e.y<t.y+t.height+n&&e.y+e.height+n>t.y}function dt(e,t,n){let o=U(t.x,e.x,e.x+e.width),r=U(t.y,e.y,e.y+e.height);return(t.x-o)**2+(t.y-r)**2<n**2}function xr(e,t,n){let o=ft(e),r=0;for(let i of t){let s=i.objects.filter(d=>d.type==="text"),c=Rn(i);r+=s.length;for(let d=0;d<s.length;d++){let l=s[d],u=Te(l),f=c.find(b=>dt(u,b,o));f&&N(n,_({severity:"warning",code:"label-collision",dimension:"labels",message:`Text \u201C${l.text}\u201D overlaps seat ${f.label}`,objectId:l.id,relatedObjectIds:[l.id,f.rowId],floorId:i.id,autoFixable:!0}));for(let b=0;b<d;b++){let p=s[b];Tn(u,Te(p),2)&&N(n,_({severity:"warning",code:"label-collision",dimension:"labels",message:`Text \u201C${l.text}\u201D overlaps text \u201C${p.text}\u201D`,objectId:l.id,relatedObjectIds:[l.id,p.id],floorId:i.id,autoFixable:!0}))}}}return r}function ut(e){return e.normalize("NFKC").trim().toLowerCase().replace(/\s+/g," ")}function Sr(e,t,n){let o=new Map;for(let c of t)for(let d of c.objects){let l=d.type,u=l==="row"||l==="table"||l==="booth"||l==="gaArea",f=u||l==="section";if(u&&!d.categoryKey.trim()){let b=l==="gaArea"?"GA area":l==="row"?"Row":l==="table"?"Table":"Booth";N(n,_({severity:"warning",code:"object-uncategorized",dimension:"structure",title:`${b} \u201C${d.label||d.id}\u201D has no category`,message:`${b} \u201C${d.label||d.id}\u201D is not assigned to any category, so buyers see no price or colour for it.`,action:"Assign a category to this object in the inspector, or create one in the Categories tab first.",objectId:d.id,floorId:c.id,autoFixable:!1}))}if(f){let b=(d.type==="section"?d.displayLabel??d.label:d.label)??"";if(b.trim()){if(l==="table"||l==="booth"||l==="gaArea"){let p=ut(b),y=o.get(p);y&&y.raw!==b?N(n,_({severity:"warning",code:"duplicate-object-label-normalized",dimension:"labels",title:`\u201C${b}\u201D and \u201C${y.raw}\u201D read as the same label`,message:`Labels \u201C${b}\u201D and \u201C${y.raw}\u201D differ only by case, spacing, or accents, so buyers cannot tell them apart.`,action:"Make the two labels visibly distinct.",objectId:d.id,relatedObjectIds:[d.id,y.id],floorId:c.id,autoFixable:!1})):y||o.set(p,{id:d.id,raw:b})}}else{let p=l==="gaArea"?"A GA area":l==="section"?"A section":l==="row"?"A row":l==="table"?"A table":"A booth";N(n,_({severity:"warning",code:"object-unlabeled",dimension:"labels",title:`${p} has no label`,message:`${p} has an empty label; buyers rely on labels to identify what they are booking.`,action:"Give this object a short, unique label in the inspector.",objectId:d.id,floorId:c.id,autoFixable:!1}))}}}let r=[];for(let c of t){let d=c.objects.filter(l=>l.type==="row"||l.type==="table"||l.type==="booth"||l.type==="gaArea");for(let l of c.objects)if(!(l.type!=="section"||l.referenceInventoryExclusion||d.some(f=>K(X(f),l.outline,l.holes)))){if(l.referenceSource){r.push({id:l.id,floorId:c.id});continue}N(n,_({severity:"warning",code:"empty-section",dimension:"structure",title:`Section \u201C${l.displayLabel??l.label}\u201D is empty`,message:`Section \u201C${l.displayLabel??l.label}\u201D contains no rows, tables, booths, or GA areas.`,action:"Add seating inside this section (Fill with rows), or remove the empty section.",objectId:l.id,floorId:c.id,autoFixable:!1}))}}r.length&&N(n,_({severity:"warning",code:"empty-section",dimension:"structure",title:r.length===1?"1 traced section has no seating yet":`${r.length} traced sections have no seating yet`,message:`${r.length} section${r.length===1?"":"s"} traced from the reference image contain${r.length===1?"s":""} no rows, tables, booths, or GA areas.`,action:"Fill them with rows, or remove the ones the venue does not sell.",objectId:r[0].id,relatedObjectIds:r.map(c=>c.id),floorId:r[0].floorId,autoFixable:!1}));let i=new Map,s=new Map;for(let c of t){let d=[];for(let l of c.objects)l.type!=="section"||l.outline.length<3||d.push({id:l.logicalSectionId??l.id,outline:l.outline,...l.holes?{holes:l.holes}:{},bounds:Lr(l.outline)});for(let l of c.objects){if(l.type!=="row")continue;let u=(l.segmentedRow?.displayLabel??l.displayLabel??l.label??"").trim(),f=(l.displayType??"").trim(),b=u&&f&&ut(f)!=="row"?`${f} ${u}`:u,p="";if(d.length){let I=X(l),C=d.find(v=>I.x>=v.bounds.minX&&I.x<=v.bounds.maxX&&I.y>=v.bounds.minY&&I.y<=v.bounds.maxY&&K(I,v.outline,v.holes));C&&(p=C.id)}let y=`${c.id}\0${p}\0${ut(b)}`,S=l.segmentedRow?.groupId??l.id;if(!b){let I=`${c.id}\0${p}`,C=s.get(I);C?(C.ids.push(l.id),C.logical.set(S,[...C.logical.get(S)??[],l])):s.set(I,{ids:[l.id],logical:new Map([[S,[l]]]),floorId:c.id});continue}let g=i.get(y);g?(g.ids.push(l.id),g.logical.set(S,[...g.logical.get(S)??[],l])):i.set(y,{ids:[l.id],logical:new Map([[S,[l]]]),floorId:c.id,raw:b})}}for(let{ids:c,logical:d,floorId:l,raw:u}of i.values()){let f=d.size;f<2||En([...d.values()])&&N(n,_({severity:"warning",code:"duplicate-row-label",dimension:"labels",title:`${f} rows share the name \u201C${u}\u201D`,message:`${f} rows share the label \u201C${u}\u201D, so buyers cannot tell which row a seat belongs to.`,action:"Rename them so each row reads differently \u2014 for example the section or box each belongs to.",objectId:c[0],relatedObjectIds:c,floorId:l,autoFixable:!1}))}for(let{ids:c,logical:d,floorId:l}of s.values()){let u=d.size;u<2||En([...d.values()])&&N(n,_({severity:"warning",code:"unnamed-row-collision",dimension:"labels",title:`${u} rows have no name`,message:`${u} rows in the same area have no name and repeat each other\u2019s seat numbers, so buyers cannot tell which row a seat belongs to.`,action:"Give each of these rows a name \u2014 for example the box each belongs to \u2014 so a ticket can say which row a seat is in.",objectId:c[0],relatedObjectIds:c,floorId:l,autoFixable:!1}))}if(e.floors&&e.floors.length>1)for(let c of e.floors)c.objects.length===0&&N(n,_({severity:"warning",code:"unused-floor",dimension:"structure",title:`Floor \u201C${c.name}\u201D is empty`,message:`Floor \u201C${c.name}\u201D has no objects on it.`,action:"Add seating to this floor, or delete it from the floor list below the canvas.",floorId:c.id,autoFixable:!1}))}var Ir=5,wr=16;function Cr(e,t,n){for(let o of t){let r=o.focalPoint??e.focalPoint;if(r)for(let i of o.objects){if(i.type!=="section"||i.outline.length<3)continue;let{rake:s}=ue(i);if(s<Ir)continue;let c=i.outline.map(b=>Math.hypot(b.x-r.x,b.y-r.y)),d=Math.max(...c);if(d<=0)continue;let l=(d-Math.min(...c))/d;if(s*l<=wr)continue;let f=i.displayLabel??i.label;N(n,_({severity:"warning",code:"section-rake-inconsistent",dimension:"geometry",title:`Section \u201C${f}\u201D is too deep for a single rake`,message:`Section \u201C${f}\u201D spans ${Math.round(l*100)}% of its distance to the stage at a ${Math.round(s)}\xB0 rake, so one rake can't represent its sightlines faithfully \u2014 a real tier this deep changes slope at a cross-aisle.`,action:"Split this section at the cross-aisle into two sections, each with its own rake.",objectId:i.id,floorId:o.id,autoFixable:!1}))}}}function Mr(e,t,n){let o=e.theme?.background??kn,r=fr,i=new Map;for(let l of t)for(let u of l.objects){if(u.type!=="gaArea")continue;let f=i.get(u.categoryKey)??[];f.push({id:u.id,floorId:l.id}),i.set(u.categoryKey,f)}for(let l of e.categories){let u=F(l.color,o),f=F(l.color,r);if(u==null||f==null){N(n,_({severity:"error",code:"invalid-category-color",dimension:"contrast",message:`Category \u201C${l.label}\u201D does not use a supported hex color`,categoryKey:l.key}));continue}let b=Math.min(u,f);b<3&&N(n,_({severity:"warning",code:"category-contrast-low",dimension:"contrast",title:`Category \u201C${l.label}\u201D is hard to see`,message:`Category \u201C${l.label}\u201D reaches only ${j(b)}:1 across dark and light chart backgrounds; 3:1 is required`,action:`Choose a lighter or darker color for \u201C${l.label}\u201D until this warning clears.`,categoryKey:l.key,measured:j(b),minimum:3,autoFixable:!1}));let p=i.get(l.key)??[];if(p.length){let y=ot(l.color,o,nt),S=ot(l.color,r,nt),g=Math.min(F(y,o)??0,F(S,r)??0);g<3&&N(n,_({severity:"warning",code:"ga-contrast-low",dimension:"contrast",message:`GA category \u201C${l.label}\u201D reaches only ${j(g)}:1 after its rendered opacity is composited; 3:1 is required`,objectId:p[0].id,categoryKey:l.key,floorId:p[0].floorId,relatedObjectIds:p.map(I=>I.id),measured:j(g),minimum:3,autoFixable:!1}))}}for(let l=0;l<e.categories.length;l++)for(let u=0;u<l;u++){let f=e.categories[l],b=e.categories[u],p=Ht(f.color,b.color);p!=null&&p<25&&N(n,_({severity:"warning",code:"category-colors-too-similar",dimension:"contrast",title:`\u201C${f.label}\u201D and \u201C${b.label}\u201D look too similar`,message:`Categories \u201C${f.label}\u201D and \u201C${b.label}\u201D are only \u0394E ${j(p)} apart; 25 is required`,action:"Pick a visibly different color for either category so buyers can tell them apart.",categoryKey:f.key,measured:j(p),minimum:25,autoFixable:!1}))}for(let l of t){let u=l.objects.filter(f=>f.type==="text");for(let f of u){let b=f.color??e.theme?.textColor??On,p=F(b,o),y=f.fontSize>=18?3:4.5;(p==null||p<y)&&N(n,_({severity:"warning",code:"text-contrast-low",dimension:"contrast",message:`Text \u201C${f.text}\u201D has ${j(p??0)}:1 contrast against the chart background; ${y}:1 is required`,objectId:f.id,floorId:l.id,measured:j(p??0),minimum:y,autoFixable:!0}))}}if(e.theme?.selectionColor){let l=F(e.theme.selectionColor,o);(l==null||l<3)&&N(n,_({severity:"warning",code:"selection-contrast-low",dimension:"contrast",title:"The selection color is hard to see",message:`Selection rings have ${j(l??0)}:1 contrast against the chart background; 3:1 is required.`,action:"In Theme, choose a Selection color that stands out clearly from the Background color.",measured:j(l??0),minimum:3,autoFixable:!1}))}if(e.theme?.textColor){let l=F(e.theme.textColor,o);(l==null||l<3)&&N(n,_({severity:"warning",code:"theme-text-contrast-low",dimension:"contrast",title:"The theme text color is hard to read",message:`Theme text has ${j(l??0)}:1 contrast against the chart background; 3:1 is required.`,action:"In Theme, choose a Text color with stronger contrast against the Background color.",measured:j(l??0),minimum:3,autoFixable:!1}))}let s=e.theme?.seatLabelColor??pr,c=new Map,d=(l,u,f)=>{let b=c.get(l)??new Map,p=b.get(u)??[];p.push(f),b.set(u,p),c.set(l,b)};for(let l of t)for(let u of l.objects)if(u.type==="row")for(let f of me(u).keys())d(f,"seat",u.id);else if(u.type==="table")for(let f of me(u).keys())d(f,"table seat",u.id);else u.type==="booth"&&d(u.categoryKey,"booth",u.id);for(let l of e.categories){let u=c.get(l.key);if(u)for(let[f,b]of u){let p=f==="booth"?qt:Wt,y=en(Qt,600),S=tn(l.color,s),g=F(S,l.color);(g==null||g<y)&&N(n,_({severity:"warning",code:"bookable-label-contrast-low",dimension:"contrast",message:`${f==="booth"?"Booth":f==="seat"?"Seat":"Table-seat"} labels use ${p}u type and have ${j(g??0)}:1 contrast on category \u201C${l.label}\u201D; ${y}:1 is required for small text`,objectId:b[0],relatedObjectIds:b,measured:j(g??0),minimum:y,autoFixable:!0}))}}}function En(e){if(e.length>24)return!0;let t=new Set;for(let n of e){let o=new Set;for(let r of n)for(let i of $(r)){let s=i.label,c=s.lastIndexOf("-");o.add(c>=0?s.slice(c+1):s)}if(!o.size)return!0;for(let r of o)if(t.has(r))return!0;for(let r of o)t.add(r)}return!1}function Lr(e){let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e)i.x<t&&(t=i.x),i.y<n&&(n=i.y),i.x>o&&(o=i.x),i.y>r&&(r=i.y);return{minX:t,minY:n,maxX:o,maxY:r}}function Er(e,t){for(let n of e){let o=n.objects.filter(r=>r.type==="section");if(!(o.length<2))for(let r of n.objects){if(!(r.type==="row"||r.type==="table"||r.type==="booth"||r.type==="gaArea"))continue;let s=X(r),c=o.filter(p=>K(s,p.outline,p.holes)),d=new Map;for(let p of c){let y=p.logicalSectionId??p.id,S=d.get(y)??[];S.push(p),d.set(y,S)}if(d.size<2)continue;let l=[...d.values()],u=l.map(p=>`Section \u201C${p[0].displayLabel??p[0].label}\u201D`),f=u.length===2?u.join(" and "):`${u.slice(0,-1).join(", ")}, and ${u[u.length-1]}`,b=r.type==="gaArea"?"GA area":r.type==="row"?"Row":r.type==="table"?"Table":"Booth";N(t,_({severity:"warning",code:"ambiguous-section-ownership",dimension:"structure",title:`${b} \u201C${r.label}\u201D belongs to more than one section`,message:`${b} \u201C${r.label}\u201D has its center inside ${f}, so its buyer section is unclear.`,action:"Adjust the boundaries until this object sits in one Section. If the overlapping shapes are meant to form one Section, combine them first.",objectId:r.id,relatedObjectIds:[r.id,...l.flatMap(p=>p.map(y=>y.id))],floorId:n.id,autoFixable:!1}))}}}var Pr={structure:20,geometry:30,contrast:25,labels:15,navigation:10},Ar={"seat-overlap":15,"seat-cramped":4,"label-collision":4,"category-contrast-low":3,"ga-contrast-low":3,"category-colors-too-similar":3,"invalid-category-color":10,"text-contrast-low":4,"bookable-label-contrast-low":3,"selection-contrast-low":3,"theme-text-contrast-low":3,"missing-focal-point":10,"object-uncategorized":3,"object-unlabeled":3,"duplicate-object-label-normalized":2,"empty-section":2,"unused-floor":2,"ambiguous-section-ownership":4,"category-inventory-family-conflict":10};function kr(e){let t={...Pr};for(let r of e){let i=r.severity==="error"?10:2;t[r.dimension]=Math.max(0,t[r.dimension]-(Ar[r.code]??i))}let n=Object.values(t).reduce((r,i)=>r+i,0),o=n>=95?"A":n>=85?"B":n>=70?"C":n>=55?"D":"F";return{overall:n,dimensions:t,errorFree:e.every(r=>r.severity!=="error"),grade:o}}var Or=new Set(["unpriced-category","object-uncategorized"]);function Pn(e,t={}){let n=Ze(e),o=Ln(e).filter(u=>u.code!=="missing-zone-focal-point"||t.requireExplicitZoneFocals).map(u=>{let f=u.objectId?n.find(y=>y.objects.some(S=>S.id===u.objectId))?.id:void 0,b=u.code==="category-inventory-family-conflict",p=b?e.categories.find(y=>y.key===u.categoryKey):void 0;return _({...u,...b?{severity:"error",title:`Category \u201C${p?.label??u.categoryKey??"Unknown"}\u201D spans incompatible inventory types`,action:"Show the affected objects, then review the safe category split. The repair preserves price, ticket tiers, accessibility assignments, and source provenance."}:{},...t.requireExplicitZoneFocals&&u.code==="missing-zone-focal-point"?{severity:"error"}:{},...f?{floorId:f}:{},source:"structural",dimension:yr(u),autoFixable:b})}),r=vr(e,n,o),i=hr(n),s=xr(e,n,o);if(Sr(e,n,o),Er(n,o),Cr(e,n,o),Mr(e,n,o),n.reduce((u,f)=>u+f.objects.filter(b=>b.type==="row"||b.type==="table"||b.type==="booth"||b.type==="gaArea").length,0)===0){let u=new Set(["missing-focal-point","no-bookables"]);for(let f=o.length-1;f>=0;f--)u.has(o[f].code)&&o.splice(f,1)}if(t.requirePricedInventory)for(let u=0;u<o.length;u++)Or.has(o[u].code)&&(o[u]={...o[u],severity:"error"});let d=o.filter(u=>u.severity==="error"),l=o.filter(u=>u.severity==="warning");return{issues:o,errors:d,warnings:l,metrics:{floors:n.length,objects:n.reduce((u,f)=>u+f.objects.length,0),seats:r.seats,bookableUnits:i.bookableUnits,inventoryByKind:i.inventoryByKind,categories:e.categories.length,freeTextLabels:s,checkedSeatPairs:r.checkedSeatPairs,minimumSeatDistance:r.minimumSeatDistance},score:kr(o),deferredRules:["rendered-row-label-decollision","rendered-bookable-state-contrast","section-focus-opacity-and-backdrop","24px-pointer-hit-target","reference-image-diff","sightline-blocked","ga-density-high"]}}function Rr(e,t){if(e.seatCount<2||e.seatSpacing>=t)return!1;let n=ce($(e));e.seatSpacing=j(t,3);let o=ce($(e));return e.origin.x=j(e.origin.x+n.x-o.x,3),e.origin.y=j(e.origin.y+n.y-o.y,3),!0}function Tr(e,t){if(e.seatCount<2)return!1;let n=!1;if(e.shape==="round"){let o=U(e.seatArc??360,0,360),r=(o>=360?360/e.seatCount:o/(e.seatCount-1))*Math.PI/180;if(r>0){let i=t/(2*Math.sin(r/2)),s=Math.max(1,i-16);(e.radius??40)<s&&(e.radius=j(s,3),n=!0)}}else{let o=fe(e),r=Math.max(o.top,o.bottom),i=Math.max(o.left,o.right);r>1&&(e.width??80)/r<t&&(e.width=j(r*t,3),n=!0),i>1&&(e.height??50)/i<t&&(e.height=j(i*t,3),n=!0)}return n}function jr(e){return[gr,mr].map(n=>({color:n,minimum:Math.min(...e.map(o=>F(n,o)??0))})).sort((n,o)=>o.minimum-n.minimum)[0].color}function An(e,t,n){let o=Te(e),r=0;for(let i of t)i.type==="row"?r+=$(i).filter(s=>dt(o,s,n)).length:i.type==="table"?r+=G(i).filter(s=>dt(o,s,n)).length:i.type==="text"&&i.id!==e.id&&Tn(o,Te(i),2)&&r++;return r}function _r(e,t,n){if(An(e,t,n)===0)return!1;let r={...e.position},i=Math.max(12,e.fontSize*1.25),s=[[0,-1],[1,0],[0,1],[-1,0],[1,-1],[1,1],[-1,1],[-1,-1]];for(let c=1;c<=12;c++)for(let[d,l]of s)if(e.position={x:j(r.x+d*i*c,3),y:j(r.y+l*i*c,3)},An(e,t,n)===0)return!0;return e.position=r,!1}function jn(e){let t=JSON.parse(JSON.stringify(e)),n=Pn(t),o=[],r=at(t);if(r.changed){t=r.doc;for(let u of r.changes){let f=r.before.find(p=>p.categoryKey===u.categoryKey),b=f?.families.map(p=>p.label).join(", ")??"inventory families";o.push({code:"category-inventory-family-conflict",objectId:f?.objectIds[0],message:`Split category \u201C${u.categoryLabel}\u201D across ${b}; preserved its commercial metadata and reassigned ${u.reassignments.length} affected object${u.reassignments.length===1?"":"s"}`})}}let i=ft(t),s=2.5*i,c=Ze(t);for(let u of c)for(let f of u.objects)if(f.type==="row"){let b=f.seatSpacing;Rr(f,s)&&o.push({code:b<2*i?"seat-overlap":"seat-cramped",objectId:f.id,message:`Expanded ${f.id} to the ${j(s)}u target pitch while preserving its centre`})}else f.type==="table"&&Tr(f,s)&&o.push({code:"seat-cramped",objectId:f.id,message:`Expanded ${f.id} so its perimeter seats meet the ${j(s)}u target pitch`});let d=t.theme?.background??kn;for(let u of c)for(let f of u.objects){if(f.type!=="text")continue;let b=f.color??t.theme?.textColor??On,p=f.fontSize>=18?3:4.5;(F(b,d)??0)<p&&(f.color=jr([d]),o.push({code:"text-contrast-low",objectId:f.id,message:`Changed ${f.id} to the highest-contrast black/white ink`}))}for(let u of c){let f=u.objects.filter(b=>b.type==="text");for(let b of f)_r(b,u.objects,i)&&o.push({code:"label-collision",objectId:b.id,message:`Moved ${b.id} to the nearest collision-free deterministic label position`})}t.floors?.length&&(t.objects=t.floors[0].objects);let l=Pn(t);return{doc:t,changed:o.length>0,fixes:o,before:n,after:l}}function je(e){return e.floors?.length?e.floors.flatMap(t=>t.objects):e.objects}function pt(e){return je(e).reduce((t,n)=>n.type==="row"?t+Ee(n):n.type==="table"?t+Kt(n):n.type==="gaArea"?t+Math.max(0,Math.floor(n.capacity)):n.type==="booth"?t+1:t,0)}function Nr(e){let t={};for(let o of e.categories??[])t[o.key]=0;let n=(o,r)=>{r>0&&(t[o]=(t[o]??0)+r)};for(let o of je(e))if(o.type==="row")for(let r of $(o))n(r.categoryKey,1);else if(o.type==="table")if(o.bookAsWhole||o.variableOccupancy)n(o.categoryKey,Math.max(0,Math.round(o.seatCount)));else for(let r of G(o))n(r.categoryKey,1);else o.type==="gaArea"?n(o.categoryKey,Math.max(0,Math.floor(o.capacity))):o.type==="booth"&&n(o.categoryKey,1);return t}function Nn(e){if(!e.template)return null;let t=je(e),n=t.filter(d=>d.type==="row"||d.type==="table"||d.type==="gaArea");if(!n.length)return null;let r=t.filter(d=>d.type==="booth").length+n.reduce((d,l)=>d+(l.type==="table"?2:1),0),i=pt(e),s=Math.max(r+1,Math.min(5e4,i*4)),c=[.5,1,1.5,2].map(d=>U(Math.round(i*d),r,s));return{family:e.template.family,display:e.template.family.replace(/-/g," ").replace(/\b\w/g,d=>d.toUpperCase()),min:r,max:s,presets:["S","M","L","XL"].map((d,l)=>({size:d,seats:c[l]}))}}function _n(e){let t=$(e);return t.length?ce(t):{...e.origin}}function $r(e,t){let n=Nn(e);if(!n)return structuredClone(e);let o=structuredClone(e),r=je(o),i=r.filter(p=>p.type==="row"||p.type==="table"||p.type==="gaArea"),s=r.filter(p=>p.type==="booth").length,c=Math.max(n.min,Math.min(n.max,Math.round(t))),d=c-s,l=i.map((p,y)=>{let S=p.type==="gaArea"?Math.max(0,Math.floor(p.capacity)):p.seatCount,g=p.type==="table"?2:1;return{object:p,index:y,current:S,minimum:g,value:g,fraction:0}}),u=l.reduce((p,y)=>p+y.minimum,0),f=Math.max(0,d-u),b=l.reduce((p,y)=>p+Math.max(1,y.current-y.minimum),0);for(let p of l){let y=f*Math.max(1,p.current-p.minimum)/b,S=Math.floor(y);p.value+=S,p.fraction=y-S}f=d-l.reduce((p,y)=>p+y.value,0),l.sort((p,y)=>y.fraction-p.fraction||p.index-y.index);for(let p=0;p<f;p++)l[p%l.length].value++;l.sort((p,y)=>p.index-y.index);for(let p of l)if(p.object.type==="row"){let y=_n(p.object);p.object.seatCount=p.value;let S=_n(p.object);p.object.origin.x+=y.x-S.x,p.object.origin.y+=y.y-S.y}else if(p.object.type==="table"){let y=p.object;if(y.seatCountsBySide){let S=["top","bottom","left","right"],g=fe(y),I=S.reduce((w,O)=>w+g[O],0)||1,C=S.map((w,O)=>{let L=p.value*g[w]/I;return{side:w,index:O,value:Math.floor(L),fraction:L-Math.floor(L)}}),v=p.value-C.reduce((w,O)=>w+O.value,0);C.sort((w,O)=>O.fraction-w.fraction||w.index-O.index);for(let w=0;w<v;w++)C[w%C.length].value+=1;C.sort((w,O)=>w.index-O.index),y.seatCountsBySide={top:C[0].value,bottom:C[1].value,left:C[2].value,right:C[3].value},y.sides=S.filter(w=>y.seatCountsBySide[w]>0)}y.seatCount=p.value,y.overrides&&(y.overrides=y.overrides.filter(S=>S.index<p.value),y.overrides.length||delete y.overrides)}else p.object.capacity=p.value;return o.floors?.length&&(o.objects=o.floors[0].objects),o.template={family:o.template.family,targetSeats:c},o=jn(o).doc,o.template={family:e.template.family,targetSeats:pt(o)},o}function ae(e){let t=Number(e.slice(e.lastIndexOf(":")+1));return Number.isFinite(t)?t:-1}function Fr(e,t,n){let o=new Map;for(let s of e){if(s.kind==="booth")continue;let c=o.get(s.rowId);c?c.push(s):o.set(s.rowId,[s])}let r=s=>n.has(s.id)||t(s.id)!=="free",i=[];for(let s of o.values())if(!(s.length<3)){s.sort((c,d)=>ae(c.id)-ae(d.id));for(let c=1;c<s.length-1;c++){let d=s[c];if(r(d))continue;let l=s[c-1],u=s[c+1];ae(d.id)-ae(l.id)!==1||ae(u.id)-ae(d.id)!==1||!r(l)||!r(u)||!n.has(l.id)&&!n.has(u.id)||i.push(d)}}return i}var mt=1,bt=100;function $n(e,t){if(!Number.isInteger(t)||t<mt||t>bt)return null;let n=e.rotation*Math.PI/180,o={x:Math.cos(n),y:Math.sin(n)},r={x:-o.y,y:o.x};return Array.from({length:t},(i,s)=>{let c=e.style==="intertwined"&&s%2===1?e.seatSpacing/2:0;return{type:"row",id:`__block_preview_${s}`,label:"",origin:{x:e.origin.x+r.x*s*e.rowGap+o.x*c,y:e.origin.y+r.y*s*e.rowGap+o.y*c},rotation:e.rotation,curve:e.curve,seatCount:e.seatsPerRow,seatSpacing:e.seatSpacing,categoryKey:"__preview__"}})}function gt(e,t=e.rowCount){let n=$n(e,t);return n?.length?X(n[n.length-1]):null}function Dr(e,t){if(!Number.isFinite(t.x)||!Number.isFinite(t.y)||e.rowGap<=0)return null;let n=gt(e,1);if(!n)return null;let o=e.rotation*Math.PI/180,r={x:-Math.sin(o),y:Math.cos(o)},i=(t.x-n.x)*r.x+(t.y-n.y)*r.y,s=Math.max(mt,Math.min(bt,Math.round(i/e.rowGap)+1)),c=gt(e,s);return c?{rowCount:s,edgePoint:c}:null}function Br(e,t){return e.length!==t.rowCount?!1:[...e].sort((o,r)=>(o.rowBlockGeneration?.rowIndex??1/0)-(r.rowBlockGeneration?.rowIndex??1/0)).every((o,r)=>{let i=o.rowBlockGeneration;return i?.kind==="row-block-v1"&&i.groupId===t.groupId&&i.rowIndex===r&&i.signature===t.signature&&JSON.stringify(i)===JSON.stringify({...t,rowIndex:r})})}function Fn(e){let t=(e%360+360)%360,n=t>=180?t-360:t;return Object.is(n,-0)||Math.abs(n)<1e-9?0:n}var W=1,q=300,yt=330;function ve(e){return e.seatCount>1?e.curve/(e.seatCount-1):0}function Dn(e,t){let n=e.rotation*Math.PI/180,o=ve(e)*Math.PI/180,r,i;if(Math.abs(o)<1e-9)r=t*e.seatSpacing,i=0;else{let s=e.seatSpacing/(2*Math.sin(Math.abs(o)/2)),c=o*t;r=s*Math.sin(c),i=-s+s*Math.cos(c)}return{x:e.origin.x+r*Math.cos(n)-i*Math.sin(n),y:e.origin.y+r*Math.sin(n)+i*Math.cos(n)}}function Gr(e,t,n){let o=(e??[]).map(r=>({...r,index:r.index+t})).filter(r=>r.index>=0&&r.index<n);return o.length?o:void 0}function Bn(e,t){if(e.path||!Number.isInteger(t)||t<W||t>q)return null;let n=ve(e);return{...e,seatCount:t,curve:n*(t-1)}}function Gn(e,t){if(e.path||!Number.isInteger(t)||t<W||t>q)return null;let n=ve(e),o=e.seatCount-t,r=-o;return{...e,origin:Dn(e,o),rotation:Fn(e.rotation-n*o),seatCount:t,curve:n*(t-1),overrides:Gr(e.overrides,r,t)}}function Kn(e,t=e.seatCount){let n=Bn(e,t);return n?Dn(n,t-1):null}function Un(e,t=e.seatCount){return Gn(e,t)?.origin??null}function Kr(e,t){if(e.path||!Number.isFinite(t.x)||!Number.isFinite(t.y))return null;let n=ve(e),o=Math.abs(n)<1e-9?q:Math.min(q,Math.floor(yt/Math.abs(n))+1),r=null;for(let i=W;i<=Math.max(W,o);i+=1){let s=Kn(e,i);if(!s)continue;let c=Math.hypot(s.x-t.x,s.y-t.y),d=n*(i-1);(!r||c<r.distance||c===r.distance&&i<r.seatCount)&&(r={seatCount:i,curve:d,endpoint:s,distance:c})}return r}function Ur(e,t){if(e.path||!Number.isFinite(t.x)||!Number.isFinite(t.y))return null;let n=ve(e),o=Math.abs(n)<1e-9?q:Math.min(q,Math.floor(yt/Math.abs(n))+1),r=null;for(let i=W;i<=Math.max(W,o);i+=1){let s=Un(e,i);if(!s)continue;let c=Math.hypot(s.x-t.x,s.y-t.y),d=n*(i-1);(!r||c<r.distance||c===r.distance&&i<r.seatCount)&&(r={seatCount:i,curve:d,endpoint:s,distance:c})}return r}var se=class extends Error{constructor(n,o){super(o);this.objectId=n;this.name="GroupedTableProjectionError"}};function zr(e){let t=e.minOccupancy,n=e.maxOccupancy;if(!Number.isInteger(t)||!Number.isInteger(n)||t<1||n<t||n>e.seatCount)throw new se(e.id,`Table "${e.label}" has invalid variable-occupancy bounds`);return{min:t,max:n}}function Vr(e,t){if(t!==2)return[];let n=[];for(let o of Pe(e)){if(o.type!=="table"||!o.bookAsWhole&&!o.variableOccupancy)continue;if(o.bookAsWhole&&o.variableOccupancy)throw new se(o.id,`Table "${o.label}" cannot be whole-table and variable-occupancy inventory`);if(!Number.isInteger(o.seatCount)||o.seatCount<1||!o.label.trim())throw new se(o.id,"Grouped tables require a label and at least one chair");let r=o.variableOccupancy?"variable":"whole",i=r==="variable"?zr(o):{min:o.seatCount,max:o.seatCount};n.push({objectId:o.id,label:o.label,...o.displayLabel?{displayLabel:o.displayLabel}:{},...o.displayType?{displayType:o.displayType}:{},categoryKey:o.categoryKey,mode:r,capacity:o.seatCount,minOccupancy:i.min,maxOccupancy:i.max,chairs:G(o)})}return n}function Vn(e){return{code:"ticket_option_not_applicable",labels:e,message:"That ticket choice is not available for the selected seat."}}function _e(e,t){let n=e.applicability;return n?!(n.seatLabels?.length&&!n.seatLabels.includes(t.label)||n.accessibility?.length&&!n.accessibility.some(o=>t.accessibility?.includes(o))):!0}function Hr(e,t){return(e.categories.find(n=>n.key===t.categoryKey)?.tiers??[]).filter(n=>_e(n,t))}function ht(e,t,n){let o=e.categories.find(i=>i.key===t.categoryKey)?.tiers;if(!o?.length)return{kind:"none"};let r=n==null?o.find(i=>_e(i,t)):o.find(i=>i.id===n&&_e(i,t));return r?{kind:"resolved",tier:r}:{kind:"invalid"}}function Xr(e,t){return(e.logicalRowId??e.rowId)===(t.logicalRowId??t.rowId)}function zn(e){if(Number.isInteger(e.logicalSeatIndex))return e.logicalSeatIndex;let t=e.id.slice(e.id.lastIndexOf(":")+1),n=Number(t);return Number.isInteger(n)?n:void 0}function Yr(e,t){if(!Xr(e,t))return!1;let n=zn(e),o=zn(t);return n!=null&&o!=null&&Math.abs(n-o)===1}function Hn(e,t){if(!t.length)return null;let n=new Map(We(e,{resolveEyeHeights:!1}).map(s=>[s.label,s])),o=t.flatMap(s=>{let c=n.get(s.label);return c?[{selection:s,seat:c}]:[]}),r=o.map(({seat:s})=>s).filter(s=>s.accessibility?.includes("wheelchair")),i=[];for(let{selection:s,seat:c}of o){let d=ht(e,c,s.tierId),l=d.kind==="resolved"?d.tier:void 0;(c.accessibility?.includes("companion")||l?.restriction==="companion")&&!r.some(f=>f.id!==c.id&&Yr(c,f))&&i.push(c.label)}return i.length?{code:"companion_pair_required",labels:i,message:"Select the adjacent wheelchair place with each companion ticket."}:null}function Zr(e,t){if(!t.length)return null;let n=new Map(We(e,{resolveEyeHeights:!1}).map(s=>[s.label,s])),o=new Set(e.categories.filter(s=>s.notForSale).map(s=>s.key)),r=[],i=[];for(let s of t){let c=n.get(s.label);if(!c)continue;if(o.has(c.categoryKey)){r.push(c.label);continue}ht(e,c,s.tierId).kind==="invalid"&&i.push(c.label)}return r.length?{code:"not_for_sale",labels:r,message:"These seats are not for sale."}:i.length?Vn(i):Hn(e,t)}0&&(module.exports={CATEGORY_INVENTORY_FAMILIES,GroupedTableProjectionError,MAX_DIRECT_ROW_SWEEP,MAX_EVENT_INVENTORY,MAX_GA_CAPACITY,MAX_ROW_BLOCK_ROWS,MAX_ROW_SEATS,MIN_ROW_BLOCK_ROWS,MIN_ROW_SEATS,applicableTicketTiers,capacityControl,categoryCapacity,chartCapacity,companionSelectionIssue,describeCategoryInventoryConflict,effectiveSeatOwnerCategoryCounts,gaAreasOf,gaInventorySegments,gaUnitLabel,gaUnitLabels,groupedTableInventory,growJoinedGAInventory,inspectCategoryInventoryConflicts,intactRowBlockMembers,isGaUnitLabel,pickBestAvailable,pickBestAvailableInventory,remediateCategoryInventoryConflicts,resizeChartCapacity,resolveRowBlockCount,resolveRowStartCapacity,resolveRowTerminalCapacity,resolveTicketTierForSeat,rowBlockEdgePoint,rowBlockPreviewRows,rowStartEndpoint,rowTerminalEndpoint,rowWithStartCapacity,rowWithTerminalCapacity,strandedSingles,ticketOptionNotApplicableIssue,ticketSelectionIssue,ticketTierAppliesToSeat,validGAInventorySegments});
|
|
1
|
+
"use strict";var $e=Object.defineProperty;var Jn=Object.getOwnPropertyDescriptor;var eo=Object.getOwnPropertyNames;var to=Object.prototype.hasOwnProperty;var no=(e,t)=>{for(var n in t)$e(e,n,{get:t[n],enumerable:!0})},oo=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of eo(t))!to.call(e,r)&&r!==n&&$e(e,r,{get:()=>t[r],enumerable:!(o=Jn(t,r))||o.enumerable});return e};var ro=e=>oo($e({},"__esModule",{value:!0}),e);var gi={};no(gi,{CATEGORY_INVENTORY_FAMILIES:()=>Te,GroupedTableProjectionError:()=>le,MAX_DIRECT_ROW_SWEEP:()=>ht,MAX_EVENT_INVENTORY:()=>Re,MAX_GA_CAPACITY:()=>Y,MAX_ROW_BLOCK_ROWS:()=>yt,MAX_ROW_SEATS:()=>q,MIN_ROW_BLOCK_ROWS:()=>bt,MIN_ROW_SEATS:()=>W,applicableTicketTiers:()=>di,capacityControl:()=>Gn,categoryCapacity:()=>ti,chartCapacity:()=>pt,companionSelectionIssue:()=>Qn,describeCategoryInventoryConflict:()=>at,effectiveSeatOwnerCategoryCounts:()=>xe,gaAreasOf:()=>nr,gaInventorySegments:()=>Je,gaUnitLabel:()=>Wt,gaUnitLabels:()=>et,groupedTableInventory:()=>ui,growJoinedGAInventory:()=>tr,inspectCategoryInventoryConflicts:()=>he,intactRowBlockMembers:()=>ii,isGaUnitLabel:()=>ye,pickBestAvailable:()=>It,pickBestAvailableInventory:()=>io,remediateCategoryInventoryConflicts:()=>st,resizeChartCapacity:()=>ni,resolveRowBlockCount:()=>ri,resolveRowStartCapacity:()=>ci,resolveRowTerminalCapacity:()=>si,resolveTicketTierForSeat:()=>xt,rowBlockEdgePoint:()=>gt,rowBlockPreviewRows:()=>Un,rowStartEndpoint:()=>Zn,rowTerminalEndpoint:()=>Yn,rowWithStartCapacity:()=>Xn,rowWithTerminalCapacity:()=>zn,strandedSingles:()=>oi,ticketOptionNotApplicableIssue:()=>qn,ticketSelectionIssue:()=>pi,ticketTierAppliesToSeat:()=>Fe,validGAInventorySegments:()=>Oe});module.exports=ro(gi);function De(e,t){if(Number.isInteger(e.logicalSeatIndex))return e.logicalSeatIndex;let n=e.id.lastIndexOf(":");if(n<0)return t;let o=Number(e.id.slice(n+1));return Number.isFinite(o)?o:t}function Me(e,t){let n=e.x-t.x,o=e.y-t.y;return n*n+o*o}function vt(e){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 St(e,t){return e.find(n=>n.focalPoint)?.focalPoint??t}function Be(e){return e.commercial?.premium===!0}function It(e,t,n){let o=Math.floor(n.qty);if(!Number.isFinite(o)||o<=0)return{labels:[],reason:"sold_out"};let{categoryKey:r,zoneId:i,focal:s,preferPremium:c,accessibility:d,requireContiguous:l}=n,u=new Map,f=[];if(e.forEach((I,p)=>{let w=t.has(I.label)&&(!r||I.categoryKey===r)&&(!i||I.zoneId===i)&&(!d||d.some(S=>I.accessibility?.includes(S))),M=I.logicalRowId??I.rowId,v=u.get(M);v||(v=[],u.set(M,v)),v.push({seat:I,index:De(I,p),elig:w}),w&&f.push(I)}),f.length===0)return{labels:[],reason:"sold_out"};let b=null,m=I=>{if(!b)return!0;if(c&&I.nonPremium!==b.nonPremium)return I.nonPremium<b.nonPremium;if(I.orphan!==b.orphan)return I.orphan<b.orphan;if(I.d2!==b.d2)return I.d2<b.d2;let p=I.rowId.localeCompare(b.rowId);return p!==0?p<0:I.startIndex<b.startIndex};for(let[I,p]of u){let w=[...p].sort((v,S)=>v.index-S.index),M=0;for(;M<w.length;){if(!w[M].elig){M++;continue}let v=M;for(;v<w.length&&w[v].elig&&(v===M||w[v].index===w[v-1].index+1);)v++;let S=v-M;for(let A=0;A+o<=S;A++){let k=A,T=S-(A+o),a=k===1||T===1?1:0,P=w.slice(M+A,M+A+o).map(x=>x.seat),g={labels:P.map(x=>x.label),seats:P,rowId:I,startIndex:w[M+A].index,orphan:a,nonPremium:c?P.reduce((x,h)=>x+(Be(h)?0:1),0):0,d2:Me(vt(P),St(P,s))};m(g)&&(b=g)}M=v}}return b?{labels:b.labels}:l?{labels:[],reason:f.length?"not_enough_together":"sold_out"}:f.length<o?{labels:[],reason:"not_enough_together"}:{labels:f.map((I,p)=>({seat:I,i:p,d2:Me(I,I.focalPoint??s)})).sort((I,p)=>{if(c){let M=Be(I.seat)?0:1,v=Be(p.seat)?0:1;if(M!==v)return M-v}if(I.d2!==p.d2)return I.d2-p.d2;let w=(I.seat.logicalRowId??I.seat.rowId).localeCompare(p.seat.logicalRowId??p.seat.rowId);return w!==0?w:De(I.seat,I.i)-De(p.seat,p.i)}).slice(0,o).map(I=>I.seat.label)}}function io(e,t,n,o){let r=Math.floor(o.qty),i=It(e,n,o),c=t.filter(f=>f.bookingMode==="whole"&&f.capacity===r&&n.has(f.label)&&(!o.categoryKey||f.categoryKey===o.categoryKey)&&(!o.zoneId||f.zoneId===o.zoneId)&&!o.accessibility).map(f=>({table:f,d2:Me(f.center,f.focalPoint??o.focal)})).sort((f,b)=>f.d2-b.d2||f.table.label.localeCompare(b.table.label))[0];if(!c)return i;if(!i.labels.length)return{labels:[c.table.label]};let d=new Map(e.map(f=>[f.label,f])),l=i.labels.map(f=>d.get(f)).filter(f=>!!f),u=l.length?Me(vt(l),St(l,o.focal)):Number.POSITIVE_INFINITY;return c.d2<u?{labels:[c.table.label]}:i}var wt=e=>Math.max(1,e.fontSize*.6+(e.letterSpacing??0));function ao(e,t){let n=e.text.split(/\r?\n/);if(!e.width)return Math.max(1,n.length);let o=Math.max(1,Math.floor(t/wt(e))),r=0;for(let i of n){if(!i.length){r+=1;continue}let s=0;for(let c of i.split(/\s+/)){let d=c.length;s&&s+1+d<=o?s+=1+d:(r+=Math.max(1,Math.ceil(d/o)),s=d%o)}}return Math.max(1,r)}function Mt(e){let t=e.background?.padding??0,n=e.text.split(/\r?\n/),o=Math.max(1,...n.map(c=>c.length))*wt(e),r=e.width??o+t*2,i=Math.max(1,r-t*2),s=ao(e,i);return{width:r,height:s*e.fontSize*(e.lineHeight??1.2)+t*2,lineCount:s,padding:t}}var so=Math.PI/180;function B(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function co(e,t,n){let o=Math.cos(n),r=Math.sin(n),i=e.x-t.x,s=e.y-t.y;return{x:t.x+i*o-s*r,y:t.y+i*r+s*o}}function Ct(e,t){return co(e,{x:0,y:0},t*so)}function de(e){let t=0,n=0;for(let r of e)t+=r.x,n+=r.y;let o=e.length||1;return{x:t/o,y:n/o}}function kt(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 Et(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[kt(e,.5)];let o=Array.from({length:n+1},(d,l)=>kt(e,l/n)),r=new Float64Array(o.length);for(let d=1;d<o.length;d+=1){let l=o[d].x-o[d-1].x,u=o[d].y-o[d-1].y;r[d]=r[d-1]+Math.hypot(l,u)}let i=r[r.length-1];if(i<=1e-9)return Array.from({length:t},()=>({...e.start}));let s=[],c=1;for(let d=0;d<t;d+=1){let l=i*d/(t-1);for(;c<r.length-1&&r[c]<l;)c+=1;let u=r[c-1],f=r[c],b=f===u?0:(l-u)/(f-u);s.push({x:o[c-1].x+(o[c].x-o[c-1].x)*b,y:o[c-1].y+(o[c].y-o[c-1].y)*b})}return s}function U(e,t,n){return Math.max(t,Math.min(n,e))}var Q=Math.PI*2;function fe(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)}function lo(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 Ke(e){if(e.version!==1||e.closed!==!0||!fe(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||!fe(n.end))return!1;if(n.kind==="line"){if(B(t,n.end)<=1e-9)return!1}else if(n.kind==="bezier"){if(!fe(n.control1)||!fe(n.control2)||B(t,n.end)<=1e-9)return!1}else if(n.kind==="arc"){if(!fe(n.center)||!Number.isFinite(n.radius)||n.radius<=1e-6||Math.abs(B(t,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||Math.abs(B(n.end,n.center)-n.radius)>Math.max(1e-4,n.radius*1e-4)||B(t,n.end)<=1e-9)return!1}else return!1;t=n.end}return B(t,e.start)<=1e-4}function uo(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 Pt(e,t=2){if(!Ke(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),c=Math.atan2(i.end.y-i.center.y,i.end.x-i.center.x),d=lo(s,c,i.clockwise),l=Math.max(2,Math.ceil(Math.abs(d)*i.radius/n));for(let u=1;u<=l;u+=1){let f=s+d*u/l;o.push({x:i.center.x+Math.cos(f)*i.radius,y:i.center.y+Math.sin(f)*i.radius})}}else{let s=B(r,i.control1)+B(i.control1,i.control2)+B(i.control2,i.end),c=Math.max(2,Math.ceil(s/n));for(let d=1;d<=c;d+=1)o.push(uo(r,i,d/c))}r=i.end}return B(o[o.length-1],o[0])<=1e-4&&o.pop(),o}var Mi=4/3;function Lt(e){let t=new Map,n=new Map;for(let o of e){if(o.type!=="row"||!o.segmentedRow)continue;let r=n.get(o.segmentedRow.groupId)??[];r.push(o),n.set(o.segmentedRow.groupId,r)}for(let[o,r]of n){let i=r.slice().sort((b,m)=>b.segmentedRow.componentIndex-m.segmentedRow.componentIndex),s=i[0]?.segmentedRow?.componentCount??0,c=i[0]?.segmentedRow;if(!c||!(s>=2&&i.length===s&&c?.boundaryBefore==="start"&&i.every((b,m)=>b.segmentedRow?.kind==="segmented-row-v1"&&b.segmentedRow.groupId===o&&b.segmentedRow.componentCount===s&&b.segmentedRow.componentIndex===m&&b.segmentedRow.repeatLabelOnComponents===c.repeatLabelOnComponents&&(m===0?b.segmentedRow.boundaryBefore==="start":b.segmentedRow.boundaryBefore!=="start")&&b.segmentedRow.displayLabel===c.displayLabel)))continue;let l=i.reduce((b,m)=>b+m.seatCount,0),u=0,f=0;for(let b of i)b.segmentedRow.boundaryBefore==="break"&&(u+=1),t.set(b.id,{groupId:o,adjacencyOffset:u,displayOffset:f,displayLabel:c.displayLabel,totalSeats:l,canonical:i[0],viewFromSeatUrl:c.viewFromSeatUrl,viewFromSeatMeta:c.viewFromSeatMeta,confidenceEvidence:c.confidenceEvidence}),u+=b.seatCount,f+=b.seatCount}return t}var fo="ABCDEFGHIJKLMNOPQRSTUVWXYZ";var mo="abcdefghijklmnopqrstuvwxyz";function po(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 Ge(e,t=!1){let n=t?mo:fo;return po(Math.max(0,Math.floor(e)-1),n)}var go=[[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 At(e){if(!Number.isFinite(e)||e<=0)return String(e);let t=Math.floor(e),n="";for(let[o,r]of go)for(;t>=o;)n+=r,t-=o;return n}function bo(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 Ue(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??"",c=e.seatNumbering?.endAt,d=e.seatCount;if(i==="updown"||i==="updown-descending"){let m=Math.ceil(d/2),y=i==="updown"?t<m?n+2*t:n-1+2*(d-t):t<m?n+2*(m-1-t):n+1+2*(t-m);return`${s}${y}`}let l=i==="odd"||i==="even"?2:r,u=c!=null&&Number.isFinite(c)?c-(d-1)*l:n,f=o==="center"?bo(d)[t]:o==="rtl"?d-1-t:t,b;switch(i){case"odd":{let m=u%2===1?u:u+1;b=String(m+f*2);break}case"even":{let m=u%2===0?u:u+1;b=String(m+f*2);break}case"roman":b=At(u+f*r);break;case"letters-upper":b=Ge(u+f*r,!1);break;case"letters-lower":b=Ge(u+f*r,!0);break;default:b=String(u+f*r);break}return`${s}${b}`}function yo(e){return{...e.canonical,seatCount:e.totalSeats,label:e.displayLabel,displayLabel:e.displayLabel}}function Ce(e,t,n){return n?.label??`${e.label}-${Ue(e,t)}`}function He(e,t,n,o){if(o?.displayLabel)return o.displayLabel;if(!n)return`${e.displayLabel||e.label}-${Ue(e,t)}`;let r=yo(n),i=n.displayOffset+t;return`${n.displayLabel}-${Ue(r,i)}`}var J=.02291666666666667,Ai=1/J,ho=58,Rt=ho*J,ze=0,ee=3,z=0,H=120,ke=0,Ee=45,Xe=7,te=1.2;function Ve(e,t,n,o){return Number.isFinite(e)?Math.max(t,Math.min(n,e)):o}function xo(e){return!Number.isFinite(e)||!Number.isInteger(e)||e<0?0:e<=Xe?e:ee}function me(e,t={}){let n=Ve(t.floorBaseHeightM,z,H,0),o=Math.min(H,n+xo(e.elevation)*Rt),r=e.height===void 0?o:Ve(e.height,z,H,o),i=Ve(e.rake,ke,Ee,0);return{height:r,rake:i}}function Ot(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 Tt(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],c=s.x-i.x,d=s.y-i.y,l=c*c+d*d,u=l>1e-12?((t-i.x)*c+(n-i.y)*d)/l:0;u<0?u=0:u>1&&(u=1);let f=Math.hypot(t-(i.x+u*c),n-(i.y+u*d));f<o&&(o=f)}return o}function vo(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 jt(e,t){return Math.hypot(e.cx-t.cx,e.cy-t.cy)-e.r-t.r}function Ye(e,t){let n=1/0;for(let o of Ot(e)){let r=Tt(t,o.x,o.y);r<n&&(n=r)}for(let o of Ot(t)){let r=Tt(e,o.x,o.y);r<n&&(n=r)}return n}function So(e,t){if(e.length<3)return{pts:e,seatIndices:t};let n=0,o=0;for(let u of e)n+=u.x,o+=u.y;n/=e.length,o/=e.length;let r=-1,i=e[0];for(let u of e){let f=Math.hypot(u.x-n,u.y-o);f>r&&(r=f,i=u)}let s=i.x-n,c=i.y-o,d=Math.hypot(s,c);d>1e-9?(s/=d,c/=d):(s=1,c=0);let l=e.map((u,f)=>({p:u,i:f,t:(u.x-n)*s+(u.y-o)*c})).sort((u,f)=>u.t-f.t);return{pts:l.map(u=>u.p),seatIndices:l.map(u=>t[u.i])}}function Io(e){let t=e.length;if(t<3)return null;let n=0,o=0;for(let M of e)n+=M.x,o+=M.y;n/=t,o/=t;let r=0,i=0,s=0,c=0,d=0,l=0,u=0;for(let M of e){let v=M.x-n,S=M.y-o;r+=v*v,s+=S*S,i+=v*S,c+=v*v*v,d+=S*S*S,l+=v*S*S,u+=S*v*v}let f=r*s-i*i;if(Math.abs(f)<1e-9)return null;let b=(c+l)/2,m=(d+u)/2,y=(b*s-m*i)/f,I=(m*r-b*i)/f,p=y+n,w=I+o;return!Number.isFinite(p)||!Number.isFinite(w)?null:{cx:p,cy:w}}var wo=.15;function Mo(e){if(e.length<2)return null;let t=e.map(M=>{let v=0,S=0;for(let A of M.pts)v+=A.x,S+=A.y;return{x:v/M.pts.length,y:S/M.pts.length}}),n=0,o=0;for(let M of t)n+=M.x,o+=M.y;n/=t.length,o/=t.length;let r=0,i=0,s=0;for(let M of t){let v=M.x-n,S=M.y-o;r+=v*v,i+=v*S,s+=S*S}let c=r+s,d=r*s-i*i,l=c/2+Math.sqrt(Math.max(0,c*c/4-d)),u,f;Math.abs(i)>1e-12?(u=l-s,f=i):r>=s?(u=1,f=0):(u=0,f=1);let b=Math.hypot(u,f);if(!(b>1e-12))return null;u/=b,f/=b;let m=1/0,y=-1/0,I=[];for(let M of e){let v=1/0,S=-1/0;for(let A of M.pts){let k=A.x*u+A.y*f;k<v&&(v=k),k>S&&(S=k),k<m&&(m=k),k>y&&(y=k)}I.push(S-v)}let p=y-m;return p>1e-9?(I.sort((M,v)=>M-v),I[Math.min(I.length-1,Math.floor(I.length*.9))]/p<=Co?{x:u,y:f}:null):null}var Co=.35;function _t(e,t,n,o){let r=new Map;for(let p of n){let w=t[p],M=w.rowId||`__seat-${p}`,v=r.get(M);v||(v={pts:[],idx:[]},r.set(M,v)),v.pts.push({x:w.x,y:w.y}),v.idx.push(p)}if(!r.size)return{sectionId:e,rows:[],blockCount:0};let i=[];for(let[p,w]of r){let M=So(w.pts,w.idx),v=0;for(let S of M.pts)v+=Math.hypot(S.x-o.x,S.y-o.y);i.push({id:p,pts:M.pts,seatIndices:M.seatIndices,blockId:-1,ordinal:0,blockDepth:0,focalDistance:v/M.pts.length})}let s=i.map(p=>vo(p.pts)),c=[];for(let p=0;p<i.length;p++){let w=1/0;for(let M=0;M<i.length;M++){if(p===M||jt(s[p],s[M])>=w)continue;let v=Ye(i[p].pts,i[M].pts);v<w&&(w=v)}Number.isFinite(w)&&c.push(w)}c.sort((p,w)=>p-w);let d=c.length?c[Math.floor(c.length/2)]:1,l=Math.max(d*1.8,1e-6),u=i.map(()=>[]);for(let p=0;p<i.length;p++)for(let w=p+1;w<i.length;w++)jt(s[p],s[w])>l||Ye(i[p].pts,i[w].pts)<=l&&(u[p].push(w),u[w].push(p));let f=0;for(let p=0;p<i.length;p++){if(i[p].blockId!==-1)continue;let w=f++,M=[p];for(i[p].blockId=w;M.length;){let v=M.pop();for(let S of u[v])i[S].blockId===-1&&(i[S].blockId=w,M.push(S))}}let b=new Map;for(let p of i){let w=b.get(p.blockId)??[];w.push(p),b.set(p.blockId,w)}let m=[];for(let p of i){if(p.pts.length<4)continue;let w=Io(p.pts);w&&(!Number.isFinite(w.cx)||!Number.isFinite(w.cy)||m.push({x:w.cx,y:w.cy}))}let y=m.length>=2?(()=>{let p=m.map(v=>v.x).sort((v,S)=>v-S),w=m.map(v=>v.y).sort((v,S)=>v-S),M=Math.floor(m.length/2);return{cx:p[M],cy:w[M]}})():null;if(y){let p=k=>Math.hypot(k.x-y.cx,k.y-y.cy),w=1/0,M=-1/0,v=[];for(let k of i){let T=1/0,a=-1/0;for(let P of k.pts){let g=p(P);g<T&&(T=g),g>a&&(a=g)}v.push(a-T),T<w&&(w=T),a>M&&(M=a)}let S=M-w;v.sort((k,T)=>k-T);let A=v[Math.min(v.length-1,Math.floor(v.length*.9))];if(S>1e-9&&A/S<=wo){let k=i.map(L=>{let O=0;for(let F of L.pts)O+=p(F);return{row:L,radius:O/L.pts.length}}),T=0,a=0;for(let L of k)T+=L.radius,a+=L.row.focalDistance;T/=k.length,a/=k.length;let P=0;for(let L of k)P+=(L.radius-T)*(L.row.focalDistance-a);if(P<0)for(let L of k)L.radius=-L.radius;let x=1/0;for(let L of k)L.radius<x&&(x=L.radius);k.sort((L,O)=>L.radius-O.radius);let h=-1,E=-1/0,C=S/Math.max(1,k.length)*.5,R=[];for(let L of k)L.radius-E>C&&(h++,E=L.radius),L.row.ordinal=h,L.row.blockDepth=L.radius-x,R.push(L.row);return{sectionId:e,rows:R,blockCount:f}}}let I=[];for(let[,p]of b){let w=Mo(p);if(w){let M=S=>{let A=0;for(let k of S.pts)A+=k.x*w.x+k.y*w.y;return A/S.pts.length};p.sort((S,A)=>M(S)-M(A)),p.length>=2&&p[0].focalDistance>p[p.length-1].focalDistance&&p.reverse();let v=0;for(let S=0;S<p.length;S++)S>0&&(v+=Ye(p[S-1].pts,p[S].pts)),p[S].ordinal=S,p[S].blockDepth=v,I.push(p[S])}else{let M=1/0;for(let v of p)v.focalDistance<M&&(M=v.focalDistance);p.sort((v,S)=>v.focalDistance-S.focalDistance);for(let v=0;v<p.length;v++)p[v].ordinal=v,p[v].blockDepth=Math.max(0,p[v].focalDistance-M),I.push(p[v])}}return{sectionId:e,rows:I,blockCount:f}}var ko=/^\d{4}-\d{2}-\d{2}$/;function Eo(e){let t=Date.parse(e);return Number.isFinite(t)?ko.test(e)?t+864e5:t:null}function Po(e,t=Date.now()){if(e.validUntil===void 0){if(e.status!=="approved")return!0;let o=e.assessedAt?Date.parse(e.assessedAt):Number.NaN;return Number.isFinite(o)&&(t instanceof Date?t.getTime():t)<=o+366*864e5}let n=Eo(e.validUntil);return n===null?!1:(t instanceof Date?t.getTime():t)<n}function Lo(e,t,n){return!(e.eventConfigurationId&&e.eventConfigurationId!==t||e.eventConfigurationVersion!==void 0&&e.eventConfigurationVersion!==n)}function Ao(e){return e.status!=="draft"&&e.status!=="retracted"}function Ro(e,t){return e.status===void 0?t===void 0:e.status!=="approved"?!0:typeof t=="string"&&typeof e.basisSha256=="string"&&e.basisSha256===t}function Nt(e,t={}){return!!e&&Ao(e)&&Lo(e,t.activeConfigurationId,t.activeConfigurationVersion)&&Ro(e,t.activeBasisSha256)&&Po(e,t.now)}var ji=Math.PI*2;function Ft(e){return e==="pitch-football"||e==="rink-hockey"||e==="track-athletics"||e==="oval-cricket"}var Oo=/^data:image\/(?:png|jpe?g|webp|gif|avif);base64,[a-z0-9+/]+={0,2}$/i,To=/[\s"'<>`\\]/;function Ze(e){if(typeof e!="string"||!e||e.length>2e6||e!==e.trim())return!1;if(e.startsWith("data:"))return Oo.test(e);if(To.test(e))return!1;try{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password}catch{return!1}}function jo(e){if((e.kind==="polygon"||e.kind==="polyline"||e.kind==="line")&&e.points&&e.points.length>=2)return e.points;if(e.x==null||e.y==null||e.width==null||e.height==null)return null;let t=e.x,n=e.y,o=e.width,r=e.height;return[{x:t,y:n},{x:t+o,y:n},{x:t+o,y:n+r},{x:t,y:n+r}]}function _o(e,t,n){let o=n*Math.PI/180,r=Math.cos(o),i=Math.sin(o),s=e.x-t.x,c=e.y-t.y;return{x:t.x+s*r-c*i,y:t.y+s*i+c*r}}function $t(e){let t=jo(e);if(!t||t.length<2)return null;let n=e.rotation??0,o=Math.abs(n)<1e-6?t:t.map(d=>_o(d,{x:t.reduce((l,u)=>l+u.x,0)/t.length,y:t.reduce((l,u)=>l+u.y,0)/t.length},n)),r=1/0,i=1/0,s=-1/0,c=-1/0;for(let d of o)r=Math.min(r,d.x),i=Math.min(i,d.y),s=Math.max(s,d.x),c=Math.max(c,d.y);return!Number.isFinite(r)||s-r<1e-6||c-i<1e-6?null:{minX:r,minY:i,maxX:s,maxY:c}}var No=5,Fo=3,$o=.92,Do=1.9,Bo=2,Ko=.6,Go=1,Uo=.06;function Ho(e){return e.heightM!==void 0?e.heightM:Ft(e.stageKind)?Uo:Go}function Dt(e){let t=1/0,n=1/0,o=-1/0,r=-1/0,i=-1/0;for(let s of pe(e)){let c=s.baseHeightM??0;for(let d of s.objects){if(d.type!=="shape"||d.role!=="stage")continue;let l=$t(d);l&&(t=Math.min(t,l.minX),n=Math.min(n,l.minY),o=Math.max(o,l.maxX),r=Math.max(r,l.maxY),i=Math.max(i,c+Ho(d)))}}return!Number.isFinite(t)||!Number.isFinite(i)?null:{minX:t,minY:n,maxX:o,maxY:r,deckTopM:i}}function Vo(e,t,n,o){let r=1/0,i=1/0,s=-1/0,c=-1/0;for(let m of e)Number.isFinite(m.eyeHeightM)&&(r=Math.min(r,m.x),s=Math.max(s,m.x),i=Math.min(i,m.y),c=Math.max(c,m.y));if(!Number.isFinite(r))return null;let d=r*t,l=i*t,u=Math.max(1,Math.ceil((s-r)*t/n)+1),f=Math.max(1,Math.ceil((c-i)*t/n)+1),b=new Float64Array(u*f).fill(-1/0);for(let m of e){if(!Number.isFinite(m.eyeHeightM))continue;let y=m.eyeHeightM-te,I=Math.min(u-1,Math.max(0,Math.floor((m.x*t-d)/n))),w=Math.min(f-1,Math.max(0,Math.floor((m.y*t-l)/n)))*u+I,M=y+o;M>b[w]&&(b[w]=M)}return{cellM:n,minX:d,minY:l,cols:u,rows:f,top:b}}function zo(e,t,n){let o=Math.floor((t-e.minX)/e.cellM),r=Math.floor((n-e.minY)/e.cellM);return o<0||r<0||o>=e.cols||r>=e.rows?-1/0:e.top[r*e.cols+o]}function Bt(e,t,n={}){let o=new Map;if(!t||!e.length)return o;let r=n.metresPerChartUnit??J,i=n.cellM??Ko,s=n.chairBackM??$o,c=n.selfRowSkipM??Bo,d=n.clearThreshold??.9,l=n.partialThreshold??.25,u=Math.max(1,n.columns??No),f=Math.max(1,n.rows??Fo),b=Vo(e,r,i,s);if(!b)return o;let m=(t.maxX-t.minX)*r,y=(t.maxY-t.minY)*r,I=m>=y,p=(t.minX+t.maxX)/2*r,w=(t.minY+t.maxY)/2*r,M=[];for(let S=0;S<u;S++){let A=(S+.5)/u-.5,k=I?p+A*m:p,T=I?w:w+A*y;for(let a=0;a<f;a++){let P=t.deckTopM+(f===1?0:a/(f-1)*Do);M.push({x:k,y:T,z:P})}}let v=i/2;for(let S of e){if(!Number.isFinite(S.eyeHeightM))continue;let A=S.x*r,k=S.y*r,T=S.eyeHeightM,a=0,P=1/0;for(let x of M){let h=x.x-A,E=x.y-k,C=Math.hypot(h,E);if(!(C>c)){a++;continue}let R=h/C,L=E/C,O=0;for(let F=c;F<C;F+=v){let ue=zo(b,A+R*F,k+L*F);if(!(!Number.isFinite(ue)||ue>=T)&&ue>T+(x.z-T)*F/C){O=F;break}}O?P=Math.min(P,O):a++}let g=a/M.length;g>=d||o.set(S.id,{seatId:S.id,mark:g<l?"obstructedView":"restrictedView",visibleFraction:g,totalRays:M.length,atDistanceM:Number.isFinite(P)?P:0})}return o}function Kt(e,t){if(!t.size)return 0;let n=0;for(let o of e){let r=t.get(o.id);if(!r)continue;let i=o.commercial;i?.restrictedView!==void 0||i?.obstructedView!==void 0||(o.commercial={...i,[r.mark]:!0},n++)}return n}function zt(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 Pe=Math.PI/180;var ge=16;function qe(e,t,n,o){let r=n*Pe,i=Math.cos(r),s=Math.sin(r);return{x:o.x+e*i-t*s,y:o.y+e*s+t*i}}function Xo(e){let{seatCount:t,seatSpacing:n,curve:o,rotation:r,origin:i}=e,s=[];if(e.path)return Et(e.path,t);if(t<=1)return t===1&&s.push({x:i.x,y:i.y}),s;if(o===0){for(let l=0;l<t;l++)s.push(qe(l*n,0,r,i));return s}let c=o/(t-1)*Pe,d=n/(2*Math.sin(Math.abs(c)/2));for(let l=0;l<t;l++){let u=l*c,f=d*Math.sin(u),b=-d+d*Math.cos(u);s.push(qe(f,b,r,i))}return s}function Yo(e){let t=new Map;if(e.overrides)for(let n of e.overrides)t.set(n.index,n);return t}function Le(e){let t=new Set((e.overrides??[]).filter(n=>n.skip&&Number.isInteger(n.index)&&n.index>=0&&n.index<e.seatCount).map(n=>n.index));return Math.max(0,e.seatCount-t.size)}function Zo(e,t){let n=Yo(e);return Xo(e).map((o,r)=>{let i=n.get(r),s=zt(i),c=Ce(e,r,i),d={...e.commercial,...i?.commercial};return{index:r,x:o.x+(i?.dx??0),y:o.y+(i?.dy??0),label:c,displayLabel:He(e,r,t,i),categoryKey:i?.categoryKey??e.categoryKey,skipped:!!i?.skip,accessible:s.length>0,accessibility:s,wheelchairSpaceType:i?.wheelchairSpaceType,commercial:Object.values(d).some(l=>l!==void 0&&l!==!1&&l!=="")?d:void 0,glyph:i?.glyph,viewUrl:i?.viewFromSeatUrl??e.viewFromSeatUrl,viewMeta:i?.viewFromSeatUrl?i.viewFromSeatMeta:e.viewFromSeatMeta,labelStyle:i?.labelStyle}})}function $(e){let t=[];for(let n of Zo(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,glyph:n.glyph,viewUrl:n.viewUrl,viewMeta:n.viewMeta,labelStyle:n.labelStyle});return t}function be(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 Xt(e){let t=[],n=Math.max(0,Math.round(e.seatCount));if(n===0)return t;let o=new Map((e.overrides??[]).map(u=>[u.index,u])),r=(u,f,b,m)=>{let y=o.get(u),I=zt(y),p=y?.label??`${e.label}-${u+1}`,w=e.displayLabel??e.label;return{index:u,label:p,displayLabel:y?.displayLabel??`${w}-${u+1}`,x:f+(y?.dx??0),y:b+(y?.dy??0),categoryKey:y?.categoryKey??e.categoryKey,skipped:!!y?.skip,accessible:I.length>0,accessibility:I,wheelchairSpaceType:y?.wheelchairSpaceType,commercial:y?.commercial,glyph:y?.glyph,viewUrl:y?.viewFromSeatUrl,viewMeta:y?.viewFromSeatUrl?y.viewFromSeatMeta:void 0,labelStyle:y?.labelStyle,...m?{side:m}:{}}};if(e.shape==="round"){let u=(e.radius??40)+ge,f=e.rotation*Pe,b=Math.max(0,Math.min(360,e.seatArc??360));if(b>=360||n===1){for(let p=0;p<n;p++){let w=f+p/n*2*Math.PI;t.push(r(p,e.center.x+u*Math.cos(w),e.center.y+u*Math.sin(w)))}return t}let m=b*Pe,y=(2*Math.PI-m)/2,I=f+y;for(let p=0;p<n;p++){let w=I+p/(n-1)*m;t.push(r(p,e.center.x+u*Math.cos(w),e.center.y+u*Math.sin(w)))}return t}let i=e.width??80,s=e.height??50,c=be(e),d=["top","bottom","left","right"],l=0;for(let u of d){let f=c[u];for(let b=0;b<f;b++){let m,y;u==="top"?(m=-i/2+(b+.5)*i/f,y=-s/2-ge):u==="bottom"?(m=-i/2+(b+.5)*i/f,y=s/2+ge):u==="left"?(m=-i/2-ge,y=-s/2+(b+.5)*s/f):(m=i/2+ge,y=-s/2+(b+.5)*s/f);let I=qe(m,y,e.rotation,e.center);t.push(r(l++,I.x,I.y,u))}}return t}function Yt(e){return e.bookAsWhole||e.variableOccupancy?Math.max(0,Math.round(e.seatCount)):Xt(e).filter(t=>!t.skipped).length}function K(e){return Xt(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.glyph?{glyph:t.glyph}:{},...t.viewUrl?{viewUrl:t.viewUrl}:{},...t.viewUrl&&t.viewMeta?{viewMeta:t.viewMeta}:{},...t.labelStyle?{labelStyle:t.labelStyle}:{}}))}function Wo(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 Gt(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,c=t[r].x,d=t[r].y;s>e.y!=d>e.y&&e.x<(c-i)*(e.y-s)/(d-s)+i&&(n=!n)}return n}function qo(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),c=(r.x-n.x)**2+(r.y-n.y)**2;return s>=-1e-7&&s<=c+1e-7})}function G(e,t,n){return Gt(e,t)&&!(n??[]).some(o=>Gt(e,o)||qo(e,o))}function We(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 X(e){switch(e.type){case"row":{let t=$(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 We(e.points);case"section":return We(e.outline);case"text":return{x:e.position.x,y:e.position.y};case"shape":return e.points&&e.points.length?We(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 Ut(e,t){return e.length===t.length&&e.every((n,o)=>n.x===t[o].x&&n.y===t[o].y)}function Qo(e,t){if(e.type!=="gaArea"||!Ut(e.points,t.outline))return!1;let n=e.holes??[],o=t.holes??[];return n.length===o.length&&n.every((r,i)=>Ut(r,o[i]))}function Jo(e,t){let n=e.filter(s=>s.type==="section"),o="referenceInventorySource"in t?t.referenceInventorySource?.logicalSectionId:void 0,r=X(t);return(o?n.find(s=>(s.logicalSectionId??s.id)===o&&(Qo(t,s)||G(r,s.outline,s.holes))):void 0)??n.find(s=>G(r,s.outline,s.holes))}function pe(e){return e.floors&&e.floors.length?e.floors:[{id:"floor-0",name:"Main",objects:e.objects,focalPoint:e.focalPoint,referenceImage:e.referenceImage,backgroundImage:e.backgroundImage}]}function Ae(e){return e.floors&&e.floors.length?e.floors.flatMap(t=>t.objects):e.objects}function Ht(e,t,n,o,r,i,s,c,d){let l=[],u=Lt(e),f=y=>!y?.eventConfigurationId||y.eventConfigurationId===o&&(y.eventConfigurationVersion===void 0||y.eventConfigurationVersion===d),b=y=>Nt(y,{activeConfigurationId:o,activeConfigurationVersion:d,activeBasisSha256:r,now:c}),m=(y,I)=>b(y)?{...y,coverage:I}:void 0;for(let y of e){let I=[];if(y.type==="row"?I=$(y):y.type==="table"?I=K(y):y.type==="booth"&&(I=Wo(y)),!I.length)continue;for(let S of I)S.viewUrl&&!f(S.viewMeta)&&(S.viewUrl=void 0,S.viewMeta=void 0);if(y.type==="row"){let S=u.get(y.id);if(S){let A=new Map((y.overrides??[]).map(k=>[k.index,k]));for(let k of I){let T=Number(k.id.slice(k.id.lastIndexOf(":")+1));if(!Number.isInteger(T))continue;k.logicalRowId=S.groupId,k.logicalSeatIndex=S.adjacencyOffset+T,A.get(T)?.displayLabel||(k.displayLabel=He(y,T,S)),!k.viewUrl&&S.viewFromSeatUrl&&f(S.viewFromSeatMeta)&&(k.viewUrl=S.viewFromSeatUrl,k.viewMeta=S.viewFromSeatMeta);let a=A.get(T)?.confidenceEvidence;k.confidenceEvidence=m(a,"exact-seat")??m(y.confidenceEvidence,"row-representative")??m(S.confidenceEvidence,"row-representative")}}}let p=Jo(e,y),w=p?.viewFromSeatUrl,v=(p?.zone?t?.find(S=>S.id===p.zone):void 0)?.focalPoint??n;for(let S of I){if(!S.confidenceEvidence){let A=Number(S.id.slice(S.id.lastIndexOf(":")+1)),k=(y.type==="row"||y.type==="table")&&Number.isInteger(A)?y.overrides?.find(T=>T.index===A)?.confidenceEvidence:void 0;S.confidenceEvidence=m(k,"exact-seat")??(y.type==="row"?m(y.confidenceEvidence,"row-representative"):void 0)}S.confidenceEvidence??=m(p?.confidenceEvidence,"section-representative")??(s?m(s.evidence,s.coverage):void 0),!S.viewUrl&&w&&f(p?.viewFromSeatMeta)&&(S.viewUrl=w,S.viewMeta=p?.viewFromSeatMeta),!S.viewUrl&&i&&f(i.meta)&&(S.viewUrl=i.url,S.viewMeta=i.meta),p&&(S.sectionId=p.logicalSectionId??p.id),p?.zone&&(S.zoneId=p.zone),v&&(S.focalPoint={...v})}l.push(...I)}return l}function Qe(e,t={}){if(e.floors?.length){let o=[];for(let r of e.floors){let i=r.focalPoint??e.focalPoint,s=r.viewFromSeatUrl?{url:r.viewFromSeatUrl,meta:r.viewFromSeatMeta}:e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,c=r.confidenceEvidence?{evidence:r.confidenceEvidence,coverage:"floor-representative"}:e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,d=Ht(r.objects,e.zones,i,e.eventConfigurationId,e.confidenceBasisSha256,s,c,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);t.resolveEyeHeights!==!1&&Vt(r.objects,r.focalPoint??e.focalPoint,r.baseHeightM??0,d);for(let l of d)l.floorId=r.id;o.push(...d)}return o}let n=Ht(e.objects,e.zones,e.focalPoint,e.eventConfigurationId,e.confidenceBasisSha256,e.viewFromSeatUrl?{url:e.viewFromSeatUrl,meta:e.viewFromSeatMeta}:void 0,e.confidenceEvidence?{evidence:e.confidenceEvidence,coverage:"venue-representative"}:void 0,t.now,t.eventConfigurationVersion??e.eventConfigurationVersion);return t.resolveEyeHeights!==!1&&Vt(e.objects,e.focalPoint,t.floorBaseHeightM??0,n),er(e,n,t)}function er(e,t,n){return!n.deriveRestrictedView||e.derivedRestrictedView===!1||n.resolveEyeHeights===!1||Kt(t,Bt(t,Dt(e))),t}function Vt(e,t,n,o){let r=e.filter(u=>u.type==="section"),i=n>0||r.some(u=>u.height!==void 0||u.rake!==void 0||(u.elevation??0)>0);if(!r.length||!i||!t){for(let u of o)u.eyeHeightM=n+te;return}let s=new Array(o.length),c=new Map,d=new Map;for(let u=0;u<o.length;u++){let f=o[u],m=(f.sectionId?r.find(I=>I.id===f.sectionId)??r.find(I=>I.logicalSectionId===f.sectionId&&G({x:f.x,y:f.y},I.outline,I.holes)):void 0)??r.find(I=>G({x:f.x,y:f.y},I.outline,I.holes))??null;if(s[u]=m,!m)continue;c.has(m.id)||c.set(m.id,me(m,{floorBaseHeightM:n}));let y=d.get(m.id);y?y.push(u):d.set(m.id,[u])}let l=new Array(o.length).fill(void 0);for(let[u,f]of d){let b=c.get(u);if(!b)continue;let m=b.rake>0?Math.tan(b.rake*Math.PI/180):0,y=_t(u,o,f,t);for(let I of y.rows){let p=I.blockDepth*J*m,w=b.height+p;for(let M of I.seatIndices)l[M]=w}}for(let u=0;u<o.length;u++){let f=o[u],b=s[u];if(!b){f.eyeHeightM=n+te;continue}let m=c.get(b.id);f.eyeHeightM=(l[u]??m.height)+te}}var Zt="__sl_ga__",Y=1e5,Re=1e5;function Wt(e,t){return`${Zt}${encodeURIComponent(e)}__${t+1}`}function Oe(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>Y||(n+=r.count,n>Y))return!1;let i=o.get(r.sourceAreaId)??[],s=r.startIndex+r.count;if(i.some(c=>r.startIndex<c.end&&s>c.start))return!1;i.push({start:r.startIndex,end:s}),o.set(r.sourceAreaId,i)}return n===e.capacity}function Je(e){let t=Math.min(Y,Math.max(0,Math.floor(e.capacity)));return e.inventorySegments===void 0?t?[{sourceAreaId:e.id,startIndex:0,count:t}]:[]:Oe(e)?e.inventorySegments.map(n=>({...n})):[]}function et(e){return Je(e).flatMap(t=>Array.from({length:t.count},(n,o)=>Wt(t.sourceAreaId,t.startIndex+o)))}function tr(e,t){if(e.inventorySegments===void 0||t===e.capacity)return e.inventorySegments;if(t<e.capacity)return;let n=Je(e);if(!n.length)return;let o=t-e.capacity;if(!o)return n;let i=n.filter(c=>c.sourceAreaId===e.id).reduce((c,d)=>Math.max(c,d.startIndex+d.count),0),s=n[n.length-1];if(s?.sourceAreaId===e.id&&s.startIndex+s.count===i)s.count+=o;else{if(n.length>=256)return;n.push({sourceAreaId:e.id,startIndex:i,count:o})}return n}function nr(e){return Ae(e).filter(t=>t.type==="gaArea")}function ye(e){return e.startsWith(Zt)}var or=.15,rr=1.6;function qt(e){return U(e??1,or,rr)}var ir=/^#?([\da-f]{3}|[\da-f]{6})$/i;function ne(e){let t=ir.exec((e??"").trim());if(!t)return null;let n=t[1].length===3?t[1].split("").map(r=>r+r).join(""):t[1],o=parseInt(n,16);return[o>>16&255,o>>8&255,o&255]}function Qt(e,t){let n=i=>{let s=ne(i);if(!s)return null;let c=M=>{let v=M/255;return v<=.04045?v/12.92:((v+.055)/1.055)**2.4},d=c(s[0]),l=c(s[1]),u=c(s[2]),f=(.4124*d+.3576*l+.1805*u)/.95047,b=.2126*d+.7152*l+.0722*u,m=(.0193*d+.1192*l+.9505*u)/1.08883,y=M=>M>.008856?Math.cbrt(M):7.787*M+16/116,I=y(f),p=y(b),w=y(m);return[116*p-16,500*(I-p),200*(p-w)]},o=n(e),r=n(t);return o&&r?Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]):null}function tt(e){let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function nt(e){return .2126*tt(e[0])+.7152*tt(e[1])+.0722*tt(e[2])}function D(e,t){let n=ne(e),o=ne(t);if(!n||!o)return null;let r=nt(n),i=nt(o);return(Math.max(r,i)+.05)/(Math.min(r,i)+.05)}function ar(e){let t=1/0,n=1/0,o=-1/0,r=-1/0,i=!1;for(let s of e)!Number.isFinite(s.x)||!Number.isFinite(s.y)||(i=!0,s.x<t&&(t=s.x),s.y<n&&(n=s.y),s.x>o&&(o=s.x),s.y>r&&(r=s.y));return i?{minX:t,minY:n,maxX:o,maxY:r}:null}function Jt(e){let t=ar(e);return t?sr(t):null}function sr(e){return{x:e.minX,y:e.minY,width:e.maxX-e.minX,height:e.maxY-e.minY}}var nn=7;var on=10;var rt=.85,rn=12,an=4.5,cr=3,en="#000000",tn="#ffffff",lr=24,ur=18.67;function sn(e,t=400){return e>=lr||t>=700&&e>=ur?cr:an}var dr={wheelchair:"M7.8 4.5a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM8 7L10.5 7L10.5 15L8 15ZM8 12.5L18 12.5L18 15L8 15ZM16 15L18 15L18 18L16 18ZM5.5 16a5.5 5.5 0 1 0 11 0a5.5 5.5 0 1 0 -11 0zM8 16a3 3 0 1 1 6 0a3 3 0 1 1 -6 0z",companion:"M5.5 6.5a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM4.5 18.5L6 11.5L11 11.5L12.5 18.5ZM12.5 7.5a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM11.5 19L13 12.5L18 12.5L19.5 19Z","semi-ambulatory":"M8.3 3.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM9 6.2L12 6.6L11 13.5L8.6 13L9 6.2ZM8.6 13L11 13L9.5 21L7 21ZM10.4 13L12.6 13L13.6 21L11.2 21ZM11.2 7.2L14 8L14.6 9.6L11.9 8.9ZM14.4 6.8L15.9 6.8L16.4 21L14.8 21Z","designated-aisle":"M3 5L6 5L6 14L3 14ZM3 12L13 12L13 15L3 15ZM5 15L7 15L7 20L5 20ZM11 15L13 15L13 20L11 20ZM13 7L20 7L17 4L19 4L23 8.5L19 13L17 13L20 10L13 10Z","step-free":"M4 4.5a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0 -4.4 0zM4.4 7L7.5 7L7.5 13L11 15L9.5 17L5 14L4.4 7ZM2 19L8 19L17 10L22 10L22 13L18 13L10 21L2 21Z",hearing:"M15.5 3.5C9 2.2 5.5 6 5.5 11.5C5.5 16 8 19.5 10.5 21C13.2 22.6 16.4 20.8 15.4 18C14.8 16.4 12.9 16.1 13 14C13.1 11.9 15.8 11.4 15.8 8.5C15.8 5.4 13 4 15.5 3.5Z",cart:"M5.5 6L18.5 6a2.5 2.5 0 0 1 2.5 2.5L21 15.5a2.5 2.5 0 0 1 -2.5 2.5L11 18L7 20.5L7.5 18L5.5 18a2.5 2.5 0 0 1 -2.5 -2.5L3 8.5a2.5 2.5 0 0 1 2.5 -2.5zM6.5 11L17.5 11L17.5 12.6L6.5 12.6zM6.5 14L17.5 14L17.5 15.6L6.5 15.6z","sign-language":"M7 11L17 11L17 18a2 2 0 0 1 -2 2L9 20a2 2 0 0 1 -2 -2zM7.6 5L9.4 5L9.4 12L7.6 12zM9.9 3.5L11.7 3.5L11.7 12L9.9 12zM12.3 3.5L14.1 3.5L14.1 12L12.3 12zM14.6 5L16.4 5L16.4 12L14.6 12zM7.2 12.5L5 10.2L6.4 8.9L8.6 11.2Z","low-vision":"M2.5 12C6 6 18 6 21.5 12C18 18 6 18 2.5 12ZM9 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0zM17.5 3L19 3L19 6L17.5 6ZM19 4L22 4L22 5.5L19 5.5Z","sensory-friendly":"M4 11C4 5 7 2.5 12 2.5S20 5 20 11L17 11C17 7 15.5 5.5 12 5.5S7 7 7 11ZM3 10L8 10L8 19L5 19a2 2 0 0 1 -2 -2ZM16 10L21 10L21 17a2 2 0 0 1 -2 2L16 19ZM9 12L15 12L15 14L9 14ZM10 16L14 16L14 18L10 18Z","plus-size":"M9.4 4.3a2.6 2.6 0 1 0 5.2 0a2.6 2.6 0 1 0 -5.2 0zM5 20L4 13C4 10.5 7 9.5 12 9.5C17 9.5 20 10.5 20 13L19 20Z","lift-armrest":"M5 6L8 6L8 19L5 19zM5 16L18 16L18 19L5 19zM8 12L17 12L17 14.5L8 14.5zM14 7L16 7L16 12L14 12zM12 7L18 7L15 3Z"},ca=dr.wheelchair;var ot=D;function it(e,t,n){let o=ne(e),r=ne(t);if(!o||!r)return t;let i=Math.max(0,Math.min(1,n));return`#${o.map((c,d)=>Math.round(c*i+r[d]*(1-i))).map(c=>c.toString(16).padStart(2,"0")).join("")}`}function cn(e,t,n=an){let o=ot(t,e);if(o!=null&&o>=n)return t;let r=ot(en,e)??0,i=ot(tn,e)??0;return r===0&&i===0?t:r>=i?en:tn}var oe=[{key:"wheelchair",label:"Wheelchair space",short:"Wheelchair",icon:"\u267F"},{key:"companion",label:"Companion seat",short:"Companion",icon:"\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}"},{key:"semi-ambulatory",label:"Semi-ambulatory (limited mobility)",short:"Limited mobility",icon:"\u{1F9AF}"},{key:"designated-aisle",label:"Designated aisle / transfer seat",short:"Aisle transfer",icon:"AS"},{key:"step-free",label:"Step-free accessible seat",short:"Step-free",icon:"SF"},{key:"hearing",label:"Assistive listening",short:"Hearing",icon:"\u{1F9BB}"},{key:"cart",label:"CART live-caption view",short:"CART captions",icon:"CC"},{key:"sign-language",label:"Sign-language view",short:"Sign language",icon:"\u{1F91F}"},{key:"low-vision",label:"Blind / low-vision viewing",short:"Low vision",icon:"LV"},{key:"sensory-friendly",label:"Quiet / sensory-friendly seating",short:"Sensory-friendly",icon:"QS"},{key:"plus-size",label:"Plus-size seat",short:"Plus-size",icon:"\u{1F4BA}"},{key:"lift-armrest",label:"Lift-up armrest",short:"Lift armrest",icon:"\u2195\uFE0F"}],ua=new Map(oe.map(e=>[e.key,e]));var fr=[{key:"obstructedView",label:"Obstructed view",short:"Obstructed",icon:"\u26D4"},{key:"restrictedView",label:"Restricted view",short:"Restricted",icon:"\u{1F441}"},{key:"premium",label:"Premium seat",short:"Premium",icon:"\u2605"}],da=new Map(fr.map(e=>[e.key,e]));var mr=["reference-focal","bar","entrance","exit","restroom","screen","sound","concession","coat","wall","rail","suite","obstruction"],fa=new Set(mr);function pr(e){let t=0;for(let n=0,o=e.length;n<o;n+=1){let r=e[n],i=e[(n+1)%o];t+=r.x*i.y-i.x*r.y}return t/2}function re(e){return pr(e)*2}var Te=[{key:"row-seats",label:"row seats",suffix:"rows",labelSuffix:"Rows",creationWord:"Seats",objectType:"row"},{key:"table-chairs",label:"table chairs",suffix:"tables",labelSuffix:"Tables",creationWord:"Tables",objectType:"table"},{key:"booth-units",label:"booth units",suffix:"booths",labelSuffix:"Booths",creationWord:"Booths",objectType:"booth"},{key:"ga-capacity",label:"GA capacity",suffix:"ga",labelSuffix:"GA",creationWord:"Standing",objectType:"gaArea"}];function ln(e){return e.floors?.length?e.floors:[{id:"floor-0",objects:e.objects}]}function gr(e){return Te.find(t=>t.key===e)}function xe(e){let t=new Map,n=Math.max(0,Math.floor(e.seatCount)),o=new Map((e.overrides??[]).filter(i=>Number.isInteger(i.index)&&i.index>=0&&i.index<e.seatCount).map(i=>[i.index,i])),r=(i,s=1)=>{i&&s>0&&t.set(i,(t.get(i)??0)+s)};r(e.categoryKey,n-o.size);for(let i of o.values())i.skip||r(i.categoryKey??e.categoryKey);return t}function br(e){return e.type==="row"||e.type==="table"?[...xe(e).keys()]:e.type==="booth"?e.categoryKey?[e.categoryKey]:[]:e.type==="gaArea"?e.capacity>0&&e.categoryKey?[e.categoryKey]:[]:[]}function un(e){return Te.find(t=>t.objectType===e.type)??null}function dn(e){return e.type==="row"||e.type==="table"||e.type==="booth"||e.type==="gaArea"}function he(e){let t=new Map;for(let r of ln(e))for(let i of r.objects){if(!dn(i))continue;let s=un(i);for(let c of br(i)){let d=t.get(c)??new Map,l=d.get(s.key)??[];if(!l.some(u=>u.id===i.id)){let u=i.displayLabel||i.label||i.id;l.push({id:i.id,label:u,type:s.objectType,floorId:r.id})}d.set(s.key,l),t.set(c,d)}}let n=new Map(e.categories.map(r=>[r.key,r.label]));return[...e.categories.map(r=>r.key),...[...t.keys()].filter(r=>!n.has(r)).sort()].flatMap(r=>{let i=t.get(r);if(!i||i.size<2)return[];let s=Te.flatMap(c=>{let d=i.get(c.key);return d?.length?[{family:c.key,label:c.label,objectType:c.objectType,targets:d}]:[]});return[{categoryKey:r,categoryLabel:n.get(r)??r,families:s,objectIds:[...new Set(s.flatMap(c=>c.targets.map(d=>d.id)))]}]})}function at(e){let t=e.families.map(n=>`${n.label} (${n.targets.map(o=>o.label).join(", ")})`).join(" and ");return`Category \u201C${e.categoryLabel}\u201D is used by more than one kind of inventory \u2014 ${t}. Each category can belong to only one kind \u2014 use the safe split to separate them (prices, ticket tiers, accessibility, and provenance are preserved).`}function fn(e){return e.normalize("NFKC").trim().toLocaleLowerCase("en")}function yr(e,t,n){for(let o=1;o<=1e4;o+=1){let r=o===1?`--${t}`:`--${t}-${o}`,s=`${e.slice(0,Math.max(1,160-r.length))}${r}`;if(!n.has(s))return n.add(s),s}throw new Error(`Unable to allocate a category key for ${e} (${t})`)}function hr(e,t,n){for(let o=1;o<=1e4;o+=1){let r=o===1?` (${t})`:` (${t} ${o})`,s=`${e.normalize("NFKC").trim().slice(0,Math.max(1,80-r.length)).trimEnd()}${r}`,c=fn(s);if(!n.has(c))return n.add(c),s}throw new Error(`Unable to allocate a category label for ${e} (${t})`)}function xr(e,t,n,o){let r=gr(t);return{...structuredClone(e),key:yr(e.key,r.suffix,n),label:hr(e.label,r.labelSuffix,o)}}function vr(e,t,n){let o=[];for(let r of ln(e))for(let i of r.objects){if(!dn(i))continue;let s=un(i),c=n.get(s.key);if(!(!c||c===t))if(i.type==="row"||i.type==="table"){let d=[];i.categoryKey===t&&(i.categoryKey=c);for(let l of i.overrides??[])l.categoryKey===t&&(l.categoryKey=c,d.push(l.index));(i.categoryKey===c||d.length)&&o.push({family:s.key,floorId:r.id,objectId:i.id,objectType:s.objectType,fromCategoryKey:t,toCategoryKey:c,...d.length?{seatOverrideIndices:d.sort((l,u)=>l-u)}:{}})}else i.categoryKey===t&&(i.categoryKey=c,o.push({family:s.key,floorId:r.id,objectId:i.id,objectType:s.objectType,fromCategoryKey:t,toCategoryKey:c}))}return o}function st(e){let t=structuredClone(e),n=he(t);if(!n.length)return{doc:t,changed:!1,changes:[],before:n,after:n};let o=new Set(t.categories.map(c=>c.key)),r=new Set(t.categories.map(c=>fn(c.label))),i=[];for(let c of n){let d=t.categories.findIndex(y=>y.key===c.categoryKey);if(d<0)continue;let l=t.categories[d],u=c.families[0].family,f=new Map([[u,l.key]]),b=c.families.slice(1).map(y=>{let I=xr(l,y.family,o,r);return f.set(y.family,I.key),{family:y.family,key:I.key,label:I.label,category:I}});t.categories.splice(d+1,0,...b.map(y=>y.category));let m=vr(t,l.key,f);i.push({categoryKey:l.key,categoryLabel:l.label,retainedFamily:u,clones:b.map(({family:y,key:I,label:p})=>({family:y,key:I,label:p})),reassignments:m})}t.floors?.length&&(t.objects=t.floors[0].objects);let s=he(t);return{doc:t,changed:i.length>0,changes:i,before:n,after:s}}function Sr(e,t){return Math.abs(e.x-t.x)<=1e-7&&Math.abs(e.y-t.y)<=1e-7}function ve(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function je(e,t,n){let o=ve(t,n,e);return Math.abs(o)>1e-7?!1:e.x>=Math.min(t.x,n.x)-1e-7&&e.x<=Math.max(t.x,n.x)+1e-7&&e.y>=Math.min(t.y,n.y)-1e-7&&e.y<=Math.max(t.y,n.y)+1e-7}function Ir(e,t,n,o){let r=ve(e,t,n),i=ve(e,t,o),s=ve(n,o,e),c=ve(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)?!0:Math.abs(r)<=1e-7&&je(n,e,t)||Math.abs(i)<=1e-7&&je(o,e,t)||Math.abs(s)<=1e-7&&je(e,n,o)||Math.abs(c)<=1e-7&&je(t,n,o)}function wr(e){return e.reduce((t,n,o)=>{let r=e[(o+1)%e.length];return t+n.x*r.y-r.x*n.y},0)}function Mr(e){for(let t=0;t<e.length;t+=1){let n=(t+1)%e.length;for(let o=t+1;o<e.length;o+=1){let r=(o+1)%e.length;if(!(t===o||n===o||r===t)&&Ir(e[t],e[n],e[o],e[r]))return!0}}return!1}function mn(e){return e.length<3?{ok:!1,code:"too_few_vertices",message:"Add at least three vertices to create a polygon."}:e.length>256?{ok:!1,code:"too_many_vertices",message:"A polygon can contain at most 256 vertices."}:e.some(t=>!Number.isFinite(t.x)||!Number.isFinite(t.y)||Math.abs(t.x)>1e7||Math.abs(t.y)>1e7)?{ok:!1,code:"invalid_coordinate",message:"Every polygon vertex must use a finite coordinate inside the safe chart range."}:e.some((t,n)=>Sr(t,e[(n+1)%e.length]))?{ok:!1,code:"duplicate_vertex",message:"Move or remove duplicate neighbouring vertices."}:Math.abs(wr(e))<2?{ok:!1,code:"degenerate_polygon",message:"The polygon needs a visible enclosed area."}:Mr(e)?{ok:!1,code:"self_intersection",message:"Polygon edges cannot cross or touch each other."}:{ok:!0}}var pn="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",gn=[{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:pn},{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:pn},{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"}];var Cr=new Map(gn.map(e=>[e.key,e]));function bn(e){return typeof e=="string"&&Cr.has(e)}var xa=gn.map(e=>e.key);var yn=["butt","round","square"],hn=["miter","round","bevel"],ct=["none","arrow"];function lt(e){return e==="line"||e==="polyline"}function Z(e){return e.length>=3&&e.every(t=>Number.isFinite(t.x)&&Number.isFinite(t.y))}function ie(e,t,n){let o=(e.y-t.y)*(n.x-t.x)-(e.x-t.x)*(n.y-t.y);if(Math.abs(o)>1e-7)return!1;let r=(e.x-t.x)*(n.x-t.x)+(e.y-t.y)*(n.y-t.y);if(r<-1e-7)return!1;let i=(n.x-t.x)**2+(n.y-t.y)**2;return r<=i+1e-7}function ae(e,t){let n=!1;for(let o=0,r=t.length-1;o<t.length;r=o++){let i=t[r],s=t[o];if(ie(e,i,s))return!0;i.y>e.y!=s.y>e.y&&e.x<(s.x-i.x)*(e.y-i.y)/(s.y-i.y)+i.x&&(n=!n)}return n}function V(e,t,n){return(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}function vn(e,t,n,o){let r=V(e,t,n),i=V(e,t,o),s=V(n,o,e),c=V(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)?!0:Math.abs(r)<=1e-7&&ie(n,e,t)||Math.abs(i)<=1e-7&&ie(o,e,t)||Math.abs(s)<=1e-7&&ie(e,n,o)||Math.abs(c)<=1e-7&&ie(t,n,o)}function se(e){for(let t=0;t<e.length;t+=1){let n=(t+1)%e.length;for(let o=t+1;o<e.length;o+=1){let r=(o+1)%e.length;if(!(t===o||n===o||r===t)&&vn(e[t],e[n],e[o],e[r]))return!0}}return!1}function Se(e,t){for(let n=0;n<e.length;n+=1)for(let o=0;o<t.length;o+=1)if(vn(e[n],e[(n+1)%e.length],t[o],t[(o+1)%t.length]))return!0;return ae(e[0],t)||ae(t[0],e)}function xn(e,t){return!t.some((n,o)=>ie(e,n,t[(o+1)%t.length]))&&ae(e,t)}function Sn(e){let t=e.outlinePath;if(!t?.segments.length)return;let n=i=>Number.isFinite(i.x)&&Number.isFinite(i.y),o=(i,s)=>Math.hypot(i.x-s.x,i.y-s.y);if(!n(t.start))return 0;let r=t.start;for(let i=0;i<t.segments.length;i++){let s=t.segments[i];if(!s||!n(s.end)||o(r,s.end)<=1e-9||s.kind==="bezier"&&(!n(s.control1)||!n(s.control2)))return i;if(s.kind==="arc"){if(!n(s.center)||!Number.isFinite(s.radius)||s.radius<=1e-6)return i;let c=Math.max(1e-4,s.radius*1e-4);if(Math.abs(o(r,s.center)-s.radius)>c||Math.abs(o(s.end,s.center)-s.radius)>c)return i}r=s.end}return o(r,t.start)>1e-4,t.segments.length-1}function kr(e,t,n,o){let r=V(e,t,n),i=V(e,t,o),s=V(n,o,e),c=V(n,o,t);return(r>1e-7&&i<-1e-7||r<-1e-7&&i>1e-7)&&(s>1e-7&&c<-1e-7||s<-1e-7&&c>1e-7)}function In(e,t){for(let n=0;n<e.length;n+=1)for(let o=0;o<t.length;o+=1)if(kr(e[n],e[(n+1)%e.length],t[o],t[(o+1)%t.length]))return!0;return e.some(n=>xn(n,t))||t.some(n=>xn(n,e))}function wn(e){return e.role!=="reference-focal"||!e.points||!Z(e.points)?null:e.points}function Mn(e){return!!e.referenceImage?.assetId&&!!e.backgroundImage?.assetId&&e.referenceImage.assetId!==e.backgroundImage.assetId}function kn(e,t){if(e.displayLabel!==void 0){let n=e.displayLabel.normalize("NFKC").trim();!(e.type==="row"&&e.displayLabel==="")&&(!n||n!==e.displayLabel||n.length>80)&&t.push({severity:"error",code:"invalid-display-label",message:`${e.type==="gaArea"?"GA area":e.type} "${e.label}" must use a normalized buyer label of 1 to 80 characters`,objectId:e.id})}if(e.displayType!==void 0){let n=e.displayType.normalize("NFKC").trim();(!n||n!==e.displayType||n.length>24)&&t.push({severity:"error",code:"invalid-display-type",message:`${e.type==="gaArea"?"GA area":e.type} "${e.label}" must use a normalized buyer type of 1 to 24 characters`,objectId:e.id})}}function Cn(e,t,n,o){let r=e.crop,i=r&&(!Number.isFinite(r.x)||!Number.isFinite(r.y)||!Number.isFinite(r.width)||!Number.isFinite(r.height)||r.x<0||r.y<0||r.width<=0||r.height<=0||r.x+r.width>1.000001||r.y+r.height>1.000001);(!Number.isFinite(e.center?.x)||!Number.isFinite(e.center?.y)||!Number.isFinite(e.width)||e.width<=0||!Number.isFinite(e.opacity)||e.opacity<0||e.opacity>1||e.rotation!==void 0&&!Number.isFinite(e.rotation)||i)&&n.push({severity:"error",code:"invalid-background-placement",message:`The ${t} image has an invalid position, size, opacity, rotation, or crop`,...o?{floorId:o}:{}})}function ut(e,t,n,o){let r=e.referenceImage,i=e.backgroundImage;r&&(Cn(r,"reference",t,o),!r.assetId&&!r.url&&t.push({severity:"error",code:"invalid-reference-image",message:"A trace reference must identify a private asset or self-contained image",...o?{floorId:o}:{}})),i&&(Cn(i,i.assetId?"legacy reference":"buyer background",t,o),!i.assetId&&!i.url&&t.push({severity:"error",code:"invalid-buyer-background",message:"A buyer background must contain a renderable image URL",...o?{floorId:o}:{}}),i.assetId&&n.push({severity:"warning",code:"legacy-reference-background",message:"This legacy asset-backed background is trace-only and will migrate to the private reference layer when edited",...o?{floorId:o}:{}})),Mn(e)&&t.push({severity:"error",code:"conflicting-reference-images",message:"The canonical reference and legacy asset-backed background identify different private sources",...o?{floorId:o}:{}})}function Ie(e){let t=new Set(oe.map(n=>n.key));return!e||/^ref_[0-9a-f-]{36}$/.test(e.assetId)&&!!e.logicalSectionId.trim()&&["user-confirmed","authoritative-source"].includes(e.evidence)&&!!e.sourceDescription.trim()&&(e.derivation===void 0||["explicit-inventory","server-synthesized-from-aggregate"].includes(e.derivation))&&(e.aggregateEvidence===void 0||["user-confirmed","authoritative-source"].includes(e.aggregateEvidence))&&(e.derivation!=="server-synthesized-from-aggregate"||e.evidence==="user-confirmed")&&(e.sectionAssignmentEvidence===void 0||["user-confirmed","authoritative-source"].includes(e.sectionAssignmentEvidence))&&e.sectionAssignmentEvidence===void 0==!e.sectionAssignmentSourceDescription?.trim()&&(e.sectionAssignmentSourceDescription?.trim().length??0)<=240&&(e.numberingEvidence===void 0||e.numberingEvidence==="user-confirmed")&&e.numberingEvidence===void 0==!e.numberingSourceDescription?.trim()&&(e.numberingSourceDescription?.trim().length??0)<=240&&(!e.accessibility||e.accessibility.placementDerivation==="server-synthesized-row-edges"&&e.accessibility.groupLogicalSectionIds.length>0&&e.accessibility.groupLogicalSectionIds.length<=100&&new Set(e.accessibility.groupLogicalSectionIds).size===e.accessibility.groupLogicalSectionIds.length&&e.accessibility.groupLogicalSectionIds.includes(e.logicalSectionId)&&e.accessibility.groupLogicalSectionIds.every(n=>!!n.trim()&&n.length<=160)&&["user-confirmed","authoritative-source"].includes(e.accessibility.assignmentEvidence)&&!!e.accessibility.assignmentSourceDescription.trim()&&e.accessibility.assignmentSourceDescription.trim().length<=240&&e.accessibility.counts.length>0&&e.accessibility.counts.length<=oe.length&&new Set(e.accessibility.counts.map(n=>n.type)).size===e.accessibility.counts.length&&e.accessibility.counts.every(n=>t.has(n.type)&&Number.isInteger(n.count)&&n.count>0&&["user-confirmed","authoritative-source"].includes(n.evidence)&&!!n.sourceDescription.trim()&&n.sourceDescription.trim().length<=240))}function En(e){let t=e.referenceInventoryExclusion;return!t||typeof t.assetId=="string"&&/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&t.assetId===e.referenceSource?.assetId&&typeof t.logicalSectionId=="string"&&t.logicalSectionId===(e.logicalSectionId??e.id)&&typeof t.reason=="string"&&!!t.reason.trim()&&t.reason.trim().length<=80&&["user-confirmed","authoritative-source"].includes(t.evidence)&&typeof t.sourceDescription=="string"&&!!t.sourceDescription.trim()&&t.sourceDescription.trim().length<=240}function Pn(e){let t=e.referenceCategorySource;return!t||/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&/^#[0-9a-f]{6}$/i.test(t.sourceColor)&&(t.sourceColors===void 0||t.sourceColors.length>0&&t.sourceColors.includes(t.sourceColor)&&new Set(t.sourceColors).size===t.sourceColors.length&&t.sourceColors.every(n=>/^#[0-9a-f]{6}$/i.test(n)&&`${n[1]}${n[3]}${n[5]}`.toLowerCase()===`${t.sourceColor[1]}${t.sourceColor[3]}${t.sourceColor[5]}`.toLowerCase()))&&(t.logicalSectionIds===void 0||t.logicalSectionIds.length>0&&new Set(t.logicalSectionIds).size===t.logicalSectionIds.length&&t.logicalSectionIds.every(n=>!!n.trim()&&n.length<=160))&&(t.assignmentDerivation===void 0||["source-color-class","confirmed-logical-sections"].includes(t.assignmentDerivation))&&t.assignmentEvidence===void 0==!t.assignmentSourceDescription?.trim()&&(t.assignmentEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.assignmentEvidence))&&(t.assignmentSourceDescription?.trim().length??0)<=240&&(t.assignmentDerivation!=="confirmed-logical-sections"||t.assignmentEvidence!==void 0&&!!t.assignmentSourceDescription?.trim())&&t.sourcePaletteColor===void 0==(t.sourcePaletteColorEvidence===void 0)&&t.sourcePaletteColorEvidence===void 0==!t.sourcePaletteColorSourceDescription?.trim()&&(t.sourcePaletteColor===void 0||/^#[0-9a-f]{6}$/i.test(t.sourcePaletteColor))&&(t.sourcePaletteColorEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.sourcePaletteColorEvidence))&&(t.sourcePaletteColorSourceDescription?.trim().length??0)<=240&&["user-confirmed","authoritative-source"].includes(t.labelEvidence)&&!!t.labelSourceDescription.trim()&&t.labelSourceDescription.trim().length<=240&&e.price!==void 0&&["user-confirmed","authoritative-source"].includes(t.priceEvidence)&&!!t.priceSourceDescription.trim()&&t.priceSourceDescription.trim().length<=240&&t.outputColorEvidence===void 0==!t.outputColorSourceDescription?.trim()&&(t.outputColorEvidence===void 0||["user-confirmed","authoritative-source"].includes(t.outputColorEvidence))&&(t.outputColorSourceDescription?.trim().length??0)<=240&&(e.color.toLowerCase()===(t.sourcePaletteColor??t.sourceColor).toLowerCase()&&new Set((t.sourceColors??[t.sourceColor]).map(n=>`${n[1]}${n[3]}${n[5]}`.toLowerCase())).size===1||t.outputColorEvidence!==void 0&&["user-confirmed","authoritative-source"].includes(t.outputColorEvidence))}function Ln(e){let t=e.referenceDirectSeatImport;return!t||/^ref_[0-9a-f-]{36}$/.test(t.assetId)&&/^source-color:(?:#[0-9a-f]{6}(?:\+#[0-9a-f]{6})*|unclassified)$/i.test(t.familyId)}function An(e,t){let n=e.floors?.length?e.floors.map(i=>({id:i.id,objects:i.objects})):[{id:"floor-0",objects:e.objects}],o=new Map,r=new Map;for(let i of n){let s=i.objects.filter(l=>l.type==="row"),c=new Map,d=new Map;for(let l of s){if(l.segmentedRow){let u=c.get(l.segmentedRow.groupId)??[];u.push(l),c.set(l.segmentedRow.groupId,u)}if(l.rowBlockGeneration){let u=d.get(l.rowBlockGeneration.groupId)??[];u.push(l),d.set(l.rowBlockGeneration.groupId,u)}l.segmentedRow&&l.rowBlockGeneration&&t.push({severity:"error",code:"invalid-row-group-membership",message:`Row "${l.label}" cannot be both a segmented-row component and a generated row-block member`,objectId:l.id,floorId:i.id})}for(let[l,u]of c){let f=o.get(l);f&&f!==i.id&&t.push({severity:"error",code:"invalid-segmented-row",message:`Segmented row "${l}" cannot span multiple floors`,objectId:u[0].id,floorId:i.id}),o.set(l,i.id);let b=u.slice().sort((w,M)=>w.segmentedRow.componentIndex-M.segmentedRow.componentIndex),m=b[0]?.segmentedRow,y=m?.componentCount??0,I=m?JSON.stringify({displayLabel:m.displayLabel,repeatLabelOnComponents:m.repeatLabelOnComponents,displayType:m.displayType,labelPresentation:m.labelPresentation,viewFromSeatUrl:m.viewFromSeatUrl,viewFromSeatMeta:m.viewFromSeatMeta,confidenceEvidence:m.confidenceEvidence,smoothing:m.smoothing}):"";m&&y>=2&&y<=64&&b.length===y&&m.boundaryBefore==="start"&&b.every((w,M)=>{let v=w.segmentedRow;return v.kind==="segmented-row-v1"&&v.groupId===l&&v.componentCount===y&&v.componentIndex===M&&(M===0?v.boundaryBefore==="start":v.boundaryBefore!=="start")&&v.displayLabel.normalize("NFKC").trim()===v.displayLabel&&v.displayLabel.length>0&&v.displayLabel.length<=80&&JSON.stringify({displayLabel:v.displayLabel,repeatLabelOnComponents:v.repeatLabelOnComponents,displayType:v.displayType,labelPresentation:v.labelPresentation,viewFromSeatUrl:v.viewFromSeatUrl,viewFromSeatMeta:v.viewFromSeatMeta,confidenceEvidence:v.confidenceEvidence,smoothing:v.smoothing})===I})||t.push({severity:"error",code:"invalid-segmented-row",message:`Segmented row "${l}" has missing, duplicated, cyclic, or inconsistent component metadata`,objectId:u[0]?.id,floorId:i.id})}for(let[l,u]of d){let f=r.get(l);f&&f!==i.id&&t.push({severity:"error",code:"invalid-row-block-generation",message:"A generated row block cannot span multiple floors",objectId:u[0].id,floorId:i.id}),r.set(l,i.id)}}}function Pr(e){return e.type==="row"||e.type==="table"||e.type==="booth"}function Lr(e){let t=[],n=new Map((e.overrides??[]).map(o=>[o.index,o]));for(let o=0;o<e.seatCount;o++){let r=n.get(o);r?.skip||t.push({label:Ce(e,o,r),index:o})}return t}function Rn(e){let t=[],n=new Map((e.overrides??[]).map(o=>[o.index,o]));for(let o=0;o<e.seatCount;o++){let r=n.get(o);r?.skip||t.push({label:r?.label??`${e.label}-${o+1}`,index:o})}return t}function On(e){let t=[];e.eventConfigurationId!==void 0&&(typeof e.eventConfigurationId!="string"||e.eventConfigurationId.normalize("NFKC").trim()!==e.eventConfigurationId||e.eventConfigurationId.length<1||e.eventConfigurationId.length>100)&&t.push({severity:"error",code:"invalid-event-configuration",message:"Active event configuration must contain 1 to 100 normalized characters"});let n=[],o=new Set(e.categories.map(a=>a.key)),r=new Set(oe.map(a=>a.key)),i=new Map(e.categories.map(a=>[a.key,a.price!=null||a.notForSale===!0])),s=new Set;ut(e,t,n),e.theme?.logoUrl!==void 0&&!Ze(e.theme.logoUrl)&&t.push({severity:"error",code:"invalid-theme-logo-url",message:"The buyer-facing theme logo URL is invalid"});let c=Ze,d=(a,P,g,x={})=>{if(P===void 0)return;if(!P||typeof P!="object"||Array.isArray(P)){t.push({severity:"error",code:"invalid-seat-view-metadata",message:`${g} view metadata is invalid`,...x});return}let h=P;a||n.push({severity:"warning",code:"orphaned-seat-view-metadata",message:`${g} view metadata has no image`,...x});let E=new Set(["exact-seat","row-representative","section-representative","floor-representative","venue-representative"]);h.projection!==void 0&&h.projection!=="equirectangular"&&t.push({severity:"error",code:"invalid-seat-view-projection",message:`${g} view projection must be equirectangular`,...x}),h.coverage!==void 0&&!E.has(h.coverage)&&t.push({severity:"error",code:"invalid-seat-view-coverage",message:`${g} view coverage is invalid`,...x});let C=(R,L,O)=>typeof R=="number"&&Number.isFinite(R)&&R>=L&&R<=O;if(h.initialBearingDeg!==void 0&&!C(h.initialBearingDeg,-360,360)&&t.push({severity:"error",code:"invalid-seat-view-bearing",message:`${g} view bearing must be between -360\xB0 and 360\xB0`,...x}),h.initialPitchDeg!==void 0&&!C(h.initialPitchDeg,-90,90)&&t.push({severity:"error",code:"invalid-seat-view-pitch",message:`${g} view pitch must be between -90\xB0 and 90\xB0`,...x}),h.capturedAt!==void 0&&(typeof h.capturedAt!="string"||h.capturedAt.length>40||!Number.isFinite(Date.parse(h.capturedAt)))&&t.push({severity:"error",code:"invalid-seat-view-capture-date",message:`${g} view capture date is invalid`,...x}),h.sourceLabel!==void 0&&(typeof h.sourceLabel!="string"||h.sourceLabel.trim().length>100)&&t.push({severity:"error",code:"invalid-seat-view-source",message:`${g} view source label is invalid`,...x}),h.previewUrl!==void 0&&!c(h.previewUrl)&&t.push({severity:"error",code:"invalid-seat-view-preview-url",message:`${g} view preview URL is invalid`,...x}),h.variants!==void 0){let R=Array.isArray(h.variants)?h.variants:[];if(!Array.isArray(h.variants)||R.length<1||R.length>4)t.push({severity:"error",code:"invalid-seat-view-variants",message:`${g} view variants must contain between 1 and 4 tiers`,...x});else{let L=new Set;for(let O of R){if(!O||typeof O!="object"||!c(O.url)||!Number.isInteger(O.width)||O.width<1||O.width>12e3||!Number.isInteger(O.height)||O.height<1||O.height>12e3||O.width!==O.height*2||typeof O.sha256!="string"||!/^[a-f0-9]{64}$/.test(O.sha256)||L.has(O.width)){t.push({severity:"error",code:"invalid-seat-view-variant",message:`${g} view variant is not a unique immutable 2:1 equirectangular tier`,...x});break}L.add(O.width)}}}for(let[R,L]of[["width",h.sourceWidth],["height",h.sourceHeight],["preview width",h.previewWidth],["preview height",h.previewHeight]])L!==void 0&&(!Number.isInteger(L)||L<1||L>32768)&&t.push({severity:"error",code:"invalid-seat-view-dimensions",message:`${g} view source ${R} is invalid`,...x});h.captureEyeHeightM!==void 0&&!C(h.captureEyeHeightM,.5,3)&&t.push({severity:"error",code:"invalid-seat-view-eye-height",message:`${g} capture eye height must be between 0.5 m and 3 m`,...x}),h.eventConfigurationId!==void 0&&(typeof h.eventConfigurationId!="string"||!h.eventConfigurationId.trim()||h.eventConfigurationId.length>100)&&t.push({severity:"error",code:"invalid-seat-view-configuration",message:`${g} event configuration id is invalid`,...x}),h.eventConfigurationVersion!==void 0&&(!Number.isInteger(h.eventConfigurationVersion)||h.eventConfigurationVersion<1)&&t.push({severity:"error",code:"invalid-seat-view-configuration-version",message:`${g} event configuration version is invalid`,...x}),h.eventConfigurationVersion!==void 0&&!h.eventConfigurationId&&t.push({severity:"error",code:"invalid-seat-view-configuration-pin",message:`${g} event configuration version requires an id`,...x})},l=(a,P,g={})=>{if(a===void 0)return;let x=L=>{t.push({severity:"error",code:"invalid-seat-confidence-evidence",message:`${P} confidence evidence ${L}`,...g})};if(!a||typeof a!="object"||Array.isArray(a)){x("is invalid");return}let h=a;h.schema!=="seatlayer.seat-confidence/1"&&x("has an unsupported schema");let E=(L,O)=>typeof L=="string"&&L.normalize("NFKC").trim()===L&&L.length>0&&L.length<=O;E(h.evidenceId,120)||x("has an invalid evidence id"),E(h.modelVersion,120)||x("has an invalid model version"),new Set(["synthetic-model","organizer-approved","calibrated-provider"]).has(h.evidenceKind)||x("has an invalid evidence kind"),new Set(["generated","geometry-verified","configuration-verified"]).has(h.modelLevel)||x("has an invalid model level");let C=h.realityLevel??"none";new Set(["none","comparable-build-reference","actual-build-checked"]).has(C)||x("has an invalid reality level"),h.eventConfigurationId!==void 0&&!E(h.eventConfigurationId,100)&&x("has an invalid event configuration id"),h.eventConfigurationVersion!==void 0&&(!Number.isInteger(h.eventConfigurationVersion)||h.eventConfigurationVersion<1)&&x("has an invalid event configuration version"),h.status!==void 0&&!new Set(["draft","approved","retracted"]).has(h.status)&&x("has an invalid publication status"),h.basisSha256!==void 0&&!/^[a-f0-9]{64}$/.test(h.basisSha256)&&x("has an invalid venue basis SHA-256"),h.basisSha256!==void 0&&h.status!=="approved"&&x("can carry a venue basis SHA-256 only after approval");for(let[L,O]of[["assessment",h.assessedAt],["expiry",h.validUntil]])O!==void 0&&(!E(O,40)||!Number.isFinite(Date.parse(O)))&&x(`has an invalid ${L} date`);h.approvedByRole!==void 0&&!E(h.approvedByRole,100)&&x("has an invalid approving organization or role"),h.sourceLabel!==void 0&&!E(h.sourceLabel,120)&&x("has an invalid source label"),h.limitations!==void 0&&(!Array.isArray(h.limitations)||h.limitations.length>6||h.limitations.some(L=>!E(L,160)))&&x("has invalid limitations"),h.evidenceKind==="synthetic-model"&&(h.modelLevel!=="generated"||C!=="none")&&x("cannot describe synthetic data as verified or reality checked"),h.modelLevel!=="generated"&&(!h.assessedAt||!h.approvedByRole)&&x("requires an assessment date and approving organization or role for verified model levels"),h.modelLevel==="configuration-verified"&&!h.eventConfigurationId&&x("requires an event configuration id for configuration verification"),C!=="none"&&(!h.assessedAt||!h.sourceLabel)&&x("requires an assessment date and source for reality evidence"),C==="actual-build-checked"&&(h.modelLevel!=="configuration-verified"||!h.eventConfigurationId)&&x("requires a configuration-verified model and event configuration for an actual-build check");let R=h.modeledTarget;R!==void 0&&(!R||typeof R!="object"||Array.isArray(R)?x("has an invalid modeled target"):((!E(R.label,80)||!E(R.methodLabel,100))&&x("has invalid modeled-target labels"),(!Number.isInteger(R.totalRayCount)||R.totalRayCount<1||R.totalRayCount>1e3||!Number.isInteger(R.clearRayCount)||R.clearRayCount<0||R.clearRayCount>R.totalRayCount)&&x("has invalid modeled-target ray counts"),new Set(["clear","partial","obstructed"]).has(R.classification)||x("has an invalid modeled-target classification"),R.occluderLabels!==void 0&&(!Array.isArray(R.occluderLabels)||R.occluderLabels.length>10||R.occluderLabels.some(L=>!E(L,100)))&&x("has invalid modeled-target occluders")))};d(e.viewFromSeatUrl,e.viewFromSeatMeta,"Venue"),l(e.confidenceEvidence,"Venue"),e.viewFromSeatUrl!==void 0&&!c(e.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-venue-view-url",message:"The whole-venue view-from-seat image URL is invalid"});for(let a of e.floors??[])a.viewFromSeatUrl!==void 0&&!c(a.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-floor-view-url",message:`Floor "${a.name}" has an invalid view-from-seat image URL`}),d(a.viewFromSeatUrl,a.viewFromSeatMeta,`Floor "${a.name}"`,{floorId:a.id}),l(a.confidenceEvidence,`Floor "${a.name}"`,{floorId:a.id});let u=e.floors?.length?e.floors.flatMap(a=>a.objects):e.objects;for(let a of u)if((a.type==="row"||a.type==="section")&&(a.viewFromSeatUrl!==void 0&&!c(a.viewFromSeatUrl)&&t.push({severity:"error",code:a.type==="row"?"invalid-row-view-url":"invalid-section-view-url",message:`${a.type==="row"?"Row":"Section"} "${a.label}" has an invalid view-from-seat image URL`,objectId:a.id}),d(a.viewFromSeatUrl,a.viewFromSeatMeta,`${a.type==="row"?"Row":"Section"} "${a.label}"`,{objectId:a.id}),l(a.confidenceEvidence,`${a.type==="row"?"Row":"Section"} "${a.label}"`,{objectId:a.id})),a.type==="row"&&a.segmentedRow&&(a.segmentedRow.viewFromSeatUrl!==void 0&&!c(a.segmentedRow.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-segmented-row-view-url",message:`Segmented row "${a.segmentedRow.displayLabel}" has an invalid view-from-seat image URL`,objectId:a.id}),d(a.segmentedRow.viewFromSeatUrl,a.segmentedRow.viewFromSeatMeta,`Segmented row "${a.segmentedRow.displayLabel}"`,{objectId:a.id}),l(a.segmentedRow.confidenceEvidence,`Segmented row "${a.segmentedRow.displayLabel}"`,{objectId:a.id})),a.type==="row"||a.type==="table")for(let P of a.overrides??[])P.viewFromSeatUrl!==void 0&&!c(P.viewFromSeatUrl)&&t.push({severity:"error",code:"invalid-seat-view-url",message:`Seat ${P.index+1} has an invalid view-from-seat image URL`,objectId:a.id,seatIndices:[P.index]}),d(P.viewFromSeatUrl,P.viewFromSeatMeta,`Seat ${P.index+1}`,{objectId:a.id,seatIndices:[P.index]}),l(P.confidenceEvidence,`Seat ${P.index+1}`,{objectId:a.id,seatIndices:[P.index]});let f=new Set;for(let a of e.categories){f.has(a.key)&&t.push({severity:"error",code:"duplicate-category-key",message:`Category key "${a.key}" is used more than once`,categoryKey:a.key}),f.add(a.key);let P=new Set;for(let g of a.tiers??[]){if(P.has(g.id)&&t.push({severity:"error",code:"duplicate-category-tier-id",message:`Ticket tier id "${g.id}" is used more than once in category "${a.key}"`,categoryKey:a.key}),g.restriction!=null&&!["companion","child","senior","student","membership","custom"].includes(g.restriction)&&t.push({severity:"error",code:"invalid-category-tier-restriction",message:`Ticket tier "${g.name}" has an unknown restriction`,categoryKey:a.key}),g.buyerMessage!=null&&(!g.buyerMessage.trim()||g.buyerMessage.length>240)&&t.push({severity:"error",code:"invalid-category-tier-buyer-message",message:`Ticket tier "${g.name}" buyer guidance must contain 1 to 240 characters`,categoryKey:a.key}),g.currency!=null&&!/^[A-Z]{3}$/.test(g.currency)&&t.push({severity:"error",code:"invalid-category-tier-currency",message:`Ticket tier "${g.name}" must use a three-letter ISO currency`,categoryKey:a.key}),g.applicability!=null){let x=g.applicability.seatLabels,h=g.applicability.accessibility;(x!==void 0&&(!Array.isArray(x)||!x.length||x.length>1e4||x.some(E=>typeof E!="string"||!E.trim()||E.length>160)||new Set(x).size!==x.length)||h!==void 0&&(!Array.isArray(h)||!h.length||h.some(E=>!r.has(E))||new Set(h).size!==h.length))&&t.push({severity:"error",code:"invalid-category-tier-applicability",message:`Ticket tier "${g.name}" has invalid seat applicability`,categoryKey:a.key})}g.evidence!=null&&(!["public-host","public-event","user-confirmed"].includes(g.evidence.provenance)||!g.evidence.sourceDescription.trim()||g.evidence.sourceDescription.length>240||g.evidence.capturedAt!==void 0&&(g.evidence.capturedAt.length>40||!Number.isFinite(Date.parse(g.evidence.capturedAt))))&&t.push({severity:"error",code:"invalid-category-tier-evidence",message:`Ticket tier "${g.name}" has invalid evidence provenance`,categoryKey:a.key}),P.add(g.id)}Pn(a)||t.push({severity:"error",code:"invalid-reference-category-source",message:`Category ${a.label||a.key} has incomplete or invalid reference evidence`,categoryKey:a.key}),Ln(a)||t.push({severity:"error",code:"invalid-reference-direct-seat-import",message:`Category ${a.label||a.key} has invalid direct-seat import provenance`,categoryKey:a.key})}let b=new Map,m=new Map,y=[],I=new Map,p=0,w=0,M=new Set;for(let a of e.floors??[])ut(a,t,n,a.id),M.has(a.id)&&t.push({severity:"error",code:"duplicate-floor-id",message:`Floor id "${a.id}" is used more than once`,floorId:a.id}),M.add(a.id),a.baseHeightM!==void 0&&(!Number.isFinite(a.baseHeightM)||a.baseHeightM<z||a.baseHeightM>H)&&t.push({severity:"error",code:"invalid-floor-base-height",message:`Floor "${a.name}" base height must be between ${z} and ${H} metres`,floorId:a.id});let v=e.floors&&e.floors.length?e.floors.flatMap(a=>a.objects):e.objects;An(e,t);let S=new Set;for(let a of v)S.has(a.id)&&t.push({severity:"error",code:"duplicate-object-id",message:`Object id "${a.id}" is used more than once`,objectId:a.id}),S.add(a.id);let A=new Set;for(let a of e.zones??[])A.has(a.id)&&t.push({severity:"error",code:"duplicate-zone-id",message:`Zone id "${a.id}" is used more than once`}),A.add(a.id),a.focalPoint!==void 0&&(!Number.isFinite(a.focalPoint.x)||!Number.isFinite(a.focalPoint.y))&&t.push({severity:"error",code:"invalid-zone-focal-point",message:`Zone "${a.label}" must use a finite focal point`});let k=new Map;for(let a of v)if(!(a.type!=="section"||!a.zone)){if(e.zones?.length&&!A.has(a.zone)){t.push({severity:"error",code:"unknown-section-zone",message:`Section "${a.displayLabel??a.label}" references unknown zone "${a.zone}"`,objectId:a.id});continue}k.has(a.zone)||k.set(a.zone,a)}for(let[a,P]of k){let g=e.zones?.find(x=>x.id===a);g&&(g?.focalPoint||n.push({severity:"warning",code:"missing-zone-focal-point",message:`Zone "${g?.label??a}" uses the legacy floor focal; set its own focal point before publishing`,objectId:P.id}))}for(let a of v)if((a.type==="row"||a.type==="table"||a.type==="booth"||a.type==="gaArea")&&kn(a,t),Pr(a)){if(p++,w+=a.type==="booth"?1:a.type==="row"?Le(a):a.bookAsWhole||a.variableOccupancy?a.seatCount:Rn(a).length,b.get(a.label)!==void 0?a.type!=="row"&&t.push({severity:"error",code:"duplicate-object-label",message:`Label "${a.label}" is used by more than one object`,objectId:a.id}):b.set(a.label,a.id),o.has(a.categoryKey)?s.add(a.categoryKey):t.push({severity:"error",code:"unknown-category",message:`"${a.label}" references unknown category "${a.categoryKey}"`,objectId:a.id,categoryKey:a.categoryKey}),a.type==="row"){Ie(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Row "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),a.seatCount<1&&t.push({severity:"error",code:"empty-row",message:`Row "${a.label}" has no seats`,objectId:a.id});let g=new Set;for(let x of a.overrides??[]){(x.accessibility??[]).filter(R=>!r.has(R)).length&&t.push({severity:"error",code:"invalid-accessibility-type",message:`Row "${a.label}" seat ${x.index+1} uses an unknown accessibility type`,objectId:a.id,seatIndices:[x.index]}),(!Number.isInteger(x.index)||x.index<0||x.index>=a.seatCount||g.has(x.index))&&t.push({severity:"error",code:"invalid-seat-override",message:`Row "${a.label}" has a duplicated or out-of-range seat override`,objectId:a.id,...Number.isInteger(x.index)?{seatIndices:[x.index]}:{}}),g.add(x.index);let E=x.wheelchairSpaceType,C=x.accessible===!0||x.accessibility?.includes("wheelchair");E!==void 0&&E!=="seat-present"&&E!=="no-seat"?t.push({severity:"error",code:"invalid-wheelchair-space",message:`Row "${a.label}" seat ${x.index+1} has an invalid wheelchair-space type`,objectId:a.id,seatIndices:[x.index]}):E&&(!C||x.skip)&&t.push({severity:"error",code:"invalid-wheelchair-space",message:x.skip?`Row "${a.label}" seat ${x.index+1} cannot have a wheelchair-space physical type while skipped from inventory`:`Row "${a.label}" seat ${x.index+1} must include wheelchair accessibility for its physical-space type`,objectId:a.id,seatIndices:[x.index]})}for(let x of Lr(a))ye(x.label)&&t.push({severity:"error",code:"reserved-seat-label",message:`Seat label "${x.label}" uses SeatLayer's reserved GA namespace`,objectId:a.id,seatIndices:[x.index]}),m.get(x.label)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Seat label "${x.label}" is used more than once`,objectId:a.id,seatIndices:[x.index]}):m.set(x.label,a.id)}else if(a.type==="table"){let g=a.bookAsWhole===!0||a.variableOccupancy===!0;if(a.seatCountsBySide){let C=["top","bottom","left","right"],R=Object.keys(a.seatCountsBySide),L=C.every(F=>Number.isInteger(a.seatCountsBySide[F])&&a.seatCountsBySide[F]>=0&&a.seatCountsBySide[F]<=40),O=L?C.reduce((F,ue)=>F+a.seatCountsBySide[ue],0):Number.NaN;(a.shape!=="rect"||R.length!==C.length||R.some(F=>!C.includes(F))||!L||O!==a.seatCount||O<1||O>40)&&t.push({severity:"error",code:"invalid-table-side-counts",message:`Table "${a.label}" needs top, bottom, left, and right whole-number chair counts totaling its ${a.seatCount}-chair capacity`,objectId:a.id})}g&&a.overrides?.length&&t.push({severity:"error",code:"grouped-table-chair-overrides",message:`Grouped table "${a.label}" cannot carry individual-chair overrides`,objectId:a.id,seatIndices:a.overrides.map(C=>C.index)});let x=new Set;for(let C of a.overrides??[]){(C.accessibility??[]).filter(F=>!r.has(F)).length&&t.push({severity:"error",code:"invalid-accessibility-type",message:`Table "${a.label}" chair ${C.index+1} uses an unknown accessibility type`,objectId:a.id,seatIndices:[C.index]}),(!Number.isInteger(C.index)||C.index<0||C.index>=a.seatCount||x.has(C.index))&&t.push({severity:"error",code:"invalid-seat-override",message:`Table "${a.label}" has a duplicated or out-of-range chair override`,objectId:a.id,...Number.isInteger(C.index)?{seatIndices:[C.index]}:{}}),x.add(C.index),C.categoryKey&&!o.has(C.categoryKey)?t.push({severity:"error",code:"unknown-category",message:`Table "${a.label}" chair ${C.index+1} references unknown category "${C.categoryKey}"`,objectId:a.id,seatIndices:[C.index],categoryKey:C.categoryKey}):C.categoryKey&&s.add(C.categoryKey);let L=C.wheelchairSpaceType,O=C.accessible===!0||C.accessibility?.includes("wheelchair");L!==void 0&&L!=="seat-present"&&L!=="no-seat"?t.push({severity:"error",code:"invalid-wheelchair-space",message:`Table "${a.label}" chair ${C.index+1} has an invalid wheelchair-space type`,objectId:a.id,seatIndices:[C.index]}):L&&(!O||C.skip)&&t.push({severity:"error",code:"invalid-wheelchair-space",message:C.skip?`Table "${a.label}" chair ${C.index+1} cannot have a wheelchair-space physical type while skipped from inventory`:`Table "${a.label}" chair ${C.index+1} must include wheelchair accessibility for its physical-space type`,objectId:a.id,seatIndices:[C.index]})}a.bookAsWhole&&a.variableOccupancy?t.push({severity:"error",code:"invalid-table-booking-mode",message:`Table "${a.label}" cannot be sold both as a whole table and with variable occupancy`,objectId:a.id}):a.variableOccupancy?(!Number.isInteger(a.minOccupancy)||!Number.isInteger(a.maxOccupancy)||a.minOccupancy<1||a.maxOccupancy<a.minOccupancy||a.maxOccupancy>a.seatCount)&&t.push({severity:"error",code:"invalid-table-occupancy",message:`Table "${a.label}" needs whole-number minimum and maximum guests from 1 to its ${a.seatCount}-chair capacity`,objectId:a.id}):(a.minOccupancy!=null||a.maxOccupancy!=null)&&t.push({severity:"error",code:"invalid-table-occupancy",message:`Table "${a.label}" has guest bounds without variable-occupancy selling`,objectId:a.id}),Ie(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Table "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),(a.shape==="round"&&a.radius==null||a.shape==="rect"&&(a.width==null||a.height==null)||a.seatCount<1)&&t.push({severity:"error",code:"bad-table",message:`Table "${a.label}" is missing required dimensions or seats`,objectId:a.id});let E=g?[{label:a.label,index:void 0}]:Rn(a);for(let C of E)ye(C.label)&&t.push({severity:"error",code:"reserved-seat-label",message:`Inventory label "${C.label}" uses SeatLayer's reserved GA namespace`,objectId:a.id}),m.get(C.label)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Inventory label "${C.label}" is used more than once; grouped table labels must be unique`,objectId:a.id,...C.index===void 0?{}:{seatIndices:[C.index]}}):m.set(C.label,a.id)}else if(a.type==="booth"){Ie(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`Booth "${a.label}" has invalid reference-inventory provenance`,objectId:a.id});let g=a.label;ye(g)&&t.push({severity:"error",code:"reserved-seat-label",message:`Seat label "${g}" uses SeatLayer's reserved GA namespace`,objectId:a.id}),m.get(g)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`Seat label "${g}" is used more than once`,objectId:a.id}):m.set(g,a.id)}}else if(a.type==="gaArea"){if(!Oe(a))t.push({severity:"error",code:"invalid-ga-inventory-segments",message:`GA area "${a.label}" has invalid joined-area inventory provenance`,objectId:a.id});else for(let h of et(a))m.get(h)!==void 0?y.push({severity:"error",code:"duplicate-seat-label",message:`GA inventory label "${h}" is used more than once`,objectId:a.id}):m.set(h,a.id);Ie(a.referenceInventorySource)||t.push({severity:"error",code:"invalid-reference-inventory-source",message:`GA area "${a.label}" has invalid reference-inventory provenance`,objectId:a.id}),(!Z(a.points)||Math.abs(re(a.points))<=1e-7||se(a.points))&&t.push({severity:"error",code:"invalid-ga-outline",message:`GA area "${a.label}" must have a finite, non-self-intersecting polygon outline`,objectId:a.id});let g=a.holes??[],x=Array.isArray(g)&&g.length<=64?g.findIndex(h=>!Array.isArray(h)||h.length>512||!Z(h)||Math.abs(re(h))<=1e-7||se(h)?!0:!h.flatMap((C,R)=>{let L=h[(R+1)%h.length];return[C,{x:(C.x+L.x)/2,y:(C.y+L.y)/2}]}).every(C=>ae(C,a.points))):0;if(x>=0)t.push({severity:"error",code:"invalid-ga-hole",message:`GA area "${a.label}" has a cutout outside its outline or with invalid geometry`,objectId:a.id,holeIndex:x});else if(g.some((h,E)=>g.slice(E+1).some(C=>Se(h,C)))){let h=g.findIndex((E,C)=>g.slice(C+1).some(R=>Se(E,R)));t.push({severity:"error",code:"overlapping-ga-holes",message:`GA area "${a.label}" has overlapping cutout polygons`,objectId:a.id,holeIndex:h})}o.has(a.categoryKey)?s.add(a.categoryKey):t.push({severity:"error",code:"unknown-category",message:`"${a.label}" references unknown category "${a.categoryKey}"`,objectId:a.id,categoryKey:a.categoryKey}),a.capacity<1&&t.push({severity:"error",code:"empty-ga",message:`GA area "${a.label}" has zero capacity`,objectId:a.id}),(!Number.isInteger(a.capacity)||a.capacity>Y)&&t.push({severity:"error",code:"invalid-ga-capacity",message:`GA area "${a.label}" capacity must be a whole number from 1 to ${Y}`,objectId:a.id}),p++,w+=Math.max(0,Math.floor(a.capacity))}else if(a.type==="section"){if(a.displayLabel!==void 0){let x=a.displayLabel.normalize("NFKC").trim();x?(x!==a.displayLabel||x.length>80)&&t.push({severity:"error",code:"invalid-display-label",message:`Section "${a.label}" must use a normalized buyer label of 1 to 80 characters`,objectId:a.id}):t.push({severity:"error",code:"unnamed-section",message:`Section "${a.label}" needs a buyer-facing name before seats are added`,objectId:a.id})}if(a.editor?.defaultCategoryKey&&!o.has(a.editor.defaultCategoryKey)&&t.push({severity:"error",code:"unknown-category",message:`Section "${a.label}" references unknown future-seat category "${a.editor.defaultCategoryKey}"`,objectId:a.id}),a.elevation!==void 0&&(!Number.isInteger(a.elevation)||a.elevation<ze||a.elevation>ee)){let x=Number.isInteger(a.elevation)&&a.elevation>ee&&a.elevation<=Xe;n.push({severity:"warning",code:x?"legacy-section-elevation":"invalid-section-elevation",message:x?`Section "${a.label}" uses legacy tier ${a.elevation}; set an exact height before normalizing it to tier ${ee}`:`Section "${a.label}" elevation must be a whole-number tier from ${ze} to ${ee}`,objectId:a.id})}if(a.height!==void 0&&(!Number.isFinite(a.height)||a.height<z||a.height>H)&&t.push({severity:"error",code:"invalid-section-height",message:`Section "${a.label}" exact height must be between ${z} and ${H} metres`,objectId:a.id}),a.rake!==void 0&&(!Number.isFinite(a.rake)||a.rake<ke||a.rake>Ee)&&t.push({severity:"error",code:"invalid-section-rake",message:`Section "${a.label}" rake must be between ${ke}\xB0 and ${Ee}\xB0`,objectId:a.id}),a.surfaceKind!==void 0&&a.surfaceKind!=="flat"&&a.surfaceKind!=="rakedRows"&&t.push({severity:"error",code:"invalid-section-surface-kind",message:`Section "${a.label}" surfaceKind must be 'flat' or 'rakedRows'`,objectId:a.id}),!Z(a.outline)||Math.abs(re(a.outline))<=1e-7||se(a.outline)){t.push({severity:"error",code:"invalid-section-outline",message:`Section "${a.label}" must have a finite, non-self-intersecting polygon outline`,objectId:a.id});continue}if(a.outlinePath){let x=[];try{x=Pt(a.outlinePath)}catch{}(!Ke(a.outlinePath)||!x.length||Math.hypot(a.outlinePath.start.x-a.outline[0].x,a.outlinePath.start.y-a.outline[0].y)>1e-4||!Z(x)||Math.abs(re(x))<=1e-7||se(x))&&t.push({severity:"error",code:"invalid-section-outline-path",message:`Section "${a.label}" has an invalid or inconsistent curved outline path`,objectId:a.id,edgeIndex:Sn(a)})}if(a.referenceSource&&(!/^ref_[0-9a-f-]{36}$/.test(a.referenceSource.assetId)||!/^(?:reg|ai)_[0-9a-f]{16}$/.test(a.referenceSource.regionId))&&t.push({severity:"error",code:"invalid-section-reference-source",message:`Section "${a.label}" has invalid opaque reference provenance`,objectId:a.id}),En(a)||t.push({severity:"error",code:"invalid-section-inventory-exclusion",message:`Section "${a.label}" has incomplete or mismatched non-sellable evidence`,objectId:a.id}),a.logicalSectionId!==void 0&&!a.logicalSectionId.trim())t.push({severity:"error",code:"invalid-logical-section-id",message:`Section "${a.label}" has an empty logical section id`,objectId:a.id});else if(a.logicalSectionId){let x=JSON.stringify({displayLabel:a.displayLabel??null,entrance:a.entrance??null,viewFromSeatUrl:a.viewFromSeatUrl??null,viewFromSeatMeta:a.viewFromSeatMeta??null,confidenceEvidence:a.confidenceEvidence??null,zone:a.zone??null,labelStyle:a.labelPresentation?.labelStyle??null,labelVisible:a.labelPresentation?.visible!==!1}),h=I.get(a.logicalSectionId);h&&(h.label!==a.label||h.semanticSignature!==x)?t.push({severity:"error",code:"inconsistent-logical-section",message:`Logical section "${a.logicalSectionId}" must use one technical label and buyer-facing presentation across every component`,objectId:a.id}):h||I.set(a.logicalSectionId,{label:a.label,semanticSignature:x})}let P=a.holes??[];if(!Array.isArray(P)||P.length>64){t.push({severity:"error",code:"invalid-section-hole",message:`Section "${a.label}" has an invalid opening collection`,objectId:a.id});continue}let g=-1;for(let x=0;x<P.length;x++){let h=P[x];if(!Array.isArray(h)||h.length>512||!Z(h)||Math.abs(re(h))<=1e-7||se(h)){g=x;break}if(!h.flatMap((C,R)=>{let L=h[(R+1)%h.length];return[C,{x:(C.x+L.x)/2,y:(C.y+L.y)/2}]}).every(C=>ae(C,a.outline))){g=x;break}}if(g>=0)t.push({severity:"error",code:"invalid-section-hole",message:`Section "${a.label}" has an opening outside its outline or with an invalid shape`,objectId:a.id,holeIndex:g});else if(P.some((x,h)=>P.slice(h+1).some(E=>Se(x,E)))){let x=P.findIndex((h,E)=>P.slice(E+1).some(C=>Se(h,C)));t.push({severity:"error",code:"overlapping-section-holes",message:`Section "${a.label}" has overlapping openings`,objectId:a.id,holeIndex:x})}}let T=e.floors?.length?e.floors.map(a=>a.objects):[e.objects];for(let a of T){let P=a.filter(g=>g.type==="section");for(let g of a.filter(x=>x.type==="text")){let x=g.iconKey;x!==void 0&&!bn(x)&&t.push({severity:"error",code:"invalid-icon-key",message:`Venue icon "${g.text||g.id}" references an unknown symbol`,objectId:g.id});let h=g.fontFamily;h!==void 0&&(typeof h!="string"||h.normalize("NFKC").trim()!==h||h.length<1||h.length>120)&&t.push({severity:"error",code:"invalid-text-font-family",message:`Text "${g.text||g.id}" font family must contain 1 to 120 normalized characters`,objectId:g.id});let E=g.background;(g.width!==void 0&&(!Number.isFinite(g.width)||g.width<40||g.width>1200)||g.align!==void 0&&!["left","center","right"].includes(g.align)||g.lineHeight!==void 0&&(!Number.isFinite(g.lineHeight)||g.lineHeight<.8||g.lineHeight>3)||g.letterSpacing!==void 0&&(!Number.isFinite(g.letterSpacing)||g.letterSpacing<-2||g.letterSpacing>20)||g.opacity!==void 0&&(!Number.isFinite(g.opacity)||g.opacity<.1||g.opacity>1)||E!==void 0&&(!/^#[0-9a-f]{6}$/i.test(E.color)||E.padding!==void 0&&(!Number.isFinite(E.padding)||E.padding<0||E.padding>40)||E.cornerRadius!==void 0&&(!Number.isFinite(E.cornerRadius)||E.cornerRadius<0||E.cornerRadius>40)||E.opacity!==void 0&&(!Number.isFinite(E.opacity)||E.opacity<.1||E.opacity>1)))&&t.push({severity:"error",code:"invalid-text-layout",message:`Text "${g.text||g.id}" has invalid width, spacing, opacity, alignment, or background layout`,objectId:g.id})}for(let g of a.filter(x=>x.type==="shape")){if(g.eventConfigurationIds!==void 0){let E=g.eventConfigurationIds;Array.isArray(E)&&E.length>0&&E.length<=20&&E.every(R=>typeof R=="string"&&R.normalize("NFKC").trim()===R&&R.length>=1&&R.length<=100)&&new Set(E).size===E.length||t.push({severity:"error",code:"invalid-shape-configurations",message:`Shape "${g.label||g.id}" must reference 1 to 20 unique event configuration ids`,objectId:g.id})}if(g.heightM!==void 0&&(!Number.isFinite(g.heightM)||g.heightM<.05||g.heightM>50)&&t.push({severity:"error",code:"invalid-shape-height",message:`Shape "${g.label||g.id}" height must be between 0.05 m and 50 m`,objectId:g.id}),g.stroke!==void 0&&(!g.stroke||typeof g.stroke.color!="string"||!/^#[0-9a-f]{6}$/i.test(g.stroke.color)||!Number.isFinite(g.stroke.width)||g.stroke.width<.5||g.stroke.width>40)&&t.push({severity:"error",code:"invalid-shape-stroke",message:`Shape "${g.label||g.id}" stroke must use a six-digit color and width from 0.5 to 40 chart units`,objectId:g.id}),(g.lineCap!==void 0||g.lineJoin!==void 0||g.startEnding!==void 0||g.endEnding!==void 0)&&!lt(g.kind)?t.push({severity:"error",code:"invalid-shape-line-style-applicability",message:`Shape "${g.label||g.id}" may use line caps, joins, and end decorations only when it is an open line or polyline`,objectId:g.id}):lt(g.kind)&&(g.lineCap!==void 0&&!yn.includes(g.lineCap)||g.lineJoin!==void 0&&!hn.includes(g.lineJoin)||g.startEnding!==void 0&&!ct.includes(g.startEnding)||g.endEnding!==void 0&&!ct.includes(g.endEnding))&&t.push({severity:"error",code:"invalid-shape-line-style",message:`Shape "${g.label||g.id}" has an unsupported line cap, join, or ending`,objectId:g.id}),g.kind==="polygon"){let E=mn(g.points??[]);E.ok||t.push({severity:"error",code:"invalid-shape-polygon",message:`Shape "${g.label||g.id}" has invalid polygon geometry: ${E.message}`,objectId:g.id})}let h=wn(g);if(h){for(let E of P)if(In(h,E.outline)){t.push({severity:"error",code:"reference-focal-overlaps-section",message:`Reference focal area "${g.label??g.id}" overlaps section "${E.label}"`,objectId:g.id});break}}}}w>Re&&t.push({severity:"error",code:"inventory-capacity-exceeded",message:`Chart has ${w} bookable units; the maximum is ${Re}`}),t.push(...y.slice(0,5)),y.length>5&&t.push({severity:"error",code:"duplicate-seat-label",message:`${y.length} seats share a label with another seat; the first 5 are listed above. Seat labels must be unique across the whole chart.`});for(let a of he(e)){let P=a.families[0]?.targets[0];n.push({severity:"warning",code:"category-inventory-family-conflict",message:at(a),categoryKey:a.categoryKey,...P?{objectId:P.id,floorId:P.floorId}:{},relatedObjectIds:a.objectIds,categoryInventoryFamilies:a.families})}e.focalPoint||n.push({severity:"warning",code:"missing-focal-point",message:"Chart has no focal point set"}),p===0&&n.push({severity:"warning",code:"no-bookables",message:"Chart has no rows, tables, booths, or GA areas"});for(let a of s)if(i.get(a)===!1){let P=e.categories.find(g=>g.key===a);n.push({severity:"warning",code:"unpriced-category",message:`Category "${P?.label??a}" is used but has no price`,categoryKey:a})}return[...t,...n]}var Ar=9,Nn="#f7f8fb",Rr="#f5f6f8",Fn="#8b93a7",Or="#0b1220",Tr="#0b1220",jr="#ffffff",_r=100;function j(e,t=2){let n=10**t;return Math.round(e*n)/n}function _(e){return{source:"quality",...e}}function Nr(e){return e.code==="missing-focal-point"||e.code==="missing-zone-focal-point"?"navigation":"structure"}function mt(e){return Ar*qt(e.theme?.seatScale)}function $n(e){let t=[];for(let n of e.objects)n.type==="row"?t.push(...$(n)):n.type==="table"&&t.push(...K(n));return t}function Fr(e){let t={rowSeats:0,tableSeats:0,booths:0,gaCapacity:0};for(let n of e)for(let o of n.objects)o.type==="row"?t.rowSeats+=$(o).length:o.type==="table"?t.tableSeats+=K(o).length:o.type==="booth"?t.booths+=1:o.type==="gaArea"&&(t.gaCapacity+=Math.max(0,Math.floor(o.capacity)));return{inventoryByKind:t,bookableUnits:t.rowSeats+t.tableSeats+t.booths+t.gaCapacity}}function N(e,t){e.filter(n=>n.code===t.code).length<_r&&e.push(t)}function $r(e,t,n){let o=mt(e),r=2*o,i=2.3*o,s=0,c=0,d=1/0;for(let l of t){let u=new Map(l.objects.filter(p=>p.type==="row").map(p=>[p.id,p])),f=p=>{let w=l.objects.find(k=>k.id===p);if(!w||w.type!=="row"&&w.type!=="table")return"another seating object";let M=w.type==="row"?$(w):K(w),v=M.length?{x:M.reduce((k,T)=>k+T.x,0)/M.length,y:M.reduce((k,T)=>k+T.y,0)/M.length}:w.type==="row"?w.origin:w.center,S=l.objects.find(k=>k.type==="section"&&G(v,k.outline,k.holes)),A=w.type==="row"?`Row \u201C${w.label}\u201D`:`Table \u201C${w.label}\u201D`;return S?.type==="section"?`${A} in \u201C${S.label}\u201D`:A},b=$n(l);s+=b.length;let m=i,y=new Map,I=new Map;for(let p of b){let w=Math.floor(p.x/m),M=Math.floor(p.y/m);for(let A=-1;A<=1;A++)for(let k=-1;k<=1;k++){let T=y.get(`${w+A}:${M+k}`)??[];for(let a of T){c++;let P=Math.hypot(p.x-a.x,p.y-a.y);if(d=Math.min(d,P),P>=i)continue;let x=(p.rowId<a.rowId?[p.rowId,a.rowId]:[a.rowId,p.rowId]).join("|"),h=I.get(x);(!h||P<h.distance)&&I.set(x,{a:p,b:a,distance:P})}}let v=`${w}:${M}`,S=y.get(v)??[];S.push(p),y.set(v,S)}for(let p of I.values()){let w=p.a.rowId===p.b.rowId,M=u.get(p.a.rowId),v=u.get(p.b.rowId),S=!w&&M?.segmentedRow?.repeatLabelOnComponents===!0&&v?.segmentedRow?.repeatLabelOnComponents===!0&&M.segmentedRow.groupId===v.segmentedRow.groupId,A=!!M?.referenceScan&&!!v?.referenceScan&&M.referenceScan.assetId===v.referenceScan.assetId&&M.referenceScan.sectionId===v.referenceScan.sectionId,k=p.distance<r?"error":"warning";if((S||A)&&k==="warning")continue;let T=k==="error"?"seat-overlap":"seat-cramped",a=f(p.a.rowId),P=f(p.b.rowId),g=j(k==="error"?r:i);N(n,_({severity:k,code:T,dimension:"geometry",title:w?`${a} has seats too close together`:`${a} and ${P} are too close together`,message:`The closest seats are ${j(p.distance)} chart units apart; at least ${g} are required.`,action:w?`Increase the seat spacing for ${a}, or use Review safe fixes.`:`Move ${a} or ${P} until they no longer overlap.`,objectId:p.a.rowId,relatedObjectIds:w?[p.a.rowId]:[p.a.rowId,p.b.rowId],floorId:l.id,measured:j(p.distance),minimum:j(k==="error"?r:i),autoFixable:w}))}}return{seats:s,checkedSeatPairs:c,minimumSeatDistance:Number.isFinite(d)?j(d):null}}function _e(e){let{width:t,height:n}=Mt(e);if(!e.rotation)return{x:e.position.x,y:e.position.y,width:t,height:n};let o=[{x:0,y:0},{x:t,y:0},{x:t,y:n},{x:0,y:n}].map(r=>{let i=Ct(r,e.rotation);return{x:e.position.x+i.x,y:e.position.y+i.y}});return Jt(o)}function Dn(e,t,n=0){return e.x<t.x+t.width+n&&e.x+e.width+n>t.x&&e.y<t.y+t.height+n&&e.y+e.height+n>t.y}function ft(e,t,n){let o=U(t.x,e.x,e.x+e.width),r=U(t.y,e.y,e.y+e.height);return(t.x-o)**2+(t.y-r)**2<n**2}function Dr(e,t,n){let o=mt(e),r=0;for(let i of t){let s=i.objects.filter(d=>d.type==="text"),c=$n(i);r+=s.length;for(let d=0;d<s.length;d++){let l=s[d],u=_e(l),f=c.find(b=>ft(u,b,o));f&&N(n,_({severity:"warning",code:"label-collision",dimension:"labels",message:`Text \u201C${l.text}\u201D overlaps seat ${f.label}`,objectId:l.id,relatedObjectIds:[l.id,f.rowId],floorId:i.id,autoFixable:!0}));for(let b=0;b<d;b++){let m=s[b];Dn(u,_e(m),2)&&N(n,_({severity:"warning",code:"label-collision",dimension:"labels",message:`Text \u201C${l.text}\u201D overlaps text \u201C${m.text}\u201D`,objectId:l.id,relatedObjectIds:[l.id,m.id],floorId:i.id,autoFixable:!0}))}}}return r}function dt(e){return e.normalize("NFKC").trim().toLowerCase().replace(/\s+/g," ")}function Br(e,t,n){let o=new Map;for(let c of t)for(let d of c.objects){let l=d.type,u=l==="row"||l==="table"||l==="booth"||l==="gaArea",f=u||l==="section";if(u&&!d.categoryKey.trim()){let b=l==="gaArea"?"GA area":l==="row"?"Row":l==="table"?"Table":"Booth";N(n,_({severity:"warning",code:"object-uncategorized",dimension:"structure",title:`${b} \u201C${d.label||d.id}\u201D has no category`,message:`${b} \u201C${d.label||d.id}\u201D is not assigned to any category, so buyers see no price or colour for it.`,action:"Assign a category to this object in the inspector, or create one in the Categories tab first.",objectId:d.id,floorId:c.id,autoFixable:!1}))}if(f){let b=(d.type==="section"?d.displayLabel??d.label:d.label)??"";if(b.trim()){if(l==="table"||l==="booth"||l==="gaArea"){let m=dt(b),y=o.get(m);y&&y.raw!==b?N(n,_({severity:"warning",code:"duplicate-object-label-normalized",dimension:"labels",title:`\u201C${b}\u201D and \u201C${y.raw}\u201D read as the same label`,message:`Labels \u201C${b}\u201D and \u201C${y.raw}\u201D differ only by case, spacing, or accents, so buyers cannot tell them apart.`,action:"Make the two labels visibly distinct.",objectId:d.id,relatedObjectIds:[d.id,y.id],floorId:c.id,autoFixable:!1})):y||o.set(m,{id:d.id,raw:b})}}else{let m=l==="gaArea"?"A GA area":l==="section"?"A section":l==="row"?"A row":l==="table"?"A table":"A booth";N(n,_({severity:"warning",code:"object-unlabeled",dimension:"labels",title:`${m} has no label`,message:`${m} has an empty label; buyers rely on labels to identify what they are booking.`,action:"Give this object a short, unique label in the inspector.",objectId:d.id,floorId:c.id,autoFixable:!1}))}}}let r=[];for(let c of t){let d=c.objects.filter(l=>l.type==="row"||l.type==="table"||l.type==="booth"||l.type==="gaArea");for(let l of c.objects)if(!(l.type!=="section"||l.referenceInventoryExclusion||d.some(f=>G(X(f),l.outline,l.holes)))){if(l.referenceSource){r.push({id:l.id,floorId:c.id});continue}N(n,_({severity:"warning",code:"empty-section",dimension:"structure",title:`Section \u201C${l.displayLabel??l.label}\u201D is empty`,message:`Section \u201C${l.displayLabel??l.label}\u201D contains no rows, tables, booths, or GA areas.`,action:"Add seating inside this section (Fill with rows), or remove the empty section.",objectId:l.id,floorId:c.id,autoFixable:!1}))}}r.length&&N(n,_({severity:"warning",code:"empty-section",dimension:"structure",title:r.length===1?"1 traced section has no seating yet":`${r.length} traced sections have no seating yet`,message:`${r.length} section${r.length===1?"":"s"} traced from the reference image contain${r.length===1?"s":""} no rows, tables, booths, or GA areas.`,action:"Fill them with rows, or remove the ones the venue does not sell.",objectId:r[0].id,relatedObjectIds:r.map(c=>c.id),floorId:r[0].floorId,autoFixable:!1}));let i=new Map,s=new Map;for(let c of t){let d=[];for(let l of c.objects)l.type!=="section"||l.outline.length<3||d.push({id:l.logicalSectionId??l.id,outline:l.outline,...l.holes?{holes:l.holes}:{},bounds:Vr(l.outline)});for(let l of c.objects){if(l.type!=="row")continue;let u=(l.segmentedRow?.displayLabel??l.displayLabel??l.label??"").trim(),f=(l.displayType??"").trim(),b=u&&f&&dt(f)!=="row"?`${f} ${u}`:u,m="";if(d.length){let w=X(l),M=d.find(v=>w.x>=v.bounds.minX&&w.x<=v.bounds.maxX&&w.y>=v.bounds.minY&&w.y<=v.bounds.maxY&&G(w,v.outline,v.holes));M&&(m=M.id)}let y=`${c.id}\0${m}\0${dt(b)}`,I=l.segmentedRow?.groupId??l.id;if(!b){let w=`${c.id}\0${m}`,M=s.get(w);M?(M.ids.push(l.id),M.logical.set(I,[...M.logical.get(I)??[],l])):s.set(w,{ids:[l.id],logical:new Map([[I,[l]]]),floorId:c.id});continue}let p=i.get(y);p?(p.ids.push(l.id),p.logical.set(I,[...p.logical.get(I)??[],l])):i.set(y,{ids:[l.id],logical:new Map([[I,[l]]]),floorId:c.id,raw:b})}}for(let{ids:c,logical:d,floorId:l,raw:u}of i.values()){let f=d.size;f<2||Tn([...d.values()])&&N(n,_({severity:"warning",code:"duplicate-row-label",dimension:"labels",title:`${f} rows share the name \u201C${u}\u201D`,message:`${f} rows share the label \u201C${u}\u201D, so buyers cannot tell which row a seat belongs to.`,action:"Rename them so each row reads differently \u2014 for example the section or box each belongs to.",objectId:c[0],relatedObjectIds:c,floorId:l,autoFixable:!1}))}for(let{ids:c,logical:d,floorId:l}of s.values()){let u=d.size;u<2||Tn([...d.values()])&&N(n,_({severity:"warning",code:"unnamed-row-collision",dimension:"labels",title:`${u} rows have no name`,message:`${u} rows in the same area have no name and repeat each other\u2019s seat numbers, so buyers cannot tell which row a seat belongs to.`,action:"Give each of these rows a name \u2014 for example the box each belongs to \u2014 so a ticket can say which row a seat is in.",objectId:c[0],relatedObjectIds:c,floorId:l,autoFixable:!1}))}if(e.floors&&e.floors.length>1)for(let c of e.floors)c.objects.length===0&&N(n,_({severity:"warning",code:"unused-floor",dimension:"structure",title:`Floor \u201C${c.name}\u201D is empty`,message:`Floor \u201C${c.name}\u201D has no objects on it.`,action:"Add seating to this floor, or delete it from the floor list below the canvas.",floorId:c.id,autoFixable:!1}))}var Kr=5,Gr=16;function Ur(e,t,n){for(let o of t){let r=o.focalPoint??e.focalPoint;if(r)for(let i of o.objects){if(i.type!=="section"||i.outline.length<3)continue;let{rake:s}=me(i);if(s<Kr)continue;let c=i.outline.map(b=>Math.hypot(b.x-r.x,b.y-r.y)),d=Math.max(...c);if(d<=0)continue;let l=(d-Math.min(...c))/d;if(s*l<=Gr)continue;let f=i.displayLabel??i.label;N(n,_({severity:"warning",code:"section-rake-inconsistent",dimension:"geometry",title:`Section \u201C${f}\u201D is too deep for a single rake`,message:`Section \u201C${f}\u201D spans ${Math.round(l*100)}% of its distance to the stage at a ${Math.round(s)}\xB0 rake, so one rake can't represent its sightlines faithfully \u2014 a real tier this deep changes slope at a cross-aisle.`,action:"Split this section at the cross-aisle into two sections, each with its own rake.",objectId:i.id,floorId:o.id,autoFixable:!1}))}}}function Hr(e,t,n){let o=e.theme?.background??Nn,r=Rr,i=new Map;for(let l of t)for(let u of l.objects){if(u.type!=="gaArea")continue;let f=i.get(u.categoryKey)??[];f.push({id:u.id,floorId:l.id}),i.set(u.categoryKey,f)}for(let l of e.categories){let u=D(l.color,o),f=D(l.color,r);if(u==null||f==null){N(n,_({severity:"error",code:"invalid-category-color",dimension:"contrast",message:`Category \u201C${l.label}\u201D does not use a supported hex color`,categoryKey:l.key}));continue}let b=Math.min(u,f);b<3&&N(n,_({severity:"warning",code:"category-contrast-low",dimension:"contrast",title:`Category \u201C${l.label}\u201D is hard to see`,message:`Category \u201C${l.label}\u201D reaches only ${j(b)}:1 across dark and light chart backgrounds; 3:1 is required`,action:`Choose a lighter or darker color for \u201C${l.label}\u201D until this warning clears.`,categoryKey:l.key,measured:j(b),minimum:3,autoFixable:!1}));let m=i.get(l.key)??[];if(m.length){let y=it(l.color,o,rt),I=it(l.color,r,rt),p=Math.min(D(y,o)??0,D(I,r)??0);p<3&&N(n,_({severity:"warning",code:"ga-contrast-low",dimension:"contrast",message:`GA category \u201C${l.label}\u201D reaches only ${j(p)}:1 after its rendered opacity is composited; 3:1 is required`,objectId:m[0].id,categoryKey:l.key,floorId:m[0].floorId,relatedObjectIds:m.map(w=>w.id),measured:j(p),minimum:3,autoFixable:!1}))}}for(let l=0;l<e.categories.length;l++)for(let u=0;u<l;u++){let f=e.categories[l],b=e.categories[u],m=Qt(f.color,b.color);m!=null&&m<25&&N(n,_({severity:"warning",code:"category-colors-too-similar",dimension:"contrast",title:`\u201C${f.label}\u201D and \u201C${b.label}\u201D look too similar`,message:`Categories \u201C${f.label}\u201D and \u201C${b.label}\u201D are only \u0394E ${j(m)} apart; 25 is required`,action:"Pick a visibly different color for either category so buyers can tell them apart.",categoryKey:f.key,measured:j(m),minimum:25,autoFixable:!1}))}for(let l of t){let u=l.objects.filter(f=>f.type==="text");for(let f of u){let b=f.color??e.theme?.textColor??Fn,m=D(b,o),y=f.fontSize>=18?3:4.5;(m==null||m<y)&&N(n,_({severity:"warning",code:"text-contrast-low",dimension:"contrast",message:`Text \u201C${f.text}\u201D has ${j(m??0)}:1 contrast against the chart background; ${y}:1 is required`,objectId:f.id,floorId:l.id,measured:j(m??0),minimum:y,autoFixable:!0}))}}if(e.theme?.selectionColor){let l=D(e.theme.selectionColor,o);(l==null||l<3)&&N(n,_({severity:"warning",code:"selection-contrast-low",dimension:"contrast",title:"The selection color is hard to see",message:`Selection rings have ${j(l??0)}:1 contrast against the chart background; 3:1 is required.`,action:"In Theme, choose a Selection color that stands out clearly from the Background color.",measured:j(l??0),minimum:3,autoFixable:!1}))}if(e.theme?.textColor){let l=D(e.theme.textColor,o);(l==null||l<3)&&N(n,_({severity:"warning",code:"theme-text-contrast-low",dimension:"contrast",title:"The theme text color is hard to read",message:`Theme text has ${j(l??0)}:1 contrast against the chart background; 3:1 is required.`,action:"In Theme, choose a Text color with stronger contrast against the Background color.",measured:j(l??0),minimum:3,autoFixable:!1}))}let s=e.theme?.seatLabelColor??Or,c=new Map,d=(l,u,f)=>{let b=c.get(l)??new Map,m=b.get(u)??[];m.push(f),b.set(u,m),c.set(l,b)};for(let l of t)for(let u of l.objects)if(u.type==="row")for(let f of xe(u).keys())d(f,"seat",u.id);else if(u.type==="table")for(let f of xe(u).keys())d(f,"table seat",u.id);else u.type==="booth"&&d(u.categoryKey,"booth",u.id);for(let l of e.categories){let u=c.get(l.key);if(u)for(let[f,b]of u){let m=f==="booth"?on:nn,y=sn(rn,600),I=cn(l.color,s),p=D(I,l.color);(p==null||p<y)&&N(n,_({severity:"warning",code:"bookable-label-contrast-low",dimension:"contrast",message:`${f==="booth"?"Booth":f==="seat"?"Seat":"Table-seat"} labels use ${m}u type and have ${j(p??0)}:1 contrast on category \u201C${l.label}\u201D; ${y}:1 is required for small text`,objectId:b[0],relatedObjectIds:b,measured:j(p??0),minimum:y,autoFixable:!0}))}}}function Tn(e){if(e.length>24)return!0;let t=new Set;for(let n of e){let o=new Set;for(let r of n)for(let i of $(r)){let s=i.label,c=s.lastIndexOf("-");o.add(c>=0?s.slice(c+1):s)}if(!o.size)return!0;for(let r of o)if(t.has(r))return!0;for(let r of o)t.add(r)}return!1}function Vr(e){let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e)i.x<t&&(t=i.x),i.y<n&&(n=i.y),i.x>o&&(o=i.x),i.y>r&&(r=i.y);return{minX:t,minY:n,maxX:o,maxY:r}}function zr(e,t){for(let n of e){let o=n.objects.filter(r=>r.type==="section");if(!(o.length<2))for(let r of n.objects){if(!(r.type==="row"||r.type==="table"||r.type==="booth"||r.type==="gaArea"))continue;let s=X(r),c=o.filter(m=>G(s,m.outline,m.holes)),d=new Map;for(let m of c){let y=m.logicalSectionId??m.id,I=d.get(y)??[];I.push(m),d.set(y,I)}if(d.size<2)continue;let l=[...d.values()],u=l.map(m=>`Section \u201C${m[0].displayLabel??m[0].label}\u201D`),f=u.length===2?u.join(" and "):`${u.slice(0,-1).join(", ")}, and ${u[u.length-1]}`,b=r.type==="gaArea"?"GA area":r.type==="row"?"Row":r.type==="table"?"Table":"Booth";N(t,_({severity:"warning",code:"ambiguous-section-ownership",dimension:"structure",title:`${b} \u201C${r.label}\u201D belongs to more than one section`,message:`${b} \u201C${r.label}\u201D has its center inside ${f}, so its buyer section is unclear.`,action:"Adjust the boundaries until this object sits in one Section. If the overlapping shapes are meant to form one Section, combine them first.",objectId:r.id,relatedObjectIds:[r.id,...l.flatMap(m=>m.map(y=>y.id))],floorId:n.id,autoFixable:!1}))}}}var Xr={structure:20,geometry:30,contrast:25,labels:15,navigation:10},Yr={"seat-overlap":15,"seat-cramped":4,"label-collision":4,"category-contrast-low":3,"ga-contrast-low":3,"category-colors-too-similar":3,"invalid-category-color":10,"text-contrast-low":4,"bookable-label-contrast-low":3,"selection-contrast-low":3,"theme-text-contrast-low":3,"missing-focal-point":10,"object-uncategorized":3,"object-unlabeled":3,"duplicate-object-label-normalized":2,"empty-section":2,"unused-floor":2,"ambiguous-section-ownership":4,"category-inventory-family-conflict":10};function Zr(e){let t={...Xr};for(let r of e){let i=r.severity==="error"?10:2;t[r.dimension]=Math.max(0,t[r.dimension]-(Yr[r.code]??i))}let n=Object.values(t).reduce((r,i)=>r+i,0),o=n>=95?"A":n>=85?"B":n>=70?"C":n>=55?"D":"F";return{overall:n,dimensions:t,errorFree:e.every(r=>r.severity!=="error"),grade:o}}var Wr=new Set(["unpriced-category","object-uncategorized"]);function jn(e,t={}){let n=pe(e),o=On(e).filter(u=>u.code!=="missing-zone-focal-point"||t.requireExplicitZoneFocals).map(u=>{let f=u.objectId?n.find(y=>y.objects.some(I=>I.id===u.objectId))?.id:void 0,b=u.code==="category-inventory-family-conflict",m=b?e.categories.find(y=>y.key===u.categoryKey):void 0;return _({...u,...b?{severity:"error",title:`Category \u201C${m?.label??u.categoryKey??"Unknown"}\u201D spans incompatible inventory types`,action:"Show the affected objects, then review the safe category split. The repair preserves price, ticket tiers, accessibility assignments, and source provenance."}:{},...t.requireExplicitZoneFocals&&u.code==="missing-zone-focal-point"?{severity:"error"}:{},...f?{floorId:f}:{},source:"structural",dimension:Nr(u),autoFixable:b})}),r=$r(e,n,o),i=Fr(n),s=Dr(e,n,o);if(Br(e,n,o),zr(n,o),Ur(e,n,o),Hr(e,n,o),n.reduce((u,f)=>u+f.objects.filter(b=>b.type==="row"||b.type==="table"||b.type==="booth"||b.type==="gaArea").length,0)===0){let u=new Set(["missing-focal-point","no-bookables"]);for(let f=o.length-1;f>=0;f--)u.has(o[f].code)&&o.splice(f,1)}if(t.requirePricedInventory)for(let u=0;u<o.length;u++)Wr.has(o[u].code)&&(o[u]={...o[u],severity:"error"});let d=o.filter(u=>u.severity==="error"),l=o.filter(u=>u.severity==="warning");return{issues:o,errors:d,warnings:l,metrics:{floors:n.length,objects:n.reduce((u,f)=>u+f.objects.length,0),seats:r.seats,bookableUnits:i.bookableUnits,inventoryByKind:i.inventoryByKind,categories:e.categories.length,freeTextLabels:s,checkedSeatPairs:r.checkedSeatPairs,minimumSeatDistance:r.minimumSeatDistance},score:Zr(o),deferredRules:["rendered-row-label-decollision","rendered-bookable-state-contrast","section-focus-opacity-and-backdrop","24px-pointer-hit-target","reference-image-diff","sightline-blocked","ga-density-high"]}}function qr(e,t){if(e.seatCount<2||e.seatSpacing>=t)return!1;let n=de($(e));e.seatSpacing=j(t,3);let o=de($(e));return e.origin.x=j(e.origin.x+n.x-o.x,3),e.origin.y=j(e.origin.y+n.y-o.y,3),!0}function Qr(e,t){if(e.seatCount<2)return!1;let n=!1;if(e.shape==="round"){let o=U(e.seatArc??360,0,360),r=(o>=360?360/e.seatCount:o/(e.seatCount-1))*Math.PI/180;if(r>0){let i=t/(2*Math.sin(r/2)),s=Math.max(1,i-16);(e.radius??40)<s&&(e.radius=j(s,3),n=!0)}}else{let o=be(e),r=Math.max(o.top,o.bottom),i=Math.max(o.left,o.right);r>1&&(e.width??80)/r<t&&(e.width=j(r*t,3),n=!0),i>1&&(e.height??50)/i<t&&(e.height=j(i*t,3),n=!0)}return n}function Jr(e){return[Tr,jr].map(n=>({color:n,minimum:Math.min(...e.map(o=>D(n,o)??0))})).sort((n,o)=>o.minimum-n.minimum)[0].color}function _n(e,t,n){let o=_e(e),r=0;for(let i of t)i.type==="row"?r+=$(i).filter(s=>ft(o,s,n)).length:i.type==="table"?r+=K(i).filter(s=>ft(o,s,n)).length:i.type==="text"&&i.id!==e.id&&Dn(o,_e(i),2)&&r++;return r}function ei(e,t,n){if(_n(e,t,n)===0)return!1;let r={...e.position},i=Math.max(12,e.fontSize*1.25),s=[[0,-1],[1,0],[0,1],[-1,0],[1,-1],[1,1],[-1,1],[-1,-1]];for(let c=1;c<=12;c++)for(let[d,l]of s)if(e.position={x:j(r.x+d*i*c,3),y:j(r.y+l*i*c,3)},_n(e,t,n)===0)return!0;return e.position=r,!1}function Bn(e){let t=JSON.parse(JSON.stringify(e)),n=jn(t),o=[],r=st(t);if(r.changed){t=r.doc;for(let u of r.changes){let f=r.before.find(m=>m.categoryKey===u.categoryKey),b=f?.families.map(m=>m.label).join(", ")??"inventory families";o.push({code:"category-inventory-family-conflict",objectId:f?.objectIds[0],message:`Split category \u201C${u.categoryLabel}\u201D across ${b}; preserved its commercial metadata and reassigned ${u.reassignments.length} affected object${u.reassignments.length===1?"":"s"}`})}}let i=mt(t),s=2.5*i,c=pe(t);for(let u of c)for(let f of u.objects)if(f.type==="row"){let b=f.seatSpacing;qr(f,s)&&o.push({code:b<2*i?"seat-overlap":"seat-cramped",objectId:f.id,message:`Expanded ${f.id} to the ${j(s)}u target pitch while preserving its centre`})}else f.type==="table"&&Qr(f,s)&&o.push({code:"seat-cramped",objectId:f.id,message:`Expanded ${f.id} so its perimeter seats meet the ${j(s)}u target pitch`});let d=t.theme?.background??Nn;for(let u of c)for(let f of u.objects){if(f.type!=="text")continue;let b=f.color??t.theme?.textColor??Fn,m=f.fontSize>=18?3:4.5;(D(b,d)??0)<m&&(f.color=Jr([d]),o.push({code:"text-contrast-low",objectId:f.id,message:`Changed ${f.id} to the highest-contrast black/white ink`}))}for(let u of c){let f=u.objects.filter(b=>b.type==="text");for(let b of f)ei(b,u.objects,i)&&o.push({code:"label-collision",objectId:b.id,message:`Moved ${b.id} to the nearest collision-free deterministic label position`})}t.floors?.length&&(t.objects=t.floors[0].objects);let l=jn(t);return{doc:t,changed:o.length>0,fixes:o,before:n,after:l}}function Ne(e){return e.floors?.length?e.floors.flatMap(t=>t.objects):e.objects}function pt(e){return Ne(e).reduce((t,n)=>n.type==="row"?t+Le(n):n.type==="table"?t+Yt(n):n.type==="gaArea"?t+Math.max(0,Math.floor(n.capacity)):n.type==="booth"?t+1:t,0)}function ti(e){let t={};for(let o of e.categories??[])t[o.key]=0;let n=(o,r)=>{r>0&&(t[o]=(t[o]??0)+r)};for(let o of Ne(e))if(o.type==="row")for(let r of $(o))n(r.categoryKey,1);else if(o.type==="table")if(o.bookAsWhole||o.variableOccupancy)n(o.categoryKey,Math.max(0,Math.round(o.seatCount)));else for(let r of K(o))n(r.categoryKey,1);else o.type==="gaArea"?n(o.categoryKey,Math.max(0,Math.floor(o.capacity))):o.type==="booth"&&n(o.categoryKey,1);return t}function Gn(e){if(!e.template)return null;let t=Ne(e),n=t.filter(d=>d.type==="row"||d.type==="table"||d.type==="gaArea");if(!n.length)return null;let r=t.filter(d=>d.type==="booth").length+n.reduce((d,l)=>d+(l.type==="table"?2:1),0),i=pt(e),s=Math.max(r+1,Math.min(5e4,i*4)),c=[.5,1,1.5,2].map(d=>U(Math.round(i*d),r,s));return{family:e.template.family,display:e.template.family.replace(/-/g," ").replace(/\b\w/g,d=>d.toUpperCase()),min:r,max:s,presets:["S","M","L","XL"].map((d,l)=>({size:d,seats:c[l]}))}}function Kn(e){let t=$(e);return t.length?de(t):{...e.origin}}function ni(e,t){let n=Gn(e);if(!n)return structuredClone(e);let o=structuredClone(e),r=Ne(o),i=r.filter(m=>m.type==="row"||m.type==="table"||m.type==="gaArea"),s=r.filter(m=>m.type==="booth").length,c=Math.max(n.min,Math.min(n.max,Math.round(t))),d=c-s,l=i.map((m,y)=>{let I=m.type==="gaArea"?Math.max(0,Math.floor(m.capacity)):m.seatCount,p=m.type==="table"?2:1;return{object:m,index:y,current:I,minimum:p,value:p,fraction:0}}),u=l.reduce((m,y)=>m+y.minimum,0),f=Math.max(0,d-u),b=l.reduce((m,y)=>m+Math.max(1,y.current-y.minimum),0);for(let m of l){let y=f*Math.max(1,m.current-m.minimum)/b,I=Math.floor(y);m.value+=I,m.fraction=y-I}f=d-l.reduce((m,y)=>m+y.value,0),l.sort((m,y)=>y.fraction-m.fraction||m.index-y.index);for(let m=0;m<f;m++)l[m%l.length].value++;l.sort((m,y)=>m.index-y.index);for(let m of l)if(m.object.type==="row"){let y=Kn(m.object);m.object.seatCount=m.value;let I=Kn(m.object);m.object.origin.x+=y.x-I.x,m.object.origin.y+=y.y-I.y}else if(m.object.type==="table"){let y=m.object;if(y.seatCountsBySide){let I=["top","bottom","left","right"],p=be(y),w=I.reduce((S,A)=>S+p[A],0)||1,M=I.map((S,A)=>{let k=m.value*p[S]/w;return{side:S,index:A,value:Math.floor(k),fraction:k-Math.floor(k)}}),v=m.value-M.reduce((S,A)=>S+A.value,0);M.sort((S,A)=>A.fraction-S.fraction||S.index-A.index);for(let S=0;S<v;S++)M[S%M.length].value+=1;M.sort((S,A)=>S.index-A.index),y.seatCountsBySide={top:M[0].value,bottom:M[1].value,left:M[2].value,right:M[3].value},y.sides=I.filter(S=>y.seatCountsBySide[S]>0)}y.seatCount=m.value,y.overrides&&(y.overrides=y.overrides.filter(I=>I.index<m.value),y.overrides.length||delete y.overrides)}else m.object.capacity=m.value;return o.floors?.length&&(o.objects=o.floors[0].objects),o.template={family:o.template.family,targetSeats:c},o=Bn(o).doc,o.template={family:e.template.family,targetSeats:pt(o)},o}function ce(e){let t=Number(e.slice(e.lastIndexOf(":")+1));return Number.isFinite(t)?t:-1}function oi(e,t,n){let o=new Map;for(let s of e){if(s.kind==="booth")continue;let c=o.get(s.rowId);c?c.push(s):o.set(s.rowId,[s])}let r=s=>n.has(s.id)||t(s.id)!=="free",i=[];for(let s of o.values())if(!(s.length<3)){s.sort((c,d)=>ce(c.id)-ce(d.id));for(let c=1;c<s.length-1;c++){let d=s[c];if(r(d))continue;let l=s[c-1],u=s[c+1];ce(d.id)-ce(l.id)!==1||ce(u.id)-ce(d.id)!==1||!r(l)||!r(u)||!n.has(l.id)&&!n.has(u.id)||i.push(d)}}return i}var bt=1,yt=100;function Un(e,t){if(!Number.isInteger(t)||t<bt||t>yt)return null;let n=e.rotation*Math.PI/180,o={x:Math.cos(n),y:Math.sin(n)},r={x:-o.y,y:o.x};return Array.from({length:t},(i,s)=>{let c=e.style==="intertwined"&&s%2===1?e.seatSpacing/2:0;return{type:"row",id:`__block_preview_${s}`,label:"",origin:{x:e.origin.x+r.x*s*e.rowGap+o.x*c,y:e.origin.y+r.y*s*e.rowGap+o.y*c},rotation:e.rotation,curve:e.curve,seatCount:e.seatsPerRow,seatSpacing:e.seatSpacing,categoryKey:"__preview__"}})}function gt(e,t=e.rowCount){let n=Un(e,t);return n?.length?X(n[n.length-1]):null}function ri(e,t){if(!Number.isFinite(t.x)||!Number.isFinite(t.y)||e.rowGap<=0)return null;let n=gt(e,1);if(!n)return null;let o=e.rotation*Math.PI/180,r={x:-Math.sin(o),y:Math.cos(o)},i=(t.x-n.x)*r.x+(t.y-n.y)*r.y,s=Math.max(bt,Math.min(yt,Math.round(i/e.rowGap)+1)),c=gt(e,s);return c?{rowCount:s,edgePoint:c}:null}function ii(e,t){return e.length!==t.rowCount?!1:[...e].sort((o,r)=>(o.rowBlockGeneration?.rowIndex??1/0)-(r.rowBlockGeneration?.rowIndex??1/0)).every((o,r)=>{let i=o.rowBlockGeneration;return i?.kind==="row-block-v1"&&i.groupId===t.groupId&&i.rowIndex===r&&i.signature===t.signature&&JSON.stringify(i)===JSON.stringify({...t,rowIndex:r})})}function Hn(e){let t=(e%360+360)%360,n=t>=180?t-360:t;return Object.is(n,-0)||Math.abs(n)<1e-9?0:n}var W=1,q=300,ht=330;function we(e){return e.seatCount>1?e.curve/(e.seatCount-1):0}function Vn(e,t){let n=e.rotation*Math.PI/180,o=we(e)*Math.PI/180,r,i;if(Math.abs(o)<1e-9)r=t*e.seatSpacing,i=0;else{let s=e.seatSpacing/(2*Math.sin(Math.abs(o)/2)),c=o*t;r=s*Math.sin(c),i=-s+s*Math.cos(c)}return{x:e.origin.x+r*Math.cos(n)-i*Math.sin(n),y:e.origin.y+r*Math.sin(n)+i*Math.cos(n)}}function ai(e,t,n){let o=(e??[]).map(r=>({...r,index:r.index+t})).filter(r=>r.index>=0&&r.index<n);return o.length?o:void 0}function zn(e,t){if(e.path||!Number.isInteger(t)||t<W||t>q)return null;let n=we(e);return{...e,seatCount:t,curve:n*(t-1)}}function Xn(e,t){if(e.path||!Number.isInteger(t)||t<W||t>q)return null;let n=we(e),o=e.seatCount-t,r=-o;return{...e,origin:Vn(e,o),rotation:Hn(e.rotation-n*o),seatCount:t,curve:n*(t-1),overrides:ai(e.overrides,r,t)}}function Yn(e,t=e.seatCount){let n=zn(e,t);return n?Vn(n,t-1):null}function Zn(e,t=e.seatCount){return Xn(e,t)?.origin??null}function si(e,t){if(e.path||!Number.isFinite(t.x)||!Number.isFinite(t.y))return null;let n=we(e),o=Math.abs(n)<1e-9?q:Math.min(q,Math.floor(ht/Math.abs(n))+1),r=null;for(let i=W;i<=Math.max(W,o);i+=1){let s=Yn(e,i);if(!s)continue;let c=Math.hypot(s.x-t.x,s.y-t.y),d=n*(i-1);(!r||c<r.distance||c===r.distance&&i<r.seatCount)&&(r={seatCount:i,curve:d,endpoint:s,distance:c})}return r}function ci(e,t){if(e.path||!Number.isFinite(t.x)||!Number.isFinite(t.y))return null;let n=we(e),o=Math.abs(n)<1e-9?q:Math.min(q,Math.floor(ht/Math.abs(n))+1),r=null;for(let i=W;i<=Math.max(W,o);i+=1){let s=Zn(e,i);if(!s)continue;let c=Math.hypot(s.x-t.x,s.y-t.y),d=n*(i-1);(!r||c<r.distance||c===r.distance&&i<r.seatCount)&&(r={seatCount:i,curve:d,endpoint:s,distance:c})}return r}var le=class extends Error{constructor(n,o){super(o);this.objectId=n;this.name="GroupedTableProjectionError"}};function li(e){let t=e.minOccupancy,n=e.maxOccupancy;if(!Number.isInteger(t)||!Number.isInteger(n)||t<1||n<t||n>e.seatCount)throw new le(e.id,`Table "${e.label}" has invalid variable-occupancy bounds`);return{min:t,max:n}}function ui(e,t){if(t!==2)return[];let n=[];for(let o of Ae(e)){if(o.type!=="table"||!o.bookAsWhole&&!o.variableOccupancy)continue;if(o.bookAsWhole&&o.variableOccupancy)throw new le(o.id,`Table "${o.label}" cannot be whole-table and variable-occupancy inventory`);if(!Number.isInteger(o.seatCount)||o.seatCount<1||!o.label.trim())throw new le(o.id,"Grouped tables require a label and at least one chair");let r=o.variableOccupancy?"variable":"whole",i=r==="variable"?li(o):{min:o.seatCount,max:o.seatCount};n.push({objectId:o.id,label:o.label,...o.displayLabel?{displayLabel:o.displayLabel}:{},...o.displayType?{displayType:o.displayType}:{},categoryKey:o.categoryKey,mode:r,capacity:o.seatCount,minOccupancy:i.min,maxOccupancy:i.max,chairs:K(o)})}return n}function qn(e){return{code:"ticket_option_not_applicable",labels:e,message:"That ticket choice is not available for the selected seat."}}function Fe(e,t){let n=e.applicability;return n?!(n.seatLabels?.length&&!n.seatLabels.includes(t.label)||n.accessibility?.length&&!n.accessibility.some(o=>t.accessibility?.includes(o))):!0}function di(e,t){return(e.categories.find(n=>n.key===t.categoryKey)?.tiers??[]).filter(n=>Fe(n,t))}function xt(e,t,n){let o=e.categories.find(i=>i.key===t.categoryKey)?.tiers;if(!o?.length)return{kind:"none"};let r=n==null?o.find(i=>Fe(i,t)):o.find(i=>i.id===n&&Fe(i,t));return r?{kind:"resolved",tier:r}:{kind:"invalid"}}function fi(e,t){return(e.logicalRowId??e.rowId)===(t.logicalRowId??t.rowId)}function Wn(e){if(Number.isInteger(e.logicalSeatIndex))return e.logicalSeatIndex;let t=e.id.slice(e.id.lastIndexOf(":")+1),n=Number(t);return Number.isInteger(n)?n:void 0}function mi(e,t){if(!fi(e,t))return!1;let n=Wn(e),o=Wn(t);return n!=null&&o!=null&&Math.abs(n-o)===1}function Qn(e,t){if(!t.length)return null;let n=new Map(Qe(e,{resolveEyeHeights:!1}).map(s=>[s.label,s])),o=t.flatMap(s=>{let c=n.get(s.label);return c?[{selection:s,seat:c}]:[]}),r=o.map(({seat:s})=>s).filter(s=>s.accessibility?.includes("wheelchair")),i=[];for(let{selection:s,seat:c}of o){let d=xt(e,c,s.tierId),l=d.kind==="resolved"?d.tier:void 0;(c.accessibility?.includes("companion")||l?.restriction==="companion")&&!r.some(f=>f.id!==c.id&&mi(c,f))&&i.push(c.label)}return i.length?{code:"companion_pair_required",labels:i,message:"Select the adjacent wheelchair place with each companion ticket."}:null}function pi(e,t){if(!t.length)return null;let n=new Map(Qe(e,{resolveEyeHeights:!1}).map(s=>[s.label,s])),o=new Set(e.categories.filter(s=>s.notForSale).map(s=>s.key)),r=[],i=[];for(let s of t){let c=n.get(s.label);if(!c)continue;if(o.has(c.categoryKey)){r.push(c.label);continue}xt(e,c,s.tierId).kind==="invalid"&&i.push(c.label)}return r.length?{code:"not_for_sale",labels:r,message:"These seats are not for sale."}:i.length?qn(i):Qn(e,t)}0&&(module.exports={CATEGORY_INVENTORY_FAMILIES,GroupedTableProjectionError,MAX_DIRECT_ROW_SWEEP,MAX_EVENT_INVENTORY,MAX_GA_CAPACITY,MAX_ROW_BLOCK_ROWS,MAX_ROW_SEATS,MIN_ROW_BLOCK_ROWS,MIN_ROW_SEATS,applicableTicketTiers,capacityControl,categoryCapacity,chartCapacity,companionSelectionIssue,describeCategoryInventoryConflict,effectiveSeatOwnerCategoryCounts,gaAreasOf,gaInventorySegments,gaUnitLabel,gaUnitLabels,groupedTableInventory,growJoinedGAInventory,inspectCategoryInventoryConflicts,intactRowBlockMembers,isGaUnitLabel,pickBestAvailable,pickBestAvailableInventory,remediateCategoryInventoryConflicts,resizeChartCapacity,resolveRowBlockCount,resolveRowStartCapacity,resolveRowTerminalCapacity,resolveTicketTierForSeat,rowBlockEdgePoint,rowBlockPreviewRows,rowStartEndpoint,rowTerminalEndpoint,rowWithStartCapacity,rowWithTerminalCapacity,strandedSingles,ticketOptionNotApplicableIssue,ticketSelectionIssue,ticketTierAppliesToSeat,validGAInventorySegments});
|