Skip to content

104 venue templates (lazy entry) · Browser + Node

@openseat/core/templates

Venue templates: contracts, vocabulary, manifest and taxonomy, registry, search, params, capacity fitting, the TemplateKit, build/summary, placement, schematics, shared builders and the ten venue groups.

venue templates: contracts, vocabulary, manifest and taxonomy, registry, search, params, capacity fitting, the TemplateKit, build/summary, placement, schematics, shared builders and the ten venue groups.

Load this subpath lazily (dynamic import) from editors and apps: booking bundles that import only the root @openseat/core never pull it in.

  • 95 functions
  • 2 classes
  • 110 interfaces
  • 23 types
  • 42 constants
  • MIT

A separate, lazily loaded entry point of @openseat/core: nothing extra to install, and apps that never import it never download it.

depends on zod

Import
import {
  buildTemplate,
  searchTemplates,
  listVenues,
  fitCapacity,
  defaultParams,
} from "@openseat/core/templates";

Functions95

function

accessibleCount

Wheelchair places the template harness asks for: max(1, ceil(seats x 0.5%)).

function accessibleCount(seats: number): number;

Parameters

ParameterTypeDescription
seatsnumber

Returns

number

@openseat/core/src/templates/kit/builders/infra.ts

function

amenity

A named facility drawn as a decor polygon (or an obstacle seats can never overlap, for solid furniture: bar, buffet, FOH, DJ, screen) with a label object, since polygon names are not drawn on the map.

function amenity(
  kit: TemplateKitApi,
  opts: AmenityOptions,
): BuilderResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsAmenityOptions

Returns

@openseat/core/src/templates/kit/builders/infra.ts

function

arcPts

seg + 1 points on a circular arc from a0 to a1 degrees.

function arcPts(
  c: Point,
  r: number,
  a0: number,
  a1: number,
  seg?: number,
): Point[];

Parameters

ParameterTypeDescription
cPoint
rnumber
a0number
a1number
segoptionalnumber

Default 16

Returns

@openseat/core/src/templates/kit/geometry.ts

function

arcWedges

count arc wedges between from and to degrees around center, separated by gangways at least gangwayM wide at the front row (the kit's arcRun). Labels: labels[i], else ${labelPrefix}${i + 1}.

function arcWedges(
  kit: TemplateKitApi,
  opts: ArcWedgesOptions,
): SeatingResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsArcWedgesOptions

Returns

@openseat/core/src/templates/kit/builders/seating.ts

function

areaM2

Area of a polygon given in metres, in m².

function areaM2(pointsM: readonly Point[]): number;

Parameters

ParameterTypeDescription
pointsMreadonly Point[]

Returns

number

@openseat/core/src/templates/kit/geometry.ts

function

athleticsTrack

A 400 m athletics track (straights east-west): the track surface, the infield (a football pitch, grass or nothing), lane lines, the finish line and the 100 m start extension west of the home (south) straight.

function athleticsTrack(
  kit: TemplateKitApi,
  opts?: AthleticsTrackOptions,
): AthleticsTrackResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsoptionalAthleticsTrackOptions

Default {}

Returns

@openseat/core/src/templates/kit/builders/fields.ts

function

battleRing

A dance battle: a circular or square cypher floor (a stage), the audience on 3 sides (north open), 4 sides or an arc round the south, as seated sections, standing bands or seated front rows with standing behind; the judges' table on the north side (not for sale), a DJ booth (an obstacle) and a crew holding zone (a polygon, no inventory).

function battleRing(
  kit: TemplateKitApi,
  opts?: BattleRingOptions,
): BattleRingResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsoptionalBattleRingOptions

Default {}

Returns

@openseat/core/src/templates/kit/builders/stagecraft.ts

function

boothBand

Back-to-back booth pairs: blocks blocks of columnsPerBlock booths across, separated by cross aisles, and pairs pairs of rows separated by main aisles. Labels are ${row letter}${n}; the booths at each block row's ends take cornerCategory.

function boothBand(
  kit: TemplateKitApi,
  opts: BoothBandOptions,
): BoothBlockResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsBoothBandOptions

Returns

@openseat/core/src/templates/kit/builders/expo.ts

function

buildTemplate

Builds a template layout:

  1. resolves the params (defaults, size preset, input; snapped and clamped) and, with targetCapacity, fits the capacity driver;
  2. runs the setup's builder on a fresh TemplateKit;
  3. creates the layout with the kit's referenced categories;
  4. moves everything (objects, venue, focal point and block frames) by whole grid cells so the content starts 40 units from the canvas origin, with a plain map over positions (locked surfaces move too and sections keep their seating), sizes the canvas to the venue and objects plus 40 and calls fitCanvasToContent;
  5. writes metadata.openseat (OpenSeatMeta): units, the template stamp, block stamps, not-for-sale categories and IDs and the indicative INR prices of the categories present. Block stamps are dropped, with a note, when the metadata would exceed 48 KB;
  6. with zonesOnly, turns every section into a zone (zoneTemplateLayout);
  7. enforces TEMPLATE_LIMITS (TemplateInputError) and summarises.

Identical input gives a byte-identical serializeLayout; no timestamps are written. setup is a registered setup id or, for tests and fixtures, a definition.

function buildTemplate(
  setup: string | SetupDefinition,
  input?: Readonly<Record<string, ParamValue>> | null,
  opts?: BuildTemplateOptions,
): BuiltTemplate;

Parameters

ParameterTypeDescription
setupstring | SetupDefinition
inputoptionalReadonly<Record<string, ParamValue>> | null
optsoptionalBuildTemplateOptions

Default {}

Returns

Example

templates.ts
// A separate, lazy entry point: buyer pages never load it.
const { buildTemplate, searchTemplates } = await import("@openseat/core/templates");

const [hit] = searchTemplates("farewell banquet", { limit: 1 }); // social.banquet-hall.rounds-dance

const { layout, summary } = buildTemplate("performance.auditorium.annual-day", null, {
  name: "Annual Day 2026",
  targetCapacity: 400, // fits rows to the audience
  zonesOnly: false, // true: "Sections only (no seats)", sold by quantity
});
summary.totalCapacity; // 408
summary.notes; // every clamp, in plain words

Recipe: start from a venue template

@openseat/core/src/templates/build.ts

function

catmullRom

An open Catmull-Rom spline through pointsM (centripetal-free, uniform), with samples segments between each pair of points. The first and last points are kept.

function catmullRom(
  pointsM: readonly Point[],
  samples?: number,
): Point[];

Parameters

ParameterTypeDescription
pointsMreadonly Point[]
samplesoptionalnumber

Default 8

Returns

@openseat/core/src/templates/kit/geometry.ts

function

checkParamSpec

Problems with one param spec (and its relation to the others).

function checkParamSpec(
  spec: ParamSpec,
  all: readonly ParamSpec[],
  where: string,
): string[];

Parameters

ParameterTypeDescription
specParamSpec
allreadonly ParamSpec[]
wherestring

Returns

string[]

@openseat/core/src/templates/registry.ts

function

checkSetupDefinition

Problems with one setup definition on its own.

function checkSetupDefinition(def: SetupDefinition): string[];

Parameters

ParameterTypeDescription
defSetupDefinition

def takes SetupDefinition:

Returns

string[]

@openseat/core/src/templates/registry.ts

function

clearCapacityMemo

Clears the build memo (tests).

function clearCapacityMemo(): void;

Returns

void

@openseat/core/src/templates/capacity.ts

function

colourChroma

CIELAB chroma; 0 for a malformed colour.

function colourChroma(hex: string): number;

Parameters

ParameterTypeDescription
hexstring

Returns

number

@openseat/core/src/templates/vocab.ts

function

colourDeltaE

CIE76 colour difference; Infinity when either colour is malformed.

function colourDeltaE(a: string, b: string): number;

Parameters

ParameterTypeDescription
astring
bstring

Returns

number

@openseat/core/src/templates/vocab.ts

function

colourToLab

CIELAB (D65) of a #rrggbb colour, or null when it is not one.

function colourToLab(
  hex: string,
): { L: number; a: number; b: number } | null;

Parameters

ParameterTypeDescription
hexstring

Returns

{ L: number; a: number; b: number; } | null

@openseat/core/src/templates/vocab.ts

function

cricketGround

A cricket ground: the oval outfield (pitch north-south), the boundary rope, the 30-yard circle, the pitch strip with creases, optional sight screens (obstacles) beyond the boundary at both ends and a pavilion (decor) on the west.

function cricketGround(
  kit: TemplateKitApi,
  opts?: CricketGroundOptions,
): CricketGroundResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsoptionalCricketGroundOptions

Default {}

Returns

@openseat/core/src/templates/kit/builders/fields.ts

function

damerauDistance

Optimal-string-alignment (restricted Damerau-Levenshtein) distance, capped at max + 1.

function damerauDistance(
  a: string,
  b: string,
  max?: number,
): number;

Parameters

ParameterTypeDescription
astring
bstring
maxoptionalnumber

Default 1

Returns

number

@openseat/core/src/templates/search.ts

function

defaultParams

function defaultParams(
  setup: Pick<SetupDefinition, "params">,
): Record<string, ParamValue>;

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "params">

Returns

Record<string, ParamValue>

@openseat/core/src/templates/params.ts

function

defineSetup

Declares a setup with params typed from its ParamSpec tuple. Use as const on the params array.

function defineSetup<const S extends readonly ParamSpec[]>(
  d: Omit<SetupDefinition<ParamsOf<S>>, "params" | "build"> & {
    readonly params: S;
    build(p: ParamsOf<S>, kit: TemplateKitApi): void;
  },
): SetupDefinition;

Type parameters

Parameters

ParameterTypeDescription
dOmit<SetupDefinition<ParamsOf<S>>, "params" | "build"> & { readonly params: S; build(p: ParamsOf<S>, kit: TemplateKitApi): void; }

Returns

@openseat/core/src/templates/types.ts

function

densityCaution

The density caution text. Summaries compute the same text from GA capacities, so the two merge.

function densityCaution(label: string): string;

Parameters

ParameterTypeDescription
labelstring

Returns

string

@openseat/core/src/templates/kit/seats.ts

function

ellipseSectorPts

The band between two concentric ellipses from a0 to a1 degrees: the outer arc forwards, then the inner arc back. An inner radius of 0 closes the sector at the centre. A full 360-degree sweep is not supported (it would not be a simple polygon); use two halves.

function ellipseSectorPts(
  c: Point,
  rxIn: number,
  ryIn: number,
  rxOut: number,
  ryOut: number,
  a0: number,
  a1: number,
  seg?: number,
): Point[];

Parameters

ParameterTypeDescription
cPoint
rxInnumber
ryInnumber
rxOutnumber
ryOutnumber
a0number
a1number
segoptionalnumber

Default 24

Returns

@openseat/core/src/templates/kit/geometry.ts

function

endStageShow

An end-stage standing show: the stage, a fan pit at the stage front (1.6/m², behind a security moat), a barrier line, the general standing floor (1.4/m²) wrapped round the pit as one U-shaped area with the FOH desk cut out (its area is not counted), the FOH desk itself (an obstacle) and an accessible viewing platform (0.5/m²) at the back of the floor.

function endStageShow(
  kit: TemplateKitApi,
  opts: EndStageShowOptions,
): EndStageShowResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsEndStageShowOptions

Returns

@openseat/core/src/templates/kit/builders/ground.ts

function

fanHouse

A fan-shaped house: concentric bands (price bands, front to back) of arc sections, one per wedge. Each band's front row sits behind the previous band's back row (plus gapAfterM); rows continue across bands.

function fanHouse(
  kit: TemplateKitApi,
  opts: FanHouseOptions,
): FanHouseResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsFanHouseOptions

Returns

@openseat/core/src/templates/kit/builders/seating.ts

function

findParam

A param spec by key, or undefined.

function findParam(
  setup: Pick<SetupDefinition, "params">,
  key: string,
): ParamSpec | undefined;

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "params">
keystring

Returns

ParamSpec | undefined

@openseat/core/src/templates/params.ts

function

fitCapacity

Finds the driver value whose capacity best matches target, by binary search over the driver's step grid (capacity must be non-decreasing in it). Uses capacity.estimate when present, buildTemplate summaries otherwise (about 8 builds at most, memoised). A target above the max returns the max with a note; below the min returns the min with a note.

function fitCapacity(
  setupOrId: string | SetupDefinition,
  target: number,
  opts?: FitCapacityOptions,
): FitCapacityResult;

Parameters

ParameterTypeDescription
setupOrIdstring | SetupDefinition
targetnumber
optsoptionalFitCapacityOptions

Default {}

Returns

@openseat/core/src/templates/capacity.ts

function

fnv1a

32-bit FNV-1a hash of a string.

function fnv1a(text: string): number;

Parameters

ParameterTypeDescription
textstring

Returns

number

@openseat/core/src/templates/params.ts

function

gaCapacityForArea

Planning capacity of a standing area: floor((area − deduct) × density), at least 1. boundaryUnits is in layout units (unitsPerMetre per metre).

function gaCapacityForArea(
  boundaryUnits: readonly Point[],
  personsPerM2: number,
  unitsPerMetre?: number,
  deductM2?: number,
): number;

Parameters

ParameterTypeDescription
boundaryUnitsreadonly Point[]
personsPerM2number
unitsPerMetreoptionalnumber

Default TEMPLATE_UNITS_PER_METRE

deductM2optionalnumber

Default 0

Returns

number

@openseat/core/src/templates/kit/geometry.ts

function

gates

Entrances: explicit gates, and/or north/south/east/west gates spread evenly along the walls of wallsM. Gates on the east and west walls are rotated 90 degrees. Labels continue ${labelPrefix}${n} across the walls (north, east, south, west).

function gates(
  kit: TemplateKitApi,
  opts: GatesOptions,
): BuilderResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsGatesOptions

Returns

@openseat/core/src/templates/kit/builders/infra.ts

function

getManifestSetup

A manifest setup (implemented or not) by its full id.

function getManifestSetup(
  id: string,
): (ManifestSetup & { readonly venueId: string }) | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

(ManifestSetup & { readonly venueId: string; }) | undefined

@openseat/core/src/templates/registry.ts

function

getSetup

An implemented setup by its full id.

function getSetup(id: string): VenueSetupTemplate | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

VenueSetupTemplate | undefined

@openseat/core/src/templates/registry.ts

function

getVenue

function getVenue(id: string): VenueTemplate | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

VenueTemplate | undefined

@openseat/core/src/templates/registry.ts

function

getVenueManifest

function getVenueManifest(id: string): VenueManifest | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

VenueManifest | undefined

@openseat/core/src/templates/registry.ts

function

inflateRect

A rectangle grown by d on every side (normalised corners).

function inflateRect(r: RectM, d: number): RectM;

Parameters

ParameterTypeDescription
rRectM
dnumber

Returns

@openseat/core/src/templates/kit/builders/infra.ts

function

isCategoryVocabId

function isCategoryVocabId(id: string): id is CategoryVocabId;

Parameters

ParameterTypeDescription
idstring

Returns

@openseat/core/src/templates/vocab.ts

function

isCompleteParams

True when values has an entry for every param of the setup.

function isCompleteParams(
  setup: Pick<SetupDefinition, "params">,
  values: ParamValues,
): boolean;

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "params">
valuesParamValues

Returns

boolean

@openseat/core/src/templates/params.ts

function

isHeavySetup

True for setups that get the reduced matrix: flagged heavy, or estimated above 8k seats by default.

function isHeavySetup(
  setup: Pick<SetupDefinition, "heavy" | "capacity" | "params">,
): boolean;

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "heavy" | "capacity" | "params">

Returns

boolean

@openseat/core/src/templates/params.ts

function

joinVenueTemplates

Joins the manifest with the implemented setup definitions. Every venue is returned; setups holds its implemented setups only, in manifest order.

function joinVenueTemplates(
  manifest: readonly VenueManifest[],
  definitions: readonly SetupDefinition[],
): VenueTemplate[];

Parameters

ParameterTypeDescription
manifestreadonly VenueManifest[]
definitionsreadonly SetupDefinition[]

Returns

@openseat/core/src/templates/registry.ts

function

listVenues

Venues in registry order. By default venues with no implemented setup are hidden.

function listVenues(opts?: {
  readonly implementedOnly?: boolean;
  readonly categoryId?: TemplateCategoryId;
}): VenueTemplate[];

Parameters

ParameterTypeDescription
optsoptional{ readonly implementedOnly?: boolean; readonly categoryId?: TemplateCategoryId; }

Default {}

Returns

@openseat/core/src/templates/registry.ts

function

m

Metres to layout units, rounded to 1e-3.

function m(metres: number): number;

Parameters

ParameterTypeDescription
metresnumber

Returns

number

@openseat/core/src/templates/kit/units.ts

function

mergedAliases

A venue's aliases with the owner's names merged in centrally: the list-A names it is PRIMARY for and its list-B subtype names. Boost venues do not get the list-A name (search scores them separately).

function mergedAliases(venue: VenueManifest): string[];

Parameters

ParameterTypeDescription
venueVenueManifest

venue takes VenueManifest:

Returns

string[]

@openseat/core/src/templates/registry.ts

function

mulberry32

mulberry32 PRNG: deterministic floats in [0, 1).

function mulberry32(seed: number): () => number;

Parameters

ParameterTypeDescription
seednumber

Returns

() => number

@openseat/core/src/templates/params.ts

function

nextRowStart

The row label index that follows rows rows starting at start with the kit's alpha labelling (I and O skipped), so a price band behind another continues its letters: nextRowStart(1, 3) = 4 (A-C, then D).

function nextRowStart(start: number, rows: number): number;

Parameters

ParameterTypeDescription
startnumber
rowsnumber

Returns

number

@openseat/core/src/templates/kit/builders/infra.ts

function

normaliseTokens

Normalised, stemmed tokens of a text, stop words dropped.

function normaliseTokens(text: string): string[];

Parameters

ParameterTypeDescription
textstring

Returns

string[]

@openseat/core/src/templates/search.ts

function

paramCombos

Named param combinations for the build matrix. Every combo is fully resolved and in range; identical combos are dropped (the first name wins).

Light setups: default, small, large, all-min, all-max, maxCapacity, minCapacity, each numeric param alone at min and at max, each enum option, each boolean flipped, and 6 seeded randoms. Heavy setups: default, small, large, maxCapacity, each param extreme with the rest at default, each enum option, and 4 seeded randoms. Randoms use mulberry32 seeded with FNV-1a of the setup id.

function paramCombos(
  setup: Pick<
    SetupDefinition,
    "id" | "params" | "sizes" | "heavy" | "capacity"
  >,
  opts?: ParamCombosOptions,
): ParamCombo[];

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "id" | "params" | "sizes" | "heavy" | "capacity">
optsoptionalParamCombosOptions

Default {}

Returns

@openseat/core/src/templates/params.ts

function

paramSweep

n evenly spaced on-grid values of an int/number param, min and max included.

function paramSweep(
  spec: ParamSpec & { kind: "int" | "number" },
  n: number,
): number[];

Parameters

ParameterTypeDescription
specParamSpec & { kind: "int" | "number"; }
nnumber

Returns

number[]

@openseat/core/src/templates/params.ts

function

placeTemplate

Places built into target.

replace: the template's layout under the target's id and revision, with metadata = the target's other metadata plus the template's openseat block; the canvas follows the template FRAME rule (venue and objects plus 40, then fitCanvasToContent). removedInventoryIds lists every target inventory key the template does not have, for the editor's destructive-change guard.

insert (built on core's copyInto):

  • object ids become ${ns}:${id}, ns the first free of t1, t2…;
  • a section label that clashes (case-insensitively) with an existing one gets (2), (3)…, and its seats' public ids are re-derived from it (${label}-${row}-${seat}, the rule seats added later follow);
  • other inventory keys are kept unless they clash, then become ${ns}-${key};
  • categories merge by id (existing ones win); not-for-sale categories, suggested prices, not-for-sale ids and block stamps are merged with their ids remapped; the template stamp is appended to inserts (the last 20 are kept);
  • the content is centred on at, or else placed right of the existing content (the arena preset rule); the target's venue and focal point stay;
  • the canvas grows with fitCanvasToContent.

zonesOnly places the template's zone variant in either mode.

function placeTemplate(
  target: LayoutDocument,
  built: BuiltTemplate,
  opts: PlaceTemplateOptions,
): PlaceTemplateResult;

Parameters

ParameterTypeDescription
targetLayoutDocument
builtBuiltTemplate
optsPlaceTemplateOptions

Returns

@openseat/core/src/templates/place.ts

function

ptU

A metre point in layout units.

function ptU(p: Point): Point;

Parameters

ParameterTypeDescription
pPoint

Returns

@openseat/core/src/templates/kit/units.ts

function

rdpSimplify

Ramer-Douglas-Peucker simplification of an open polyline; keeps both ends. Iterative.

function rdpSimplify(
  points: readonly Point[],
  tol: number,
): Point[];

Parameters

ParameterTypeDescription
pointsreadonly Point[]
tolnumber

Returns

@openseat/core/src/templates/kit/geometry.ts

function

rectFromM

A rectangle's centre, width, height and corners (clockwise from the top-left). Corners may come in any order.

function rectFromM(r: RectM): {
  center: Point;
  width: number;
  height: number;
  points: Point[];
};

Parameters

ParameterTypeDescription
rRectM

r takes RectM:

Returns

{ center: Point; width: number; height: number; points: Point[]; }

@openseat/core/src/templates/kit/geometry.ts

function

rectM

A rectangle from its centre and size (metres).

function rectM(cx: number, cy: number, w: number, h: number): RectM;

Parameters

ParameterTypeDescription
cxnumber
cynumber
wnumber
hnumber

Returns

@openseat/core/src/templates/kit/builders/infra.ts

function

rectPts

Corners of a w x h rectangle centred on the origin, clockwise from the top-left.

function rectPts(w: number, h: number): Point[];

Parameters

ParameterTypeDescription
wnumber
hnumber

Returns

@openseat/core/src/templates/kit/geometry.ts

function

rectUnion

Smallest rectangle containing every given rectangle; a zero rect at the origin for none.

function rectUnion(rects: readonly RectM[]): RectM;

Parameters

ParameterTypeDescription
rectsreadonly RectM[]

Returns

@openseat/core/src/templates/kit/builders/infra.ts

function

regenerateBlock

Rebuilds block blockId with params (merged over the stamp's params).

The block is rebuilt in a sub-kit with the stamp's prefix and frame, translated by the drift of the surviving members' centroid (so a block the user moved regenerates where it now is). Per slot:

  • an existing member keeps its object id (the inventory key of a whole-booked table), its booth inventoryId, its seats' object and seat ids (by seat number), their accessibility flags and its label (labels only follow the new numbering when a label param changed and the user had not renamed the member); its category and bookAsWhole follow the new params unless the user had changed them;
  • a member the user deleted is recreated (under its old id when free);
  • a slot that no longer exists is removed with its seats and reported in removedInventoryIds (also when a kept table loses seats). New members get labels that do not clash with kept ones. The stamp (params, frame and slots) and metadata.openseat.notForSale are updated, and vocab categories the new members use are added. An unknown block id returns the layout unchanged.
function regenerateBlock(
  layout: LayoutDocument,
  blockId: string,
  params: ParamValues,
): RegenerateBlockResult;

Parameters

ParameterTypeDescription
layoutLayoutDocument
blockIdstring
paramsParamValues

Returns

@openseat/core/src/templates/kit/builders/blocks.ts

function

resolveParams

Resolves the params of a build: defaults, then the size preset, then input. Numbers are snapped to their step, then clamped; a bad type or enum value falls back to the default with an issue; unknown keys are dropped. Never throws.

function resolveParams(
  setup: Pick<SetupDefinition, "params" | "sizes">,
  input?: Readonly<Record<string, unknown>> | null,
  size?: TemplateSize,
): ResolvedParams;

Parameters

ParameterTypeDescription
setupPick<SetupDefinition, "params" | "sizes">
inputoptionalReadonly<Record<string, unknown>> | null
sizeoptionalTemplateSize

Default "default"

Returns

@openseat/core/src/templates/params.ts

function

round3

Rounds to 3 decimals, without -0.

function round3(value: number): number;

Parameters

ParameterTypeDescription
valuenumber

Returns

number

@openseat/core/src/templates/kit/units.ts

function

runway

A runway show: the main stage (north) with a ramp running south from its front centre, drawn as one thrust stage (with a T crossbar at the head when shape is "T"), the audience on both sides of the ramp (seated sections facing it, with optional front price rows, or standing bands), a press photo pit at the ramp head (not for sale), the judges' table beyond it (not for sale) and a backstage zone (a polygon, no inventory) behind the stage.

function runway(
  kit: TemplateKitApi,
  opts?: RunwayOptions,
): RunwayResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsoptionalRunwayOptions

Default {}

Returns

@openseat/core/src/templates/kit/builders/stagecraft.ts

function

schematicToSvg

The schematic as a standalone SVG string. Presentation attributes only (fill, stroke, stroke-width, fill-opacity): no style attributes or elements, so it renders under a strict Content-Security-Policy.

function schematicToSvg(
  s: TemplateSchematic,
  opts?: { readonly title?: string },
): string;

Parameters

ParameterTypeDescription
sTemplateSchematic
optsoptional{ readonly title?: string; }

Default {}

Returns

string

@openseat/core/src/templates/schematic.ts

function

searchTemplates

Searches venue templates. Pure and deterministic. An empty query lists every venue in registry order (score 0). facet keeps venues with at least one setup of that facet and scores only those setups.

function searchTemplates(
  rawQuery: string,
  opts?: TemplateSearchOptions,
): TemplateSearchHit[];

Parameters

ParameterTypeDescription
rawQuerystring
optsoptionalTemplateSearchOptions

Default {}

Returns

Example

templates.ts
// A separate, lazy entry point: buyer pages never load it.
const { buildTemplate, searchTemplates } = await import("@openseat/core/templates");

const [hit] = searchTemplates("farewell banquet", { limit: 1 }); // social.banquet-hall.rounds-dance

const { layout, summary } = buildTemplate("performance.auditorium.annual-day", null, {
  name: "Annual Day 2026",
  targetCapacity: 400, // fits rows to the audience
  zonesOnly: false, // true: "Sections only (no seats)", sold by quantity
});
summary.totalCapacity; // 408
summary.notes; // every clamp, in plain words

Recipe: start from a venue template

@openseat/core/src/templates/search.ts

function

sellableColourProblems

Problems with a set of sellable category colours: missing, malformed, near-grey, or too close to another sellable colour. Empty when fine.

function sellableColourProblems(
  categories: readonly {
    readonly id: string;
    readonly colour?: string | undefined;
  }[],
): string[];

Parameters

ParameterTypeDescription
categoriesreadonly { readonly id: string; readonly colour?: string | undefined; }[]

Returns

string[]

@openseat/core/src/templates/vocab.ts

function

snapParam

Snaps to the spec's step grid, THEN clamps to [min, max]; ints are rounded.

function snapParam(
  spec: ParamSpec & { kind: "int" | "number" },
  value: number,
): number;

Parameters

ParameterTypeDescription
specParamSpec & { kind: "int" | "number"; }
valuenumber

Returns

number

@openseat/core/src/templates/params.ts

function

standAlong

A stand of count identical block sections side by side, facing the line through focus from side (convention C4: row A nearest the line, seat 1 at the spectator's left). Labels run left to right from the spectator's view: labels[i], else ${labelPrefix}${i + 1}.

function standAlong(
  kit: TemplateKitApi,
  opts: StandAlongOptions,
): SeatingResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsStandAlongOptions

Returns

@openseat/core/src/templates/kit/builders/seating.ts

function

stemToken

Light plural stemming: ies -> y, (s|x|z|ch|sh)es -> drop es, s -> drop s.

function stemToken(word: string): string;

Parameters

ParameterTypeDescription
wordstring

Returns

string

@openseat/core/src/templates/search.ts

function

summarizeLayout

Counts for the template gallery and the build summary, derived from the objects alone, so they also work on a layout the user has edited:

  • seats: every seat object, table seats included; tableSeats: seats owned by a table.
  • Not for sale: seats, GA places and whole tables in a category listed in metadata.openseat.unsellableCategories (the vocabulary's not-for-sale categories when the layout lists none), or covered by metadata.openseat.notForSale (unsellableInventory). unsellableSeats counts those seats; totalCapacity is the sellable seats plus the sellable GA capacity (booths are not people).
  • Zone sections (showSeats: false) sell their capacity instead of their seats: totalCapacity counts the capacity of each one that is for sale, and unsellableSeats the seats beyond it (all of them when the zone is held back). Seats, tables, accessible places and the per-category seat counts still count the seats kept in the document, so a setup's seat and zone variants report the same figures. zones counts zone sections plus GA areas.
  • accessible: wheelchair seats plus the capacity of GA areas in the "accessible" category.
  • cautions: GA areas planned above 1.5 persons/m² and layouts above TEMPLATE_LIMITS.largeLayoutWarn seats. notes is empty here; buildTemplate adds the kit's clamp notes.
function summarizeLayout(
  layout: LayoutDocument,
  upm?: number,
): TemplateSummary;

Parameters

ParameterTypeDescription
layoutLayoutDocument
upmoptionalnumber

Default TEMPLATE_UNITS_PER_METRE

Returns

@openseat/core/src/templates/summary.ts

function

summaryMeasure

Reads measure from a build summary.

function summaryMeasure(
  summary: TemplateSummary,
  measure: CapacitySpec["measure"],
): number;

Parameters

ParameterTypeDescription
summaryTemplateSummary
measureCapacitySpec["measure"]

Returns

number

@openseat/core/src/templates/capacity.ts

function

templateSchematic

The schematic of layout in a width x height viewBox (default 320 x 200), fitted with a 4-unit margin. roles (BuiltTemplate.roles) tells surfaces, markings, zones and obstacles apart; without it polygon zIndex decides. At most SCHEMATIC_MAX_BYTES serialised.

function templateSchematic(
  layout: LayoutDocument,
  roles?: ReadonlyMap<string, ObjectRole>,
  opts?: TemplateSchematicOptions,
): TemplateSchematic;

Parameters

ParameterTypeDescription
layoutLayoutDocument
rolesoptionalReadonlyMap<string, ObjectRole>
optsoptionalTemplateSchematicOptions

Default {}

Returns

@openseat/core/src/templates/schematic.ts

function

theatreBlocks

A theatre house: columns (left to right from the audience) times tiers (price bands, front to back), each a separate block section. Rows continue across tiers (VIP A-C, Gold D-P…); a cross aisle may separate tiers. Wheelchair places go in the front row of the first tier, sized for each column's seats in every tier.

function theatreBlocks(
  kit: TemplateKitApi,
  opts: TheatreBlocksOptions,
): TheatreBlocksResult;

Parameters

ParameterTypeDescription
kitTemplateKitApi
optsTheatreBlocksOptions

Returns

@openseat/core/src/templates/kit/builders/seating.ts

function

tidyPoint

A point rounded to 1e-3.

function tidyPoint(p: Point): Point;

Parameters

ParameterTypeDescription
pPoint

Returns

@openseat/core/src/templates/kit/units.ts

function

toMetres

Layout units to metres, rounded to 1e-3.

function toMetres(units: number, unitsPerMetre?: number): number;

Parameters

ParameterTypeDescription
unitsnumber
unitsPerMetreoptionalnumber

Default TEMPLATE_UNITS_PER_METRE

Returns

number

@openseat/core/src/templates/kit/units.ts

function

uPolygon

A rectangle with a rectangular notch cut into one of its edges (a U shape), e.g. a standing area wrapped around a front-of-house desk. The notch is clipped to the outer rectangle and cut from the edge it is nearest to. A notch that does not overlap the outer rectangle, or that would split it, leaves the plain rectangle.

function uPolygon(outer: RectM, notch: RectM): Point[];

Parameters

ParameterTypeDescription
outerRectM
notchRectM

Returns

@openseat/core/src/templates/kit/geometry.ts

function

valueFits

True when value is a valid, in-range, on-grid value of spec.

function valueFits(spec: ParamSpec, value: unknown): boolean;

Parameters

ParameterTypeDescription
specParamSpec
valueunknown

Returns

boolean

@openseat/core/src/templates/registry.ts

function

vocabEntry

The vocab entry for an id, or undefined for ids outside the vocab.

function vocabEntry(id: string): CategoryVocabEntry | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

CategoryVocabEntry | undefined

@openseat/core/src/templates/vocab.ts

function

zoneTemplateLayout

The zone variant of a built template layout:

  1. core toZoneOnlyLayout: loose rows, tables and seats are wrapped into sections, and every section with seats becomes a zone section;
  2. each zone section sells what its seats sold: its capacity defaults to its seat count, and becomes the number of its sellable seats when some were not for sale; a section with no sellable seat is listed in metadata.openseat.notForSale (unless its category already holds it back), and a section held back only by its category while some of its seats sold takes their most common sellable category instead;
  3. zone sections get rounded corners (ZONE_CORNER_RADIUS_M); the sections core added are rounded to 1e-3 like every template coordinate;
  4. when every zone is seated (no standing GA), the footnote ZONES_SEATED_FOOTNOTE is centred under the content (core createFootnote, sized to the content width), and the canvas grows to fit it;
  5. the template stamp records zonesOnly: true.

Seats themselves are never changed, so the sellable capacity equals the seat variant's. A layout that is already a zone layout is returned as is.

function zoneTemplateLayout(layout: LayoutDocument): LayoutDocument;

Parameters

ParameterTypeDescription
layoutLayoutDocument

Returns

@openseat/core/src/templates/zones.ts

Classes2

class

TemplateInputError

Thrown for out-of-range input that cannot be clamped (unknown setup, limits).

class TemplateInputError extends RangeError

Extends RangeError: its public members apply here too.

Members

MemberTypeDescription
constructorconstructor(message: string)

@openseat/core/src/templates/types.ts

class

TemplateKit

class TemplateKit implements TemplateKitApi

Members

MemberTypeDescription
prefixstring
U50
constructorconstructor(prefix: string)
idmethod(local: string) => string

${prefix}-${local}; throws on reuse (a programmer error only).

categorymethod(id: CategoryVocabId) => string

Registers a vocab category (name and colour from the vocab) and returns its id.

notemethod(msg: string) => void
cautionmethod(msg: string) => void
notForSalemethod(ids: readonly string[]) => void

Marks objects individually Not for sale (metadata.openseat.notForSale).

blockmethod(p: KitBlockParams) => string
arcmethod(p: KitArcParams) => string
arcRunmethod(p: KitArcRunParams) => string[]
arenamethod(p: KitArenaParams) => { sectionIds: string[]; byTier: string[][]; }
roundTablemethod(p: KitRoundTableParams) => string
rectTablemethod(p: KitRectTableParams) => string
boothmethod(p: KitBoothParams) => string
boothGridmethod(p: KitBoothGridParams) => string[]
stagemethod(p: KitStageParams) => string

A stage: the theme's light-grey stage look (any fill or stroke is ignored) unless it is a sports surface (markings, or field: true), with an optional shape (thrust, round or semicircle) inside rectM.

gamethod(p: KitGaParams) => string
polygonmethod(p: KitPolygonParams) => string
decormethod(p: KitPolygonParams) => string

A polygon with no inventory (zones, furniture). Role defaults to 'decor'.

pathmethod(p: KitPathParams) => string
labelmethod(p: KitLabelParams) => string
entrancemethod(p: KitEntranceParams) => string
venuemethod(p: KitVenueParams) => void
focalmethod(at: PtM) => void
setCategorymethod(ids: readonly string[], cat: CategoryVocabId) => void
setRowCategorymethod(sectionId: string, rows: readonly string[], cat: CategoryVocabId) => void

For 1-2 special rows only; seats added later take the section category.

flagSeatsmethod(sectionId: string, rowLabel: string, seatLabels: readonly string[], flags: Partial<Accessibility>) => void
removeSectionsmethod(pred: (s: Section) => boolean) => number
sectionsmethod() => readonly Section[]
sectionFromSelectionmethod(ids: readonly string[], opts: { label: string; shape?: "hull" | "bounds"; paddingM?: number; }) => string | null

Wraps existing objects (rows, tables, seats, GA areas) in a new seatless section through core's createSectionFromSelection, outline "bounds" by default, and gives it a kit id (sec-<label slug>, so it carries the build prefix). Returns the section id, or null when nothing could be wrapped.

recordBlockmethod(kind: BlockKind, label: string, params: ParamValues, frameM: { originM: PtM; rotation: number; }, slots: Record<string, string>) => string

Records a regenerable block; returns the block stamp id.

finishmethod() => TemplateDraft

Every member is readonly.

@openseat/core/src/templates/kit/kit.ts

Interfaces110

interface

AccessibleZoneOptions

interface AccessibleZoneOptions

Members

MemberTypeDescription
rectMRectM
placesoptionalnumber

Wheelchair places (capacity cap); the area at 0.5/m² bounds it.

labeloptionalstring

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

AmenityOptions

interface AmenityOptions

Members

MemberTypeDescription
kindAmenityKind
rectMRectM
labeloptionalstring

Defaults to the kind's name, e.g. "Toilets".

solidoptionalboolean

Draws it as an obstacle seats can never overlap. Defaults: bar, buffet, foh, dj, screen.

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

ArcWedgesOptions

interface ArcWedgesOptions

Members

MemberTypeDescription
centerPtM
innerRadiusMnumber
rowsnumber
fromnumber

Run start and end angles (degrees).

tonumber
countnumber

Wedges; clamped by the kit so each is at least 1 degree.

gangwayMoptionalnumber

Gangway between wedges at the front row. Default 1.2.

Default 1.2

labelsoptionalreadonly string[]
labelPrefixoptionalstring

Default "Block ".

Default "Block "

categoryCategoryVocabId
seatoptionalSeatPresetName
seatSpacingMoptionalnumber
rowSpacingMoptionalnumber
rowStartoptionalnumber
edgeMarginMoptionalnumber
accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

AthleticsTrackOptions

interface AthleticsTrackOptions

Members

MemberTypeDescription
atoptionalPtM
lanesoptionalnumber

Lanes; clamped to 4-10. Default 8.

Default 8

laneWidthMoptionalnumber

Lane width; default 1.22.

straightMoptionalnumber

Straight length; default 84.39.

bendRadiusMoptionalnumber

Inner (kerb) bend radius; default 36.5.

infieldoptional"football" | "grass" | "none"

Infield: a football pitch, plain grass or nothing. Default "football".

Default "football"

finishoptionalboolean

Draws the finish line. Default true.

Default true

sprintExtensionoptionalboolean

Extends the home straight (east side) for the 100 m start. Default true.

Default true

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

AthleticsTrackResult

interface AthleticsTrackResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
surfaceIdstring
outerHalfWidthMnumber

Half extents of the outer lane edge (east-west, north-south).

outerHalfHeightMnumber
bendRadiusMnumber

Outer lane edge bend radius.

outerMRectM
idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BanquetRoundsOptions

interface BanquetRoundsOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
zoneMRectM
sizeoptional"T60" | "T72"

T60 (1.52 m, 8-10 seats, pitch 3.4 m) or T72 (1.83 m, 10-12 seats, pitch 3.7 m). Default "T60".

Default "T60"

seatsPerTableoptionalnumber

Seats per table, clamped to the size's range.

keepOutsMoptionalreadonly ShapeM[]
clearMoptionalnumber
countoptionalnumber
centreAisleMoptionalnumber
frontSideoptionalCompassSide
pitchMoptionalnumber

Overrides the size's pitch.

labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BattleRingOptions

interface BattleRingOptions

Members

MemberTypeDescription
centeroptionalPtM
flooroptional"circle" | "square"

Circular or square cypher floor. Default "circle".

Default "circle"

floorSizeMoptionalnumber

Floor diameter or side; clamped to 6-16. Default 10.

Default 10

sidesoptional3 | 4 | "arc"

Audience on 3 sides (judges' side open), 4 sides, or an arc. Default 3.

Default 3

arcDegreesoptionalnumber

Arc sweep in degrees when sides is "arc"; clamped to 90-300. Default 200.

Default 200

audienceoptional"seated" | "standing" | "mixed"

Seated rows, standing bands, or seated front rows with standing behind. Default "seated".

Default "seated"

rowsoptionalnumber

Seated rows per side; clamped to 1-20. Default 5.

Default 5

seatoptionalSeatPresetName
categoryoptionalCategoryVocabId
standingCategoryoptionalCategoryVocabId
standingDepthMoptionalnumber

Standing band depth. Default 5.

Default 5

setbackMoptionalnumber

Floor edge to the first row. Default 1.5.

Default 1.5

judgesoptionalnumber

Judges' seats (not for sale) at a table on the north side; clamped to 1-9. Default 3.

Default 3

djoptionalboolean

DJ booth decor beside the judges. Default true.

Default true

crewZoneoptionalboolean

Crew holding zone (no inventory) in the north-east corner. Default true.

Default true

accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BattleRingResult

interface BattleRingResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
floorIdstring
sectionIdsreadonly string[]
standingIdsreadonly string[]
judgesTableIdstring
djIdoptionalstring
crewZoneIdoptionalstring
extentMRectM
idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BlockKindSpec

One block kind: its panel label, the params the panel shows, and its build.

interface BlockKindSpec

Members

MemberTypeDescription
labelstring
paramsreadonly ParamSpec[]

Panel params (a subset of the stored params; the rest are kept as recorded).

labelKeysreadonly string[]

Params that decide labels: changing one relabels members the user did not rename.

buildmethod(kit: TemplateKitApi, params: ParamValues, frameM: { originM: PtM; rotation: number; }) => Record<string, string>

Builds the block in frameM (metres) and returns slot key -> object id.

Every member is readonly.

@openseat/core/src/templates/kit/builders/blocks.ts

interface

BoolParam

interface BoolParam extends ParamBase

Extends ParamBase

Members

MemberTypeDescription
kind"boolean"
defaultboolean
keystring

From ParamBase

labelstring

From ParamBase

helpoptionalstring

From ParamBase

groupoptionalParamGroup

From ParamBase

advancedoptionalboolean

Shown under the "Advanced" disclosure.

From ParamBase

visibleWhenoptional{ readonly key: string; readonly equals: ParamValue; }

Hidden unless another param has this value.

From ParamBase

capacityEffectoptional"up" | "down" | "none"

Direction capacity moves when this param grows; drives the maxCapacity/minCapacity combos.

From ParamBase

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

BoothBandOptions

interface BoothBandOptions extends BoothBlockCommon

Extends BoothBlockCommon

Members

MemberTypeDescription
centerMPtM

Centre of the whole band.

columnsPerBlocknumber

Booths per block row; clamped to 1-30.

blocksnumber

Blocks side by side, separated by cross aisles; clamped to 1-10.

pairsnumber

Back-to-back pairs of booth rows, separated by main aisles; clamped to 1-10.

boothWMoptionalnumber

Booth size; default 3 x 3.

boothHMoptionalnumber
crossAisleMoptionalnumber

Aisle between blocks. Default 3.

Default 3

mainAisleMoptionalnumber

Aisle between pairs. Default 3.

Default 3

labelLettersoptionalstring

Row letters, one per booth row; default "ABCDEFGH…". Labels are ${letter}${n}.

rotationoptionalnumber

Rotation of the whole band about its centre.

categoryCategoryVocabId

From BoothBlockCommon

cornerCategoryoptionalCategoryVocabId

Category of the booths at block-row ends (corner stalls).

From BoothBlockCommon

sellableoptionalboolean

Booths have inventory (sold as a unit). Default true.

From BoothBlockCommon

Default true

blockLabeloptionalstring

From BoothBlockCommon

recordoptionalboolean

From BoothBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BoothBlockCommon

interface BoothBlockCommon

Members

MemberTypeDescription
categoryCategoryVocabId
cornerCategoryoptionalCategoryVocabId

Category of the booths at block-row ends (corner stalls).

sellableoptionalboolean

Booths have inventory (sold as a unit). Default true.

Default true

blockLabeloptionalstring
recordoptionalboolean

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BoothBlockResult

interface BoothBlockResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
boothIdsreadonly string[]
blockIdoptionalstring
extentMRectM

Outer extent of the booths (axis-aligned, before rotation).

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BoothGridOptions

interface BoothGridOptions extends BoothBlockCommon

Extends BoothBlockCommon

Members

MemberTypeDescription
centerMPtM
columnsnumber
rowsnumber
boothWMoptionalnumber
boothHMoptionalnumber
gapXMoptionalnumber
gapYMoptionalnumber
labelPrefixoptionalstring

Labels are ${labelPrefix}${n}; default "B".

labelStartoptionalnumber
rotationoptionalnumber
categoryCategoryVocabId

From BoothBlockCommon

cornerCategoryoptionalCategoryVocabId

Category of the booths at block-row ends (corner stalls).

From BoothBlockCommon

sellableoptionalboolean

Booths have inventory (sold as a unit). Default true.

From BoothBlockCommon

Default true

blockLabeloptionalstring

From BoothBlockCommon

recordoptionalboolean

From BoothBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BoothRingOptions

interface BoothRingOptions extends BoothBlockCommon

Extends BoothBlockCommon

Members

MemberTypeDescription
centerPtM
rxMnumber

Ellipse radii the booths' inner edges touch.

ryMnumber
countnumber

Booths around the ring; clamped so neighbours never overlap.

boothWMoptionalnumber
boothHMoptionalnumber
startAngleoptionalnumber

Default 0 (first booth on the east).

sweepoptionalnumber

Default 360 (a closed ring).

labelPrefixoptionalstring
labelStartoptionalnumber
categoryCategoryVocabId

From BoothBlockCommon

cornerCategoryoptionalCategoryVocabId

Category of the booths at block-row ends (corner stalls).

From BoothBlockCommon

sellableoptionalboolean

Booths have inventory (sold as a unit). Default true.

From BoothBlockCommon

Default true

blockLabeloptionalstring

From BoothBlockCommon

recordoptionalboolean

From BoothBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

BuilderResult

What every builder returns: the ids it created, in creation order.

interface BuilderResult

Members

MemberTypeDescription
idsreadonlyreadonly string[]

@openseat/core/src/templates/kit/builders/index.ts

interface

BuildTemplateOptions

interface BuildTemplateOptions

Members

MemberTypeDescription
sizeoptionalTemplateSize
layoutIdoptionalstring

Defaults to template-<setup id with dots as dashes>.

Default template-<setup id with dots as dashes>

nameoptionalstring

Defaults to "<venue> - <setup>".

Default "<venue> - <setup>"

idPrefixoptionalstring

Object ID prefix; defaults to the setup's idPrefix ("preview" for gallery previews).

targetCapacityoptionalnumber

Fits the setup's capacity driver to this capacity first (fitCapacity).

zonesOnlyoptionalboolean

"Sections only (no seats)": every section becomes a zone sold by quantity (zoneTemplateLayout), with the same sellable capacity. Recorded in the stamp (zonesOnly: true) so re-runs keep it.

Every member is readonly.

@openseat/core/src/templates/build.ts

interface

BuiltTemplate

interface BuiltTemplate

Members

MemberTypeDescription
layoutLayoutDocument
summaryTemplateSummary
paramsParamValues
rolesReadonlyMap<string, ObjectRole>

Object id -> role. Never persisted.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

CabaretTablesOptions

interface CabaretTablesOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
zoneMRectM
radiusMoptionalnumber

Table radius; default 0.6 (a 1.2 m round).

seatsPerTableoptionalnumber

Seats per table, 2-8. Default 5.

Default 5

pitchMoptionalnumber
keepOutsMoptionalreadonly ShapeM[]
clearMoptionalnumber
countoptionalnumber
frontSideoptionalCompassSide
labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

CapacitySpec

interface CapacitySpec

Members

MemberTypeDescription
driverstring

Int param key; capacity must be non-decreasing in it.

measure"seats" | "ga" | "total" | "tableSeats" | "booths"

What fitCapacity targets: seats, GA capacity, sellable total, table seats or booths.

estimateoptionalmethod(p: ParamValues) => number

Fast, build-free estimate of measure (arenas use estimateArenaSeats).

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

CategoryVocabEntry

interface CategoryVocabEntry

Members

MemberTypeDescription
namestring
colourstring
sellableboolean
suggestedPriceINRoptionalnumber

Every member is readonly.

@openseat/core/src/templates/vocab.ts

interface

CheckRegistryOptions

interface CheckRegistryOptions

Members

MemberTypeDescription
phaseoptional1 | 2

Phase gate: every category that has at least one implemented setup must implement all of its manifest setups with phase <= this value.

completeoptionalboolean

Every manifest setup must be implemented (final integration).

definitionsoptionalreadonly SetupDefinition[]

Defaults to the real definitions.

manifestoptionalreadonly VenueManifest[]

Defaults to VENUE_MANIFEST.

Default VENUE_MANIFEST

Every member is readonly.

@openseat/core/src/templates/registry.ts

interface

ColumnGridOptions

interface ColumnGridOptions

Members

MemberTypeDescription
zoneMRectM
pitchXMnumber
pitchYMoptionalnumber
sizeMoptionalnumber

Column side. Default 0.6.

Default 0.6

skipMoptionalreadonly RectM[]

Columns inside these are skipped (e.g. a stage).

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

ColumnGridResult

interface ColumnGridResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
columnsMreadonly RectM[]

Each column's rectangle, for table keep-outs.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

CourtOptions

Common options of the court and pitch builders.

interface CourtOptions

Members

MemberTypeDescription
atoptionalPtM

Centre of the playing area. Defaults to (0, 0).

verticaloptionalboolean

Long axis north-south instead of east-west.

asoptionalSurfaceAs

Defaults to "stage" for courts (basketball, volleyball, kabaddi, badminton, tennis) and "polygon" for pitches.

withSurroundoptionalboolean

Adds the run-off surround (a surface polygon under the court). Defaults to true.

Default true

labeloptionalstring

Surface label; defaults to the sport's name.

filloptionalstring

Surface fill colour; defaults per sport.

markingsoptionalboolean

Adds line markings (paths). Defaults to true.

Default true

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

CricketGroundOptions

interface CricketGroundOptions

Members

MemberTypeDescription
atoptionalPtM
boundaryRadiusMoptionalnumber

Boundary radius along the pitch (north-south), metres; clamped to 45-90. Default 65.

Default 65

ratiooptionalnumber

Across-pitch radius as a fraction of the along-pitch one (0.8-1); default 0.92.

sightScreensoptionalboolean

Sight screens beyond the boundary at both ends. Default true.

Default true

pavilionoptionalboolean

Pavilion block outside the boundary on the west. Default false.

Default false

markingsoptionalboolean

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

CricketGroundResult

interface CricketGroundResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
surfaceIdstring
rxMnumber

Half extents of the boundary oval (east-west, north-south).

ryMnumber
outerMRectM

Outermost extent of everything drawn (sight screens, pavilion).

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

DanceFloorOptions

interface DanceFloorOptions

Members

MemberTypeDescription
centerMPtM
widthMnumber
depthMnumber
labeloptionalstring
djoptionalCompassSide | false

Adds a DJ booth (decor) on this side of the floor.

standingoptionalboolean

Sells the floor as standing (GA at 1.0/m²) instead of drawing decor. Default false.

Default false

categoryoptionalCategoryVocabId

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

DanceFloorResult

interface DanceFloorResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
floorIdstring
djIdoptionalstring
keepOutMRectM

Floor plus DJ booth: pass as a table keep-out.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

DeskRunsOptions

interface DeskRunsOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
zoneMRectM

Zone the desks fill; the board/stage is on frontSide.

deskWidthMoptionalnumber

Desk width (along the row) and depth. Defaults 1.2 x 0.6.

deskDepthMoptionalnumber
seatsPerDeskoptionalnumber

Students per desk, 1-3. Default 2.

Default 2

desksPerRunoptionalnumber

Desks side by side in one run before an aisle. Default 3.

Default 3

aisleMoptionalnumber

Aisle between runs. Default 1.0.

Default 1.0

rowPitchMoptionalnumber

Row pitch (desk front to desk front). Default 1.6.

Default 1.6

rowsoptionalnumber

Rows / runs wanted (0 = as many as fit).

runsoptionalnumber
countoptionalnumber

Desks wanted (0 or absent = every desk); the last row is trimmed centre-out.

frontSideoptionalCompassSide
labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

EndStageShowOptions

interface EndStageShowOptions

Members

MemberTypeDescription
stageRectMRectM

The stage; the audience is on its side.

sideoptionalCompassSide

Side of the stage the audience floor is on. Default "south".

Default "south"

stageLabeloptionalstring
floorMRectM

The whole standing floor in front of the stage (pit included).

pitoptionalfalse | { readonly depthM: number; readonly widthM?: number; readonly density?: number; readonly label?: string; }

Fan pit at the stage front, at 1.6/m² ('fan-pit'). Omit or false for none.

moatMoptionalnumber

Gap between the stage front and the pit (security moat). Default 1.5.

Default 1.5

barrierGapMoptionalnumber

Gap between pit and general (barrier line). Default 1.

Default 1

densityoptionalnumber

General standing density. Default 1.4 (DENSITY.standing).

generalLabeloptionalstring
generalCategoryoptionalCategoryVocabId
fohoptionalfalse | { readonly widthM?: number; readonly depthM?: number; readonly atFraction?: number; }

FOH desk (an obstacle) cut out of the general area, atFraction of the floor depth from the stage. Default on.

accessibleoptionalboolean

Accessible viewing platform (GA, 0.5/m²) at a side of the floor. Default on.

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

EndStageShowResult

interface EndStageShowResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
stageIdstring
pitIdoptionalstring
generalIdstring
fohIdoptionalstring
accessibleIdoptionalstring
idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

EnumParam

Rendered as a radio segmented control (never a native select).

interface EnumParam extends ParamBase

Extends ParamBase

Members

MemberTypeDescription
kind"enum"
optionsreadonly { readonly value: string; readonly label: string; }[]
defaultstring
keystring

From ParamBase

labelstring

From ParamBase

helpoptionalstring

From ParamBase

groupoptionalParamGroup

From ParamBase

advancedoptionalboolean

Shown under the "Advanced" disclosure.

From ParamBase

visibleWhenoptional{ readonly key: string; readonly equals: ParamValue; }

Hidden unless another param has this value.

From ParamBase

capacityEffectoptional"up" | "down" | "none"

Direction capacity moves when this param grows; drives the maxCapacity/minCapacity combos.

From ParamBase

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

EventFacet

interface EventFacet

Members

MemberTypeDescription
idEventFacetId
labelstring

Chip label, e.g. "Party/DJ".

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

FanBand

interface FanBand

Members

MemberTypeDescription
rowsnumber
categoryCategoryVocabId
labeloptionalstring

Band label used in section labels, e.g. "Stalls" -> "Stalls Left".

gapAfterMoptionalnumber

Gap after this band (cross aisle). Default 0.

Default 0

rowSpacingMoptionalnumber
seatoptionalSeatPresetName
rowPrefixoptionalstring

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

FanHouseOptions

interface FanHouseOptions

Members

MemberTypeDescription
centerPtM

Arc centre (usually just behind the stage front).

firstRadiusMnumber

Radius of the first band's front row.

wedgesreadonly FanWedge[]
bandsreadonly FanBand[]
seatoptionalSeatPresetName
seatSpacingMoptionalnumber
edgeMarginMoptionalnumber
rowStartoptionalnumber
accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

FanHouseResult

interface FanHouseResult extends SeatingResult

Extends SeatingResult

Members

MemberTypeDescription
byBandreadonly (readonly string[])[]

Section ids per band, then per wedge.

outerRadiusMnumber

Radius of the outermost row, metres.

sectionIdsreadonly string[]

Section ids, in creation order.

From SeatingResult

depthMnumber

Total depth (front row to back row edge) of the seating, metres.

From SeatingResult

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

FanWedge

interface FanWedge

Members

MemberTypeDescription
fromnumber

Start and end angles (degrees, screen convention), end > start.

tonumber
labelstring

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

FieldResult

Result of a court or pitch builder.

interface FieldResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
surfaceIdstring

The playing surface (stage or polygon).

playMRectM

The playing area (without surround).

outerMRectM

Playing area plus surround: keep seats outside this.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

FitCapacityOptions

interface FitCapacityOptions

Members

MemberTypeDescription
baseoptionalParamValues

Params the search starts from (other than the driver). Defaults to the setup defaults.

sizeoptionalTemplateSize
measureoptional(params: ParamValues) => number

Measures one candidate. Defaults to capacity.estimate when present, otherwise a buildTemplate summary. Tests and fixtures may inject one.

Every member is readonly.

@openseat/core/src/templates/capacity.ts

interface

FitCapacityResult

interface FitCapacityResult

Members

MemberTypeDescription
paramsRecord<string, ParamValue>

Resolved params with the driver set.

achievednumber

Capacity (in capacity.measure) at the chosen driver value.

minnumber

Capacity at the driver's min and max.

maxnumber
exactboolean

achieved === target.

buildsnumber

Real builds made (estimates and memo hits are free).

estimatedboolean

True when achieved came from capacity.estimate rather than a build.

driverstring
notesreadonly string[]

Every member is readonly.

@openseat/core/src/templates/capacity.ts

interface

FootballPitchOptions

interface FootballPitchOptions extends CourtOptions

Extends CourtOptions

Members

MemberTypeDescription
lengthMoptionalnumber

Touchline length; clamped to 50-110. Default 105.

Default 105

widthMoptionalnumber

Goal-line width; clamped to 30-75. Default 68.

Default 68

formatoptional"11" | "7" | "5"

"5" draws a 5-a-side turf: no penalty arcs, smaller boxes.

atoptionalPtM

Centre of the playing area. Defaults to (0, 0).

From CourtOptions

verticaloptionalboolean

Long axis north-south instead of east-west.

From CourtOptions

asoptionalSurfaceAs

Defaults to "stage" for courts (basketball, volleyball, kabaddi, badminton, tennis) and "polygon" for pitches.

From CourtOptions

withSurroundoptionalboolean

Adds the run-off surround (a surface polygon under the court). Defaults to true.

From CourtOptions

Default true

labeloptionalstring

Surface label; defaults to the sport's name.

From CourtOptions

filloptionalstring

Surface fill colour; defaults per sport.

From CourtOptions

markingsoptionalboolean

Adds line markings (paths). Defaults to true.

From CourtOptions

Default true

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

GatesOptions

interface GatesOptions

Members

MemberTypeDescription
gatesoptionalreadonly GateSpec[]

Explicit gates.

wallsMoptionalRectM

Or gates spread evenly on the walls of this rectangle.

northoptionalnumber
southoptionalnumber
eastoptionalnumber
westoptionalnumber
widthMoptionalnumber

Default 3.

Default 3

labelPrefixoptionalstring

Default "Gate ".

Default "Gate "

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

GateSpec

interface GateSpec

Members

MemberTypeDescription
labeloptionalstring
atMPtM
widthMoptionalnumber
rotationoptionalnumber

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

IntParam

interface IntParam extends ParamBase

Extends ParamBase

Members

MemberTypeDescription
kind"int"
minnumber
maxnumber
defaultnumber
stepoptionalnumber

Defaults to 1. (max - min) must be a multiple of it.

Default 1

unitoptional"rows" | "seats" | "sections" | "tables" | "booths" | "courts" | "count" | "persons"
keystring

From ParamBase

labelstring

From ParamBase

helpoptionalstring

From ParamBase

groupoptionalParamGroup

From ParamBase

advancedoptionalboolean

Shown under the "Advanced" disclosure.

From ParamBase

visibleWhenoptional{ readonly key: string; readonly equals: ParamValue; }

Hidden unless another param has this value.

From ParamBase

capacityEffectoptional"up" | "down" | "none"

Direction capacity moves when this param grows; drives the maxCapacity/minCapacity combos.

From ParamBase

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

IslandGridOptions

interface IslandGridOptions extends BoothBlockCommon

Extends BoothBlockCommon

Members

MemberTypeDescription
centerMPtM
columnsnumber
rowsnumber
islandWMoptionalnumber

Island size; default 6 x 6.

islandHMoptionalnumber
aisleMoptionalnumber

Aisle between islands. Default 4.

Default 4

labelPrefixoptionalstring

Default "Island ".

Default "Island "

categoryCategoryVocabId

From BoothBlockCommon

cornerCategoryoptionalCategoryVocabId

Category of the booths at block-row ends (corner stalls).

From BoothBlockCommon

sellableoptionalboolean

Booths have inventory (sold as a unit). Default true.

From BoothBlockCommon

Default true

blockLabeloptionalstring

From BoothBlockCommon

recordoptionalboolean

From BoothBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

KabaddiCourtOptions

interface KabaddiCourtOptions extends CourtOptions

Extends CourtOptions

Members

MemberTypeDescription
formatoptional"men" | "women"

Men 13 x 10 m, women 12 x 8 m. Default "men".

Default "men"

atoptionalPtM

Centre of the playing area. Defaults to (0, 0).

From CourtOptions

verticaloptionalboolean

Long axis north-south instead of east-west.

From CourtOptions

asoptionalSurfaceAs

Defaults to "stage" for courts (basketball, volleyball, kabaddi, badminton, tennis) and "polygon" for pitches.

From CourtOptions

withSurroundoptionalboolean

Adds the run-off surround (a surface polygon under the court). Defaults to true.

From CourtOptions

Default true

labeloptionalstring

Surface label; defaults to the sport's name.

From CourtOptions

filloptionalstring

Surface fill colour; defaults per sport.

From CourtOptions

markingsoptionalboolean

Adds line markings (paths). Defaults to true.

From CourtOptions

Default true

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

KitAccessible

Wheelchair positions: count seats flagged at the ends of the front or back row.

interface KitAccessible

Members

MemberTypeDescription
row"front" | "back"
countnumber

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitArcParams

interface KitArcParams extends KitSeatingCommon

Extends KitSeatingCommon

Members

MemberTypeDescription
labelstring
centerMPtM
innerRadiusMnumber
rowsnumber
startAnglenumber

Degrees, screen convention (0 = east, 90 = south); endAngle > startAngle.

endAnglenumber
edgeMarginMoptionalnumber
rowSeatsoptionalreadonly number[]
seatoptionalSeatPresetName

Seat preset; defaults to "chair".

From KitSeatingCommon

seatSpacingMoptionalnumber

Overrides the preset's seat spacing.

From KitSeatingCommon

rowSpacingMoptionalnumber

Overrides the preset's row spacing.

From KitSeatingCommon

rowStartoptionalnumber

First row label index (1 = A); price bands continue it, e.g. 4 = D.

From KitSeatingCommon

rowPrefixoptionalstring

From KitSeatingCommon

seatStartoptionalnumber

First seat number. Defaults to 1.

From KitSeatingCommon

Default 1

categoryCategoryVocabId

From KitSeatingCommon

labelSizeMoptionalnumber

Section label font size in metres.

From KitSeatingCommon

accessibleoptionalKitAccessible

From KitSeatingCommon

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitArcRunParams

interface KitArcRunParams extends Omit<
  KitArcParams,
  "label" | "startAngle" | "endAngle"
>

Extends Omit<KitArcParams, "label" | "startAngle" | "endAngle">

Members

MemberTypeDescription
fromnumber

Run start angle (degrees).

tonumber

Run end angle (degrees), > from.

countnumber

Number of wedges.

gangwayMnumber

Gangway width between wedges, measured at the INNER (front) radius.

labelsreadonly string[]

One label per wedge.

seatoptional"chair" | "stand" | "bleacher" | "vip" | "flat" | "bench" | "desk" | "sofa" | "beanbag"

Seat preset; defaults to "chair".

From KitSeatingCommon

rowsnumber

From KitArcParams

rowSeatsoptionalreadonly number[]

From KitArcParams

categoryCategoryVocabId

From KitSeatingCommon

centerMPoint

From KitArcParams

innerRadiusMnumber

From KitArcParams

edgeMarginMoptionalnumber

From KitArcParams

seatSpacingMoptionalnumber

Overrides the preset's seat spacing.

From KitSeatingCommon

rowSpacingMoptionalnumber

Overrides the preset's row spacing.

From KitSeatingCommon

rowStartoptionalnumber

First row label index (1 = A); price bands continue it, e.g. 4 = D.

From KitSeatingCommon

rowPrefixoptionalstring

From KitSeatingCommon

seatStartoptionalnumber

First seat number. Defaults to 1.

From KitSeatingCommon

Default 1

labelSizeMoptionalnumber

Section label font size in metres.

From KitSeatingCommon

accessibleoptionalKitAccessible

From KitSeatingCommon

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitArenaParams

interface KitArenaParams

Members

MemberTypeDescription
centerPtM
field{ readonly widthM: number; readonly heightM: number; readonly cornerRadiusM: number; readonly label?: string; }
fieldKindArenaFieldKind
fieldAs"stage" | "polygon" | "none"

'stage' keeps the generator's field stage; 'polygon' replaces it with a locked surface polygon; 'none' drops it.

fieldFilloptionalstring
tiersreadonly KitArenaTier[]
numberingoptionalArenaNumbering
removeBehindoptional{ readonly side: CompassSide; readonly beyondM: number; }

Removes (with contents) every section whose centroid lies more than beyondM from center on side.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitArenaTier

interface KitArenaTier

Members

MemberTypeDescription
labeloptionalstring
firstNumbernumber
rowsnumber
seatoptionalSeatPresetName

Seat preset for the tier. The kit defaults to 'stand'.

rowSpacingMoptionalnumber
seatSpacingMoptionalnumber
gapMnumber

From the field edge (tier 0) or the previous tier.

sectionsPerLongSidenumber
sectionsPerShortSidenumber
sectionsPerCornernumber
extraCornerSectionsoptionalreadonly [ number, number, number, number ]
aisleWidthMnumber
categoryCategoryVocabId

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitBlockParams

interface KitBlockParams extends KitSeatingCommon

Extends KitSeatingCommon

Members

MemberTypeDescription
labelstring

Unique within the build; also the public seat-id prefix.

centerMoptionalPtM

Section origin (block centre) in metres. Use this or frontM.

frontMoptional{ readonly focus: PtM; readonly distance: number; readonly side: CompassSide; readonly along?: number; }

Places the block on side of focus with its front row distance metres away, facing the focus; along shifts it sideways (metres, +x for north/south, +y for east/west).

rotationoptionalnumber

Degrees; overrides the rotation implied by frontM.side.

rowsnumber
seatsPerRownumber
rowSeatsoptionalreadonly number[]

Ragged block: slots per row, front row first.

frontRadiusMoptionalnumber

Radius of the front row's arc in metres; converted and CLAMPED into blockCurvatureRange with a note.

aislesoptionalreadonly number[]

Slot indices after which an aisle opens.

aisleWidthMoptionalnumber
alignoptional"left" | "center" | "right"
seatoptionalSeatPresetName

Seat preset; defaults to "chair".

From KitSeatingCommon

seatSpacingMoptionalnumber

Overrides the preset's seat spacing.

From KitSeatingCommon

rowSpacingMoptionalnumber

Overrides the preset's row spacing.

From KitSeatingCommon

rowStartoptionalnumber

First row label index (1 = A); price bands continue it, e.g. 4 = D.

From KitSeatingCommon

rowPrefixoptionalstring

From KitSeatingCommon

seatStartoptionalnumber

First seat number. Defaults to 1.

From KitSeatingCommon

Default 1

categoryCategoryVocabId

From KitSeatingCommon

labelSizeMoptionalnumber

Section label font size in metres.

From KitSeatingCommon

accessibleoptionalKitAccessible

From KitSeatingCommon

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitBoothGridParams

interface KitBoothGridParams

Members

MemberTypeDescription
originMPtM

Centre of the first (top-left) booth.

columnsnumber
rowsnumber
widthMnumber
heightMnumber
gapXMnumber
gapYMnumber
rotationoptionalnumber
labelPrefixoptionalstring

Label is ${labelPrefix}${n}; defaults to "B".

startoptionalnumber
categoryCategoryVocabId
cornerCategoryoptionalCategoryVocabId

Category of the four grid corners (e.g. 'stall-corner').

sellableoptionalboolean

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitBoothParams

interface KitBoothParams

Members

MemberTypeDescription
labelstring
centerMPtM
widthMnumber
heightMnumber
rotationoptionalnumber
categoryCategoryVocabId
sellableoptionalboolean

Sold as a unit (gets an inventoryId). Defaults to true.

Default true

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitEntranceParams

interface KitEntranceParams

Members

MemberTypeDescription
labeloptionalstring
atMPtM
widthMnumber
rotationoptionalnumber

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitGaParams

interface KitGaParams

Members

MemberTypeDescription
labelstring
boundaryMreadonly PtM[]
densitynumber

Persons per m² (kit/seats.ts DENSITY values).

deductM2optionalnumber

Area (m²) deducted before applying the density, e.g. FOH or columns.

maxCapacityoptionalnumber
categoryCategoryVocabId
filloptionalstring
zIndexoptionalnumber
bigLabeloptionalboolean

Kept for compatibility: a GA area's own centred zone label is its title, so no second big label is added.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitLabelAvoidSeats

How KitLabelParams.avoidSeats may move and shrink a label.

interface KitLabelAvoidSeats

Members

MemberTypeDescription
nudgeoptionalPtM

Direction to move the label in (any length; normalised).

maxNudgeMoptionalnumber

Furthest the label may move along nudge, in metres. Default 0.

Default 0

minFontSizeMoptionalnumber

Smallest font size, in metres. Default 1.

Default 1

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitLabelParams

interface KitLabelParams

Members

MemberTypeDescription
textstring
atPtM
fontSizeMnumber
rotationoptionalnumber
colouroptionalstring
boldoptionalboolean
avoidSeatsoptionalKitLabelAvoidSeats

Keeps the text off seats. When the finished layout has the label's box over a drawn seat, finish() shrinks it (down to minFontSizeM, default 1 m) and moves it along nudge (up to maxNudgeM, default 0) until it is clear, and leaves the label out when nothing fits. A label already clear is left exactly as given.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitPathParams

interface KitPathParams

Members

MemberTypeDescription
nameoptionalstring
pointsMreadonly PtM[]
closedoptionalboolean
strokeWidthMnumber
zIndexoptionalnumber
roleoptionalObjectRole

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitPolygonParams

interface KitPolygonParams

Members

MemberTypeDescription
nameoptionalstring
pointsMreadonly PtM[]
filloptionalstring
strokeoptionalstring
zIndexoptionalnumber
lockedoptionalboolean

Defaults to true for surfaces and markings.

roleoptionalObjectRole

Defaults: polygon() 'surface', decor() 'decor'. Use 'obstacle' for columns, 'zone' for crew areas.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitRectTableParams

interface KitRectTableParams

Members

MemberTypeDescription
labelstring
centerMPtM
widthMnumber
heightMnumber
rotationoptionalnumber
seatsPerEdge{ readonly top?: number; readonly right?: number; readonly bottom?: number; readonly left?: number; }

Clamped so edge / (n + 1) >= seat spacing (note recorded).

seatoptionalSeatPresetName
seatOffsetMoptionalnumber
categoryCategoryVocabId
bookAsWholeoptionalboolean

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitRoundTableParams

interface KitRoundTableParams

Members

MemberTypeDescription
labelstring
centerMPtM
radiusMnumber
seatsnumber
seatoptionalSeatPresetName
seatDistanceMoptionalnumber

Table centre to seat centre. Defaults to radius + seat radius + 0.15 m.

startAngleoptionalnumber
categoryCategoryVocabId
bookAsWholeoptionalboolean

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitStageParams

interface KitStageParams

Members

MemberTypeDescription
labeloptionalstring
rectMRectM

The stage's box; a thrust, round or semicircle outline fits inside it.

cornerRadiusMoptionalnumber
shapeoptional"rect" | "thrust" | "round" | "semicircle"

Outline: "rect" (default), "thrust" (body plus a runway toward +y), "round" or "semicircle" (flat edge north).

thrustMoptional{ readonly width?: number; readonly depth?: number; }

Thrust only: runway width and depth in metres (defaults: 0.4 x width, 0.45 x height).

filloptionalstring

Fill and stroke apply only to a sports surface (markings set, or field: true); every other stage uses the theme's light-grey stage look.

strokeoptionalstring
fieldoptionalboolean

A sports field or court drawn as a stage (fields.ts as: "stage"): keeps its fill and stroke.

zIndexoptionalnumber
markingsoptional"rink" | "court" | "pitch"
bigLabeloptionalboolean

Kept for compatibility: a stage's own centred label is its title, so no second big label is added.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

KitVenueParams

interface KitVenueParams

Members

MemberTypeDescription
nameoptionalstring
showNameoptionalboolean
shape"rect" | "ellipse"
centerMPtM
widthMnumber
heightMnumber
cornerRadiusMoptionalnumber
filloptionalstring
strokeoptionalstring

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

LoungeRowOptions

interface LoungeRowOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
centerMPtM

Centre of the row.

countnumber

Lounge sets in the row; clamped to 1-60.

alongoptional"x" | "y"

Row direction. Default "x".

Default "x"

tableWidthMoptionalnumber

Coffee table size. Defaults 1.2 x 0.6.

tableDepthMoptionalnumber
seatsPerSideoptionalnumber

Sofa places on each long side, 1-4. Default 2.

Default 2

gapMoptionalnumber

Gap between sets. Default 1.2.

Default 1.2

labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

ManifestSetup

interface ManifestSetup

Members

MemberTypeDescription
keystring

Full template id <cat>.<venue>.<setup>.

idPrefixstring

Unique short object-id prefix, /^[a-z][a-z0-9]{1,4}$/.

namestring
eventsreadonly string[]
tagsreadonly string[]
facetsreadonly EventFacetId[]
phase1 | 2

1 = milestone M1 (built first), 2 = later.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

NumberParam

interface NumberParam extends ParamBase

Extends ParamBase

Members

MemberTypeDescription
kind"number"
minnumber
maxnumber
defaultnumber
stepnumber

(max - min) must be a multiple of it (epsilon 1e-9).

unit"m" | "deg" | "persons/m2" | "m2/person"
keystring

From ParamBase

labelstring

From ParamBase

helpoptionalstring

From ParamBase

groupoptionalParamGroup

From ParamBase

advancedoptionalboolean

Shown under the "Advanced" disclosure.

From ParamBase

visibleWhenoptional{ readonly key: string; readonly equals: ParamValue; }

Hidden unless another param has this value.

From ParamBase

capacityEffectoptional"up" | "down" | "none"

Direction capacity moves when this param grows; drives the maxCapacity/minCapacity combos.

From ParamBase

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

OpenSeatMeta

layout.metadata.openseat. A metadata convention only; no schema change. Serialised size must stay <= TEMPLATE_LIMITS.maxMetaBytes.

interface OpenSeatMeta

Members

MemberTypeDescription
unitsPerMetre50
templateoptionalTemplateStamp
insertsoptionalTemplateStamp[]

At most 20.

blocksoptionalRecord<string, TemplateBlockStamp>
unsellableCategoriesoptionalstring[]

Vocab ids with sellable:false that the layout uses.

suggestedPricesoptional{ currency: "INR"; byCategory: Record<string, number>; }

Indicative placeholders only; never host prices.

notForSaleoptionalstring[]

Object ids individually marked Not for sale. A section, row or table also covers its member seats. Every id must exist in the layout.

pricesoptional{ currency: string; byCategory: Record<string, string>; }

Host price snapshot written by the editor's JSON export and read back on Import.

@openseat/core/src/templates/types.ts

interface

OwnerListAEntry

One entry of the owner's list A (college event venues), verbatim and in the owner's order.

interface OwnerListAEntry

Members

MemberTypeDescription
namestring

The owner's venue name, e.g. "Auditoriums".

eventsreadonly string[]

The owner's event phrases, e.g. ["Annual days", "cultural fests", ...].

eventLinestring

The owner's event line verbatim, e.g. "Annual days, cultural fests, talent shows, and competitions."

primaryVenueIdstring

Venue id the entry opens; search scores it 120.

boostVenueIdsreadonly string[]

Other venues that also serve the entry; search scores them 90.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

OwnerListBEntry

One row of the owner's list B (main category and its venue subtypes), verbatim.

interface OwnerListBEntry

Members

MemberTypeDescription
categorystring

The owner's main category name, e.g. "Sports".

categoryIdTemplateCategoryId
subtypesreadonly { readonly name: string; readonly venueId: string; }[]

The owner's subtype names (verbatim), each mapped to a distinct venue.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

ParamCombo

A resolved, named parameter combination (the build matrix runs every one).

interface ParamCombo

Members

MemberTypeDescription
namestring

E.g. "default", "large", "rows=max", "random#3". Used in failure messages.

paramsParamValues
sizeoptionalTemplateSize

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

ParamCombosOptions

interface ParamCombosOptions

Members

MemberTypeDescription
heavyoptionalreadonlyboolean

Overrides the heavy detection.

@openseat/core/src/templates/params.ts

interface

PlaceTemplateOptions

Puts a built template into an existing layout: "replace" swaps the whole document for the template (keeping its id and revision), "insert" adds the template next to what is there, in its own id namespace.

interface PlaceTemplateOptions

Members

MemberTypeDescription
mode"replace" | "insert"
atoptionalPoint

Insert: centre of the inserted content, in layout units. Default: right of the existing content.

gapMoptionalnumber

Insert: gap between the existing content and the template (metres). Default 2 grid cells' worth.

titleoptionalstring

Replace: the layout's new name. Default: the template's name.

zonesOnlyoptionalboolean

"Sections only (no seats)": places the template's zone variant (zoneTemplateLayout; a template built with zonesOnly already is one).

Every member is readonly.

@openseat/core/src/templates/place.ts

interface

PlaceTemplateResult

interface PlaceTemplateResult

Members

MemberTypeDescription
layoutLayoutDocument
insertedIdsreadonly string[]

Top-level ids of the inserted objects (insert), or every top-level id (replace).

namespacestring

Insert: the id namespace (t1, t2…); object ids are ${namespace}:${templateId}. Replace: "".

relabelledSectionsreadonly { readonly id: string; readonly from: string; readonly to: string; }[]

Sections whose label clashed and got a (n) suffix (their seats' public ids follow the new label).

relabelledTablesreadonly { readonly id: string; readonly from: string; readonly to: string; }[]

Tables whose label clashed and got a (n) suffix (table labels key their seats' labels).

mergedCategoriesreadonly string[]

Template categories that already existed (the existing one wins).

addedCategoriesreadonly string[]

Template categories added to the layout.

removedInventoryIdsreadonly string[]

Inventory keys of the target that no longer exist (replace only; insert removes nothing).

notesreadonly string[]

Every member is readonly.

@openseat/core/src/templates/place.ts

interface

PoolLanesOptions

interface PoolLanesOptions

Members

MemberTypeDescription
atoptionalPtM
lengthMoptionalnumber

Pool length; clamped to 20-50. Default 50.

Default 50

lanesoptionalnumber

Lanes; clamped to 4-10. Default 8.

Default 8

laneWidthMoptionalnumber

Lane width; default 2.5.

deckMoptionalnumber

Deck around the water; default 3.

verticaloptionalboolean

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

PoolLanesResult

interface PoolLanesResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
surfaceIdstring
waterMRectM
outerMRectM

Water plus deck: keep seats outside this.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

RectM

An axis-aligned rectangle in metres, by its min and max corners.

interface RectM

Members

MemberTypeDescription
x0number
y0number
x1number
y1number

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

RectTableSpec

interface RectTableSpec

Members

MemberTypeDescription
kind"rect"
widthMnumber
heightMnumber
seatsPerEdge{ readonly top?: number; readonly right?: number; readonly bottom?: number; readonly left?: number; }
seatoptionalSeatPresetName
seatOffsetMoptionalnumber

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

RegenerateBlockResult

interface RegenerateBlockResult

Members

MemberTypeDescription
layoutLayoutDocument
addednumber

Members created (new slots and recreated missing members).

removednumber

Members removed (slots that no longer exist).

keptnumber

Members kept (same object id).

removedInventoryIdsreadonly string[]

Inventory that disappeared: seat seatIds, booth inventoryIds and whole-table object ids.

Every member is readonly.

@openseat/core/src/templates/kit/builders/blocks.ts

interface

ResolvedParams

interface ResolvedParams

Members

MemberTypeDescription
paramsRecord<string, ParamValue>
issuesstring[]

Clamps, snaps, fallbacks and dropped keys, for the summary notes.

Every member is readonly.

@openseat/core/src/templates/params.ts

interface

RoundTableSpec

interface RoundTableSpec

Members

MemberTypeDescription
kind"round"
radiusMnumber
seatsnumber
seatDistanceMoptionalnumber
seatoptionalSeatPresetName

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

RunwayOptions

interface RunwayOptions

Members

MemberTypeDescription
originMoptionalPtM

Main stage front centre (the ramp starts here and runs south). Default (0, 0).

shapeoptional"T" | "straight"

"T" adds a crossbar platform at the ramp head. Default "T".

Default "T"

stageWidthMoptionalnumber
stageDepthMoptionalnumber
rampLengthMoptionalnumber

Ramp length; clamped to 6-40. Default 16.

Default 16

rampWidthMoptionalnumber

Ramp width; clamped to 1.2-4. Default 2.4.

Default 2.4

crossWidthMoptionalnumber

T crossbar width and depth. Defaults 7.2 x 2.4.

crossDepthMoptionalnumber
audienceoptional"seated" | "standing"

Audience on both sides: seated rows or standing GA. Default "seated".

Default "seated"

rowsoptionalnumber

Seated rows per side; clamped to 1-30. Default 6.

Default 6

frontRowsoptionalnumber

Front rows per side in frontCategory (separate sections). Default 0.

Default 0

frontCategoryoptionalCategoryVocabId
categoryoptionalCategoryVocabId
seatoptionalSeatPresetName
setbackMoptionalnumber

Ramp edge to front row / standing edge. Default 1.5.

Default 1.5

standingDepthMoptionalnumber

Standing band depth per side. Default 6.

Default 6

photoPitoptionalboolean

Press photo pit (not for sale) at the ramp head. Default true.

Default true

photoPitDepthMoptionalnumber
backstageoptionalboolean

Backstage zone (no inventory) behind the main stage. Default true.

Default true

backstageDepthMoptionalnumber
judgesoptionalnumber

Judges (not for sale) at a table beyond the photo pit; 0 = none. Default 3.

Default 3

accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

RunwayResult

interface RunwayResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
stageIdstring
rampIdsreadonly string[]
sectionIdsreadonly string[]
standingIdsreadonly string[]
photoPitIdoptionalstring
backstageIdoptionalstring
judgesTableIdoptionalstring
extentMRectM

Everything the builder drew.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

SchematicShape

interface SchematicShape

Members

MemberTypeDescription
kindSchematicKind
dstring

SVG path data in viewBox units.

filloptionalstring

#rrggbb, or absent for no fill.

strokeoptionalstring
strokeWidthoptionalnumber
opacityoptionalnumber

Fill opacity, 0-1.

Every member is readonly.

@openseat/core/src/templates/schematic.ts

interface

SeatingResult

interface SeatingResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
sectionIdsreadonly string[]

Section ids, in creation order.

depthMnumber

Total depth (front row to back row edge) of the seating, metres.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

SeatPreset

Seat presets and crowd densities used by template builders.

A preset's shape is in layout units (50 per metre), ready for the schema; seatSpacingM and rowSpacingM are centre distances in metres. Every preset leaves at least 1 unit of clearance between neighbouring seats at its own spacings.

interface SeatPreset

Members

MemberTypeDescription
shapeSeatShape
seatSpacingMnumber
rowSpacingMnumber

Every member is readonly.

@openseat/core/src/templates/kit/seats.ts

interface

SetupDefinition

interface SetupDefinition<P extends ParamValues = ParamValues>

Members

MemberTypeDescription
idstring

Must exist in VENUE_MANIFEST.

versionnumber

Bump on every builder change that alters output.

descriptionstring
paramsreadonly ParamSpec[]
sizesoptional{ readonly small?: Partial<P>; readonly large?: Partial<P>; }
capacityCapacitySpec
heavyoptionalboolean

Heavy setups get a reduced build matrix and a 30 s test timeout.

researchRefoptionalstring
buildmethod(params: P, kit: TemplateKitApi) => void

Must not throw for ANY in-range params: clamp and kit.note() instead.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

StandAlongOptions

interface StandAlongOptions

Members

MemberTypeDescription
focusPtM

A point on the line the stand faces (pitch edge, stage front).

sideCompassSide

Which side of the focus the stand sits on.

frontMnumber

Distance from the focus line to the front row, metres.

countnumber

Sections side by side; clamped to 1-40.

seatsPerRownumber
rowsnumber
seatoptionalSeatPresetName
seatSpacingMoptionalnumber
rowSpacingMoptionalnumber
gangwayMoptionalnumber

Gangway between neighbouring sections. Default 1.2.

Default 1.2

alongMoptionalnumber

Shifts the whole stand along the line (metres; +x for north/south, +y for east/west).

labelsoptionalreadonly string[]

One label per section; missing ones become ${labelPrefix}${n}.

labelPrefixoptionalstring

Default "Stand ".

Default "Stand "

categoryCategoryVocabId
rowStartoptionalnumber
frontRadiusMoptionalnumber

Front row radius (curved stand); clamped by the kit.

accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TableBlockCommon

Options shared by the table builders.

interface TableBlockCommon

Members

MemberTypeDescription
labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

Default "T"

labelStartoptionalnumber

First table number. Default 1.

Default 1

categoryCategoryVocabId
categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

recordoptionalboolean

Records a regenerable block stamp. Default true.

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TableGridOptions

interface TableGridOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
zoneMRectM

Zone the table footprints (table plus chairs) must stay inside.

tableTableSpec
pitchXMnumber

Centre-to-centre pitch across.

pitchYMoptionalnumber

Centre-to-centre pitch front to back. Defaults to pitchXM.

keepOutsMoptionalreadonly ShapeM[]

Footprints touching a keep-out inflated by clearM are dropped.

clearMoptionalnumber

Clearance around keep-outs. Default 0.5.

Default 0.5

countoptionalnumber

Tables wanted (0 or absent = every free cell). The last row is trimmed centre-out.

centreAisleMoptionalnumber

A centre aisle splitting the columns into two halves.

staggeroptionalboolean

Shifts every other row by half a pitch (cabaret sightlines).

frontSideoptionalCompassSide

Where the stage is: rows are numbered from that side. Default "north".

Default "north"

labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TableGridResult

interface TableGridResult extends BuilderResult

Extends BuilderResult

Members

MemberTypeDescription
tableIdsreadonly string[]

Table ids in label order (front to back, left to right).

blockIdoptionalstring

Block stamp id, when recorded.

rowsnumber
columnsnumber
seatsnumber

Total table seats.

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TeamTablesOptions

interface TeamTablesOptions extends TableBlockCommon

Extends TableBlockCommon

Members

MemberTypeDescription
zoneMRectM
tableWidthMoptionalnumber

Table size. Defaults 1.8 x 0.9.

tableDepthMoptionalnumber
seatsPerSideoptionalnumber

Seats on each long side, 1-6. Default 3.

Default 3

endSeatsoptionalboolean

A seat at each short end. Default false.

Default false

pitchXMoptionalnumber

Centre pitches; defaults leave about 1.2 m walkways.

pitchYMoptionalnumber
keepOutsMoptionalreadonly ShapeM[]
clearMoptionalnumber
countoptionalnumber
frontSideoptionalCompassSide
labelPrefixoptionalstring

Labels are ${labelPrefix}${n}. Default "T". Table labels must be unique across a layout's unsectioned tables (they key their seats' labels: validateLayout warns DUPLICATE_SEAT_LABEL), so a second grid needs another prefix or labelStart.

From TableBlockCommon

Default "T"

labelStartoptionalnumber

First table number. Default 1.

From TableBlockCommon

Default 1

categoryCategoryVocabId

From TableBlockCommon

categoryByRowoptionalreadonly CategoryVocabId[]

Categories of the first rows (front first), e.g. ["vip"]; later rows use category.

From TableBlockCommon

bookAsWholeoptionalboolean

Every table is booked as a whole (the table id is its inventory key). Default false.

From TableBlockCommon

Default false

blockLabeloptionalstring

Block label (block panel and stamp id). Defaults per builder.

From TableBlockCommon

recordoptionalboolean

Records a regenerable block stamp. Default true.

From TableBlockCommon

Default true

accessibleoptionalboolean | number

Wheelchair places at tables: true (default) flags max(1, ceil(seats x 0.5%)) seats when the kit supports table-seat flags; otherwise a note asks for an accessibleZone. false skips it.

From TableBlockCommon

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TemplateBlockStamp

A recorded, regenerable table or booth block.

interface TemplateBlockStamp

Members

MemberTypeDescription
kindBlockKind
labelstring
paramsParamValues
frame{ origin: Point; rotation: number; }
prefixstring
slotsRecord<string, string>

slotKey (e.g. "r0c3") -> object id.

@openseat/core/src/templates/types.ts

interface

TemplateCategory

interface TemplateCategory

Members

MemberTypeDescription
idTemplateCategoryId
namestring
descriptionstring
ordernumber

1-based gallery order.

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

TemplateDraft

What kit.finish() hands to buildTemplate (layout units, before the grid shift).

interface TemplateDraft

Members

MemberTypeDescription
objectsreadonly LayoutObject[]
categoriesreadonly Category[]

Referenced categories only, in first-use order.

venueoptionalVenue
focalPointoptionalPoint
rolesReadonlyMap<string, ObjectRole>
blocksReadonly<Record<string, TemplateBlockStamp>>
notForSalereadonly string[]
notesreadonly string[]
cautionsreadonly string[]

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

TemplateKitApi

interface TemplateKitApi

Members

MemberTypeDescription
prefixstring
U50
idmethod(local: string) => string

${prefix}-${local}; throws on reuse (a programmer error only).

categorymethod(id: CategoryVocabId) => string

Registers a vocab category (name and colour from the vocab) and returns its id.

blockmethod(p: KitBlockParams) => string
arcmethod(p: KitArcParams) => string
arcRunmethod(p: KitArcRunParams) => string[]
arenamethod(p: KitArenaParams) => { sectionIds: string[]; byTier: string[][]; }
roundTablemethod(p: KitRoundTableParams) => string
rectTablemethod(p: KitRectTableParams) => string
boothGridmethod(p: KitBoothGridParams) => string[]
boothmethod(p: KitBoothParams) => string
stagemethod(p: KitStageParams) => string
gamethod(p: KitGaParams) => string
polygonmethod(p: KitPolygonParams) => string
decormethod(p: KitPolygonParams) => string

A polygon with no inventory (zones, furniture). Role defaults to 'decor'.

pathmethod(p: KitPathParams) => string
labelmethod(p: KitLabelParams) => string
entrancemethod(p: KitEntranceParams) => string
venuemethod(p: KitVenueParams) => void
focalmethod(at: PtM) => void
setCategorymethod(ids: readonly string[], cat: CategoryVocabId) => void
setRowCategorymethod(sectionId: string, rows: readonly string[], cat: CategoryVocabId) => void

For 1-2 special rows only; seats added later take the section category.

flagSeatsmethod(sectionId: string, rowLabel: string, seatLabels: readonly string[], flags: Partial<Accessibility>) => void
removeSectionsmethod(pred: (s: Section) => boolean) => number
sectionsmethod() => readonly Section[]
sectionFromSelectionmethod(ids: readonly string[], opts: { label: string; shape?: "hull" | "bounds"; paddingM?: number; }) => string | null

Wraps existing objects (rows, tables, seats, GA areas) in a new seatless section through core's createSectionFromSelection, outline "bounds" by default, and gives it a kit id (sec-<label slug>, so it carries the build prefix). Returns the section id, or null when nothing could be wrapped.

recordBlockmethod(kind: BlockKind, label: string, params: ParamValues, frameM: { originM: PtM; rotation: number; }, slots: Record<string, string>) => string

Records a regenerable block; returns the block stamp id.

notForSalemethod(ids: readonly string[]) => void

Marks objects individually Not for sale (metadata.openseat.notForSale).

notemethod(msg: string) => void
cautionmethod(msg: string) => void
finishmethod() => TemplateDraft

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

TemplateSchematic

interface TemplateSchematic

Members

MemberTypeDescription
viewBoxstring

0 0 <width> <height>.

widthnumber
heightnumber
shapesreadonly SchematicShape[]

Back to front.

Every member is readonly.

@openseat/core/src/templates/schematic.ts

interface

TemplateSchematicOptions

interface TemplateSchematicOptions

Members

MemberTypeDescription
widthoptionalnumber
heightoptionalnumber

Every member is readonly.

@openseat/core/src/templates/schematic.ts

interface

TemplateSearchHit

interface TemplateSearchHit

Members

MemberTypeDescription
venueIdstring
setupIdoptionalstring

The best-scoring setup, when the hit came from a setup's name, events or tags.

scorenumber
matchedOnTemplateSearchMatch
matchedTextstring

The phrase that matched, e.g. "Auditoriums", for "Matched: …".

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

TemplateSearchOptions

interface TemplateSearchOptions

Members

MemberTypeDescription
categoryIdoptionalTemplateCategoryId
facetoptionalEventFacetId
limitoptionalnumber

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

TemplateStamp

How a layout was made: lets the gallery re-run it.

interface TemplateStamp

Members

MemberTypeDescription
idstring
versionnumber
paramsParamValues
sizeoptionalTemplateSize
targetCapacityoptionalnumber
zonesOnlyoptionalboolean

"Sections only (no seats)": every section is a zone (buildTemplate's zonesOnly). Absent: seats.

@openseat/core/src/templates/types.ts

interface

TemplateSummary

Summary of a built layout. Counting rules (checkTemplateLayout re-derives every count from the objects and requires equality):

  • sections, rows, tables, booths, gaAreas: objects of that type.
  • seats: ALL seat objects, including table seats. tableSeats: seats owned by a table.
  • gaCapacity: sum of GA capacities.
  • accessible: wheelchair-flagged seats + capacity of GA areas in the 'accessible' category.
  • unsellableSeats: seats that are not for sale, by the same rule as core's unsellableInventory: a not-for-sale category (meta.unsellableCategories, else vocab sellable:false) or an id listed in meta.notForSale (the seat itself, or its row, table or section).
  • totalCapacity: sellable seats + sellable GA capacity (booths are not people).
  • byCategory: one entry per layout category, in layout order.
interface TemplateSummary

Members

MemberTypeDescription
sectionsnumber
rowsnumber
seatsnumber
tablesnumber
tableSeatsnumber
boothsnumber
gaAreasnumber
gaCapacitynumber
accessiblenumber
unsellableSeatsnumber
totalCapacitynumber

Sellable people capacity (seats + GA + zone sections). Equal in a setup's seat and zone variants.

zonesnumber

Places sold by quantity: zone sections (showSeats: false) plus GA areas.

footprintM{ width: number; height: number; }
byCategoryreadonly { id: string; name: string; colour?: string; sellable: boolean; seats: number; gaCapacity: number; booths: number; tables: number; }[]
notesreadonly string[]

Clamps and other adjustments.

cautionsreadonly string[]

Density above 1.5/m², allowHighDensity, more than 10k seats.

@openseat/core/src/templates/types.ts

interface

TheatreBlocksOptions

interface TheatreBlocksOptions

Members

MemberTypeDescription
focusoptionalPtM

Stage-front centre. Default (0, 0).

sideoptionalCompassSide

Side of the focus the house sits on. Default "south".

Default "south"

rowAMoptionalnumber

Distance from the focus to row A. Default 3.

Default 3

columnsreadonly TheatreColumn[]

Columns left to right (from the audience's view); clamped to 1-12.

tiersreadonly TheatreTier[]

Price bands front to back; each is a separate section per column. Clamped to 1-8.

aisleMoptionalnumber

Aisle between columns. Default 1.2.

Default 1.2

crossAisleMoptionalnumber

Cross aisle between tiers. Default 0 (rows continue at the row spacing).

seatoptionalSeatPresetName
seatSpacingMoptionalnumber
frontRadiusMoptionalnumber

Curves every block's rows (radius of each block's front row).

rowStartoptionalnumber

First row label index (1 = A). Default 1.

Default 1

accessibleoptionalAccessibleOption

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TheatreBlocksResult

interface TheatreBlocksResult extends SeatingResult

Extends SeatingResult

Members

MemberTypeDescription
byTierreadonly (readonly string[])[]

Section ids per tier, then per column.

tierRowsreadonly (readonly string[])[]

Row labels of each tier, e.g. ["A".."C"], ["D".."P"].

sectionIdsreadonly string[]

Section ids, in creation order.

From SeatingResult

depthMnumber

Total depth (front row to back row edge) of the seating, metres.

From SeatingResult

idsreadonly string[]

From BuilderResult

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TheatreColumn

interface TheatreColumn

Members

MemberTypeDescription
seatsnumber
labeloptionalstring

Column label used in section labels, e.g. "Left".

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

TheatreTier

interface TheatreTier

Members

MemberTypeDescription
rowsnumber
categoryCategoryVocabId
labeloptionalstring

Tier label used in section labels, e.g. "VIP" -> "VIP Left".

seatoptionalSeatPresetName
rowSpacingMoptionalnumber

Every member is readonly.

@openseat/core/src/templates/kit/builders/index.ts

interface

VenueManifest

interface VenueManifest

Members

MemberTypeDescription
idstring

<cat>.<venue>.

categoryIdTemplateCategoryId
namestring
descriptionstring
aliasesreadonly string[]
footprintstring
capacityHintstring
relatedoptionalreadonly string[]

Setup ids of other venues the gallery also shows under this one.

phase1 | 2
setupsreadonly ManifestSetup[]

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

VenueSetupTemplate

interface VenueSetupTemplate extends SetupDefinition, ManifestSetup

Extends SetupDefinition, ManifestSetup

Members

MemberTypeDescription
venueIdstring
idstring

Must exist in VENUE_MANIFEST.

From SetupDefinition

versionnumber

Bump on every builder change that alters output.

From SetupDefinition

descriptionstring

From SetupDefinition

paramsreadonly ParamSpec[]

From SetupDefinition

sizesoptional{ readonly small?: Partial<Readonly<Record<string, ParamValue>>>; readonly large?: Partial<Readonly<Record<string, ParamValue>>>; }

From SetupDefinition

capacityCapacitySpec

From SetupDefinition

heavyoptionalboolean

Heavy setups get a reduced build matrix and a 30 s test timeout.

From SetupDefinition

researchRefoptionalstring

From SetupDefinition

buildmethod(params: P, kit: TemplateKitApi) => void

Must not throw for ANY in-range params: clamp and kit.note() instead.

From SetupDefinition

keystring

Full template id <cat>.<venue>.<setup>.

From ManifestSetup

idPrefixstring

Unique short object-id prefix, /^[a-z][a-z0-9]{1,4}$/.

From ManifestSetup

namestring

From ManifestSetup

eventsreadonly string[]

From ManifestSetup

tagsreadonly string[]

From ManifestSetup

facetsreadonly EventFacetId[]

From ManifestSetup

phase1 | 2

1 = milestone M1 (built first), 2 = later.

From ManifestSetup

Every member is readonly.

@openseat/core/src/templates/types.ts

interface

VenueTemplate

interface VenueTemplate extends Omit<VenueManifest, "setups">

Extends Omit<VenueManifest, "setups">

Members

MemberTypeDescription
setupsreadonly VenueSetupTemplate[]

Implemented setups only.

idstring

<cat>.<venue>.

From VenueManifest

namestring

From VenueManifest

categoryIdTemplateCategoryId

From VenueManifest

descriptionstring

From VenueManifest

aliasesreadonly string[]

From VenueManifest

footprintstring

From VenueManifest

capacityHintstring

From VenueManifest

relatedoptionalreadonly string[]

Setup ids of other venues the gallery also shows under this one.

From VenueManifest

phase1 | 2

From VenueManifest

Every member is readonly.

@openseat/core/src/templates/types.ts

Types23

type

AccessibleOption

Wheelchair places of a seated builder.

  • undefined / true: automatic, max(1, ceil(sectionSeats x 0.005)) per section, front row ends.
  • false: none (the setup provides an accessibleZone instead).
  • a number: that many places per section, front row ends.
  • { row, count }: exactly as the kit's accessible option, per section.
type AccessibleOption = boolean | number | KitAccessible;

@openseat/core/src/templates/kit/builders/index.ts

type

AmenityKind

type AmenityKind =
  | "toilets"
  | "first-aid"
  | "bar"
  | "buffet"
  | "foh"
  | "dj"
  | "screen"
  | "registration"
  | "green-room"
  | "control"
  | "store";

@openseat/core/src/templates/kit/builders/index.ts

type

BlockKind

type BlockKind =
  | "table-grid"
  | "booth-band"
  | "booth-grid"
  | "booth-ring"
  | "island-grid"
  | "desk-runs"
  | "team-tables";

@openseat/core/src/templates/types.ts

type

CategoryVocabId

type CategoryVocabId = keyof typeof CATEGORY_VOCAB;

@openseat/core/src/templates/vocab.ts

type

CompassSide

type CompassSide = "south" | "north" | "east" | "west";

@openseat/core/src/templates/types.ts

type

DensityName

type DensityName = keyof typeof DENSITY;

@openseat/core/src/templates/kit/seats.ts

type

EventFacetId

type EventFacetId =
  | "fest"
  | "party"
  | "concert"
  | "competition"
  | "workshop"
  | "sports"
  | "exhibition"
  | "cultural";

@openseat/core/src/templates/types.ts

type

ObjectRole

Role of a non-inventory object. Never persisted (BuiltTemplate.roles only).

type ObjectRole = "surface" | "marking" | "zone" | "obstacle" | "decor";

@openseat/core/src/templates/types.ts

type

ParamGroup

type ParamGroup =
  | "Size"
  | "Seating"
  | "Stage"
  | "Standing"
  | "Tables"
  | "Stalls"
  | "Layout"
  | "Pricing"
  | "Access";

@openseat/core/src/templates/types.ts

type

ParamsOf

Typed params object for a const ParamSpec tuple.

type ParamsOf<S extends readonly ParamSpec[]> = {
  readonly [K in S[number] as K["key"]]: K extends BoolParam
    ? boolean
    : K extends EnumParam
      ? K["options"][number]["value"]
      : number;
};

@openseat/core/src/templates/types.ts

type

ParamValue

type ParamValue = number | boolean | string;

@openseat/core/src/templates/types.ts

type

ParamValues

type ParamValues = Readonly<Record<string, ParamValue>>;

@openseat/core/src/templates/types.ts

type

PtM

A point in metres.

type PtM = Point;

Members

MemberTypeDescription
xnumber
ynumber

Every member is readonly.

@openseat/core/src/templates/types.ts

type

SchematicKind

type SchematicKind =
  | "venue"
  | "surface"
  | "zone"
  | "marking"
  | "ga"
  | "section"
  | "stage"
  | "obstacle"
  | "table"
  | "booth";

@openseat/core/src/templates/schematic.ts

type

SeatPresetName

type SeatPresetName =
  | "chair"
  | "stand"
  | "bleacher"
  | "vip"
  | "flat"
  | "bench"
  | "desk"
  | "sofa"
  | "beanbag";

@openseat/core/src/templates/types.ts

type

ShapeM

A rectangle or a polygon in metres, used for keep-outs.

type ShapeM = RectM | readonly PtM[];

@openseat/core/src/templates/kit/builders/index.ts

type

SurfaceAs

How a playing surface is drawn: a stage (seats can never overlap it) or a locked surface polygon.

type SurfaceAs = "stage" | "polygon";

@openseat/core/src/templates/kit/builders/index.ts

type

TemplateCategoryId

type TemplateCategoryId =
  | "sports"
  | "performance"
  | "outdoor"
  | "exhibition"
  | "social"
  | "academic"
  | "specialised"
  | "cultural"
  | "hospitality"
  | "unconventional";

@openseat/core/src/templates/types.ts

type

TemplateSearchMatch

type TemplateSearchMatch =
  | "listA"
  | "name"
  | "alias"
  | "boost"
  | "event"
  | "tag"
  | "category"
  | "fuzzy";

@openseat/core/src/templates/types.ts

type

TemplateSize

type TemplateSize = "small" | "default" | "large";

@openseat/core/src/templates/types.ts

Constants42

const

ACADEMIC_SETUPS

academic setups (P5): campus ground, lecture hall, seminar hall, student centre and multipurpose hall.

const ACADEMIC_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/academic/index.ts

const

BLOCK_KINDS

const BLOCK_KINDS: Readonly<Record<BlockKind, BlockKindSpec>>

@openseat/core/src/templates/kit/builders/blocks.ts

const

CATEGORY_VOCAB

The category vocabulary: the ONLY category ids template builders may use. The registry and the build matrix enforce it.

Every sellable entry has a colour that is clearly distinct from every other sellable colour (CIE76 ΔE >= SELLABLE_MIN_DELTA_E) and is never near-grey (chroma >= SELLABLE_MIN_CHROMA), so ticket types read apart on the map. Not-for-sale entries use greys on purpose.

suggestedPriceINR values are indicative placeholders only: the editor shows them as input placeholders and never writes them as host prices.

const CATEGORY_VOCAB: {
  readonly "fan-pit": {
    readonly name: "Fan pit";
    readonly colour: "#e11d48";
    readonly sellable: true;
    readonly suggestedPriceINR: 999;
  };
  readonly vip: {
    readonly name: "VIP";
    readonly colour: "#7e22ce";
    readonly sellable: true;
    readonly suggestedPriceINR: 1499;
  };
  readonly gold: {
    readonly name: "Gold";
    readonly colour: "#f59e0b";
    readonly sellable: true;
    readonly suggestedPriceINR: 799;
  };
  readonly silver: {
    readonly name: "Silver";
    readonly colour: "#06b6d4";
    readonly sellable: true;
    readonly suggestedPriceINR: 499;
  };
  readonly general: {
    readonly name: "General";
    readonly colour: "#2563eb";
// … 65 more lines (type truncated)

This type is long; its declaration is shortened here.

@openseat/core/src/templates/vocab.ts

const

CATEGORY_VOCAB_IDS

Vocab ids in declaration order.

const CATEGORY_VOCAB_IDS: CategoryVocabId[]

@openseat/core/src/templates/vocab.ts

const

CULTURAL_SETUPS

cultural setups (P5): community hall, art centre and cultural centre.

const CULTURAL_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/cultural/index.ts

const

DENSITY

Planning densities in persons per m², aligned to the National Building Code of India Part 4. They are planning estimates, never approvals.

const DENSITY: {
  readonly pit: 1.6;
  readonly standing: 1.4;
  readonly cocktail: 1;
  readonly mixer: 1;
  readonly grass: 1;
  readonly picnic: 1;
  readonly vipLounge: 1;
  readonly participants: 0.5;
  readonly accessible: 0.5;
  readonly expoVisitors: 0.5;
}

@openseat/core/src/templates/kit/seats.ts

const

DENSITY_CAUTION_ABOVE

Densities above this add a summary caution.

const DENSITY_CAUTION_ABOVE = 1.5

@openseat/core/src/templates/kit/seats.ts

const

EVENT_FACETS

Event facet chips, in display order.

const EVENT_FACETS: readonly EventFacet[]

@openseat/core/src/templates/taxonomy.ts

const

EXHIBITION_SETUPS

Exhibition setups (expo hall, convention centre, trade fair hall). Owned by P7 from wave 3.

const EXHIBITION_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/exhibition/index.ts

const

GROUP_SETUPS

Implemented setup definitions per category group.

const GROUP_SETUPS: Readonly<
  Record<TemplateCategoryId, readonly SetupDefinition[]>
>

@openseat/core/src/templates/venues/index.ts

const

HEAVY_RANDOM_COMBOS

Seeded random combos per heavy setup.

const HEAVY_RANDOM_COMBOS = 4

@openseat/core/src/templates/params.ts

const

HEAVY_SEAT_THRESHOLD

Setups with more default seats than this get the reduced (heavy) build matrix.

const HEAVY_SEAT_THRESHOLD = 8000

@openseat/core/src/templates/params.ts

const

HIGH_DENSITY_MAX

Highest density with the advanced allowHighDensity override; always cautioned.

const HIGH_DENSITY_MAX = 2

@openseat/core/src/templates/kit/seats.ts

const

HOSPITALITY_SETUPS

Hospitality setups (hotel ballroom, resort, banquet garden). Owned by P7 from wave 3.

const HOSPITALITY_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/hospitality/index.ts

const

ID_PREFIX_PATTERN

Object-id prefix of a setup.

const ID_PREFIX_PATTERN: RegExp

@openseat/core/src/templates/registry.ts

const

LIGHT_RANDOM_COMBOS

Seeded random combos per light setup.

const LIGHT_RANDOM_COMBOS = 6

@openseat/core/src/templates/params.ts

const

MANIFEST_SETUPS

Every manifest setup with its venue id, in registry order.

const MANIFEST_SETUPS: readonly (ManifestSetup & {
  readonly venueId: string;
})[]

@openseat/core/src/templates/manifest.ts

const

MAX_TEMPLATE_INSERTS

Most template stamps remembered in metadata.openseat.inserts.

const MAX_TEMPLATE_INSERTS = 20

@openseat/core/src/templates/place.ts

const

NBC_STANDING_MAX

Highest standing density a template allows (persons/m²).

const NBC_STANDING_MAX = 1.67

@openseat/core/src/templates/kit/seats.ts

const

OUTDOOR_SETUPS

Outdoor setups (P6). Milestone M1 (list-A venues) first: open ground, lawn, rooftop and waterfront; then park and festival ground.

const OUTDOOR_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/outdoor/index.ts

const

OWNER_LIST_A

The owner's list A (college event venues), verbatim and in the owner's order. Each entry has exactly one PRIMARY venue (search 120) and optional BOOST venues (search 90). The gallery's "College events" tab lists these.

const OWNER_LIST_A: readonly OwnerListAEntry[]

@openseat/core/src/templates/taxonomy.ts

const

OWNER_LIST_B

The owner's list B (main category -> venue subtypes), verbatim. 41 subtypes, each mapped to a DISTINCT venue; tests derive the count from this list. Stadium, indoor arena, waterfront and multipurpose hall come from list A only.

const OWNER_LIST_B: readonly OwnerListBEntry[]

@openseat/core/src/templates/taxonomy.ts

const

PERFORMANCE_SETUPS

performance setups (P5): auditorium, theatre, concert hall and amphitheatre.

const PERFORMANCE_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/performance/index.ts

const

SCHEMATIC_MAX_BYTES

Largest serialised schematic (JSON, bytes).

const SCHEMATIC_MAX_BYTES = 3072

@openseat/core/src/templates/schematic.ts

const

SEARCH_SCORES

Template search over the manifest (works before any setup is built).

Normalisation: NFKD, diacritics stripped, lowercase, '&' -> 'and', punctuation and hyphens -> spaces, plural stemming (ies -> y, es, s), stop words dropped. Every phrase is also indexed in joined form (each adjacent token pair concatenated, and the whole phrase compacted), so 'e sports', 'e-sports' and 'esports' all meet, as do 'open mic' and 'openmic'.

Tiered scores (each venue keeps its best; ties go by registry order): list-A phrase on its PRIMARY venue 120; exact name or alias 100; list-A phrase on a BOOST venue 90; name or alias prefix 70; all query tokens in the name, aliases or events 50 + 5 per token; event or tag tokens 15 each; category name 10; fuzzy (Damerau <= 1, tokens of 5+ chars) 20.

const SEARCH_SCORES: {
  readonly listAPrimary: 120;
  readonly exact: 100;
  readonly listABoost: 90;
  readonly prefix: 70;
  readonly allTokensBase: 50;
  readonly allTokensPerToken: 5;
  readonly eventTagToken: 15;
  readonly category: 10;
  readonly fuzzy: 20;
}

@openseat/core/src/templates/search.ts

const

SEATS

const SEATS: {
  readonly chair: {
    readonly shape: {
      readonly kind: "circle";
      readonly radius: 10;
    };
    readonly seatSpacingM: 0.52;
    readonly rowSpacingM: 0.9;
  };
  readonly stand: {
    readonly shape: {
      readonly kind: "circle";
      readonly radius: 9;
    };
    readonly seatSpacingM: 0.5;
    readonly rowSpacingM: 0.86;
  };
  readonly bleacher: {
    readonly shape: {
      readonly kind: "circle";
      readonly radius: 9;
    };
    readonly seatSpacingM: 0.5;
    readonly rowSpacingM: 0.8;
  };
  readonly vip: {
    readonly shape: {
      readonly kind: "circle";
// … 48 more lines (type truncated)

This type is long; its declaration is shortened here.

@openseat/core/src/templates/kit/seats.ts

const

SELLABLE_MIN_CHROMA

Minimum CIELAB chroma of a sellable colour (below it reads as grey).

const SELLABLE_MIN_CHROMA = 30

@openseat/core/src/templates/vocab.ts

const

SELLABLE_MIN_DELTA_E

Minimum CIE76 ΔE between two sellable colours.

const SELLABLE_MIN_DELTA_E = 20

@openseat/core/src/templates/vocab.ts

const

SETUP_DEFINITIONS

Every implemented setup definition, group by group. Joined with the manifest by registry.ts.

const SETUP_DEFINITIONS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/index.ts

const

SETUP_ID_PATTERN

Full setup (template) id: <cat>.<venue>.<setup>.

const SETUP_ID_PATTERN: RegExp

@openseat/core/src/templates/registry.ts

const

SOCIAL_SETUPS

Social setups (banquet hall, nightclub, party hall, farmhouse). Owned by P7 from wave 3.

const SOCIAL_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/social/index.ts

const

SPECIALISED_SETUPS

specialised setups (P4), in manifest order.

const SPECIALISED_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/specialised/index.ts

const

SPORTS_SETUPS

sports setups (P4), in manifest order.

const SPORTS_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/sports/index.ts

const

TEMPLATE_CATEGORIES

The ten template categories (the owner's list B main categories), in gallery order.

const TEMPLATE_CATEGORIES: readonly TemplateCategory[]

@openseat/core/src/templates/taxonomy.ts

const

TEMPLATE_LIMITS

const TEMPLATE_LIMITS: {
  readonly maxSeats: 25000;
  readonly maxObjects: 40000;
  readonly previewSeatLimit: 10000;
  readonly largeLayoutWarn: 10000;
  readonly maxMetaBytes: 48000;
}

@openseat/core/src/templates/types.ts

const

TEMPLATE_UNITS_PER_METRE

Layout units per metre in every template layout.

const TEMPLATE_UNITS_PER_METRE = 50

@openseat/core/src/templates/kit/units.ts

const

UNCONVENTIONAL_SETUPS

Unconventional setups (P6): warehouse, mall atrium, industrial space and hangar.

const UNCONVENTIONAL_SETUPS: readonly SetupDefinition[]

@openseat/core/src/templates/venues/unconventional/index.ts

const

VENUE_ID_PATTERN

Venue id: <cat>.<venue>.

const VENUE_ID_PATTERN: RegExp

@openseat/core/src/templates/registry.ts

const

VENUE_MANIFEST

const VENUE_MANIFEST: readonly VenueManifest[]

@openseat/core/src/templates/manifest.ts

const

VENUE_TEMPLATES

Every venue (implemented or not), in registry order, with merged aliases.

const VENUE_TEMPLATES: readonly VenueTemplate[]

@openseat/core/src/templates/registry.ts

const

ZONE_CORNER_RADIUS_M

Corner rounding of a template's zone sections, in metres.

const ZONE_CORNER_RADIUS_M = 0.4

@openseat/core/src/templates/zones.ts

const

ZONES_SEATED_FOOTNOTE

Footnote added under a zone layout whose zones are all seated.

const ZONES_SEATED_FOOTNOTE = "ALL THE SECTIONS ARE SEATED"

@openseat/core/src/templates/zones.ts