@texturehq/edges 5.8.0 → 5.10.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.
@@ -1886,6 +1886,20 @@ interface VectorLayerSpec extends BaseLayerSpec {
1886
1886
  * rendered as a bracket over the conductor line. Ignored for non-circle layers.
1887
1887
  */
1888
1888
  hideChipWhen?: any;
1889
+ /**
1890
+ * Reveal the chip (circle fill + border) only while the feature is hovered —
1891
+ * the resting render is fully transparent, so only a glyph drawn on top
1892
+ * occupies the map. For dense point layers (e.g. tens of thousands of
1893
+ * support structures) where a permanent chip per feature is visual noise.
1894
+ *
1895
+ * Driven by the `hover` feature-state, which `InteractiveMap` sets/clears in
1896
+ * its shared mouse handlers — so this only works for layers rendered inside
1897
+ * an InteractiveMap, and **requires `promoteId`** (feature-state needs
1898
+ * feature ids, and vector-tile features usually have none). Composes with
1899
+ * `hideChipWhen`: features matching that expression stay chipless even while
1900
+ * hovered. Ignored for non-circle layers.
1901
+ */
1902
+ revealChipOnHover?: boolean;
1889
1903
  }
1890
1904
  /**
1891
1905
  * GeoJSON layer (client-side data or URL)
@@ -2804,7 +2818,7 @@ type EntityCategory = "platform" | "grid" | "device";
2804
2818
  * - `grid-line` — lines & structures (overhead/underground spans, support structures).
2805
2819
  *
2806
2820
  * Matches the design's coverage matrix (DESIGN-REFERENCE.md §2). Every entry in
2807
- * `ENTITY_CONFIG` carries an archetype, even the 12 that have no detail page —
2821
+ * `ENTITY_CONFIG` carries an archetype, even the 13 that have no detail page —
2808
2822
  * the archetype is the composition it *would* use; `detailPage` gates whether a
2809
2823
  * page is actually reachable.
2810
2824
  */
@@ -2977,13 +2991,13 @@ interface EntityConfig {
2977
2991
  closed: EntityStateVariant;
2978
2992
  };
2979
2993
  /**
2980
- * The base page composition this entity renders with. Required on all 42
2994
+ * The base page composition this entity renders with. Required on all 43
2981
2995
  * entries — the archetype is the composition an entity *would* use even when
2982
2996
  * `detailPage` is false.
2983
2997
  */
2984
2998
  archetype: EntityArchetype;
2985
2999
  /**
2986
- * Whether this entity has a reachable detail page. 30 of 42 are `true`; the
3000
+ * Whether this entity has a reachable detail page. 30 of 43 are `true`; the
2987
3001
  * registry is the single answer to "does this entity have a page?".
2988
3002
  */
2989
3003
  detailPage: boolean;
@@ -3014,8 +3028,13 @@ interface EntityConfig {
3014
3028
  fusedMetricId?: string;
3015
3029
  /**
3016
3030
  * State rules for `entity.now`'s status chips. `primaryState` drives the
3017
- * pulsing primary chip; `secondaryState` (battery/inverter: charge + grid)
3018
- * renders a second chip with no pulse.
3031
+ * pulsing primary chip; `secondaryState` renders a second chip with no pulse.
3032
+ *
3033
+ * Only `battery` declares a `secondaryState` today (charge + grid). This
3034
+ * docstring used to say "battery/inverter" — `inverter` has never had one, and
3035
+ * the fix is this comment, not the code: adding a `secondaryState` to inverter
3036
+ * would put a new chip on a live page, which is a product change wearing a
3037
+ * typo's clothes.
3019
3038
  */
3020
3039
  stateRules?: {
3021
3040
  primaryState: EntityStateRule;
@@ -3091,7 +3110,7 @@ declare const ENTITY_CATEGORY_CONFIG: {
3091
3110
  };
3092
3111
  /** The coarse element-type axis (mirrors `@texturehq/grid-element-config`'s
3093
3112
  * `GridElementType`; kept in sync by transcription). */
3094
- type GridElementSourceType = "CAPACITOR" | "CONSUMER" | "GENERATOR" | "MOTOR" | "NODE" | "OVERCURRENT_DEVICE" | "OVERHEAD_LINE" | "REGULATOR" | "SOURCE" | "SUPPORT_STRUCTURE" | "SWITCH" | "TRANSFORMER" | "UNDERGROUND_LINE";
3113
+ type GridElementSourceType = "CAPACITOR" | "CONSUMER" | "DEVICE_LEADER" | "GENERATOR" | "MOTOR" | "NODE" | "OVERCURRENT_DEVICE" | "OVERHEAD_LINE" | "REGULATOR" | "SOURCE" | "SUPPORT_STRUCTURE" | "SWITCH" | "TRANSFORMER" | "TRANSFORMER_BANK" | "UNDERGROUND_LINE";
3095
3114
  /**
3096
3115
  * JSONB keys that are ABSENT or PII-zeroed in prod (MR-07 coverage table). No
3097
3116
  * grid stat-list row (or headline metric) may reference one of these — enforced
@@ -3266,6 +3285,14 @@ declare const GRID_STAT_LIST: {
3266
3285
  readonly format: {
3267
3286
  readonly type: "text";
3268
3287
  };
3288
+ }, {
3289
+ readonly key: "max_continuous_current";
3290
+ readonly label: "Max Continuous Current";
3291
+ readonly format: {
3292
+ readonly type: "number";
3293
+ readonly unit: "A";
3294
+ readonly decimals: 0;
3295
+ };
3269
3296
  }, {
3270
3297
  readonly key: "switchIsOpen";
3271
3298
  readonly label: "Position";
@@ -3472,6 +3499,13 @@ declare const GRID_STAT_LIST: {
3472
3499
  readonly format: {
3473
3500
  readonly type: "text";
3474
3501
  };
3502
+ }, {
3503
+ readonly key: "generator_system_size";
3504
+ readonly label: "System Size";
3505
+ readonly format: {
3506
+ readonly type: "number";
3507
+ readonly decimals: 1;
3508
+ };
3475
3509
  }];
3476
3510
  readonly MOTOR: [{
3477
3511
  readonly key: "ratedPower";
@@ -3490,6 +3524,8 @@ declare const GRID_STAT_LIST: {
3490
3524
  readonly decimals: 0;
3491
3525
  };
3492
3526
  }];
3527
+ readonly DEVICE_LEADER: [];
3528
+ readonly TRANSFORMER_BANK: [];
3493
3529
  };
3494
3530
  declare const ENTITY_CONFIG: {
3495
3531
  readonly app: {
@@ -3635,6 +3671,17 @@ declare const ENTITY_CONFIG: {
3635
3671
  };
3636
3672
  readonly description: "Rule that watches a metric against a threshold";
3637
3673
  };
3674
+ readonly insight: {
3675
+ readonly icon: "LightbulbFilament";
3676
+ readonly category: "platform";
3677
+ readonly archetype: "platform";
3678
+ readonly detailPage: false;
3679
+ readonly label: {
3680
+ readonly singular: "Insight";
3681
+ readonly plural: "Insights";
3682
+ };
3683
+ readonly description: "Derived finding surfaced from platform data";
3684
+ };
3638
3685
  readonly command: {
3639
3686
  readonly icon: "Play";
3640
3687
  readonly category: "platform";
@@ -3772,6 +3819,14 @@ declare const ENTITY_CONFIG: {
3772
3819
  readonly format: {
3773
3820
  readonly type: "text";
3774
3821
  };
3822
+ }, {
3823
+ readonly key: "max_continuous_current";
3824
+ readonly label: "Max Continuous Current";
3825
+ readonly format: {
3826
+ readonly type: "number";
3827
+ readonly unit: "A";
3828
+ readonly decimals: 0;
3829
+ };
3775
3830
  }, {
3776
3831
  readonly key: "switchIsOpen";
3777
3832
  readonly label: "Position";
@@ -3826,6 +3881,14 @@ declare const ENTITY_CONFIG: {
3826
3881
  readonly format: {
3827
3882
  readonly type: "text";
3828
3883
  };
3884
+ }, {
3885
+ readonly key: "max_continuous_current";
3886
+ readonly label: "Max Continuous Current";
3887
+ readonly format: {
3888
+ readonly type: "number";
3889
+ readonly unit: "A";
3890
+ readonly decimals: 0;
3891
+ };
3829
3892
  }, {
3830
3893
  readonly key: "switchIsOpen";
3831
3894
  readonly label: "Position";
@@ -4486,6 +4549,13 @@ declare const ENTITY_CONFIG: {
4486
4549
  readonly format: {
4487
4550
  readonly type: "text";
4488
4551
  };
4552
+ }, {
4553
+ readonly key: "generator_system_size";
4554
+ readonly label: "System Size";
4555
+ readonly format: {
4556
+ readonly type: "number";
4557
+ readonly decimals: 1;
4558
+ };
4489
4559
  }];
4490
4560
  };
4491
4561
  readonly label: {
@@ -4588,6 +4658,34 @@ declare const ENTITY_CONFIG: {
4588
4658
  };
4589
4659
  readonly description: "Structure carrying overhead line equipment";
4590
4660
  };
4661
+ readonly deviceLeader: {
4662
+ readonly icon: "FlowArrow";
4663
+ readonly category: "grid";
4664
+ readonly archetype: "grid-line";
4665
+ readonly detailPage: true;
4666
+ readonly properties: {
4667
+ readonly statList: [];
4668
+ };
4669
+ readonly label: {
4670
+ readonly singular: "Device Leader";
4671
+ readonly plural: "Device Leaders";
4672
+ };
4673
+ readonly description: "Cartographic leader line pointing an offset device symbol to its true location";
4674
+ };
4675
+ readonly transformerBank: {
4676
+ readonly icon: "TextureTransformer";
4677
+ readonly category: "grid";
4678
+ readonly archetype: "grid-energized";
4679
+ readonly detailPage: true;
4680
+ readonly properties: {
4681
+ readonly statList: [];
4682
+ };
4683
+ readonly label: {
4684
+ readonly singular: "Transformer Bank";
4685
+ readonly plural: "Transformer Banks";
4686
+ };
4687
+ readonly description: "Grouping of single-phase transformer units sharing a bank id";
4688
+ };
4591
4689
  readonly battery: {
4592
4690
  readonly icon: "BatteryHigh";
4593
4691
  readonly category: "device";
@@ -5026,6 +5124,8 @@ declare const GRID_ELEMENT_TYPE_BY_ENTITY: {
5026
5124
  readonly generator: "GENERATOR";
5027
5125
  readonly regulator: "REGULATOR";
5028
5126
  readonly supportStructure: "SUPPORT_STRUCTURE";
5127
+ readonly deviceLeader: "DEVICE_LEADER";
5128
+ readonly transformerBank: "TRANSFORMER_BANK";
5029
5129
  };
5030
5130
  /**
5031
5131
  * Get entity configuration by type
@@ -5112,6 +5212,14 @@ declare function entityHasDetailPage(entityType: EntityType): boolean;
5112
5212
  * registry yet), Site, Customer and Water Heater return `false` — `entity.now`
5113
5213
  * declines to render its cells rather than crashing or rendering empty.
5114
5214
  *
5215
+ * Exported deliberately, with no host consumer yet (MR-P02-4). Inside this package
5216
+ * it backs the conformance assertions in `entities.test.ts`; outside it, the
5217
+ * intended consumer is P11's `visible-when` work, which needs "does this entity
5218
+ * have a Now at all?" to decide whether to place the block. Checked rather than
5219
+ * guessed: knip (`--workspace packages/edges --include exports`) does not flag it,
5220
+ * because `src/index.ts` and `src/server.ts` are configured entry points. If that
5221
+ * changes, drop the `export` — it is used internally either way.
5222
+ *
5115
5223
  * @param entityType - The entity type key
5116
5224
  */
5117
5225
  declare function entityShowsNow(entityType: EntityType): boolean;
@@ -1886,6 +1886,20 @@ interface VectorLayerSpec extends BaseLayerSpec {
1886
1886
  * rendered as a bracket over the conductor line. Ignored for non-circle layers.
1887
1887
  */
1888
1888
  hideChipWhen?: any;
1889
+ /**
1890
+ * Reveal the chip (circle fill + border) only while the feature is hovered —
1891
+ * the resting render is fully transparent, so only a glyph drawn on top
1892
+ * occupies the map. For dense point layers (e.g. tens of thousands of
1893
+ * support structures) where a permanent chip per feature is visual noise.
1894
+ *
1895
+ * Driven by the `hover` feature-state, which `InteractiveMap` sets/clears in
1896
+ * its shared mouse handlers — so this only works for layers rendered inside
1897
+ * an InteractiveMap, and **requires `promoteId`** (feature-state needs
1898
+ * feature ids, and vector-tile features usually have none). Composes with
1899
+ * `hideChipWhen`: features matching that expression stay chipless even while
1900
+ * hovered. Ignored for non-circle layers.
1901
+ */
1902
+ revealChipOnHover?: boolean;
1889
1903
  }
1890
1904
  /**
1891
1905
  * GeoJSON layer (client-side data or URL)
@@ -2804,7 +2818,7 @@ type EntityCategory = "platform" | "grid" | "device";
2804
2818
  * - `grid-line` — lines & structures (overhead/underground spans, support structures).
2805
2819
  *
2806
2820
  * Matches the design's coverage matrix (DESIGN-REFERENCE.md §2). Every entry in
2807
- * `ENTITY_CONFIG` carries an archetype, even the 12 that have no detail page —
2821
+ * `ENTITY_CONFIG` carries an archetype, even the 13 that have no detail page —
2808
2822
  * the archetype is the composition it *would* use; `detailPage` gates whether a
2809
2823
  * page is actually reachable.
2810
2824
  */
@@ -2977,13 +2991,13 @@ interface EntityConfig {
2977
2991
  closed: EntityStateVariant;
2978
2992
  };
2979
2993
  /**
2980
- * The base page composition this entity renders with. Required on all 42
2994
+ * The base page composition this entity renders with. Required on all 43
2981
2995
  * entries — the archetype is the composition an entity *would* use even when
2982
2996
  * `detailPage` is false.
2983
2997
  */
2984
2998
  archetype: EntityArchetype;
2985
2999
  /**
2986
- * Whether this entity has a reachable detail page. 30 of 42 are `true`; the
3000
+ * Whether this entity has a reachable detail page. 30 of 43 are `true`; the
2987
3001
  * registry is the single answer to "does this entity have a page?".
2988
3002
  */
2989
3003
  detailPage: boolean;
@@ -3014,8 +3028,13 @@ interface EntityConfig {
3014
3028
  fusedMetricId?: string;
3015
3029
  /**
3016
3030
  * State rules for `entity.now`'s status chips. `primaryState` drives the
3017
- * pulsing primary chip; `secondaryState` (battery/inverter: charge + grid)
3018
- * renders a second chip with no pulse.
3031
+ * pulsing primary chip; `secondaryState` renders a second chip with no pulse.
3032
+ *
3033
+ * Only `battery` declares a `secondaryState` today (charge + grid). This
3034
+ * docstring used to say "battery/inverter" — `inverter` has never had one, and
3035
+ * the fix is this comment, not the code: adding a `secondaryState` to inverter
3036
+ * would put a new chip on a live page, which is a product change wearing a
3037
+ * typo's clothes.
3019
3038
  */
3020
3039
  stateRules?: {
3021
3040
  primaryState: EntityStateRule;
@@ -3091,7 +3110,7 @@ declare const ENTITY_CATEGORY_CONFIG: {
3091
3110
  };
3092
3111
  /** The coarse element-type axis (mirrors `@texturehq/grid-element-config`'s
3093
3112
  * `GridElementType`; kept in sync by transcription). */
3094
- type GridElementSourceType = "CAPACITOR" | "CONSUMER" | "GENERATOR" | "MOTOR" | "NODE" | "OVERCURRENT_DEVICE" | "OVERHEAD_LINE" | "REGULATOR" | "SOURCE" | "SUPPORT_STRUCTURE" | "SWITCH" | "TRANSFORMER" | "UNDERGROUND_LINE";
3113
+ type GridElementSourceType = "CAPACITOR" | "CONSUMER" | "DEVICE_LEADER" | "GENERATOR" | "MOTOR" | "NODE" | "OVERCURRENT_DEVICE" | "OVERHEAD_LINE" | "REGULATOR" | "SOURCE" | "SUPPORT_STRUCTURE" | "SWITCH" | "TRANSFORMER" | "TRANSFORMER_BANK" | "UNDERGROUND_LINE";
3095
3114
  /**
3096
3115
  * JSONB keys that are ABSENT or PII-zeroed in prod (MR-07 coverage table). No
3097
3116
  * grid stat-list row (or headline metric) may reference one of these — enforced
@@ -3266,6 +3285,14 @@ declare const GRID_STAT_LIST: {
3266
3285
  readonly format: {
3267
3286
  readonly type: "text";
3268
3287
  };
3288
+ }, {
3289
+ readonly key: "max_continuous_current";
3290
+ readonly label: "Max Continuous Current";
3291
+ readonly format: {
3292
+ readonly type: "number";
3293
+ readonly unit: "A";
3294
+ readonly decimals: 0;
3295
+ };
3269
3296
  }, {
3270
3297
  readonly key: "switchIsOpen";
3271
3298
  readonly label: "Position";
@@ -3472,6 +3499,13 @@ declare const GRID_STAT_LIST: {
3472
3499
  readonly format: {
3473
3500
  readonly type: "text";
3474
3501
  };
3502
+ }, {
3503
+ readonly key: "generator_system_size";
3504
+ readonly label: "System Size";
3505
+ readonly format: {
3506
+ readonly type: "number";
3507
+ readonly decimals: 1;
3508
+ };
3475
3509
  }];
3476
3510
  readonly MOTOR: [{
3477
3511
  readonly key: "ratedPower";
@@ -3490,6 +3524,8 @@ declare const GRID_STAT_LIST: {
3490
3524
  readonly decimals: 0;
3491
3525
  };
3492
3526
  }];
3527
+ readonly DEVICE_LEADER: [];
3528
+ readonly TRANSFORMER_BANK: [];
3493
3529
  };
3494
3530
  declare const ENTITY_CONFIG: {
3495
3531
  readonly app: {
@@ -3635,6 +3671,17 @@ declare const ENTITY_CONFIG: {
3635
3671
  };
3636
3672
  readonly description: "Rule that watches a metric against a threshold";
3637
3673
  };
3674
+ readonly insight: {
3675
+ readonly icon: "LightbulbFilament";
3676
+ readonly category: "platform";
3677
+ readonly archetype: "platform";
3678
+ readonly detailPage: false;
3679
+ readonly label: {
3680
+ readonly singular: "Insight";
3681
+ readonly plural: "Insights";
3682
+ };
3683
+ readonly description: "Derived finding surfaced from platform data";
3684
+ };
3638
3685
  readonly command: {
3639
3686
  readonly icon: "Play";
3640
3687
  readonly category: "platform";
@@ -3772,6 +3819,14 @@ declare const ENTITY_CONFIG: {
3772
3819
  readonly format: {
3773
3820
  readonly type: "text";
3774
3821
  };
3822
+ }, {
3823
+ readonly key: "max_continuous_current";
3824
+ readonly label: "Max Continuous Current";
3825
+ readonly format: {
3826
+ readonly type: "number";
3827
+ readonly unit: "A";
3828
+ readonly decimals: 0;
3829
+ };
3775
3830
  }, {
3776
3831
  readonly key: "switchIsOpen";
3777
3832
  readonly label: "Position";
@@ -3826,6 +3881,14 @@ declare const ENTITY_CONFIG: {
3826
3881
  readonly format: {
3827
3882
  readonly type: "text";
3828
3883
  };
3884
+ }, {
3885
+ readonly key: "max_continuous_current";
3886
+ readonly label: "Max Continuous Current";
3887
+ readonly format: {
3888
+ readonly type: "number";
3889
+ readonly unit: "A";
3890
+ readonly decimals: 0;
3891
+ };
3829
3892
  }, {
3830
3893
  readonly key: "switchIsOpen";
3831
3894
  readonly label: "Position";
@@ -4486,6 +4549,13 @@ declare const ENTITY_CONFIG: {
4486
4549
  readonly format: {
4487
4550
  readonly type: "text";
4488
4551
  };
4552
+ }, {
4553
+ readonly key: "generator_system_size";
4554
+ readonly label: "System Size";
4555
+ readonly format: {
4556
+ readonly type: "number";
4557
+ readonly decimals: 1;
4558
+ };
4489
4559
  }];
4490
4560
  };
4491
4561
  readonly label: {
@@ -4588,6 +4658,34 @@ declare const ENTITY_CONFIG: {
4588
4658
  };
4589
4659
  readonly description: "Structure carrying overhead line equipment";
4590
4660
  };
4661
+ readonly deviceLeader: {
4662
+ readonly icon: "FlowArrow";
4663
+ readonly category: "grid";
4664
+ readonly archetype: "grid-line";
4665
+ readonly detailPage: true;
4666
+ readonly properties: {
4667
+ readonly statList: [];
4668
+ };
4669
+ readonly label: {
4670
+ readonly singular: "Device Leader";
4671
+ readonly plural: "Device Leaders";
4672
+ };
4673
+ readonly description: "Cartographic leader line pointing an offset device symbol to its true location";
4674
+ };
4675
+ readonly transformerBank: {
4676
+ readonly icon: "TextureTransformer";
4677
+ readonly category: "grid";
4678
+ readonly archetype: "grid-energized";
4679
+ readonly detailPage: true;
4680
+ readonly properties: {
4681
+ readonly statList: [];
4682
+ };
4683
+ readonly label: {
4684
+ readonly singular: "Transformer Bank";
4685
+ readonly plural: "Transformer Banks";
4686
+ };
4687
+ readonly description: "Grouping of single-phase transformer units sharing a bank id";
4688
+ };
4591
4689
  readonly battery: {
4592
4690
  readonly icon: "BatteryHigh";
4593
4691
  readonly category: "device";
@@ -5026,6 +5124,8 @@ declare const GRID_ELEMENT_TYPE_BY_ENTITY: {
5026
5124
  readonly generator: "GENERATOR";
5027
5125
  readonly regulator: "REGULATOR";
5028
5126
  readonly supportStructure: "SUPPORT_STRUCTURE";
5127
+ readonly deviceLeader: "DEVICE_LEADER";
5128
+ readonly transformerBank: "TRANSFORMER_BANK";
5029
5129
  };
5030
5130
  /**
5031
5131
  * Get entity configuration by type
@@ -5112,6 +5212,14 @@ declare function entityHasDetailPage(entityType: EntityType): boolean;
5112
5212
  * registry yet), Site, Customer and Water Heater return `false` — `entity.now`
5113
5213
  * declines to render its cells rather than crashing or rendering empty.
5114
5214
  *
5215
+ * Exported deliberately, with no host consumer yet (MR-P02-4). Inside this package
5216
+ * it backs the conformance assertions in `entities.test.ts`; outside it, the
5217
+ * intended consumer is P11's `visible-when` work, which needs "does this entity
5218
+ * have a Now at all?" to decide whether to place the block. Checked rather than
5219
+ * guessed: knip (`--workspace packages/edges --include exports`) does not flag it,
5220
+ * because `src/index.ts` and `src/server.ts` are configured entry points. If that
5221
+ * changes, drop the `export` — it is used internally either way.
5222
+ *
5115
5223
  * @param entityType - The entity type key
5116
5224
  */
5117
5225
  declare function entityShowsNow(entityType: EntityType): boolean;