@orbat-mapper/control-measures 0.2.0-alpha.26 → 0.2.0-alpha.28

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.
@@ -293,6 +293,40 @@ interface ControlMeasureMetadata {
293
293
  * definition means adding such a measure stays a one-file change (ADR-0013).
294
294
  */
295
295
  capturesLabelSize?: boolean;
296
+ /**
297
+ * Static, per-kind declaration of what a rendered instance can paint — used
298
+ * by a host editor to decide which style controls (stroke color/width,
299
+ * fill toggle/pattern/color, text color) are meaningful to show for this
300
+ * kind. It describes the *kind*, not a particular instance: a `filled`
301
+ * boolean option still governs whether any given instance is actually
302
+ * filled, this only says whether fill control is meaningful at all.
303
+ */
304
+ paints: ControlMeasurePaintCapability;
305
+ }
306
+ /**
307
+ * A control measure's fill capability, per {@link ControlMeasurePaintCapability.fill}.
308
+ *
309
+ * - `"none"` — no emitted part is ever filled; a fill/fillColor/fillPattern
310
+ * control would be inert.
311
+ * - `"fixed"` — a filled part exists, but the generator pins its
312
+ * `fillPattern` (a solid accent like an echelon marker, or a doctrinal
313
+ * hatch like Limited Access Area's back-hatch) — `cm.style.fillPattern`
314
+ * never reaches it. `fillColor` is *not* pinned, so a fill color override
315
+ * still reaches the part; only the pattern control is inert.
316
+ * - `"user"` — a filled part exists whose pattern the generator leaves
317
+ * unset, so `cm.style.fillPattern` reaches the output. These are exactly
318
+ * the kinds governed by a `filled` boolean {@link ParamDescriptor}
319
+ * (polygon, rectangle, circle, block-arrow).
320
+ */
321
+ type ControlMeasureFillCapability = "none" | "fixed" | "user";
322
+ /** What a rendered control-measure kind can paint — see {@link ControlMeasureMetadata.paints}. */
323
+ interface ControlMeasurePaintCapability {
324
+ /** Whether any emitted part is stroked (non-Point) geometry — gates a stroke color/width control. */
325
+ stroke: boolean;
326
+ /** Whether/how any emitted part is filled — see {@link ControlMeasureFillCapability}. */
327
+ fill: ControlMeasureFillCapability;
328
+ /** Whether the kind emits text label features — gates a text color control. */
329
+ text: boolean;
296
330
  }
297
331
  //#endregion
298
332
  //#region src/define.d.ts
@@ -715,7 +749,7 @@ interface ControlMeasureStyle {
715
749
  fillColor?: string;
716
750
  /**
717
751
  * How a filled part's interior is painted. `"solid"` is explicit so a
718
- * measure can override a patterned layer default (e.g. a hachure fill set
752
+ * measure can override a patterned layer default (e.g. a hatch fill set
719
753
  * at the façade). Pattern lines are drawn in the resolved fill color —
720
754
  * alpha included, there is no separate opacity field. Renderers that
721
755
  * cannot draw a pattern degrade to solid.
@@ -733,11 +767,26 @@ interface ControlMeasureStyle {
733
767
  * Out-of-range values clamp to `[0, 1]`. See ADR-0040.
734
768
  */
735
769
  opacity?: number;
770
+ /**
771
+ * Render a contrast-aware halo behind label glyphs so text stays legible on
772
+ * busy backgrounds. Cascades like any other hint (graphicsStyle → measure →
773
+ * generator), letting a host switch halos on for every labeled measure
774
+ * rather than only the generic Text graphic.
775
+ *
776
+ * Text-only: the renderer applies it to features that carry `text` and drops
777
+ * it everywhere else, so a layer-level `true` never leaks onto plain stroked
778
+ * or filled parts. The halo *color* is not authored here — it is derived per
779
+ * feature from the resolved text color, so each label gets a halo that
780
+ * actually contrasts with it. Unlike the other hints this one is consumed by
781
+ * the renderer and lifted to a top-level `textHalo` feature property; it is
782
+ * never emitted on `properties.style`. See ADR-0042.
783
+ */
784
+ textHalo?: boolean;
736
785
  }
737
786
  /**
738
787
  * How a filled part's interior is painted. See `ControlMeasureStyle.fillPattern`.
739
788
  */
740
- type FillPattern = "solid" | "hachure" | "backhachure" | "cross";
789
+ type FillPattern = "solid" | "hatch" | "reverse-hatch" | "cross-hatch" | "horizontal" | "vertical" | "dots";
741
790
  //#endregion
742
791
  //#region src/internal/area-labels.d.ts
743
792
  /** Shared placement options for the centered-label area measures. */
@@ -1672,8 +1721,6 @@ interface GenericTextOptions {
1672
1721
  * @default 200
1673
1722
  */
1674
1723
  maxSizePixels?: number;
1675
- /** Contrasting halo behind the glyphs so the text stays legible on busy backgrounds. @default false */
1676
- halo?: boolean;
1677
1724
  }
1678
1725
  declare const DEFAULT_GENERIC_TEXT_OPTIONS: GenericTextOptions;
1679
1726
  declare function createGenericText(coordinates: Position[], options?: GenericTextOptions): FeatureCollection<Point, Record<string, unknown>>;
@@ -2880,4 +2927,4 @@ interface AmbushOptions {
2880
2927
  }
2881
2928
  declare const DEFAULT_AMBUSH_OPTIONS: Required<AmbushOptions>;
2882
2929
  //#endregion
2883
- export { DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS as $, DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS as $n, DEFAULT_SUPPORT_BY_FIRE_OPTIONS as $t, roundToFixed as A, PickupZoneOptions as An, LabelPlacementOverride as Ar, DEFAULT_COVER_OPTIONS as At, cloneControlMeasure as B, EncirclementOptions as Bn, DEFAULT_BREACH_OPTIONS as Bt, BaselineFrame as C, DEFAULT_MAIN_ATTACK_OPTIONS as Cn, ControlMeasureMetadata as Cr, DEFAULT_SCREEN_OPTIONS as Ct, createBaselineFrame as D, AreaOfOperationsOptions as Dn, AmplifierPlacements as Dr, DEFAULT_DELAY_OPTIONS as Dt, BaselineFrameOrigin as E, computeInitialWidthPoint as En, AmplifierPlacement as Er, GuardOptions as Et, applyBoxTransformOptions as F, AssemblyAreaOptions as Fn, canonicalTextAmplifierKey as Fr, CanalizeOptions as Ft, ControlMeasureKind as G, StyleHints as Gn, DEFAULT_HANDOVER_LINE_OPTIONS as Gt, CONTROL_MEASURE_IDS as H, FinalProtectiveFireOptions as Hn, DEFAULT_BLOCK_MISSION_TASK_OPTIONS as Ht, freezeOrientationOptions as I, DEFAULT_ASSEMBLY_AREA_OPTIONS as In, normalizeTextAmplifiers as Ir, DEFAULT_CANALIZE_OPTIONS as It, getControlMeasureMetadataByValue as J, PrincipalDirectionOfFireOptions as Jn, PhaseLineOptions as Jt, OptionsByKind as K, controlMeasureIdFromFeature as Kn, HandoverLineOptions as Kt, RenderOptions as L, AreaDefenseOptions as Ln, resolveAmplifierPlacement as Lr, BypassOptions as Lt, SimpleStyleRender as M, LandingZoneOptions as Mn, TextAmplifierField as Mr, TacticalArrowOptions as Mt, toSimpleStyle as N, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS as Nn, TextAmplifierKey as Nr, ClearOptions as Nt, EPSILON as O, DEFAULT_AREA_OF_OPERATIONS_OPTIONS as On, CanonicalTextAmplifiers as Or, DelayOptions as Ot, resolveStyleHints as P, JointTacticalActionAreaOptions as Pn, TextAmplifiers as Pr, DEFAULT_CLEAR_OPTIONS as Pt, ObstacleBypassImpossibleOptions as Q, DirectionOfMainAttackOptions as Qn, DEFAULT_ATTACK_BY_FIRE_OPTIONS as Qt, renderControlMeasure as R, DEFAULT_AREA_DEFENSE_OPTIONS as Rn, AnchorTransformEvent as Rr, DEFAULT_BYPASS_OPTIONS as Rt, snapToMidpointPerpendicular as S, SupportingAttackOptions as Sn, ControlMeasureGeometryType as Sr, DEFAULT_ANTITANK_DITCH_OPTIONS as St, BaselineFrameOptions as T, calculateMetrics as Tn, TextAmplifierDescriptor as Tr, DEFAULT_GUARD_OPTIONS as Tt, CONTROL_MEASURE_METADATA as U, ControlMeasureRender as Un, BattleHandoverLineOptions as Ut, isKind as V, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS as Vn, BlockMissionTaskOptions as Vt, ControlMeasureId as W, FeaturePartProps as Wn, DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS as Wt, listControlMeasureMetadata as X, DirectionOfSupportingAttackOptions as Xn, FLOTOptions as Xt, getDefaultOptions as Y, DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS as Yn, DEFAULT_FLOT_OPTIONS as Yt, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS as Z, DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS as Zn, AttackByFireOptions as Zt, MidpointPerpendicularDrawRuleOptions as _, DEFAULT_BLOCK_ARROW_OPTIONS as _n, unproject as _r, DEFAULT_FORTIFIED_LINE_OPTIONS as _t, supportByFireDrawRule as a, DEFAULT_GENERIC_TEXT_OPTIONS as an, ControlMeasureStyle as ar, DEFAULT_FIX_OPTIONS as at, getMidpointPerpendicularSignedDistance as b, DEFAULT_CLASSIC_ARROW_OPTIONS as bn, BoxTransformDelta as br, DEFAULT_ANTITANK_WALL_OPTIONS as bt, line23DrawRule as c, GenericCircleOptions as cn, GenericC2LineOptions as cr, DisruptOptions as ct, ambushDrawRule as d, DEFAULT_GENERIC_POLYGON_OPTIONS as dn, DEFAULT_LIGHT_LINE_OPTIONS as dr, DEFAULT_TURNING_MOVEMENT_OPTIONS as dt, SupportByFireOptions as en, DirectionOfAttackAviationOptions as er, ObstacleBypassDifficultOptions as et, attackByFireDrawRule as f, GenericPolygonOptions as fn, LightLineOptions as fr, TurningMovementOptions as ft, blockDrawRule as g, BlockArrowOptions as gn, project as gr, FortifiedAreaOptions as gt, disruptDrawRule as h, BlockArrowHeadStyle as hn, haversineDistance as hr, DEFAULT_FORTIFIED_AREA_OPTIONS as ht, axis1DrawRule as i, DEFAULT_AIRBORNE_ATTACK_OPTIONS as in, DEFAULT_BATTLE_POSITION_OPTIONS as ir, TurnOptions as it, SimpleStyleProps as j, DEFAULT_LANDING_ZONE_OPTIONS as jn, TEXT_AMPLIFIER_FIELDS as jr, DEFAULT_TACTICAL_ARROW_OPTIONS as jt, getMetersPerPixel as k, DEFAULT_PICKUP_ZONE_OPTIONS as kn, GeneratedLabelKey as kr, CoverOptions as kt, turnDrawRule as l, DEFAULT_GENERIC_RECTANGLE_OPTIONS as ln, DEFAULT_ENGINEER_WORK_LINE_OPTIONS as lr, BlockOptions as lt, centerRadiusDrawRule as m, GenericLineOptions as mn, Point2D as mr, FrontalAttackOptions as mt, DEFAULT_AMBUSH_OPTIONS as n, DEFAULT_ATTACK_HELICOPTER_OPTIONS as nn, StrongPointOptions as nr, ObstacleBypassEasyOptions as nt, line26DrawRule as o, GenericTextOptions as on, FillPattern as or, FixOptions as ot, point12DrawRule as p, DEFAULT_GENERIC_LINE_OPTIONS as pn, LabelSizeOptions as pr, DEFAULT_FRONTAL_ATTACK_OPTIONS as pt, getControlMeasureMetadata as q, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS as qn, DEFAULT_PHASE_LINE_OPTIONS as qt, rectangleDrawRule as r, AirborneAttackOptions as rn, BattlePositionOptions as rr, DEFAULT_TURN_OPTIONS as rt, line24DrawRule as s, DEFAULT_GENERIC_CIRCLE_OPTIONS as sn, DEFAULT_GENERIC_C2_LINE_OPTIONS as sr, DEFAULT_DISRUPT_OPTIONS as st, AmbushOptions as t, AttackHelicopterOptions as tn, DEFAULT_STRONG_POINT_OPTIONS as tr, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS as tt, line1DrawRule as u, GenericRectangleOptions as un, EngineerWorkLineOptions as ur, DEFAULT_BLOCK_OPTIONS as ut, computeDefaultMidpointPerpendicularPoint as v, ClassicArrowHeadStyle as vn, BoundaryOptions as vr, FortifiedLineOptions as vt, BaselineFrameNormal as w, MainAttackOptions as wn, ParamDescriptor as wr, ScreenOptions as wt, pointOnMidpointPerpendicularAxis as x, DEFAULT_SUPPORTING_ATTACK_OPTIONS as xn, ControlMeasureGeometry as xr, AntitankDitchOptions as xt, createMidpointPerpendicularDrawRule as y, ClassicArrowOptions as yn, DEFAULT_BOUNDARY_OPTIONS as yr, AntitankWallOptions as yt, ControlMeasure as z, DEFAULT_ENCIRCLEMENT_OPTIONS as zn, ControlMeasureDrawRule as zr, BreachOptions as zt };
2930
+ export { DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS as $, DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS as $n, DEFAULT_SUPPORT_BY_FIRE_OPTIONS as $t, roundToFixed as A, PickupZoneOptions as An, CanonicalTextAmplifiers as Ar, DEFAULT_COVER_OPTIONS as At, cloneControlMeasure as B, EncirclementOptions as Bn, AnchorTransformEvent as Br, DEFAULT_BREACH_OPTIONS as Bt, BaselineFrame as C, DEFAULT_MAIN_ATTACK_OPTIONS as Cn, ControlMeasureGeometryType as Cr, DEFAULT_SCREEN_OPTIONS as Ct, createBaselineFrame as D, AreaOfOperationsOptions as Dn, TextAmplifierDescriptor as Dr, DEFAULT_DELAY_OPTIONS as Dt, BaselineFrameOrigin as E, computeInitialWidthPoint as En, ParamDescriptor as Er, GuardOptions as Et, applyBoxTransformOptions as F, AssemblyAreaOptions as Fn, TextAmplifierKey as Fr, CanalizeOptions as Ft, ControlMeasureKind as G, StyleHints as Gn, DEFAULT_HANDOVER_LINE_OPTIONS as Gt, CONTROL_MEASURE_IDS as H, FinalProtectiveFireOptions as Hn, DEFAULT_BLOCK_MISSION_TASK_OPTIONS as Ht, freezeOrientationOptions as I, DEFAULT_ASSEMBLY_AREA_OPTIONS as In, TextAmplifiers as Ir, DEFAULT_CANALIZE_OPTIONS as It, getControlMeasureMetadataByValue as J, PrincipalDirectionOfFireOptions as Jn, PhaseLineOptions as Jt, OptionsByKind as K, controlMeasureIdFromFeature as Kn, HandoverLineOptions as Kt, RenderOptions as L, AreaDefenseOptions as Ln, canonicalTextAmplifierKey as Lr, BypassOptions as Lt, SimpleStyleRender as M, LandingZoneOptions as Mn, LabelPlacementOverride as Mr, TacticalArrowOptions as Mt, toSimpleStyle as N, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS as Nn, TEXT_AMPLIFIER_FIELDS as Nr, ClearOptions as Nt, EPSILON as O, DEFAULT_AREA_OF_OPERATIONS_OPTIONS as On, AmplifierPlacement as Or, DelayOptions as Ot, resolveStyleHints as P, JointTacticalActionAreaOptions as Pn, TextAmplifierField as Pr, DEFAULT_CLEAR_OPTIONS as Pt, ObstacleBypassImpossibleOptions as Q, DirectionOfMainAttackOptions as Qn, DEFAULT_ATTACK_BY_FIRE_OPTIONS as Qt, renderControlMeasure as R, DEFAULT_AREA_DEFENSE_OPTIONS as Rn, normalizeTextAmplifiers as Rr, DEFAULT_BYPASS_OPTIONS as Rt, snapToMidpointPerpendicular as S, SupportingAttackOptions as Sn, ControlMeasureGeometry as Sr, DEFAULT_ANTITANK_DITCH_OPTIONS as St, BaselineFrameOptions as T, calculateMetrics as Tn, ControlMeasurePaintCapability as Tr, DEFAULT_GUARD_OPTIONS as Tt, CONTROL_MEASURE_METADATA as U, ControlMeasureRender as Un, BattleHandoverLineOptions as Ut, isKind as V, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS as Vn, ControlMeasureDrawRule as Vr, BlockMissionTaskOptions as Vt, ControlMeasureId as W, FeaturePartProps as Wn, DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS as Wt, listControlMeasureMetadata as X, DirectionOfSupportingAttackOptions as Xn, FLOTOptions as Xt, getDefaultOptions as Y, DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS as Yn, DEFAULT_FLOT_OPTIONS as Yt, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS as Z, DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS as Zn, AttackByFireOptions as Zt, MidpointPerpendicularDrawRuleOptions as _, DEFAULT_BLOCK_ARROW_OPTIONS as _n, unproject as _r, DEFAULT_FORTIFIED_LINE_OPTIONS as _t, supportByFireDrawRule as a, DEFAULT_GENERIC_TEXT_OPTIONS as an, ControlMeasureStyle as ar, DEFAULT_FIX_OPTIONS as at, getMidpointPerpendicularSignedDistance as b, DEFAULT_CLASSIC_ARROW_OPTIONS as bn, BoxTransformDelta as br, DEFAULT_ANTITANK_WALL_OPTIONS as bt, line23DrawRule as c, GenericCircleOptions as cn, GenericC2LineOptions as cr, DisruptOptions as ct, ambushDrawRule as d, DEFAULT_GENERIC_POLYGON_OPTIONS as dn, DEFAULT_LIGHT_LINE_OPTIONS as dr, DEFAULT_TURNING_MOVEMENT_OPTIONS as dt, SupportByFireOptions as en, DirectionOfAttackAviationOptions as er, ObstacleBypassDifficultOptions as et, attackByFireDrawRule as f, GenericPolygonOptions as fn, LightLineOptions as fr, TurningMovementOptions as ft, blockDrawRule as g, BlockArrowOptions as gn, project as gr, FortifiedAreaOptions as gt, disruptDrawRule as h, BlockArrowHeadStyle as hn, haversineDistance as hr, DEFAULT_FORTIFIED_AREA_OPTIONS as ht, axis1DrawRule as i, DEFAULT_AIRBORNE_ATTACK_OPTIONS as in, DEFAULT_BATTLE_POSITION_OPTIONS as ir, TurnOptions as it, SimpleStyleProps as j, DEFAULT_LANDING_ZONE_OPTIONS as jn, GeneratedLabelKey as jr, DEFAULT_TACTICAL_ARROW_OPTIONS as jt, getMetersPerPixel as k, DEFAULT_PICKUP_ZONE_OPTIONS as kn, AmplifierPlacements as kr, CoverOptions as kt, turnDrawRule as l, DEFAULT_GENERIC_RECTANGLE_OPTIONS as ln, DEFAULT_ENGINEER_WORK_LINE_OPTIONS as lr, BlockOptions as lt, centerRadiusDrawRule as m, GenericLineOptions as mn, Point2D as mr, FrontalAttackOptions as mt, DEFAULT_AMBUSH_OPTIONS as n, DEFAULT_ATTACK_HELICOPTER_OPTIONS as nn, StrongPointOptions as nr, ObstacleBypassEasyOptions as nt, line26DrawRule as o, GenericTextOptions as on, FillPattern as or, FixOptions as ot, point12DrawRule as p, DEFAULT_GENERIC_LINE_OPTIONS as pn, LabelSizeOptions as pr, DEFAULT_FRONTAL_ATTACK_OPTIONS as pt, getControlMeasureMetadata as q, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS as qn, DEFAULT_PHASE_LINE_OPTIONS as qt, rectangleDrawRule as r, AirborneAttackOptions as rn, BattlePositionOptions as rr, DEFAULT_TURN_OPTIONS as rt, line24DrawRule as s, DEFAULT_GENERIC_CIRCLE_OPTIONS as sn, DEFAULT_GENERIC_C2_LINE_OPTIONS as sr, DEFAULT_DISRUPT_OPTIONS as st, AmbushOptions as t, AttackHelicopterOptions as tn, DEFAULT_STRONG_POINT_OPTIONS as tr, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS as tt, line1DrawRule as u, GenericRectangleOptions as un, EngineerWorkLineOptions as ur, DEFAULT_BLOCK_OPTIONS as ut, computeDefaultMidpointPerpendicularPoint as v, ClassicArrowHeadStyle as vn, BoundaryOptions as vr, FortifiedLineOptions as vt, BaselineFrameNormal as w, MainAttackOptions as wn, ControlMeasureMetadata as wr, ScreenOptions as wt, pointOnMidpointPerpendicularAxis as x, DEFAULT_SUPPORTING_ATTACK_OPTIONS as xn, ControlMeasureFillCapability as xr, AntitankDitchOptions as xt, createMidpointPerpendicularDrawRule as y, ClassicArrowOptions as yn, DEFAULT_BOUNDARY_OPTIONS as yr, AntitankWallOptions as yt, ControlMeasure as z, DEFAULT_ENCIRCLEMENT_OPTIONS as zn, resolveAmplifierPlacement as zr, BreachOptions as zt };
package/dist/index.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { $ as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, $n as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, $t as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, A as roundToFixed, An as PickupZoneOptions, Ar as LabelPlacementOverride, At as DEFAULT_COVER_OPTIONS, B as cloneControlMeasure, Bn as EncirclementOptions, Bt as DEFAULT_BREACH_OPTIONS, C as BaselineFrame, Cn as DEFAULT_MAIN_ATTACK_OPTIONS, Cr as ControlMeasureMetadata, Ct as DEFAULT_SCREEN_OPTIONS, D as createBaselineFrame, Dn as AreaOfOperationsOptions, Dr as AmplifierPlacements, Dt as DEFAULT_DELAY_OPTIONS, E as BaselineFrameOrigin, En as computeInitialWidthPoint, Er as AmplifierPlacement, Et as GuardOptions, F as applyBoxTransformOptions, Fn as AssemblyAreaOptions, Fr as canonicalTextAmplifierKey, Ft as CanalizeOptions, G as ControlMeasureKind, Gn as StyleHints, Gt as DEFAULT_HANDOVER_LINE_OPTIONS, H as CONTROL_MEASURE_IDS, Hn as FinalProtectiveFireOptions, Ht as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, I as freezeOrientationOptions, In as DEFAULT_ASSEMBLY_AREA_OPTIONS, Ir as normalizeTextAmplifiers, It as DEFAULT_CANALIZE_OPTIONS, J as getControlMeasureMetadataByValue, Jn as PrincipalDirectionOfFireOptions, Jt as PhaseLineOptions, K as OptionsByKind, Kn as controlMeasureIdFromFeature, Kt as HandoverLineOptions, L as RenderOptions, Ln as AreaDefenseOptions, Lr as resolveAmplifierPlacement, Lt as BypassOptions, M as SimpleStyleRender, Mn as LandingZoneOptions, Mr as TextAmplifierField, Mt as TacticalArrowOptions, N as toSimpleStyle, Nn as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Nr as TextAmplifierKey, Nt as ClearOptions, O as EPSILON, On as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, Or as CanonicalTextAmplifiers, Ot as DelayOptions, P as resolveStyleHints, Pn as JointTacticalActionAreaOptions, Pr as TextAmplifiers, Pt as DEFAULT_CLEAR_OPTIONS, Q as ObstacleBypassImpossibleOptions, Qn as DirectionOfMainAttackOptions, Qt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, R as renderControlMeasure, Rn as DEFAULT_AREA_DEFENSE_OPTIONS, Rr as AnchorTransformEvent, Rt as DEFAULT_BYPASS_OPTIONS, S as snapToMidpointPerpendicular, Sn as SupportingAttackOptions, Sr as ControlMeasureGeometryType, St as DEFAULT_ANTITANK_DITCH_OPTIONS, T as BaselineFrameOptions, Tn as calculateMetrics, Tr as TextAmplifierDescriptor, Tt as DEFAULT_GUARD_OPTIONS, U as CONTROL_MEASURE_METADATA, Un as ControlMeasureRender, Ut as BattleHandoverLineOptions, V as isKind, Vn as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Vt as BlockMissionTaskOptions, W as ControlMeasureId, Wn as FeaturePartProps, Wt as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, X as listControlMeasureMetadata, Xn as DirectionOfSupportingAttackOptions, Xt as FLOTOptions, Y as getDefaultOptions, Yn as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, Yt as DEFAULT_FLOT_OPTIONS, Z as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, Zn as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, Zt as AttackByFireOptions, _ as MidpointPerpendicularDrawRuleOptions, _n as DEFAULT_BLOCK_ARROW_OPTIONS, _r as unproject, _t as DEFAULT_FORTIFIED_LINE_OPTIONS, a as supportByFireDrawRule, an as DEFAULT_GENERIC_TEXT_OPTIONS, ar as ControlMeasureStyle, at as DEFAULT_FIX_OPTIONS, b as getMidpointPerpendicularSignedDistance, bn as DEFAULT_CLASSIC_ARROW_OPTIONS, br as BoxTransformDelta, bt as DEFAULT_ANTITANK_WALL_OPTIONS, c as line23DrawRule, cn as GenericCircleOptions, cr as GenericC2LineOptions, ct as DisruptOptions, d as ambushDrawRule, dn as DEFAULT_GENERIC_POLYGON_OPTIONS, dr as DEFAULT_LIGHT_LINE_OPTIONS, dt as DEFAULT_TURNING_MOVEMENT_OPTIONS, en as SupportByFireOptions, er as DirectionOfAttackAviationOptions, et as ObstacleBypassDifficultOptions, f as attackByFireDrawRule, fn as GenericPolygonOptions, fr as LightLineOptions, ft as TurningMovementOptions, g as blockDrawRule, gn as BlockArrowOptions, gr as project, gt as FortifiedAreaOptions, h as disruptDrawRule, hn as BlockArrowHeadStyle, hr as haversineDistance, ht as DEFAULT_FORTIFIED_AREA_OPTIONS, i as axis1DrawRule, in as DEFAULT_AIRBORNE_ATTACK_OPTIONS, ir as DEFAULT_BATTLE_POSITION_OPTIONS, it as TurnOptions, j as SimpleStyleProps, jn as DEFAULT_LANDING_ZONE_OPTIONS, jr as TEXT_AMPLIFIER_FIELDS, jt as DEFAULT_TACTICAL_ARROW_OPTIONS, k as getMetersPerPixel, kn as DEFAULT_PICKUP_ZONE_OPTIONS, kr as GeneratedLabelKey, kt as CoverOptions, l as turnDrawRule, ln as DEFAULT_GENERIC_RECTANGLE_OPTIONS, lr as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, lt as BlockOptions, m as centerRadiusDrawRule, mn as GenericLineOptions, mr as Point2D, mt as FrontalAttackOptions, n as DEFAULT_AMBUSH_OPTIONS, nn as DEFAULT_ATTACK_HELICOPTER_OPTIONS, nr as StrongPointOptions, nt as ObstacleBypassEasyOptions, o as line26DrawRule, on as GenericTextOptions, or as FillPattern, ot as FixOptions, p as point12DrawRule, pn as DEFAULT_GENERIC_LINE_OPTIONS, pr as LabelSizeOptions, pt as DEFAULT_FRONTAL_ATTACK_OPTIONS, q as getControlMeasureMetadata, qn as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, qt as DEFAULT_PHASE_LINE_OPTIONS, r as rectangleDrawRule, rn as AirborneAttackOptions, rr as BattlePositionOptions, rt as DEFAULT_TURN_OPTIONS, s as line24DrawRule, sn as DEFAULT_GENERIC_CIRCLE_OPTIONS, sr as DEFAULT_GENERIC_C2_LINE_OPTIONS, st as DEFAULT_DISRUPT_OPTIONS, t as AmbushOptions, tn as AttackHelicopterOptions, tr as DEFAULT_STRONG_POINT_OPTIONS, tt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, u as line1DrawRule, un as GenericRectangleOptions, ur as EngineerWorkLineOptions, ut as DEFAULT_BLOCK_OPTIONS, v as computeDefaultMidpointPerpendicularPoint, vn as ClassicArrowHeadStyle, vr as BoundaryOptions, vt as FortifiedLineOptions, w as BaselineFrameNormal, wn as MainAttackOptions, wr as ParamDescriptor, wt as ScreenOptions, x as pointOnMidpointPerpendicularAxis, xn as DEFAULT_SUPPORTING_ATTACK_OPTIONS, xr as ControlMeasureGeometry, xt as AntitankDitchOptions, y as createMidpointPerpendicularDrawRule, yn as ClassicArrowOptions, yr as DEFAULT_BOUNDARY_OPTIONS, yt as AntitankWallOptions, z as ControlMeasure, zn as DEFAULT_ENCIRCLEMENT_OPTIONS, zr as ControlMeasureDrawRule, zt as BreachOptions } from "./index-BxApuW__.mjs";
2
- 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 BypassOptions, CONTROL_MEASURE_IDS, CONTROL_MEASURE_METADATA, type CanalizeOptions, type CanonicalTextAmplifiers, type ClassicArrowHeadStyle, type ClassicArrowOptions, type ClearOptions, type ControlMeasure, type ControlMeasureDrawRule, type ControlMeasureGeometry, type ControlMeasureGeometryType, type ControlMeasureId, type ControlMeasureKind, type ControlMeasureMetadata, type ControlMeasureRender, type ControlMeasureStyle, 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_BYPASS_OPTIONS, DEFAULT_CANALIZE_OPTIONS, DEFAULT_CLASSIC_ARROW_OPTIONS, DEFAULT_CLEAR_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_DISRUPT_OPTIONS, DEFAULT_ENCIRCLEMENT_OPTIONS, DEFAULT_ENGINEER_WORK_LINE_OPTIONS, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, DEFAULT_FIX_OPTIONS, DEFAULT_FLOT_OPTIONS, DEFAULT_FORTIFIED_AREA_OPTIONS, DEFAULT_FORTIFIED_LINE_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_TEXT_OPTIONS, DEFAULT_GUARD_OPTIONS, DEFAULT_HANDOVER_LINE_OPTIONS, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, DEFAULT_LANDING_ZONE_OPTIONS, DEFAULT_LIGHT_LINE_OPTIONS, DEFAULT_MAIN_ATTACK_OPTIONS, DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, DEFAULT_PHASE_LINE_OPTIONS, DEFAULT_PICKUP_ZONE_OPTIONS, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_SCREEN_OPTIONS, DEFAULT_STRONG_POINT_OPTIONS, DEFAULT_SUPPORTING_ATTACK_OPTIONS, DEFAULT_SUPPORT_BY_FIRE_OPTIONS, DEFAULT_TACTICAL_ARROW_OPTIONS, DEFAULT_TURNING_MOVEMENT_OPTIONS, DEFAULT_TURN_OPTIONS, type DelayOptions, type DirectionOfAttackAviationOptions, type DirectionOfMainAttackOptions, type DirectionOfSupportingAttackOptions, type DisruptOptions, EPSILON, type EncirclementOptions, type EngineerWorkLineOptions, type FLOTOptions, type FeaturePartProps, type FillPattern, type FinalProtectiveFireOptions, type FixOptions, type FortifiedAreaOptions, type FortifiedLineOptions, type FrontalAttackOptions, type GeneratedLabelKey, type GenericC2LineOptions, type GenericCircleOptions, type GenericLineOptions, type GenericPolygonOptions, type GenericRectangleOptions, type GenericTextOptions, type GuardOptions, type HandoverLineOptions, type JointTacticalActionAreaOptions, type LabelPlacementOverride, type LabelSizeOptions, type LandingZoneOptions, type LightLineOptions, type MainAttackOptions, type MidpointPerpendicularDrawRuleOptions, type ObstacleBypassDifficultOptions, type ObstacleBypassEasyOptions, type ObstacleBypassImpossibleOptions, type OptionsByKind, type ParamDescriptor, type PhaseLineOptions, type PickupZoneOptions, type Point2D, type PrincipalDirectionOfFireOptions, type RenderOptions, type ScreenOptions, 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, ambushDrawRule, applyBoxTransformOptions, attackByFireDrawRule, axis1DrawRule, blockDrawRule, calculateMetrics, canonicalTextAmplifierKey, centerRadiusDrawRule, cloneControlMeasure, computeDefaultMidpointPerpendicularPoint, computeInitialWidthPoint, controlMeasureIdFromFeature, createBaselineFrame, createMidpointPerpendicularDrawRule, disruptDrawRule, freezeOrientationOptions, getControlMeasureMetadata, getControlMeasureMetadataByValue, getDefaultOptions, getMetersPerPixel, getMidpointPerpendicularSignedDistance, haversineDistance, isKind, line1DrawRule, line23DrawRule, line24DrawRule, line26DrawRule, listControlMeasureMetadata, normalizeTextAmplifiers, point12DrawRule, pointOnMidpointPerpendicularAxis, project, rectangleDrawRule, renderControlMeasure, resolveAmplifierPlacement, resolveStyleHints, roundToFixed, snapToMidpointPerpendicular, supportByFireDrawRule, toSimpleStyle, turnDrawRule, unproject };
1
+ import { $ as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, $n as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, $t as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, A as roundToFixed, An as PickupZoneOptions, Ar as CanonicalTextAmplifiers, At as DEFAULT_COVER_OPTIONS, B as cloneControlMeasure, Bn as EncirclementOptions, Br as AnchorTransformEvent, Bt as DEFAULT_BREACH_OPTIONS, C as BaselineFrame, Cn as DEFAULT_MAIN_ATTACK_OPTIONS, Cr as ControlMeasureGeometryType, Ct as DEFAULT_SCREEN_OPTIONS, D as createBaselineFrame, Dn as AreaOfOperationsOptions, Dr as TextAmplifierDescriptor, Dt as DEFAULT_DELAY_OPTIONS, E as BaselineFrameOrigin, En as computeInitialWidthPoint, Er as ParamDescriptor, Et as GuardOptions, F as applyBoxTransformOptions, Fn as AssemblyAreaOptions, Fr as TextAmplifierKey, Ft as CanalizeOptions, G as ControlMeasureKind, Gn as StyleHints, Gt as DEFAULT_HANDOVER_LINE_OPTIONS, H as CONTROL_MEASURE_IDS, Hn as FinalProtectiveFireOptions, Ht as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, I as freezeOrientationOptions, In as DEFAULT_ASSEMBLY_AREA_OPTIONS, Ir as TextAmplifiers, It as DEFAULT_CANALIZE_OPTIONS, J as getControlMeasureMetadataByValue, Jn as PrincipalDirectionOfFireOptions, Jt as PhaseLineOptions, K as OptionsByKind, Kn as controlMeasureIdFromFeature, Kt as HandoverLineOptions, L as RenderOptions, Ln as AreaDefenseOptions, Lr as canonicalTextAmplifierKey, Lt as BypassOptions, M as SimpleStyleRender, Mn as LandingZoneOptions, Mr as LabelPlacementOverride, Mt as TacticalArrowOptions, N as toSimpleStyle, Nn as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, Nr as TEXT_AMPLIFIER_FIELDS, Nt as ClearOptions, O as EPSILON, On as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, Or as AmplifierPlacement, Ot as DelayOptions, P as resolveStyleHints, Pn as JointTacticalActionAreaOptions, Pr as TextAmplifierField, Pt as DEFAULT_CLEAR_OPTIONS, Q as ObstacleBypassImpossibleOptions, Qn as DirectionOfMainAttackOptions, Qt as DEFAULT_ATTACK_BY_FIRE_OPTIONS, R as renderControlMeasure, Rn as DEFAULT_AREA_DEFENSE_OPTIONS, Rr as normalizeTextAmplifiers, Rt as DEFAULT_BYPASS_OPTIONS, S as snapToMidpointPerpendicular, Sn as SupportingAttackOptions, Sr as ControlMeasureGeometry, St as DEFAULT_ANTITANK_DITCH_OPTIONS, T as BaselineFrameOptions, Tn as calculateMetrics, Tr as ControlMeasurePaintCapability, Tt as DEFAULT_GUARD_OPTIONS, U as CONTROL_MEASURE_METADATA, Un as ControlMeasureRender, Ut as BattleHandoverLineOptions, V as isKind, Vn as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Vr as ControlMeasureDrawRule, Vt as BlockMissionTaskOptions, W as ControlMeasureId, Wn as FeaturePartProps, Wt as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, X as listControlMeasureMetadata, Xn as DirectionOfSupportingAttackOptions, Xt as FLOTOptions, Y as getDefaultOptions, Yn as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, Yt as DEFAULT_FLOT_OPTIONS, Z as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, Zn as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, Zt as AttackByFireOptions, _ as MidpointPerpendicularDrawRuleOptions, _n as DEFAULT_BLOCK_ARROW_OPTIONS, _r as unproject, _t as DEFAULT_FORTIFIED_LINE_OPTIONS, a as supportByFireDrawRule, an as DEFAULT_GENERIC_TEXT_OPTIONS, ar as ControlMeasureStyle, at as DEFAULT_FIX_OPTIONS, b as getMidpointPerpendicularSignedDistance, bn as DEFAULT_CLASSIC_ARROW_OPTIONS, br as BoxTransformDelta, bt as DEFAULT_ANTITANK_WALL_OPTIONS, c as line23DrawRule, cn as GenericCircleOptions, cr as GenericC2LineOptions, ct as DisruptOptions, d as ambushDrawRule, dn as DEFAULT_GENERIC_POLYGON_OPTIONS, dr as DEFAULT_LIGHT_LINE_OPTIONS, dt as DEFAULT_TURNING_MOVEMENT_OPTIONS, en as SupportByFireOptions, er as DirectionOfAttackAviationOptions, et as ObstacleBypassDifficultOptions, f as attackByFireDrawRule, fn as GenericPolygonOptions, fr as LightLineOptions, ft as TurningMovementOptions, g as blockDrawRule, gn as BlockArrowOptions, gr as project, gt as FortifiedAreaOptions, h as disruptDrawRule, hn as BlockArrowHeadStyle, hr as haversineDistance, ht as DEFAULT_FORTIFIED_AREA_OPTIONS, i as axis1DrawRule, in as DEFAULT_AIRBORNE_ATTACK_OPTIONS, ir as DEFAULT_BATTLE_POSITION_OPTIONS, it as TurnOptions, j as SimpleStyleProps, jn as DEFAULT_LANDING_ZONE_OPTIONS, jr as GeneratedLabelKey, jt as DEFAULT_TACTICAL_ARROW_OPTIONS, k as getMetersPerPixel, kn as DEFAULT_PICKUP_ZONE_OPTIONS, kr as AmplifierPlacements, kt as CoverOptions, l as turnDrawRule, ln as DEFAULT_GENERIC_RECTANGLE_OPTIONS, lr as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, lt as BlockOptions, m as centerRadiusDrawRule, mn as GenericLineOptions, mr as Point2D, mt as FrontalAttackOptions, n as DEFAULT_AMBUSH_OPTIONS, nn as DEFAULT_ATTACK_HELICOPTER_OPTIONS, nr as StrongPointOptions, nt as ObstacleBypassEasyOptions, o as line26DrawRule, on as GenericTextOptions, or as FillPattern, ot as FixOptions, p as point12DrawRule, pn as DEFAULT_GENERIC_LINE_OPTIONS, pr as LabelSizeOptions, pt as DEFAULT_FRONTAL_ATTACK_OPTIONS, q as getControlMeasureMetadata, qn as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, qt as DEFAULT_PHASE_LINE_OPTIONS, r as rectangleDrawRule, rn as AirborneAttackOptions, rr as BattlePositionOptions, rt as DEFAULT_TURN_OPTIONS, s as line24DrawRule, sn as DEFAULT_GENERIC_CIRCLE_OPTIONS, sr as DEFAULT_GENERIC_C2_LINE_OPTIONS, st as DEFAULT_DISRUPT_OPTIONS, t as AmbushOptions, tn as AttackHelicopterOptions, tr as DEFAULT_STRONG_POINT_OPTIONS, tt as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, u as line1DrawRule, un as GenericRectangleOptions, ur as EngineerWorkLineOptions, ut as DEFAULT_BLOCK_OPTIONS, v as computeDefaultMidpointPerpendicularPoint, vn as ClassicArrowHeadStyle, vr as BoundaryOptions, vt as FortifiedLineOptions, w as BaselineFrameNormal, wn as MainAttackOptions, wr as ControlMeasureMetadata, wt as ScreenOptions, x as pointOnMidpointPerpendicularAxis, xn as DEFAULT_SUPPORTING_ATTACK_OPTIONS, xr as ControlMeasureFillCapability, xt as AntitankDitchOptions, y as createMidpointPerpendicularDrawRule, yn as ClassicArrowOptions, yr as DEFAULT_BOUNDARY_OPTIONS, yt as AntitankWallOptions, z as ControlMeasure, zn as DEFAULT_ENCIRCLEMENT_OPTIONS, zr as resolveAmplifierPlacement, zt as BreachOptions } from "./index-J_5z80SV.mjs";
2
+ 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 BypassOptions, CONTROL_MEASURE_IDS, CONTROL_MEASURE_METADATA, type CanalizeOptions, type CanonicalTextAmplifiers, type ClassicArrowHeadStyle, type ClassicArrowOptions, type ClearOptions, type ControlMeasure, type ControlMeasureDrawRule, type ControlMeasureFillCapability, type ControlMeasureGeometry, type ControlMeasureGeometryType, type ControlMeasureId, type ControlMeasureKind, type ControlMeasureMetadata, type ControlMeasurePaintCapability, type ControlMeasureRender, type ControlMeasureStyle, 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_BYPASS_OPTIONS, DEFAULT_CANALIZE_OPTIONS, DEFAULT_CLASSIC_ARROW_OPTIONS, DEFAULT_CLEAR_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_DISRUPT_OPTIONS, DEFAULT_ENCIRCLEMENT_OPTIONS, DEFAULT_ENGINEER_WORK_LINE_OPTIONS, DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, DEFAULT_FIX_OPTIONS, DEFAULT_FLOT_OPTIONS, DEFAULT_FORTIFIED_AREA_OPTIONS, DEFAULT_FORTIFIED_LINE_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_TEXT_OPTIONS, DEFAULT_GUARD_OPTIONS, DEFAULT_HANDOVER_LINE_OPTIONS, DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, DEFAULT_LANDING_ZONE_OPTIONS, DEFAULT_LIGHT_LINE_OPTIONS, DEFAULT_MAIN_ATTACK_OPTIONS, DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, DEFAULT_PHASE_LINE_OPTIONS, DEFAULT_PICKUP_ZONE_OPTIONS, DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, DEFAULT_SCREEN_OPTIONS, DEFAULT_STRONG_POINT_OPTIONS, DEFAULT_SUPPORTING_ATTACK_OPTIONS, DEFAULT_SUPPORT_BY_FIRE_OPTIONS, DEFAULT_TACTICAL_ARROW_OPTIONS, DEFAULT_TURNING_MOVEMENT_OPTIONS, DEFAULT_TURN_OPTIONS, type DelayOptions, type DirectionOfAttackAviationOptions, type DirectionOfMainAttackOptions, type DirectionOfSupportingAttackOptions, type DisruptOptions, EPSILON, type EncirclementOptions, type EngineerWorkLineOptions, type FLOTOptions, type FeaturePartProps, type FillPattern, type FinalProtectiveFireOptions, type FixOptions, type FortifiedAreaOptions, type FortifiedLineOptions, type FrontalAttackOptions, type GeneratedLabelKey, type GenericC2LineOptions, type GenericCircleOptions, type GenericLineOptions, type GenericPolygonOptions, type GenericRectangleOptions, type GenericTextOptions, type GuardOptions, type HandoverLineOptions, type JointTacticalActionAreaOptions, type LabelPlacementOverride, type LabelSizeOptions, type LandingZoneOptions, type LightLineOptions, type MainAttackOptions, type MidpointPerpendicularDrawRuleOptions, type ObstacleBypassDifficultOptions, type ObstacleBypassEasyOptions, type ObstacleBypassImpossibleOptions, type OptionsByKind, type ParamDescriptor, type PhaseLineOptions, type PickupZoneOptions, type Point2D, type PrincipalDirectionOfFireOptions, type RenderOptions, type ScreenOptions, 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, ambushDrawRule, applyBoxTransformOptions, attackByFireDrawRule, axis1DrawRule, blockDrawRule, calculateMetrics, canonicalTextAmplifierKey, centerRadiusDrawRule, cloneControlMeasure, computeDefaultMidpointPerpendicularPoint, computeInitialWidthPoint, controlMeasureIdFromFeature, createBaselineFrame, createMidpointPerpendicularDrawRule, disruptDrawRule, freezeOrientationOptions, getControlMeasureMetadata, getControlMeasureMetadataByValue, getDefaultOptions, getMetersPerPixel, getMidpointPerpendicularSignedDistance, haversineDistance, isKind, line1DrawRule, line23DrawRule, line24DrawRule, line26DrawRule, listControlMeasureMetadata, normalizeTextAmplifiers, point12DrawRule, pointOnMidpointPerpendicularAxis, project, rectangleDrawRule, renderControlMeasure, resolveAmplifierPlacement, resolveStyleHints, roundToFixed, snapToMidpointPerpendicular, supportByFireDrawRule, toSimpleStyle, turnDrawRule, unproject };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as DEFAULT_BOUNDARY_OPTIONS, A as DEFAULT_FLOT_OPTIONS, At as centerRadiusDrawRule, B as DEFAULT_GENERIC_TEXT_OPTIONS, Bt as computeInitialWidthPoint, C as DEFAULT_SCREEN_OPTIONS, Ct as line24DrawRule, D as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Dt as ambushDrawRule, E as DEFAULT_FORTIFIED_LINE_OPTIONS, Et as line1DrawRule, F as DEFAULT_GUARD_OPTIONS, Ft as getMidpointPerpendicularSignedDistance, G as DEFAULT_CLASSIC_ARROW_OPTIONS, Gt as getMetersPerPixel, H as DEFAULT_GENERIC_POLYGON_OPTIONS, Ht as project, I as DEFAULT_DELAY_OPTIONS, It as pointOnMidpointPerpendicularAxis, J as DEFAULT_BREACH_OPTIONS, K as DEFAULT_CANALIZE_OPTIONS, Kt as roundToFixed, L as DEFAULT_COVER_OPTIONS, Lt as snapToMidpointPerpendicular, M as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Mt as blockDrawRule, N as DEFAULT_ENCIRCLEMENT_OPTIONS, Nt as computeDefaultMidpointPerpendicularPoint, O as DEFAULT_HANDOVER_LINE_OPTIONS, Ot as attackByFireDrawRule, P as DEFAULT_DISRUPT_OPTIONS, Pt as createMidpointPerpendicularDrawRule, Q as DEFAULT_LIGHT_LINE_OPTIONS, R as DEFAULT_TACTICAL_ARROW_OPTIONS, Rt as createBaselineFrame, S as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, St as line26DrawRule, T as DEFAULT_FORTIFIED_AREA_OPTIONS, Tt as turnDrawRule, U as DEFAULT_GENERIC_LINE_OPTIONS, Ut as unproject, V as DEFAULT_GENERIC_RECTANGLE_OPTIONS, Vt as haversineDistance, W as DEFAULT_GENERIC_CIRCLE_OPTIONS, Wt as EPSILON, X as DEFAULT_GENERIC_C2_LINE_OPTIONS, Y as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Z as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, _ as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, _t as DEFAULT_AMBUSH_OPTIONS, a as DEFINITIONS, at as DEFAULT_ANTITANK_WALL_OPTIONS, b as DEFAULT_MAIN_ATTACK_OPTIONS, bt as axis1DrawRule, c as getDefaultOptions, ct as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, d as DEFAULT_TURN_OPTIONS, dt as canonicalTextAmplifierKey, et as DEFAULT_BLOCK_ARROW_OPTIONS, f as DEFAULT_SUPPORTING_ATTACK_OPTIONS, ft as normalizeTextAmplifiers, g as DEFAULT_PICKUP_ZONE_OPTIONS, gt as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, h as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, ht as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, i as CONTROL_MEASURE_METADATA, it as DEFAULT_ATTACK_BY_FIRE_OPTIONS, j as DEFAULT_FIX_OPTIONS, jt as disruptDrawRule, k as DEFAULT_PHASE_LINE_OPTIONS, kt as point12DrawRule, l as listControlMeasureMetadata, lt as DEFAULT_AREA_DEFENSE_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mt as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, n as resolveStyleHints, nt as DEFAULT_BATTLE_POSITION_OPTIONS, o as getControlMeasureMetadata, ot as DEFAULT_ANTITANK_DITCH_OPTIONS, p as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, pt as resolveAmplifierPlacement, q as DEFAULT_BYPASS_OPTIONS, r as CONTROL_MEASURE_IDS, rt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, s as getControlMeasureMetadataByValue, st as DEFAULT_ASSEMBLY_AREA_OPTIONS, t as renderControlMeasure, tt as DEFAULT_BLOCK_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, ut as TEXT_AMPLIFIER_FIELDS, v as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, vt as DEFAULT_AIRBORNE_ATTACK_OPTIONS, w as DEFAULT_FRONTAL_ATTACK_OPTIONS, wt as line23DrawRule, x as DEFAULT_LANDING_ZONE_OPTIONS, xt as supportByFireDrawRule, y as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, yt as rectangleDrawRule, z as DEFAULT_CLEAR_OPTIONS, zt as calculateMetrics } from "./renderControlMeasure-f_N1HeUd.mjs";
1
+ import { $ as DEFAULT_BOUNDARY_OPTIONS, A as DEFAULT_FLOT_OPTIONS, At as centerRadiusDrawRule, B as DEFAULT_GENERIC_TEXT_OPTIONS, Bt as computeInitialWidthPoint, C as DEFAULT_SCREEN_OPTIONS, Ct as line24DrawRule, D as DEFAULT_BATTLE_HANDOVER_LINE_OPTIONS, Dt as ambushDrawRule, E as DEFAULT_FORTIFIED_LINE_OPTIONS, Et as line1DrawRule, F as DEFAULT_GUARD_OPTIONS, Ft as getMidpointPerpendicularSignedDistance, G as DEFAULT_CLASSIC_ARROW_OPTIONS, Gt as getMetersPerPixel, H as DEFAULT_GENERIC_POLYGON_OPTIONS, Ht as project, I as DEFAULT_DELAY_OPTIONS, It as pointOnMidpointPerpendicularAxis, J as DEFAULT_BREACH_OPTIONS, K as DEFAULT_CANALIZE_OPTIONS, Kt as roundToFixed, L as DEFAULT_COVER_OPTIONS, Lt as snapToMidpointPerpendicular, M as DEFAULT_FINAL_PROTECTIVE_FIRE_OPTIONS, Mt as blockDrawRule, N as DEFAULT_ENCIRCLEMENT_OPTIONS, Nt as computeDefaultMidpointPerpendicularPoint, O as DEFAULT_HANDOVER_LINE_OPTIONS, Ot as attackByFireDrawRule, P as DEFAULT_DISRUPT_OPTIONS, Pt as createMidpointPerpendicularDrawRule, Q as DEFAULT_LIGHT_LINE_OPTIONS, R as DEFAULT_TACTICAL_ARROW_OPTIONS, Rt as createBaselineFrame, S as DEFAULT_JOINT_TACTICAL_ACTION_AREA_OPTIONS, St as line26DrawRule, T as DEFAULT_FORTIFIED_AREA_OPTIONS, Tt as turnDrawRule, U as DEFAULT_GENERIC_LINE_OPTIONS, Ut as unproject, V as DEFAULT_GENERIC_RECTANGLE_OPTIONS, Vt as haversineDistance, W as DEFAULT_GENERIC_CIRCLE_OPTIONS, Wt as EPSILON, X as DEFAULT_GENERIC_C2_LINE_OPTIONS, Y as DEFAULT_BLOCK_MISSION_TASK_OPTIONS, Z as DEFAULT_ENGINEER_WORK_LINE_OPTIONS, _ as DEFAULT_OBSTACLE_BYPASS_IMPOSSIBLE_OPTIONS, _t as DEFAULT_AMBUSH_OPTIONS, a as DEFINITIONS, at as DEFAULT_ANTITANK_WALL_OPTIONS, b as DEFAULT_MAIN_ATTACK_OPTIONS, bt as axis1DrawRule, c as getDefaultOptions, ct as DEFAULT_AREA_OF_OPERATIONS_OPTIONS, d as DEFAULT_TURN_OPTIONS, dt as canonicalTextAmplifierKey, et as DEFAULT_BLOCK_ARROW_OPTIONS, f as DEFAULT_SUPPORTING_ATTACK_OPTIONS, ft as normalizeTextAmplifiers, g as DEFAULT_PICKUP_ZONE_OPTIONS, gt as DEFAULT_DIRECTION_OF_ATTACK_AVIATION_OPTIONS, h as DEFAULT_PRINCIPAL_DIRECTION_OF_FIRE_OPTIONS, ht as DEFAULT_DIRECTION_OF_MAIN_ATTACK_OPTIONS, i as CONTROL_MEASURE_METADATA, it as DEFAULT_ATTACK_BY_FIRE_OPTIONS, j as DEFAULT_FIX_OPTIONS, jt as disruptDrawRule, k as DEFAULT_PHASE_LINE_OPTIONS, kt as point12DrawRule, l as listControlMeasureMetadata, lt as DEFAULT_AREA_DEFENSE_OPTIONS, m as DEFAULT_STRONG_POINT_OPTIONS, mt as DEFAULT_DIRECTION_OF_SUPPORTING_ATTACK_OPTIONS, n as resolveStyleHints, nt as DEFAULT_BATTLE_POSITION_OPTIONS, o as getControlMeasureMetadata, ot as DEFAULT_ANTITANK_DITCH_OPTIONS, p as DEFAULT_SUPPORT_BY_FIRE_OPTIONS, pt as resolveAmplifierPlacement, q as DEFAULT_BYPASS_OPTIONS, r as CONTROL_MEASURE_IDS, rt as DEFAULT_ATTACK_HELICOPTER_OPTIONS, s as getControlMeasureMetadataByValue, st as DEFAULT_ASSEMBLY_AREA_OPTIONS, t as renderControlMeasure, tt as DEFAULT_BLOCK_OPTIONS, u as DEFAULT_TURNING_MOVEMENT_OPTIONS, ut as TEXT_AMPLIFIER_FIELDS, v as DEFAULT_OBSTACLE_BYPASS_EASY_OPTIONS, vt as DEFAULT_AIRBORNE_ATTACK_OPTIONS, w as DEFAULT_FRONTAL_ATTACK_OPTIONS, wt as line23DrawRule, x as DEFAULT_LANDING_ZONE_OPTIONS, xt as supportByFireDrawRule, y as DEFAULT_OBSTACLE_BYPASS_DIFFICULT_OPTIONS, yt as rectangleDrawRule, z as DEFAULT_CLEAR_OPTIONS, zt as calculateMetrics } from "./renderControlMeasure-CzvFNqY4.mjs";
2
2
  //#region src/freeze-orientation.ts
3
3
  /**
4
4
  * Dispatches to a measure kind's `freezeOrientation` hook (see
@@ -1,4 +1,4 @@
1
- import { Pr as TextAmplifiers, W as ControlMeasureId, or as FillPattern } from "../index-BxApuW__.mjs";
1
+ import { Ir as TextAmplifiers, W as ControlMeasureId, or as FillPattern } from "../index-J_5z80SV.mjs";
2
2
  import { FeatureCollection, Geometry } from "geojson";
3
3
 
4
4
  //#region src/preview/index.d.ts
@@ -16,8 +16,11 @@ declare const PREVIEW_PATTERN_TILE = 8;
16
16
  */
17
17
  declare const PREVIEW_FILL_PATTERNS: readonly {
18
18
  readonly id: PreviewFillPattern;
19
- readonly paths: readonly string[];
19
+ readonly paths: readonly string[]; /** Filled dot centers (tile units); the `"dots"` family has no stroked path. */
20
+ readonly dots?: readonly (readonly [number, number])[];
20
21
  }[];
22
+ /** Radius (SVG units) of a {@link PREVIEW_FILL_PATTERNS} dot. */
23
+ declare const PREVIEW_PATTERN_DOT_RADIUS = 1.25;
21
24
  /**
22
25
  * Renders a measure's representative preview to GeoJSON. Pure — no map engine,
23
26
  * so it runs identically at build time (docs catalog, README generator) and in
@@ -146,4 +149,4 @@ declare function viewBoxString(shapes: PreviewShape[], dims: {
146
149
  */
147
150
  declare function svgTextTransform(s: PreviewShape): string | undefined;
148
151
  //#endregion
149
- export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_TILE, PreviewFillPattern, PreviewShape, ProjectDimensions, previewLabelBackgroundWidth, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
152
+ export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, PreviewFillPattern, PreviewShape, ProjectDimensions, previewLabelBackgroundWidth, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
@@ -1,4 +1,4 @@
1
- import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-f_N1HeUd.mjs";
1
+ import { a as DEFINITIONS, t as renderControlMeasure } from "../renderControlMeasure-CzvFNqY4.mjs";
2
2
  //#region src/preview/index.ts
3
3
  /** Side length (SVG units) of the repeating hatch tile in {@link PREVIEW_FILL_PATTERNS}. */
4
4
  const PREVIEW_PATTERN_TILE = 8;
@@ -11,18 +11,33 @@ const PREVIEW_PATTERN_TILE = 8;
11
11
  */
12
12
  const PREVIEW_FILL_PATTERNS = [
13
13
  {
14
- id: "hachure",
14
+ id: "hatch",
15
15
  paths: ["M-1,-1 L9,9 M7,-1 L9,1 M-1,7 L1,9"]
16
16
  },
17
17
  {
18
- id: "backhachure",
18
+ id: "reverse-hatch",
19
19
  paths: ["M9,-1 L-1,9 M1,-1 L-1,1 M9,7 L7,9"]
20
20
  },
21
21
  {
22
- id: "cross",
22
+ id: "cross-hatch",
23
23
  paths: ["M-1,-1 L9,9 M7,-1 L9,1 M-1,7 L1,9", "M9,-1 L-1,9 M1,-1 L-1,1 M9,7 L7,9"]
24
+ },
25
+ {
26
+ id: "horizontal",
27
+ paths: ["M-1,4 L9,4"]
28
+ },
29
+ {
30
+ id: "vertical",
31
+ paths: ["M4,-1 L4,9"]
32
+ },
33
+ {
34
+ id: "dots",
35
+ paths: [],
36
+ dots: [[4, 4]]
24
37
  }
25
38
  ];
39
+ /** Radius (SVG units) of a {@link PREVIEW_FILL_PATTERNS} dot. */
40
+ const PREVIEW_PATTERN_DOT_RADIUS = 1.25;
26
41
  /**
27
42
  * Unitless `previewSample` points (~`[-1, 1]`) are scaled by this degree offset
28
43
  * before reaching a generator. Most generators operate in projected meters, so
@@ -407,4 +422,4 @@ function collectShapes(g, tx, out, bboxArea, textLimits, props) {
407
422
  }
408
423
  }
409
424
  //#endregion
410
- export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_TILE, previewLabelBackgroundWidth, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
425
+ export { PREVIEW_FILL_PATTERNS, PREVIEW_PATTERN_DOT_RADIUS, PREVIEW_PATTERN_TILE, previewLabelBackgroundWidth, projectRenderToShapes, renderRepresentative, svgTextTransform, viewBoxString, viewBoxWithLabels };
@@ -1540,6 +1540,11 @@ const AIRBORNE_ATTACK_METADATA = {
1540
1540
  minCoordinates: 3,
1541
1541
  geometry: "line",
1542
1542
  geometryTypes: ["LineString"],
1543
+ paints: {
1544
+ stroke: true,
1545
+ fill: "none",
1546
+ text: false
1547
+ },
1543
1548
  drawRule: "Axis1",
1544
1549
  params: ATTACK_SHAFT_PARAMS
1545
1550
  };
@@ -1635,6 +1640,11 @@ const AMBUSH_METADATA = {
1635
1640
  maxCoordinates: 3,
1636
1641
  geometry: "line",
1637
1642
  geometryTypes: ["MultiLineString"],
1643
+ paints: {
1644
+ stroke: true,
1645
+ fill: "none",
1646
+ text: false
1647
+ },
1638
1648
  drawRule: "Line29",
1639
1649
  params: [
1640
1650
  {
@@ -2591,6 +2601,11 @@ const DIRECTION_OF_ATTACK_AVIATION_METADATA = {
2591
2601
  minCoordinates: 2,
2592
2602
  geometry: "line",
2593
2603
  geometryTypes: ["MultiLineString", "Point"],
2604
+ paints: {
2605
+ stroke: true,
2606
+ fill: "none",
2607
+ text: true
2608
+ },
2594
2609
  drawRule: "Line1",
2595
2610
  capturesLabelSize: true,
2596
2611
  params: [
@@ -2817,6 +2832,11 @@ const DIRECTION_OF_MAIN_ATTACK_METADATA = {
2817
2832
  minCoordinates: 2,
2818
2833
  geometry: "line",
2819
2834
  geometryTypes: ["MultiLineString", "Point"],
2835
+ paints: {
2836
+ stroke: true,
2837
+ fill: "none",
2838
+ text: true
2839
+ },
2820
2840
  drawRule: "Line1",
2821
2841
  capturesLabelSize: true,
2822
2842
  params: [
@@ -2879,6 +2899,11 @@ const DIRECTION_OF_SUPPORTING_ATTACK_METADATA = {
2879
2899
  minCoordinates: 2,
2880
2900
  geometry: "line",
2881
2901
  geometryTypes: ["MultiLineString", "Point"],
2902
+ paints: {
2903
+ stroke: true,
2904
+ fill: "none",
2905
+ text: true
2906
+ },
2882
2907
  drawRule: "Line1",
2883
2908
  capturesLabelSize: true,
2884
2909
  params: [...SMOOTH_LINE_PARAMS, ...DIRECTION_OF_ATTACK_PARAMS],
@@ -3536,6 +3561,11 @@ const AREA_METADATA = {
3536
3561
  "MultiLineString",
3537
3562
  "Point"
3538
3563
  ],
3564
+ paints: {
3565
+ stroke: true,
3566
+ fill: "none",
3567
+ text: true
3568
+ },
3539
3569
  drawRule: "Area1",
3540
3570
  capturesLabelSize: true,
3541
3571
  params: LABELED_AREA_PARAMS,
@@ -3570,7 +3600,7 @@ const AREA = defineControlMeasure({
3570
3600
  /**
3571
3601
  * Per-feature style hint pinning a filled part to a solid interior. Attach to
3572
3602
  * a generator's intrinsic doctrinal accents — arrowheads, teeth, echelon
3573
- * glyphs, barbs, blades — so a `hachure`/`backhachure`/`cross` fill set at the graphicsStyle
3603
+ * glyphs, barbs, blades — so a patterned (`hatch`, `dots`, …) fill set at the graphicsStyle
3574
3604
  * or measure layer never bleeds into a small silhouette and ruins its
3575
3605
  * legibility. The renderer only reads style hints, so one shared instance is
3576
3606
  * safe to reuse across every accent feature.
@@ -3606,6 +3636,11 @@ const AREA_DEFENSE_METADATA = {
3606
3636
  "MultiPolygon",
3607
3637
  "Point"
3608
3638
  ],
3639
+ paints: {
3640
+ stroke: true,
3641
+ fill: "fixed",
3642
+ text: true
3643
+ },
3609
3644
  drawRule: "Area15",
3610
3645
  capturesLabelSize: true,
3611
3646
  params: [
@@ -3801,6 +3836,11 @@ const AREA_OF_OPERATIONS_METADATA = {
3801
3836
  "MultiLineString",
3802
3837
  "Point"
3803
3838
  ],
3839
+ paints: {
3840
+ stroke: true,
3841
+ fill: "none",
3842
+ text: true
3843
+ },
3804
3844
  drawRule: "Area1",
3805
3845
  capturesLabelSize: true,
3806
3846
  params: LABELED_AREA_PARAMS,
@@ -3855,6 +3895,11 @@ const NAMED_AREA_OF_INTEREST_METADATA = {
3855
3895
  "MultiLineString",
3856
3896
  "Point"
3857
3897
  ],
3898
+ paints: {
3899
+ stroke: true,
3900
+ fill: "none",
3901
+ text: true
3902
+ },
3858
3903
  drawRule: "Area1",
3859
3904
  capturesLabelSize: true,
3860
3905
  params: LABELED_AREA_PARAMS,
@@ -3909,6 +3954,11 @@ const TARGET_AREA_OF_INTEREST_METADATA = {
3909
3954
  "MultiLineString",
3910
3955
  "Point"
3911
3956
  ],
3957
+ paints: {
3958
+ stroke: true,
3959
+ fill: "none",
3960
+ text: true
3961
+ },
3912
3962
  drawRule: "Area1",
3913
3963
  capturesLabelSize: true,
3914
3964
  params: LABELED_AREA_PARAMS,
@@ -3972,6 +4022,11 @@ const AIRFIELD_ZONE_METADATA = {
3972
4022
  "MultiLineString",
3973
4023
  "Point"
3974
4024
  ],
4025
+ paints: {
4026
+ stroke: true,
4027
+ fill: "none",
4028
+ text: true
4029
+ },
3975
4030
  drawRule: "Area1",
3976
4031
  capturesLabelSize: true,
3977
4032
  params: [
@@ -4151,6 +4206,11 @@ const BASE_CAMP_METADATA = {
4151
4206
  "MultiPolygon",
4152
4207
  "Point"
4153
4208
  ],
4209
+ paints: {
4210
+ stroke: true,
4211
+ fill: "fixed",
4212
+ text: true
4213
+ },
4154
4214
  drawRule: "Area1",
4155
4215
  capturesLabelSize: true,
4156
4216
  params: ECHELON_AREA_PARAMS,
@@ -4204,6 +4264,11 @@ const GUERRILLA_BASE_METADATA = {
4204
4264
  "MultiPolygon",
4205
4265
  "Point"
4206
4266
  ],
4267
+ paints: {
4268
+ stroke: true,
4269
+ fill: "fixed",
4270
+ text: true
4271
+ },
4207
4272
  drawRule: "Area1",
4208
4273
  capturesLabelSize: true,
4209
4274
  params: ECHELON_AREA_PARAMS,
@@ -4262,6 +4327,11 @@ const GENERIC_C2_AREA_METADATA = {
4262
4327
  "MultiLineString",
4263
4328
  "Point"
4264
4329
  ],
4330
+ paints: {
4331
+ stroke: true,
4332
+ fill: "none",
4333
+ text: true
4334
+ },
4265
4335
  drawRule: "Area1",
4266
4336
  capturesLabelSize: true,
4267
4337
  params: LABELED_AREA_PARAMS,
@@ -4312,6 +4382,11 @@ const ASSEMBLY_AREA_METADATA = {
4312
4382
  "MultiLineString",
4313
4383
  "Point"
4314
4384
  ],
4385
+ paints: {
4386
+ stroke: true,
4387
+ fill: "none",
4388
+ text: true
4389
+ },
4315
4390
  drawRule: "Area1",
4316
4391
  capturesLabelSize: true,
4317
4392
  params: LABELED_AREA_PARAMS,
@@ -4434,6 +4509,11 @@ const ANTITANK_DITCH_UNDER_CONSTRUCTION_METADATA = {
4434
4509
  minCoordinates: 2,
4435
4510
  geometry: "line",
4436
4511
  geometryTypes: ["MultiLineString", "Point"],
4512
+ paints: {
4513
+ stroke: true,
4514
+ fill: "none",
4515
+ text: true
4516
+ },
4437
4517
  drawRule: "Line1",
4438
4518
  capturesLabelSize: true,
4439
4519
  params: ANTITANK_DITCH_PARAMS,
@@ -4450,6 +4530,11 @@ const ANTITANK_DITCH_COMPLETED_METADATA = {
4450
4530
  minCoordinates: 2,
4451
4531
  geometry: "line",
4452
4532
  geometryTypes: ["MultiPolygon", "Point"],
4533
+ paints: {
4534
+ stroke: true,
4535
+ fill: "fixed",
4536
+ text: true
4537
+ },
4453
4538
  drawRule: "Line1",
4454
4539
  capturesLabelSize: true,
4455
4540
  params: ANTITANK_DITCH_PARAMS,
@@ -4576,6 +4661,11 @@ const ANTITANK_WALL_METADATA = {
4576
4661
  minCoordinates: 2,
4577
4662
  geometry: "line",
4578
4663
  geometryTypes: ["MultiLineString", "Point"],
4664
+ paints: {
4665
+ stroke: true,
4666
+ fill: "none",
4667
+ text: true
4668
+ },
4579
4669
  drawRule: "Line1",
4580
4670
  capturesLabelSize: true,
4581
4671
  params: ANTITANK_WALL_PARAMS,
@@ -4657,6 +4747,11 @@ const ATTACK_BY_FIRE_METADATA = {
4657
4747
  minCoordinates: 3,
4658
4748
  geometry: "line",
4659
4749
  geometryTypes: ["LineString"],
4750
+ paints: {
4751
+ stroke: true,
4752
+ fill: "none",
4753
+ text: false
4754
+ },
4660
4755
  drawRule: "Area7",
4661
4756
  params: FIRE_ARROW_PARAMS
4662
4757
  };
@@ -4802,6 +4897,11 @@ const ATTACK_HELICOPTER_METADATA = {
4802
4897
  minCoordinates: 3,
4803
4898
  geometry: "line",
4804
4899
  geometryTypes: ["LineString", "Polygon"],
4900
+ paints: {
4901
+ stroke: true,
4902
+ fill: "none",
4903
+ text: false
4904
+ },
4805
4905
  drawRule: "Axis1",
4806
4906
  params: [
4807
4907
  ...ATTACK_SHAFT_PARAMS,
@@ -5022,6 +5122,11 @@ const BATTLE_POSITION_METADATA = {
5022
5122
  "MultiPolygon",
5023
5123
  "Point"
5024
5124
  ],
5125
+ paints: {
5126
+ stroke: true,
5127
+ fill: "fixed",
5128
+ text: true
5129
+ },
5025
5130
  drawRule: "Area1",
5026
5131
  capturesLabelSize: true,
5027
5132
  params: ECHELON_AREA_PARAMS,
@@ -5137,6 +5242,11 @@ const BLOCK_METADATA = {
5137
5242
  minCoordinates: 2,
5138
5243
  geometry: "line",
5139
5244
  geometryTypes: ["LineString"],
5245
+ paints: {
5246
+ stroke: true,
5247
+ fill: "none",
5248
+ text: false
5249
+ },
5140
5250
  drawRule: "Area11"
5141
5251
  };
5142
5252
  const DEFAULT_BLOCK_OPTIONS = {};
@@ -5214,6 +5324,11 @@ const BLOCK_ARROW_METADATA = {
5214
5324
  minCoordinates: 3,
5215
5325
  geometry: "line",
5216
5326
  geometryTypes: ["Polygon"],
5327
+ paints: {
5328
+ stroke: true,
5329
+ fill: "user",
5330
+ text: false
5331
+ },
5217
5332
  drawRule: "Axis1",
5218
5333
  params: [
5219
5334
  {
@@ -5475,6 +5590,11 @@ const BOUNDARY_METADATA = {
5475
5590
  "MultiPolygon",
5476
5591
  "Point"
5477
5592
  ],
5593
+ paints: {
5594
+ stroke: true,
5595
+ fill: "fixed",
5596
+ text: true
5597
+ },
5478
5598
  drawRule: "Line1",
5479
5599
  params: [
5480
5600
  {
@@ -5775,6 +5895,11 @@ const LIGHT_LINE_METADATA = {
5775
5895
  minCoordinates: 2,
5776
5896
  geometry: "line",
5777
5897
  geometryTypes: ["LineString", "Point"],
5898
+ paints: {
5899
+ stroke: true,
5900
+ fill: "none",
5901
+ text: true
5902
+ },
5778
5903
  drawRule: "Line1",
5779
5904
  capturesLabelSize: true,
5780
5905
  params: [
@@ -5846,6 +5971,11 @@ const ENGINEER_WORK_LINE_METADATA = {
5846
5971
  minCoordinates: 2,
5847
5972
  geometry: "line",
5848
5973
  geometryTypes: ["LineString", "Point"],
5974
+ paints: {
5975
+ stroke: true,
5976
+ fill: "none",
5977
+ text: true
5978
+ },
5849
5979
  drawRule: "Line1",
5850
5980
  capturesLabelSize: true,
5851
5981
  params: [
@@ -5981,6 +6111,11 @@ const GENERIC_C2_LINE_METADATA = {
5981
6111
  minCoordinates: 2,
5982
6112
  geometry: "line",
5983
6113
  geometryTypes: ["LineString", "Point"],
6114
+ paints: {
6115
+ stroke: true,
6116
+ fill: "none",
6117
+ text: true
6118
+ },
5984
6119
  drawRule: "Line1",
5985
6120
  capturesLabelSize: true,
5986
6121
  params: [
@@ -6243,6 +6378,11 @@ const BLOCK_MISSION_TASK_METADATA = {
6243
6378
  minCoordinates: 2,
6244
6379
  geometry: "line",
6245
6380
  geometryTypes: ["MultiLineString", "Point"],
6381
+ paints: {
6382
+ stroke: true,
6383
+ fill: "none",
6384
+ text: true
6385
+ },
6246
6386
  drawRule: "Area11",
6247
6387
  capturesLabelSize: true,
6248
6388
  params: [{
@@ -6336,6 +6476,11 @@ const BREACH_METADATA = {
6336
6476
  maxCoordinates: 3,
6337
6477
  geometry: "line",
6338
6478
  geometryTypes: ["MultiLineString", "Point"],
6479
+ paints: {
6480
+ stroke: true,
6481
+ fill: "none",
6482
+ text: true
6483
+ },
6339
6484
  drawRule: "Point12",
6340
6485
  capturesLabelSize: true,
6341
6486
  params: [
@@ -6432,6 +6577,11 @@ const BYPASS_METADATA = {
6432
6577
  maxCoordinates: 3,
6433
6578
  geometry: "line",
6434
6579
  geometryTypes: ["MultiLineString", "Point"],
6580
+ paints: {
6581
+ stroke: true,
6582
+ fill: "none",
6583
+ text: true
6584
+ },
6435
6585
  drawRule: "Point12",
6436
6586
  capturesLabelSize: true,
6437
6587
  params: [{
@@ -6507,6 +6657,11 @@ const CANALIZE_METADATA = {
6507
6657
  maxCoordinates: 3,
6508
6658
  geometry: "line",
6509
6659
  geometryTypes: ["MultiLineString", "Point"],
6660
+ paints: {
6661
+ stroke: true,
6662
+ fill: "none",
6663
+ text: true
6664
+ },
6510
6665
  drawRule: "Point12",
6511
6666
  capturesLabelSize: true,
6512
6667
  params: [
@@ -6605,6 +6760,11 @@ const CLASSIC_ARROW_METADATA = {
6605
6760
  minCoordinates: 2,
6606
6761
  geometry: "line",
6607
6762
  geometryTypes: ["LineString", "Polygon"],
6763
+ paints: {
6764
+ stroke: true,
6765
+ fill: "fixed",
6766
+ text: false
6767
+ },
6608
6768
  drawRule: "Line1",
6609
6769
  params: [
6610
6770
  {
@@ -6945,6 +7105,11 @@ const GENERIC_CIRCLE_METADATA = {
6945
7105
  maxCoordinates: 2,
6946
7106
  geometry: "area",
6947
7107
  geometryTypes: ["Polygon"],
7108
+ paints: {
7109
+ stroke: true,
7110
+ fill: "user",
7111
+ text: false
7112
+ },
6948
7113
  drawRule: "Area15",
6949
7114
  params: FILLED_AREA_PARAMS
6950
7115
  };
@@ -7024,6 +7189,11 @@ const GENERIC_LINE_METADATA = {
7024
7189
  minCoordinates: 2,
7025
7190
  geometry: "line",
7026
7191
  geometryTypes: ["LineString"],
7192
+ paints: {
7193
+ stroke: true,
7194
+ fill: "none",
7195
+ text: false
7196
+ },
7027
7197
  drawRule: "Line1",
7028
7198
  params: SMOOTH_PATH_PARAMS
7029
7199
  };
@@ -7082,6 +7252,11 @@ const GENERIC_POLYGON_METADATA = {
7082
7252
  minCoordinates: 3,
7083
7253
  geometry: "area",
7084
7254
  geometryTypes: ["Polygon"],
7255
+ paints: {
7256
+ stroke: true,
7257
+ fill: "user",
7258
+ text: false
7259
+ },
7085
7260
  drawRule: "Area1",
7086
7261
  params: [...SMOOTH_PATH_PARAMS, ...FILLED_AREA_PARAMS]
7087
7262
  };
@@ -7140,6 +7315,11 @@ const GENERIC_RECTANGLE_METADATA = {
7140
7315
  maxCoordinates: 3,
7141
7316
  geometry: "area",
7142
7317
  geometryTypes: ["Polygon"],
7318
+ paints: {
7319
+ stroke: true,
7320
+ fill: "user",
7321
+ text: false
7322
+ },
7143
7323
  drawRule: "Rectangle",
7144
7324
  params: FILLED_AREA_PARAMS
7145
7325
  };
@@ -7206,8 +7386,7 @@ const DEFAULT_GENERIC_TEXT_OPTIONS = {
7206
7386
  textStyle: "regular",
7207
7387
  rotation: 0,
7208
7388
  sizePixels: 24,
7209
- maxSizePixels: 200,
7210
- halo: false
7389
+ maxSizePixels: 200
7211
7390
  };
7212
7391
  const GENERIC_TEXT_METADATA = {
7213
7392
  id: "text",
@@ -7221,6 +7400,11 @@ const GENERIC_TEXT_METADATA = {
7221
7400
  maxCoordinates: 1,
7222
7401
  geometry: "point",
7223
7402
  geometryTypes: ["Point"],
7403
+ paints: {
7404
+ stroke: false,
7405
+ fill: "none",
7406
+ text: true
7407
+ },
7224
7408
  drawRule: "Point1",
7225
7409
  params: [
7226
7410
  {
@@ -7275,12 +7459,6 @@ const GENERIC_TEXT_METADATA = {
7275
7459
  }
7276
7460
  ]
7277
7461
  },
7278
- {
7279
- key: "halo",
7280
- label: "Halo",
7281
- description: "Render a contrasting halo behind the text for legibility on busy backgrounds.",
7282
- type: "boolean"
7283
- },
7284
7462
  {
7285
7463
  key: "rotation",
7286
7464
  label: "Rotation",
@@ -7341,7 +7519,6 @@ function createGenericText(coordinates, options = {}) {
7341
7519
  ...textAnchor !== void 0 ? { textAnchor } : {},
7342
7520
  textStyle: merged.textStyle ?? "regular",
7343
7521
  ...merged.maxSizePixels !== void 0 ? { textMaxSizePixels: merged.maxSizePixels } : {},
7344
- ...merged.halo === true ? { textHalo: true } : {},
7345
7522
  ...sizeProps
7346
7523
  },
7347
7524
  geometry: {
@@ -7396,6 +7573,11 @@ const CLEAR_METADATA = {
7396
7573
  maxCoordinates: 3,
7397
7574
  geometry: "line",
7398
7575
  geometryTypes: ["MultiLineString", "Point"],
7576
+ paints: {
7577
+ stroke: true,
7578
+ fill: "none",
7579
+ text: true
7580
+ },
7399
7581
  drawRule: "Line23",
7400
7582
  capturesLabelSize: true,
7401
7583
  params: [
@@ -7605,6 +7787,11 @@ const SEARCH_AREA_METADATA = {
7605
7787
  maxCoordinates: 3,
7606
7788
  geometry: "area",
7607
7789
  geometryTypes: ["MultiLineString", "MultiPolygon"],
7790
+ paints: {
7791
+ stroke: true,
7792
+ fill: "fixed",
7793
+ text: false
7794
+ },
7608
7795
  drawRule: "Area21",
7609
7796
  params: [
7610
7797
  {
@@ -7896,6 +8083,11 @@ const COVER_METADATA = {
7896
8083
  maxCoordinates: 4,
7897
8084
  geometry: "line",
7898
8085
  geometryTypes: ["MultiLineString", "Point"],
8086
+ paints: {
8087
+ stroke: true,
8088
+ fill: "none",
8089
+ text: true
8090
+ },
7899
8091
  drawRule: "Line26",
7900
8092
  capturesLabelSize: true,
7901
8093
  params: SECURITY_TASK_PARAMS
@@ -7940,6 +8132,11 @@ const DELAY_METADATA = {
7940
8132
  maxCoordinates: 3,
7941
8133
  geometry: "line",
7942
8134
  geometryTypes: ["MultiLineString", "Point"],
8135
+ paints: {
8136
+ stroke: true,
8137
+ fill: "none",
8138
+ text: true
8139
+ },
7943
8140
  drawRule: "Line24",
7944
8141
  capturesLabelSize: true,
7945
8142
  params: [
@@ -8061,6 +8258,11 @@ const GUARD_METADATA = {
8061
8258
  maxCoordinates: 4,
8062
8259
  geometry: "line",
8063
8260
  geometryTypes: ["MultiLineString", "Point"],
8261
+ paints: {
8262
+ stroke: true,
8263
+ fill: "none",
8264
+ text: true
8265
+ },
8064
8266
  drawRule: "Line26",
8065
8267
  capturesLabelSize: true,
8066
8268
  params: SECURITY_TASK_PARAMS
@@ -8127,6 +8329,11 @@ const DISRUPT_METADATA = {
8127
8329
  minCoordinates: 2,
8128
8330
  geometry: "line",
8129
8331
  geometryTypes: ["MultiLineString", "MultiPolygon"],
8332
+ paints: {
8333
+ stroke: true,
8334
+ fill: "fixed",
8335
+ text: false
8336
+ },
8130
8337
  drawRule: "Area12",
8131
8338
  params: [
8132
8339
  {
@@ -8315,6 +8522,11 @@ const DROP_ZONE_METADATA = {
8315
8522
  "MultiLineString",
8316
8523
  "Point"
8317
8524
  ],
8525
+ paints: {
8526
+ stroke: true,
8527
+ fill: "none",
8528
+ text: true
8529
+ },
8318
8530
  drawRule: "Area1",
8319
8531
  capturesLabelSize: true,
8320
8532
  params: LABELED_AREA_PARAMS,
@@ -8374,6 +8586,11 @@ const ENCIRCLEMENT_METADATA = {
8374
8586
  "MultiLineString",
8375
8587
  "Point"
8376
8588
  ],
8589
+ paints: {
8590
+ stroke: true,
8591
+ fill: "none",
8592
+ text: true
8593
+ },
8377
8594
  drawRule: "Area1",
8378
8595
  capturesLabelSize: true,
8379
8596
  params: ENCIRCLEMENT_PARAMS,
@@ -8522,6 +8739,11 @@ const EXTRACTION_ZONE_METADATA = {
8522
8739
  "MultiLineString",
8523
8740
  "Point"
8524
8741
  ],
8742
+ paints: {
8743
+ stroke: true,
8744
+ fill: "none",
8745
+ text: true
8746
+ },
8525
8747
  drawRule: "Area1",
8526
8748
  capturesLabelSize: true,
8527
8749
  params: LABELED_AREA_PARAMS,
@@ -8566,6 +8788,11 @@ const FPF_SHARED = {
8566
8788
  maxCoordinates: 3,
8567
8789
  geometry: "line",
8568
8790
  geometryTypes: ["MultiLineString", "Polygon"],
8791
+ paints: {
8792
+ stroke: true,
8793
+ fill: "fixed",
8794
+ text: false
8795
+ },
8569
8796
  drawRule: "Line3",
8570
8797
  params: [
8571
8798
  {
@@ -8749,6 +8976,11 @@ const FIX_METADATA = {
8749
8976
  maxCoordinates: 2,
8750
8977
  geometry: "line",
8751
8978
  geometryTypes: ["MultiLineString"],
8979
+ paints: {
8980
+ stroke: true,
8981
+ fill: "none",
8982
+ text: false
8983
+ },
8752
8984
  drawRule: "Line9",
8753
8985
  params: [
8754
8986
  {
@@ -8888,6 +9120,11 @@ const FLOT_METADATA = {
8888
9120
  minCoordinates: 2,
8889
9121
  geometry: "line",
8890
9122
  geometryTypes: ["LineString", "Point"],
9123
+ paints: {
9124
+ stroke: true,
9125
+ fill: "none",
9126
+ text: true
9127
+ },
8891
9128
  drawRule: "Line1",
8892
9129
  capturesLabelSize: true,
8893
9130
  params: [
@@ -9076,6 +9313,11 @@ const PHASE_LINE_METADATA = {
9076
9313
  minCoordinates: 2,
9077
9314
  geometry: "line",
9078
9315
  geometryTypes: ["LineString", "Point"],
9316
+ paints: {
9317
+ stroke: true,
9318
+ fill: "none",
9319
+ text: true
9320
+ },
9079
9321
  drawRule: "Line1",
9080
9322
  capturesLabelSize: true,
9081
9323
  params: [
@@ -9146,6 +9388,11 @@ const HANDOVER_LINE_METADATA = {
9146
9388
  minCoordinates: 2,
9147
9389
  geometry: "line",
9148
9390
  geometryTypes: ["LineString", "Point"],
9391
+ paints: {
9392
+ stroke: true,
9393
+ fill: "none",
9394
+ text: true
9395
+ },
9149
9396
  drawRule: "Line1",
9150
9397
  capturesLabelSize: true,
9151
9398
  params: [
@@ -9217,6 +9464,11 @@ const BATTLE_HANDOVER_LINE_METADATA = {
9217
9464
  minCoordinates: 2,
9218
9465
  geometry: "line",
9219
9466
  geometryTypes: ["LineString", "Point"],
9467
+ paints: {
9468
+ stroke: true,
9469
+ fill: "none",
9470
+ text: true
9471
+ },
9220
9472
  drawRule: "Line1",
9221
9473
  capturesLabelSize: true,
9222
9474
  params: [
@@ -9294,6 +9546,11 @@ const FORTIFIED_LINE_METADATA = {
9294
9546
  minCoordinates: 2,
9295
9547
  geometry: "line",
9296
9548
  geometryTypes: ["LineString", "Point"],
9549
+ paints: {
9550
+ stroke: true,
9551
+ fill: "none",
9552
+ text: true
9553
+ },
9297
9554
  drawRule: "Line1",
9298
9555
  capturesLabelSize: true,
9299
9556
  params: FORTIFIED_PARAMS,
@@ -9449,6 +9706,11 @@ const FORTIFIED_AREA_METADATA = {
9449
9706
  "MultiLineString",
9450
9707
  "Point"
9451
9708
  ],
9709
+ paints: {
9710
+ stroke: true,
9711
+ fill: "none",
9712
+ text: true
9713
+ },
9452
9714
  drawRule: "Area1",
9453
9715
  capturesLabelSize: true,
9454
9716
  params: [...FORTIFIED_AREA_PARAMS, AREA_LABEL_PADDING_PARAM],
@@ -9682,6 +9944,11 @@ const FRONTAL_ATTACK_METADATA = {
9682
9944
  minCoordinates: 3,
9683
9945
  geometry: "line",
9684
9946
  geometryTypes: ["MultiLineString", "Point"],
9947
+ paints: {
9948
+ stroke: true,
9949
+ fill: "none",
9950
+ text: true
9951
+ },
9685
9952
  drawRule: "Axis1",
9686
9953
  capturesLabelSize: true,
9687
9954
  params: [...ATTACK_SHAFT_PARAMS, ...MANEUVER_ARROW_TASK_PARAMS],
@@ -9735,6 +10002,11 @@ const ISOLATE_METADATA = {
9735
10002
  maxCoordinates: 2,
9736
10003
  geometry: "line",
9737
10004
  geometryTypes: ["MultiLineString"],
10005
+ paints: {
10006
+ stroke: true,
10007
+ fill: "none",
10008
+ text: false
10009
+ },
9738
10010
  drawRule: "Area15",
9739
10011
  params: [
9740
10012
  {
@@ -9859,6 +10131,11 @@ const SCREEN_METADATA = {
9859
10131
  maxCoordinates: 4,
9860
10132
  geometry: "line",
9861
10133
  geometryTypes: ["MultiLineString", "Point"],
10134
+ paints: {
10135
+ stroke: true,
10136
+ fill: "none",
10137
+ text: true
10138
+ },
9862
10139
  drawRule: "Line26",
9863
10140
  capturesLabelSize: true,
9864
10141
  params: SECURITY_TASK_PARAMS
@@ -9906,6 +10183,11 @@ const JOINT_TACTICAL_ACTION_AREA_METADATA = {
9906
10183
  "MultiLineString",
9907
10184
  "Point"
9908
10185
  ],
10186
+ paints: {
10187
+ stroke: true,
10188
+ fill: "none",
10189
+ text: true
10190
+ },
9909
10191
  drawRule: "Area1",
9910
10192
  capturesLabelSize: true,
9911
10193
  params: LABELED_AREA_PARAMS,
@@ -9961,6 +10243,11 @@ const LANDING_ZONE_METADATA = {
9961
10243
  "MultiLineString",
9962
10244
  "Point"
9963
10245
  ],
10246
+ paints: {
10247
+ stroke: true,
10248
+ fill: "none",
10249
+ text: true
10250
+ },
9964
10251
  drawRule: "Area1",
9965
10252
  capturesLabelSize: true,
9966
10253
  params: LABELED_AREA_PARAMS,
@@ -10000,7 +10287,7 @@ const DEFAULT_LIMITED_ACCESS_AREA_OPTIONS = {
10000
10287
  const LIMITED_ACCESS_AREA_METADATA = {
10001
10288
  id: "limited-access-area",
10002
10289
  name: "Limited Access Area",
10003
- description: "An area with restricted access, identified by a back-hachure fill.",
10290
+ description: "An area with restricted access, identified by a back-hatch fill.",
10004
10291
  entity: "Maneuver Areas",
10005
10292
  entityType: "Limited Access Area",
10006
10293
  value: "151100",
@@ -10011,6 +10298,11 @@ const LIMITED_ACCESS_AREA_METADATA = {
10011
10298
  "MultiLineString",
10012
10299
  "Point"
10013
10300
  ],
10301
+ paints: {
10302
+ stroke: true,
10303
+ fill: "fixed",
10304
+ text: true
10305
+ },
10014
10306
  drawRule: "Area1",
10015
10307
  capturesLabelSize: true,
10016
10308
  params: [...AREA_SMOOTH_PARAMS, AREA_LABEL_PADDING_PARAM],
@@ -10038,7 +10330,7 @@ function createLimitedAccessArea(positions, options = {}, textAmplifiers = {}, c
10038
10330
  }];
10039
10331
  return {
10040
10332
  type: "FeatureCollection",
10041
- features: [...patternedAreaFeatures(verts, pushAreaLabels(labelFeatures, verts, { hostile: textAmplifiers.N }, options, context.amplifierPlacements), "backhachure"), ...labelFeatures]
10333
+ features: [...patternedAreaFeatures(verts, pushAreaLabels(labelFeatures, verts, { hostile: textAmplifiers.N }, options, context.amplifierPlacements), "reverse-hatch"), ...labelFeatures]
10042
10334
  };
10043
10335
  }
10044
10336
  const LIMITED_ACCESS_AREA = defineControlMeasure({
@@ -10101,6 +10393,11 @@ const NO_FIRE_AREA_IRREGULAR_METADATA = {
10101
10393
  "MultiLineString",
10102
10394
  "Point"
10103
10395
  ],
10396
+ paints: {
10397
+ stroke: true,
10398
+ fill: "fixed",
10399
+ text: true
10400
+ },
10104
10401
  drawRule: "Area1",
10105
10402
  capturesLabelSize: true,
10106
10403
  params: [...AREA_SMOOTH_PARAMS, AREA_LABEL_PADDING_PARAM],
@@ -10144,7 +10441,7 @@ function createNoFireAreaIrregular(positions, options = {}, textAmplifiers = {},
10144
10441
  }
10145
10442
  return {
10146
10443
  type: "FeatureCollection",
10147
- features: [...patternedAreaFeatures(verts, pushAreaLabels(labels, verts, { hostile: textAmplifiers.N }, options, context.amplifierPlacements), "backhachure"), ...labels]
10444
+ features: [...patternedAreaFeatures(verts, pushAreaLabels(labels, verts, { hostile: textAmplifiers.N }, options, context.amplifierPlacements), "reverse-hatch"), ...labels]
10148
10445
  };
10149
10446
  }
10150
10447
  const NO_FIRE_AREA_IRREGULAR = defineControlMeasure({
@@ -10190,6 +10487,11 @@ const MAIN_ATTACK_METADATA = {
10190
10487
  minCoordinates: 3,
10191
10488
  geometry: "line",
10192
10489
  geometryTypes: ["MultiLineString"],
10490
+ paints: {
10491
+ stroke: true,
10492
+ fill: "none",
10493
+ text: false
10494
+ },
10193
10495
  drawRule: "Axis1",
10194
10496
  params: ATTACK_SHAFT_PARAMS
10195
10497
  };
@@ -10290,6 +10592,11 @@ const OBSTACLE_BYPASS_DIFFICULT_METADATA = {
10290
10592
  minCoordinates: 2,
10291
10593
  geometry: "line",
10292
10594
  geometryTypes: ["MultiLineString", "MultiPolygon"],
10595
+ paints: {
10596
+ stroke: true,
10597
+ fill: "fixed",
10598
+ text: false
10599
+ },
10293
10600
  drawRule: "Point12",
10294
10601
  params: [
10295
10602
  ...OBSTACLE_BYPASS_PARAMS,
@@ -10423,6 +10730,11 @@ const OBSTACLE_BYPASS_EASY_METADATA = {
10423
10730
  minCoordinates: 2,
10424
10731
  geometry: "line",
10425
10732
  geometryTypes: ["MultiLineString", "MultiPolygon"],
10733
+ paints: {
10734
+ stroke: true,
10735
+ fill: "fixed",
10736
+ text: false
10737
+ },
10426
10738
  drawRule: "Point12",
10427
10739
  params: OBSTACLE_BYPASS_PARAMS
10428
10740
  };
@@ -10532,6 +10844,11 @@ const OBSTACLE_BYPASS_IMPOSSIBLE_METADATA = {
10532
10844
  minCoordinates: 2,
10533
10845
  geometry: "line",
10534
10846
  geometryTypes: ["MultiLineString", "MultiPolygon"],
10847
+ paints: {
10848
+ stroke: true,
10849
+ fill: "fixed",
10850
+ text: false
10851
+ },
10535
10852
  drawRule: "Point12",
10536
10853
  params: [
10537
10854
  ...OBSTACLE_BYPASS_PARAMS,
@@ -10672,6 +10989,11 @@ const PICKUP_ZONE_METADATA = {
10672
10989
  "MultiLineString",
10673
10990
  "Point"
10674
10991
  ],
10992
+ paints: {
10993
+ stroke: true,
10994
+ fill: "none",
10995
+ text: true
10996
+ },
10675
10997
  drawRule: "Area1",
10676
10998
  capturesLabelSize: true,
10677
10999
  params: LABELED_AREA_PARAMS,
@@ -10722,6 +11044,11 @@ const ASSAULT_POSITION_METADATA = {
10722
11044
  "MultiLineString",
10723
11045
  "Point"
10724
11046
  ],
11047
+ paints: {
11048
+ stroke: true,
11049
+ fill: "none",
11050
+ text: true
11051
+ },
10725
11052
  drawRule: "Area1",
10726
11053
  capturesLabelSize: true,
10727
11054
  params: LABELED_AREA_PARAMS,
@@ -10772,6 +11099,11 @@ const ATTACK_POSITION_METADATA = {
10772
11099
  "MultiLineString",
10773
11100
  "Point"
10774
11101
  ],
11102
+ paints: {
11103
+ stroke: true,
11104
+ fill: "none",
11105
+ text: true
11106
+ },
10775
11107
  drawRule: "Area1",
10776
11108
  capturesLabelSize: true,
10777
11109
  params: LABELED_AREA_PARAMS,
@@ -10822,6 +11154,11 @@ const OBJECTIVE_AREA_METADATA = {
10822
11154
  "MultiLineString",
10823
11155
  "Point"
10824
11156
  ],
11157
+ paints: {
11158
+ stroke: true,
11159
+ fill: "none",
11160
+ text: true
11161
+ },
10825
11162
  drawRule: "Area1",
10826
11163
  capturesLabelSize: true,
10827
11164
  params: LABELED_AREA_PARAMS,
@@ -10869,6 +11206,11 @@ const PRINCIPAL_DIRECTION_OF_FIRE_METADATA = {
10869
11206
  maxCoordinates: 3,
10870
11207
  geometry: "line",
10871
11208
  geometryTypes: ["MultiLineString"],
11209
+ paints: {
11210
+ stroke: true,
11211
+ fill: "none",
11212
+ text: false
11213
+ },
10872
11214
  drawRule: "Line3",
10873
11215
  params: [{
10874
11216
  key: "arrowheadLengthRatio",
@@ -10953,6 +11295,11 @@ const STRONG_POINT_METADATA = {
10953
11295
  "MultiPolygon",
10954
11296
  "Point"
10955
11297
  ],
11298
+ paints: {
11299
+ stroke: true,
11300
+ fill: "fixed",
11301
+ text: true
11302
+ },
10956
11303
  drawRule: "Area1",
10957
11304
  capturesLabelSize: true,
10958
11305
  params: ECHELON_AREA_PARAMS,
@@ -11095,6 +11442,11 @@ const SUBMARINE_ACTION_AREA_METADATA = {
11095
11442
  "MultiLineString",
11096
11443
  "Point"
11097
11444
  ],
11445
+ paints: {
11446
+ stroke: true,
11447
+ fill: "none",
11448
+ text: true
11449
+ },
11098
11450
  drawRule: "Area1",
11099
11451
  capturesLabelSize: true,
11100
11452
  params: LABELED_AREA_PARAMS,
@@ -11150,6 +11502,11 @@ const SUBMARINE_GENERATED_ACTION_AREA_METADATA = {
11150
11502
  "MultiLineString",
11151
11503
  "Point"
11152
11504
  ],
11505
+ paints: {
11506
+ stroke: true,
11507
+ fill: "none",
11508
+ text: true
11509
+ },
11153
11510
  drawRule: "Area1",
11154
11511
  capturesLabelSize: true,
11155
11512
  params: LABELED_AREA_PARAMS,
@@ -11200,6 +11557,11 @@ const SUPPORT_BY_FIRE_METADATA = {
11200
11557
  minCoordinates: 4,
11201
11558
  geometry: "line",
11202
11559
  geometryTypes: ["LineString"],
11560
+ paints: {
11561
+ stroke: true,
11562
+ fill: "none",
11563
+ text: false
11564
+ },
11203
11565
  drawRule: "Area8",
11204
11566
  params: FIRE_ARROW_PARAMS
11205
11567
  };
@@ -11347,6 +11709,11 @@ const SUPPORTING_ATTACK_METADATA = {
11347
11709
  minCoordinates: 3,
11348
11710
  geometry: "line",
11349
11711
  geometryTypes: ["LineString"],
11712
+ paints: {
11713
+ stroke: true,
11714
+ fill: "none",
11715
+ text: false
11716
+ },
11350
11717
  drawRule: "Axis1",
11351
11718
  params: ATTACK_SHAFT_PARAMS
11352
11719
  };
@@ -11408,6 +11775,11 @@ const TURN_METADATA = {
11408
11775
  minCoordinates: 2,
11409
11776
  geometry: "line",
11410
11777
  geometryTypes: ["MultiLineString", "MultiPolygon"],
11778
+ paints: {
11779
+ stroke: true,
11780
+ fill: "fixed",
11781
+ text: false
11782
+ },
11411
11783
  drawRule: "Line10",
11412
11784
  params: [
11413
11785
  {
@@ -11519,6 +11891,11 @@ const TURNING_MOVEMENT_METADATA = {
11519
11891
  minCoordinates: 3,
11520
11892
  geometry: "line",
11521
11893
  geometryTypes: ["MultiLineString", "Point"],
11894
+ paints: {
11895
+ stroke: true,
11896
+ fill: "none",
11897
+ text: true
11898
+ },
11522
11899
  drawRule: "Axis1",
11523
11900
  capturesLabelSize: true,
11524
11901
  params: [...ATTACK_SHAFT_PARAMS, ...MANEUVER_ARROW_TASK_PARAMS],
@@ -11797,6 +12174,7 @@ function resolveStyleHints(graphicsStyle, measureStyle, generatorStyle) {
11797
12174
  */
11798
12175
  function resolveSymbolColor(merged, filled) {
11799
12176
  const { color, strokeColor, fillColor, fillPattern, opacity, ...rest } = merged ?? {};
12177
+ delete rest.textHalo;
11800
12178
  const rawStroke = firstColor(strokeColor, color);
11801
12179
  const resolvedStroke = foldGraphicOpacity(rawStroke, opacity);
11802
12180
  const resolved = {
@@ -11865,18 +12243,32 @@ function dispatchControlMeasure(cm, opts) {
11865
12243
  return generator(cm.controlPoints, cm.options ?? {}, textAmplifiers, { amplifierPlacements: cm.amplifierPlacements });
11866
12244
  }
11867
12245
  /**
11868
- * The control-point *input contract*: at least `metadata.minCoordinates` points,
11869
- * each a finite `[lon, lat]` position. Reports per `validationMode` on
11870
- * violation (`silent` → empty render, `warn` → log, `throw` → raise) and
11871
- * returns whether the points may be passed to the generator. Extra points
11872
- * beyond `maxCoordinates` are ignored, not rejected (ADR-0014).
12246
+ * The control-point *input contract*: `controlPoints` must be present and an
12247
+ * array of at least `metadata.minCoordinates` finite `[lon, lat]` positions.
12248
+ * Reports per `validationMode` on violation (`silent` → empty render, `warn` →
12249
+ * log, `throw` → raise) and returns whether the points may be passed to the
12250
+ * generator. Extra points beyond `maxCoordinates` are ignored, not rejected
12251
+ * (ADR-0014).
12252
+ *
12253
+ * A missing or non-array `controlPoints` is itself a contract violation and is
12254
+ * reported like any other — the validator must never throw a raw `TypeError`
12255
+ * on the very input it exists to diagnose. Passing a GeoJSON `geometry` or a
12256
+ * `coordinates` field instead of `controlPoints` is the common way to land
12257
+ * here.
11873
12258
  */
11874
12259
  function validateInputContract(points, metadata, mode) {
12260
+ if (!Array.isArray(points)) return reportValidationIssue(mode, `"${metadata.id}" requires controlPoints to be an array of [lon, lat] positions; received ${describeValue(points)}.`);
11875
12261
  const minimum = metadata.minCoordinates ?? 0;
11876
12262
  if (points.length < minimum) return reportValidationIssue(mode, `"${metadata.id}" requires at least ${minimum} control points; received ${points.length}.`);
11877
12263
  if (points.some((point) => !isValidPosition(point))) return reportValidationIssue(mode, `"${metadata.id}" control points must contain finite [lon, lat] values.`);
11878
12264
  return true;
11879
12265
  }
12266
+ /** A short, log-safe description of an off-contract value for the report. */
12267
+ function describeValue(value) {
12268
+ if (value === null) return "null";
12269
+ if (value === void 0) return "undefined";
12270
+ return typeof value;
12271
+ }
11880
12272
  /**
11881
12273
  * The `amplifierPlacements` key that repositions this feature, if any: the
11882
12274
  * explicit `labelPlacementKey`, the canonical amplifier field when the
@@ -11895,14 +12287,16 @@ function normalizeFeature(id, feature, index, generatedLabelOrdinal, measureStyl
11895
12287
  const part = typeof sourceProps.part === "string" && sourceProps.part.length > 0 ? sourceProps.part : "main";
11896
12288
  const generatorStyle = typeof sourceProps.style === "object" && sourceProps.style !== null ? sourceProps.style : void 0;
11897
12289
  const filled = sourceProps.fill === true;
11898
- const style = resolveSymbolColor(resolveStyleHints(graphicsStyle, measureStyle, generatorStyle), filled);
12290
+ const merged = resolveStyleHints(graphicsStyle, measureStyle, generatorStyle);
12291
+ const style = resolveSymbolColor(merged, filled);
11899
12292
  const text = typeof sourceProps.text === "string" ? sourceProps.text : void 0;
11900
12293
  const rotation = typeof sourceProps.rotation === "number" ? sourceProps.rotation : void 0;
11901
12294
  const textSizePixels = typeof sourceProps.textSizePixels === "number" ? sourceProps.textSizePixels : void 0;
11902
12295
  const textSizeMeters = typeof sourceProps.textSizeMeters === "number" ? sourceProps.textSizeMeters : void 0;
11903
12296
  const textAnchor = sourceProps.textAnchor === "start" || sourceProps.textAnchor === "end" ? sourceProps.textAnchor : void 0;
11904
12297
  const textBackground = sourceProps.textBackground === true ? true : void 0;
11905
- const textHalo = sourceProps.textHalo === true ? true : void 0;
12298
+ const requestedHalo = typeof sourceProps.textHalo === "boolean" ? sourceProps.textHalo : merged?.textHalo === true;
12299
+ const textHalo = text !== void 0 && requestedHalo ? true : void 0;
11906
12300
  const textHaloColor = textHalo ? contrastingHaloColor(style.strokeColor ?? "#000") : void 0;
11907
12301
  const textJustify = sourceProps.textJustify === "left" || sourceProps.textJustify === "center" || sourceProps.textJustify === "right" ? sourceProps.textJustify : void 0;
11908
12302
  const textStyle = sourceProps.textStyle === "regular" || sourceProps.textStyle === "italic" || sourceProps.textStyle === "light" || sourceProps.textStyle === "caps" ? sourceProps.textStyle : void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbat-mapper/control-measures",
3
- "version": "0.2.0-alpha.26",
3
+ "version": "0.2.0-alpha.28",
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",