@orbat-mapper/control-measures 0.14.0 → 0.15.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.
@@ -2130,7 +2130,7 @@ interface FinalCoordinationLineOptions extends LineLabelOptions, SmoothLineOptio
2130
2130
  declare function createFinalCoordinationLine(positions: Position[], options?: FinalCoordinationLineOptions, textAmplifiers?: CanonicalTextAmplifiers, context?: ControlMeasureGeneratorContext): FeatureCollection<LineString | Point>;
2131
2131
  //#endregion
2132
2132
  //#region src/generators/cm14-maneuver-lines/infiltration-lane.d.ts
2133
- type InfiltrationLaneOptions = LabelSizeOptions;
2133
+ interface InfiltrationLaneOptions extends LabelSizeOptions, SmoothLineOptions {}
2134
2134
  declare const DEFAULT_INFILTRATION_LANE_OPTIONS: InfiltrationLaneOptions;
2135
2135
  /** Creates the two parallel boundaries and centered Field T lane designation. */
2136
2136
  declare function createInfiltrationLane(coordinates: Position[], options?: InfiltrationLaneOptions, textAmplifiers?: CanonicalTextAmplifiers): FeatureCollection<MultiLineString | Point>;
@@ -3375,6 +3375,15 @@ interface MidpointPerpendicularDrawRuleOptions {
3375
3375
  * endpoints.
3376
3376
  */
3377
3377
  constrainedIndex?: 0 | 2;
3378
+ /**
3379
+ * Let the baseline carry extra vertices between PT2 and the constrained
3380
+ * point. The constrained slot then follows the array's last index
3381
+ * (`trailingFixedSlots: 1`) instead of a fixed `canonicalPointCount`, so
3382
+ * edits can insert spine vertices ahead of it. Polyline1 (Infiltration Lane)
3383
+ * uses this: PT1..PTN-1 are the centerline and PTN is the width handle.
3384
+ * Requires the default `constrainedIndex` of `2`.
3385
+ */
3386
+ variableLength?: boolean;
3378
3387
  /** Frame origin for the perpendicular axis. Defaults to `"midpoint"`. */
3379
3388
  origin?: BaselineFrameOrigin;
3380
3389
  /** Side the positive normal points to. Defaults to `"right"`. */
@@ -3543,10 +3552,10 @@ declare const line27DrawRule: ControlMeasureDrawRule;
3543
3552
  /**
3544
3553
  * Polyline1 anchors for the Infiltration Lane.
3545
3554
  *
3546
- * PT1/PT2 are the two user clicks and define the invisible lane centerline. PT3 is an
3547
- * automatically derived, editable width handle on the perpendicular through
3548
- * its midpoint. It rests on one parallel boundary, so its signed distance
3549
- * from PT1/PT2 is the lane half-width.
3555
+ * PT1 through PTN-1 form the lane centerline. PTN is the editable width
3556
+ * handle on the perpendicular through the midpoint of PT1/PT2, so its signed
3557
+ * distance from that segment is the lane half-width. The initial two clicks
3558
+ * synthesize PTN; later edits may insert more centerline vertices before it.
3550
3559
  */
3551
3560
  declare const polyline1DrawRule: ControlMeasureDrawRule;
3552
3561
  //#endregion
package/dist/index.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as CONTROL_MEASURE_IDS, $i as ControlMeasureGeometry, $n as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, $r as FinalProtectiveFireOptions, $t as GuardOptions, A as snapToMidpointPerpendicular, Ai as Point2D, An as LineOfDepartureOptions, Ar as MainAttackOptions, At as DEFAULT_FORTIFIED_AREA_OPTIONS, B as SimpleStyleRender, Bi as ControlMeasureOptionHandles, Bn as HoldingLineOptions, Br as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Bt as DEFAULT_WITHDRAW_OPTIONS, C as containDrawRule, Ca as AnchorTransformEvent, Ci as DEFAULT_GENERIC_C2_LINE_OPTIONS, Cn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Cr as DEFAULT_BLOCK_ARROW_OPTIONS, Ct as DisruptOptions, D as createMidpointPerpendicularDrawRule, Di as DEFAULT_LIGHT_LINE_OPTIONS, Dn as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Dr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, Dt as TurningMovementOptions, E as computeDefaultMidpointPerpendicularPoint, Ei as EngineerWorkLineOptions, En as ProbableLineOfDeploymentOptions, Er as DEFAULT_CLASSIC_ARROW_OPTIONS, Et as DEFAULT_TURNING_MOVEMENT_OPTIONS, F as createBaselineFrame, Fi as BoundaryOptions, Fn as DEFAULT_HANDOVER_LINE_OPTIONS, Fr as DEFAULT_PICKUP_ZONE_OPTIONS, Ft as DEFAULT_ANTITANK_WALL_OPTIONS, G as applyBoxTransformOptions, Gi as DEFAULT_LINE_JOIN, Gn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Gr as MobileDefenseOptions, Gt as ScreenOptions, H as resolveStyleHints, Hi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Hn as InfiltrationLaneOptions, Hr as AssemblyAreaOptions, Ht as DEFAULT_SEIZE_OPTIONS, I as EPSILON, Ii as DEFAULT_BOUNDARY_OPTIONS, In as HandoverLineOptions, Ir as PickupZoneOptions, It as AntitankDitchOptions, J as RenderOptions, Ji as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Jn as PhaseLineOptions, Jr as AreaDefenseOptions, Jt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, K as foldsBoxTransformOptions, Ki as DEFAULT_PORTRAYAL, Kn as ForwardEdgeOfBattleAreaOptions, Kr as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Kt as DEFAULT_RETIRE_OPTIONS, L as getMetersPerPixel, Li as BoxTransformDelta, Ln as DEFAULT_RELEASE_LINE_OPTIONS, Lr as MineType, Lt as DEFAULT_ANTITANK_DITCH_OPTIONS, M as BaselineFrameNormal, Mi as project, Mn as LimitOfAdvanceOptions, Mr as computeInitialWidthPoint, Mt as DEFAULT_FORTIFIED_LINE_OPTIONS, N as BaselineFrameOptions, Ni as sphericalBearing, Nn as BattleHandoverLineOptions, Nr as AreaOfOperationsOptions, Nt as FortifiedLineOptions, O as getMidpointPerpendicularSignedDistance, Oi as LightLineOptions, On as LineOfDepartureContactOptions, Or as SupportingAttackOptions, Ot as DEFAULT_FRONTAL_ATTACK_OPTIONS, P as BaselineFrameOrigin, Pi as unproject, Pn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Pr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, Pt as AntitankWallOptions, Q as isKind, Qi as ControlMeasureFillCapability, Qn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Qr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Qt as DEFAULT_GUARD_OPTIONS, R as roundToFixed, Ri as ControlMeasureOptionHandle, Rn as ReleaseLineOptions, Rr as DEFAULT_LANDING_ZONE_OPTIONS, Rt as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, S as blockDrawRule, Sa as resolveAmplifierPlacement, Si as DEFAULT_BATTLE_POSITION_OPTIONS, Sn as BlockMissionTaskOptions, Sr as BlockArrowOptions, St as DEFAULT_DISRUPT_OPTIONS, T as MidpointPerpendicularDrawRuleOptions, Ti as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, Tn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Tr as ClassicArrowOptions, Tt as DEFAULT_BLOCK_OPTIONS, U as dragControlMeasureOptionHandle, Ui as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Un as BridgeheadLineOptions, Ur as DEFAULT_ASSEMBLY_AREA_OPTIONS, Ut as SeizeOptions, V as toSimpleStyle, Vi as ControlMeasureRenderContext, Vn as DEFAULT_INFILTRATION_LANE_OPTIONS, Vr as JointTacticalActionAreaOptions, Vt as WithdrawOptions, W as getControlMeasureOptionHandles, Wi as DEFAULT_LINE_CAP, Wn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Wr as DEFAULT_MOBILE_DEFENSE_OPTIONS, Wt as DEFAULT_SCREEN_OPTIONS, X as ControlMeasure, Xi as MeasureTextRequest, Xn as FLOTOptions, Xr as DEFAULT_ENCIRCLEMENT_OPTIONS, Xt as DEFAULT_PENETRATE_OPTIONS, Y as renderControlMeasure, Yi as LogicalTextStyle, Yn as DEFAULT_FLOT_OPTIONS, Yr as DEFAULT_AREA_DEFENSE_OPTIONS, Yt as RearwardPassageOfLinesOptions, Z as cloneControlMeasure, Zi as MeasuredText, Zn as AttackByFireOptions, Zr as EncirclementOptions, Zt as PenetrateOptions, _ as staticPointDrawRule, _a as TextAmplifierField, _i as DEFAULT_STRONG_POINT_OPTIONS, _n as DEFAULT_CANALIZE_OPTIONS, _r as DEFAULT_GENERIC_POLYGON_OPTIONS, _t as TurnOptions, a as axis1DrawRule, aa as ParameterPresentationTier, ai as SECONDARY_DIRECTION_OF_FIRE_DASH, an as DelayOptions, ar as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, at as getControlMeasureMetadataByValue, b as centerRadiusDrawRule, ba as canonicalTextAmplifierKey, bi as DEFAULT_CONTAIN_OPTIONS, bn as BreachOptions, br as GenericLineOptions, bt as DEFAULT_FIX_OPTIONS, c as line27DrawRule, ca as parameterPresentationTierRank, ci as PrincipalDirectionOfFireOptions, cn as DEFAULT_TACTICAL_ARROW_OPTIONS, cr as RadarSearchDoctrineOptions, ct as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, d as line23DrawRule, da as AmplifierPlacement, di as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, dn as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, dr as DEFAULT_GENERIC_SECTOR_OPTIONS, dt as ObstacleBypassDifficultOptions, ea as ControlMeasureGeometryType, ei as ControlMeasureRender, en as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, er as SupportByFireOptions, et as CONTROL_MEASURE_METADATA, f as turnDrawRule, fa as AmplifierPlacements, fi as DirectionOfMainAttackOptions, fn as CounterattackOptions, fr as GenericSectorOptions, ft as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, g as dynamicPointDrawRule, ga as TEXT_AMPLIFIER_FIELDS, gi as RetainOptions, gn as CanalizeOptions, gr as GenericRectangleOptions, gt as DEFAULT_TURN_OPTIONS, h as attackByFireDrawRule, ha as LabelPlacementOverride, hi as DEFAULT_RETAIN_OPTIONS, hn as DEFAULT_CLEAR_OPTIONS, hr as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ht as MinefieldOptions, i as rectangleDrawRule, ia as ParamDescriptor, ii as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, in as DEFAULT_DELAY_OPTIONS, ir as DEFAULT_AIRBORNE_ATTACK_OPTIONS, it as getControlMeasureMetadata, j as BaselineFrame, ji as haversineDistance, jn as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, jr as calculateMetrics, jt as FortifiedAreaOptions, k as pointOnMidpointPerpendicularAxis, ki as LabelSizeOptions, kn as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, kr as DEFAULT_MAIN_ATTACK_OPTIONS, kt as FrontalAttackOptions, l as line26DrawRule, la as resolveParameterPresentationTier, li as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, ln as TacticalArrowOptions, lr as DEFAULT_GENERIC_TEXT_OPTIONS, lt as ObstacleBypassImpossibleOptions, m as ambushDrawRule, ma as GeneratedLabelKey, mi as DirectionOfAttackAviationOptions, mn as ClearOptions, mr as GenericCircleOptions, mt as DEFAULT_MINEFIELD_OPTIONS, n as DEFAULT_AMBUSH_OPTIONS, na as ControlMeasurePaintCapability, ni as StyleHints, nn as DEFAULT_DISENGAGE_OPTIONS, nr as DEFAULT_ATTACK_HELICOPTER_OPTIONS, nt as ControlMeasureKind, o as supportByFireDrawRule, oa as ParameterSemanticRole, oi as SecondaryDirectionOfFireOptions, on as CoverOptions, or as RADAR_SEARCH_DOCTRINE_FILL_COLOR, ot as getDefaultOptions, p as line1DrawRule, pa as CanonicalTextAmplifiers, pi as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, pn as DEFAULT_COUNTERATTACK_OPTIONS, pr as DEFAULT_GENERIC_CIRCLE_OPTIONS, pt as ObstacleBypassEasyOptions, q as freezeOrientationOptions, qi as DEFAULT_STROKE_DASH_CSS_PIXELS, qn as DEFAULT_PHASE_LINE_OPTIONS, qr as EngagementAreaOptions, qt as RetireOptions, r as sectorDrawRule, ra as PARAMETER_PRESENTATION_TIERS, ri as controlMeasureIdFromFeature, rn as DisengageOptions, rr as AirborneAttackOptions, rt as OptionsByKind, s as polyline1DrawRule, sa as TextAmplifierDescriptor, si as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, sn as DEFAULT_COVER_OPTIONS, sr as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, st as listControlMeasureMetadata, t as AmbushOptions, ta as ControlMeasureMetadata, ti as FeaturePartProps, tn as DisruptMissionTaskOptions, tr as AttackHelicopterOptions, tt as ControlMeasureId, u as line24DrawRule, ua as resolveParameterSemanticRole, ui as DirectionOfSupportingAttackOptions, un as CounterattackByFireOptions, ur as GenericTextOptions, ut as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, v as point12DrawRule, va as TextAmplifierKey, vi as StrongPointOptions, vn as BypassOptions, vr as GenericPolygonOptions, vt as DEFAULT_FIX_MISSION_TASK_OPTIONS, w as area27DrawRule, wa as ControlMeasureDrawRule, wi as GenericC2LineOptions, wn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, wr as ClassicArrowHeadStyle, wt as BlockOptions, x as disruptDrawRule, xa as normalizeTextAmplifiers, xi as BattlePositionOptions, xn as DEFAULT_BREACH_OPTIONS, xr as BlockArrowHeadStyle, xt as FixOptions, y as penetrateDrawRule, ya as TextAmplifiers, yi as ContainOptions, yn as DEFAULT_BYPASS_OPTIONS, yr as DEFAULT_GENERIC_LINE_OPTIONS, yt as FixMissionTaskOptions, z as SimpleStyleProps, zi as ControlMeasureOptionHandleDragEvent, zn as DEFAULT_HOLDING_LINE_OPTIONS, zr as LandingZoneOptions, zt as WithdrawUnderPressureOptions } from "./index-CXadfQRk.mjs";
1
+ import { $ as CONTROL_MEASURE_IDS, $i as ControlMeasureGeometry, $n as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, $r as FinalProtectiveFireOptions, $t as GuardOptions, A as snapToMidpointPerpendicular, Ai as Point2D, An as LineOfDepartureOptions, Ar as MainAttackOptions, At as DEFAULT_FORTIFIED_AREA_OPTIONS, B as SimpleStyleRender, Bi as ControlMeasureOptionHandles, Bn as HoldingLineOptions, Br as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Bt as DEFAULT_WITHDRAW_OPTIONS, C as containDrawRule, Ca as AnchorTransformEvent, Ci as DEFAULT_GENERIC_C2_LINE_OPTIONS, Cn as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Cr as DEFAULT_BLOCK_ARROW_OPTIONS, Ct as DisruptOptions, D as createMidpointPerpendicularDrawRule, Di as DEFAULT_LIGHT_LINE_OPTIONS, Dn as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Dr as DEFAULT_SUPPORTING_ATTACK_OPTIONS, Dt as TurningMovementOptions, E as computeDefaultMidpointPerpendicularPoint, Ei as EngineerWorkLineOptions, En as ProbableLineOfDeploymentOptions, Er as DEFAULT_CLASSIC_ARROW_OPTIONS, Et as DEFAULT_TURNING_MOVEMENT_OPTIONS, F as createBaselineFrame, Fi as BoundaryOptions, Fn as DEFAULT_HANDOVER_LINE_OPTIONS, Fr as DEFAULT_PICKUP_ZONE_OPTIONS, Ft as DEFAULT_ANTITANK_WALL_OPTIONS, G as applyBoxTransformOptions, Gi as DEFAULT_LINE_JOIN, Gn as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Gr as MobileDefenseOptions, Gt as ScreenOptions, H as resolveStyleHints, Hi as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Hn as InfiltrationLaneOptions, Hr as AssemblyAreaOptions, Ht as DEFAULT_SEIZE_OPTIONS, I as EPSILON, Ii as DEFAULT_BOUNDARY_OPTIONS, In as HandoverLineOptions, Ir as PickupZoneOptions, It as AntitankDitchOptions, J as RenderOptions, Ji as DEFAULT_STROKE_WIDTH_CSS_PIXELS, Jn as PhaseLineOptions, Jr as AreaDefenseOptions, Jt as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, K as foldsBoxTransformOptions, Ki as DEFAULT_PORTRAYAL, Kn as ForwardEdgeOfBattleAreaOptions, Kr as DEFAULT_ENGAGEMENT_AREA_OPTIONS, Kt as DEFAULT_RETIRE_OPTIONS, L as getMetersPerPixel, Li as BoxTransformDelta, Ln as DEFAULT_RELEASE_LINE_OPTIONS, Lr as MineType, Lt as DEFAULT_ANTITANK_DITCH_OPTIONS, M as BaselineFrameNormal, Mi as project, Mn as LimitOfAdvanceOptions, Mr as computeInitialWidthPoint, Mt as DEFAULT_FORTIFIED_LINE_OPTIONS, N as BaselineFrameOptions, Ni as sphericalBearing, Nn as BattleHandoverLineOptions, Nr as AreaOfOperationsOptions, Nt as FortifiedLineOptions, O as getMidpointPerpendicularSignedDistance, Oi as LightLineOptions, On as LineOfDepartureContactOptions, Or as SupportingAttackOptions, Ot as DEFAULT_FRONTAL_ATTACK_OPTIONS, P as BaselineFrameOrigin, Pi as unproject, Pn as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Pr as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, Pt as AntitankWallOptions, Q as isKind, Qi as ControlMeasureFillCapability, Qn as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Qr as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Qt as DEFAULT_GUARD_OPTIONS, R as roundToFixed, Ri as ControlMeasureOptionHandle, Rn as ReleaseLineOptions, Rr as DEFAULT_LANDING_ZONE_OPTIONS, Rt as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, S as blockDrawRule, Sa as resolveAmplifierPlacement, Si as DEFAULT_BATTLE_POSITION_OPTIONS, Sn as BlockMissionTaskOptions, Sr as BlockArrowOptions, St as DEFAULT_DISRUPT_OPTIONS, T as MidpointPerpendicularDrawRuleOptions, Ti as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, Tn as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Tr as ClassicArrowOptions, Tt as DEFAULT_BLOCK_OPTIONS, U as dragControlMeasureOptionHandle, Ui as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Un as BridgeheadLineOptions, Ur as DEFAULT_ASSEMBLY_AREA_OPTIONS, Ut as SeizeOptions, V as toSimpleStyle, Vi as ControlMeasureRenderContext, Vn as DEFAULT_INFILTRATION_LANE_OPTIONS, Vr as JointTacticalActionAreaOptions, Vt as WithdrawOptions, W as getControlMeasureOptionHandles, Wi as DEFAULT_LINE_CAP, Wn as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, Wr as DEFAULT_MOBILE_DEFENSE_OPTIONS, Wt as DEFAULT_SCREEN_OPTIONS, X as ControlMeasure, Xi as MeasureTextRequest, Xn as FLOTOptions, Xr as DEFAULT_ENCIRCLEMENT_OPTIONS, Xt as DEFAULT_PENETRATE_OPTIONS, Y as renderControlMeasure, Yi as LogicalTextStyle, Yn as DEFAULT_FLOT_OPTIONS, Yr as DEFAULT_AREA_DEFENSE_OPTIONS, Yt as RearwardPassageOfLinesOptions, Z as cloneControlMeasure, Zi as MeasuredText, Zn as AttackByFireOptions, Zr as EncirclementOptions, Zt as PenetrateOptions, _ as staticPointDrawRule, _a as TextAmplifierField, _i as DEFAULT_STRONG_POINT_OPTIONS, _n as DEFAULT_CANALIZE_OPTIONS, _r as DEFAULT_GENERIC_POLYGON_OPTIONS, _t as TurnOptions, a as axis1DrawRule, aa as ParameterPresentationTier, ai as SECONDARY_DIRECTION_OF_FIRE_DASH, an as DelayOptions, ar as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, at as getControlMeasureMetadataByValue, b as centerRadiusDrawRule, ba as canonicalTextAmplifierKey, bi as DEFAULT_CONTAIN_OPTIONS, bn as BreachOptions, br as GenericLineOptions, bt as DEFAULT_FIX_OPTIONS, c as line27DrawRule, ca as parameterPresentationTierRank, ci as PrincipalDirectionOfFireOptions, cn as DEFAULT_TACTICAL_ARROW_OPTIONS, cr as RadarSearchDoctrineOptions, ct as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, d as line23DrawRule, da as AmplifierPlacement, di as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, dn as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, dr as DEFAULT_GENERIC_SECTOR_OPTIONS, dt as ObstacleBypassDifficultOptions, ea as ControlMeasureGeometryType, ei as ControlMeasureRender, en as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, er as SupportByFireOptions, et as CONTROL_MEASURE_METADATA, f as turnDrawRule, fa as AmplifierPlacements, fi as DirectionOfMainAttackOptions, fn as CounterattackOptions, fr as GenericSectorOptions, ft as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, g as dynamicPointDrawRule, ga as TEXT_AMPLIFIER_FIELDS, gi as RetainOptions, gn as CanalizeOptions, gr as GenericRectangleOptions, gt as DEFAULT_TURN_OPTIONS, h as attackByFireDrawRule, ha as LabelPlacementOverride, hi as DEFAULT_RETAIN_OPTIONS, hn as DEFAULT_CLEAR_OPTIONS, hr as DEFAULT_GENERIC_RECTANGLE_OPTIONS, ht as MinefieldOptions, i as rectangleDrawRule, ia as ParamDescriptor, ii as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, in as DEFAULT_DELAY_OPTIONS, ir as DEFAULT_AIRBORNE_ATTACK_OPTIONS, it as getControlMeasureMetadata, j as BaselineFrame, ji as haversineDistance, jn as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, jr as calculateMetrics, jt as FortifiedAreaOptions, k as pointOnMidpointPerpendicularAxis, ki as LabelSizeOptions, kn as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, kr as DEFAULT_MAIN_ATTACK_OPTIONS, kt as FrontalAttackOptions, l as line26DrawRule, la as resolveParameterPresentationTier, li as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, ln as TacticalArrowOptions, lr as DEFAULT_GENERIC_TEXT_OPTIONS, lt as ObstacleBypassImpossibleOptions, m as ambushDrawRule, ma as GeneratedLabelKey, mi as DirectionOfAttackAviationOptions, mn as ClearOptions, mr as GenericCircleOptions, mt as DEFAULT_MINEFIELD_OPTIONS, n as DEFAULT_AMBUSH_OPTIONS, na as ControlMeasurePaintCapability, ni as StyleHints, nn as DEFAULT_DISENGAGE_OPTIONS, nr as DEFAULT_ATTACK_HELICOPTER_OPTIONS, nt as ControlMeasureKind, o as supportByFireDrawRule, oa as ParameterSemanticRole, oi as SecondaryDirectionOfFireOptions, on as CoverOptions, or as RADAR_SEARCH_DOCTRINE_FILL_COLOR, ot as getDefaultOptions, p as line1DrawRule, pa as CanonicalTextAmplifiers, pi as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, pn as DEFAULT_COUNTERATTACK_OPTIONS, pr as DEFAULT_GENERIC_CIRCLE_OPTIONS, pt as ObstacleBypassEasyOptions, q as freezeOrientationOptions, qi as DEFAULT_STROKE_DASH_CSS_PIXELS, qn as DEFAULT_PHASE_LINE_OPTIONS, qr as EngagementAreaOptions, qt as RetireOptions, r as sectorDrawRule, ra as PARAMETER_PRESENTATION_TIERS, ri as controlMeasureIdFromFeature, rn as DisengageOptions, rr as AirborneAttackOptions, rt as OptionsByKind, s as polyline1DrawRule, sa as TextAmplifierDescriptor, si as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, sn as DEFAULT_COVER_OPTIONS, sr as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, st as listControlMeasureMetadata, t as AmbushOptions, ta as ControlMeasureMetadata, ti as FeaturePartProps, tn as DisruptMissionTaskOptions, tr as AttackHelicopterOptions, tt as ControlMeasureId, u as line24DrawRule, ua as resolveParameterSemanticRole, ui as DirectionOfSupportingAttackOptions, un as CounterattackByFireOptions, ur as GenericTextOptions, ut as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, v as point12DrawRule, va as TextAmplifierKey, vi as StrongPointOptions, vn as BypassOptions, vr as GenericPolygonOptions, vt as DEFAULT_FIX_MISSION_TASK_OPTIONS, w as area27DrawRule, wa as ControlMeasureDrawRule, wi as GenericC2LineOptions, wn as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, wr as ClassicArrowHeadStyle, wt as BlockOptions, x as disruptDrawRule, xa as normalizeTextAmplifiers, xi as BattlePositionOptions, xn as DEFAULT_BREACH_OPTIONS, xr as BlockArrowHeadStyle, xt as FixOptions, y as penetrateDrawRule, ya as TextAmplifiers, yi as ContainOptions, yn as DEFAULT_BYPASS_OPTIONS, yr as DEFAULT_GENERIC_LINE_OPTIONS, yt as FixMissionTaskOptions, z as SimpleStyleProps, zi as ControlMeasureOptionHandleDragEvent, zn as DEFAULT_HOLDING_LINE_OPTIONS, zr as LandingZoneOptions, zt as WithdrawUnderPressureOptions } from "./index-DFZ2BoXt.mjs";
2
2
  import { a as PatternId, c as PatternPoint, d as ControlMeasureStyle, f as FillPattern, i as NON_SOLID_FILL_PATTERNS, l as PatternStroke, n as FillPatternCommand, o as PatternPaint, r as FillPatternDefinition, s as PatternPathOperation, t as FILL_PATTERN_DEFINITIONS, u as getFillPatternDefinition } from "./patterns-CcQmmOuJ.mjs";
3
3
  export { type AirborneAttackOptions, type AmbushOptions, type AmplifierPlacement, type AmplifierPlacements, type AnchorTransformEvent, type AntitankDitchOptions, type AntitankWallOptions, type AreaDefenseOptions, type AreaOfOperationsOptions, type AssemblyAreaOptions, type AttackByFireOptions, type AttackHelicopterOptions, type BaselineFrame, type BaselineFrameNormal, type BaselineFrameOptions, type BaselineFrameOrigin, type BattleHandoverLineOptions, type BattlePositionOptions, type BlockArrowHeadStyle, type BlockArrowOptions, type BlockMissionTaskOptions, type BlockOptions, type BoundaryOptions, type BoxTransformDelta, type BreachOptions, type BridgeheadLineOptions, type BypassOptions, CONTROL_MEASURE_IDS, CONTROL_MEASURE_METADATA, type CanalizeOptions, type CanonicalTextAmplifiers, type ClassicArrowHeadStyle, type ClassicArrowOptions, type ClearOptions, type ContainOptions, type ControlMeasure, type ControlMeasureDrawRule, type ControlMeasureFillCapability, type ControlMeasureGeometry, type ControlMeasureGeometryType, type ControlMeasureId, type ControlMeasureKind, type ControlMeasureMetadata, type ControlMeasureOptionHandle, type ControlMeasureOptionHandleDragEvent, type ControlMeasureOptionHandles, type ControlMeasurePaintCapability, type ControlMeasureRender, type ControlMeasureRenderContext, type ControlMeasureStyle, type CounterattackByFireOptions, type CounterattackOptions, type CoverOptions, DEFAULT_AIRBORNE_ATTACK_OPTIONS, DEFAULT_AMBUSH_OPTIONS, DEFAULT_ANTITANK_DITCH_OPTIONS, DEFAULT_ANTITANK_WALL_OPTIONS, DEFAULT_AREA_DEFENSE_OPTIONS, DEFAULT_AREA_OF_OPERATIONS_OPTIONS, DEFAULT_ASSEMBLY_AREA_OPTIONS, DEFAULT_ATTACK_BY_FIRE_OPTIONS, DEFAULT_ATTACK_HELICOPTER_OPTIONS, DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, DEFAULT_BATTLE_POSITION_OPTIONS, DEFAULT_BLOCK_ARROW_OPTIONS, DEFAULT_BLOCK_MISSION_TASK_OPTIONS, DEFAULT_BLOCK_OPTIONS, DEFAULT_BOUNDARY_OPTIONS, DEFAULT_BREACH_OPTIONS, DEFAULT_BRIDGEHEAD_LINE_OPTIONS, DEFAULT_BYPASS_OPTIONS, DEFAULT_CANALIZE_OPTIONS, DEFAULT_CLASSIC_ARROW_OPTIONS, DEFAULT_CLEAR_OPTIONS, DEFAULT_CONTAIN_OPTIONS, DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, DEFAULT_COUNTERATTACK_OPTIONS, DEFAULT_COVER_OPTIONS, DEFAULT_DELAY_OPTIONS, DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, DEFAULT_DISENGAGE_OPTIONS, DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, DEFAULT_DISRUPT_OPTIONS, DEFAULT_ENCIRCLEMENT_OPTIONS, DEFAULT_ENGAGEMENT_AREA_OPTIONS, DEFAULT_ENGINEER_WORK_LINE_OPTIONS, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, DEFAULT_FIX_MISSION_TASK_OPTIONS, DEFAULT_FIX_OPTIONS, DEFAULT_FLOT_OPTIONS, DEFAULT_FORTIFIED_AREA_OPTIONS, DEFAULT_FORTIFIED_LINE_OPTIONS, DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, DEFAULT_FRONTAL_ATTACK_OPTIONS, DEFAULT_GENERIC_C2_LINE_OPTIONS, DEFAULT_GENERIC_CIRCLE_OPTIONS, DEFAULT_GENERIC_LINE_OPTIONS, DEFAULT_GENERIC_POLYGON_OPTIONS, DEFAULT_GENERIC_RECTANGLE_OPTIONS, DEFAULT_GENERIC_SECTOR_OPTIONS, DEFAULT_GENERIC_TEXT_OPTIONS, DEFAULT_GUARD_OPTIONS, DEFAULT_HANDOVER_LINE_OPTIONS, DEFAULT_HOLDING_LINE_OPTIONS, DEFAULT_INFILTRATION_LANE_OPTIONS, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, DEFAULT_LABEL_HEIGHT_CSS_PIXELS, DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, DEFAULT_LANDING_ZONE_OPTIONS, DEFAULT_LIGHT_LINE_OPTIONS, DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, DEFAULT_LINE_OF_DEPARTURE_OPTIONS, DEFAULT_MAIN_ATTACK_OPTIONS, DEFAULT_MINEFIELD_OPTIONS, DEFAULT_MOBILE_DEFENSE_OPTIONS, DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, DEFAULT_PENETRATE_OPTIONS, DEFAULT_PHASE_LINE_OPTIONS, DEFAULT_PICKUP_ZONE_OPTIONS, DEFAULT_PORTRAYAL, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, DEFAULT_RELEASE_LINE_OPTIONS, DEFAULT_RETAIN_OPTIONS, DEFAULT_RETIRE_OPTIONS, DEFAULT_SCREEN_OPTIONS, DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_SEIZE_OPTIONS, DEFAULT_STROKE_DASH_CSS_PIXELS, DEFAULT_STROKE_WIDTH_CSS_PIXELS, DEFAULT_STRONG_POINT_OPTIONS, DEFAULT_SUPPORTING_ATTACK_OPTIONS, DEFAULT_SUPPORT_BY_FIRE_OPTIONS, DEFAULT_TACTICAL_ARROW_OPTIONS, DEFAULT_TURNING_MOVEMENT_OPTIONS, DEFAULT_TURN_OPTIONS, DEFAULT_WITHDRAW_OPTIONS, DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, type DelayOptions, type DirectionOfAttackAviationOptions, type DirectionOfMainAttackOptions, type DirectionOfSupportingAttackOptions, type DisengageOptions, type DisruptMissionTaskOptions, type DisruptOptions, EPSILON, type EncirclementOptions, type EngagementAreaOptions, type EngineerWorkLineOptions, FILL_PATTERN_DEFINITIONS, type FLOTOptions, type FeaturePartProps, type FillPattern, type FillPatternCommand, type FillPatternDefinition, type FinalProtectiveFireOptions, type FixMissionTaskOptions, type FixOptions, type FortifiedAreaOptions, type FortifiedLineOptions, type ForwardEdgeOfBattleAreaOptions, type FrontalAttackOptions, type GeneratedLabelKey, type GenericC2LineOptions, type GenericCircleOptions, type GenericLineOptions, type GenericPolygonOptions, type GenericRectangleOptions, type GenericSectorOptions, type GenericTextOptions, type GuardOptions, type HandoverLineOptions, type HoldingLineOptions, type InfiltrationLaneOptions, type JointTacticalActionAreaOptions, type LabelPlacementOverride, type LabelSizeOptions, type LandingZoneOptions, type LightLineOptions, type LimitOfAdvanceOptions, type LineOfDepartureContactOptions, type LineOfDepartureOptions, type LogicalTextStyle, type MainAttackOptions, type MeasureTextRequest, type MeasuredText, type MidpointPerpendicularDrawRuleOptions, type MineType, type MinefieldOptions, type MobileDefenseOptions, NON_SOLID_FILL_PATTERNS, type ObstacleBypassDifficultOptions, type ObstacleBypassEasyOptions, type ObstacleBypassImpossibleOptions, type OptionsByKind, PARAMETER_PRESENTATION_TIERS, PROBABLE_LINE_OF_DEPLOYMENT_DASH, type ParamDescriptor, type ParameterPresentationTier, type ParameterSemanticRole, type PatternId, type PatternPaint, type PatternPathOperation, type PatternPoint, type PatternStroke, type PenetrateOptions, type PhaseLineOptions, type PickupZoneOptions, type Point2D, type PrincipalDirectionOfFireOptions, type ProbableLineOfDeploymentOptions, RADAR_SEARCH_DOCTRINE_FILL_COLOR, RADAR_SEARCH_DOCTRINE_STROKE_COLOR, type RadarSearchDoctrineOptions, type RearwardPassageOfLinesOptions, type ReleaseLineOptions, type RenderOptions, type RetainOptions, type RetireOptions, SECONDARY_DIRECTION_OF_FIRE_DASH, type ScreenOptions, type SecondaryDirectionOfFireOptions, type SeizeOptions, type SimpleStyleProps, type SimpleStyleRender, type StrongPointOptions, type StyleHints, type SupportByFireOptions, type SupportingAttackOptions, TEXT_AMPLIFIER_FIELDS, type TacticalArrowOptions, type TextAmplifierDescriptor, type TextAmplifierField, type TextAmplifierKey, type TextAmplifiers, type TurnOptions, type TurningMovementOptions, type WithdrawOptions, type WithdrawUnderPressureOptions, ambushDrawRule, applyBoxTransformOptions, area27DrawRule, attackByFireDrawRule, axis1DrawRule, blockDrawRule, calculateMetrics, canonicalTextAmplifierKey, centerRadiusDrawRule, cloneControlMeasure, computeDefaultMidpointPerpendicularPoint, computeInitialWidthPoint, containDrawRule, controlMeasureIdFromFeature, createBaselineFrame, createMidpointPerpendicularDrawRule, disruptDrawRule, dragControlMeasureOptionHandle, dynamicPointDrawRule, foldsBoxTransformOptions, freezeOrientationOptions, getControlMeasureMetadata, getControlMeasureMetadataByValue, getControlMeasureOptionHandles, getDefaultOptions, getFillPatternDefinition, getMetersPerPixel, getMidpointPerpendicularSignedDistance, haversineDistance, isKind, line1DrawRule, line23DrawRule, line24DrawRule, line26DrawRule, line27DrawRule, listControlMeasureMetadata, normalizeTextAmplifiers, parameterPresentationTierRank, penetrateDrawRule, point12DrawRule, pointOnMidpointPerpendicularAxis, polyline1DrawRule, project, rectangleDrawRule, renderControlMeasure, resolveAmplifierPlacement, resolveParameterPresentationTier, resolveParameterSemanticRole, resolveStyleHints, roundToFixed, sectorDrawRule, snapToMidpointPerpendicular, sphericalBearing, staticPointDrawRule, supportByFireDrawRule, toSimpleStyle, turnDrawRule, unproject };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as DEFAULT_ENCIRCLEMENT_OPTIONS, $t as DEFAULT_PORTRAYAL, A as DEFAULT_RETIRE_OPTIONS, An as pointOnMidpointPerpendicularAxis, At as DEFAULT_BLOCK_OPTIONS, B as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Bn as getMetersPerPixel, Bt as DEFAULT_ENGAGEMENT_AREA_OPTIONS, C as DEFAULT_MAIN_ATTACK_OPTIONS, Cn as blockDrawRule, Ct as DEFAULT_BREACH_OPTIONS, D as DEFAULT_WITHDRAW_OPTIONS, Dn as computeDefaultMidpointPerpendicularPoint, Dt as DEFAULT_LIGHT_LINE_OPTIONS, E as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, En as area27DrawRule, Et as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, F as DEFAULT_FORTIFIED_LINE_OPTIONS, Fn as haversineDistance, Ft as DEFAULT_ANTITANK_WALL_OPTIONS, G as DEFAULT_HOLDING_LINE_OPTIONS, Gt as TEXT_AMPLIFIER_FIELDS, H as DEFAULT_HANDOVER_LINE_OPTIONS, Ht as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, I as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, In as project, It as DEFAULT_ANTITANK_DITCH_OPTIONS, J as DEFAULT_PHASE_LINE_OPTIONS, Jt as resolveAmplifierPlacement, K as DEFAULT_INFILTRATION_LANE_OPTIONS, Kt as canonicalTextAmplifierKey, L as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Ln as sphericalBearing, Lt as DEFAULT_ASSEMBLY_AREA_OPTIONS, M as DEFAULT_PENETRATE_OPTIONS, Mn as createBaselineFrame, Mt as DEFAULT_BATTLE_POSITION_OPTIONS, N as DEFAULT_FRONTAL_ATTACK_OPTIONS, Nn as calculateMetrics, Nt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, O as DEFAULT_SEIZE_OPTIONS, On as createMidpointPerpendicularDrawRule, Ot as DEFAULT_BOUNDARY_OPTIONS, P as DEFAULT_FORTIFIED_AREA_OPTIONS, Pn as computeInitialWidthPoint, Pt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Q as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Qt as DEFAULT_LINE_JOIN, R as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Rn as unproject, Rt as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, S as DEFAULT_MINEFIELD_OPTIONS, Sn as disruptDrawRule, St as DEFAULT_BYPASS_OPTIONS, T as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Tn as containDrawRule, Tt as DEFAULT_GENERIC_C2_LINE_OPTIONS, U as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Ut as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, V as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Vn as roundToFixed, Vt as DEFAULT_AREA_DEFENSE_OPTIONS, W as DEFAULT_RELEASE_LINE_OPTIONS, Wt as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, X as DEFAULT_FIX_MISSION_TASK_OPTIONS, Xt as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Y as DEFAULT_FLOT_OPTIONS, Yt as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Z as DEFAULT_FIX_OPTIONS, Zt as DEFAULT_LINE_CAP, _ as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, _n as dynamicPointDrawRule, _t as DEFAULT_GENERIC_POLYGON_OPTIONS, a as DEFINITIONS, an as rectangleDrawRule, at as DEFAULT_COVER_OPTIONS, b as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, bn as point12DrawRule, bt as DEFAULT_CLASSIC_ARROW_OPTIONS, c as getDefaultOptions, cn as polyline1DrawRule, ct as DEFAULT_COUNTERATTACK_OPTIONS, d as DEFAULT_TURN_OPTIONS, dn as line24DrawRule, dt as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, en as DEFAULT_STROKE_DASH_CSS_PIXELS, et as DEFAULT_DISRUPT_OPTIONS, f as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, fn as line23DrawRule, ft as RADAR_SEARCH_DOCTRINE_FILL_COLOR, g as SECONDARY_DIRECTION_OF_FIRE_DASH, gn as attackByFireDrawRule, gt as DEFAULT_GENERIC_RECTANGLE_OPTIONS, h as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, hn as ambushDrawRule, ht as DEFAULT_GENERIC_SECTOR_OPTIONS, i as CONTROL_MEASURE_METADATA, in as DEFAULT_AIRBORNE_ATTACK_OPTIONS, it as DEFAULT_DELAY_OPTIONS, j as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, jn as snapToMidpointPerpendicular, jt as DEFAULT_CONTAIN_OPTIONS, k as DEFAULT_SCREEN_OPTIONS, kn as getMidpointPerpendicularSignedDistance, kt as DEFAULT_BLOCK_ARROW_OPTIONS, l as listControlMeasureMetadata, ln as line27DrawRule, lt as DEFAULT_SUPPORTING_ATTACK_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mn as line1DrawRule, mt as DEFAULT_GENERIC_TEXT_OPTIONS, n as resolveStyleHints, nt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, o as getControlMeasureMetadata, on as axis1DrawRule, ot as DEFAULT_TACTICAL_ARROW_OPTIONS, p as DEFAULT_RETAIN_OPTIONS, pn as turnDrawRule, pt as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, q as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, qt as normalizeTextAmplifiers, r as CONTROL_MEASURE_IDS, rn as DEFAULT_AMBUSH_OPTIONS, rt as DEFAULT_DISENGAGE_OPTIONS, s as getControlMeasureMetadataByValue, sn as supportByFireDrawRule, st as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, t as renderControlMeasure, tn as DEFAULT_STROKE_WIDTH_CSS_PIXELS, tt as DEFAULT_GUARD_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, un as line26DrawRule, ut as DEFAULT_CLEAR_OPTIONS, v as DEFAULT_PICKUP_ZONE_OPTIONS, vn as sectorDrawRule, vt as DEFAULT_GENERIC_LINE_OPTIONS, w as DEFAULT_LANDING_ZONE_OPTIONS, wn as centerRadiusDrawRule, wt as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, x as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, xn as penetrateDrawRule, xt as DEFAULT_CANALIZE_OPTIONS, y as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, yn as staticPointDrawRule, yt as DEFAULT_GENERIC_CIRCLE_OPTIONS, z as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, zn as EPSILON, zt as DEFAULT_MOBILE_DEFENSE_OPTIONS } from "./renderControlMeasure-BgPfnjvc.mjs";
1
+ import { $ as DEFAULT_ENCIRCLEMENT_OPTIONS, $t as DEFAULT_PORTRAYAL, A as DEFAULT_RETIRE_OPTIONS, An as pointOnMidpointPerpendicularAxis, At as DEFAULT_BLOCK_OPTIONS, B as DEFAULT_LIMIT_OF_ADVANCE_OPTIONS, Bn as getMetersPerPixel, Bt as DEFAULT_ENGAGEMENT_AREA_OPTIONS, C as DEFAULT_MAIN_ATTACK_OPTIONS, Cn as blockDrawRule, Ct as DEFAULT_BREACH_OPTIONS, D as DEFAULT_WITHDRAW_OPTIONS, Dn as computeDefaultMidpointPerpendicularPoint, Dt as DEFAULT_LIGHT_LINE_OPTIONS, E as DEFAULT_WITHDRAW_UNDER_PRESSURE_OPTIONS, En as area27DrawRule, Et as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, F as DEFAULT_FORTIFIED_LINE_OPTIONS, Fn as haversineDistance, Ft as DEFAULT_ANTITANK_WALL_OPTIONS, G as DEFAULT_HOLDING_LINE_OPTIONS, Gt as TEXT_AMPLIFIER_FIELDS, H as DEFAULT_HANDOVER_LINE_OPTIONS, Ht as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, I as DEFAULT_PROBABLE_LINE_OF_DEPLOYMENT_OPTIONS, In as project, It as DEFAULT_ANTITANK_DITCH_OPTIONS, J as DEFAULT_PHASE_LINE_OPTIONS, Jt as resolveAmplifierPlacement, K as DEFAULT_INFILTRATION_LANE_OPTIONS, Kt as canonicalTextAmplifierKey, L as PROBABLE_LINE_OF_DEPLOYMENT_DASH, Ln as sphericalBearing, Lt as DEFAULT_ASSEMBLY_AREA_OPTIONS, M as DEFAULT_PENETRATE_OPTIONS, Mn as createBaselineFrame, Mt as DEFAULT_BATTLE_POSITION_OPTIONS, N as DEFAULT_FRONTAL_ATTACK_OPTIONS, Nn as calculateMetrics, Nt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, O as DEFAULT_SEIZE_OPTIONS, On as createMidpointPerpendicularDrawRule, Ot as DEFAULT_BOUNDARY_OPTIONS, P as DEFAULT_FORTIFIED_AREA_OPTIONS, Pn as computeInitialWidthPoint, Pt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, Q as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Qt as DEFAULT_LINE_JOIN, R as DEFAULT_LINE_OF_DEPARTURE_CONTACT_OPTIONS, Rn as unproject, Rt as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, S as DEFAULT_MINEFIELD_OPTIONS, Sn as disruptDrawRule, St as DEFAULT_BYPASS_OPTIONS, T as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Tn as containDrawRule, Tt as DEFAULT_GENERIC_C2_LINE_OPTIONS, U as DEFAULT_FORWARD_EDGE_OF_BATTLE_AREA_OPTIONS, Ut as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, V as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Vn as roundToFixed, Vt as DEFAULT_AREA_DEFENSE_OPTIONS, W as DEFAULT_RELEASE_LINE_OPTIONS, Wt as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, X as DEFAULT_FIX_MISSION_TASK_OPTIONS, Xt as DEFAULT_LABEL_SIZE_CLAMP_CSS_PIXELS, Y as DEFAULT_FLOT_OPTIONS, Yt as DEFAULT_LABEL_HEIGHT_CSS_PIXELS, Z as DEFAULT_FIX_OPTIONS, Zt as DEFAULT_LINE_CAP, _ as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, _n as dynamicPointDrawRule, _t as DEFAULT_GENERIC_POLYGON_OPTIONS, a as DEFINITIONS, an as rectangleDrawRule, at as DEFAULT_COVER_OPTIONS, b as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, bn as point12DrawRule, bt as DEFAULT_CLASSIC_ARROW_OPTIONS, c as getDefaultOptions, cn as polyline1DrawRule, ct as DEFAULT_COUNTERATTACK_OPTIONS, d as DEFAULT_TURN_OPTIONS, dn as line24DrawRule, dt as DEFAULT_RADAR_SEARCH_DOCTRINE_OPTIONS, en as DEFAULT_STROKE_DASH_CSS_PIXELS, et as DEFAULT_DISRUPT_OPTIONS, f as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, fn as line23DrawRule, ft as RADAR_SEARCH_DOCTRINE_FILL_COLOR, g as SECONDARY_DIRECTION_OF_FIRE_DASH, gn as attackByFireDrawRule, gt as DEFAULT_GENERIC_RECTANGLE_OPTIONS, h as DEFAULT_SECONDARY_DIRECTION_OF_FIRE_OPTIONS, hn as ambushDrawRule, ht as DEFAULT_GENERIC_SECTOR_OPTIONS, i as CONTROL_MEASURE_METADATA, in as DEFAULT_AIRBORNE_ATTACK_OPTIONS, it as DEFAULT_DELAY_OPTIONS, j as DEFAULT_REARWARD_PASSAGE_OF_LINES_OPTIONS, jn as snapToMidpointPerpendicular, jt as DEFAULT_CONTAIN_OPTIONS, k as DEFAULT_SCREEN_OPTIONS, kn as getMidpointPerpendicularSignedDistance, kt as DEFAULT_BLOCK_ARROW_OPTIONS, l as listControlMeasureMetadata, ln as line27DrawRule, lt as DEFAULT_SUPPORTING_ATTACK_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mn as line1DrawRule, mt as DEFAULT_GENERIC_TEXT_OPTIONS, n as resolveStyleHints, nt as DEFAULT_DISRUPT_MISSION_TASK_OPTIONS, o as getControlMeasureMetadata, on as axis1DrawRule, ot as DEFAULT_TACTICAL_ARROW_OPTIONS, p as DEFAULT_RETAIN_OPTIONS, pn as turnDrawRule, pt as RADAR_SEARCH_DOCTRINE_STROKE_COLOR, q as DEFAULT_BRIDGEHEAD_LINE_OPTIONS, qt as normalizeTextAmplifiers, r as CONTROL_MEASURE_IDS, rn as DEFAULT_AMBUSH_OPTIONS, rt as DEFAULT_DISENGAGE_OPTIONS, s as getControlMeasureMetadataByValue, sn as supportByFireDrawRule, st as DEFAULT_COUNTERATTACK_BY_FIRE_OPTIONS, t as renderControlMeasure, tn as DEFAULT_STROKE_WIDTH_CSS_PIXELS, tt as DEFAULT_GUARD_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, un as line26DrawRule, ut as DEFAULT_CLEAR_OPTIONS, v as DEFAULT_PICKUP_ZONE_OPTIONS, vn as sectorDrawRule, vt as DEFAULT_GENERIC_LINE_OPTIONS, w as DEFAULT_LANDING_ZONE_OPTIONS, wn as centerRadiusDrawRule, wt as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, x as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, xn as penetrateDrawRule, xt as DEFAULT_CANALIZE_OPTIONS, y as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, yn as staticPointDrawRule, yt as DEFAULT_GENERIC_CIRCLE_OPTIONS, z as DEFAULT_LINE_OF_DEPARTURE_OPTIONS, zn as EPSILON, zt as DEFAULT_MOBILE_DEFENSE_OPTIONS } from "./renderControlMeasure-qnu0Feey.mjs";
2
2
  import { FILL_PATTERN_DEFINITIONS, NON_SOLID_FILL_PATTERNS, getFillPatternDefinition } from "./patterns.mjs";
3
3
  //#region src/metadata.ts
4
4
  const PARAMETER_PRESENTATION_TIERS = [
@@ -1,6 +1,6 @@
1
- import { tt as ControlMeasureId, ya as TextAmplifiers } from "../index-CXadfQRk.mjs";
1
+ import { tt as ControlMeasureId, ya as TextAmplifiers } from "../index-DFZ2BoXt.mjs";
2
2
  import { f as FillPattern } from "../patterns-CcQmmOuJ.mjs";
3
- import { FeatureCollection, Geometry } from "geojson";
3
+ import { FeatureCollection, Geometry, Position } from "geojson";
4
4
 
5
5
  //#region src/preview/index.d.ts
6
6
  /** The hatch fill patterns a preview can render — the `FillPattern` vocabulary
@@ -24,6 +24,18 @@ declare const PREVIEW_FILL_PATTERNS: readonly {
24
24
  }[];
25
25
  /** Radius (SVG units) of a {@link PREVIEW_FILL_PATTERNS} dot. */
26
26
  declare const PREVIEW_PATTERN_DOT_RADIUS: number;
27
+ /**
28
+ * Resolves a measure's representative input: its co-located `previewSample`
29
+ * override if present, otherwise the generic {@link fallbackControlPoints}.
30
+ * Unitless points are scaled by {@link D} to the degree offsets a generator
31
+ * expects.
32
+ */
33
+ interface RepresentativeSample {
34
+ controlPoints: Position[];
35
+ options?: Record<string, unknown>;
36
+ textAmplifiers?: TextAmplifiers;
37
+ }
38
+ declare function representativeSample(id: ControlMeasureId): RepresentativeSample;
27
39
  /**
28
40
  * Renders a measure's representative preview to GeoJSON. Pure — no map engine,
29
41
  * so it runs identically at build time (docs catalog, README generator) and in
@@ -173,4 +185,4 @@ declare function viewBoxString(shapes: PreviewShape[], dims: {
173
185
  */
174
186
  declare function svgTextTransform(s: PreviewShape): string | undefined;
175
187
  //#endregion
176
- export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, PreviewFillPattern, PreviewShape, PreviewTextRow, ProjectDimensions, previewLabelBackgroundHeight, previewLabelBackgroundWidth, previewTextRows, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
188
+ export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, PreviewFillPattern, PreviewShape, PreviewTextRow, ProjectDimensions, RepresentativeSample, previewLabelBackgroundHeight, previewLabelBackgroundWidth, previewTextRows, projectRenderToShapes, renderRepresentative, representativeSample, svgTextTransform, viewBoxString, viewBoxWithLabels };
@@ -1,4 +1,4 @@
1
- import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-BgPfnjvc.mjs";
1
+ import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-qnu0Feey.mjs";
2
2
  import { FILL_PATTERN_DEFINITIONS, NON_SOLID_FILL_PATTERNS } from "../patterns.mjs";
3
3
  //#region src/preview/index.ts
4
4
  /** Side length (SVG units) of the repeating non-mine tile in {@link PREVIEW_FILL_PATTERNS}. */
@@ -87,12 +87,6 @@ function fallbackControlPoints(m) {
87
87
  [.6, .1]
88
88
  ];
89
89
  }
90
- /**
91
- * Resolves a measure's representative input: its co-located `previewSample`
92
- * override if present, otherwise the generic {@link fallbackControlPoints}.
93
- * Unitless points are scaled by {@link D} to the degree offsets a generator
94
- * expects.
95
- */
96
90
  function representativeSample(id) {
97
91
  const definition = DEFINITIONS[id];
98
92
  const sample = definition.previewSample;
@@ -101,8 +95,8 @@ function representativeSample(id) {
101
95
  const textAmplifiers = sample?.textAmplifiers;
102
96
  return {
103
97
  controlPoints,
104
- ...options ? { options } : {},
105
- ...textAmplifiers ? { textAmplifiers } : {}
98
+ ...options ? { options: { ...options } } : {},
99
+ ...textAmplifiers ? { textAmplifiers: { ...textAmplifiers } } : {}
106
100
  };
107
101
  }
108
102
  /**
@@ -483,4 +477,4 @@ function collectShapes(g, tx, out, bboxArea, textLimits, props) {
483
477
  }
484
478
  }
485
479
  //#endregion
486
- export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, previewLabelBackgroundHeight, previewLabelBackgroundWidth, previewTextRows, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
480
+ export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, previewLabelBackgroundHeight, previewLabelBackgroundWidth, previewTextRows, projectRenderToShapes, renderRepresentative, representativeSample, svgTextTransform, viewBoxString, viewBoxWithLabels };
@@ -546,13 +546,14 @@ function clonePosition(position) {
546
546
  function clonePositions(positions) {
547
547
  return positions.map(clonePosition);
548
548
  }
549
- function samePosition$1(a, b) {
549
+ function samePosition(a, b) {
550
550
  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
551
551
  }
552
552
  //#endregion
553
553
  //#region src/draw-rules/midpoint-perpendicular.ts
554
554
  function createMidpointPerpendicularDrawRule(options) {
555
555
  const defaultDistanceRatio = options.defaultDistanceRatio ?? 1.5;
556
+ const variableLength = options.variableLength ?? false;
556
557
  const constrainedIndex = options.constrainedIndex ?? 2;
557
558
  const baselineIndexA = constrainedIndex === 0 ? 1 : 0;
558
559
  const baselineIndexB = constrainedIndex === 0 ? 2 : 1;
@@ -564,11 +565,15 @@ function createMidpointPerpendicularDrawRule(options) {
564
565
  normal: frameNormal
565
566
  });
566
567
  }
567
- function packSlots(baselineA, baselineB, constrained) {
568
- const out = new Array(3);
568
+ /** Slot holding the constrained point in an array of `count` points. */
569
+ function constrainedIndexIn(count) {
570
+ return variableLength ? count - 1 : constrainedIndex;
571
+ }
572
+ function packSlots(points, baselineA, baselineB, constrained) {
573
+ const out = points.length > 3 ? clonePositions(points) : new Array(3);
569
574
  out[baselineIndexA] = baselineA;
570
575
  out[baselineIndexB] = baselineB;
571
- out[constrainedIndex] = constrained;
576
+ out[constrainedIndexIn(out.length)] = constrained;
572
577
  return out;
573
578
  }
574
579
  function snap(baselineA, baselineB, point) {
@@ -583,46 +588,52 @@ function createMidpointPerpendicularDrawRule(options) {
583
588
  const baselineB = clonePosition(points[1]);
584
589
  const frame = frameFor(baselineA, baselineB);
585
590
  const derived = frame ? frame.pointAtNormalDistance(frame.length * defaultDistanceRatio) : null;
586
- return derived ? packSlots(baselineA, baselineB, derived) : [baselineA, baselineB];
591
+ return derived ? packSlots([
592
+ baselineA,
593
+ baselineB,
594
+ derived
595
+ ], baselineA, baselineB, derived) : [baselineA, baselineB];
587
596
  }
588
597
  const baselineA = clonePosition(points[baselineIndexA]);
589
598
  const baselineB = clonePosition(points[baselineIndexB]);
590
- const rawConstrained = points[constrainedIndex];
591
- return packSlots(baselineA, baselineB, snap(baselineA, baselineB, rawConstrained) ?? clonePosition(rawConstrained));
599
+ const rawConstrained = points[constrainedIndexIn(points.length)];
600
+ return packSlots(points, baselineA, baselineB, snap(baselineA, baselineB, rawConstrained) ?? clonePosition(rawConstrained));
592
601
  }
593
602
  return {
594
603
  id: options.id,
595
604
  minimumUserPoints: options.minimumUserPoints ?? 2,
596
605
  minimumPreviewPoints: options.minimumPreviewPoints,
597
606
  finishOnLastPointRepeat: options.finishOnLastPointRepeat,
598
- canonicalPointCount: 3,
607
+ canonicalPointCount: variableLength ? void 0 : 3,
608
+ trailingFixedSlots: variableLength ? 1 : void 0,
599
609
  derive,
600
610
  transform(event) {
601
611
  const { previous, next, activePointIndex } = event;
602
612
  if (previous.length < 3 || next.length < 3) return derive(next);
613
+ const newConstrainedIndex = constrainedIndexIn(next.length);
603
614
  const oldBaselineA = previous[baselineIndexA];
604
615
  const oldBaselineB = previous[baselineIndexB];
605
- const oldConstrained = previous[constrainedIndex];
616
+ const oldConstrained = previous[constrainedIndexIn(previous.length)];
606
617
  const newBaselineA = next[baselineIndexA];
607
618
  const newBaselineB = next[baselineIndexB];
608
- const newConstrained = next[constrainedIndex];
619
+ const newConstrained = next[newConstrainedIndex];
609
620
  if (!oldBaselineA || !oldBaselineB || !oldConstrained || !newBaselineA || !newBaselineB || !newConstrained) return derive(next);
610
621
  const baselineAMoved = !samePosition(newBaselineA, oldBaselineA);
611
622
  const baselineBMoved = !samePosition(newBaselineB, oldBaselineB);
612
623
  const constrainedMoved = !samePosition(newConstrained, oldConstrained);
613
624
  const draggingBaseline = activePointIndex === baselineIndexA || activePointIndex === baselineIndexB;
614
- const draggingConstrained = activePointIndex === constrainedIndex;
625
+ const draggingConstrained = activePointIndex === newConstrainedIndex;
615
626
  if (draggingBaseline || (baselineAMoved || baselineBMoved) && !constrainedMoved) {
616
627
  const oldFrame = frameFor(oldBaselineA, oldBaselineB);
617
628
  const newFrame = frameFor(newBaselineA, newBaselineB);
618
629
  if (oldFrame && newFrame) {
619
630
  const distance = oldFrame.signedNormalDistance(oldConstrained);
620
631
  const adjusted = newFrame.pointAtNormalDistance(distance);
621
- if (adjusted) return packSlots(clonePosition(newBaselineA), clonePosition(newBaselineB), adjusted);
632
+ if (adjusted) return packSlots(next, clonePosition(newBaselineA), clonePosition(newBaselineB), adjusted);
622
633
  }
623
634
  } else if (draggingConstrained || !baselineAMoved && !baselineBMoved && constrainedMoved) {
624
635
  const adjusted = snap(newBaselineA, newBaselineB, newConstrained);
625
- if (adjusted) return packSlots(clonePosition(newBaselineA), clonePosition(newBaselineB), adjusted);
636
+ if (adjusted) return packSlots(next, clonePosition(newBaselineA), clonePosition(newBaselineB), adjusted);
626
637
  }
627
638
  return derive(next);
628
639
  }
@@ -655,9 +666,6 @@ function frameFor(p1, p2) {
655
666
  normal: "right"
656
667
  });
657
668
  }
658
- function samePosition(a, b) {
659
- return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
660
- }
661
669
  //#endregion
662
670
  //#region src/draw-rules/area1.ts
663
671
  function derive$14(points) {
@@ -1046,7 +1054,7 @@ const turnDrawRule = {
1046
1054
  transform(event) {
1047
1055
  const { previous, next, activePointIndex } = event;
1048
1056
  if (previous.length < 3 || next.length < 3) return deriveWithSide(next);
1049
- const endpointMoved = !samePosition$1(previous[0], next[0]) || !samePosition$1(previous[1], next[1]);
1057
+ const endpointMoved = !samePosition(previous[0], next[0]) || !samePosition(previous[1], next[1]);
1050
1058
  if (activePointIndex === 0 || activePointIndex === 1 || endpointMoved) return deriveWithSide(next, sideFrom(previous));
1051
1059
  return deriveWithSide(next);
1052
1060
  }
@@ -1353,16 +1361,17 @@ const line32DrawRule = {
1353
1361
  /**
1354
1362
  * Polyline1 anchors for the Infiltration Lane.
1355
1363
  *
1356
- * PT1/PT2 are the two user clicks and define the invisible lane centerline. PT3 is an
1357
- * automatically derived, editable width handle on the perpendicular through
1358
- * its midpoint. It rests on one parallel boundary, so its signed distance
1359
- * from PT1/PT2 is the lane half-width.
1364
+ * PT1 through PTN-1 form the lane centerline. PTN is the editable width
1365
+ * handle on the perpendicular through the midpoint of PT1/PT2, so its signed
1366
+ * distance from that segment is the lane half-width. The initial two clicks
1367
+ * synthesize PTN; later edits may insert more centerline vertices before it.
1360
1368
  */
1361
1369
  const polyline1DrawRule = createMidpointPerpendicularDrawRule({
1362
1370
  id: "polyline1:infiltration-lane",
1363
1371
  defaultDistanceRatio: .18,
1364
1372
  minimumUserPoints: 2,
1365
1373
  minimumPreviewPoints: 2,
1374
+ variableLength: true,
1366
1375
  normal: "left"
1367
1376
  });
1368
1377
  //#endregion
@@ -12633,7 +12642,10 @@ const FINAL_COORDINATION_LINE = defineControlMeasure({
12633
12642
  });
12634
12643
  //#endregion
12635
12644
  //#region src/generators/cm14-maneuver-lines/infiltration-lane.ts
12636
- const DEFAULT_INFILTRATION_LANE_OPTIONS = {};
12645
+ const DEFAULT_INFILTRATION_LANE_OPTIONS = {
12646
+ smooth: false,
12647
+ smoothResolution: 12
12648
+ };
12637
12649
  const INFILTRATION_LANE_METADATA = {
12638
12650
  id: "infiltration-lane",
12639
12651
  name: "Infiltration Lane",
@@ -12642,7 +12654,6 @@ const INFILTRATION_LANE_METADATA = {
12642
12654
  entityType: "Infiltration Lane",
12643
12655
  value: "140800",
12644
12656
  minCoordinates: 3,
12645
- maxCoordinates: 3,
12646
12657
  geometry: "line",
12647
12658
  geometryTypes: ["MultiLineString", "Point"],
12648
12659
  paints: {
@@ -12652,6 +12663,7 @@ const INFILTRATION_LANE_METADATA = {
12652
12663
  },
12653
12664
  drawRule: "Polyline1",
12654
12665
  capturesLabelSize: true,
12666
+ params: SMOOTH_LINE_PARAMS,
12655
12667
  textAmplifiers: [{
12656
12668
  key: "T",
12657
12669
  label: "Unique designation",
@@ -12662,9 +12674,11 @@ const INFILTRATION_LANE_METADATA = {
12662
12674
  };
12663
12675
  /** Creates the two parallel boundaries and centered Field T lane designation. */
12664
12676
  function createInfiltrationLane(coordinates, options = {}, textAmplifiers = {}) {
12665
- const [c1, c2, c3] = coordinates;
12666
- const p1 = project(c1[0], c1[1]);
12667
- const p2 = project(c2[0], c2[1]);
12677
+ const centerlineCoordinates = coordinates.slice(0, -1);
12678
+ const widthPoint = coordinates[coordinates.length - 1];
12679
+ const rawCenterline = centerlineCoordinates.map((point) => project(point[0], point[1]));
12680
+ const p1 = rawCenterline[0];
12681
+ const p2 = rawCenterline[1];
12668
12682
  const frame = createProjectedBaselineFrame(p1, p2, {
12669
12683
  origin: "midpoint",
12670
12684
  normal: "left"
@@ -12673,36 +12687,44 @@ function createInfiltrationLane(coordinates, options = {}, textAmplifiers = {})
12673
12687
  type: "FeatureCollection",
12674
12688
  features: []
12675
12689
  };
12676
- const signedHalfWidth = frame.signedNormalDistance(c3);
12690
+ const signedHalfWidth = frame.signedNormalDistance(widthPoint);
12677
12691
  if (Math.abs(signedHalfWidth) < 1e-6) return {
12678
12692
  type: "FeatureCollection",
12679
12693
  features: []
12680
12694
  };
12681
- const midpoint = frame.origin;
12682
- const offset = vecScale(frame.normal, signedHalfWidth);
12695
+ const rawBoundaries = offsetPolylineSides(rawCenterline, new Array(rawCenterline.length).fill(signedHalfWidth));
12696
+ const smooth = (line) => smoothLineVerts(line, options, 12);
12683
12697
  const features = [{
12684
12698
  type: "Feature",
12685
12699
  properties: { part: "infiltration-lane" },
12686
12700
  geometry: {
12687
12701
  type: "MultiLineString",
12688
- coordinates: [[vecAdd(p1, offset), vecAdd(p2, offset)], [vecSub(p1, offset), vecSub(p2, offset)]].map((line) => line.map((point) => unproject(point[0], point[1])))
12702
+ coordinates: [smooth(rawBoundaries.left), smooth(rawBoundaries.right)].map((line) => line.map((point) => unproject(point[0], point[1])))
12689
12703
  }
12690
12704
  }];
12691
- if (textAmplifiers.T) features.push({
12692
- type: "Feature",
12693
- properties: {
12694
- part: "label",
12695
- labelPlacement: false,
12696
- amplifierField: "T",
12697
- text: textAmplifiers.T,
12698
- rotation: labelRotationAlong(frame.direction),
12699
- ...labelSizeProps(options)
12700
- },
12701
- geometry: {
12702
- type: "Point",
12703
- coordinates: unproject(midpoint[0], midpoint[1])
12704
- }
12705
- });
12705
+ if (textAmplifiers.T) {
12706
+ const { segments, totalLength } = polylineSegments(smooth(rawCenterline));
12707
+ const labelFrame = pointAlongPolyline(segments, totalLength, .5);
12708
+ if (!labelFrame) return {
12709
+ type: "FeatureCollection",
12710
+ features
12711
+ };
12712
+ features.push({
12713
+ type: "Feature",
12714
+ properties: {
12715
+ part: "label",
12716
+ labelPlacement: false,
12717
+ amplifierField: "T",
12718
+ text: textAmplifiers.T,
12719
+ rotation: labelRotationAlong(labelFrame.along),
12720
+ ...labelSizeProps(options)
12721
+ },
12722
+ geometry: {
12723
+ type: "Point",
12724
+ coordinates: unproject(labelFrame.point[0], labelFrame.point[1])
12725
+ }
12726
+ });
12727
+ }
12706
12728
  return {
12707
12729
  type: "FeatureCollection",
12708
12730
  features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbat-mapper/control-measures",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Library for drawing tactical graphics and control measures according to MIL-STD-2525 and APP-6 standards.",
5
5
  "license": "MIT",
6
6
  "author": "Orbat Mapper",