@seatlayer/core 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-MGC5BVAD.js → chunk-5MRJCIZP.js} +116 -97
- package/dist/chunk-5MRJCIZP.js.map +1 -0
- package/dist/index.cjs +452 -135
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +87 -8
- package/dist/index.d.ts +87 -8
- package/dist/index.js +338 -41
- package/dist/index.js.map +1 -1
- package/dist/{types-DO_J5DtX.d.cts → types-DBnRO2hX.d.cts} +13 -1
- package/dist/{types-DO_J5DtX.d.ts → types-DBnRO2hX.d.ts} +13 -1
- package/dist/view3d/index.cjs.map +1 -1
- package/dist/view3d/index.d.cts +1 -1
- package/dist/view3d/index.d.ts +1 -1
- package/dist/view3d/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-MGC5BVAD.js.map +0 -1
|
@@ -328,6 +328,44 @@ function transformSectionOutlinePath(path, transform, radiusScale = 1, reflected
|
|
|
328
328
|
}
|
|
329
329
|
var SAGITTA_TO_CONTROL = 4 / 3;
|
|
330
330
|
|
|
331
|
+
// src/core/segmentedRowModel.ts
|
|
332
|
+
function resolveSegmentedRowGroups(objects) {
|
|
333
|
+
const segmented = /* @__PURE__ */ new Map();
|
|
334
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
335
|
+
for (const object of objects) {
|
|
336
|
+
if (object.type !== "row" || !object.segmentedRow) continue;
|
|
337
|
+
const list = grouped.get(object.segmentedRow.groupId) ?? [];
|
|
338
|
+
list.push(object);
|
|
339
|
+
grouped.set(object.segmentedRow.groupId, list);
|
|
340
|
+
}
|
|
341
|
+
for (const [groupId, members] of grouped) {
|
|
342
|
+
const ordered = members.slice().sort((left, right) => left.segmentedRow.componentIndex - right.segmentedRow.componentIndex);
|
|
343
|
+
const expectedCount = ordered[0]?.segmentedRow?.componentCount ?? 0;
|
|
344
|
+
const first = ordered[0]?.segmentedRow;
|
|
345
|
+
if (!first) continue;
|
|
346
|
+
const valid = expectedCount >= 2 && ordered.length === expectedCount && first?.boundaryBefore === "start" && ordered.every((row, index) => row.segmentedRow?.kind === "segmented-row-v1" && row.segmentedRow.groupId === groupId && row.segmentedRow.componentCount === expectedCount && row.segmentedRow.componentIndex === index && (index === 0 ? row.segmentedRow.boundaryBefore === "start" : row.segmentedRow.boundaryBefore !== "start") && row.segmentedRow.displayLabel === first.displayLabel);
|
|
347
|
+
if (!valid) continue;
|
|
348
|
+
const totalSeats = ordered.reduce((sum, row) => sum + row.seatCount, 0);
|
|
349
|
+
let adjacencyOffset = 0;
|
|
350
|
+
let displayOffset = 0;
|
|
351
|
+
for (const row of ordered) {
|
|
352
|
+
if (row.segmentedRow.boundaryBefore === "break") adjacencyOffset += 1;
|
|
353
|
+
segmented.set(row.id, {
|
|
354
|
+
groupId,
|
|
355
|
+
adjacencyOffset,
|
|
356
|
+
displayOffset,
|
|
357
|
+
displayLabel: first.displayLabel,
|
|
358
|
+
totalSeats,
|
|
359
|
+
canonical: ordered[0],
|
|
360
|
+
viewFromSeatUrl: first.viewFromSeatUrl
|
|
361
|
+
});
|
|
362
|
+
adjacencyOffset += row.seatCount;
|
|
363
|
+
displayOffset += row.seatCount;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return segmented;
|
|
367
|
+
}
|
|
368
|
+
|
|
331
369
|
// src/core/labeling.ts
|
|
332
370
|
var FULL_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
333
371
|
var LOWER_ALPHABET = "abcdefghijklmnopqrstuvwxyz";
|
|
@@ -375,6 +413,78 @@ function toRoman(value) {
|
|
|
375
413
|
return out;
|
|
376
414
|
}
|
|
377
415
|
|
|
416
|
+
// src/core/seatNumbering.ts
|
|
417
|
+
function centerRank(n) {
|
|
418
|
+
const rank = new Array(n);
|
|
419
|
+
Array.from({ length: n }, (_, i) => i).sort((a, b) => Math.abs(2 * a - (n - 1)) - Math.abs(2 * b - (n - 1)) || a - b).forEach((idx, k) => rank[idx] = k);
|
|
420
|
+
return rank;
|
|
421
|
+
}
|
|
422
|
+
function seatLabelPart(row, i) {
|
|
423
|
+
const rawStart = row.seatLabelStart ?? 1;
|
|
424
|
+
const dir = row.seatNumbering?.direction ?? "ltr";
|
|
425
|
+
const step = row.seatNumbering?.step ?? 1;
|
|
426
|
+
const scheme = row.seatNumbering?.scheme ?? "decimal";
|
|
427
|
+
const prefix = row.seatNumbering?.prefix ?? "";
|
|
428
|
+
const endAt = row.seatNumbering?.endAt;
|
|
429
|
+
const n = row.seatCount;
|
|
430
|
+
if (scheme === "updown" || scheme === "updown-descending") {
|
|
431
|
+
const half = Math.ceil(n / 2);
|
|
432
|
+
const core2 = scheme === "updown" ? i < half ? rawStart + 2 * i : rawStart - 1 + 2 * (n - i) : i < half ? rawStart + 2 * (half - 1 - i) : rawStart + 1 + 2 * (i - half);
|
|
433
|
+
return `${prefix}${core2}`;
|
|
434
|
+
}
|
|
435
|
+
const effStep = scheme === "odd" || scheme === "even" ? 2 : step;
|
|
436
|
+
const start = endAt != null && Number.isFinite(endAt) ? endAt - (n - 1) * effStep : rawStart;
|
|
437
|
+
const p = dir === "center" ? centerRank(n)[i] : dir === "rtl" ? n - 1 - i : i;
|
|
438
|
+
let core;
|
|
439
|
+
switch (scheme) {
|
|
440
|
+
case "odd": {
|
|
441
|
+
const firstOdd = start % 2 === 1 ? start : start + 1;
|
|
442
|
+
core = String(firstOdd + p * 2);
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
case "even": {
|
|
446
|
+
const firstEven = start % 2 === 0 ? start : start + 1;
|
|
447
|
+
core = String(firstEven + p * 2);
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
case "roman":
|
|
451
|
+
core = toRoman(start + p * step);
|
|
452
|
+
break;
|
|
453
|
+
case "letters-upper":
|
|
454
|
+
core = toLetters(start + p * step, false);
|
|
455
|
+
break;
|
|
456
|
+
case "letters-lower":
|
|
457
|
+
core = toLetters(start + p * step, true);
|
|
458
|
+
break;
|
|
459
|
+
case "decimal":
|
|
460
|
+
default:
|
|
461
|
+
core = String(start + p * step);
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
return `${prefix}${core}`;
|
|
465
|
+
}
|
|
466
|
+
function logicalNumberingRow(placement) {
|
|
467
|
+
return {
|
|
468
|
+
...placement.canonical,
|
|
469
|
+
seatCount: placement.totalSeats,
|
|
470
|
+
label: placement.displayLabel,
|
|
471
|
+
displayLabel: placement.displayLabel
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
function seatInventoryLabel(row, physicalIndex, override) {
|
|
475
|
+
return override?.label ?? `${row.label}-${seatLabelPart(row, physicalIndex)}`;
|
|
476
|
+
}
|
|
477
|
+
function seatDisplayLabel(row, physicalIndex, placement, override) {
|
|
478
|
+
if (override?.displayLabel) return override.displayLabel;
|
|
479
|
+
if (!placement) {
|
|
480
|
+
const prefix = row.displayLabel ?? row.label;
|
|
481
|
+
return `${prefix}-${seatLabelPart(row, physicalIndex)}`;
|
|
482
|
+
}
|
|
483
|
+
const numberingRow = logicalNumberingRow(placement);
|
|
484
|
+
const ordinal = placement.displayOffset + physicalIndex;
|
|
485
|
+
return `${placement.displayLabel}-${seatLabelPart(numberingRow, ordinal)}`;
|
|
486
|
+
}
|
|
487
|
+
|
|
378
488
|
// src/core/venueStructure.ts
|
|
379
489
|
var BLOCK_LINK_RATIO = 1.8;
|
|
380
490
|
function probesOf(pts) {
|
|
@@ -766,70 +876,19 @@ function rowInventoryCount(row) {
|
|
|
766
876
|
const skipped = new Set((row.overrides ?? []).filter((override) => override.skip && Number.isInteger(override.index) && override.index >= 0 && override.index < row.seatCount).map((override) => override.index));
|
|
767
877
|
return Math.max(0, row.seatCount - skipped.size);
|
|
768
878
|
}
|
|
769
|
-
function
|
|
770
|
-
const rank = new Array(n);
|
|
771
|
-
Array.from({ length: n }, (_, i) => i).sort((a, b) => Math.abs(2 * a - (n - 1)) - Math.abs(2 * b - (n - 1)) || a - b).forEach((idx, k) => rank[idx] = k);
|
|
772
|
-
return rank;
|
|
773
|
-
}
|
|
774
|
-
function seatLabelPart(row, i) {
|
|
775
|
-
const rawStart = row.seatLabelStart ?? 1;
|
|
776
|
-
const dir = row.seatNumbering?.direction ?? "ltr";
|
|
777
|
-
const step = row.seatNumbering?.step ?? 1;
|
|
778
|
-
const scheme = row.seatNumbering?.scheme ?? "decimal";
|
|
779
|
-
const prefix = row.seatNumbering?.prefix ?? "";
|
|
780
|
-
const endAt = row.seatNumbering?.endAt;
|
|
781
|
-
const n = row.seatCount;
|
|
782
|
-
if (scheme === "updown" || scheme === "updown-descending") {
|
|
783
|
-
const half = Math.ceil(n / 2);
|
|
784
|
-
const core2 = scheme === "updown" ? i < half ? rawStart + 2 * i : rawStart - 1 + 2 * (n - i) : i < half ? rawStart + 2 * (half - 1 - i) : rawStart + 1 + 2 * (i - half);
|
|
785
|
-
return `${prefix}${core2}`;
|
|
786
|
-
}
|
|
787
|
-
const effStep = scheme === "odd" || scheme === "even" ? 2 : step;
|
|
788
|
-
const start = endAt != null && Number.isFinite(endAt) ? endAt - (n - 1) * effStep : rawStart;
|
|
789
|
-
const p = dir === "center" ? centerRank(n)[i] : dir === "rtl" ? n - 1 - i : i;
|
|
790
|
-
let core;
|
|
791
|
-
switch (scheme) {
|
|
792
|
-
case "odd": {
|
|
793
|
-
const firstOdd = start % 2 === 1 ? start : start + 1;
|
|
794
|
-
core = String(firstOdd + p * 2);
|
|
795
|
-
break;
|
|
796
|
-
}
|
|
797
|
-
case "even": {
|
|
798
|
-
const firstEven = start % 2 === 0 ? start : start + 1;
|
|
799
|
-
core = String(firstEven + p * 2);
|
|
800
|
-
break;
|
|
801
|
-
}
|
|
802
|
-
case "roman":
|
|
803
|
-
core = toRoman(start + p * step);
|
|
804
|
-
break;
|
|
805
|
-
case "letters-upper":
|
|
806
|
-
core = toLetters(start + p * step, false);
|
|
807
|
-
break;
|
|
808
|
-
case "letters-lower":
|
|
809
|
-
core = toLetters(start + p * step, true);
|
|
810
|
-
break;
|
|
811
|
-
case "decimal":
|
|
812
|
-
default:
|
|
813
|
-
core = String(start + p * step);
|
|
814
|
-
break;
|
|
815
|
-
}
|
|
816
|
-
return `${prefix}${core}`;
|
|
817
|
-
}
|
|
818
|
-
function expandRowSlots(row) {
|
|
879
|
+
function expandRowSlots(row, placement) {
|
|
819
880
|
const ov = overrideMap(row);
|
|
820
881
|
return rowSeatPositions(row).map((p, i) => {
|
|
821
882
|
const o = ov.get(i);
|
|
822
883
|
const accessibility = overrideAccessibility(o);
|
|
823
|
-
const
|
|
824
|
-
const inventoryLabel = o?.label ?? `${row.label}-${part}`;
|
|
825
|
-
const displayPrefix = row.displayLabel ?? row.label;
|
|
884
|
+
const inventoryLabel = seatInventoryLabel(row, i, o);
|
|
826
885
|
const commercial = { ...row.commercial, ...o?.commercial };
|
|
827
886
|
return {
|
|
828
887
|
index: i,
|
|
829
888
|
x: p.x + (o?.dx ?? 0),
|
|
830
889
|
y: p.y + (o?.dy ?? 0),
|
|
831
890
|
label: inventoryLabel,
|
|
832
|
-
displayLabel:
|
|
891
|
+
displayLabel: seatDisplayLabel(row, i, placement, o),
|
|
833
892
|
categoryKey: o?.categoryKey ?? row.categoryKey,
|
|
834
893
|
skipped: !!o?.skip,
|
|
835
894
|
accessible: accessibility.length > 0,
|
|
@@ -1130,39 +1189,7 @@ function stackFloors(doc, spread = 900) {
|
|
|
1130
1189
|
}
|
|
1131
1190
|
function expandFloorObjects(objects, zones, fallbackFocal, viewFallback) {
|
|
1132
1191
|
const out = [];
|
|
1133
|
-
const segmented =
|
|
1134
|
-
const grouped = /* @__PURE__ */ new Map();
|
|
1135
|
-
for (const object of objects) {
|
|
1136
|
-
if (object.type !== "row" || !object.segmentedRow) continue;
|
|
1137
|
-
const list = grouped.get(object.segmentedRow.groupId) ?? [];
|
|
1138
|
-
list.push(object);
|
|
1139
|
-
grouped.set(object.segmentedRow.groupId, list);
|
|
1140
|
-
}
|
|
1141
|
-
for (const [groupId, members] of grouped) {
|
|
1142
|
-
const ordered = members.slice().sort((left, right) => left.segmentedRow.componentIndex - right.segmentedRow.componentIndex);
|
|
1143
|
-
const expectedCount = ordered[0]?.segmentedRow?.componentCount ?? 0;
|
|
1144
|
-
const first = ordered[0]?.segmentedRow;
|
|
1145
|
-
if (!first) continue;
|
|
1146
|
-
const valid = expectedCount >= 2 && ordered.length === expectedCount && first?.boundaryBefore === "start" && ordered.every((row, index) => row.segmentedRow?.kind === "segmented-row-v1" && row.segmentedRow.groupId === groupId && row.segmentedRow.componentCount === expectedCount && row.segmentedRow.componentIndex === index && (index === 0 ? row.segmentedRow.boundaryBefore === "start" : row.segmentedRow.boundaryBefore !== "start") && row.segmentedRow.displayLabel === first.displayLabel);
|
|
1147
|
-
if (!valid) continue;
|
|
1148
|
-
const totalSeats = ordered.reduce((sum, row) => sum + row.seatCount, 0);
|
|
1149
|
-
let adjacencyOffset = 0;
|
|
1150
|
-
let displayOffset = 0;
|
|
1151
|
-
for (const row of ordered) {
|
|
1152
|
-
if (row.segmentedRow.boundaryBefore === "break") adjacencyOffset += 1;
|
|
1153
|
-
segmented.set(row.id, {
|
|
1154
|
-
groupId,
|
|
1155
|
-
adjacencyOffset,
|
|
1156
|
-
displayOffset,
|
|
1157
|
-
displayLabel: first.displayLabel,
|
|
1158
|
-
totalSeats,
|
|
1159
|
-
canonical: ordered[0],
|
|
1160
|
-
viewFromSeatUrl: first.viewFromSeatUrl
|
|
1161
|
-
});
|
|
1162
|
-
adjacencyOffset += row.seatCount;
|
|
1163
|
-
displayOffset += row.seatCount;
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1192
|
+
const segmented = resolveSegmentedRowGroups(objects);
|
|
1166
1193
|
for (const obj of objects) {
|
|
1167
1194
|
let seats = [];
|
|
1168
1195
|
if (obj.type === "row") seats = expandRow(obj);
|
|
@@ -1176,17 +1203,10 @@ function expandFloorObjects(objects, zones, fallbackFocal, viewFallback) {
|
|
|
1176
1203
|
for (const seat of seats) {
|
|
1177
1204
|
const physicalIndex = Number(seat.id.slice(seat.id.lastIndexOf(":") + 1));
|
|
1178
1205
|
if (!Number.isInteger(physicalIndex)) continue;
|
|
1179
|
-
const displayOrdinal = logical.displayOffset + physicalIndex;
|
|
1180
1206
|
seat.logicalRowId = logical.groupId;
|
|
1181
1207
|
seat.logicalSeatIndex = logical.adjacencyOffset + physicalIndex;
|
|
1182
1208
|
if (!overrides.get(physicalIndex)?.displayLabel) {
|
|
1183
|
-
|
|
1184
|
-
...logical.canonical,
|
|
1185
|
-
seatCount: logical.totalSeats,
|
|
1186
|
-
label: logical.displayLabel,
|
|
1187
|
-
displayLabel: logical.displayLabel
|
|
1188
|
-
};
|
|
1189
|
-
seat.displayLabel = `${logical.displayLabel}-${seatLabelPart(numberingRow, displayOrdinal)}`;
|
|
1209
|
+
seat.displayLabel = seatDisplayLabel(obj, physicalIndex, logical);
|
|
1190
1210
|
}
|
|
1191
1211
|
seat.viewUrl ??= logical.viewFromSeatUrl;
|
|
1192
1212
|
}
|
|
@@ -1352,7 +1372,6 @@ export {
|
|
|
1352
1372
|
resolveSection,
|
|
1353
1373
|
rowSeatPositions,
|
|
1354
1374
|
rowInventoryCount,
|
|
1355
|
-
seatLabelPart,
|
|
1356
1375
|
expandRowSlots,
|
|
1357
1376
|
expandRow,
|
|
1358
1377
|
tableSeatCountsBySide,
|
|
@@ -1372,4 +1391,4 @@ export {
|
|
|
1372
1391
|
expandChart,
|
|
1373
1392
|
chartBounds
|
|
1374
1393
|
};
|
|
1375
|
-
//# sourceMappingURL=chunk-
|
|
1394
|
+
//# sourceMappingURL=chunk-5MRJCIZP.js.map
|