@seatlayer/core 0.46.0 → 0.47.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.
Files changed (40) hide show
  1. package/dist/chunk-AZODENEL.js +97 -0
  2. package/dist/chunk-AZODENEL.js.map +1 -0
  3. package/dist/chunk-FVCOOLJO.js +335 -0
  4. package/dist/chunk-FVCOOLJO.js.map +1 -0
  5. package/dist/{chunk-5MRJCIZP.js → chunk-TCTAS4Z2.js} +88 -14
  6. package/dist/chunk-TCTAS4Z2.js.map +1 -0
  7. package/dist/{de-UHAOVDS3.js → de-ST4H423D.js} +6 -3
  8. package/dist/{de-UHAOVDS3.js.map → de-ST4H423D.js.map} +1 -1
  9. package/dist/{es-6TJS2L7S.js → es-WEC5NHRT.js} +6 -3
  10. package/dist/{es-6TJS2L7S.js.map → es-WEC5NHRT.js.map} +1 -1
  11. package/dist/{fr-MMSY7FPE.js → fr-SGBFNAQV.js} +6 -3
  12. package/dist/{fr-MMSY7FPE.js.map → fr-SGBFNAQV.js.map} +1 -1
  13. package/dist/index.cjs +251 -39
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +119 -4
  16. package/dist/index.d.ts +119 -4
  17. package/dist/index.js +152 -24
  18. package/dist/index.js.map +1 -1
  19. package/dist/{types-DBnRO2hX.d.cts → types-CE63BK0j.d.cts} +88 -10
  20. package/dist/{types-DBnRO2hX.d.ts → types-CE63BK0j.d.ts} +88 -10
  21. package/dist/view/panoramaDelivery.cjs +126 -0
  22. package/dist/view/panoramaDelivery.cjs.map +1 -0
  23. package/dist/view/panoramaDelivery.d.cts +34 -0
  24. package/dist/view/panoramaDelivery.d.ts +34 -0
  25. package/dist/view/panoramaDelivery.js +17 -0
  26. package/dist/view/panoramaDelivery.js.map +1 -0
  27. package/dist/view3d/crossfade/panorama.cjs +453 -0
  28. package/dist/view3d/crossfade/panorama.cjs.map +1 -0
  29. package/dist/view3d/crossfade/panorama.d.cts +110 -0
  30. package/dist/view3d/crossfade/panorama.d.ts +110 -0
  31. package/dist/view3d/crossfade/panorama.js +30 -0
  32. package/dist/view3d/crossfade/panorama.js.map +1 -0
  33. package/dist/view3d/index.cjs +1176 -128
  34. package/dist/view3d/index.cjs.map +1 -1
  35. package/dist/view3d/index.d.cts +73 -35
  36. package/dist/view3d/index.d.ts +73 -35
  37. package/dist/view3d/index.js +960 -300
  38. package/dist/view3d/index.js.map +1 -1
  39. package/package.json +28 -1
  40. package/dist/chunk-5MRJCIZP.js.map +0 -1
@@ -117,6 +117,28 @@ declare function accessibilityMeta(key: AccessibilityType): AccessibilityMeta |
117
117
  declare const ACCESSIBILITY_RING_COLOR: Record<AccessibilityType, string>;
118
118
  /** Ring colour for a seat's accessibility set (first-listed type wins). */
119
119
  declare function accessibilityRingColor(types: AccessibilityType[] | undefined): string;
120
+ type SeatViewCoverage = 'exact-seat' | 'row-representative' | 'section-representative' | 'venue-representative';
121
+ /** Calibration and truth metadata that travels with an organizer panorama.
122
+ * The URL remains separate for backward compatibility with existing charts. */
123
+ interface SeatViewMetadata {
124
+ projection?: 'equirectangular';
125
+ coverage?: SeatViewCoverage;
126
+ /** Optional lightweight first paint. `viewFromSeatUrl` remains the sharp source. */
127
+ previewUrl?: string;
128
+ previewWidth?: number;
129
+ previewHeight?: number;
130
+ /** Degrees relative to the authored focal/stage direction. */
131
+ initialBearingDeg?: number;
132
+ /** Positive looks up. The viewer clamps to its safe pitch range. */
133
+ initialPitchDeg?: number;
134
+ capturedAt?: string;
135
+ /** Buyer-safe provenance, e.g. "Provided by the venue". */
136
+ sourceLabel?: string;
137
+ sourceWidth?: number;
138
+ sourceHeight?: number;
139
+ captureEyeHeightM?: number;
140
+ eventConfigurationId?: string;
141
+ }
120
142
  interface SeatOverride {
121
143
  /** 0-based seat index within the row. */
122
144
  index: number;
@@ -146,6 +168,8 @@ interface SeatOverride {
146
168
  commercial?: SeatCommercialAttributes;
147
169
  /** Seat-specific view photo; falls back to the row photo. */
148
170
  viewFromSeatUrl?: string;
171
+ /** Calibration/truth for `viewFromSeatUrl`; ignored when the URL is absent. */
172
+ viewFromSeatMeta?: SeatViewMetadata;
149
173
  /** Per-seat label size/color override; falls back to the row/theme default.
150
174
  * Size is clamped to LABEL_STYLE_MIN_SIZE..MAX_SIZE; color is passed through
151
175
  * the shared auto-contrast rule at paint time (see {@link LabelStyle}). */
@@ -219,6 +243,19 @@ interface LabelPresentation {
219
243
  */
220
244
  positionPreset?: 'start' | 'end' | 'both' | 'none';
221
245
  }
246
+ /** Persisted authoring ergonomics that must not change buyer inventory or
247
+ * rendering. Buyer projections strip this object before a chart is served. */
248
+ interface ObjectEditorState {
249
+ /** Objects sharing this id select and transform as one authoring unit. */
250
+ groupId?: string;
251
+ /** Protect canvas geometry while keeping ordinary Inspector properties editable. */
252
+ locked?: boolean;
253
+ /** Remove the object from the authoring scene until Reveal hidden is used. */
254
+ hidden?: boolean;
255
+ }
256
+ interface AuthoringObjectState {
257
+ editor?: ObjectEditorState;
258
+ }
222
259
  /** Brand/venue theming — applied by the renderer in both designer and picker. */
223
260
  interface ChartTheme {
224
261
  /** Canvas background color (default dark: #0e1117-ish radial). */
@@ -248,7 +285,7 @@ interface ChartTheme {
248
285
  /** Paid-tier flag: hide the "Powered by SeatMap" badge. */
249
286
  hideBadge?: boolean;
250
287
  }
251
- interface RowObject {
288
+ interface RowObject extends AuthoringObjectState {
252
289
  type: 'row';
253
290
  id: string;
254
291
  /** Present when this row was materialized by the in-canvas reference scan.
@@ -338,6 +375,7 @@ interface RowObject {
338
375
  displayType?: string;
339
376
  labelPresentation?: LabelPresentation;
340
377
  viewFromSeatUrl?: string;
378
+ viewFromSeatMeta?: SeatViewMetadata;
341
379
  /** Presentation intent for a continuous node-defined centreline. */
342
380
  smoothing?: boolean;
343
381
  };
@@ -413,10 +451,11 @@ interface RowObject {
413
451
  * generates a synthetic panorama from chart geometry.
414
452
  */
415
453
  viewFromSeatUrl?: string;
454
+ viewFromSeatMeta?: SeatViewMetadata;
416
455
  /** Default commercial attributes inherited by seats without an override. */
417
456
  commercial?: SeatCommercialAttributes;
418
457
  }
419
- interface GAAreaObject {
458
+ interface GAAreaObject extends AuthoringObjectState {
420
459
  type: 'gaArea';
421
460
  id: string;
422
461
  /** Stable technical/inventory label. */
@@ -514,7 +553,7 @@ type ShapeLineCap = 'butt' | 'round' | 'square';
514
553
  type ShapeLineJoin = 'miter' | 'round' | 'bevel';
515
554
  type ShapeLineEnding = 'none' | 'arrow';
516
555
  /** Non-bookable décor: stage, walls, exits. */
517
- interface ShapeObject {
556
+ interface ShapeObject extends AuthoringObjectState {
518
557
  type: 'shape';
519
558
  id: string;
520
559
  /**
@@ -548,6 +587,14 @@ interface ShapeObject {
548
587
  cornerRadius?: number;
549
588
  /** Whole-shape opacity 0.1–1 (default 1). */
550
589
  opacity?: number;
590
+ /** Optional physical extrusion height used by the 3D venue renderer. */
591
+ heightM?: number;
592
+ /**
593
+ * Event configurations in which this architecture is present. Absent means
594
+ * the shape belongs to every configuration; a scoped shape is hidden until
595
+ * one of these ids is active on the chart or 3D scene input.
596
+ */
597
+ eventConfigurationIds?: string[];
551
598
  /** Degrees clockwise about the shape's center (default 0). Applied at render time. */
552
599
  rotation?: number;
553
600
  /**
@@ -574,7 +621,7 @@ interface RectTableSeatCounts {
574
621
  /** Seats arranged around a table. Grouped selling is activated only by an
575
622
  * event's explicit inventory-model-2 snapshot; model-1 events continue to
576
623
  * treat every authored chair as an independent unit. */
577
- interface TableObject {
624
+ interface TableObject extends AuthoringObjectState {
578
625
  type: 'table';
579
626
  id: string;
580
627
  /** e.g. "T1" — seat labels are `${label}-${n}`. */
@@ -623,7 +670,7 @@ interface TableObject {
623
670
  referenceInventorySource?: ReferenceInventorySource;
624
671
  }
625
672
  /** A booth: one bookable unit rendered as a block (trade shows, VIP boxes). */
626
- interface BoothObject {
673
+ interface BoothObject extends AuthoringObjectState {
627
674
  type: 'booth';
628
675
  id: string;
629
676
  /** Stable technical/inventory label. */
@@ -657,7 +704,7 @@ interface BoothObject {
657
704
  * Renderer: far zoom shows section shapes/labels instead of seats; clicking
658
705
  * a section zooms into it.
659
706
  */
660
- interface SectionObject {
707
+ interface SectionObject extends AuthoringObjectState {
661
708
  type: 'section';
662
709
  id: string;
663
710
  label: string;
@@ -675,6 +722,7 @@ interface SectionObject {
675
722
  * metadata operation.
676
723
  */
677
724
  viewFromSeatUrl?: string;
725
+ viewFromSeatMeta?: SeatViewMetadata;
678
726
  labelPresentation?: LabelPresentation;
679
727
  /**
680
728
  * Stable management/inventory identity shared by disconnected visual
@@ -826,11 +874,21 @@ type SelectionLayer = 'interactive' | 'background' | 'foreground' | 'surrounding
826
874
  * lockstep with `DECOR_PRESETS`; the selection-layer unit test fails if either
827
875
  * vocabulary changes without an explicit routing decision. `reference-focal`
828
876
  * is source-backed venue context rather than an authoring-palette preset. */
829
- declare const SURROUNDINGS_SHAPE_ROLES: readonly ["reference-focal", "bar", "entrance", "exit", "restroom", "screen", "sound", "concession", "coat", "wall"];
877
+ declare const SURROUNDINGS_SHAPE_ROLES: readonly ["reference-focal", "bar", "entrance", "exit", "restroom", "screen", "sound", "concession", "coat", "wall", "rail", "suite", "obstruction"];
830
878
  /** Derive an object's selection layer from its type. */
831
879
  declare function layerOf(obj: ChartObject): SelectionLayer;
832
880
  /** Free-standing text on the chart (aisle names, door labels…). */
833
- interface TextObject {
881
+ type TextAlignment = 'left' | 'center' | 'right';
882
+ interface TextBackground {
883
+ color: string;
884
+ /** Space inside the background in chart units; default 6. */
885
+ padding?: number;
886
+ /** Rounded background corners in chart units; default 4. */
887
+ cornerRadius?: number;
888
+ /** Background-only opacity multiplied by the text object's overall opacity. */
889
+ opacity?: number;
890
+ }
891
+ interface TextObject extends AuthoringObjectState {
834
892
  type: 'text';
835
893
  id: string;
836
894
  /** Persisted provenance for objects created from the venue-icon palette. */
@@ -853,6 +911,20 @@ interface TextObject {
853
911
  bold?: boolean;
854
912
  /** Render slant (default false). Maps to Konva fontStyle italic. */
855
913
  italic?: boolean;
914
+ /** Fixed text-box width in chart units. Absent keeps legacy auto width. */
915
+ width?: number;
916
+ /** Horizontal alignment inside a fixed-width text box. */
917
+ align?: TextAlignment;
918
+ /** Multiplier over the font's natural line height; default 1.2. */
919
+ lineHeight?: number;
920
+ /** Added chart units between glyphs; default 0. */
921
+ letterSpacing?: number;
922
+ /** Underline decoration. Absent is off. */
923
+ underline?: boolean;
924
+ /** Whole text-object opacity; default 1. */
925
+ opacity?: number;
926
+ /** Optional padded background painted behind the exact text box. */
927
+ background?: TextBackground;
856
928
  }
857
929
  /**
858
930
  * A raster/vector decor graphic drawn IN the chart, beneath the seats and
@@ -863,7 +935,7 @@ interface TextObject {
863
935
  * caches as a single bitmap blit (zero per-frame cost). Placed by top-left
864
936
  * (x,y) + size, rotated about its centre — the same handles a shape rect uses.
865
937
  */
866
- interface DecorImageObject {
938
+ interface DecorImageObject extends AuthoringObjectState {
867
939
  type: 'decorImage';
868
940
  id: string;
869
941
  /** Image or SVG data URL. */
@@ -923,6 +995,7 @@ interface Floor {
923
995
  * panorama) applies.
924
996
  */
925
997
  viewFromSeatUrl?: string;
998
+ viewFromSeatMeta?: SeatViewMetadata;
926
999
  }
927
1000
  interface ReferenceCalibration {
928
1001
  type: 'two-point';
@@ -1134,6 +1207,8 @@ interface ChartDoc {
1134
1207
  /** The stage / point every seat looks at. Anchors seat-view + sightlines.
1135
1208
  * Multi-floor: mirrors floor 0; each floor also carries its own focalPoint. */
1136
1209
  focalPoint: Point;
1210
+ /** Active event layout used by configuration-scoped 3D architecture. */
1211
+ eventConfigurationId?: string;
1137
1212
  categories: Category[];
1138
1213
  /** Section groupings for far-zoom navigation + pricing (optional; sections reference by id). */
1139
1214
  zones?: ZoneDef[];
@@ -1168,6 +1243,7 @@ interface ChartDoc {
1168
1243
  * the picker generates a synthetic panorama.
1169
1244
  */
1170
1245
  viewFromSeatUrl?: string;
1246
+ viewFromSeatMeta?: SeatViewMetadata;
1171
1247
  }
1172
1248
  interface ExpandedSeat {
1173
1249
  /** Stable id: `${rowId}:${index}` */
@@ -1203,6 +1279,8 @@ interface ExpandedSeat {
1203
1279
  commercial?: SeatCommercialAttributes;
1204
1280
  /** Organizer-supplied view-from-seat image (inherited from the row). */
1205
1281
  viewUrl?: string;
1282
+ /** Calibration/truth inherited from the same scope that supplied `viewUrl`. */
1283
+ viewMeta?: SeatViewMetadata;
1206
1284
  /** Per-seat label size/color override; absent = inherit the row/theme default. */
1207
1285
  labelStyle?: LabelStyle;
1208
1286
  /**
@@ -1643,4 +1721,4 @@ interface ISeatmapRenderer {
1643
1721
  /** localStorage key the Designer writes and the Picker reads. */
1644
1722
  declare const CHART_STORAGE_KEY = "seatmap.chart";
1645
1723
 
1646
- export { type RenderedGAAreaEvidence as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type DecorImageObject as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type ReferenceCalibration as H, type ISeatmapRenderer as I, type ReferenceCategorySource as J, type ReferenceDerivedScale as K, type LabelStyle as L, type ReferenceInventoryExclusionSource as M, type ReferenceInventorySource as N, type ReferenceScanProposal as O, type Point as P, type ReferenceScanRowProposal as Q, type RowObject as R, type SeatOverride as S, type TableObject as T, type ReferenceScanSectionProposal as U, type ReferenceSeatSeed as V, type ReferenceSectionTraceBatchInput as W, type ReferenceSectionTraceBatchProposal as X, type ReferenceSectionTraceInput as Y, type ReferenceSectionTraceProposal as Z, type RenderedBookableLabelEvidence as _, type RectTableSide as a, type RenderedHierarchyLabelEvidence as a0, type RenderedLabelHiddenReason as a1, SEAT_COMMERCIAL_MARKS as a2, SURROUNDINGS_SHAPE_ROLES as a3, type SeatCommercialMark as a4, type SeatCommercialMeta as a5, type SectionOutlinePath as a6, type SectionPathSegment as a7, type SelectionLayer as a8, type ShapeLineCap as a9, type ShapeLineEnding as aa, type ShapeLineJoin as ab, type ShapeObject as ac, type TextObject as ad, type ZoneDef as ae, accessibilityMeta as af, accessibilityRingColor as ag, layerOf as ah, seatCommercialMeta as ai, type ChartObject as b, type SectionObject as c, type RectTableSeatCounts as d, type GAInventorySegment as e, type RendererQualityEvidence as f, type RenderedFreeTextEvidence as g, type RendererOptions as h, type SeatStatus as i, type RendererViewMode as j, type LodRung as k, type CategoryTier as l, type SeatCommercialAttributes as m, type RendererCallbacks as n, ACCESSIBILITY_RING_COLOR as o, ACCESSIBILITY_TYPES as p, type AccessibilityMeta as q, CHART_STORAGE_KEY as r, type Category as s, type ChartReferenceImage as t, type ChartTheme as u, type CubicPath as v, LABEL_STYLE_MAX_SIZE as w, LABEL_STYLE_MIN_SIZE as x, type LabelPresentation as y, type ReferenceAccessibilitySource as z };
1724
+ export { type ReferenceSectionTraceInput as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type DecorImageObject as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type LabelPresentation as H, type ISeatmapRenderer as I, type ReferenceAccessibilitySource as J, type ReferenceCalibration as K, type LabelStyle as L, type ReferenceCategorySource as M, type ReferenceDerivedScale as N, type ObjectEditorState as O, type Point as P, type ReferenceInventoryExclusionSource as Q, type RowObject as R, type SeatOverride as S, type TableObject as T, type ReferenceInventorySource as U, type ReferenceScanProposal as V, type ReferenceScanRowProposal as W, type ReferenceScanSectionProposal as X, type ReferenceSeatSeed as Y, type ReferenceSectionTraceBatchInput as Z, type ReferenceSectionTraceBatchProposal as _, type SeatViewMetadata as a, type ReferenceSectionTraceProposal as a0, type RenderedBookableLabelEvidence as a1, type RenderedGAAreaEvidence as a2, type RenderedHierarchyLabelEvidence as a3, type RenderedLabelHiddenReason as a4, SEAT_COMMERCIAL_MARKS as a5, SURROUNDINGS_SHAPE_ROLES as a6, type SeatCommercialMark as a7, type SeatCommercialMeta as a8, type SeatViewCoverage as a9, type SectionOutlinePath as aa, type SectionPathSegment as ab, type SelectionLayer as ac, type ShapeLineCap as ad, type ShapeLineEnding as ae, type ShapeLineJoin as af, type ShapeObject as ag, type TextAlignment as ah, type TextBackground as ai, type TextObject as aj, type ZoneDef as ak, accessibilityMeta as al, accessibilityRingColor as am, layerOf as an, seatCommercialMeta as ao, type RectTableSide as b, type ChartObject as c, type SectionObject as d, type RectTableSeatCounts as e, type GAInventorySegment as f, type RendererQualityEvidence as g, type RenderedFreeTextEvidence as h, type RendererOptions as i, type SeatStatus as j, type RendererViewMode as k, type LodRung as l, type CategoryTier as m, type SeatCommercialAttributes as n, type RendererCallbacks as o, ACCESSIBILITY_RING_COLOR as p, ACCESSIBILITY_TYPES as q, type AccessibilityMeta as r, type AuthoringObjectState as s, CHART_STORAGE_KEY as t, type Category as u, type ChartReferenceImage as v, type ChartTheme as w, type CubicPath as x, LABEL_STYLE_MAX_SIZE as y, LABEL_STYLE_MIN_SIZE as z };
@@ -117,6 +117,28 @@ declare function accessibilityMeta(key: AccessibilityType): AccessibilityMeta |
117
117
  declare const ACCESSIBILITY_RING_COLOR: Record<AccessibilityType, string>;
118
118
  /** Ring colour for a seat's accessibility set (first-listed type wins). */
119
119
  declare function accessibilityRingColor(types: AccessibilityType[] | undefined): string;
120
+ type SeatViewCoverage = 'exact-seat' | 'row-representative' | 'section-representative' | 'venue-representative';
121
+ /** Calibration and truth metadata that travels with an organizer panorama.
122
+ * The URL remains separate for backward compatibility with existing charts. */
123
+ interface SeatViewMetadata {
124
+ projection?: 'equirectangular';
125
+ coverage?: SeatViewCoverage;
126
+ /** Optional lightweight first paint. `viewFromSeatUrl` remains the sharp source. */
127
+ previewUrl?: string;
128
+ previewWidth?: number;
129
+ previewHeight?: number;
130
+ /** Degrees relative to the authored focal/stage direction. */
131
+ initialBearingDeg?: number;
132
+ /** Positive looks up. The viewer clamps to its safe pitch range. */
133
+ initialPitchDeg?: number;
134
+ capturedAt?: string;
135
+ /** Buyer-safe provenance, e.g. "Provided by the venue". */
136
+ sourceLabel?: string;
137
+ sourceWidth?: number;
138
+ sourceHeight?: number;
139
+ captureEyeHeightM?: number;
140
+ eventConfigurationId?: string;
141
+ }
120
142
  interface SeatOverride {
121
143
  /** 0-based seat index within the row. */
122
144
  index: number;
@@ -146,6 +168,8 @@ interface SeatOverride {
146
168
  commercial?: SeatCommercialAttributes;
147
169
  /** Seat-specific view photo; falls back to the row photo. */
148
170
  viewFromSeatUrl?: string;
171
+ /** Calibration/truth for `viewFromSeatUrl`; ignored when the URL is absent. */
172
+ viewFromSeatMeta?: SeatViewMetadata;
149
173
  /** Per-seat label size/color override; falls back to the row/theme default.
150
174
  * Size is clamped to LABEL_STYLE_MIN_SIZE..MAX_SIZE; color is passed through
151
175
  * the shared auto-contrast rule at paint time (see {@link LabelStyle}). */
@@ -219,6 +243,19 @@ interface LabelPresentation {
219
243
  */
220
244
  positionPreset?: 'start' | 'end' | 'both' | 'none';
221
245
  }
246
+ /** Persisted authoring ergonomics that must not change buyer inventory or
247
+ * rendering. Buyer projections strip this object before a chart is served. */
248
+ interface ObjectEditorState {
249
+ /** Objects sharing this id select and transform as one authoring unit. */
250
+ groupId?: string;
251
+ /** Protect canvas geometry while keeping ordinary Inspector properties editable. */
252
+ locked?: boolean;
253
+ /** Remove the object from the authoring scene until Reveal hidden is used. */
254
+ hidden?: boolean;
255
+ }
256
+ interface AuthoringObjectState {
257
+ editor?: ObjectEditorState;
258
+ }
222
259
  /** Brand/venue theming — applied by the renderer in both designer and picker. */
223
260
  interface ChartTheme {
224
261
  /** Canvas background color (default dark: #0e1117-ish radial). */
@@ -248,7 +285,7 @@ interface ChartTheme {
248
285
  /** Paid-tier flag: hide the "Powered by SeatMap" badge. */
249
286
  hideBadge?: boolean;
250
287
  }
251
- interface RowObject {
288
+ interface RowObject extends AuthoringObjectState {
252
289
  type: 'row';
253
290
  id: string;
254
291
  /** Present when this row was materialized by the in-canvas reference scan.
@@ -338,6 +375,7 @@ interface RowObject {
338
375
  displayType?: string;
339
376
  labelPresentation?: LabelPresentation;
340
377
  viewFromSeatUrl?: string;
378
+ viewFromSeatMeta?: SeatViewMetadata;
341
379
  /** Presentation intent for a continuous node-defined centreline. */
342
380
  smoothing?: boolean;
343
381
  };
@@ -413,10 +451,11 @@ interface RowObject {
413
451
  * generates a synthetic panorama from chart geometry.
414
452
  */
415
453
  viewFromSeatUrl?: string;
454
+ viewFromSeatMeta?: SeatViewMetadata;
416
455
  /** Default commercial attributes inherited by seats without an override. */
417
456
  commercial?: SeatCommercialAttributes;
418
457
  }
419
- interface GAAreaObject {
458
+ interface GAAreaObject extends AuthoringObjectState {
420
459
  type: 'gaArea';
421
460
  id: string;
422
461
  /** Stable technical/inventory label. */
@@ -514,7 +553,7 @@ type ShapeLineCap = 'butt' | 'round' | 'square';
514
553
  type ShapeLineJoin = 'miter' | 'round' | 'bevel';
515
554
  type ShapeLineEnding = 'none' | 'arrow';
516
555
  /** Non-bookable décor: stage, walls, exits. */
517
- interface ShapeObject {
556
+ interface ShapeObject extends AuthoringObjectState {
518
557
  type: 'shape';
519
558
  id: string;
520
559
  /**
@@ -548,6 +587,14 @@ interface ShapeObject {
548
587
  cornerRadius?: number;
549
588
  /** Whole-shape opacity 0.1–1 (default 1). */
550
589
  opacity?: number;
590
+ /** Optional physical extrusion height used by the 3D venue renderer. */
591
+ heightM?: number;
592
+ /**
593
+ * Event configurations in which this architecture is present. Absent means
594
+ * the shape belongs to every configuration; a scoped shape is hidden until
595
+ * one of these ids is active on the chart or 3D scene input.
596
+ */
597
+ eventConfigurationIds?: string[];
551
598
  /** Degrees clockwise about the shape's center (default 0). Applied at render time. */
552
599
  rotation?: number;
553
600
  /**
@@ -574,7 +621,7 @@ interface RectTableSeatCounts {
574
621
  /** Seats arranged around a table. Grouped selling is activated only by an
575
622
  * event's explicit inventory-model-2 snapshot; model-1 events continue to
576
623
  * treat every authored chair as an independent unit. */
577
- interface TableObject {
624
+ interface TableObject extends AuthoringObjectState {
578
625
  type: 'table';
579
626
  id: string;
580
627
  /** e.g. "T1" — seat labels are `${label}-${n}`. */
@@ -623,7 +670,7 @@ interface TableObject {
623
670
  referenceInventorySource?: ReferenceInventorySource;
624
671
  }
625
672
  /** A booth: one bookable unit rendered as a block (trade shows, VIP boxes). */
626
- interface BoothObject {
673
+ interface BoothObject extends AuthoringObjectState {
627
674
  type: 'booth';
628
675
  id: string;
629
676
  /** Stable technical/inventory label. */
@@ -657,7 +704,7 @@ interface BoothObject {
657
704
  * Renderer: far zoom shows section shapes/labels instead of seats; clicking
658
705
  * a section zooms into it.
659
706
  */
660
- interface SectionObject {
707
+ interface SectionObject extends AuthoringObjectState {
661
708
  type: 'section';
662
709
  id: string;
663
710
  label: string;
@@ -675,6 +722,7 @@ interface SectionObject {
675
722
  * metadata operation.
676
723
  */
677
724
  viewFromSeatUrl?: string;
725
+ viewFromSeatMeta?: SeatViewMetadata;
678
726
  labelPresentation?: LabelPresentation;
679
727
  /**
680
728
  * Stable management/inventory identity shared by disconnected visual
@@ -826,11 +874,21 @@ type SelectionLayer = 'interactive' | 'background' | 'foreground' | 'surrounding
826
874
  * lockstep with `DECOR_PRESETS`; the selection-layer unit test fails if either
827
875
  * vocabulary changes without an explicit routing decision. `reference-focal`
828
876
  * is source-backed venue context rather than an authoring-palette preset. */
829
- declare const SURROUNDINGS_SHAPE_ROLES: readonly ["reference-focal", "bar", "entrance", "exit", "restroom", "screen", "sound", "concession", "coat", "wall"];
877
+ declare const SURROUNDINGS_SHAPE_ROLES: readonly ["reference-focal", "bar", "entrance", "exit", "restroom", "screen", "sound", "concession", "coat", "wall", "rail", "suite", "obstruction"];
830
878
  /** Derive an object's selection layer from its type. */
831
879
  declare function layerOf(obj: ChartObject): SelectionLayer;
832
880
  /** Free-standing text on the chart (aisle names, door labels…). */
833
- interface TextObject {
881
+ type TextAlignment = 'left' | 'center' | 'right';
882
+ interface TextBackground {
883
+ color: string;
884
+ /** Space inside the background in chart units; default 6. */
885
+ padding?: number;
886
+ /** Rounded background corners in chart units; default 4. */
887
+ cornerRadius?: number;
888
+ /** Background-only opacity multiplied by the text object's overall opacity. */
889
+ opacity?: number;
890
+ }
891
+ interface TextObject extends AuthoringObjectState {
834
892
  type: 'text';
835
893
  id: string;
836
894
  /** Persisted provenance for objects created from the venue-icon palette. */
@@ -853,6 +911,20 @@ interface TextObject {
853
911
  bold?: boolean;
854
912
  /** Render slant (default false). Maps to Konva fontStyle italic. */
855
913
  italic?: boolean;
914
+ /** Fixed text-box width in chart units. Absent keeps legacy auto width. */
915
+ width?: number;
916
+ /** Horizontal alignment inside a fixed-width text box. */
917
+ align?: TextAlignment;
918
+ /** Multiplier over the font's natural line height; default 1.2. */
919
+ lineHeight?: number;
920
+ /** Added chart units between glyphs; default 0. */
921
+ letterSpacing?: number;
922
+ /** Underline decoration. Absent is off. */
923
+ underline?: boolean;
924
+ /** Whole text-object opacity; default 1. */
925
+ opacity?: number;
926
+ /** Optional padded background painted behind the exact text box. */
927
+ background?: TextBackground;
856
928
  }
857
929
  /**
858
930
  * A raster/vector decor graphic drawn IN the chart, beneath the seats and
@@ -863,7 +935,7 @@ interface TextObject {
863
935
  * caches as a single bitmap blit (zero per-frame cost). Placed by top-left
864
936
  * (x,y) + size, rotated about its centre — the same handles a shape rect uses.
865
937
  */
866
- interface DecorImageObject {
938
+ interface DecorImageObject extends AuthoringObjectState {
867
939
  type: 'decorImage';
868
940
  id: string;
869
941
  /** Image or SVG data URL. */
@@ -923,6 +995,7 @@ interface Floor {
923
995
  * panorama) applies.
924
996
  */
925
997
  viewFromSeatUrl?: string;
998
+ viewFromSeatMeta?: SeatViewMetadata;
926
999
  }
927
1000
  interface ReferenceCalibration {
928
1001
  type: 'two-point';
@@ -1134,6 +1207,8 @@ interface ChartDoc {
1134
1207
  /** The stage / point every seat looks at. Anchors seat-view + sightlines.
1135
1208
  * Multi-floor: mirrors floor 0; each floor also carries its own focalPoint. */
1136
1209
  focalPoint: Point;
1210
+ /** Active event layout used by configuration-scoped 3D architecture. */
1211
+ eventConfigurationId?: string;
1137
1212
  categories: Category[];
1138
1213
  /** Section groupings for far-zoom navigation + pricing (optional; sections reference by id). */
1139
1214
  zones?: ZoneDef[];
@@ -1168,6 +1243,7 @@ interface ChartDoc {
1168
1243
  * the picker generates a synthetic panorama.
1169
1244
  */
1170
1245
  viewFromSeatUrl?: string;
1246
+ viewFromSeatMeta?: SeatViewMetadata;
1171
1247
  }
1172
1248
  interface ExpandedSeat {
1173
1249
  /** Stable id: `${rowId}:${index}` */
@@ -1203,6 +1279,8 @@ interface ExpandedSeat {
1203
1279
  commercial?: SeatCommercialAttributes;
1204
1280
  /** Organizer-supplied view-from-seat image (inherited from the row). */
1205
1281
  viewUrl?: string;
1282
+ /** Calibration/truth inherited from the same scope that supplied `viewUrl`. */
1283
+ viewMeta?: SeatViewMetadata;
1206
1284
  /** Per-seat label size/color override; absent = inherit the row/theme default. */
1207
1285
  labelStyle?: LabelStyle;
1208
1286
  /**
@@ -1643,4 +1721,4 @@ interface ISeatmapRenderer {
1643
1721
  /** localStorage key the Designer writes and the Picker reads. */
1644
1722
  declare const CHART_STORAGE_KEY = "seatmap.chart";
1645
1723
 
1646
- export { type RenderedGAAreaEvidence as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type DecorImageObject as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type ReferenceCalibration as H, type ISeatmapRenderer as I, type ReferenceCategorySource as J, type ReferenceDerivedScale as K, type LabelStyle as L, type ReferenceInventoryExclusionSource as M, type ReferenceInventorySource as N, type ReferenceScanProposal as O, type Point as P, type ReferenceScanRowProposal as Q, type RowObject as R, type SeatOverride as S, type TableObject as T, type ReferenceScanSectionProposal as U, type ReferenceSeatSeed as V, type ReferenceSectionTraceBatchInput as W, type ReferenceSectionTraceBatchProposal as X, type ReferenceSectionTraceInput as Y, type ReferenceSectionTraceProposal as Z, type RenderedBookableLabelEvidence as _, type RectTableSide as a, type RenderedHierarchyLabelEvidence as a0, type RenderedLabelHiddenReason as a1, SEAT_COMMERCIAL_MARKS as a2, SURROUNDINGS_SHAPE_ROLES as a3, type SeatCommercialMark as a4, type SeatCommercialMeta as a5, type SectionOutlinePath as a6, type SectionPathSegment as a7, type SelectionLayer as a8, type ShapeLineCap as a9, type ShapeLineEnding as aa, type ShapeLineJoin as ab, type ShapeObject as ac, type TextObject as ad, type ZoneDef as ae, accessibilityMeta as af, accessibilityRingColor as ag, layerOf as ah, seatCommercialMeta as ai, type ChartObject as b, type SectionObject as c, type RectTableSeatCounts as d, type GAInventorySegment as e, type RendererQualityEvidence as f, type RenderedFreeTextEvidence as g, type RendererOptions as h, type SeatStatus as i, type RendererViewMode as j, type LodRung as k, type CategoryTier as l, type SeatCommercialAttributes as m, type RendererCallbacks as n, ACCESSIBILITY_RING_COLOR as o, ACCESSIBILITY_TYPES as p, type AccessibilityMeta as q, CHART_STORAGE_KEY as r, type Category as s, type ChartReferenceImage as t, type ChartTheme as u, type CubicPath as v, LABEL_STYLE_MAX_SIZE as w, LABEL_STYLE_MIN_SIZE as x, type LabelPresentation as y, type ReferenceAccessibilitySource as z };
1724
+ export { type ReferenceSectionTraceInput as $, type AccessibilityType as A, type BoothObject as B, type ChartDoc as C, type DecorImageObject as D, type ExpandedSeat as E, type Floor as F, type GAAreaObject as G, type LabelPresentation as H, type ISeatmapRenderer as I, type ReferenceAccessibilitySource as J, type ReferenceCalibration as K, type LabelStyle as L, type ReferenceCategorySource as M, type ReferenceDerivedScale as N, type ObjectEditorState as O, type Point as P, type ReferenceInventoryExclusionSource as Q, type RowObject as R, type SeatOverride as S, type TableObject as T, type ReferenceInventorySource as U, type ReferenceScanProposal as V, type ReferenceScanRowProposal as W, type ReferenceScanSectionProposal as X, type ReferenceSeatSeed as Y, type ReferenceSectionTraceBatchInput as Z, type ReferenceSectionTraceBatchProposal as _, type SeatViewMetadata as a, type ReferenceSectionTraceProposal as a0, type RenderedBookableLabelEvidence as a1, type RenderedGAAreaEvidence as a2, type RenderedHierarchyLabelEvidence as a3, type RenderedLabelHiddenReason as a4, SEAT_COMMERCIAL_MARKS as a5, SURROUNDINGS_SHAPE_ROLES as a6, type SeatCommercialMark as a7, type SeatCommercialMeta as a8, type SeatViewCoverage as a9, type SectionOutlinePath as aa, type SectionPathSegment as ab, type SelectionLayer as ac, type ShapeLineCap as ad, type ShapeLineEnding as ae, type ShapeLineJoin as af, type ShapeObject as ag, type TextAlignment as ah, type TextBackground as ai, type TextObject as aj, type ZoneDef as ak, accessibilityMeta as al, accessibilityRingColor as am, layerOf as an, seatCommercialMeta as ao, type RectTableSide as b, type ChartObject as c, type SectionObject as d, type RectTableSeatCounts as e, type GAInventorySegment as f, type RendererQualityEvidence as g, type RenderedFreeTextEvidence as h, type RendererOptions as i, type SeatStatus as j, type RendererViewMode as k, type LodRung as l, type CategoryTier as m, type SeatCommercialAttributes as n, type RendererCallbacks as o, ACCESSIBILITY_RING_COLOR as p, ACCESSIBILITY_TYPES as q, type AccessibilityMeta as r, type AuthoringObjectState as s, CHART_STORAGE_KEY as t, type Category as u, type ChartReferenceImage as v, type ChartTheme as w, type CubicPath as x, LABEL_STYLE_MAX_SIZE as y, LABEL_STYLE_MIN_SIZE as z };
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/view/panoramaDelivery.ts
21
+ var panoramaDelivery_exports = {};
22
+ __export(panoramaDelivery_exports, {
23
+ browserPanoramaConstraints: () => browserPanoramaConstraints,
24
+ estimatePanoramaTextureBytes: () => estimatePanoramaTextureBytes,
25
+ loadPanoramaImage: () => loadPanoramaImage,
26
+ panoramaTextureBudgetBytes: () => panoramaTextureBudgetBytes,
27
+ planPanoramaDelivery: () => planPanoramaDelivery,
28
+ schedulePanoramaUpgrade: () => schedulePanoramaUpgrade
29
+ });
30
+ module.exports = __toCommonJS(panoramaDelivery_exports);
31
+ function estimatePanoramaTextureBytes(width, height) {
32
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) return 0;
33
+ return Math.ceil(width * height * 4 * (4 / 3));
34
+ }
35
+ function panoramaTextureBudgetBytes(deviceMemoryGb) {
36
+ const mib = deviceMemoryGb !== void 0 && deviceMemoryGb <= 2 ? 32 : deviceMemoryGb !== void 0 && deviceMemoryGb >= 8 ? 192 : 96;
37
+ return mib * 1024 * 1024;
38
+ }
39
+ function browserPanoramaConstraints(maxTextureSize) {
40
+ const nav = typeof navigator === "undefined" ? void 0 : navigator;
41
+ return {
42
+ saveData: nav?.connection?.saveData === true,
43
+ maxTextureSize,
44
+ maxDecodedBytes: panoramaTextureBudgetBytes(nav?.deviceMemory)
45
+ };
46
+ }
47
+ function planPanoramaDelivery(source, constraints = {}) {
48
+ const previewUrl = source.previewUrl?.trim();
49
+ if (!previewUrl || previewUrl === source.url) {
50
+ return {
51
+ initialUrl: source.url,
52
+ initialWidth: source.sourceWidth,
53
+ initialHeight: source.sourceHeight,
54
+ reason: "full-only"
55
+ };
56
+ }
57
+ const initial = {
58
+ initialUrl: previewUrl,
59
+ initialWidth: source.previewWidth,
60
+ initialHeight: source.previewHeight
61
+ };
62
+ if (constraints.saveData) return { ...initial, reason: "save-data" };
63
+ if (constraints.maxTextureSize !== void 0 && source.sourceWidth !== void 0 && source.sourceHeight !== void 0 && Math.max(source.sourceWidth, source.sourceHeight) > constraints.maxTextureSize) {
64
+ return { ...initial, reason: "texture-limit" };
65
+ }
66
+ if (constraints.maxDecodedBytes !== void 0 && source.sourceWidth !== void 0 && source.sourceHeight !== void 0 && estimatePanoramaTextureBytes(source.sourceWidth, source.sourceHeight) > constraints.maxDecodedBytes) {
67
+ return { ...initial, reason: "memory-limit" };
68
+ }
69
+ return { ...initial, upgradeUrl: source.url, reason: "progressive" };
70
+ }
71
+ function abortError() {
72
+ return new DOMException("Panorama image load aborted", "AbortError");
73
+ }
74
+ function loadPanoramaImage(url, signal) {
75
+ return new Promise((resolve, reject) => {
76
+ if (signal?.aborted) {
77
+ reject(abortError());
78
+ return;
79
+ }
80
+ const image = new Image();
81
+ image.crossOrigin = "anonymous";
82
+ let settled = false;
83
+ const cleanup = () => {
84
+ image.onload = null;
85
+ image.onerror = null;
86
+ signal?.removeEventListener("abort", onAbort);
87
+ };
88
+ const finish = (error) => {
89
+ if (settled) return;
90
+ settled = true;
91
+ cleanup();
92
+ if (error) reject(error);
93
+ else resolve(image);
94
+ };
95
+ const onAbort = () => {
96
+ image.src = "";
97
+ finish(abortError());
98
+ };
99
+ image.onload = () => {
100
+ const decoded = typeof image.decode === "function" ? image.decode() : Promise.resolve();
101
+ void decoded.then(() => finish(), () => finish());
102
+ };
103
+ image.onerror = () => finish(new Error("panorama_image_failed"));
104
+ signal?.addEventListener("abort", onAbort, { once: true });
105
+ image.src = url;
106
+ });
107
+ }
108
+ function schedulePanoramaUpgrade(work) {
109
+ const host = globalThis;
110
+ if (host.requestIdleCallback) {
111
+ const id2 = host.requestIdleCallback(work, { timeout: 1200 });
112
+ return () => host.cancelIdleCallback?.(id2);
113
+ }
114
+ const id = globalThis.setTimeout(work, 32);
115
+ return () => globalThis.clearTimeout(id);
116
+ }
117
+ // Annotate the CommonJS export names for ESM import in node:
118
+ 0 && (module.exports = {
119
+ browserPanoramaConstraints,
120
+ estimatePanoramaTextureBytes,
121
+ loadPanoramaImage,
122
+ panoramaTextureBudgetBytes,
123
+ planPanoramaDelivery,
124
+ schedulePanoramaUpgrade
125
+ });
126
+ //# sourceMappingURL=panoramaDelivery.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/view/panoramaDelivery.ts"],"sourcesContent":["/** Progressive delivery policy shared by the WebGL and DOM panorama viewers. */\n\nexport interface PanoramaDeliverySource {\n url: string;\n previewUrl?: string;\n sourceWidth?: number;\n sourceHeight?: number;\n previewWidth?: number;\n previewHeight?: number;\n}\n\nexport interface PanoramaDeliveryConstraints {\n saveData?: boolean;\n maxTextureSize?: number;\n maxDecodedBytes?: number;\n}\n\nexport interface PanoramaDeliveryPlan {\n initialUrl: string;\n upgradeUrl?: string;\n initialWidth?: number;\n initialHeight?: number;\n reason: 'full-only' | 'progressive' | 'save-data' | 'texture-limit' | 'memory-limit';\n}\n\n/** Approximate GPU allocation including a complete mip chain (4/3 overhead). */\nexport function estimatePanoramaTextureBytes(width: number, height: number): number {\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) return 0;\n return Math.ceil(width * height * 4 * (4 / 3));\n}\n\n/** Conservative per-panorama budget, raised only on devices reporting ample RAM. */\nexport function panoramaTextureBudgetBytes(deviceMemoryGb?: number): number {\n const mib = deviceMemoryGb !== undefined && deviceMemoryGb <= 2\n ? 32\n : deviceMemoryGb !== undefined && deviceMemoryGb >= 8\n ? 192\n : 96;\n return mib * 1024 * 1024;\n}\n\nexport function browserPanoramaConstraints(maxTextureSize?: number): PanoramaDeliveryConstraints {\n const nav = typeof navigator === 'undefined'\n ? undefined\n : navigator as Navigator & { deviceMemory?: number; connection?: { saveData?: boolean } };\n return {\n saveData: nav?.connection?.saveData === true,\n maxTextureSize,\n maxDecodedBytes: panoramaTextureBudgetBytes(nav?.deviceMemory),\n };\n}\n\n/** Select the first image and whether a later sharp-image upgrade is safe. */\nexport function planPanoramaDelivery(\n source: PanoramaDeliverySource,\n constraints: PanoramaDeliveryConstraints = {},\n): PanoramaDeliveryPlan {\n const previewUrl = source.previewUrl?.trim();\n if (!previewUrl || previewUrl === source.url) {\n return {\n initialUrl: source.url,\n initialWidth: source.sourceWidth,\n initialHeight: source.sourceHeight,\n reason: 'full-only',\n };\n }\n\n const initial = {\n initialUrl: previewUrl,\n initialWidth: source.previewWidth,\n initialHeight: source.previewHeight,\n };\n if (constraints.saveData) return { ...initial, reason: 'save-data' };\n if (constraints.maxTextureSize !== undefined && source.sourceWidth !== undefined && source.sourceHeight !== undefined\n && Math.max(source.sourceWidth, source.sourceHeight) > constraints.maxTextureSize) {\n return { ...initial, reason: 'texture-limit' };\n }\n if (constraints.maxDecodedBytes !== undefined && source.sourceWidth !== undefined && source.sourceHeight !== undefined\n && estimatePanoramaTextureBytes(source.sourceWidth, source.sourceHeight) > constraints.maxDecodedBytes) {\n return { ...initial, reason: 'memory-limit' };\n }\n return { ...initial, upgradeUrl: source.url, reason: 'progressive' };\n}\n\nfunction abortError(): DOMException {\n return new DOMException('Panorama image load aborted', 'AbortError');\n}\n\n/** Decode before resolving so callers never upload or reveal a partial image. */\nexport function loadPanoramaImage(url: string, signal?: AbortSignal): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) { reject(abortError()); return; }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n let settled = false;\n const cleanup = (): void => {\n image.onload = null;\n image.onerror = null;\n signal?.removeEventListener('abort', onAbort);\n };\n const finish = (error?: unknown): void => {\n if (settled) return;\n settled = true;\n cleanup();\n if (error) reject(error);\n else resolve(image);\n };\n const onAbort = (): void => {\n image.src = '';\n finish(abortError());\n };\n image.onload = () => {\n const decoded = typeof image.decode === 'function' ? image.decode() : Promise.resolve();\n void decoded.then(() => finish(), () => finish());\n };\n image.onerror = () => finish(new Error('panorama_image_failed'));\n signal?.addEventListener('abort', onAbort, { once: true });\n image.src = url;\n });\n}\n\n/** Let the preview paint before starting a potentially large decode. */\nexport function schedulePanoramaUpgrade(work: () => void): () => void {\n const host = globalThis as typeof globalThis & {\n requestIdleCallback?: (cb: () => void, opts?: { timeout: number }) => number;\n cancelIdleCallback?: (id: number) => void;\n };\n if (host.requestIdleCallback) {\n const id = host.requestIdleCallback(work, { timeout: 1200 });\n return () => host.cancelIdleCallback?.(id);\n }\n const id = globalThis.setTimeout(work, 32);\n return () => globalThis.clearTimeout(id);\n}\n"],"mappings":"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","names":["id"]}