Data seeding, filter overhaul, UI scaling fixes, sanitized AlarmAnalysis copy

Data & simulation:
- simulation_tags.json: re-prioritize 10 tags to Medium so all four
  priorities appear in live data (backfilled journal history to match)
- SimHarness probe P2: ack-user/includeData ground truth + filtered-bundle
  verification against the live journal

Data layer (PrimeControls.calc/alarms):
- filters now drive every metric: queryStatus rows (Active Now/Unacked/
  Standing) filtered via calc.apply_status_filters; event_count counts only
  filtered instances (per-instance n_events); dropdown options enumerate
  unfiltered data so choices never collapse
- build_bundle refactored into _assemble(); when filters are active an
  unfiltered mirror is attached as bundle.overview - the Overview tab stays
  a plant-wide summary while all other consumers bind filtered sections
- _fetch_journal now honors includeData (required for ackUserName; without
  it ack attribution is always None); enabled for journal rows + source
  detail so Top Ack Users and the Ack By column populate

FilterBar/Dashboard:
- root-cause fix: bidirectional bindings never wrote dropdown selections
  back to session props, so filters silently did nothing; Apply now pulls
  values directly from the sibling controls, Clear resets both
- multi-select dropdowns cap at 280px and wrap chips; filter bar row is
  auto-height so wrapped chips push tabs down instead of overlapping
- filter bar hidden on the Overview tab (not applicable there)

UI scaling:
- Header: Prime logo added; KpiCard compacted to fit the 71px KPI row
  (basis-95% overflow fix, chip hugs text, embeds clipped) - no scrollbars
- Overview timeline: thinned x labels (minDistance 140), labels anchored
  below the axis, smaller legend markers
- Bad Actors focus chip shows the full source string with the clear X
- popup repeaters (Daily Activity, ScoreBars) no longer overflow
  (useDefaultViewWidth/Height off, taller strip); 5px table cell padding

Tooling/tests:
- lint_project.py: accept propConfig params.* as param declarations
  (Designer saves strip null params entries)
- tests: 31 -> 34 (status-filter semantics, overview mirror, filtered
  event counts)
- .gitignore: runtime churn (valueStore.idb, local-system-properties,
  migration logs, thumbnails, .schemas)

New project: AlarmAnalysis - submission copy of PrimeBAT with client-visible
Prime Controls branding removed (logo, subtitle, project title, shift report
heading); PrimeControls organizational namespaces retained per spec.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 16:27:48 -05:00
parent b70b4d6991
commit d353c5001e
165 changed files with 13988 additions and 525 deletions

View File

@@ -26,10 +26,10 @@
"name": "Authenticated"
}
],
"timestamp": 1784216310176,
"timestamp": 1784232384833,
"type": "basic-token"
},
"settings": {
"tokenHash": "gRWFOVFZWoJU0K2ZC7wscQR-u0fJgCDYW27643fMe8I"
"tokenHash": "So4BhtfZoGvLECKxykeufxMlyEa7AvInYFxuLnG3y-A"
}
}

View File

@@ -8,7 +8,7 @@
"config.json"
],
"attributes": {
"uuid": "5084e69e-49cc-4117-a144-ec3a6fff6ec1",
"uuid": "3e632819-1ddd-4115-bd5a-d0ea4423112f",
"enabled": true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,21 @@
{
"scope": "A",
"description": "",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"image (4).png"
],
"attributes": {
"width": 980,
"format": "PNG",
"lastModification": {
"actor": "admin",
"timestamp": "2026-07-16T20:05:50Z"
},
"size": 22586,
"lastModificationSignature": "8fb1036e309aeb5d2a121adcae1ce030b7ba1f6f4451665db873ab2a5e0e2612",
"height": 286
}
}

View File

@@ -6,12 +6,12 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "FlameScannerFlicker_Fleeting",
"label": "Flame Scanner Flicker",
"priority": "High"
"name": "BlowdownConductivityHigh",
"label": "Blowdown Conductivity High",
"priority": "Low"
}
],
"name": "FlameScannerFlicker_Fleeting",
"name": "BlowdownConductivityHigh",
"tagType": "AtomicTag"
},
{
@@ -29,66 +29,6 @@
"name": "FeedPumpA_Fault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "StackTempHigh",
"label": "Stack Temp High",
"priority": "Low"
}
],
"name": "StackTempHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "DrumLevelXmtrFail_Standing",
"label": "Drum Level Transmitter Failed",
"priority": "High"
}
],
"name": "DrumLevelXmtrFail_Standing",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "FuelGasPressLow",
"label": "Fuel Gas Pressure Low",
"priority": "Low"
}
],
"name": "FuelGasPressLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "DrumLevelLow",
"label": "Drum Level Low",
"priority": "High"
}
],
"name": "DrumLevelLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -104,21 +44,6 @@
"name": "FeedPumpB_Fault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "BlowdownConductivityHigh",
"label": "Blowdown Conductivity High",
"priority": "Low"
}
],
"name": "BlowdownConductivityHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -134,6 +59,21 @@
"name": "SteamPressHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "DrumLevelLow",
"label": "Drum Level Low",
"priority": "High"
}
],
"name": "DrumLevelLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -143,10 +83,70 @@
"setpointA": 1.0,
"name": "EconomizerDPHigh",
"label": "Economizer Diff Press High",
"priority": "Low"
"priority": "Medium"
}
],
"name": "EconomizerDPHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "DrumLevelXmtrFail_Standing",
"label": "Drum Level Transmitter Failed",
"priority": "High"
}
],
"name": "DrumLevelXmtrFail_Standing",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "FlameScannerFlicker_Fleeting",
"label": "Flame Scanner Flicker",
"priority": "High"
}
],
"name": "FlameScannerFlicker_Fleeting",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "StackTempHigh",
"label": "Stack Temp High",
"priority": "Low"
}
],
"name": "StackTempHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "FuelGasPressLow",
"label": "Fuel Gas Pressure Low",
"priority": "Medium"
}
],
"name": "FuelGasPressLow",
"tagType": "AtomicTag"
}
]

View File

@@ -53,7 +53,7 @@
"setpointA": 1.0,
"name": "Pump2_Fault",
"label": "Intake Pump 2 Fault",
"priority": "High"
"priority": "Medium"
}
],
"name": "Pump2_Fault",
@@ -143,7 +143,7 @@
"setpointA": 1.0,
"name": "ScreenDiffPressHigh",
"label": "Intake Screen Diff Press High",
"priority": "Low"
"priority": "Medium"
}
],
"name": "ScreenDiffPressHigh",

View File

@@ -1,4 +1,19 @@
[
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "GuardDoorOpen",
"label": "Guard Door Open",
"priority": "Low"
}
],
"name": "GuardDoorOpen",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -8,7 +23,7 @@
"setpointA": 1.0,
"name": "PrinterInkLow",
"label": "Date Coder Ink Low",
"priority": "Low"
"priority": "Medium"
}
],
"name": "PrinterInkLow",
@@ -21,12 +36,12 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "EStopPulse_Fleeting",
"label": "E-Stop Circuit Pulse",
"priority": "Critical"
"name": "ConveyorOverload",
"label": "Conveyor Motor Overload",
"priority": "Medium"
}
],
"name": "EStopPulse_Fleeting",
"name": "ConveyorOverload",
"tagType": "AtomicTag"
},
{
@@ -51,27 +66,12 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "LabelerFault",
"label": "Labeler Fault",
"priority": "High"
}
],
"name": "LabelerFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "CapperTorqueLow",
"label": "Capper Torque Low",
"name": "ShrinkTunnelTemp_Chatter",
"label": "Shrink Tunnel Temp Deviation",
"priority": "Low"
}
],
"name": "CapperTorqueLow",
"name": "ShrinkTunnelTemp_Chatter",
"tagType": "AtomicTag"
},
{
@@ -96,12 +96,12 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "GuardDoorOpen",
"label": "Guard Door Open",
"name": "CapperTorqueLow",
"label": "Capper Torque Low",
"priority": "Low"
}
],
"name": "GuardDoorOpen",
"name": "CapperTorqueLow",
"tagType": "AtomicTag"
},
{
@@ -111,12 +111,27 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ShrinkTunnelTemp_Chatter",
"label": "Shrink Tunnel Temp Deviation",
"priority": "Low"
"name": "EStopPulse_Fleeting",
"label": "E-Stop Circuit Pulse",
"priority": "Critical"
}
],
"name": "ShrinkTunnelTemp_Chatter",
"name": "EStopPulse_Fleeting",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "LabelerFault",
"label": "Labeler Fault",
"priority": "High"
}
],
"name": "LabelerFault",
"tagType": "AtomicTag"
},
{
@@ -133,20 +148,5 @@
],
"name": "FillerLevelDeviation",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ConveyorOverload",
"label": "Conveyor Motor Overload",
"priority": "High"
}
],
"name": "ConveyorOverload",
"tagType": "AtomicTag"
}
]

View File

@@ -1,79 +1,4 @@
[
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "T101_LevelHigh",
"label": "Tank 101 Level High",
"priority": "High"
}
],
"name": "T101_LevelHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ManifoldLeakDetect",
"label": "Manifold Leak Detected",
"priority": "Low"
}
],
"name": "ManifoldLeakDetect",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "TransferPumpFault",
"label": "Transfer Pump Fault",
"priority": "High"
}
],
"name": "TransferPumpFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "PumpSealFlushLow_Fleeting",
"label": "Pump Seal Flush Flow Low",
"priority": "Low"
}
],
"name": "PumpSealFlushLow_Fleeting",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "VaporRecoveryFault",
"label": "Vapor Recovery Unit Fault",
"priority": "Low"
}
],
"name": "VaporRecoveryFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -83,27 +8,12 @@
"setpointA": 1.0,
"name": "T103_TempHigh",
"label": "Tank 103 Temp High",
"priority": "Low"
"priority": "Medium"
}
],
"name": "T103_TempHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "T104_PressHigh",
"label": "Tank 104 Pressure High",
"priority": "Low"
}
],
"name": "T104_PressHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -126,12 +36,12 @@
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ContainmentSumpHigh",
"label": "Containment Sump Level High",
"priority": "Critical"
"name": "VaporRecoveryFault",
"label": "Vapor Recovery Unit Fault",
"priority": "Low"
}
],
"name": "ContainmentSumpHigh",
"name": "VaporRecoveryFault",
"tagType": "AtomicTag"
},
{
@@ -148,5 +58,95 @@
],
"name": "T105_LevelXmtrFail_Standing",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "T104_PressHigh",
"label": "Tank 104 Pressure High",
"priority": "Low"
}
],
"name": "T104_PressHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "PumpSealFlushLow_Fleeting",
"label": "Pump Seal Flush Flow Low",
"priority": "Low"
}
],
"name": "PumpSealFlushLow_Fleeting",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "T101_LevelHigh",
"label": "Tank 101 Level High",
"priority": "High"
}
],
"name": "T101_LevelHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "TransferPumpFault",
"label": "Transfer Pump Fault",
"priority": "Medium"
}
],
"name": "TransferPumpFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ContainmentSumpHigh",
"label": "Containment Sump Level High",
"priority": "Critical"
}
],
"name": "ContainmentSumpHigh",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "ManifoldLeakDetect",
"label": "Manifold Leak Detected",
"priority": "Low"
}
],
"name": "ManifoldLeakDetect",
"tagType": "AtomicTag"
}
]

View File

@@ -1,79 +1,4 @@
[
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "AirHeaderPressLow",
"label": "Instrument Air Pressure Low",
"priority": "Critical"
}
],
"name": "AirHeaderPressLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "WaterSoftenerFault",
"label": "Water Softener Fault",
"priority": "Low"
}
],
"name": "WaterSoftenerFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "AirDryerDewpoint_Chatter",
"label": "Air Dryer Dewpoint High",
"priority": "Low"
}
],
"name": "AirDryerDewpoint_Chatter",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "CoolingTowerVibration",
"label": "Cooling Tower Fan Vibration",
"priority": "Low"
}
],
"name": "CoolingTowerVibration",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "N2PressLow",
"label": "Nitrogen Pressure Low",
"priority": "Low"
}
],
"name": "N2PressLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -119,6 +44,81 @@
"name": "UPSOnBattery",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "AirHeaderPressLow",
"label": "Instrument Air Pressure Low",
"priority": "Critical"
}
],
"name": "AirHeaderPressLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "CoolingTowerVibration",
"label": "Cooling Tower Fan Vibration",
"priority": "Low"
}
],
"name": "CoolingTowerVibration",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "N2PressLow",
"label": "Nitrogen Pressure Low",
"priority": "Medium"
}
],
"name": "N2PressLow",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "WaterSoftenerFault",
"label": "Water Softener Fault",
"priority": "Low"
}
],
"name": "WaterSoftenerFault",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
"alarms": [
{
"mode": "Equality",
"setpointA": 1.0,
"name": "AirDryerDewpoint_Chatter",
"label": "Air Dryer Dewpoint High",
"priority": "Low"
}
],
"name": "AirDryerDewpoint_Chatter",
"tagType": "AtomicTag"
},
{
"valueSource": "memory",
"dataType": "Boolean",
@@ -128,7 +128,7 @@
"setpointA": 1.0,
"name": "GlycolTempHigh",
"label": "Glycol Supply Temp High",
"priority": "Low"
"priority": "Medium"
}
],
"name": "GlycolTempHigh",

View File

@@ -1,4 +0,0 @@
{
"demoTimeRemaining": 7197,
"systemUID": "74d9b05c-8099-426f-b466-2ab5a2e70b2f"
}

View File

@@ -1,16 +0,0 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"config.json"
],
"attributes": {
"lastModification": {
"actor": "unknown",
"timestamp": "2026-07-16T16:18:56Z"
},
"lastModificationSignature": "61a3d9f3963e46d707e2a5482cd15ca4eb9a9c3a7f5d185ae83f7097c6280633"
}
}

View File

@@ -0,0 +1,9 @@
{
"pages": {
"/": {
"title": "Alarm Analysis",
"viewPath": "PrimeControls/Dashboard"
}
},
"sharedDocks": {}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"config.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,95 @@
{
"custom": {
"PrimeControls": {
"query": {
"areas": [],
"endMs": 1784233045923,
"priorities": [],
"rangePreset": "8h",
"refreshToken": 0,
"search": "",
"startMs": 1784204245923,
"states": []
},
"ui": {
"badActorFocus": "",
"selectedTab": 0
}
}
},
"propConfig": {
"custom.PrimeControls": {
"persistent": true
},
"props.auth": {
"access": "PRIVATE",
"persistent": false
},
"props.device.accelerometer": {
"access": "SYSTEM",
"persistent": false
},
"props.device.identifier": {
"access": "SYSTEM",
"persistent": false
},
"props.device.timezone": {
"access": "SYSTEM",
"persistent": false
},
"props.device.type": {
"access": "SYSTEM",
"persistent": false
},
"props.device.userAgent": {
"access": "SYSTEM",
"persistent": false
},
"props.gateway": {
"access": "SYSTEM",
"persistent": false
},
"props.geolocation.data": {
"access": "SYSTEM",
"persistent": false
},
"props.geolocation.permissionGranted": {
"access": "SYSTEM",
"persistent": false
},
"props.host": {
"access": "SYSTEM",
"persistent": false
},
"props.id": {
"access": "SYSTEM",
"persistent": false
},
"props.lastActivity": {
"access": "SYSTEM",
"persistent": false
},
"props.offline.capable": {
"access": "SYSTEM",
"persistent": false
},
"props.offline.enabled": {
"access": "SYSTEM",
"persistent": false
},
"props.offline.lastSynced": {
"access": "SYSTEM",
"persistent": false
}
},
"props": {
"address": "172.18.0.1",
"device": {},
"geolocation": {},
"locale": "en-US",
"offline": {},
"securityLevels": [],
"theme": "light-cool",
"timeZoneId": "America/Chicago"
}
}

View File

@@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"props.json"
],
"attributes": {
"lastModificationSignature": "3d8f163b8f2bb09be0bd014e7ee7d798223ddf7b5019b1a9fa95ab63e56b2958",
"lastModification": {
"actor": "admin",
"timestamp": "2026-07-16T20:18:00Z"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderRadius": "8px",
"boxShadow": "0 1px 3px rgba(0,0,0,0.12)",
"padding": "12px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,12 @@
{
"base": {
"style": {
"color": "var(--neutral-70)",
"fontSize": "12px",
"fontWeight": "bold",
"letterSpacing": "0.08em",
"marginBottom": "8px",
"textTransform": "uppercase"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,13 @@
{
"base": {
"style": {
"backgroundColor": "#D6455026",
"borderRadius": "10px",
"color": "#D64550",
"fontSize": "11px",
"fontWeight": "bold",
"paddingLeft": "6px",
"paddingRight": "6px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,13 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-30)",
"borderRadius": "10px",
"color": "var(--neutral-70)",
"fontSize": "11px",
"fontWeight": "bold",
"paddingLeft": "6px",
"paddingRight": "6px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,13 @@
{
"base": {
"style": {
"backgroundColor": "#2E9E5B26",
"borderRadius": "10px",
"color": "#2E9E5B",
"fontSize": "11px",
"fontWeight": "bold",
"paddingLeft": "6px",
"paddingRight": "6px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,9 @@
{
"base": {
"style": {
"color": "var(--neutral-50)",
"fontStyle": "italic",
"textAlign": "center"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#2E9E5B",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#7CB342",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#E5C453",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#E8883A",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#D64550",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#8A94A6",
"borderRadius": "8px",
"color": "#FFFFFF",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,8 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-20)",
"padding": "12px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#D64550",
"borderRadius": "4px",
"color": "#FFFFFF",
"fontSize": "12px",
"fontWeight": "bold",
"paddingBottom": "2px",
"paddingLeft": "8px",
"paddingRight": "8px",
"paddingTop": "2px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#8A94A6",
"borderRadius": "4px",
"color": "#FFFFFF",
"fontSize": "12px",
"fontWeight": "bold",
"paddingBottom": "2px",
"paddingLeft": "8px",
"paddingRight": "8px",
"paddingTop": "2px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#E8883A",
"borderRadius": "4px",
"color": "#FFFFFF",
"fontSize": "12px",
"fontWeight": "bold",
"paddingBottom": "2px",
"paddingLeft": "8px",
"paddingRight": "8px",
"paddingTop": "2px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#5B9BD5",
"borderRadius": "4px",
"color": "#FFFFFF",
"fontSize": "12px",
"fontWeight": "bold",
"paddingBottom": "2px",
"paddingLeft": "8px",
"paddingRight": "8px",
"paddingTop": "2px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#E5C453",
"borderRadius": "4px",
"color": "#FFFFFF",
"fontSize": "12px",
"fontWeight": "bold",
"paddingBottom": "2px",
"paddingLeft": "8px",
"paddingRight": "8px",
"paddingTop": "2px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#D6455026",
"borderRadius": "6px",
"color": "#D64550",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#8A94A626",
"borderRadius": "6px",
"color": "#8A94A6",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#E8883A26",
"borderRadius": "6px",
"color": "#E8883A",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#5B9BD526",
"borderRadius": "6px",
"color": "#5B9BD5",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "#E5C45326",
"borderRadius": "6px",
"color": "#E5C453",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,8 @@
{
"base": {
"style": {
"backgroundColor": "#3B7DD818",
"color": "#3B7DD8"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,9 @@
{
"base": {
"style": {
"backgroundColor": "#D6455018",
"color": "#D64550",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,8 @@
{
"base": {
"style": {
"backgroundColor": "#2E9E5B18",
"color": "#2E9E5B"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,16 @@
{
"base": {
"style": {
"borderBottomColor": "#3B7DD8",
"borderBottomStyle": "solid",
"borderBottomWidth": "3px",
"color": "var(--neutral-90)",
"cursor": "pointer",
"fontWeight": "bold",
"paddingBottom": "6px",
"paddingLeft": "16px",
"paddingRight": "16px",
"paddingTop": "8px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,23 @@
{
"base": {
"style": {
"borderBottomColor": "rgba(0,0,0,0)",
"borderBottomStyle": "solid",
"borderBottomWidth": "3px",
"color": "var(--neutral-60)",
"cursor": "pointer",
"paddingBottom": "6px",
"paddingLeft": "16px",
"paddingRight": "16px",
"paddingTop": "8px"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"color": "var(--neutral-90)"
}
}
]
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,9 @@
{
"base": {
"style": {
"color": "var(--neutral-90)",
"fontSize": "28px",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,9 @@
{
"base": {
"style": {
"color": "var(--neutral-90)",
"fontSize": "22px",
"fontWeight": "bold"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,8 @@
{
"base": {
"style": {
"color": "var(--neutral-60)",
"fontSize": "12px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,10 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderRadius": "8px",
"boxShadow": "0 1px 3px rgba(0,0,0,0.12)",
"padding": "8px"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,93 @@
{
"custom": {},
"params": {
"icon": null,
"message": null
},
"propConfig": {
"params.icon": {
"paramDirection": "input",
"persistent": false
},
"params.message": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "icon"
},
"position": {
"basis": "48px",
"shrink": 0
},
"propConfig": {
"props.path": {
"binding": {
"config": {
"path": "view.params.icon"
},
"transforms": [
{
"code": "\treturn 'material/' + (value or 'inbox')",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"color": "var(--neutral-50)",
"path": "material/inbox",
"style": {
"fontSize": "40px"
}
},
"type": "ia.display.icon"
},
{
"meta": {
"name": "msg"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.message"
},
"transforms": [
{
"code": "\treturn value or 'No alarm events in the selected range'",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Empty"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "column",
"style": {
"alignItems": "center",
"justifyContent": "center"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {
"lastModificationSignature": "44b87b06b842940d391b9bafd34557de0ac8a5005f6ee91844ac9dd2f18c0f04",
"lastModification": {
"actor": "admin",
"timestamp": "2026-07-16T20:14:21Z"
}
}
}

View File

@@ -0,0 +1,134 @@
{
"custom": {},
"params": {},
"propConfig": {
"params.health": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "grade"
},
"propConfig": {
"props.style.classes": {
"binding": {
"config": {
"path": "view.params.health"
},
"transforms": [
{
"code": "\ttry:\n\t\tg \u003d value[\u0027grade\u0027]\n\texcept:\n\t\tg \u003d None\n\treturn \u0027PrimeControls/Grade/\u0027 + (g if g in [\u0027A\u0027, \u0027B\u0027, \u0027C\u0027, \u0027D\u0027, \u0027F\u0027] else \u0027NA\u0027)",
"type": "script"
}
],
"type": "property"
}
},
"props.text": {
"binding": {
"config": {
"path": "view.params.health"
},
"transforms": [
{
"code": "\ttry:\n\t\treturn value[\u0027grade\u0027] or \u0027N/A\u0027\n\texcept:\n\t\treturn \u0027N/A\u0027",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "30px",
"paddingBottom": "2px",
"paddingLeft": "14px",
"paddingRight": "14px",
"paddingTop": "2px",
"textAlign": "center"
}
},
"type": "ia.display.label"
},
{
"children": [
{
"meta": {
"name": "title"
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold"
},
"text": "Alarm Health"
},
"type": "ia.display.label"
},
{
"meta": {
"name": "score"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.health"
},
"transforms": [
{
"code": "\ttry:\n\t\ts \u003d value[\u0027score\u0027]\n\t\treturn \u0027Score %d - click for detail\u0027 % round(s) if s is not None else \u0027no data in range\u0027\n\texcept:\n\t\treturn \u0027no data in range\u0027",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "scoreCol"
},
"props": {
"direction": "column"
},
"type": "ia.container.flex"
}
],
"events": {
"dom": {
"onClick": {
"config": {
"script": "\tsystem.perspective.openPopup(\u0027PC_HealthScore\u0027, \u0027PrimeControls/Popups/HealthScore\u0027, params \u003d {\u0027health\u0027: self.view.params.health}, showCloseIcon \u003d True, draggable \u003d True)"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "root"
},
"props": {
"style": {
"alignItems": "center",
"cursor": "pointer",
"gap": "10px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,94 @@
{
"custom": {},
"params": {
"count": null,
"max": null
},
"propConfig": {
"params.count": {
"paramDirection": "input",
"persistent": false
},
"params.max": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "cell"
},
"position": {
"grow": 1
},
"propConfig": {
"props.style.backgroundColor": {
"binding": {
"config": {
"path": "view.params.count"
},
"transforms": [
{
"code": "\ttry:\n\t\tm = self.view.params.max\n\t\tc = value or 0\n\t\tif not m or m <= 0 or c <= 0:\n\t\t\treturn 'rgba(59,125,216,0.06)'\n\t\ta = 0.15 + 0.85 * (float(c) / m)\n\t\treturn 'rgba(59,125,216,%.2f)' % min(a, 1.0)\n\texcept:\n\t\treturn 'rgba(59,125,216,0.06)'",
"type": "script"
}
],
"type": "property"
}
},
"props.style.color": {
"binding": {
"config": {
"path": "view.params.count"
},
"transforms": [
{
"code": "\ttry:\n\t\tm = self.view.params.max\n\t\tif m and value and float(value) / m > 0.55:\n\t\t\treturn '#FFFFFF'\n\texcept:\n\t\tpass\n\treturn 'var(--neutral-90)'",
"type": "script"
}
],
"type": "property"
}
},
"props.text": {
"binding": {
"config": {
"path": "view.params.count"
},
"transforms": [
{
"code": "\treturn '' if not value else value",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"borderRadius": "2px",
"fontSize": "10px",
"marginBottom": "1px",
"marginRight": "1px",
"textAlign": "center"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "row",
"style": {
"alignItems": "stretch"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,121 @@
{
"custom": {},
"params": {
"icon": null,
"severity": null,
"tab": null,
"text": null
},
"propConfig": {
"params.icon": {
"paramDirection": "input",
"persistent": false
},
"params.severity": {
"paramDirection": "input",
"persistent": false
},
"params.tab": {
"paramDirection": "input",
"persistent": false
},
"params.text": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "icon"
},
"position": {
"basis": "24px",
"shrink": 0
},
"propConfig": {
"props.color": {
"binding": {
"config": {
"path": "view.params.severity"
},
"transforms": [
{
"code": "\tcolors = {0: '#D64550', 1: '#E8883A', 2: '#3B7DD8', 3: 'var(--neutral-60)'}\n\treturn colors.get(value, 'var(--neutral-60)')",
"type": "script"
}
],
"type": "property"
}
},
"props.path": {
"binding": {
"config": {
"path": "view.params.icon"
},
"transforms": [
{
"code": "\treturn 'material/' + (value or 'insights')",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"path": "material/insights",
"style": {
"fontSize": "18px"
}
},
"type": "ia.display.icon"
},
{
"meta": {
"name": "text"
},
"position": {
"grow": 1
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.text"
},
"transforms": [
{
"code": "\treturn value or ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "row",
"style": {
"alignItems": "center",
"gap": "8px",
"paddingBottom": "4px",
"paddingTop": "4px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {
"lastModificationSignature": "75b1aa709e8638ac045f15b7a6d3543d023b8f3e886e2f9f1c263c0390c4fe9d",
"lastModification": {
"actor": "admin",
"timestamp": "2026-07-16T20:45:13Z"
}
}
}

View File

@@ -0,0 +1,199 @@
{
"custom": {},
"params": {},
"propConfig": {
"params.delta": {
"paramDirection": "input",
"persistent": false
},
"params.label": {
"paramDirection": "input",
"persistent": false
},
"params.unit": {
"paramDirection": "input",
"persistent": false
},
"params.value": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "lbl"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.label"
},
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted",
"lineHeight": "1.1"
}
},
"type": "ia.display.label",
"position": {
"shrink": 0
}
},
{
"children": [
{
"meta": {
"name": "value"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.value"
},
"transforms": [
{
"code": "\treturn value if value is not None else '--'",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Kpi",
"lineHeight": "1.1"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "unit"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.unit"
},
"transforms": [
{
"code": "\treturn value or ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted",
"lineHeight": "1.1"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "valueRow"
},
"position": {
"grow": 1,
"shrink": 1,
"basis": "auto"
},
"props": {
"style": {
"alignItems": "baseline",
"gap": "4px"
}
},
"type": "ia.container.flex"
},
{
"meta": {
"name": "chip"
},
"propConfig": {
"position.display": {
"binding": {
"config": {
"path": "view.params.delta"
},
"transforms": [
{
"code": "\treturn value is not None",
"type": "script"
}
],
"type": "property"
}
},
"props.style.classes": {
"binding": {
"config": {
"path": "view.params.delta"
},
"transforms": [
{
"code": "\tbase = 'PrimeControls/Chip/Flat'\n\ttry:\n\t\tif value and value['good'] == True:\n\t\t\tbase = 'PrimeControls/Chip/Good'\n\t\telif value and value['good'] == False:\n\t\t\tbase = 'PrimeControls/Chip/Bad'\n\texcept:\n\t\tpass\n\treturn base",
"type": "script"
}
],
"type": "property"
}
},
"props.text": {
"binding": {
"config": {
"path": "view.params.delta"
},
"transforms": [
{
"code": "\tif not value:\n\t\treturn ''\n\ttry:\n\t\tchip = PrimeControls.fmt.delta_chip(value)\n\t\treturn '%s %s' % (chip['arrow'], chip['text'])\n\texcept:\n\t\treturn ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"alignSelf": "flex-start",
"padding": "0 6px"
}
},
"type": "ia.display.label",
"position": {
"shrink": 0
}
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "column",
"style": {
"classes": "PrimeControls/Card",
"justifyContent": "space-between",
"overflow": "hidden",
"padding": "6px 12px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,137 @@
{
"custom": {},
"params": {
"count": null,
"pct": null,
"priority_name": null
},
"propConfig": {
"params.count": {
"paramDirection": "input",
"persistent": false
},
"params.pct": {
"paramDirection": "input",
"persistent": false
},
"params.priority_name": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "name"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.priority_name"
},
"transforms": [
{
"code": "\treturn value or 'Unknown'",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "count"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.count"
},
"transforms": [
{
"code": "\treturn PrimeControls.fmt.num(value)",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Big"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "pct"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.pct"
},
"transforms": [
{
"code": "\treturn PrimeControls.fmt.pct(value) + ' of events' if value is not None else ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"propConfig": {
"props.style.classes": {
"binding": {
"config": {
"path": "view.params.priority_name"
},
"transforms": [
{
"code": "\tnames = ['Diagnostic', 'Low', 'Medium', 'High', 'Critical']\n\tn = value if value in names else 'Diagnostic'\n\treturn 'PrimeControls/Card PrimeControls/PrioritySoft/' + n",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"direction": "column",
"style": {
"alignItems": "center",
"classes": "PrimeControls/Card",
"gap": "2px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,207 @@
{
"custom": {},
"params": {
"detail": null,
"key": null,
"label": null,
"score": null,
"weight": null
},
"propConfig": {
"params.detail": {
"paramDirection": "input",
"persistent": false
},
"params.key": {
"paramDirection": "input",
"persistent": false
},
"params.label": {
"paramDirection": "input",
"persistent": false
},
"params.score": {
"paramDirection": "input",
"persistent": false
},
"params.weight": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"children": [
{
"meta": {
"name": "lbl"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.label"
},
"transforms": [
{
"code": "\treturn value or ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "score"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.score"
},
"transforms": [
{
"code": "\treturn '%d' % round(value) if value is not None else 'N/A'",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "topRow"
},
"props": {
"direction": "row",
"style": {
"justifyContent": "space-between"
}
},
"type": "ia.container.flex"
},
{
"children": [
{
"children": [],
"meta": {
"name": "fill"
},
"propConfig": {
"props.style.backgroundColor": {
"binding": {
"config": {
"path": "view.params.score"
},
"transforms": [
{
"code": "\ttry:\n\t\ts = float(value)\n\texcept:\n\t\treturn 'var(--neutral-40)'\n\tif s >= 80:\n\t\treturn '#2E9E5B'\n\tif s >= 60:\n\t\treturn '#E5C453'\n\treturn '#D64550'",
"type": "script"
}
],
"type": "property"
}
},
"props.style.width": {
"binding": {
"config": {
"path": "view.params.score"
},
"transforms": [
{
"code": "\ttry:\n\t\treturn '%d%%' % max(0, min(100, round(value)))\n\texcept:\n\t\treturn '0%'",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"direction": "row",
"style": {
"borderRadius": "4px"
}
},
"type": "ia.container.flex"
}
],
"meta": {
"name": "track"
},
"position": {
"basis": "8px",
"shrink": 0
},
"props": {
"direction": "row",
"style": {
"backgroundColor": "var(--neutral-30)",
"borderRadius": "4px"
}
},
"type": "ia.container.flex"
},
{
"meta": {
"name": "detail"
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.detail"
},
"transforms": [
{
"code": "\treturn value or ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted"
}
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "column",
"style": {
"gap": "2px",
"paddingBottom": "8px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,192 @@
{
"custom": {},
"params": {
"count": null,
"label": null,
"pct": null,
"rank": null,
"source": null
},
"propConfig": {
"params.count": {
"paramDirection": "input",
"persistent": false
},
"params.label": {
"paramDirection": "input",
"persistent": false
},
"params.pct": {
"paramDirection": "input",
"persistent": false
},
"params.rank": {
"paramDirection": "input",
"persistent": false
},
"params.source": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"meta": {
"name": "rank"
},
"position": {
"basis": "24px",
"shrink": 0
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.rank"
},
"transforms": [
{
"code": "\treturn '#%s' % value if value is not None else ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "lbl"
},
"position": {
"grow": 1
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.label"
},
"transforms": [
{
"code": "\treturn value or ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "count"
},
"position": {
"basis": "56px",
"shrink": 0
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.count"
},
"transforms": [
{
"code": "\treturn PrimeControls.fmt.num(value)",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"fontSize": "13px",
"fontWeight": "bold",
"textAlign": "right"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "pct"
},
"position": {
"basis": "48px",
"shrink": 0
},
"propConfig": {
"props.text": {
"binding": {
"config": {
"path": "view.params.pct"
},
"transforms": [
{
"code": "\treturn PrimeControls.fmt.pct(value) if value is not None else ''",
"type": "script"
}
],
"type": "property"
}
}
},
"props": {
"style": {
"classes": "PrimeControls/Text/Muted",
"textAlign": "right"
}
},
"type": "ia.display.label"
}
],
"events": {
"dom": {
"onClick": {
"config": {
"script": "\tself.session.custom.PrimeControls.ui.badActorFocus = self.view.params.source\n\tself.session.custom.PrimeControls.ui.selectedTab = 2"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "root"
},
"props": {
"direction": "row",
"style": {
"alignItems": "center",
"borderBottomColor": "var(--neutral-30)",
"borderBottomStyle": "solid",
"borderBottomWidth": "1px",
"cursor": "pointer",
"gap": "8px",
"paddingBottom": "4px",
"paddingTop": "4px"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,10 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {}
}

View File

@@ -0,0 +1,69 @@
{
"custom": {},
"params": {
"index": null,
"title": null
},
"propConfig": {
"params.index": {
"paramDirection": "input",
"persistent": false
},
"params.title": {
"paramDirection": "input",
"persistent": false
}
},
"props": {},
"root": {
"children": [
{
"events": {
"dom": {
"onClick": {
"config": {
"script": "\tself.session.custom.PrimeControls.ui.selectedTab = self.view.params.index"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "btn"
},
"propConfig": {
"props.style.classes": {
"binding": {
"config": {
"expression": "if({view.params.index} = {session.custom.PrimeControls.ui.selectedTab}, 'PrimeControls/Tab/Active', 'PrimeControls/Tab/Inactive')"
},
"type": "expr"
}
},
"props.text": {
"binding": {
"config": {
"path": "view.params.title"
},
"type": "property"
}
}
},
"props": {},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "row",
"style": {
"alignItems": "center",
"justifyContent": "center"
}
},
"type": "ia.container.flex"
}
}

View File

@@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"view.json"
],
"attributes": {
"lastModificationSignature": "04bdfb9c4eecc4f8cf35a85994e6790ef8d62a1d1aa00553e4dc4193e171a110",
"lastModification": {
"actor": "admin",
"timestamp": "2026-07-16T20:31:35Z"
}
}
}

View File

@@ -0,0 +1,330 @@
{
"custom": {},
"events": {
"system": {
"onStartup": {
"config": {
"script": "\tq = self.session.custom.PrimeControls.query\n\tif not q.startMs or q.startMs == 0:\n\t\tnow = system.date.toMillis(system.date.now())\n\t\tq.endMs = now\n\t\tq.startMs = now - 8 * 3600 * 1000\n\t\tq.rangePreset = '8h'"
},
"scope": "G",
"type": "script"
}
}
},
"params": {},
"propConfig": {
"custom.bundle": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.query.refreshToken} + '|' + {session.custom.PrimeControls.query.startMs} + '|' + {session.custom.PrimeControls.query.endMs}"
},
"transforms": [
{
"code": "\tq = self.session.custom.PrimeControls.query\n\tif not q.startMs or not q.endMs:\n\t\treturn None\n\treturn PrimeControls.alarms.getDashboardBundle(q.startMs, q.endMs, {'priorities': list(q.priorities), 'areas': list(q.areas), 'states': list(q.states), 'search': q.search})",
"type": "script"
}
],
"type": "expr"
}
}
},
"props": {
"defaultSize": {
"height": 900,
"width": 1600
}
},
"root": {
"children": [
{
"meta": {
"name": "header"
},
"position": {
"basis": "150px",
"shrink": 0
},
"propConfig": {
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
}
},
"props": {
"path": "PrimeControls/Shell/Header"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "filterBar"
},
"position": {
"basis": "auto",
"shrink": 0
},
"propConfig": {
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
},
"position.display": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.ui.selectedTab} != 0"
},
"type": "expr"
}
}
},
"props": {
"path": "PrimeControls/Shell/FilterBar",
"style": {
"minHeight": "56px"
}
},
"type": "ia.display.view"
},
{
"children": [
{
"meta": {
"name": "tabBtn0"
},
"position": {
"basis": "140px",
"shrink": 0
},
"props": {
"params": {
"index": 0,
"title": "Overview"
},
"path": "PrimeControls/Components/TabButton"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabBtn1"
},
"position": {
"basis": "140px",
"shrink": 0
},
"props": {
"params": {
"index": 1,
"title": "Analysis"
},
"path": "PrimeControls/Components/TabButton"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabBtn2"
},
"position": {
"basis": "140px",
"shrink": 0
},
"props": {
"params": {
"index": 2,
"title": "Bad Actors"
},
"path": "PrimeControls/Components/TabButton"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabBtn3"
},
"position": {
"basis": "140px",
"shrink": 0
},
"props": {
"params": {
"index": 3,
"title": "Journal"
},
"path": "PrimeControls/Components/TabButton"
},
"type": "ia.display.view"
}
],
"meta": {
"name": "tabBar"
},
"position": {
"basis": "42px",
"shrink": 0
},
"props": {
"style": {
"borderBottomColor": "var(--neutral-40)",
"borderBottomStyle": "solid",
"borderBottomWidth": "1px"
}
},
"type": "ia.container.flex"
},
{
"children": [
{
"meta": {
"name": "tabOverview"
},
"position": {
"grow": 1
},
"propConfig": {
"position.display": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.ui.selectedTab} = 0"
},
"type": "expr"
}
},
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
}
},
"props": {
"path": "PrimeControls/Tabs/Overview"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabAnalysis"
},
"position": {
"grow": 1
},
"propConfig": {
"position.display": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.ui.selectedTab} = 1"
},
"type": "expr"
}
},
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
}
},
"props": {
"path": "PrimeControls/Tabs/Analysis"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabBadActors"
},
"position": {
"grow": 1
},
"propConfig": {
"position.display": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.ui.selectedTab} = 2"
},
"type": "expr"
}
},
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
}
},
"props": {
"path": "PrimeControls/Tabs/BadActors"
},
"type": "ia.display.view"
},
{
"meta": {
"name": "tabJournal"
},
"position": {
"grow": 1
},
"propConfig": {
"position.display": {
"binding": {
"config": {
"expression": "{session.custom.PrimeControls.ui.selectedTab} = 3"
},
"type": "expr"
}
},
"props.params.bundle": {
"binding": {
"config": {
"path": "view.custom.bundle"
},
"type": "property"
}
}
},
"props": {
"path": "PrimeControls/Tabs/Journal"
},
"type": "ia.display.view"
}
],
"meta": {
"name": "tabContent"
},
"position": {
"grow": 1
},
"props": {
"direction": "column"
},
"type": "ia.container.flex"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "column",
"style": {
"classes": "PrimeControls/PageBg",
"gap": "10px"
}
},
"type": "ia.container.flex"
}
}

Some files were not shown because too many files have changed in this diff Show More