Initial comment: TPA8 SCADA

This commit is contained in:
Salijoghli 2026-02-28 17:04:25 +04:00
commit 3565bef0b6
6289 changed files with 2373312 additions and 0 deletions

View File

@ -0,0 +1,101 @@
import datetime
import hashlib
import hmac
import boto3
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, regionName, serviceName):
kDate = sign(("AWS4" + key).encode("utf-8"), dateStamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, "aws4_request")
return kSigning
def build_querystring(access_key, session_key, algorithm, amz_date, credential_scope):
query_strings = {
"X-Amz-Algorithm": algorithm,
"X-Amz-Credential": quote_plus(access_key + "/" + credential_scope),
"X-Amz-Date": amz_date,
#"X-Amz-Security-Token": quote_plus(session_key),
"X-Amz-SignedHeaders": "host",
}
keys = list(query_strings.keys())
keys.sort()
query = []
for key in keys:
query.append("{}={}".format(key, query_strings[key]))
canonical_query_string = "&".join(
query
#["{}={}".format(key, value) for key, value in query_strings.items()]
)
return canonical_query_string
def make_websocket_connection(api_id, region, stage, credentials):
method = "GET"
service = "execute-api"
host = "{}.{}.{}.amazonaws.com".format(api_id, service, region)
canonical_uri = "/{}".format(stage)
access_key = credentials["AccessKey"]
secret_key = credentials["SecretKey"]
session_key = credentials["SessionKey"]
now = datetime.datetime.utcnow()
amz_date = now.strftime("%Y%m%dT%H%M%SZ")
datestamp = now.strftime("%Y%m%d")
canonical_headers = "host:" + host + "\n"
signed_headers = "host"
algorithm = "AWS4-HMAC-SHA256"
credential_scope = "/".join([datestamp, region, service, "aws4_request"])
canonical_querystring = build_querystring(
access_key, session_key, algorithm, amz_date, credential_scope
)
payload_hash = hashlib.sha256(("").encode("utf-8")).hexdigest()
canonical_request = "\n".join(
[
method,
canonical_uri,
"",
#canonical_querystring,
canonical_headers,
signed_headers,
payload_hash,
]
)
string_to_sign = "\n".join(
[
algorithm,
amz_date,
credential_scope,
hashlib.sha256(canonical_request.encode("utf-8")).hexdigest(),
]
)
signing_key = getSignatureKey(secret_key, datestamp, region, service)
signature = hmac.new(
signing_key, string_to_sign.encode("utf-8"), hashlib.sha256
).hexdigest()
canonical_querystring += "&X-Amz-Signature=" + signature
request_url = "wss://{}/{}".format(host, stage)
auth_header = algorithm + " Credential=" + access_key + "/" + credential_scope + ", SignedHeaders=" + signed_headers + ", Signature=" + signature
#print('-H "Authorization":"' + auth_header +'" -H "X-Amz-Date":"' + amz_date + '" -H "X-Amz-Security-Token":"' + session_key + '" ')
request_headers = {
"Authorization":auth_header,
"X-Amz-Date": amz_date,
"X-Amz-Security-Token": session_key
}
return request_url, request_headers

View File

@ -0,0 +1,16 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"code.py"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "852ad58d9980d76cd5a23297030ed74e6d02868fc81f4a95726be26a988ce3a0"
}
}

View File

@ -0,0 +1,43 @@
import re, sys
import datetime
import base64
import json
import com.amazonaws.services.s3.AmazonS3ClientBuilder as AmazonS3ClientBuilder
import com.amazonaws.auth.profile.ProfileCredentialsProvider as ProfileCredentialsProvider
import com.amazonaws.auth.AWSStaticCredentialsProvider as AWSStaticCredentialsProvider
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder as AWSSecretsManagerClientBuilder
import com.amazonaws.services.secretsmanager.model.GetSecretValueRequest as GetSecretValueRequest
import com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException as AWSSecretsManagerException
import com.amazonaws.services.securitytoken.AWSSecurityTokenService as AWSSecurityTokenService ;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder as AWSSecurityTokenServiceClientBuilder;
# Constants
class GetCredentials():
'''
Gets aws credentials for the provided path and region.
'''
def __init__(self, path, profile, region):
self.path = path
self.profile = profile
self.region = region
self.credentials = self._get_credentials()
# self.client = self._get_s3_client()
def _get_credentials(self):
'''Gets the credentials for the AWS account which the s3 bucket is in.
Args:
Returns:
credentials : The aws credentials for a given profile stored on the server.
'''
credentials = ProfileCredentialsProvider(self.path, self.profile).getCredentials()
return credentials

View File

@ -0,0 +1,16 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"code.py"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "bf0a2b8d4ed52b865d211faf59778703bfbbe8ae22e48de1ea9a9b501bf19311"
}
}

View File

@ -0,0 +1,19 @@
import time
def close_websckt():
fc = system.tag.readBlocking(["Configuration/FC"])
fc_value = fc[0].value
tag_provider = "[%s_SCADA_TAG_PROVIDER]" % (fc_value)
system.tag.writeBlocking([tag_provider + "System/close_socket"],[1])
time.sleep(1)
system.tag.writeBlocking([tag_provider + "System/close_socket"],[0])
logger = system.util.getLogger("%s-Project-Update" % (fc))
logger.info("Web-Socket closed due to project update")
def check_web_socket():
request_to_close = system.tag.readBlocking(["System/close_socket"])
request_to_close_val = request_to_close[0].value
if request_to_close_val:
return True
else:
return False

View File

@ -0,0 +1,16 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"code.py"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "dfe6b92955838658aa2893d8eb7a455312f13fdc1550f80914e79ead49392177"
}
}

View File

@ -0,0 +1,66 @@
from java.net.http import HttpClient;
from java.net.http import WebSocket;
from java.net import URI
import json
class listener(WebSocket.Listener):
def __init__(self,whid):
self.whid = whid
self.alarms = {}
self.tag_provider ="[%s_SCADA_TAG_PROVIDER]" % (self.whid)
self.logger = system.util.getLogger("%s-Web-Socket-Listener" % (whid))
def onOpen(self, websocket):
on_open_subscribe = json.dumps({"action":"subscribe",
"parameters":{"siteId":self.whid}}
)
websocket.sendText(on_open_subscribe, True)
logger = system.util.getLogger("Web-Socket-OnOpen")
logger.info("message sent =" + str(on_open_subscribe))
def onText(self, websocket, data, last):
#
alarm_message = None
try:
json_data = json.loads(str(data))
alarm_message = json_data.get("type")
except ValueError as e:
self.logger.info("Unable to load Json object, malformed message")
if alarm_message == "alarm":
id = json_data.get("sourceId")
state = json_data.get("state")
if state == 1:
removed_value = self.alarms.pop(id, "No key found")
else:
self.alarms[id]= json_data
self.logger.info("this has been triggered")
self.logger.info("State is equal to " + str(state))
system.tag.writeBlocking([self.tag_provider + "System/aws_data"],
[system.util.jsonEncode(self.alarms)]
)
self.logger.info("Data written to tag : " + str(self.alarms))
self.logger.info("Response from server: " + str(data))
websocket.request(1)
# return None
def onClose(self, websocket, error):
# print("Socket is closed")
# logger = system.util.getLogger("OnClose-Web-Socket")
self.logger.info("Onclose method closed " + str(error))
def onError(self, websocket, error):
# logger = system.util.getLogger("OnError-Web-Socket")
self.logger.info("OnError method closed " + str(error))

View File

@ -0,0 +1,16 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"code.py"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "2f1d4b2f4bb236b9cdaecaeff66f7d6f6c9867351fb4319210fa5f57b526d0ee"
}
}

View File

@ -0,0 +1,21 @@
import json
class SendMessage():
def __init__(self, whid):
self.whid = whid
tag_path = "[%s_SCADA_TAG_PROVIDER]System/wbsckt_messages_send" % (whid)
tags_to_read = system.tag.readBlocking([tag_path])
self.messages_to_send = system.util.jsonDecode(tags_to_read[0].value)
system.tag.writeBlocking([tag_path],[system.util.jsonEncode({})])
self.message_list ={}
def build_message_list(self):
if self.messages_to_send:
self.message_list = json.dumps(self.messages_to_send)
else:
self.message_list = None

View File

@ -0,0 +1,16 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"code.py"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "8288b30358d563dbcffc68639718c4d69c4a04296427419bad71201dc1430f48"
}
}

View File

@ -0,0 +1,99 @@
{
"pages": {
"/": {
"title": "",
"viewPath": "Main-Views/Home"
},
"/Command": {
"title": "",
"viewPath": "Main-Views/CommandControl"
},
"/Fault_Codes": {
"title": "",
"viewPath": "Main-Views/Fault_Codes"
},
"/Help": {
"title": "Help",
"viewPath": "Main-Views/Help"
},
"/Real-Time": {
"title": "",
"viewPath": "Alarm-Views/RealTime"
},
"/Windows/Statistics": {
"title": "",
"viewPath": ""
},
"/Windows/Status": {
"title": "",
"viewPath": ""
}
},
"sharedDocks": {
"bottom": [
{
"anchor": "fixed",
"autoBreakpoint": 480,
"content": "cover",
"handle": "show",
"iconUrl": "material/notifications_active",
"id": "Docked-South",
"modal": false,
"resizable": false,
"show": "onDemand",
"size": 165,
"viewParams": {},
"viewPath": "Navigation-Views/Docked-South"
}
],
"cornerPriority": "top-bottom",
"left": [
{
"anchor": "fixed",
"autoBreakpoint": 805,
"content": "auto",
"handle": "autoHide",
"iconUrl": "",
"id": "Docked-West",
"modal": false,
"resizable": false,
"show": "auto",
"size": 70,
"viewParams": {},
"viewPath": "Navigation-Views/Docked-West"
}
],
"right": [
{
"anchor": "fixed",
"autoBreakpoint": 480,
"content": "cover",
"handle": "hide",
"iconUrl": "",
"id": "Docked-East",
"modal": false,
"resizable": false,
"show": "onDemand",
"size": 400,
"viewParams": {},
"viewPath": "PopUp-Views/Controller-Equipment/Information-Docked-East"
}
],
"top": [
{
"anchor": "fixed",
"autoBreakpoint": 480,
"content": "auto",
"handle": "hide",
"iconUrl": "",
"id": "",
"modal": false,
"resizable": false,
"show": "visible",
"size": 50,
"viewParams": {},
"viewPath": "Framework/Breakpoint"
}
]
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"config.json"
],
"attributes": {
"lastModificationSignature": "841c89799e6d9cb74ac904e03ba8c6340b1ad942f8a9ed425a109740f8697ef1",
"lastModification": {
"actor": "admin",
"timestamp": "2026-01-17T15:54:07Z"
}
}
}

View File

@ -0,0 +1,9 @@
{
"type": "AllOf",
"securityLevels": [
{
"name": "Authenticated",
"children": []
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"data.bin"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "6a0b94fd96dc2b6922bd18f70f13c7c93d467bc84813203e6ebfef3e053f0080"
}
}

View File

@ -0,0 +1,73 @@
{
"custom": {},
"propConfig": {
"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": "[0:0:0:0:0:0:0:1]",
"device": {},
"geolocation": {},
"locale": "en-US",
"offline": {},
"timeZoneId": "America/Los_Angeles"
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"props.json"
],
"attributes": {
"lastModificationSignature": "53ccc198eeaf547575e3fcdf55ffb434c1c05d83ab7de48f1c6092fd4c8ea970",
"lastModification": {
"actor": "admin",
"timestamp": "2026-01-29T12:09:46Z"
}
}
}

View File

@ -0,0 +1,3 @@
def onShutdown(session):
# system.perspective.logout()
pass

View File

@ -0,0 +1,17 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"onShutdown.py"
],
"attributes": {
"lastModificationSignature": "ac128e0e34b3cf6a9b392233b601da57d7287dd14688b7cdc26c0068e75b5d01",
"lastModification": {
"actor": "admin",
"timestamp": "2026-01-13T09:23:46Z"
},
"enabled": true
}
}

View File

@ -0,0 +1,12 @@
def onStartup(session):
tags_to_read = system.tag.readBlocking(["Configuration/FC", "Configuration/aws"])
session.custom.fc = tags_to_read[0].value
aws = system.util.jsonDecode( tags_to_read[1].value)
prefix = aws.get("prefix")
region = aws.get("region")
session.custom.aws.prefix = prefix
session.custom.aws.region = region
session.custom.covert = False
session.custom.download_url = None
session.custom.alarm_filter.show_map = False
session.custom.alarm_filter.magnificaiton = "x2"

View File

@ -0,0 +1,17 @@
{
"scope": "A",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"onStartup.py"
],
"attributes": {
"lastModificationSignature": "00b92523c7bcf30a63257d7be2c3f1e8687f7ff9118ceef0e2967bff3a48e35b",
"lastModification": {
"actor": "admin",
"timestamp": "2026-01-13T09:23:46Z"
},
"enabled": true
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "eab9cbe16c832dbbb54701584553038a50a435c3f2c40cd6428d9a21f78c3448"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"backgroundColor": "#B42222B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"lineHeight": "20px",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "83f26c834dbe18ee5c03f3bbd7bc20ccb9c021b1f449c3dfd48c3cd9457b5ce9"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"backgroundColor": "#FCC400B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"lineHeight": "20px",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "1f308e3f17e806bb9d0c18b91b29105fd86a041c1d303d964da6560d3e0926c3"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#FF0000B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "aff4f9e2df4969a2bf6328959e815eef8bec24ec2208b40fd6c30c75ea88c694"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#FF6000B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "6719beac1e2961b52f8ee92e1707f887e6c5d88e612ea10dfbe9ef4ac7fb3668"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#F00077B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "eab9cbe16c832dbbb54701584553038a50a435c3f2c40cd6428d9a21f78c3448"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"backgroundColor": "#B42222B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"lineHeight": "20px",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-11-29T11:42:36Z"
},
"lastModificationSignature": "a4b43ca8b9cec6cc4422b762f2e5fb4bed5c040e8dd192b2ad195126ff601268"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"backgroundColor": "#007EFCB3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"lineHeight": "20px",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-11-19T16:02:16Z"
},
"lastModificationSignature": "25ac903342d50f1a78d7f464e51c764924e894cd844d56f2ce09da7759b174ef"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#FF0000B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-11-19T15:51:20Z"
},
"lastModificationSignature": "da7605dae50bbdff8748bab60fd6d8dbb11957a71bf835e6d61239378d76bfe9"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#FFFF00B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-11-29T11:42:06Z"
},
"lastModificationSignature": "bce4f39610c03cea1d069b6b575968027c7b5d96538629848ae97df98f3626de"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#FF8000B3",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "4dbef54ec8fc29c5025eb79114830bf23500b5ccdd0264d192edf283a996b131"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#2B2B2B",
"borderColor": "#909090",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2025-11-19T15:51:20Z"
},
"lastModificationSignature": "2105d157fd667466b85c44ec0126a6f5bd4039ab696d5c9131920fdf7d7add14"
}
}

View File

@ -0,0 +1,15 @@
{
"base": {
"style": {
"backgroundColor": "#008000",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "597b1d7abfabae5933ee5155c11a3109bd31c583764fae05237bf397831f3389"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"backgroundColor": "#FFFFFF",
"borderColor": "#000000",
"borderStyle": "solid",
"borderWidth": "0.5px",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "14px",
"fontWeight": "bold",
"lineHeight": "20px",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "b3a828f40c06ba4f3b2ea7852db6dbba98c7c63f3af6395a43ae3f7b1966d27b"
}
}

View File

@ -0,0 +1,38 @@
{
"base": {
"style": {
"backgroundColor": "#3779AE",
"boxShadow": "none",
"color": "#FAFAFA",
"margin": "5px"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {
"backgroundColor": "var(--info)",
"boxShadow": "none"
},
"100%": {
"backgroundColor": "#448BB7",
"boxShadow": "none"
}
}
}
},
{
"pseudo": "active",
"style": {
"backgroundColor": "var(--info)",
"boxShadow": "none"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "1742fd6626c704c8171aa2650f1449e9495f4841c05b5b237763d5236c9dac6e"
}
}

View File

@ -0,0 +1,30 @@
{
"base": {
"style": {
"backgroundColor": "#FAFAFA",
"borderColor": "var(--neutral-100)",
"borderStyle": "solid",
"borderWidth": "1px",
"color": "#323232",
"fontWeight": "normal",
"margin": "5px"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {},
"100%": {
"borderWidth": "2px"
}
}
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "89fa94ef1bdf1f8e05e2cb494eaa6789fff639673a89e806e3a4376b2368ba6d"
}
}

View File

@ -0,0 +1,16 @@
{
"base": {
"style": {
"cursor": "pointer",
"fill": "var(--callToAction)"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"fill": "var(--callToAction--hover)"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "48f3c9eafcdffcdab435b1b72d828f3634bcc9f5fbb95c39fce8148845ff3419"
}
}

View File

@ -0,0 +1,8 @@
{
"base": {
"style": {
"color": "#FAFAFA",
"fontSize": "14px"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "72bffb3daae503d7558cd29f56888838347b66f08e1a289f991d26c2e539c6a7"
}
}

View File

@ -0,0 +1,9 @@
{
"base": {
"style": {
"fontSize": "20px",
"fontWeight": "bold",
"lineHeight": "32px"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "d6a6cd7b51db473de34046cd6c57189b9504919bbbc28f406dabc8f7eaae98ce"
}
}

View File

@ -0,0 +1,11 @@
{
"base": {
"style": {
"backgroundColor": "#555555",
"borderTopColor": "#FF8000",
"borderTopStyle": "solid",
"borderTopWidth": "4px",
"boxShadow": "0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "dfeda8574e0f90ad5ae4b44c0455b4029293b14b9d84949513af9c000459b0e8"
}
}

View File

@ -0,0 +1,25 @@
{
"base": {
"style": {
"backgroundColor": "var(--error)",
"borderStyle": "none",
"boxShadow": "none",
"margin": "5px",
"textTransform": "uppercase"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"backgroundColor": "var(--error)"
}
},
{
"pseudo": "active",
"style": {
"color": "var(--neutral-30)"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "3a433791edd2d47f0a73b4a78f627a835c93cef6933c3f8e37c525fa28640fcf"
}
}

View File

@ -0,0 +1,33 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderColor": "var(--error)",
"borderStyle": "solid",
"borderWidth": "1px",
"boxShadow": "none",
"color": "var(--error)",
"fontWeight": "normal",
"margin": "5px",
"textTransform": "uppercase",
"fill": "var(--error)"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {},
"100%": {
"backgroundColor": "var(--neutral-20)"
}
}
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "abc31ca6aa3179f3224fbd126e8f5c07c62b1b0a83f5f0e65301fbf507f65d23"
}
}

View File

@ -0,0 +1,11 @@
{
"base": {
"style": {
"backgroundColor": "#555555",
"borderTopColor": "#007EFC",
"borderTopStyle": "solid",
"borderTopWidth": "4px",
"boxShadow": "0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "b440f4e40ef48d5a77d621ce3101094c3e499bc9676c67fc4df9faf814fbae35"
}
}

View File

@ -0,0 +1,25 @@
{
"base": {
"style": {
"backgroundColor": "var(--info)",
"borderStyle": "none",
"boxShadow": "none",
"margin": "5px",
"textTransform": "uppercase"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"backgroundColor": "var(--info)"
}
},
{
"pseudo": "active",
"style": {
"color": "var(--neutral-30)"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "af159327f2d3303d712fe1d9e045451acc349d0f49c53288c14aee18c098e7ab"
}
}

View File

@ -0,0 +1,33 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderColor": "var(--info)",
"borderStyle": "solid",
"borderWidth": "1px",
"boxShadow": "none",
"color": "var(--info)",
"fontWeight": "normal",
"margin": "5px",
"textTransform": "uppercase",
"fill": "var(--info)"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {},
"100%": {
"backgroundColor": "var(--neutral-20)"
}
}
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "81e0a1fe1cf955f91b3c3a251e82d556391386a2cd03f12be279accaa7f1cb22"
}
}

View File

@ -0,0 +1,11 @@
{
"base": {
"style": {
"backgroundColor": "#555555",
"borderTopColor": "#00CC00",
"borderTopStyle": "solid",
"borderTopWidth": "4px",
"boxShadow": "0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "55f79eb06c970e5ccc7f683a9f0fb2b6c6a5c2855ed65977640a61e047f8bb00"
}
}

View File

@ -0,0 +1,25 @@
{
"base": {
"style": {
"backgroundColor": "var(--success)",
"borderStyle": "none",
"boxShadow": "none",
"margin": "5px",
"textTransform": "uppercase"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"backgroundColor": "var(--success)"
}
},
{
"pseudo": "active",
"style": {
"color": "var(--neutral-30)"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "c029a3e0079c7477837f5ce8bfda148bbcf4346cbcce34d9095455de9fe2649b"
}
}

View File

@ -0,0 +1,33 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderColor": "var(--success)",
"borderStyle": "solid",
"borderWidth": "1px",
"boxShadow": "none",
"color": "var(--success)",
"fontWeight": "normal",
"margin": "5px",
"textTransform": "uppercase",
"fill": "var(--success)"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {},
"100%": {
"backgroundColor": "var(--neutral-20)"
}
}
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "623c6e17e07439732a1d761ffa7df85a0c68bd6c72d7c7a9dd6192e119594a4d"
}
}

View File

@ -0,0 +1,11 @@
{
"base": {
"style": {
"backgroundColor": "#555555",
"borderTopColor": "#FFFF00",
"borderTopStyle": "solid",
"borderTopWidth": "4px",
"boxShadow": "0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "8e4e279dff92dff9a9da86a244ef9dd9b3185c23c3b2c0b4af0edec44d4ba4ce"
}
}

View File

@ -0,0 +1,25 @@
{
"base": {
"style": {
"backgroundColor": "var(--warning)",
"borderStyle": "none",
"boxShadow": "none",
"margin": "5px",
"textTransform": "uppercase"
}
},
"variants": [
{
"pseudo": "hover",
"style": {
"backgroundColor": "var(--warning)"
}
},
{
"pseudo": "active",
"style": {
"color": "var(--neutral-30)"
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "41a078694d651728b12be9cca2f5579fc7dbab04dd9ee64ebf9383bf804fb2a1"
}
}

View File

@ -0,0 +1,33 @@
{
"base": {
"style": {
"backgroundColor": "var(--neutral-10)",
"borderColor": "var(--warning)",
"borderStyle": "solid",
"borderWidth": "1px",
"boxShadow": "none",
"color": "var(--warning)",
"fontWeight": "normal",
"margin": "5px",
"textTransform": "uppercase",
"fill": "var(--warning)"
}
},
"variants": [
{
"pseudo": "hover",
"animation": {
"duration": "0.2s",
"direction": "normal",
"iterationCount": "1",
"timingFunction": "ease",
"keyframes": {
"0%": {},
"100%": {
"backgroundColor": "var(--neutral-20)"
}
}
}
}
]
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "96c44e672b2413c49e068f2fe0cdc9d8b2cd0e36c604d353adb5cb7f999d3abb"
}
}

View File

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

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "2c7a56b7ed39584481201711814a1516a7dc3f6916b2eb8dcfdae1cddfaa7c46"
}
}

View File

@ -0,0 +1,7 @@
{
"base": {
"style": {
"backgroundColor": "#EEEEEE "
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "6065cc67ac7b28cc4c8795723e00140c70ffe9c08e15c036f5faa7499a96bfef"
}
}

View File

@ -0,0 +1,7 @@
{
"base": {
"style": {
"backgroundColor": "#2B2B2B"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "96c44e672b2413c49e068f2fe0cdc9d8b2cd0e36c604d353adb5cb7f999d3abb"
}
}

View File

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

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "7953772c64e0080d92342a8ca287406ddebda3253b54c17dc9b32271828f98c3"
}
}

View File

@ -0,0 +1,7 @@
{
"base": {
"style": {
"backgroundColor": "#EEEEEE"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "63cdf8d36e393c6a546c0a4d81c92a8b87a9d5e66ec3f9da5b2e5878971ec1ea"
}
}

View File

@ -0,0 +1,9 @@
{
"base": {
"style": {
"backgroundColor": "#2F73BF",
"fontFamily": "Arial",
"fontSize": "12px"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "7d0938951c48c8268df585bafcfef1d818c1b2f3ec99e335095aba3f84788189"
}
}

View File

@ -0,0 +1,12 @@
{
"base": {
"style": {
"backgroundColor": "#FFFFFF",
"color": "#000000",
"fontFamily": "Arial",
"fontSize": "12px",
"fontWeight": "bold",
"textAlign": "center"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "b7d65cf3bb8d19578cd6d1174391a14001cb3f7a5dd0aa514c1014fb535c9b71"
}
}

View File

@ -0,0 +1,7 @@
{
"base": {
"style": {
"borderStyle": "none"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "769324b6f4ffeef8c25e6ad657dca34853732b06d78508960af6f5c4e616ec0b"
}
}

View File

@ -0,0 +1,9 @@
{
"base": {
"style": {
"borderColor": "#FF0000",
"borderStyle": "solid",
"borderWidth": "2px"
}
}
}

View File

@ -0,0 +1,16 @@
{
"scope": "G",
"version": 1,
"restricted": false,
"overridable": true,
"files": [
"style.json"
],
"attributes": {
"lastModification": {
"actor": "external",
"timestamp": "2025-04-08T09:28:16Z"
},
"lastModificationSignature": "b533d27339b0f078dc1d87ef14d64f686c5292d904623c079528a1095f3a518d"
}
}

View File

@ -0,0 +1,9 @@
{
"base": {
"style": {
"backgroundColor": "#FFFFFF",
"color": "#000000",
"fontFamily": "Arial"
}
}
}

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