@orbat-mapper/control-measures 0.4.0 → 0.5.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.
@@ -1446,6 +1446,7 @@ const AREA_SMOOTH_PARAMS = [{
1446
1446
  type: "boolean"
1447
1447
  }, {
1448
1448
  key: "smoothResolution",
1449
+ presentationTier: "advanced",
1449
1450
  label: "Smooth resolution",
1450
1451
  description: "Number of samples per segment when smooth mode is enabled.",
1451
1452
  type: "number",
@@ -1457,6 +1458,7 @@ const AREA_SMOOTH_PARAMS = [{
1457
1458
  const ATTACK_SHAFT_PARAMS = [
1458
1459
  {
1459
1460
  key: "shaftWidthRatio",
1461
+ presentationTier: "advanced",
1460
1462
  label: "Shaft width",
1461
1463
  description: "Arrow shaft width as a ratio of the arrowhead width",
1462
1464
  type: "number",
@@ -1472,6 +1474,7 @@ const ATTACK_SHAFT_PARAMS = [
1472
1474
  },
1473
1475
  {
1474
1476
  key: "smoothResolution",
1477
+ presentationTier: "advanced",
1475
1478
  label: "Smooth resolution",
1476
1479
  description: "Number of segments approximating each rounded bend when smooth mode is enabled.",
1477
1480
  type: "number",
@@ -1484,6 +1487,7 @@ const ATTACK_SHAFT_PARAMS = [
1484
1487
  const FIRE_ARROW_PARAMS = [
1485
1488
  {
1486
1489
  key: "arrowheadWidthRatio",
1490
+ presentationTier: "advanced",
1487
1491
  label: "Arrowhead width",
1488
1492
  description: "Arrowhead width as a ratio of the shaft length",
1489
1493
  type: "number",
@@ -1493,6 +1497,7 @@ const FIRE_ARROW_PARAMS = [
1493
1497
  },
1494
1498
  {
1495
1499
  key: "rearLineLengthRatio",
1500
+ presentationTier: "advanced",
1496
1501
  label: "Rear line length",
1497
1502
  description: "Length of the rear flare lines as a ratio of the head",
1498
1503
  type: "number",
@@ -1502,6 +1507,7 @@ const FIRE_ARROW_PARAMS = [
1502
1507
  },
1503
1508
  {
1504
1509
  key: "rearLineAngle",
1510
+ presentationTier: "advanced",
1505
1511
  label: "Rear line angle",
1506
1512
  description: "Angle of the rear flare lines, in degrees",
1507
1513
  type: "number",
@@ -1538,6 +1544,7 @@ const ENCIRCLEMENT_PARAMS = [
1538
1544
  },
1539
1545
  {
1540
1546
  key: "smoothResolution",
1547
+ presentationTier: "advanced",
1541
1548
  label: "Smooth resolution",
1542
1549
  description: "Number of samples per segment when smooth mode is enabled.",
1543
1550
  type: "number",
@@ -1548,6 +1555,7 @@ const ENCIRCLEMENT_PARAMS = [
1548
1555
  },
1549
1556
  {
1550
1557
  key: "barbSpacingRatio",
1558
+ presentationTier: "advanced",
1551
1559
  label: "Spacing",
1552
1560
  description: "Spacing between barbs as a ratio of the symbol radius (smaller is denser).",
1553
1561
  type: "number",
@@ -1557,6 +1565,7 @@ const ENCIRCLEMENT_PARAMS = [
1557
1565
  },
1558
1566
  {
1559
1567
  key: "barbLengthRatio",
1568
+ presentationTier: "advanced",
1560
1569
  label: "Barb length",
1561
1570
  description: "Barb height as a ratio of the symbol radius (amplitude).",
1562
1571
  type: "number",
@@ -1568,6 +1577,7 @@ const ENCIRCLEMENT_PARAMS = [
1568
1577
  const FORTIFIED_AREA_PARAMS = [...AREA_SMOOTH_PARAMS, ...FORTIFIED_AREA_SIZE_PARAMS];
1569
1578
  const AREA_LABEL_PADDING_PARAM = {
1570
1579
  key: "labelPadding",
1580
+ presentationTier: "advanced",
1571
1581
  label: "Label padding",
1572
1582
  description: "Extra spacing between the area's label rows, as a ratio of the label height",
1573
1583
  type: "number",
@@ -1583,6 +1593,8 @@ const ECHELON_AREA_PARAMS = [
1583
1593
  label: "Echelon",
1584
1594
  description: "Field B unit-size amplifier, drawn on the boundary.",
1585
1595
  type: "enum",
1596
+ presentationTier: "primary",
1597
+ semanticRole: "doctrinal",
1586
1598
  options: ECHELON_PARAM_OPTIONS
1587
1599
  },
1588
1600
  {
@@ -1607,6 +1619,7 @@ const ECHELON_AREA_PARAMS = [
1607
1619
  },
1608
1620
  {
1609
1621
  key: "echelonPadding",
1622
+ presentationTier: "advanced",
1610
1623
  label: "Echelon padding",
1611
1624
  description: "Gap on each side of the echelon, as a ratio of its height.",
1612
1625
  type: "number",
@@ -1616,6 +1629,7 @@ const ECHELON_AREA_PARAMS = [
1616
1629
  },
1617
1630
  {
1618
1631
  key: "echelonPosition",
1632
+ presentationTier: "advanced",
1619
1633
  label: "Echelon position",
1620
1634
  description: "Slide the echelon along the boundary, as a fraction of the perimeter from the bottom edge.",
1621
1635
  type: "number",
@@ -1804,6 +1818,7 @@ const AMBUSH_METADATA = {
1804
1818
  params: [
1805
1819
  {
1806
1820
  key: "arrowheadLengthRatio",
1821
+ presentationTier: "advanced",
1807
1822
  label: "Arrowhead length",
1808
1823
  description: "Arrowhead length as a ratio of the chord span",
1809
1824
  type: "number",
@@ -1813,6 +1828,7 @@ const AMBUSH_METADATA = {
1813
1828
  },
1814
1829
  {
1815
1830
  key: "arrowheadWidthRatio",
1831
+ presentationTier: "advanced",
1816
1832
  label: "Arrowhead width",
1817
1833
  description: "Arrowhead base width as a multiple of the arrowhead length",
1818
1834
  type: "number",
@@ -1822,6 +1838,7 @@ const AMBUSH_METADATA = {
1822
1838
  },
1823
1839
  {
1824
1840
  key: "hatchLengthRatio",
1841
+ presentationTier: "advanced",
1825
1842
  label: "Hatch length",
1826
1843
  description: "Length of the parallel hatches as a fraction of the chord span",
1827
1844
  type: "number",
@@ -1831,6 +1848,7 @@ const AMBUSH_METADATA = {
1831
1848
  },
1832
1849
  {
1833
1850
  key: "hatchCount",
1851
+ presentationTier: "advanced",
1834
1852
  label: "Hatch count",
1835
1853
  description: "Number of parallel hatches spaced along the curve",
1836
1854
  type: "number",
@@ -1840,6 +1858,7 @@ const AMBUSH_METADATA = {
1840
1858
  },
1841
1859
  {
1842
1860
  key: "curveDepthRatio",
1861
+ presentationTier: "advanced",
1843
1862
  label: "Curve depth",
1844
1863
  description: "How far the back line bends toward the tip, as a fraction of the chord span",
1845
1864
  type: "number",
@@ -1852,6 +1871,7 @@ const AMBUSH_METADATA = {
1852
1871
  label: "Arc segments",
1853
1872
  description: "Number of segments used to render the curve",
1854
1873
  type: "number",
1874
+ presentationTier: "advanced",
1855
1875
  min: 4,
1856
1876
  max: 96,
1857
1877
  step: 1
@@ -2110,6 +2130,7 @@ const SMOOTH_LINE_PARAMS = [{
2110
2130
  type: "boolean"
2111
2131
  }, {
2112
2132
  key: "smoothResolution",
2133
+ presentationTier: "advanced",
2113
2134
  label: "Smooth resolution",
2114
2135
  description: "Number of samples per segment when smooth mode is enabled.",
2115
2136
  type: "number",
@@ -2443,6 +2464,7 @@ const HOSTILE_LINE_AMPLIFIER = {
2443
2464
  /** Label-padding control shared by newly label-bearing Line1 graphics. */
2444
2465
  const LINE_LABEL_PADDING_PARAM = {
2445
2466
  key: "labelPadding",
2467
+ presentationTier: "advanced",
2446
2468
  label: "Label padding",
2447
2469
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
2448
2470
  type: "number",
@@ -2905,6 +2927,7 @@ function createDirectionOfAttackLine(coordinates, options, textAmplifiers, confi
2905
2927
  const DIRECTION_OF_ATTACK_PARAMS = [
2906
2928
  {
2907
2929
  key: "arrowheadLengthRatio",
2930
+ presentationTier: "advanced",
2908
2931
  label: "Arrowhead length",
2909
2932
  description: "Arrowhead length as a ratio of the route's total length",
2910
2933
  type: "number",
@@ -2914,6 +2937,7 @@ const DIRECTION_OF_ATTACK_PARAMS = [
2914
2937
  },
2915
2938
  {
2916
2939
  key: "arrowheadWidthRatio",
2940
+ presentationTier: "advanced",
2917
2941
  label: "Arrowhead width",
2918
2942
  description: "Arrowhead total width as a ratio of its length",
2919
2943
  type: "number",
@@ -2923,6 +2947,7 @@ const DIRECTION_OF_ATTACK_PARAMS = [
2923
2947
  },
2924
2948
  {
2925
2949
  key: "labelPosition",
2950
+ presentationTier: "advanced",
2926
2951
  label: "Label position",
2927
2952
  description: "Position of the T/W/W1 group along the route, from tail (0) to tip (1)",
2928
2953
  type: "number",
@@ -2932,6 +2957,7 @@ const DIRECTION_OF_ATTACK_PARAMS = [
2932
2957
  },
2933
2958
  {
2934
2959
  key: "labelPadding",
2960
+ presentationTier: "advanced",
2935
2961
  label: "Label padding",
2936
2962
  description: "Extra spacing between the route and the date-time rows, in label heights",
2937
2963
  type: "number",
@@ -3006,6 +3032,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3006
3032
  ...SMOOTH_LINE_PARAMS,
3007
3033
  {
3008
3034
  key: "arrowheadLengthRatio",
3035
+ presentationTier: "advanced",
3009
3036
  label: "Arrowhead length",
3010
3037
  description: "Arrowhead length as a ratio of the route's total length",
3011
3038
  type: "number",
@@ -3015,6 +3042,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3015
3042
  },
3016
3043
  {
3017
3044
  key: "arrowheadWidthRatio",
3045
+ presentationTier: "advanced",
3018
3046
  label: "Arrowhead width",
3019
3047
  description: "Arrowhead total width as a ratio of its length",
3020
3048
  type: "number",
@@ -3024,6 +3052,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3024
3052
  },
3025
3053
  {
3026
3054
  key: "bowTieLengthRatio",
3055
+ presentationTier: "advanced",
3027
3056
  label: "Bow-tie length",
3028
3057
  description: "Aviation mark length as a ratio of the route's total length",
3029
3058
  type: "number",
@@ -3033,6 +3062,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3033
3062
  },
3034
3063
  {
3035
3064
  key: "bowTieWidthRatio",
3065
+ presentationTier: "advanced",
3036
3066
  label: "Bow-tie width",
3037
3067
  description: "Aviation mark total width as a ratio of its length",
3038
3068
  type: "number",
@@ -3042,6 +3072,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3042
3072
  },
3043
3073
  {
3044
3074
  key: "bowTiePosition",
3075
+ presentationTier: "advanced",
3045
3076
  label: "Bow-tie position",
3046
3077
  description: "Position of the aviation mark along the route, from tail (0) to tip (1)",
3047
3078
  type: "number",
@@ -3051,6 +3082,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3051
3082
  },
3052
3083
  {
3053
3084
  key: "labelPosition",
3085
+ presentationTier: "advanced",
3054
3086
  label: "Label position",
3055
3087
  description: "Position of the T/W/W1 group along the route, from tail (0) to tip (1)",
3056
3088
  type: "number",
@@ -3060,6 +3092,7 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
3060
3092
  },
3061
3093
  {
3062
3094
  key: "labelPadding",
3095
+ presentationTier: "advanced",
3063
3096
  label: "Label padding",
3064
3097
  description: "Extra spacing between the route and the date-time rows, in label heights",
3065
3098
  type: "number",
@@ -3238,6 +3271,7 @@ const DIRECTION_OF_MAIN_ATTACK_METADATA = {
3238
3271
  ...DIRECTION_OF_ATTACK_PARAMS,
3239
3272
  {
3240
3273
  key: "arrowheadOutlineRatio",
3274
+ presentationTier: "advanced",
3241
3275
  label: "Arrowhead outline",
3242
3276
  description: "Outlined arrowhead thickness as a ratio of its length",
3243
3277
  type: "number",
@@ -3721,24 +3755,21 @@ function ringLabelAnchor(verts) {
3721
3755
  return anchor ?? centroid;
3722
3756
  }
3723
3757
  /**
3724
- * Emits the west/east literal "ENY" markers (Field N) and returns the knockout
3725
- * gaps they carve in `maskVerts` (ADR-0023). Shared by every measure that
3726
- * flags a hostile example — closed areas anchor theirs on ring crossings,
3727
- * Minefield on its frame's side edges — so the masking contract lives in one
3728
- * place: a marker the user has dragged masks only while its text box still
3729
- * overlaps the *finite* contacted edge, while an undragged marker always
3730
- * masks. Callers own the anchors, rotation convention, and clearance.
3758
+ * Emits boundary text markers and returns the knockout gaps they carve in
3759
+ * `maskVerts` (ADR-0023). Movable markers mask only while their text box still
3760
+ * overlaps the finite contacted edge; intrinsic markers always mask. Callers
3761
+ * own marker names, anchors, rotation, clearance, placement keys, and fields.
3731
3762
  */
3732
- function pushHostileMarkers(out, maskVerts, text, anchors, options, amplifierPlacements) {
3763
+ function pushBoundaryMarkers(out, maskVerts, text, anchors, options, amplifierPlacements) {
3733
3764
  const { rotation, textHeight, clearance, sizeProps } = options;
3734
3765
  const textWidth = estimatedTextWidth(text, textHeight);
3735
3766
  const gaps = [];
3736
3767
  for (const anchor of anchors) {
3737
- const labelPlacementKey = `label:N:${anchor.side}`;
3738
- const placement = resolveAmplifierPlacement(amplifierPlacements?.[labelPlacementKey]);
3768
+ const labelPlacementKey = options.placementKeyPrefix ? `${options.placementKeyPrefix}:${anchor.side}` : void 0;
3769
+ const placement = resolveAmplifierPlacement(labelPlacementKey ? amplifierPlacements?.[labelPlacementKey] : void 0);
3739
3770
  const labelPoint = placement.position ? project(placement.position[0], placement.position[1]) : anchor.point;
3740
3771
  const boxRotation = placement.rotation ?? rotation;
3741
- pushLabel(out, labelPoint, text, options.followPlacementRotation ? boxRotation : rotation, sizeProps, void 0, "N", labelPlacementKey);
3772
+ pushLabel(out, labelPoint, text, options.followPlacementRotation ? boxRotation : rotation, sizeProps, void 0, options.amplifierField, labelPlacementKey);
3742
3773
  const contact = placement.position !== void 0 || options.rescanDefaultAnchors === true || anchor.contact === void 0 ? nearestPointOnPolyline(maskVerts, labelPoint) : anchor.contact;
3743
3774
  if (!contact) continue;
3744
3775
  if (placement.position && !labelBoxIntersectsSegment(labelPoint, ...contact.edge, textWidth, textHeight, boxRotation)) continue;
@@ -3747,6 +3778,14 @@ function pushHostileMarkers(out, maskVerts, text, anchors, options, amplifierPla
3747
3778
  }
3748
3779
  return gaps;
3749
3780
  }
3781
+ /** Emits movable Field N markers using the generic boundary-marker knockout path. */
3782
+ function pushHostileMarkers(out, maskVerts, text, anchors, options, amplifierPlacements) {
3783
+ return pushBoundaryMarkers(out, maskVerts, text, anchors, {
3784
+ ...options,
3785
+ placementKeyPrefix: "label:N",
3786
+ amplifierField: "N"
3787
+ }, amplifierPlacements);
3788
+ }
3750
3789
  function pushAreaLabels(out, ringVerts, texts, options = {}, amplifierPlacements, maskBoundary) {
3751
3790
  if (ringVerts.length < 2) return [];
3752
3791
  const sizeProps = labelSizeProps(options);
@@ -3986,6 +4025,7 @@ const AREA_DEFENSE_METADATA = {
3986
4025
  params: [
3987
4026
  {
3988
4027
  key: "arrowOpeningAngle",
4028
+ presentationTier: "advanced",
3989
4029
  label: "Arrow opening",
3990
4030
  description: "Angular opening between the two arrow tips, in degrees",
3991
4031
  type: "number",
@@ -3995,6 +4035,7 @@ const AREA_DEFENSE_METADATA = {
3995
4035
  },
3996
4036
  {
3997
4037
  key: "labelOpeningAngle",
4038
+ presentationTier: "advanced",
3998
4039
  label: "AD opening",
3999
4040
  description: "Angular opening occupied by the AD label, in degrees",
4000
4041
  type: "number",
@@ -4004,6 +4045,7 @@ const AREA_DEFENSE_METADATA = {
4004
4045
  },
4005
4046
  {
4006
4047
  key: "barbCount",
4048
+ presentationTier: "advanced",
4007
4049
  label: "Barbs",
4008
4050
  description: "Number of filled outward barbs distributed around the defense",
4009
4051
  type: "number",
@@ -4013,6 +4055,7 @@ const AREA_DEFENSE_METADATA = {
4013
4055
  },
4014
4056
  {
4015
4057
  key: "barbLengthRatio",
4058
+ presentationTier: "advanced",
4016
4059
  label: "Barb length",
4017
4060
  description: "Barb height as a ratio of the symbol radius",
4018
4061
  type: "number",
@@ -4022,6 +4065,7 @@ const AREA_DEFENSE_METADATA = {
4022
4065
  },
4023
4066
  {
4024
4067
  key: "arrowheadLengthRatio",
4068
+ presentationTier: "advanced",
4025
4069
  label: "Arrowhead length",
4026
4070
  description: "Open-arrowhead length as a ratio of the symbol radius",
4027
4071
  type: "number",
@@ -4806,6 +4850,7 @@ const ANTITANK_DITCH_PARAMS = [
4806
4850
  },
4807
4851
  {
4808
4852
  key: "toothWidthRatio",
4853
+ presentationTier: "advanced",
4809
4854
  label: "Tooth width ratio",
4810
4855
  description: "Tooth base span as a multiple of height",
4811
4856
  type: "number",
@@ -4818,6 +4863,7 @@ const ANTITANK_DITCH_PARAMS = [
4818
4863
  ];
4819
4864
  const ANTITANK_WALL_PARAMS = [...ANTITANK_DITCH_PARAMS, {
4820
4865
  key: "toothSpacingRatio",
4866
+ presentationTier: "advanced",
4821
4867
  label: "Tooth spacing ratio",
4822
4868
  description: "Gap between teeth as a multiple of base width",
4823
4869
  type: "number",
@@ -5247,6 +5293,7 @@ const ATTACK_HELICOPTER_METADATA = {
5247
5293
  ...ATTACK_SHAFT_PARAMS,
5248
5294
  {
5249
5295
  key: "symbolHeightRatio",
5296
+ presentationTier: "advanced",
5250
5297
  label: "Symbol height",
5251
5298
  description: "Height of the helicopter symbol as a ratio of the head width.",
5252
5299
  type: "number",
@@ -5256,6 +5303,7 @@ const ATTACK_HELICOPTER_METADATA = {
5256
5303
  },
5257
5304
  {
5258
5305
  key: "triangleSizeRatio",
5306
+ presentationTier: "advanced",
5259
5307
  label: "Triangle size",
5260
5308
  description: "Size of the top triangle relative to the reference unit.",
5261
5309
  type: "number",
@@ -5265,6 +5313,7 @@ const ATTACK_HELICOPTER_METADATA = {
5265
5313
  },
5266
5314
  {
5267
5315
  key: "bottomBarWidthRatio",
5316
+ presentationTier: "advanced",
5268
5317
  label: "Bottom bar width",
5269
5318
  description: "Width of the bottom bar relative to the reference triangle.",
5270
5319
  type: "number",
@@ -5274,6 +5323,7 @@ const ATTACK_HELICOPTER_METADATA = {
5274
5323
  },
5275
5324
  {
5276
5325
  key: "bowtieWidthRatio",
5326
+ presentationTier: "advanced",
5277
5327
  label: "Bowtie width",
5278
5328
  description: "Size of the central bowtie relative to the reference triangle.",
5279
5329
  type: "number",
@@ -5673,6 +5723,7 @@ const BLOCK_ARROW_METADATA = {
5673
5723
  params: [
5674
5724
  {
5675
5725
  key: "shaftWidthRatio",
5726
+ presentationTier: "advanced",
5676
5727
  label: "Shaft width",
5677
5728
  description: "Shaft band width as a fraction of the total path length",
5678
5729
  type: "number",
@@ -5718,6 +5769,7 @@ const BLOCK_ARROW_METADATA = {
5718
5769
  },
5719
5770
  {
5720
5771
  key: "arrowheadWidthRatio",
5772
+ presentationTier: "advanced",
5721
5773
  label: "Arrowhead width",
5722
5774
  description: "Arrowhead base width as a ratio of the total path length",
5723
5775
  type: "number",
@@ -5727,6 +5779,7 @@ const BLOCK_ARROW_METADATA = {
5727
5779
  },
5728
5780
  {
5729
5781
  key: "arrowheadLengthRatio",
5782
+ presentationTier: "advanced",
5730
5783
  label: "Arrowhead length",
5731
5784
  description: "Arrowhead length as a ratio of the total path length",
5732
5785
  type: "number",
@@ -5742,6 +5795,7 @@ const BLOCK_ARROW_METADATA = {
5742
5795
  },
5743
5796
  {
5744
5797
  key: "smoothResolution",
5798
+ presentationTier: "advanced",
5745
5799
  label: "Smooth resolution",
5746
5800
  description: "Number of samples per segment when smooth mode is enabled",
5747
5801
  type: "number",
@@ -5945,6 +5999,7 @@ const BOUNDARY_METADATA = {
5945
5999
  },
5946
6000
  {
5947
6001
  key: "smoothResolution",
6002
+ presentationTier: "advanced",
5948
6003
  label: "Smooth resolution",
5949
6004
  description: "Number of samples per segment when smooth mode is enabled.",
5950
6005
  type: "number",
@@ -5955,6 +6010,8 @@ const BOUNDARY_METADATA = {
5955
6010
  },
5956
6011
  {
5957
6012
  key: "echelon",
6013
+ presentationTier: "primary",
6014
+ semanticRole: "doctrinal",
5958
6015
  label: "Echelon",
5959
6016
  description: "Field B unit-size amplifier, drawn on the line",
5960
6017
  type: "enum",
@@ -5982,6 +6039,7 @@ const BOUNDARY_METADATA = {
5982
6039
  },
5983
6040
  {
5984
6041
  key: "echelonPadding",
6042
+ presentationTier: "advanced",
5985
6043
  label: "Echelon padding",
5986
6044
  description: "Gap on each side of the echelon, as a ratio of its height",
5987
6045
  type: "number",
@@ -5991,6 +6049,7 @@ const BOUNDARY_METADATA = {
5991
6049
  },
5992
6050
  {
5993
6051
  key: "labelRepetitions",
6052
+ presentationTier: "advanced",
5994
6053
  label: "Label groups",
5995
6054
  description: "Number of label groups spaced evenly along the whole boundary",
5996
6055
  type: "number",
@@ -6000,6 +6059,7 @@ const BOUNDARY_METADATA = {
6000
6059
  },
6001
6060
  {
6002
6061
  key: "labelPosition",
6062
+ presentationTier: "advanced",
6003
6063
  label: "Label position",
6004
6064
  description: "Position of the label group along the boundary, from the first point (0) to the last (1)",
6005
6065
  type: "number",
@@ -6010,6 +6070,7 @@ const BOUNDARY_METADATA = {
6010
6070
  },
6011
6071
  {
6012
6072
  key: "labelSpacing",
6073
+ presentationTier: "advanced",
6013
6074
  label: "Label spacing",
6014
6075
  description: "Spread of label groups: 1 spreads evenly, lower clusters them toward the middle.",
6015
6076
  type: "number",
@@ -6020,6 +6081,7 @@ const BOUNDARY_METADATA = {
6020
6081
  },
6021
6082
  {
6022
6083
  key: "labelPadding",
6084
+ presentationTier: "advanced",
6023
6085
  label: "Label padding",
6024
6086
  description: "Gap between the line/echelon and the unit labels, as a ratio of the echelon height",
6025
6087
  type: "number",
@@ -6029,6 +6091,7 @@ const BOUNDARY_METADATA = {
6029
6091
  },
6030
6092
  {
6031
6093
  key: "labelOrientation",
6094
+ presentationTier: "advanced",
6032
6095
  label: "Label orientation",
6033
6096
  description: "Unit labels along the line, or per MIL-STD-2525E Figure L-10: on mostly north–south segments the label group rotates perpendicular to the line as a single row crossing it.",
6034
6097
  type: "enum",
@@ -6246,6 +6309,8 @@ const LIGHT_LINE_METADATA = {
6246
6309
  ...SMOOTH_LINE_PARAMS,
6247
6310
  {
6248
6311
  key: "phaseLineName",
6312
+ presentationTier: "primary",
6313
+ semanticRole: "doctrinal",
6249
6314
  label: "Phase line name",
6250
6315
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
6251
6316
  type: "text",
@@ -6262,6 +6327,7 @@ const LIGHT_LINE_METADATA = {
6262
6327
  },
6263
6328
  {
6264
6329
  key: "labelPadding",
6330
+ presentationTier: "advanced",
6265
6331
  label: "Label padding",
6266
6332
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
6267
6333
  type: "number",
@@ -6322,6 +6388,8 @@ const ENGINEER_WORK_LINE_METADATA = {
6322
6388
  ...SMOOTH_LINE_PARAMS,
6323
6389
  {
6324
6390
  key: "phaseLineName",
6391
+ presentationTier: "primary",
6392
+ semanticRole: "doctrinal",
6325
6393
  label: "Phase line name",
6326
6394
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
6327
6395
  type: "text",
@@ -6338,6 +6406,7 @@ const ENGINEER_WORK_LINE_METADATA = {
6338
6406
  },
6339
6407
  {
6340
6408
  key: "labelPadding",
6409
+ presentationTier: "advanced",
6341
6410
  label: "Label padding",
6342
6411
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
6343
6412
  type: "number",
@@ -6462,6 +6531,8 @@ const GENERIC_C2_LINE_METADATA = {
6462
6531
  ...SMOOTH_LINE_PARAMS,
6463
6532
  {
6464
6533
  key: "phaseLineName",
6534
+ presentationTier: "primary",
6535
+ semanticRole: "doctrinal",
6465
6536
  label: "Phase line name",
6466
6537
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
6467
6538
  type: "text",
@@ -6478,6 +6549,7 @@ const GENERIC_C2_LINE_METADATA = {
6478
6549
  },
6479
6550
  {
6480
6551
  key: "labelPadding",
6552
+ presentationTier: "advanced",
6481
6553
  label: "Label padding",
6482
6554
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
6483
6555
  type: "number",
@@ -6727,6 +6799,7 @@ const BLOCK_MISSION_TASK_METADATA = {
6727
6799
  capturesLabelSize: true,
6728
6800
  params: [{
6729
6801
  key: "labelGapRatio",
6802
+ presentationTier: "advanced",
6730
6803
  label: "Label gap",
6731
6804
  description: "Size of the shaft gap holding the 'B' label, as a ratio of the front length",
6732
6805
  type: "number",
@@ -6826,6 +6899,7 @@ const BREACH_METADATA = {
6826
6899
  params: [
6827
6900
  {
6828
6901
  key: "tickLengthRatio",
6902
+ presentationTier: "advanced",
6829
6903
  label: "Tick length",
6830
6904
  description: "Length of the outward end ticks, as a ratio of the front opening width",
6831
6905
  type: "number",
@@ -6835,6 +6909,7 @@ const BREACH_METADATA = {
6835
6909
  },
6836
6910
  {
6837
6911
  key: "tickAngle",
6912
+ presentationTier: "advanced",
6838
6913
  label: "Tick angle",
6839
6914
  description: "Outward lean of the end ticks from perpendicular, in degrees",
6840
6915
  type: "number",
@@ -6844,6 +6919,7 @@ const BREACH_METADATA = {
6844
6919
  },
6845
6920
  {
6846
6921
  key: "labelGapRatio",
6922
+ presentationTier: "advanced",
6847
6923
  label: "Label gap",
6848
6924
  description: "Size of the rear-line gap holding the 'B' label, as a ratio of the front length",
6849
6925
  type: "number",
@@ -6926,6 +7002,7 @@ const BYPASS_METADATA = {
6926
7002
  capturesLabelSize: true,
6927
7003
  params: [{
6928
7004
  key: "arrowheadLengthRatio",
7005
+ presentationTier: "advanced",
6929
7006
  label: "Arrowhead length",
6930
7007
  description: "Arrowhead length as a ratio of the front opening width",
6931
7008
  type: "number",
@@ -6934,6 +7011,7 @@ const BYPASS_METADATA = {
6934
7011
  step: .01
6935
7012
  }, {
6936
7013
  key: "labelGapRatio",
7014
+ presentationTier: "advanced",
6937
7015
  label: "Label gap",
6938
7016
  description: "Size of the rear-line gap holding the 'B' label, as a ratio of the front length",
6939
7017
  type: "number",
@@ -7007,6 +7085,7 @@ const CANALIZE_METADATA = {
7007
7085
  params: [
7008
7086
  {
7009
7087
  key: "tickLengthRatio",
7088
+ presentationTier: "advanced",
7010
7089
  label: "Tick length",
7011
7090
  description: "Length of the inward end ticks, as a ratio of the front opening width",
7012
7091
  type: "number",
@@ -7016,6 +7095,7 @@ const CANALIZE_METADATA = {
7016
7095
  },
7017
7096
  {
7018
7097
  key: "tickAngle",
7098
+ presentationTier: "advanced",
7019
7099
  label: "Tick angle",
7020
7100
  description: "Inward lean of the end ticks from perpendicular, in degrees",
7021
7101
  type: "number",
@@ -7025,6 +7105,7 @@ const CANALIZE_METADATA = {
7025
7105
  },
7026
7106
  {
7027
7107
  key: "labelGapRatio",
7108
+ presentationTier: "advanced",
7028
7109
  label: "Label gap",
7029
7110
  description: "Size of the rear-line gap holding the 'C' label, as a ratio of the front length",
7030
7111
  type: "number",
@@ -7115,6 +7196,7 @@ const CLASSIC_ARROW_METADATA = {
7115
7196
  },
7116
7197
  {
7117
7198
  key: "smoothResolution",
7199
+ presentationTier: "advanced",
7118
7200
  label: "Smooth resolution",
7119
7201
  description: "Number of samples per segment when smooth mode is enabled",
7120
7202
  type: "number",
@@ -7173,6 +7255,7 @@ const CLASSIC_ARROW_METADATA = {
7173
7255
  },
7174
7256
  {
7175
7257
  key: "arrowheadLengthRatio",
7258
+ presentationTier: "advanced",
7176
7259
  label: "Arrowhead length",
7177
7260
  description: "Arrowhead length as a ratio of the total path length",
7178
7261
  type: "number",
@@ -7182,6 +7265,7 @@ const CLASSIC_ARROW_METADATA = {
7182
7265
  },
7183
7266
  {
7184
7267
  key: "arrowheadWidthRatio",
7268
+ presentationTier: "advanced",
7185
7269
  label: "Arrowhead width",
7186
7270
  description: "Arrowhead base width as a ratio of the total path length",
7187
7271
  type: "number",
@@ -7390,6 +7474,7 @@ const SMOOTH_PATH_PARAMS = [{
7390
7474
  type: "boolean"
7391
7475
  }, {
7392
7476
  key: "smoothResolution",
7477
+ presentationTier: "advanced",
7393
7478
  label: "Smooth resolution",
7394
7479
  description: "Number of samples per segment when smooth mode is enabled.",
7395
7480
  type: "number",
@@ -7749,7 +7834,9 @@ const GENERIC_TEXT_METADATA = {
7749
7834
  description: "The text to render. Explicit line breaks are honored; it never auto-wraps.",
7750
7835
  type: "text",
7751
7836
  placeholder: "Text",
7752
- multiline: true
7837
+ multiline: true,
7838
+ presentationTier: "primary",
7839
+ semanticRole: "content"
7753
7840
  },
7754
7841
  {
7755
7842
  key: "textAlign",
@@ -7919,6 +8006,7 @@ const CLEAR_METADATA = {
7919
8006
  params: [
7920
8007
  {
7921
8008
  key: "arrowInsetRatio",
8009
+ presentationTier: "advanced",
7922
8010
  label: "Arrow padding",
7923
8011
  description: "Padding between the line endpoints and the outer arrows, as a ratio of height",
7924
8012
  type: "number",
@@ -7928,6 +8016,7 @@ const CLEAR_METADATA = {
7928
8016
  },
7929
8017
  {
7930
8018
  key: "arrowheadLengthRatio",
8019
+ presentationTier: "advanced",
7931
8020
  label: "Arrowhead length",
7932
8021
  description: "Arrowhead length as a ratio of the symbol height",
7933
8022
  type: "number",
@@ -7937,6 +8026,7 @@ const CLEAR_METADATA = {
7937
8026
  },
7938
8027
  {
7939
8028
  key: "arrowheadWidthRatio",
8029
+ presentationTier: "advanced",
7940
8030
  label: "Arrowhead width",
7941
8031
  description: "Arrowhead base width as a ratio of the symbol height",
7942
8032
  type: "number",
@@ -7946,6 +8036,7 @@ const CLEAR_METADATA = {
7946
8036
  },
7947
8037
  {
7948
8038
  key: "labelGapRatio",
8039
+ presentationTier: "advanced",
7949
8040
  label: "Label gap",
7950
8041
  description: "Size of the shaft gap holding the 'C' label, as a ratio of the shaft length",
7951
8042
  type: "number",
@@ -8152,6 +8243,7 @@ const COUNTERATTACK_METADATA = {
8152
8243
  capturesLabelSize: true,
8153
8244
  params: [...ATTACK_SHAFT_PARAMS, {
8154
8245
  key: "labelPosition",
8246
+ presentationTier: "advanced",
8155
8247
  label: "Label position",
8156
8248
  description: "Position of the CATK label along the shaft, from tail (0) to head (1)",
8157
8249
  type: "number",
@@ -8271,6 +8363,7 @@ const COUNTERATTACK_BY_FIRE_METADATA = {
8271
8363
  capturesLabelSize: true,
8272
8364
  params: [...ATTACK_SHAFT_PARAMS, {
8273
8365
  key: "labelPosition",
8366
+ presentationTier: "advanced",
8274
8367
  label: "Label position",
8275
8368
  description: "Position of the CATK label along the shaft, from tail (0) to head (1)",
8276
8369
  type: "number",
@@ -8486,6 +8579,7 @@ const SEARCH_AREA_METADATA = {
8486
8579
  params: [
8487
8580
  {
8488
8581
  key: "arrowheadLengthRatio",
8582
+ presentationTier: "advanced",
8489
8583
  label: "Arrowhead length",
8490
8584
  description: "Arrowhead length as a ratio of the total leg length",
8491
8585
  type: "number",
@@ -8495,6 +8589,7 @@ const SEARCH_AREA_METADATA = {
8495
8589
  },
8496
8590
  {
8497
8591
  key: "arrowheadWidthRatio",
8592
+ presentationTier: "advanced",
8498
8593
  label: "Arrowhead width",
8499
8594
  description: "Arrowhead base width as a multiple of the arrowhead length",
8500
8595
  type: "number",
@@ -8504,6 +8599,7 @@ const SEARCH_AREA_METADATA = {
8504
8599
  },
8505
8600
  {
8506
8601
  key: "zigzagStart",
8602
+ presentationTier: "advanced",
8507
8603
  label: "Zigzag start",
8508
8604
  description: "Point along the leg where the zigzag begins (0-1).",
8509
8605
  type: "number",
@@ -8513,6 +8609,7 @@ const SEARCH_AREA_METADATA = {
8513
8609
  },
8514
8610
  {
8515
8611
  key: "zigzagEnd",
8612
+ presentationTier: "advanced",
8516
8613
  label: "Zigzag end",
8517
8614
  description: "Point along the leg where the zigzag returns (0-1).",
8518
8615
  type: "number",
@@ -8522,6 +8619,7 @@ const SEARCH_AREA_METADATA = {
8522
8619
  },
8523
8620
  {
8524
8621
  key: "zigzagAmplitudeRatio",
8622
+ presentationTier: "advanced",
8525
8623
  label: "Zigzag amplitude",
8526
8624
  description: "Perpendicular kink offset as a ratio of leg length.",
8527
8625
  type: "number",
@@ -8631,6 +8729,7 @@ const DEFAULT_SECURITY_TASK_OPTIONS = {
8631
8729
  const SECURITY_TASK_PARAMS = [
8632
8730
  {
8633
8731
  key: "arrowheadLengthRatio",
8732
+ presentationTier: "advanced",
8634
8733
  label: "Arrowhead length",
8635
8734
  description: "Arrowhead length as a ratio of the total leg length",
8636
8735
  type: "number",
@@ -8640,6 +8739,7 @@ const SECURITY_TASK_PARAMS = [
8640
8739
  },
8641
8740
  {
8642
8741
  key: "arrowheadWidthRatio",
8742
+ presentationTier: "advanced",
8643
8743
  label: "Arrowhead width",
8644
8744
  description: "Arrowhead base width as a multiple of the arrowhead length",
8645
8745
  type: "number",
@@ -8649,6 +8749,7 @@ const SECURITY_TASK_PARAMS = [
8649
8749
  },
8650
8750
  {
8651
8751
  key: "zigzagStart",
8752
+ presentationTier: "advanced",
8652
8753
  label: "Zigzag start",
8653
8754
  description: "Point along the leg where the zigzag begins (0-1).",
8654
8755
  type: "number",
@@ -8658,6 +8759,7 @@ const SECURITY_TASK_PARAMS = [
8658
8759
  },
8659
8760
  {
8660
8761
  key: "zigzagEnd",
8762
+ presentationTier: "advanced",
8661
8763
  label: "Zigzag end",
8662
8764
  description: "Point along the leg where the zigzag returns (0-1).",
8663
8765
  type: "number",
@@ -8667,6 +8769,7 @@ const SECURITY_TASK_PARAMS = [
8667
8769
  },
8668
8770
  {
8669
8771
  key: "zigzagAmplitudeRatio",
8772
+ presentationTier: "advanced",
8670
8773
  label: "Zigzag amplitude",
8671
8774
  description: "Perpendicular kink offset as a ratio of leg length.",
8672
8775
  type: "number",
@@ -8676,6 +8779,7 @@ const SECURITY_TASK_PARAMS = [
8676
8779
  },
8677
8780
  {
8678
8781
  key: "labelInsetRatio",
8782
+ presentationTier: "advanced",
8679
8783
  label: "Letter position",
8680
8784
  description: "Inset of each task letter from PT. 2 or PT. 3 across the center opening",
8681
8785
  type: "number",
@@ -8814,6 +8918,7 @@ const DEFAULT_DELAY_OPTIONS = {
8814
8918
  const DELAY_PARAMS = [
8815
8919
  {
8816
8920
  key: "arrowheadLengthRatio",
8921
+ presentationTier: "advanced",
8817
8922
  label: "Arrowhead length",
8818
8923
  description: "Arrowhead length as a ratio of the straight-line length",
8819
8924
  type: "number",
@@ -8823,6 +8928,7 @@ const DELAY_PARAMS = [
8823
8928
  },
8824
8929
  {
8825
8930
  key: "arrowheadWidthRatio",
8931
+ presentationTier: "advanced",
8826
8932
  label: "Arrowhead width",
8827
8933
  description: "Arrowhead base width as a ratio of the straight-line length",
8828
8934
  type: "number",
@@ -8832,6 +8938,7 @@ const DELAY_PARAMS = [
8832
8938
  },
8833
8939
  {
8834
8940
  key: "labelGapRatio",
8941
+ presentationTier: "advanced",
8835
8942
  label: "Label gap",
8836
8943
  description: "Size of the shaft gap holding the task label, as a ratio of the shaft length",
8837
8944
  type: "number",
@@ -8841,6 +8948,7 @@ const DELAY_PARAMS = [
8841
8948
  },
8842
8949
  {
8843
8950
  key: "arcSegments",
8951
+ presentationTier: "advanced",
8844
8952
  label: "Arc segments",
8845
8953
  description: "Number of straight segments used to approximate the semicircular arc",
8846
8954
  type: "number",
@@ -9028,6 +9136,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9028
9136
  params: [
9029
9137
  {
9030
9138
  key: "middleArrowLengthRatio",
9139
+ presentationTier: "advanced",
9031
9140
  label: "Middle arrow length",
9032
9141
  description: "Middle arrow length as a ratio of the PT.3-controlled top arrow",
9033
9142
  type: "number",
@@ -9037,6 +9146,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9037
9146
  },
9038
9147
  {
9039
9148
  key: "bottomArrowLengthRatio",
9149
+ presentationTier: "advanced",
9040
9150
  label: "Bottom arrow length",
9041
9151
  description: "Bottom arrow length as a ratio of the PT.3-controlled top arrow",
9042
9152
  type: "number",
@@ -9046,6 +9156,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9046
9156
  },
9047
9157
  {
9048
9158
  key: "shaftLengthRatio",
9159
+ presentationTier: "advanced",
9049
9160
  label: "Rear shaft length",
9050
9161
  description: "Middle shaft extension behind the spine, as a ratio of the top arrow",
9051
9162
  type: "number",
@@ -9055,6 +9166,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9055
9166
  },
9056
9167
  {
9057
9168
  key: "arrowheadLengthRatio",
9169
+ presentationTier: "advanced",
9058
9170
  label: "Arrowhead length",
9059
9171
  description: "Arrowhead length as a ratio of the spine length",
9060
9172
  type: "number",
@@ -9064,6 +9176,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9064
9176
  },
9065
9177
  {
9066
9178
  key: "arrowheadWidthRatio",
9179
+ presentationTier: "advanced",
9067
9180
  label: "Arrowhead width",
9068
9181
  description: "Arrowhead base width as a ratio of the spine length",
9069
9182
  type: "number",
@@ -9073,6 +9186,7 @@ const DISRUPT_MISSION_TASK_METADATA = {
9073
9186
  },
9074
9187
  {
9075
9188
  key: "labelGapRatio",
9189
+ presentationTier: "advanced",
9076
9190
  label: "Label gap",
9077
9191
  description: "Size of the middle-shaft gap holding the 'D' label",
9078
9192
  type: "number",
@@ -9226,6 +9340,7 @@ const DISRUPT_METADATA = {
9226
9340
  params: [
9227
9341
  {
9228
9342
  key: "middleArrowLengthRatio",
9343
+ presentationTier: "advanced",
9229
9344
  label: "Middle arrow length",
9230
9345
  description: "Middle arrow length as a ratio of the longest (top) arrow.",
9231
9346
  type: "number",
@@ -9235,6 +9350,7 @@ const DISRUPT_METADATA = {
9235
9350
  },
9236
9351
  {
9237
9352
  key: "bottomArrowLengthRatio",
9353
+ presentationTier: "advanced",
9238
9354
  label: "Bottom arrow length",
9239
9355
  description: "Bottom arrow length as a ratio of the longest (top) arrow.",
9240
9356
  type: "number",
@@ -9244,6 +9360,7 @@ const DISRUPT_METADATA = {
9244
9360
  },
9245
9361
  {
9246
9362
  key: "shaftLengthRatio",
9363
+ presentationTier: "advanced",
9247
9364
  label: "Shaft length",
9248
9365
  description: "Center shaft length as a ratio of the longest arrow, extending opposite.",
9249
9366
  type: "number",
@@ -9253,6 +9370,7 @@ const DISRUPT_METADATA = {
9253
9370
  },
9254
9371
  {
9255
9372
  key: "arrowheadLengthRatio",
9373
+ presentationTier: "advanced",
9256
9374
  label: "Arrowhead length",
9257
9375
  description: "Arrowhead length as a ratio of the longest arrow",
9258
9376
  type: "number",
@@ -9262,6 +9380,7 @@ const DISRUPT_METADATA = {
9262
9380
  },
9263
9381
  {
9264
9382
  key: "arrowheadWidthRatio",
9383
+ presentationTier: "advanced",
9265
9384
  label: "Arrowhead width",
9266
9385
  description: "Arrowhead base width as a ratio of the longest arrow",
9267
9386
  type: "number",
@@ -9685,6 +9804,7 @@ const FPF_SHARED = {
9685
9804
  params: [
9686
9805
  {
9687
9806
  key: "arrowheadLengthRatio",
9807
+ presentationTier: "advanced",
9688
9808
  label: "Arrowhead length",
9689
9809
  description: "Arrowhead length as a ratio of each arm's length",
9690
9810
  type: "number",
@@ -9694,6 +9814,7 @@ const FPF_SHARED = {
9694
9814
  },
9695
9815
  {
9696
9816
  key: "arrowheadWidthRatio",
9817
+ presentationTier: "advanced",
9697
9818
  label: "Arrowhead width",
9698
9819
  description: "Arrowhead base width as a multiple of the arrowhead length",
9699
9820
  type: "number",
@@ -9703,6 +9824,7 @@ const FPF_SHARED = {
9703
9824
  },
9704
9825
  {
9705
9826
  key: "bladeHeightRatio",
9827
+ presentationTier: "advanced",
9706
9828
  label: "Blade height",
9707
9829
  description: "Blade's perpendicular reach into the V, as a fraction of its arm's length",
9708
9830
  type: "number",
@@ -9873,6 +9995,7 @@ const FIX_METADATA = {
9873
9995
  params: [
9874
9996
  {
9875
9997
  key: "arrowheadAngle",
9998
+ presentationTier: "advanced",
9876
9999
  label: "Arrowhead angle",
9877
10000
  description: "Half-angle of the open arrowhead wings, in degrees.",
9878
10001
  type: "number",
@@ -9882,6 +10005,7 @@ const FIX_METADATA = {
9882
10005
  },
9883
10006
  {
9884
10007
  key: "arrowheadLengthRatio",
10008
+ presentationTier: "advanced",
9885
10009
  label: "Arrowhead length",
9886
10010
  description: "Arrowhead length as a ratio of the axis length",
9887
10011
  type: "number",
@@ -9891,6 +10015,7 @@ const FIX_METADATA = {
9891
10015
  },
9892
10016
  {
9893
10017
  key: "endSegmentRatio",
10018
+ presentationTier: "advanced",
9894
10019
  label: "End segment",
9895
10020
  description: "Flat end segment length as a ratio of the axis (capped at 0.35).",
9896
10021
  type: "number",
@@ -10015,6 +10140,7 @@ const FIX_MISSION_TASK_METADATA = {
10015
10140
  params: [
10016
10141
  {
10017
10142
  key: "arrowheadLengthRatio",
10143
+ presentationTier: "advanced",
10018
10144
  label: "Arrowhead length",
10019
10145
  description: "Arrowhead length as a ratio of the axis length",
10020
10146
  type: "number",
@@ -10024,6 +10150,7 @@ const FIX_MISSION_TASK_METADATA = {
10024
10150
  },
10025
10151
  {
10026
10152
  key: "arrowheadWidthRatio",
10153
+ presentationTier: "advanced",
10027
10154
  label: "Arrowhead width",
10028
10155
  description: "Arrowhead base width as a ratio of the axis length",
10029
10156
  type: "number",
@@ -10033,6 +10160,7 @@ const FIX_MISSION_TASK_METADATA = {
10033
10160
  },
10034
10161
  {
10035
10162
  key: "zigzagStartRatio",
10163
+ presentationTier: "advanced",
10036
10164
  label: "Zigzag start",
10037
10165
  description: "Position where the zigzag begins, measured from PT2",
10038
10166
  type: "number",
@@ -10042,6 +10170,7 @@ const FIX_MISSION_TASK_METADATA = {
10042
10170
  },
10043
10171
  {
10044
10172
  key: "zigzagEndRatio",
10173
+ presentationTier: "advanced",
10045
10174
  label: "Zigzag end",
10046
10175
  description: "Position where the zigzag ends, measured from PT2",
10047
10176
  type: "number",
@@ -10051,6 +10180,7 @@ const FIX_MISSION_TASK_METADATA = {
10051
10180
  },
10052
10181
  {
10053
10182
  key: "zigzagPeakCount",
10183
+ presentationTier: "advanced",
10054
10184
  label: "Zigzag peaks",
10055
10185
  description: "Number of upward peaks in the zigzag body",
10056
10186
  type: "number",
@@ -10060,6 +10190,7 @@ const FIX_MISSION_TASK_METADATA = {
10060
10190
  },
10061
10191
  {
10062
10192
  key: "labelPositionRatio",
10193
+ presentationTier: "advanced",
10063
10194
  label: "Label position",
10064
10195
  description: "Position of the F label along the axis, measured from PT2",
10065
10196
  type: "number",
@@ -10069,6 +10200,7 @@ const FIX_MISSION_TASK_METADATA = {
10069
10200
  },
10070
10201
  {
10071
10202
  key: "labelGapRatio",
10203
+ presentationTier: "advanced",
10072
10204
  label: "Label gap",
10073
10205
  description: "Size of the shaft gap holding the F label",
10074
10206
  type: "number",
@@ -10209,6 +10341,7 @@ const FLOT_METADATA = {
10209
10341
  LINE_LABEL_PADDING_PARAM,
10210
10342
  {
10211
10343
  key: "arcSegments",
10344
+ presentationTier: "advanced",
10212
10345
  label: "Arc segments",
10213
10346
  description: "Number of points used to render each semicircle",
10214
10347
  type: "number",
@@ -10387,6 +10520,7 @@ const PHASE_LINE_METADATA = {
10387
10520
  },
10388
10521
  {
10389
10522
  key: "labelPadding",
10523
+ presentationTier: "advanced",
10390
10524
  label: "Label padding",
10391
10525
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10392
10526
  type: "number",
@@ -10456,6 +10590,8 @@ const BRIDGEHEAD_LINE_METADATA = {
10456
10590
  ...SMOOTH_LINE_PARAMS,
10457
10591
  {
10458
10592
  key: "phaseLineName",
10593
+ presentationTier: "primary",
10594
+ semanticRole: "doctrinal",
10459
10595
  label: "Phase line name",
10460
10596
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
10461
10597
  type: "text",
@@ -10472,6 +10608,7 @@ const BRIDGEHEAD_LINE_METADATA = {
10472
10608
  },
10473
10609
  {
10474
10610
  key: "labelPadding",
10611
+ presentationTier: "advanced",
10475
10612
  label: "Label padding",
10476
10613
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10477
10614
  type: "number",
@@ -10529,6 +10666,8 @@ const HOLDING_LINE_METADATA = {
10529
10666
  ...SMOOTH_LINE_PARAMS,
10530
10667
  {
10531
10668
  key: "phaseLineName",
10669
+ presentationTier: "primary",
10670
+ semanticRole: "doctrinal",
10532
10671
  label: "Phase line name",
10533
10672
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
10534
10673
  type: "text",
@@ -10545,6 +10684,7 @@ const HOLDING_LINE_METADATA = {
10545
10684
  },
10546
10685
  {
10547
10686
  key: "labelPadding",
10687
+ presentationTier: "advanced",
10548
10688
  label: "Label padding",
10549
10689
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10550
10690
  type: "number",
@@ -10602,6 +10742,8 @@ const RELEASE_LINE_METADATA = {
10602
10742
  ...SMOOTH_LINE_PARAMS,
10603
10743
  {
10604
10744
  key: "phaseLineName",
10745
+ presentationTier: "primary",
10746
+ semanticRole: "doctrinal",
10605
10747
  label: "Phase line name",
10606
10748
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
10607
10749
  type: "text",
@@ -10618,6 +10760,7 @@ const RELEASE_LINE_METADATA = {
10618
10760
  },
10619
10761
  {
10620
10762
  key: "labelPadding",
10763
+ presentationTier: "advanced",
10621
10764
  label: "Label padding",
10622
10765
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10623
10766
  type: "number",
@@ -10675,6 +10818,8 @@ const FORWARD_EDGE_OF_BATTLE_AREA_METADATA = {
10675
10818
  ...SMOOTH_LINE_PARAMS,
10676
10819
  {
10677
10820
  key: "phaseLineName",
10821
+ presentationTier: "primary",
10822
+ semanticRole: "doctrinal",
10678
10823
  label: "Phase line name",
10679
10824
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
10680
10825
  type: "text",
@@ -10691,6 +10836,7 @@ const FORWARD_EDGE_OF_BATTLE_AREA_METADATA = {
10691
10836
  },
10692
10837
  {
10693
10838
  key: "labelPadding",
10839
+ presentationTier: "advanced",
10694
10840
  label: "Label padding",
10695
10841
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10696
10842
  type: "number",
@@ -10756,7 +10902,9 @@ const HANDOVER_LINE_METADATA = {
10756
10902
  type: "text",
10757
10903
  placeholder: "DAVID",
10758
10904
  maxLength: 21,
10759
- field: "T"
10905
+ field: "T",
10906
+ presentationTier: "primary",
10907
+ semanticRole: "doctrinal"
10760
10908
  },
10761
10909
  {
10762
10910
  key: "includePrefix",
@@ -10767,6 +10915,7 @@ const HANDOVER_LINE_METADATA = {
10767
10915
  },
10768
10916
  {
10769
10917
  key: "labelPadding",
10918
+ presentationTier: "advanced",
10770
10919
  label: "Label padding",
10771
10920
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10772
10921
  type: "number",
@@ -10827,6 +10976,8 @@ const BATTLE_HANDOVER_LINE_METADATA = {
10827
10976
  ...SMOOTH_LINE_PARAMS,
10828
10977
  {
10829
10978
  key: "phaseLineName",
10979
+ presentationTier: "primary",
10980
+ semanticRole: "doctrinal",
10830
10981
  label: "Phase line name",
10831
10982
  description: "Name the line as a phase line — rendered \"PL <name>\" beyond each end of the line.",
10832
10983
  type: "text",
@@ -10843,6 +10994,7 @@ const BATTLE_HANDOVER_LINE_METADATA = {
10843
10994
  },
10844
10995
  {
10845
10996
  key: "labelPadding",
10997
+ presentationTier: "advanced",
10846
10998
  label: "Label padding",
10847
10999
  description: "Extra clearance between the line and its labels, as a ratio of the label height",
10848
11000
  type: "number",
@@ -11228,6 +11380,7 @@ function createManeuverArrowTask(coordinates, options, textAmplifiers, config) {
11228
11380
  const MANEUVER_ARROW_TASK_PARAMS = [
11229
11381
  {
11230
11382
  key: "crossbarLengthRatio",
11383
+ presentationTier: "advanced",
11231
11384
  label: "Straight line length",
11232
11385
  description: "Crossbar length as a multiple of the arrowhead base width",
11233
11386
  type: "number",
@@ -11237,6 +11390,7 @@ const MANEUVER_ARROW_TASK_PARAMS = [
11237
11390
  },
11238
11391
  {
11239
11392
  key: "labelPosition",
11393
+ presentationTier: "advanced",
11240
11394
  label: "Designation position",
11241
11395
  description: "Position of Field T along the shaft, from tail (0) to head (1)",
11242
11396
  type: "number",
@@ -11246,6 +11400,7 @@ const MANEUVER_ARROW_TASK_PARAMS = [
11246
11400
  },
11247
11401
  {
11248
11402
  key: "dtgPosition",
11403
+ presentationTier: "advanced",
11249
11404
  label: "Date-time position",
11250
11405
  description: "Position of Fields W/W1 along the shaft, from tail (0) to head (1)",
11251
11406
  type: "number",
@@ -11255,6 +11410,7 @@ const MANEUVER_ARROW_TASK_PARAMS = [
11255
11410
  },
11256
11411
  {
11257
11412
  key: "labelPadding",
11413
+ presentationTier: "advanced",
11258
11414
  label: "Label padding",
11259
11415
  description: "Extra spacing between the W and W1 rows, in label heights",
11260
11416
  type: "number",
@@ -11364,6 +11520,7 @@ const ISOLATE_METADATA = {
11364
11520
  params: [
11365
11521
  {
11366
11522
  key: "openingAngle",
11523
+ presentationTier: "advanced",
11367
11524
  label: "Opening",
11368
11525
  description: "Angular width of the gap on the friendly side, in degrees",
11369
11526
  type: "number",
@@ -11373,6 +11530,7 @@ const ISOLATE_METADATA = {
11373
11530
  },
11374
11531
  {
11375
11532
  key: "barbCount",
11533
+ presentationTier: "advanced",
11376
11534
  label: "Barbs",
11377
11535
  description: "Number of inward-pointing barbs spaced along the closed arc",
11378
11536
  type: "number",
@@ -11382,6 +11540,7 @@ const ISOLATE_METADATA = {
11382
11540
  },
11383
11541
  {
11384
11542
  key: "barbLengthRatio",
11543
+ presentationTier: "advanced",
11385
11544
  label: "Barb length",
11386
11545
  description: "Length of each inward barb, as a ratio of the symbol radius",
11387
11546
  type: "number",
@@ -11497,6 +11656,7 @@ const PENETRATE_METADATA = {
11497
11656
  params: [
11498
11657
  {
11499
11658
  key: "arrowheadLengthRatio",
11659
+ presentationTier: "advanced",
11500
11660
  label: "Arrowhead length",
11501
11661
  description: "Arrowhead length as a ratio of the barrier length",
11502
11662
  type: "number",
@@ -11506,6 +11666,7 @@ const PENETRATE_METADATA = {
11506
11666
  },
11507
11667
  {
11508
11668
  key: "arrowheadWidthRatio",
11669
+ presentationTier: "advanced",
11509
11670
  label: "Arrowhead width",
11510
11671
  description: "Arrowhead base width as a ratio of the barrier length",
11511
11672
  type: "number",
@@ -11515,6 +11676,7 @@ const PENETRATE_METADATA = {
11515
11676
  },
11516
11677
  {
11517
11678
  key: "labelGapRatio",
11679
+ presentationTier: "advanced",
11518
11680
  label: "Label gap",
11519
11681
  description: "Size of the shaft gap holding the 'P' label",
11520
11682
  type: "number",
@@ -11738,6 +11900,7 @@ const SEIZE_METADATA = {
11738
11900
  params: [
11739
11901
  {
11740
11902
  key: "arrowheadLengthRatio",
11903
+ presentationTier: "advanced",
11741
11904
  label: "Arrowhead length",
11742
11905
  description: "Arrowhead length as a ratio of the PT. 2-to-PT. 4 span",
11743
11906
  type: "number",
@@ -11747,6 +11910,7 @@ const SEIZE_METADATA = {
11747
11910
  },
11748
11911
  {
11749
11912
  key: "arrowheadWidthRatio",
11913
+ presentationTier: "advanced",
11750
11914
  label: "Arrowhead width",
11751
11915
  description: "Arrowhead base width as a ratio of the PT. 2-to-PT. 4 span",
11752
11916
  type: "number",
@@ -11756,6 +11920,7 @@ const SEIZE_METADATA = {
11756
11920
  },
11757
11921
  {
11758
11922
  key: "labelGapRatio",
11923
+ presentationTier: "advanced",
11759
11924
  label: "Label gap",
11760
11925
  description: "Size of the curve gap holding the S label",
11761
11926
  type: "number",
@@ -11765,6 +11930,7 @@ const SEIZE_METADATA = {
11765
11930
  },
11766
11931
  {
11767
11932
  key: "curveSegments",
11933
+ presentationTier: "advanced",
11768
11934
  label: "Curve segments",
11769
11935
  description: "Number of straight segments used to approximate the circular arc",
11770
11936
  type: "number",
@@ -11774,6 +11940,7 @@ const SEIZE_METADATA = {
11774
11940
  },
11775
11941
  {
11776
11942
  key: "circleSegments",
11943
+ presentationTier: "advanced",
11777
11944
  label: "Circle segments",
11778
11945
  description: "Number of straight segments used to approximate the assigned-unit circle",
11779
11946
  type: "number",
@@ -12364,6 +12531,54 @@ const MAIN_ATTACK = defineControlMeasure({
12364
12531
  rule: axis1DrawRule
12365
12532
  });
12366
12533
  //#endregion
12534
+ //#region src/generators/cm27-protection-areas/mine-types.ts
12535
+ /** Shared Modifier 1 parameter used by all minefield and mined-area graphics. */
12536
+ const MINE_TYPE_PARAM = {
12537
+ key: "mineType",
12538
+ label: "Mine type",
12539
+ description: "Modifier 1 (symbol set 25 values 13–18).",
12540
+ type: "enum",
12541
+ presentationTier: "primary",
12542
+ semanticRole: "doctrinal",
12543
+ options: [
12544
+ {
12545
+ label: "Unspecified mine (13)",
12546
+ value: "unspecified"
12547
+ },
12548
+ {
12549
+ label: "Antipersonnel mine (14)",
12550
+ value: "antipersonnel"
12551
+ },
12552
+ {
12553
+ label: "Antipersonnel mine with directional effects (15)",
12554
+ value: "antipersonnel-directional"
12555
+ },
12556
+ {
12557
+ label: "Antitank mine (16)",
12558
+ value: "antitank"
12559
+ },
12560
+ {
12561
+ label: "Antitank mine with antihandling device (17)",
12562
+ value: "antitank-antihandling"
12563
+ },
12564
+ {
12565
+ label: "Wide area antitank mine (18)",
12566
+ value: "wide-area-antitank"
12567
+ }
12568
+ ]
12569
+ };
12570
+ const MINE_FILL_PATTERNS = {
12571
+ unspecified: "mine-unspecified",
12572
+ antipersonnel: "mine-antipersonnel",
12573
+ "antipersonnel-directional": "mine-antipersonnel-directional",
12574
+ antitank: "mine-antitank",
12575
+ "antitank-antihandling": "mine-antitank-antihandling",
12576
+ "wide-area-antitank": "mine-wide-area-antitank"
12577
+ };
12578
+ function mineFillPattern(mineType) {
12579
+ return MINE_FILL_PATTERNS[mineType];
12580
+ }
12581
+ //#endregion
12367
12582
  //#region src/generators/cm27-protection-areas/minefield.ts
12368
12583
  const DEFAULT_MINEFIELD_OPTIONS = {
12369
12584
  mineType: "unspecified",
@@ -12377,8 +12592,8 @@ const MINEFIELD_METADATA = {
12377
12592
  name: "Minefield",
12378
12593
  description: "A static point symbol identifying a minefield and its mine type.",
12379
12594
  entity: "Protection Areas",
12380
- entityType: "Minefield",
12381
- entitySubtype: "Minefield",
12595
+ entityType: "Minefield Symbol",
12596
+ entitySubtype: "Minefield (Static)",
12382
12597
  value: "270701",
12383
12598
  minCoordinates: 1,
12384
12599
  maxCoordinates: 1,
@@ -12396,38 +12611,7 @@ const MINEFIELD_METADATA = {
12396
12611
  },
12397
12612
  drawRule: "Point2",
12398
12613
  params: [
12399
- {
12400
- key: "mineType",
12401
- label: "Mine type",
12402
- description: "Modifier 1 (symbol set 25 values 13–18).",
12403
- type: "enum",
12404
- options: [
12405
- {
12406
- label: "Unspecified mine (13)",
12407
- value: "unspecified"
12408
- },
12409
- {
12410
- label: "Antipersonnel mine (14)",
12411
- value: "antipersonnel"
12412
- },
12413
- {
12414
- label: "Antipersonnel mine with directional effects (15)",
12415
- value: "antipersonnel-directional"
12416
- },
12417
- {
12418
- label: "Antitank mine (16)",
12419
- value: "antitank"
12420
- },
12421
- {
12422
- label: "Antitank mine with antihandling device (17)",
12423
- value: "antitank-antihandling"
12424
- },
12425
- {
12426
- label: "Wide area antitank mine (18)",
12427
- value: "wide-area-antitank"
12428
- }
12429
- ]
12430
- },
12614
+ MINE_TYPE_PARAM,
12431
12615
  {
12432
12616
  key: "sizeMeters",
12433
12617
  label: "Size",
@@ -12652,10 +12836,140 @@ const MINEFIELD = defineControlMeasure({
12652
12836
  }
12653
12837
  });
12654
12838
  //#endregion
12839
+ //#region src/generators/cm27-protection-areas/mine-areas.ts
12840
+ const DEFAULT_MINE_AREA_OPTIONS = {
12841
+ mineType: "unspecified",
12842
+ smooth: false,
12843
+ smoothResolution: 16
12844
+ };
12845
+ const COMMON_METADATA = {
12846
+ entity: "Protection Areas",
12847
+ minCoordinates: 3,
12848
+ geometry: "area",
12849
+ geometryTypes: [
12850
+ "Polygon",
12851
+ "MultiLineString",
12852
+ "Point"
12853
+ ],
12854
+ paints: {
12855
+ stroke: true,
12856
+ fill: "fixed",
12857
+ text: true
12858
+ },
12859
+ drawRule: "Area1",
12860
+ capturesLabelSize: true,
12861
+ params: [
12862
+ MINE_TYPE_PARAM,
12863
+ ...AREA_SMOOTH_PARAMS,
12864
+ AREA_LABEL_PADDING_PARAM
12865
+ ],
12866
+ textAmplifiers: [AREA_HOSTILE_AMPLIFIER]
12867
+ };
12868
+ const DYNAMIC_MINEFIELD_METADATA = {
12869
+ ...COMMON_METADATA,
12870
+ id: "minefield-dynamic",
12871
+ name: "Minefield (Dynamic)",
12872
+ description: "A free-area minefield filled with the selected Modifier 1 mine pictogram.",
12873
+ entityType: "Minefield Symbol",
12874
+ entitySubtype: "Minefield (Dynamic)",
12875
+ value: "270707"
12876
+ };
12877
+ const MINED_AREA_METADATA = {
12878
+ ...COMMON_METADATA,
12879
+ id: "mined-area",
12880
+ name: "Mined Area",
12881
+ description: "An area dangerous because of the presence or suspected presence of mines.",
12882
+ entityType: "Mined Area",
12883
+ value: "270800"
12884
+ };
12885
+ function axisIntersections(ring, axis, target) {
12886
+ const other = axis === 0 ? 1 : 0;
12887
+ const intersections = [];
12888
+ for (let index = 0; index < ring.length - 1; index++) {
12889
+ const a = ring[index];
12890
+ const b = ring[index + 1];
12891
+ const av = a[axis];
12892
+ const bv = b[axis];
12893
+ if (Math.min(av, bv) <= target && target < Math.max(av, bv)) {
12894
+ const ratio = (target - av) / (bv - av);
12895
+ const point = [0, 0];
12896
+ point[axis] = target;
12897
+ point[other] = a[other] + ratio * (b[other] - a[other]);
12898
+ intersections.push(point);
12899
+ }
12900
+ }
12901
+ return intersections;
12902
+ }
12903
+ function cardinalBoundaryPoints(ring, sideOffset = 0) {
12904
+ const center = ringLabelAnchor(ring);
12905
+ const fallback = ring.slice(0, -1);
12906
+ const scans = /* @__PURE__ */ new Map();
12907
+ const extremeAt = (fixedAxis, target, resultAxis, direction) => {
12908
+ const key = `${fixedAxis}:${target}`;
12909
+ let crossings = scans.get(key);
12910
+ if (!crossings) {
12911
+ crossings = axisIntersections(ring, fixedAxis, target);
12912
+ scans.set(key, crossings);
12913
+ }
12914
+ return (crossings.length > 0 ? crossings : fallback).reduce((best, point) => point[resultAxis] * direction > best[resultAxis] * direction ? point : best);
12915
+ };
12916
+ return [
12917
+ extremeAt(0, center[0], 1, 1),
12918
+ extremeAt(1, center[1] + sideOffset, 0, 1),
12919
+ extremeAt(0, center[0], 1, -1),
12920
+ extremeAt(1, center[1] - sideOffset, 0, -1)
12921
+ ];
12922
+ }
12923
+ function createMineArea(positions, options, minedArea, textAmplifiers, context) {
12924
+ const ring = buildClosedRing(positions, options.smooth ?? DEFAULT_MINE_AREA_OPTIONS.smooth, options.smoothResolution ?? DEFAULT_MINE_AREA_OPTIONS.smoothResolution, 16);
12925
+ const mineType = options.mineType ?? DEFAULT_MINE_AREA_OPTIONS.mineType;
12926
+ const labelFeatures = [];
12927
+ const sideOffset = textAmplifiers.N ? resolveLabelOffsetMeters(options, 1.5) : 0;
12928
+ return {
12929
+ type: "FeatureCollection",
12930
+ features: [...patternedAreaFeatures(ring, [...minedArea ? pushBoundaryMarkers(labelFeatures, ring, "M", cardinalBoundaryPoints(ring, sideOffset).map((point) => ({ point })), {
12931
+ rotation: HORIZONTAL_LABEL_ROTATION,
12932
+ textHeight: resolveLabelOffsetMeters(options, 1),
12933
+ clearance: resolveLabelOffsetMeters(options, .12),
12934
+ sizeProps: labelSizeProps(options)
12935
+ }) : [], ...pushAreaLabels(labelFeatures, ring, { hostile: textAmplifiers.N }, options, context.amplifierPlacements)], mineFillPattern(mineType)), ...labelFeatures]
12936
+ };
12937
+ }
12938
+ function createDynamicMinefield(positions, options = {}, textAmplifiers = {}, context = {}) {
12939
+ return createMineArea(positions, options, false, textAmplifiers, context);
12940
+ }
12941
+ function createMinedArea(positions, options = {}, textAmplifiers = {}, context = {}) {
12942
+ return createMineArea(positions, options, true, textAmplifiers, context);
12943
+ }
12944
+ const PREVIEW_POINTS = [
12945
+ [-1, -.55],
12946
+ [1, -.55],
12947
+ [1, .55],
12948
+ [-1, .55]
12949
+ ];
12950
+ const DYNAMIC_MINEFIELD = defineControlMeasure({
12951
+ metadata: DYNAMIC_MINEFIELD_METADATA,
12952
+ generator: createDynamicMinefield,
12953
+ defaultOptions: DEFAULT_MINE_AREA_OPTIONS,
12954
+ rule: area1DrawRule,
12955
+ previewSample: { controlPoints: PREVIEW_POINTS }
12956
+ });
12957
+ const MINED_AREA = defineControlMeasure({
12958
+ metadata: MINED_AREA_METADATA,
12959
+ generator: createMinedArea,
12960
+ defaultOptions: DEFAULT_MINE_AREA_OPTIONS,
12961
+ rule: area1DrawRule,
12962
+ previewSample: {
12963
+ controlPoints: PREVIEW_POINTS,
12964
+ options: { labelSizePixels: 22 }
12965
+ }
12966
+ });
12967
+ //#endregion
12655
12968
  //#region src/generators/cm27-protection-areas/params.ts
12656
12969
  const OBSTACLE_BYPASS_PARAMS = [
12657
12970
  {
12658
12971
  key: "arrowheadLengthRatio",
12972
+ presentationTier: "advanced",
12659
12973
  label: "Arrowhead length",
12660
12974
  description: "Arrowhead length as a ratio of the opening width",
12661
12975
  type: "number",
@@ -12665,6 +12979,7 @@ const OBSTACLE_BYPASS_PARAMS = [
12665
12979
  },
12666
12980
  {
12667
12981
  key: "arrowheadWidthRatio",
12982
+ presentationTier: "advanced",
12668
12983
  label: "Arrowhead width",
12669
12984
  description: "Arrowhead base width as a ratio of the opening width",
12670
12985
  type: "number",
@@ -12674,6 +12989,7 @@ const OBSTACLE_BYPASS_PARAMS = [
12674
12989
  },
12675
12990
  {
12676
12991
  key: "defaultLengthRatio",
12992
+ presentationTier: "advanced",
12677
12993
  label: "Default length",
12678
12994
  description: "Symbol depth as a ratio of opening width when no hint point is given",
12679
12995
  type: "number",
@@ -12712,6 +13028,7 @@ const OBSTACLE_BYPASS_DIFFICULT_METADATA = {
12712
13028
  ...OBSTACLE_BYPASS_PARAMS,
12713
13029
  {
12714
13030
  key: "zigzagAmplitudeRatio",
13031
+ presentationTier: "advanced",
12715
13032
  label: "Zigzag amplitude",
12716
13033
  description: "Zigzag tooth depth as a ratio of the opening width.",
12717
13034
  type: "number",
@@ -12721,6 +13038,7 @@ const OBSTACLE_BYPASS_DIFFICULT_METADATA = {
12721
13038
  },
12722
13039
  {
12723
13040
  key: "zigzagSpacingRatio",
13041
+ presentationTier: "advanced",
12724
13042
  label: "Zigzag spacing",
12725
13043
  description: "Spacing between zigzag teeth as a ratio of the opening width.",
12726
13044
  type: "number",
@@ -12964,6 +13282,7 @@ const OBSTACLE_BYPASS_IMPOSSIBLE_METADATA = {
12964
13282
  ...OBSTACLE_BYPASS_PARAMS,
12965
13283
  {
12966
13284
  key: "rearBarLengthRatio",
13285
+ presentationTier: "advanced",
12967
13286
  label: "Rear bar length",
12968
13287
  description: "Length of each rear barrier bar as a ratio of the opening width.",
12969
13288
  type: "number",
@@ -12973,6 +13292,7 @@ const OBSTACLE_BYPASS_IMPOSSIBLE_METADATA = {
12973
13292
  },
12974
13293
  {
12975
13294
  key: "rearGapRatio",
13295
+ presentationTier: "advanced",
12976
13296
  label: "Rear gap",
12977
13297
  description: "Gap between the two rear bars as a ratio of the opening width.",
12978
13298
  type: "number",
@@ -13324,6 +13644,7 @@ const PRINCIPAL_DIRECTION_OF_FIRE_METADATA = {
13324
13644
  drawRule: "Line3",
13325
13645
  params: [{
13326
13646
  key: "arrowheadLengthRatio",
13647
+ presentationTier: "advanced",
13327
13648
  label: "Arrowhead length",
13328
13649
  description: "Arrowhead length as a ratio of each arm's length",
13329
13650
  type: "number",
@@ -13332,6 +13653,7 @@ const PRINCIPAL_DIRECTION_OF_FIRE_METADATA = {
13332
13653
  step: .01
13333
13654
  }, {
13334
13655
  key: "arrowheadWidthRatio",
13656
+ presentationTier: "advanced",
13335
13657
  label: "Arrowhead width",
13336
13658
  description: "Arrowhead base width as a multiple of the arrowhead length",
13337
13659
  type: "number",
@@ -13410,6 +13732,7 @@ const SECONDARY_DIRECTION_OF_FIRE_METADATA = {
13410
13732
  drawRule: "Line3",
13411
13733
  params: [{
13412
13734
  key: "arrowheadLengthRatio",
13735
+ presentationTier: "advanced",
13413
13736
  label: "Arrowhead length",
13414
13737
  description: "Arrowhead length as a ratio of each arm's length",
13415
13738
  type: "number",
@@ -13418,6 +13741,7 @@ const SECONDARY_DIRECTION_OF_FIRE_METADATA = {
13418
13741
  step: .01
13419
13742
  }, {
13420
13743
  key: "arrowheadWidthRatio",
13744
+ presentationTier: "advanced",
13421
13745
  label: "Arrowhead width",
13422
13746
  description: "Arrowhead base width as a multiple of the arrowhead length",
13423
13747
  type: "number",
@@ -13925,6 +14249,7 @@ const TURN_METADATA = {
13925
14249
  params: [
13926
14250
  {
13927
14251
  key: "arrowheadLengthRatio",
14252
+ presentationTier: "advanced",
13928
14253
  label: "Arrowhead length",
13929
14254
  description: "Arrowhead length as a ratio of the rear-to-tip distance",
13930
14255
  type: "number",
@@ -13934,6 +14259,7 @@ const TURN_METADATA = {
13934
14259
  },
13935
14260
  {
13936
14261
  key: "arrowheadWidthRatio",
14262
+ presentationTier: "advanced",
13937
14263
  label: "Arrowhead width",
13938
14264
  description: "Arrowhead base width as a ratio of the rear-to-tip distance",
13939
14265
  type: "number",
@@ -13943,6 +14269,7 @@ const TURN_METADATA = {
13943
14269
  },
13944
14270
  {
13945
14271
  key: "arcSegments",
14272
+ presentationTier: "advanced",
13946
14273
  label: "Arc segments",
13947
14274
  description: "Number of line segments approximating the quarter-circle shaft.",
13948
14275
  type: "number",
@@ -14028,6 +14355,7 @@ const DEFAULT_TURNING_MOVEMENT_OPTIONS = {
14028
14355
  };
14029
14356
  const TURNING_MOVEMENT_PARAMS = [{
14030
14357
  key: "crossbarPosition",
14358
+ presentationTier: "advanced",
14031
14359
  label: "Crossbar position",
14032
14360
  description: "Position along the shaft, from tail (0) to arrowhead base (1)",
14033
14361
  type: "number",
@@ -14104,6 +14432,8 @@ const DEFINITIONS = {
14104
14432
  "landing-zone": LANDING_ZONE,
14105
14433
  "limited-access-area": LIMITED_ACCESS_AREA,
14106
14434
  "no-fire-area-irregular": NO_FIRE_AREA_IRREGULAR,
14435
+ "minefield-dynamic": DYNAMIC_MINEFIELD,
14436
+ "mined-area": MINED_AREA,
14107
14437
  "pickup-zone": PICKUP_ZONE,
14108
14438
  "assault-position": ASSAULT_POSITION,
14109
14439
  "attack-position": ATTACK_POSITION,