@texturehq/edges 2.4.10 → 2.5.1

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.
@@ -20,6 +20,7 @@ declare const CUSTOM_ICON_REGISTRY: {
20
20
  readonly TextureRegulator: Icon$1;
21
21
  readonly TextureSwitch: Icon$1;
22
22
  readonly TextureSwitchClosed: Icon$1;
23
+ readonly TextureOpenPoint: Icon$1;
23
24
  readonly TextureSectionalizerOpen: Icon$1;
24
25
  readonly TextureSectionalizerClosed: Icon$1;
25
26
  readonly TextureTransformer: Icon$1;
@@ -20,6 +20,7 @@ declare const CUSTOM_ICON_REGISTRY: {
20
20
  readonly TextureRegulator: Icon$1;
21
21
  readonly TextureSwitch: Icon$1;
22
22
  readonly TextureSwitchClosed: Icon$1;
23
+ readonly TextureOpenPoint: Icon$1;
23
24
  readonly TextureSectionalizerOpen: Icon$1;
24
25
  readonly TextureSectionalizerClosed: Icon$1;
25
26
  readonly TextureTransformer: Icon$1;
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default, { ComponentProps, ReactNode } from 'react';
3
3
  import { Key, ValidationResult, ButtonProps as ButtonProps$1, CheckboxProps as CheckboxProps$1, CheckboxRenderProps, CheckboxGroupProps as CheckboxGroupProps$1, TextFieldProps as TextFieldProps$1, NumberFieldProps as NumberFieldProps$1, RadioProps, RadioGroupProps as RadioGroupProps$1, SelectProps as SelectProps$1, SwitchProps as SwitchProps$1, TimeFieldProps as TimeFieldProps$1, TimeValue } from 'react-aria-components';
4
- import { S as Size, I as Icon, B as BaseInputProps } from './RichTextEditor-BNXNpG4s.cjs';
4
+ import { S as Size, I as Icon, B as BaseInputProps } from './RichTextEditor-B_GaE_Yf.cjs';
5
5
 
6
6
  interface Item {
7
7
  id: string;
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React__default, { ComponentProps, ReactNode } from 'react';
3
3
  import { Key, ValidationResult, ButtonProps as ButtonProps$1, CheckboxProps as CheckboxProps$1, CheckboxRenderProps, CheckboxGroupProps as CheckboxGroupProps$1, TextFieldProps as TextFieldProps$1, NumberFieldProps as NumberFieldProps$1, RadioProps, RadioGroupProps as RadioGroupProps$1, SelectProps as SelectProps$1, SwitchProps as SwitchProps$1, TimeFieldProps as TimeFieldProps$1, TimeValue } from 'react-aria-components';
4
- import { S as Size, I as Icon, B as BaseInputProps } from './RichTextEditor-BNXNpG4s.js';
4
+ import { S as Size, I as Icon, B as BaseInputProps } from './RichTextEditor-B_GaE_Yf.js';
5
5
 
6
6
  interface Item {
7
7
  id: string;
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React$1 from 'react';
3
3
  import React__default, { ReactNode, ComponentType } from 'react';
4
- import { d as IconName } from './RichTextEditor-BNXNpG4s.cjs';
4
+ import { d as IconName } from './RichTextEditor-B_GaE_Yf.js';
5
5
  import * as _visx_vendor_d3_scale from '@visx/vendor/d3-scale';
6
6
  import { ScaleTime, ScaleLinear } from 'd3-scale';
7
7
  import * as react_map_gl from 'react-map-gl';
@@ -552,6 +552,15 @@ interface BadgeProps {
552
552
  dotPosition?: "left" | "right";
553
553
  /** Whether the dot should pulse (animated) */
554
554
  dotPulse?: boolean;
555
+ /**
556
+ * Native tooltip text.
557
+ *
558
+ * A badge is often an abbreviation of something the reader cannot infer — a state,
559
+ * a threshold, a data-quality caveat. Without this, callers wrap the badge in a bare
560
+ * `<span title>` purely to explain it, which adds a layout box around an inline-flex
561
+ * element for no visual reason.
562
+ */
563
+ title?: string;
555
564
  /** Additional CSS classes */
556
565
  className?: string;
557
566
  }
@@ -564,7 +573,7 @@ interface BadgeProps {
564
573
  * Supports device states (charging, discharging, heat, cool, etc.) and
565
574
  * grid states (importing, exporting) as variant values.
566
575
  */
567
- declare function Badge({ children, variant, size, shape, dot, dotPosition, dotPulse, className, }: BadgeProps): react_jsx_runtime.JSX.Element;
576
+ declare function Badge({ children, variant, size, shape, dot, dotPosition, dotPulse, title, className, }: BadgeProps): react_jsx_runtime.JSX.Element;
568
577
 
569
578
  type CodeLanguage = "json" | "javascript" | "typescript" | "html" | "css" | "markdown" | "yaml" | "xml" | "python" | "sql";
570
579
  type CodeTheme = "github" | "github_dark";
@@ -1305,6 +1314,15 @@ interface VectorLayerSpec extends BaseLayerSpec {
1305
1314
  style?: LayerStyle;
1306
1315
  /** Mapbox filter expression (escape hatch for advanced filtering) */
1307
1316
  filter?: any;
1317
+ /**
1318
+ * Per-feature chip suppression for point (`circle`) layers. A Mapbox boolean
1319
+ * expression; where it evaluates true, the chip's fill + border render fully
1320
+ * transparent (`circle-opacity`/`circle-stroke-opacity` → 0) while the feature
1321
+ * stays interactive (click/hover still hit-test). Lets a glyph drawn on top
1322
+ * read as "on the geometry" with no chip behind it — e.g. Open Point switches
1323
+ * rendered as a bracket over the conductor line. Ignored for non-circle layers.
1324
+ */
1325
+ hideChipWhen?: any;
1308
1326
  }
1309
1327
  /**
1310
1328
  * GeoJSON layer (client-side data or URL)
@@ -1979,14 +1997,27 @@ interface MapPoint {
1979
1997
  interface MeterProps extends MeterProps$1 {
1980
1998
  /** Label displayed above the meter */
1981
1999
  label?: string;
1982
- /** Size variant of the meter */
1983
- size?: "sm" | "md" | "lg";
1984
- /** Visual variant based on semantic meaning */
1985
- variant?: "default" | "success" | "warning" | "error" | "info";
2000
+ /** Size variant of the meter. `xs` is a bare track sized for a dense table cell. */
2001
+ size?: "xs" | "sm" | "md" | "lg";
2002
+ /** Visual variant based on semantic meaning. `neutral` opts out of value-derived colouring. */
2003
+ variant?: "default" | "success" | "warning" | "error" | "info" | "neutral";
1986
2004
  /** Whether to show warning indicator at high values */
1987
2005
  showWarningIndicator?: boolean;
1988
2006
  /** Threshold percentage for showing warning (default: 80) */
1989
2007
  warningThreshold?: number;
2008
+ /**
2009
+ * Render the track alone, without the label / value row.
2010
+ *
2011
+ * For callers that already print the measurement next to the meter — a table cell whose
2012
+ * column *is* the value — where the built-in row would repeat it.
2013
+ *
2014
+ * The meter still needs a name: pass `label` (promoted to `aria-label`, since the visible
2015
+ * `<Label>` is no longer rendered) or an explicit `aria-label`. A caller whose track is
2016
+ * purely decorative — or whose displayed `value` is clamped, so the meter would state a
2017
+ * number the adjacent text contradicts — should pass `aria-hidden` instead and leave the
2018
+ * printed value as the only accessible one.
2019
+ */
2020
+ hideValueText?: boolean;
1990
2021
  /** Additional CSS classes */
1991
2022
  className?: string;
1992
2023
  }
@@ -1996,7 +2027,7 @@ interface MeterProps extends MeterProps$1 {
1996
2027
  * Displays a measurement within a known range, with visual indicators for different value ranges.
1997
2028
  * Perfect for showing capacity, usage levels, scores, or any bounded measurement.
1998
2029
  */
1999
- declare function Meter({ label, size, variant, showWarningIndicator, warningThreshold, className, ...props }: MeterProps): react_jsx_runtime.JSX.Element;
2030
+ declare function Meter({ label, size, variant, showWarningIndicator, warningThreshold, hideValueText, className, ...props }: MeterProps): react_jsx_runtime.JSX.Element;
2000
2031
 
2001
2032
  type SegmentOption = {
2002
2033
  id: string;
@@ -2168,8 +2199,20 @@ type SerializableFieldFormat = Exclude<FieldFormat, {
2168
2199
  * (e.g. transformer loading: SUM of downstream meter `kwh_usage`
2169
2200
  * ÷ PF ÷ `ratedKva`, a 0–1 ratio the cell scales ×100). Consumers
2170
2201
  * MUST treat this as async/loading and never block the card on it.
2202
+ * - `scada` — a live SCADA telemetry reading resolved from the element's
2203
+ * `TelemetrySource` (`externalId = '{'+elementGuid+'}'`). `points`
2204
+ * are the TelemetryPoint names to read, `reduce` collapses them
2205
+ * (`maxAbs` for three-phase current), `unit` is passed through,
2206
+ * and `sla` (ms) is the freshness window past which the reading
2207
+ * reads "as of {rel}", not live. Optional `ignore` lists numeric
2208
+ * sentinel values (e.g. `32767` on a tap-position phase) that are
2209
+ * treated as absent — skipped before the reduce and before the
2210
+ * freshness check, exactly as a `null` reading would be. Added in
2211
+ * MR-EN4; paired with the grid capability resolver. The gate is a
2212
+ * fresh point, not `ScadaGridNode` existence; a stale point never
2213
+ * blocks the card.
2171
2214
  *
2172
- * No grid row uses `metadata`/`derived` yet — the design's grid metric proposal
2215
+ * No grid row uses `metadata`/`derived`/`scada` yet — the design's grid metric proposal
2173
2216
  * is still "For review" (see MR-07). The type is extended now so those rows can
2174
2217
  * be authored honestly once design signs off; only `state` rows exist today.
2175
2218
  */
@@ -2183,6 +2226,13 @@ type MetricSource = {
2183
2226
  kind: "derived";
2184
2227
  rollup: "transformer-loading";
2185
2228
  window: "15m" | "1h" | "1d";
2229
+ } | {
2230
+ kind: "scada";
2231
+ points: string[];
2232
+ reduce: "maxAbs" | "sum" | "first";
2233
+ unit: string;
2234
+ sla: number;
2235
+ ignore?: number[];
2186
2236
  };
2187
2237
  /**
2188
2238
  * One headline metric shown by `entity.now`. A serializable declaration only —
@@ -2252,7 +2302,11 @@ interface GridStatFieldFormat {
2252
2302
  * the live block. See MR-07 "'has data' ≠ 'belongs in entity.now'".
2253
2303
  */
2254
2304
  interface GridStatField {
2255
- /** JSONB key in `GridElement.elementData`. */
2305
+ /**
2306
+ * Key in the element's resolved data. Usually a `GridElement.elementData`
2307
+ * JSONB key; may also be a decoded top-level field the host merges in (e.g.
2308
+ * `capacityKva`, the decoded transformer kVA rating).
2309
+ */
2256
2310
  key: string;
2257
2311
  /** Display label (translation key or plain text). */
2258
2312
  label: string;
@@ -2312,6 +2366,17 @@ interface EntityConfig {
2312
2366
  */
2313
2367
  headlineMetrics: HeadlineMetric[];
2314
2368
  };
2369
+ /**
2370
+ * Which headline metric `entity.now` promotes to the hero ("fused") slot — a
2371
+ * single large number the design leads the rail with (e.g. Battery → SoC,
2372
+ * Inverter → Output). MUST be the `id` of one of this entity's
2373
+ * `fields.headlineMetrics`; the conformance test enforces that. Optional:
2374
+ * entities with no metric rail (Gateway, Water Heater) omit it, and a rail
2375
+ * with no promoted hero simply renders every cell equally. The hero choice
2376
+ * lives here, alongside the serialized metrics, so no per-instance prop is
2377
+ * needed (design build spec: "no per-instance metric props").
2378
+ */
2379
+ fusedMetricId?: string;
2315
2380
  /**
2316
2381
  * State rules for `entity.now`'s status chips. `primaryState` drives the
2317
2382
  * pulsing primary chip; `secondaryState` (battery/inverter: charge + grid)
@@ -2405,45 +2470,21 @@ declare const ABSENT_GRID_FIELDS: readonly ["energized", "customerName", "gs_max
2405
2470
  */
2406
2471
  declare const GRID_STAT_LIST: {
2407
2472
  readonly TRANSFORMER: [{
2408
- readonly key: "primaryRatedVoltage";
2409
- readonly label: "Primary Voltage";
2473
+ readonly key: "capacityKva";
2474
+ readonly label: "kVA Rating";
2410
2475
  readonly format: {
2411
- readonly type: "voltage";
2412
- readonly unit: "V";
2476
+ readonly type: "power";
2477
+ readonly unit: "kVA";
2413
2478
  readonly decimals: 0;
2414
2479
  };
2415
2480
  }, {
2416
- readonly key: "ratedOutputVoltage";
2417
- readonly label: "Output Voltage";
2481
+ readonly key: "primaryRatedVoltage";
2482
+ readonly label: "Primary Voltage";
2418
2483
  readonly format: {
2419
2484
  readonly type: "voltage";
2420
2485
  readonly unit: "V";
2421
2486
  readonly decimals: 0;
2422
2487
  };
2423
- }, {
2424
- readonly key: "tranKvaA";
2425
- readonly label: "Rating Phase A";
2426
- readonly format: {
2427
- readonly type: "power";
2428
- readonly unit: "kVA";
2429
- readonly decimals: 1;
2430
- };
2431
- }, {
2432
- readonly key: "tranKvaB";
2433
- readonly label: "Rating Phase B";
2434
- readonly format: {
2435
- readonly type: "power";
2436
- readonly unit: "kVA";
2437
- readonly decimals: 1;
2438
- };
2439
- }, {
2440
- readonly key: "tranKvaC";
2441
- readonly label: "Rating Phase C";
2442
- readonly format: {
2443
- readonly type: "power";
2444
- readonly unit: "kVA";
2445
- readonly decimals: 1;
2446
- };
2447
2488
  }];
2448
2489
  readonly CONSUMER: [{
2449
2490
  readonly key: "meterNumber";
@@ -3033,45 +3074,21 @@ declare const ENTITY_CONFIG: {
3033
3074
  readonly detailPage: true;
3034
3075
  readonly properties: {
3035
3076
  readonly statList: [{
3036
- readonly key: "primaryRatedVoltage";
3037
- readonly label: "Primary Voltage";
3077
+ readonly key: "capacityKva";
3078
+ readonly label: "kVA Rating";
3038
3079
  readonly format: {
3039
- readonly type: "voltage";
3040
- readonly unit: "V";
3080
+ readonly type: "power";
3081
+ readonly unit: "kVA";
3041
3082
  readonly decimals: 0;
3042
3083
  };
3043
3084
  }, {
3044
- readonly key: "ratedOutputVoltage";
3045
- readonly label: "Output Voltage";
3085
+ readonly key: "primaryRatedVoltage";
3086
+ readonly label: "Primary Voltage";
3046
3087
  readonly format: {
3047
3088
  readonly type: "voltage";
3048
3089
  readonly unit: "V";
3049
3090
  readonly decimals: 0;
3050
3091
  };
3051
- }, {
3052
- readonly key: "tranKvaA";
3053
- readonly label: "Rating Phase A";
3054
- readonly format: {
3055
- readonly type: "power";
3056
- readonly unit: "kVA";
3057
- readonly decimals: 1;
3058
- };
3059
- }, {
3060
- readonly key: "tranKvaB";
3061
- readonly label: "Rating Phase B";
3062
- readonly format: {
3063
- readonly type: "power";
3064
- readonly unit: "kVA";
3065
- readonly decimals: 1;
3066
- };
3067
- }, {
3068
- readonly key: "tranKvaC";
3069
- readonly label: "Rating Phase C";
3070
- readonly format: {
3071
- readonly type: "power";
3072
- readonly unit: "kVA";
3073
- readonly decimals: 1;
3074
- };
3075
3092
  }];
3076
3093
  };
3077
3094
  readonly label: {
@@ -3099,6 +3116,7 @@ declare const ENTITY_CONFIG: {
3099
3116
  readonly plural: "Meters";
3100
3117
  };
3101
3118
  readonly description: "Revenue meter at the point of consumption";
3119
+ readonly fusedMetricId: "power";
3102
3120
  readonly fields: {
3103
3121
  readonly headlineMetrics: [{
3104
3122
  readonly id: "power";
@@ -3126,6 +3144,30 @@ declare const ENTITY_CONFIG: {
3126
3144
  readonly decimals: 2;
3127
3145
  };
3128
3146
  readonly icon: "Lightning";
3147
+ }, {
3148
+ readonly id: "voltage";
3149
+ readonly label: "device.meter.fields.voltage";
3150
+ readonly source: {
3151
+ readonly kind: "state";
3152
+ readonly path: "state.phaseAVoltage";
3153
+ };
3154
+ readonly format: {
3155
+ readonly type: "voltage";
3156
+ readonly decimals: 1;
3157
+ };
3158
+ readonly icon: "Lightning";
3159
+ }, {
3160
+ readonly id: "current";
3161
+ readonly label: "device.meter.fields.current";
3162
+ readonly source: {
3163
+ readonly kind: "state";
3164
+ readonly path: "state.phaseACurrent";
3165
+ };
3166
+ readonly format: {
3167
+ readonly type: "current";
3168
+ readonly decimals: 2;
3169
+ };
3170
+ readonly icon: "Lightning";
3129
3171
  }];
3130
3172
  };
3131
3173
  };
@@ -3627,6 +3669,7 @@ declare const ENTITY_CONFIG: {
3627
3669
  readonly plural: "Batteries";
3628
3670
  };
3629
3671
  readonly description: "Behind-the-meter battery or storage system";
3672
+ readonly fusedMetricId: "soc";
3630
3673
  readonly fields: {
3631
3674
  readonly headlineMetrics: [{
3632
3675
  readonly id: "power";
@@ -3652,6 +3695,30 @@ declare const ENTITY_CONFIG: {
3652
3695
  readonly decimals: 0;
3653
3696
  };
3654
3697
  readonly icon: "BatteryCharging";
3698
+ }, {
3699
+ readonly id: "backupReserve";
3700
+ readonly label: "device.battery.fields.backupReserve";
3701
+ readonly source: {
3702
+ readonly kind: "state";
3703
+ readonly path: "state.backupReserve";
3704
+ };
3705
+ readonly format: {
3706
+ readonly type: "percentage";
3707
+ readonly decimals: 0;
3708
+ };
3709
+ readonly icon: "BatteryCharging";
3710
+ }, {
3711
+ readonly id: "loadPower";
3712
+ readonly label: "device.battery.fields.loadPower";
3713
+ readonly source: {
3714
+ readonly kind: "state";
3715
+ readonly path: "state.loadPower";
3716
+ };
3717
+ readonly format: {
3718
+ readonly type: "power";
3719
+ readonly decimals: 1;
3720
+ };
3721
+ readonly icon: "Lightning";
3655
3722
  }];
3656
3723
  };
3657
3724
  readonly stateRules: {
@@ -3689,6 +3756,7 @@ declare const ENTITY_CONFIG: {
3689
3756
  readonly plural: "EV Chargers";
3690
3757
  };
3691
3758
  readonly description: "Electric-vehicle charging station or port";
3759
+ readonly fusedMetricId: "power";
3692
3760
  readonly fields: {
3693
3761
  readonly headlineMetrics: [{
3694
3762
  readonly id: "power";
@@ -3715,6 +3783,30 @@ declare const ENTITY_CONFIG: {
3715
3783
  readonly falseText: "No";
3716
3784
  };
3717
3785
  readonly icon: "Plug";
3786
+ }, {
3787
+ readonly id: "voltage";
3788
+ readonly label: "device.evCharger.fields.voltage";
3789
+ readonly source: {
3790
+ readonly kind: "state";
3791
+ readonly path: "state.chargerVoltage";
3792
+ };
3793
+ readonly format: {
3794
+ readonly type: "voltage";
3795
+ readonly decimals: 1;
3796
+ };
3797
+ readonly icon: "Lightning";
3798
+ }, {
3799
+ readonly id: "current";
3800
+ readonly label: "device.evCharger.fields.current";
3801
+ readonly source: {
3802
+ readonly kind: "state";
3803
+ readonly path: "state.chargerCurrent";
3804
+ };
3805
+ readonly format: {
3806
+ readonly type: "current";
3807
+ readonly decimals: 1;
3808
+ };
3809
+ readonly icon: "Lightning";
3718
3810
  }];
3719
3811
  };
3720
3812
  readonly stateRules: {
@@ -3741,6 +3833,7 @@ declare const ENTITY_CONFIG: {
3741
3833
  readonly plural: "Solar / Inverters";
3742
3834
  };
3743
3835
  readonly description: "Solar PV inverter and its connected array";
3836
+ readonly fusedMetricId: "power";
3744
3837
  readonly fields: {
3745
3838
  readonly headlineMetrics: [{
3746
3839
  readonly id: "power";
@@ -3766,6 +3859,30 @@ declare const ENTITY_CONFIG: {
3766
3859
  readonly decimals: 0;
3767
3860
  };
3768
3861
  readonly icon: "GridFour";
3862
+ }, {
3863
+ readonly id: "generatedEnergy";
3864
+ readonly label: "device.inverter.fields.generatedEnergy";
3865
+ readonly source: {
3866
+ readonly kind: "state";
3867
+ readonly path: "state.generatedEnergy";
3868
+ };
3869
+ readonly format: {
3870
+ readonly type: "energy";
3871
+ readonly decimals: 1;
3872
+ };
3873
+ readonly icon: "Lightning";
3874
+ }, {
3875
+ readonly id: "lifetimeEnergyGenerated";
3876
+ readonly label: "device.inverter.fields.lifetimeEnergyGenerated";
3877
+ readonly source: {
3878
+ readonly kind: "state";
3879
+ readonly path: "state.lifetimeEnergyGenerated";
3880
+ };
3881
+ readonly format: {
3882
+ readonly type: "energy";
3883
+ readonly decimals: 0;
3884
+ };
3885
+ readonly icon: "Lightning";
3769
3886
  }];
3770
3887
  };
3771
3888
  readonly stateRules: {
@@ -3791,6 +3908,7 @@ declare const ENTITY_CONFIG: {
3791
3908
  readonly plural: "Thermostats";
3792
3909
  };
3793
3910
  readonly description: "Smart thermostat or connected HVAC control";
3911
+ readonly fusedMetricId: "ambientTemperature";
3794
3912
  readonly fields: {
3795
3913
  readonly headlineMetrics: [{
3796
3914
  readonly id: "ambientTemperature";
@@ -3828,6 +3946,16 @@ declare const ENTITY_CONFIG: {
3828
3946
  readonly decimals: 0;
3829
3947
  };
3830
3948
  readonly icon: "Snowflake";
3949
+ }, {
3950
+ readonly id: "fanMode";
3951
+ readonly label: "device.thermostat.fields.fanMode";
3952
+ readonly source: {
3953
+ readonly kind: "state";
3954
+ readonly path: "state.fanMode";
3955
+ };
3956
+ readonly format: {
3957
+ readonly type: "text";
3958
+ };
3831
3959
  }];
3832
3960
  };
3833
3961
  readonly stateRules: {
@@ -3856,6 +3984,7 @@ declare const ENTITY_CONFIG: {
3856
3984
  readonly plural: "EVs";
3857
3985
  };
3858
3986
  readonly description: "Electric vehicle managed as a flexible load";
3987
+ readonly fusedMetricId: "chargePercentage";
3859
3988
  readonly fields: {
3860
3989
  readonly headlineMetrics: [{
3861
3990
  readonly id: "chargePercentage";
@@ -3882,6 +4011,31 @@ declare const ENTITY_CONFIG: {
3882
4011
  readonly decimals: 0;
3883
4012
  };
3884
4013
  readonly icon: "GasPump";
4014
+ }, {
4015
+ readonly id: "chargeLimit";
4016
+ readonly label: "device.vehicle.fields.chargeLimit";
4017
+ readonly source: {
4018
+ readonly kind: "state";
4019
+ readonly path: "state.chargeLimit";
4020
+ };
4021
+ readonly format: {
4022
+ readonly type: "percentage";
4023
+ readonly decimals: 0;
4024
+ };
4025
+ readonly icon: "BatteryCharging";
4026
+ }, {
4027
+ readonly id: "isPluggedIn";
4028
+ readonly label: "device.vehicle.fields.isPluggedIn";
4029
+ readonly source: {
4030
+ readonly kind: "state";
4031
+ readonly path: "state.isPluggedIn";
4032
+ };
4033
+ readonly format: {
4034
+ readonly type: "boolean";
4035
+ readonly trueText: "Yes";
4036
+ readonly falseText: "No";
4037
+ };
4038
+ readonly icon: "Plug";
3885
4039
  }];
3886
4040
  };
3887
4041
  readonly stateRules: {